Merge "Update article count when pages are moved"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 4 Nov 2014 06:25:07 +0000 (06:25 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 4 Nov 2014 06:25:07 +0000 (06:25 +0000)
405 files changed:
INSTALL
RELEASE-NOTES-1.25
api.php
composer.json
docs/database.txt
docs/export-0.10.xsd [new file with mode: 0644]
docs/export-demo.xml
docs/hooks.txt
docs/mwlogger.txt
includes/AutoLoader.php
includes/Block.php
includes/DefaultSettings.php
includes/Export.php
includes/GlobalFunctions.php
includes/Import.php
includes/Linker.php
includes/MediaWikiVersionFetcher.php
includes/MovePage.php
includes/PHPVersionError.php
includes/Title.php
includes/api/ApiBlock.php
includes/api/ApiClearHasMsg.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedRecentChanges.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryPagePropNames.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiResult.php
includes/api/ApiRevisionDelete.php
includes/api/ApiRollback.php
includes/api/ApiRsd.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/api/ApiWatch.php
includes/api/i18n/be-tarask.json [new file with mode: 0644]
includes/api/i18n/ce.json [new file with mode: 0644]
includes/api/i18n/cs.json [new file with mode: 0644]
includes/api/i18n/de.json [new file with mode: 0644]
includes/api/i18n/en.json
includes/api/i18n/es.json [new file with mode: 0644]
includes/api/i18n/fa.json [new file with mode: 0644]
includes/api/i18n/fr.json [new file with mode: 0644]
includes/api/i18n/he.json [new file with mode: 0644]
includes/api/i18n/hu.json [new file with mode: 0644]
includes/api/i18n/ia.json [new file with mode: 0644]
includes/api/i18n/it.json [new file with mode: 0644]
includes/api/i18n/ja.json [new file with mode: 0644]
includes/api/i18n/jam.json [new file with mode: 0644]
includes/api/i18n/lb.json [new file with mode: 0644]
includes/api/i18n/lv.json [new file with mode: 0644]
includes/api/i18n/mk.json [new file with mode: 0644]
includes/api/i18n/ms.json [new file with mode: 0644]
includes/api/i18n/nb.json [new file with mode: 0644]
includes/api/i18n/nl.json [new file with mode: 0644]
includes/api/i18n/pa.json [new file with mode: 0644]
includes/api/i18n/pl.json [new file with mode: 0644]
includes/api/i18n/pt.json [new file with mode: 0644]
includes/api/i18n/qqq.json
includes/api/i18n/ru.json [new file with mode: 0644]
includes/api/i18n/si.json [new file with mode: 0644]
includes/api/i18n/sv.json [new file with mode: 0644]
includes/api/i18n/tr.json [new file with mode: 0644]
includes/api/i18n/uk.json [new file with mode: 0644]
includes/api/i18n/vi.json [new file with mode: 0644]
includes/api/i18n/zh-hans.json [new file with mode: 0644]
includes/api/i18n/zh-hant.json [new file with mode: 0644]
includes/db/DatabaseMssql.php
includes/db/IORMTable.php
includes/db/ORMTable.php
includes/debug/MWDebug.php
includes/debug/logger/Logger.php
includes/debug/logger/NullSpi.php
includes/debug/logger/legacy/Logger.php [new file with mode: 0644]
includes/debug/logger/legacy/Spi.php [new file with mode: 0644]
includes/debug/logger/monolog/Handler.php
includes/debug/logger/monolog/Spi.php
includes/exception/UserNotLoggedIn.php
includes/filebackend/lockmanager/LockManager.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLTagFilter.php
includes/installer/i18n/lzh.json
includes/installer/i18n/nap.json
includes/installer/i18n/nl.json
includes/installer/i18n/sk.json
includes/installer/i18n/tl.json
includes/libs/ObjectFactory.php [new file with mode: 0644]
includes/limit.sh [changed mode: 0644->0755]
includes/logging/LogEventsList.php
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/parser/CoreTagHooks.php
includes/password/MWOldPassword.php
includes/password/ParameterizedPassword.php
includes/profiler/Profiler.php
includes/profiler/ProfilerMwprof.php [deleted file]
includes/profiler/ProfilerSimpleDB.php
includes/profiler/ProfilerSimpleText.php
includes/profiler/ProfilerSimpleTrace.php
includes/profiler/ProfilerSimpleUDP.php
includes/profiler/ProfilerStandard.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/skins/SkinApiTemplate.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/upload/UploadStash.php
index.php
languages/data/plurals-mediawiki.xml
languages/data/plurals.xml
languages/i18n/ar.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bcc.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.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/frr.json
languages/i18n/gsw.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/ia.json
languages/i18n/inh.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jam.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lrc.json
languages/i18n/lzh.json
languages/i18n/mhr.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/ms.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nl.json
languages/i18n/pam.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sah.json
languages/i18n/sd.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/th.json
languages/i18n/uk.json
languages/i18n/vi.json
languages/i18n/xal.json
languages/i18n/yi.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesAng.php
languages/messages/MessagesMai.php
load.php
maintenance/Maintenance.php
maintenance/cleanupBlocks.php [new file with mode: 0644]
maintenance/cleanupCaps.php
maintenance/dev/includes/php.sh [changed mode: 0644->0755]
maintenance/dev/includes/require-php.sh [changed mode: 0644->0755]
maintenance/dumpIterator.php
maintenance/generateSitemap.php
maintenance/importDump.php
maintenance/jsduck/categories.json
maintenance/moveBatch.php
maintenance/postgres/compare_schemas.pl [changed mode: 0644->0755]
maintenance/postgres/mediawiki_mysql2postgres.pl [changed mode: 0644->0755]
maintenance/renderDump.php
maintenance/storage/checkStorage.php
maintenance/storage/make-blobs [changed mode: 0644->0755]
maintenance/update.php
mw-config/index.php
resources/Resources.php
resources/lib/oojs-ui/i18n/ace.json
resources/lib/oojs-ui/i18n/af.json
resources/lib/oojs-ui/i18n/am.json
resources/lib/oojs-ui/i18n/arc.json
resources/lib/oojs-ui/i18n/az.json
resources/lib/oojs-ui/i18n/ba.json
resources/lib/oojs-ui/i18n/bcl.json
resources/lib/oojs-ui/i18n/be-tarask.json
resources/lib/oojs-ui/i18n/be.json
resources/lib/oojs-ui/i18n/bg.json
resources/lib/oojs-ui/i18n/bn.json
resources/lib/oojs-ui/i18n/bs.json
resources/lib/oojs-ui/i18n/ce.json
resources/lib/oojs-ui/i18n/ckb.json
resources/lib/oojs-ui/i18n/co.json
resources/lib/oojs-ui/i18n/cs.json
resources/lib/oojs-ui/i18n/cu.json
resources/lib/oojs-ui/i18n/cy.json
resources/lib/oojs-ui/i18n/da.json
resources/lib/oojs-ui/i18n/diq.json
resources/lib/oojs-ui/i18n/dsb.json
resources/lib/oojs-ui/i18n/egl.json
resources/lib/oojs-ui/i18n/eml.json
resources/lib/oojs-ui/i18n/eo.json
resources/lib/oojs-ui/i18n/eu.json
resources/lib/oojs-ui/i18n/fo.json
resources/lib/oojs-ui/i18n/frr.json
resources/lib/oojs-ui/i18n/fur.json
resources/lib/oojs-ui/i18n/he.json
resources/lib/oojs-ui/i18n/hi.json
resources/lib/oojs-ui/i18n/hsb.json
resources/lib/oojs-ui/i18n/id.json
resources/lib/oojs-ui/i18n/ie.json
resources/lib/oojs-ui/i18n/is.json
resources/lib/oojs-ui/i18n/it.json
resources/lib/oojs-ui/i18n/jv.json
resources/lib/oojs-ui/i18n/ka.json
resources/lib/oojs-ui/i18n/kk-cyrl.json
resources/lib/oojs-ui/i18n/km.json
resources/lib/oojs-ui/i18n/ko.json
resources/lib/oojs-ui/i18n/krc.json
resources/lib/oojs-ui/i18n/kw.json
resources/lib/oojs-ui/i18n/ky.json
resources/lib/oojs-ui/i18n/lmo.json
resources/lib/oojs-ui/i18n/lt.json
resources/lib/oojs-ui/i18n/lzh.json
resources/lib/oojs-ui/i18n/mg.json
resources/lib/oojs-ui/i18n/min.json
resources/lib/oojs-ui/i18n/ml.json
resources/lib/oojs-ui/i18n/mr.json
resources/lib/oojs-ui/i18n/nap.json
resources/lib/oojs-ui/i18n/nds-nl.json
resources/lib/oojs-ui/i18n/nds.json
resources/lib/oojs-ui/i18n/ne.json
resources/lib/oojs-ui/i18n/nn.json
resources/lib/oojs-ui/i18n/oc.json
resources/lib/oojs-ui/i18n/or.json
resources/lib/oojs-ui/i18n/pa.json
resources/lib/oojs-ui/i18n/pfl.json
resources/lib/oojs-ui/i18n/pms.json
resources/lib/oojs-ui/i18n/ps.json
resources/lib/oojs-ui/i18n/pt-br.json
resources/lib/oojs-ui/i18n/qu.json
resources/lib/oojs-ui/i18n/roa-tara.json
resources/lib/oojs-ui/i18n/sah.json
resources/lib/oojs-ui/i18n/scn.json
resources/lib/oojs-ui/i18n/sco.json
resources/lib/oojs-ui/i18n/sh.json
resources/lib/oojs-ui/i18n/si.json
resources/lib/oojs-ui/i18n/ta.json
resources/lib/oojs-ui/i18n/te.json
resources/lib/oojs-ui/i18n/tg-cyrl.json
resources/lib/oojs-ui/i18n/th.json
resources/lib/oojs-ui/i18n/tl.json
resources/lib/oojs-ui/i18n/tt-cyrl.json
resources/lib/oojs-ui/i18n/uz.json
resources/lib/oojs-ui/i18n/vec.json
resources/lib/oojs-ui/i18n/vi.json
resources/lib/oojs-ui/i18n/vo.json
resources/lib/oojs-ui/i18n/yo.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-apex.svg.css
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
resources/lib/oojs-ui/oojs-ui.js
resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
resources/src/mediawiki.action/templates/postEdit.html [new file with mode: 0644]
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki.skinning/elements.css [changed mode: 0755->0644]
resources/src/mediawiki.special/mediawiki.special.search.css
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.special/templates/thumbnail.html [new file with mode: 0644]
resources/src/mediawiki/mediawiki.confirmCloseWindow.js
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.htmlform.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.template.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.util.js
resources/src/mediawiki/templates/dialog.html [new file with mode: 0644]
tests/TestsAutoLoader.php
tests/frontend/Gruntfile.js
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/ImportTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/TestUser.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/api/query/ApiQueryContinueTest.php
tests/phpunit/includes/json/FormatJsonTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
tests/phpunit/includes/resourceloader/templates/template.html [new file with mode: 0644]
tests/phpunit/includes/resourceloader/templates/template2.html [new file with mode: 0644]
tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars [new file with mode: 0644]
tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
tests/phpunit/includes/specialpage/SpecialPageTestHelper.php [new file with mode: 0644]
tests/phpunit/languages/LanguageGvTest.php
tests/phpunit/languages/LanguageRuTest.php
tests/phpunit/languages/LanguageTlTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js [new file with mode: 0644]

diff --git a/INSTALL b/INSTALL
index e8731a1..70d8d53 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -6,7 +6,7 @@ Starting with MediaWiki 1.2.0, it's possible to install and configure the wiki
 "in-place", as long as you have the necessary prerequisites available.
 
 Required software:
-* Web server with PHP 5.3.2 or higher.
+* Web server with PHP 5.3.3 or higher.
 * A SQL server, the following types are supported
 ** MySQL 5.0.2 or higher
 ** PostgreSQL 8.3 or higher
index 029b36b..d75d1f5 100644 (file)
@@ -18,6 +18,9 @@ production.
   newly-generated token.
 
 === New features in 1.25 ===
+* (bug 62861) Updated plural rules to CLDR 26. Includes incompatible changes
+  for plural forms in Russian, Prussian, Tagalog, Manx and several languages
+  that fall back to Russian.
 * (bug 58139) ResourceLoaderFileModule now supports language fallback
   for 'languageScripts'.
 * Added a new hook, "ContentAlterParserOutput", to allow extensions to modify the
@@ -39,12 +42,24 @@ production.
     https://www.mediawiki.org/wiki/Manual:Skinning#Page_status_indicators
 * Edit tokens may now be time-limited: passing a maximum age to
   User::matchEditToken will reject any older tokens.
+* The debug logging internals have been overhauled, and are now using the
+  PSR-3 interfaces.
 
 === Bug fixes in 1.25 ===
 * (bug 71003) No additional code will be generated to try to load CSS-embedded
   SVG images in Internet Explorer 6 and 7, as they don't support them anyway.
 * (bug 67021) On Special:BookSources, corrected validation of ISBNs (both
   10- and 13-digit forms) containing "X".
+* Page moving was refactored into a MovePage class. As part of that:
+** The AbortMove hook was removed.
+** MovePageIsValidMove is for extensions to specify whether a page
+   cannot be moved for technical reasons, and should not be overriden.
+** MovePageCheckPermissions is for checking whether the given user is
+   allowed to make the move.
+** Title::moveNoAuth() was deprecated. Use the MovePage class instead.
+** Title::moveTo() was deprecated. Use the MovePage class instead.
+** Title::isValidMoveOperation() broken down into MovePage::isValidMove()
+   and MovePage::checkPermissions().
 
 === Action API changes in 1.25 ===
 * (bug 65403) XML tag highlighting is now only performed for formats
@@ -141,10 +156,15 @@ changes to languages because of Bugzilla reports.
 * The "temp" zone of the upload respository is now considered private. If it
   already exists (such as under the images/ directory), please make sure that
   the directory is not web readable (e.g. via a .htaccess file).
+* BREAKING CHANGE: In the XML dump format used by Special:Export and
+  dumpBackup.php, the <model> and <format> tags now apprear before the <text>
+  tag, instead of after the <text> and <sha1> tags.
+  The new schema version is 0.10, the new schema URI is
+  <https://www.mediawiki.org/xml/export-0.10.xsd>.
 
 == Compatibility ==
 
-MediaWiki 1.25 requires PHP 5.3.2 or later. There is experimental support for
+MediaWiki 1.25 requires PHP 5.3.3 or later. There is experimental support for
 HHVM 3.3.0.
 
 MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
diff --git a/api.php b/api.php
index 7974f15..74ee775 100644 (file)
--- a/api.php
+++ b/api.php
@@ -34,7 +34,7 @@
 define( 'MW_API', true );
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'api.php' );
index 3b18933..851ad41 100644 (file)
@@ -16,7 +16,7 @@
                "wiki": "https://www.mediawiki.org/"
        },
        "require": {
-               "php": ">=5.3.2",
+               "php": ">=5.3.3",
                "psr/log": "1.0.0"
        },
        "require-dev": {
index 735f26b..ba3045e 100644 (file)
@@ -159,10 +159,7 @@ $dbw->commit( __METHOD__ );
 
 Use of locking reads (e.g. the FOR UPDATE clause) is not advised. They
 are poorly implemented in InnoDB and will cause regular deadlock errors.
-It's also surprisingly easy to cripple the wiki with lock contention. If
-you must use them, define a new flag for $wgAntiLockFlags which allows
-them to be turned off, because we'll almost certainly need to do so on
-the Wikimedia cluster.
+It's also surprisingly easy to cripple the wiki with lock contention.
 
 Instead of locking reads, combine your existence checks into your write
 queries, by using an appropriate condition in the WHERE clause of an
diff --git a/docs/export-0.10.xsd b/docs/export-0.10.xsd
new file mode 100644 (file)
index 0000000..9d5d49e
--- /dev/null
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+       This is an XML Schema description of the format
+       output by MediaWiki's Special:Export system.
+
+       Version 0.2 adds optional basic file upload info support,
+       which is used by our OAI export/import submodule.
+
+       Version 0.3 adds some site configuration information such
+       as a list of defined namespaces.
+
+       Version 0.4 adds per-revision delete flags, log exports,
+       discussion threading data, a per-page redirect flag, and
+       per-namespace capitalization.
+
+       Version 0.5 adds byte count per revision.
+
+       Version 0.6 adds a separate namespace tag, and resolves the
+       redirect target and adds a separate sha1 tag for each revision.
+
+       Version 0.7 adds a unique identity constraint for both page and
+       revision identifiers. See also bug 4220.
+       Fix type for <ns> from "positiveInteger" to "nonNegativeInteger" to allow 0
+       Moves <logitem> to its right location.
+       Add parentid to revision.
+       Fix type for <id> within <contributor> to "nonNegativeInteger"
+
+       Version 0.8 adds support for a <model> and a <format> tag for
+       each revision. See contenthandler.txt.
+
+       Version 0.9 adds the database name to the site information.
+
+       Version 0.10 moved the <model> and <format> tags before the <text> tag.
+
+       The canonical URL to the schema document is:
+       http://www.mediawiki.org/xml/export-0.10.xsd
+
+       Use the namespace:
+       http://www.mediawiki.org/xml/export-0.10/
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+               xmlns:mw="http://www.mediawiki.org/xml/export-0.10/"
+               targetNamespace="http://www.mediawiki.org/xml/export-0.10/"
+               elementFormDefault="qualified">
+
+       <annotation>
+               <documentation xml:lang="en">
+                       MediaWiki's page export format
+               </documentation>
+       </annotation>
+
+       <!-- Need this to reference xml:lang -->
+       <import namespace="http://www.w3.org/XML/1998/namespace"
+                       schemaLocation="http://www.w3.org/2001/xml.xsd" />
+
+       <!-- Our root element -->
+       <element name="mediawiki" type="mw:MediaWikiType">
+               <!-- Page ID contraint, see bug 4220 -->
+               <unique name="PageIDConstraint">
+                       <selector xpath="mw:page" />
+                       <field xpath="mw:id" />
+               </unique>
+               <!-- Revision ID contraint, see bug 4220 -->
+               <unique name="RevIDConstraint">
+                       <selector xpath="mw:page/mw:revision" />
+                       <field xpath="mw:id" />
+               </unique>
+       </element>
+
+       <complexType name="MediaWikiType">
+               <sequence>
+                       <element name="siteinfo" type="mw:SiteInfoType"
+                                        minOccurs="0" maxOccurs="1" />
+                       <element name="page" type="mw:PageType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+                       <element name="logitem" type="mw:LogItemType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+               </sequence>
+               <attribute name="version" type="string" use="required" />
+               <attribute ref="xml:lang" use="required" />
+       </complexType>
+
+       <complexType name="SiteInfoType">
+               <sequence>
+                       <element name="sitename" type="string" minOccurs="0" />
+            <element name="dbname" type="string" minOccurs="0" />
+                       <element name="base" type="anyURI" minOccurs="0" />
+                       <element name="generator" type="string" minOccurs="0" />
+                       <element name="case" type="mw:CaseType" minOccurs="0" />
+                       <element name="namespaces" type="mw:NamespacesType" minOccurs="0" />
+               </sequence>
+       </complexType>
+
+       <simpleType name="CaseType">
+               <restriction base="NMTOKEN">
+                       <!-- Cannot have two titles differing only by case of first letter. -->
+                       <!-- Default behavior through 1.5, $wgCapitalLinks = true -->
+                       <enumeration value="first-letter" />
+
+                       <!-- Complete title is case-sensitive -->
+                       <!-- Behavior when $wgCapitalLinks = false -->
+                       <enumeration value="case-sensitive" />
+
+                       <!-- Cannot have non-case senstitive titles eg [[FOO]] == [[Foo]] -->
+                       <!-- Not yet implemented as of MediaWiki 1.18 -->
+                       <enumeration value="case-insensitive" />
+               </restriction>
+       </simpleType>
+
+       <simpleType name="DeletedFlagType">
+               <restriction base="NMTOKEN">
+                       <enumeration value="deleted" />
+               </restriction>
+       </simpleType>
+
+       <complexType name="NamespacesType">
+               <sequence>
+                       <element name="namespace" type="mw:NamespaceType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+               </sequence>
+       </complexType>
+
+       <complexType name="NamespaceType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute name="key" type="integer" />
+                               <attribute name="case" type="mw:CaseType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="RedirectType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute name="title" type="string" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <simpleType name="ContentModelType">
+               <restriction base="string">
+                       <pattern value="[a-zA-Z][-+./a-zA-Z0-9]*" />
+               </restriction>
+       </simpleType>
+
+       <simpleType name="ContentFormatType">
+               <restriction base="string">
+                       <pattern value="[a-zA-Z][-+.a-zA-Z0-9]*/[a-zA-Z][-+.a-zA-Z0-9]*" />
+               </restriction>
+       </simpleType>
+
+       <complexType name="PageType">
+               <sequence>
+                       <!-- Title in text form. (Using spaces, not underscores; with namespace ) -->
+                       <element name="title" type="string" />
+
+                       <!-- Namespace in canonical form -->
+                       <element name="ns" type="nonNegativeInteger" />
+
+                       <!-- optional page ID number -->
+                       <element name="id" type="positiveInteger" />
+
+                       <!-- flag if the current revision is a redirect -->
+                       <element name="redirect" type="mw:RedirectType" minOccurs="0" maxOccurs="1" />
+
+                       <!-- comma-separated list of string tokens, if present -->
+                       <element name="restrictions" type="string" minOccurs="0" />
+
+                       <!-- Zero or more sets of revision or upload data -->
+                       <choice minOccurs="0" maxOccurs="unbounded">
+                               <element name="revision" type="mw:RevisionType" />
+                               <element name="upload" type="mw:UploadType" />
+                       </choice>
+
+                       <!-- Zero or One sets of discussion threading data -->
+                       <element name="discussionthreadinginfo" minOccurs="0" maxOccurs="1" type="mw:DiscussionThreadingInfo" />
+               </sequence>
+       </complexType>
+
+       <complexType name="RevisionType">
+               <sequence>
+                       <element name="id" type="positiveInteger" />
+                       <element name="parentid" type="positiveInteger" minOccurs="0" />
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="minor" minOccurs="0" maxOccurs="1" />
+                       <element name="comment" type="mw:CommentType" minOccurs="0" maxOccurs="1" />
+                       <element name="model" type="mw:ContentModelType" />
+                       <element name="format" type="mw:ContentFormatType" />
+                       <element name="text" type="mw:TextType" />
+                       <element name="sha1" type="string" />
+               </sequence>
+       </complexType>
+
+       <complexType name="LogItemType">
+               <sequence>
+                       <element name="id" type="positiveInteger" />
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="comment" type="mw:CommentType" minOccurs="0" />
+                       <element name="type" type="string" />
+                       <element name="action" type="string" />
+                       <element name="text" type="mw:LogTextType" minOccurs="0" maxOccurs="1" />
+                       <element name="logtitle" type="string" minOccurs="0" maxOccurs="1" />
+                       <element name="params" type="mw:LogParamsType" minOccurs="0" maxOccurs="1" />
+               </sequence>
+       </complexType>
+
+       <complexType name="CommentType">
+               <simpleContent>
+                       <extension base="string">
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="TextType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute ref="xml:space" use="optional" default="preserve" />
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                               <!-- This isn't a good idea; we should be using "ID" instead of "NMTOKEN" -->
+                               <!-- However, "NMTOKEN" is strictest definition that is both compatible with existing -->
+                               <!-- usage ([0-9]+) and with the "ID" type. -->
+                               <attribute name="id" type="NMTOKEN" />
+                               <attribute name="bytes" use="optional" type="nonNegativeInteger" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="LogTextType">
+               <simpleContent>
+                       <extension base="string">
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="LogParamsType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute ref="xml:space" use="optional" default="preserve" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="ContributorType">
+               <sequence>
+                       <element name="username" type="string" minOccurs="0" />
+                       <element name="id" type="nonNegativeInteger" minOccurs="0" />
+
+                       <element name="ip" type="string" minOccurs="0" />
+               </sequence>
+               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+       </complexType>
+
+       <complexType name="UploadType">
+               <sequence>
+                       <!-- Revision-style data... -->
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="comment" type="string" minOccurs="0" />
+
+                       <!-- Filename. (Using underscores, not spaces. No 'File:' namespace marker.) -->
+                       <element name="filename" type="string" />
+
+                       <!-- URI at which this resource can be obtained -->
+                       <element name="src" type="anyURI" />
+
+                       <element name="size" type="positiveInteger" />
+
+                       <!-- TODO: add other metadata fields -->
+               </sequence>
+       </complexType>
+
+       <!-- Discussion threading data for LiquidThreads -->
+       <complexType name="DiscussionThreadingInfo">
+               <sequence>
+                       <element name="ThreadSubject" type="string" />
+                       <element name="ThreadParent" type="positiveInteger" />
+                       <element name="ThreadAncestor" type="positiveInteger" />
+                       <element name="ThreadPage" type="string" />
+                       <element name="ThreadID" type="positiveInteger" />
+                       <element name="ThreadAuthor" type="string" />
+                       <element name="ThreadEditStatus" type="string" />
+                       <element name="ThreadType" type="string" />
+               </sequence>
+       </complexType>
+
+</schema>
index fd47d13..e96bd6c 100644 (file)
@@ -1,4 +1,4 @@
-<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
   
   <!-- Optional global configuration info -->
   <siteinfo>
       </contributor>
       <minor />
       <comment>I have just one thing to say!</comment>
-      <text xml:space="preserve" bytes="25">A bunch of [[text]] here.</text>
-      <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="25">A bunch of [[text]] here.</text>
+      <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
     </revision>
     
     <revision>
         <ip>10.0.0.2</ip>
       </contributor>
       <comment>new!</comment>
-      <text xml:space="preserve" bytes="24">An earlier [[revision]].</text>
-      <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="24">An earlier [[revision]].</text>
+      <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
     </revision>
   </page>
   
       <timestamp>2001-01-15T14:03:00Z</timestamp>
       <contributor><ip>10.0.0.2</ip></contributor>
       <comment>hey</comment>
-      <text xml:space="preserve" bytes="47">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
-      <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="47">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
+      <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
     </revision>
   </page>
   
       <timestamp>2001-01-15T20:34:12Z</timestamp>
       <contributor><username>Foobar</username><id>42</id></contributor>
       <comment>My awesomeest image!</comment>
-      <text xml:space="preserve" bytes="52">This is an awesome little imgae. I lurves it. {{PD}}</text>
-      <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="52">This is an awesome little imgae. I lurves it. {{PD}}</text>
+      <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
     </revision>
     <upload>
       <timestamp>2001-01-15T20:34:12Z</timestamp>
index b71c347..7afbf1c 100644 (file)
@@ -260,13 +260,6 @@ $password: the password being submitted, not yet checked for validity
           a machine API rather than the HTML user interface.
 &$msg: the message identifier for abort reason (new in 1.18, not available before 1.18)
 
-'AbortMove': Allows to abort moving an article (title).
-$old: old title
-$nt: new title
-$user: user who is doing the move
-$err: error message
-$reason: the reason for the move (added in 1.13)
-
 'AbortNewAccount': Return false to cancel explicit account creation.
 $user: the User object about to be created (read-only, incomplete)
 &$msg: out parameter: HTML to display on abort
@@ -1835,6 +1828,18 @@ $db: The database object to be queried.
 &$opts: Options for the query.
 &$join_conds: Join conditions for the query.
 
+'MovePageCheckPermissions': Specify whether the user is allowed to move the page.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$user: User making the move
+$reason: string of the reason provided by the user
+$status: Status object to pass error messages to
+
+'MovePageIsValidMove': Specify whether a page can be moved for technical reasons.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$status: Status object to pass error messages to
+
 'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array
 and returning it for the skin to output. You can add items to the toolbox while
 still letting the skin make final decisions on skin-specific markup conventions
@@ -3000,6 +3005,11 @@ when UserMailer sends an email, with a bounce handling extension.
 $to: Array of MailAddress objects for the recipients
 &$returnPath: The return address string
 
+'LoginFormValidErrorMessages': Called in LoginForm when a function gets valid error
+messages. Allows to add additional error messages (except messages already in
+LoginForm::$validErrorMessages).
+&$messages Already added messages (inclusive messages from LoginForm::$validErrorMessages)
+
 'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be
 used to alter the SQL query which gets the list of wanted pages.
 &$wantedPages: WantedPagesPage object
index 9964e8b..aab9599 100644 (file)
@@ -24,6 +24,14 @@ instance. Alternately the MWLogger::registerProvider method can be called
 to inject an MWLoggerSpi instance into MWLogger and bypass the use of this
 configuration variable.
 
+The MWLoggerLegacySpi class implements a service provider to generate
+MWLoggerLegacyLogger instances. The MWLoggerLegacyLogger class implements the
+PSR-3 logger interface and provides output and configuration equivalent to the
+historic logging output of wfDebug, wfDebugLog, wfLogDBError and wfErrorLog.
+The MWLoggerLegacySpi class is the default service provider configured in
+DefaultSettings.php. It's usage should be transparent for users who are not
+ready or do not wish to switch to a alternate logging platform.
+
 The MWLoggerMonologSpi class implements a service provider to generate
 MWLogger instances that use the Monolog [1] logging library. See the PHP docs
 (or source) for MWLoggerMonologSpi for details on the configuration of this
@@ -39,6 +47,11 @@ a more feature rich logging configuration.
 : Service provider interface for MWLogger factories
 ; MWLoggerNullSpi
 : MWLoggerSpi for creating instances that discard all log events
+; MWLoggerLegacySpi
+: Service provider for creating MWLoggerLegacyLogger instances
+; MWLoggerLegacyLogger
+: PSR-3 logger that mimics the historical output and configuration of wfDebug,
+  wfErrorLog and other global logging functions.
 ; MWLoggerMonologSpi
 : MWLoggerSpi for creating instances backed by the monolog logging library
 ; MwLoggerMonologHandler
@@ -50,10 +63,8 @@ a more feature rich logging configuration.
 
 == Globals ==
 ; $wgMWLoggerDefaultSpi
-: Default service provider interface to use with MWLogger
-; $wgMWLoggerMonologSpiConfig
-: Configuration for MWLoggerMonologSpi describing how to configure the
-  Monolog logger instances.
+: Specification for creating the default service provider interface to use
+  with MWLogger
 
 [0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
 [1]: https://github.com/Seldaek/monolog
index 99b2d84..36a0fcb 100644 (file)
@@ -131,6 +131,7 @@ $wgAutoloadLocalClasses = array(
        'MWHookException' => 'includes/Hooks.php',
        'MWHttpRequest' => 'includes/HttpFunctions.php',
        'MWNamespace' => 'includes/MWNamespace.php',
+       'ObjectFactory' => 'includes/libs/ObjectFactory.php',
        'OutputPage' => 'includes/OutputPage.php',
        'PathRouter' => 'includes/PathRouter.php',
        'PathRouterPatternReplacer' => 'includes/PathRouter.php',
@@ -463,6 +464,8 @@ $wgAutoloadLocalClasses = array(
        # includes/debug
        'MWDebug' => 'includes/debug/MWDebug.php',
        'MWLogger' => 'includes/debug/logger/Logger.php',
+       'MWLoggerLegacyLogger' => 'includes/debug/logger/legacy/Logger.php',
+       'MWLoggerLegacySpi' => 'includes/debug/logger/legacy/Spi.php',
        'MWLoggerMonologHandler' => 'includes/debug/logger/monolog/Handler.php',
        'MWLoggerMonologProcessor' => 'includes/debug/logger/monolog/Processor.php',
        'MWLoggerMonologSpi' => 'includes/debug/logger/monolog/Spi.php',
@@ -865,7 +868,6 @@ $wgAutoloadLocalClasses = array(
 
        # includes/profiler
        'Profiler' => 'includes/profiler/Profiler.php',
-       'ProfilerMwprof' => 'includes/profiler/ProfilerMwprof.php',
        'ProfilerSimpleDB' => 'includes/profiler/ProfilerSimpleDB.php',
        'ProfilerSimpleText' => 'includes/profiler/ProfilerSimpleText.php',
        'ProfilerSimpleTrace' => 'includes/profiler/ProfilerSimpleTrace.php',
index 134ee6b..3c80035 100644 (file)
@@ -893,7 +893,7 @@ class Block {
        }
 
        /**
-        * Get/set whether the Block is a hardblock (affects logged-in users on a given IP/range
+        * Get/set whether the Block is a hardblock (affects logged-in users on a given IP/range)
         * @param bool|null $x
         * @return bool
         */
index d45e573..29d653d 100644 (file)
@@ -5219,38 +5219,21 @@ $wgDebugLogGroups = array();
 /**
  * Default service provider for creating MWLogger instances.
  *
- * This can either be the name of a class implementing the MWLoggerSpi
- * interface with a zero argument constructor or a callable that will return
- * an MWLoggerSpi instance. Alternately the MWLogger::registerProvider method
- * can be called to inject an MWLoggerSpi instance into MWLogger and bypass
- * the use of this configuration variable.
- *
- * @since 1.25
- * @var $wgMWLoggerDefaultSpi string|callable
- * @see MwLogger
- */
-$wgMWLoggerDefaultSpi = 'MWLoggerNullSpi';
-
-/**
- * Configuration for MWLoggerMonologSpi logger factory.
+ * The value should be an array suitable for use with
+ * ObjectFactory::getObjectFromSpec(). The created object is expected to
+ * implement the MWLoggerSpi interface. See ObjectFactory for additional
+ * details.
  *
- * Default configuration installs a null handler that will silently discard
- * all logging events.
+ * Alternately the MWLogger::registerProvider method can be called to inject
+ * an MWLoggerSpi instance into MWLogger and bypass the use of this
+ * configuration variable entirely.
  *
  * @since 1.25
- * @see MWLoggerMonologSpi
+ * @var array $wgMWLoggerDefaultSpi
+ * @see MwLogger
  */
-$wgMWLoggerMonologSpiConfig = array(
-       'loggers' => array(
-               '@default' => array(
-                       'handlers' => array( 'null' ),
-               ),
-       ),
-       'handlers' => array(
-               'null' => array(
-                       'class' => '\\Monolog\\Logger\\NullHandler',
-               ),
-       ),
+$wgMWLoggerDefaultSpi = array(
+       'class' => 'MWLoggerLegacySpi',
 );
 
 /**
@@ -7314,13 +7297,21 @@ $wgPagePropsHaveSortkey = true;
 $wgHttpsPort = 443;
 
 /**
- * Secret and algorithm for hmac-based key derivation function (fast,
+ * Secret for hmac-based key derivation function (fast,
  * cryptographically secure random numbers).
  * This should be set in LocalSettings.php, otherwise wgSecretKey will
  * be used.
+ * See also: $wgHKDFAlgorithm
  * @since 1.24
  */
 $wgHKDFSecret = false;
+
+/**
+ * Algorithm for hmac-based key derivation function (fast,
+ * cryptographically secure random numbers).
+ * See also: $wgHKDFSecret
+ * @since 1.24
+ */
 $wgHKDFAlgorithm = 'sha256';
 
 /**
index dee0a86..840e723 100644 (file)
@@ -69,7 +69,7 @@ class WikiExporter {
         * @return string
         */
        public static function schemaVersion() {
-               return "0.9";
+               return "0.10";
        }
 
        /**
@@ -693,6 +693,9 @@ class XmlDumpWriter {
                        $content_format = $content_handler->getDefaultFormat();
                }
 
+               $out .= "      " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
+               $out .= "      " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
+
                $text = '';
                if ( isset( $row->rev_deleted ) && ( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
                        $out .= "      " . Xml::element( 'text', array( 'deleted' => 'deleted' ) ) . "\n";
@@ -719,9 +722,6 @@ class XmlDumpWriter {
                        $out .= "      <sha1/>\n";
                }
 
-               $out .= "      " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
-               $out .= "      " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
-
                wfRunHooks( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
 
                $out .= "    </revision>\n";
index 11388e8..4ef731b 100644 (file)
@@ -30,7 +30,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 /**
  * Compatibility functions
  *
- * We support PHP 5.3.2 and up.
+ * We support PHP 5.3.3 and up.
  * Re-implementations of newer functions or functions in non-standard
  * PHP extensions may be included here.
  */
@@ -959,7 +959,7 @@ function wfMatchesDomainList( $url, $domains ) {
  *     - false: same as 'log'
  */
 function wfDebug( $text, $dest = 'all' ) {
-       global $wgDebugLogFile, $wgDebugRawPage, $wgDebugLogPrefix;
+       global $wgDebugRawPage, $wgDebugLogPrefix;
 
        if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
                return;
@@ -974,6 +974,7 @@ function wfDebug( $text, $dest = 'all' ) {
 
        $timer = wfDebugTimer();
        if ( $timer !== '' ) {
+               // Prepend elapsed request time and real memory usage to each line
                $text = preg_replace( '/[^\n]/', $timer . '\0', $text, 1 );
        }
 
@@ -981,13 +982,13 @@ function wfDebug( $text, $dest = 'all' ) {
                MWDebug::debugMsg( $text );
        }
 
-       if ( $wgDebugLogFile != '' ) {
-               # Strip unprintables; they can switch terminal modes when binary data
-               # gets dumped, which is pretty annoying.
-               $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $text );
-               $text = $wgDebugLogPrefix . $text;
-               wfErrorLog( $text, $wgDebugLogFile );
+       $ctx = array();
+       if ( $wgDebugLogPrefix !== '' ) {
+               $ctx['prefix'] = $wgDebugLogPrefix;
        }
+
+       $logger = MWLogger::getInstance( 'wfDebug' );
+       $logger->debug( rtrim( $text, "\n" ), $ctx );
 }
 
 /**
@@ -1068,8 +1069,6 @@ function wfDebugMem( $exact = false ) {
 function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
        global $wgDebugLogGroups;
 
-       $text = trim( $text ) . "\n";
-
        // Turn $dest into a string if it's a boolean (for b/c)
        if ( $dest === true ) {
                $dest = 'all';
@@ -1077,34 +1076,16 @@ function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
                $dest = 'private';
        }
 
-       if ( !isset( $wgDebugLogGroups[$logGroup] ) ) {
-               if ( $dest !== 'private' ) {
-                       wfDebug( "[$logGroup] $text", $dest );
-               }
-               return;
-       }
+       $text = trim( $text );
 
        if ( $dest === 'all' ) {
-               MWDebug::debugMsg( "[$logGroup] $text" );
-       }
-
-       $logConfig = $wgDebugLogGroups[$logGroup];
-       if ( $logConfig === false ) {
-               return;
-       }
-       if ( is_array( $logConfig ) ) {
-               if ( isset( $logConfig['sample'] ) && mt_rand( 1, $logConfig['sample'] ) !== 1 ) {
-                       return;
-               }
-               $destination = $logConfig['destination'];
-       } else {
-               $destination = strval( $logConfig );
+               MWDebug::debugMsg( "[{$logGroup}] {$text}\n" );
        }
 
-       $time = wfTimestamp( TS_DB );
-       $wiki = wfWikiID();
-       $host = wfHostname();
-       wfErrorLog( "$time $host $wiki: $text", $destination );
+       $logger = MWLogger::getInstance( $logGroup );
+       $logger->debug( $text, array(
+               'private' => ( $dest === 'private' ),
+       ) );
 }
 
 /**
@@ -1113,30 +1094,8 @@ function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
  * @param string $text Database error message.
  */
 function wfLogDBError( $text ) {
-       global $wgDBerrorLog, $wgDBerrorLogTZ;
-       static $logDBErrorTimeZoneObject = null;
-
-       if ( $wgDBerrorLog ) {
-               $host = wfHostname();
-               $wiki = wfWikiID();
-
-               if ( $wgDBerrorLogTZ && !$logDBErrorTimeZoneObject ) {
-                       $logDBErrorTimeZoneObject = new DateTimeZone( $wgDBerrorLogTZ );
-               }
-
-               // Workaround for https://bugs.php.net/bug.php?id=52063
-               // Can be removed when min PHP > 5.3.2
-               if ( $logDBErrorTimeZoneObject === null ) {
-                       $d = date_create( "now" );
-               } else {
-                       $d = date_create( "now", $logDBErrorTimeZoneObject );
-               }
-
-               $date = $d->format( 'D M j G:i:s T Y' );
-
-               $text = "$date\t$host\t$wiki\t" . trim( $text ) . "\n";
-               wfErrorLog( $text, $wgDBerrorLog );
-       }
+       $logger = MWLogger::getInstance( 'wfLogDBError' );
+       $logger->error( trim( $text ) );
 }
 
 /**
@@ -1194,58 +1153,10 @@ function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) {
  * @throws MWException
  */
 function wfErrorLog( $text, $file ) {
-       if ( substr( $file, 0, 4 ) == 'udp:' ) {
-               # Needs the sockets extension
-               if ( preg_match( '!^(tcp|udp):(?://)?\[([0-9a-fA-F:]+)\]:(\d+)(?:/(.*))?$!', $file, $m ) ) {
-                       // IPv6 bracketed host
-                       $host = $m[2];
-                       $port = intval( $m[3] );
-                       $prefix = isset( $m[4] ) ? $m[4] : false;
-                       $domain = AF_INET6;
-               } elseif ( preg_match( '!^(tcp|udp):(?://)?([a-zA-Z0-9.-]+):(\d+)(?:/(.*))?$!', $file, $m ) ) {
-                       $host = $m[2];
-                       if ( !IP::isIPv4( $host ) ) {
-                               $host = gethostbyname( $host );
-                       }
-                       $port = intval( $m[3] );
-                       $prefix = isset( $m[4] ) ? $m[4] : false;
-                       $domain = AF_INET;
-               } else {
-                       throw new MWException( __METHOD__ . ': Invalid UDP specification' );
-               }
-
-               // Clean it up for the multiplexer
-               if ( strval( $prefix ) !== '' ) {
-                       $text = preg_replace( '/^/m', $prefix . ' ', $text );
-
-                       // Limit to 64KB
-                       if ( strlen( $text ) > 65506 ) {
-                               $text = substr( $text, 0, 65506 );
-                       }
-
-                       if ( substr( $text, -1 ) != "\n" ) {
-                               $text .= "\n";
-                       }
-               } elseif ( strlen( $text ) > 65507 ) {
-                       $text = substr( $text, 0, 65507 );
-               }
-
-               $sock = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
-               if ( !$sock ) {
-                       return;
-               }
-
-               socket_sendto( $sock, $text, strlen( $text ), 0, $host, $port );
-               socket_close( $sock );
-       } else {
-               wfSuppressWarnings();
-               $exists = file_exists( $file );
-               $size = $exists ? filesize( $file ) : false;
-               if ( !$exists || ( $size !== false && $size + strlen( $text ) < 0x7fffffff ) ) {
-                       file_put_contents( $file, $text, FILE_APPEND );
-               }
-               wfRestoreWarnings();
-       }
+       $logger = MWLogger::getInstance( 'wfErrorLog' );
+       $logger->info( trim( $text ), array(
+               'destination' => $file,
+       ) );
 }
 
 /**
@@ -3798,7 +3709,7 @@ function wfWaitForSlaves(
        // Figure out which clusters need to be checked
        $lbs = array();
        if ( $cluster === '*' ) {
-               wfGetLBFactory()->forEachLB( function( LoadBalancer $lb ) use ( &$lbs ) {
+               wfGetLBFactory()->forEachLB( function ( LoadBalancer $lb ) use ( &$lbs ) {
                        $lbs[] = $lb;
                } );
        } elseif ( $cluster !== false ) {
@@ -3818,7 +3729,9 @@ function wfWaitForSlaves(
                        if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
                                continue; // assume no writes done
                        }
-                       $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
+                       // Use the empty string to not trigger selectDB() since the connection
+                       // may have been to a server that does not have a DB for the current wiki.
+                       $dbw = $lb->getConnection( DB_MASTER, array(), '' );
                        if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
                                continue; // no writes since the last wait
                        }
index 5319076..4eb8e97 100644 (file)
@@ -37,13 +37,21 @@ class WikiImporter {
        private $mNoticeCallback, $mDebug;
        private $mImportUploads, $mImageBasePath;
        private $mNoUpdates = false;
+       /** @var Config */
+       private $config;
 
        /**
         * Creates an ImportXMLReader drawing from the source provided
         * @param ImportStreamSource $source
+        * @param Config $config
         */
-       function __construct( ImportStreamSource $source ) {
+       function __construct( ImportStreamSource $source, Config $config = null ) {
                $this->reader = new XMLReader();
+               if ( !$config ) {
+                       wfDeprecated( __METHOD__ . ' without a Config instance', '1.25' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
+               $this->config = $config;
 
                if ( !in_array( 'uploadsource', stream_get_wrappers() ) ) {
                        stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
@@ -536,7 +544,7 @@ class WikiImporter {
         * @return bool|mixed
         */
        private function processLogItem( $logInfo ) {
-               $revision = new WikiRevision;
+               $revision = new WikiRevision( $this->config );
 
                $revision->setID( $logInfo['id'] );
                $revision->setType( $logInfo['type'] );
@@ -670,7 +678,7 @@ class WikiImporter {
         * @return bool|mixed
         */
        private function processRevision( $pageInfo, $revisionInfo ) {
-               $revision = new WikiRevision;
+               $revision = new WikiRevision( $this->config );
 
                if ( isset( $revisionInfo['id'] ) ) {
                        $revision->setID( $revisionInfo['id'] );
@@ -786,7 +794,7 @@ class WikiImporter {
         * @return mixed
         */
        private function processUpload( $pageInfo, $uploadInfo ) {
-               $revision = new WikiRevision;
+               $revision = new WikiRevision( $this->config );
                $text = isset( $uploadInfo['text'] ) ? $uploadInfo['text'] : '';
 
                $revision->setTitle( $pageInfo['_title'] );
@@ -847,8 +855,6 @@ class WikiImporter {
         * @return array|bool
         */
        private function processTitle( $text ) {
-               global $wgCommandLineMode;
-
                $workTitle = $text;
                $origTitle = Title::newFromText( $workTitle );
 
@@ -864,6 +870,7 @@ class WikiImporter {
                        $title = Title::newFromText( $workTitle );
                }
 
+               $commandLineMode = $this->config->get( 'CommandLineMode' );
                if ( is_null( $title ) ) {
                        # Invalid page title? Ignore the page
                        $this->notice( 'import-error-invalid', $workTitle );
@@ -874,11 +881,11 @@ class WikiImporter {
                } elseif ( !$title->canExist() ) {
                        $this->notice( 'import-error-special', $title->getPrefixedText() );
                        return false;
-               } elseif ( !$title->userCan( 'edit' ) && !$wgCommandLineMode ) {
+               } elseif ( !$title->userCan( 'edit' ) && !$commandLineMode ) {
                        # Do not import if the importing wiki user cannot edit this page
                        $this->notice( 'import-error-edit', $title->getPrefixedText() );
                        return false;
-               } elseif ( !$title->exists() && !$title->userCan( 'create' ) && !$wgCommandLineMode ) {
+               } elseif ( !$title->exists() && !$title->userCan( 'create' ) && !$commandLineMode ) {
                        # Do not import if the importing wiki user cannot create this page
                        $this->notice( 'import-error-create', $title->getPrefixedText() );
                        return false;
@@ -1093,6 +1100,13 @@ class WikiRevision {
        /** @var bool */
        private $mNoUpdates = false;
 
+       /** @var Config $config */
+       private $config;
+
+       public function __construct( Config $config ) {
+               $this->config = $config;
+       }
+
        /**
         * @param Title $title
         * @throws MWException
@@ -1608,8 +1622,7 @@ class WikiRevision {
         * @return bool|string
         */
        function downloadSource() {
-               global $wgEnableUploads;
-               if ( !$wgEnableUploads ) {
+               if ( !$this->config->get( 'EnableUploads' ) ) {
                        return false;
                }
 
index b4e4e2a..40ebaea 100644 (file)
@@ -219,7 +219,7 @@ class Linker {
 
                # If we don't know whether the page exists, let's find out.
                wfProfileIn( __METHOD__ . '-checkPageExistence' );
-               if ( !in_array( 'known', $options ) and !in_array( 'broken', $options ) ) {
+               if ( !in_array( 'known', $options ) && !in_array( 'broken', $options ) ) {
                        if ( $target->isKnown() ) {
                                $options[] = 'known';
                        } else {
index 17cb8aa..c3fb486 100644 (file)
@@ -19,7 +19,7 @@ class MediaWikiVersionFetcher {
                $defaultSettings = file_get_contents( __DIR__ . '/DefaultSettings.php' );
 
                $matches = array();
-               preg_match( "/wgVersion = '([0-9a-zA-Z\.]+)';/", $defaultSettings, $matches );
+               preg_match( "/wgVersion = '([0-9a-zA-Z\.\-]+)';/", $defaultSettings, $matches );
 
                if ( count( $matches ) !== 2 ) {
                        throw new RuntimeException( 'Could not extract the MediaWiki version from DefaultSettings.php' );
index beea776..e16f9ee 100644 (file)
@@ -42,6 +42,52 @@ class MovePage {
                $this->newTitle = $newTitle;
        }
 
+       public function checkPermissions( User $user, $reason ) {
+               $status = new Status();
+
+               $errors = wfMergeErrorArrays(
+                       $this->oldTitle->getUserPermissionsErrors( 'move', $user ),
+                       $this->oldTitle->getUserPermissionsErrors( 'edit', $user ),
+                       $this->newTitle->getUserPermissionsErrors( 'move-target', $user ),
+                       $this->newTitle->getUserPermissionsErrors( 'edit', $user )
+               );
+
+               // Convert into a Status object
+               if ( $errors ) {
+                       foreach ( $errors as $error ) {
+                               call_user_func_array( array( $status, 'fatal' ), $error );
+                       }
+               }
+
+               if ( EditPage::matchSummarySpamRegex( $reason ) !== false ) {
+                       // This is kind of lame, won't display nice
+                       $status->fatal( 'spamprotectiontext' );
+               }
+
+               # The move is allowed only if (1) the target doesn't exist, or
+               # (2) the target is a redirect to the source, and has no history
+               # (so we can undo bad moves right after they're done).
+
+               if ( $this->newTitle->getArticleID() ) { # Target exists; check for validity
+                       if ( !$this->isValidMoveTarget() ) {
+                               $status->fatal( 'articleexists' );
+                       }
+               } else {
+                       $tp = $this->newTitle->getTitleProtection();
+                       if ( $tp !== false ) {
+                               if ( !$user->isAllowed( $tp['permission'] ) ) {
+                                       $status->fatal( 'cantmove-titleprotected' );
+                               }
+                       }
+               }
+
+               wfRunHooks( 'MovePageCheckPermissions',
+                       array( $this->oldTitle, $this->newTitle, $user, $reason, $status )
+               );
+
+               return $status;
+       }
+
        /**
         * Does various sanity checks that the move is
         * valid. Only things based on the two titles
@@ -99,6 +145,9 @@ class MovePage {
                        $status->fatal( 'nonfile-cannot-move-to-file' );
                }
 
+               // Hook for extensions to say a title can't be moved for technical reasons
+               wfRunHooks( 'MovePageIsValidMove', array( $this->oldTitle, $this->newTitle, $status ) );
+
                return $status;
        }
 
@@ -126,6 +175,53 @@ class MovePage {
                return $status;
        }
 
+       /**
+        * Checks if $this can be moved to a given Title
+        * - Selects for update, so don't call it unless you mean business
+        *
+        * @since 1.25
+        * @return bool
+        */
+       protected function isValidMoveTarget() {
+               # Is it an existing file?
+               if ( $this->newTitle->inNamespace( NS_FILE ) ) {
+                       $file = wfLocalFile( $this->newTitle );
+                       if ( $file->exists() ) {
+                               wfDebug( __METHOD__ . ": file exists\n" );
+                               return false;
+                       }
+               }
+               # Is it a redirect with no history?
+               if ( !$this->newTitle->isSingleRevRedirect() ) {
+                       wfDebug( __METHOD__ . ": not a one-rev redirect\n" );
+                       return false;
+               }
+               # Get the article text
+               $rev = Revision::newFromTitle( $this->newTitle, false, Revision::READ_LATEST );
+               if ( !is_object( $rev ) ) {
+                       return false;
+               }
+               $content = $rev->getContent();
+               # Does the redirect point to the source?
+               # Or is it a broken self-redirect, usually caused by namespace collisions?
+               $redirTitle = $content ? $content->getRedirectTarget() : null;
+
+               if ( $redirTitle ) {
+                       if ( $redirTitle->getPrefixedDBkey() !== $this->oldTitle->getPrefixedDBkey() &&
+                               $redirTitle->getPrefixedDBkey() !== $this->newTitle->getPrefixedDBkey() ) {
+                               wfDebug( __METHOD__ . ": redirect points to other page\n" );
+                               return false;
+                       } else {
+                               return true;
+                       }
+               } else {
+                       # Fail safe (not a redirect after all. strange.)
+                       wfDebug( __METHOD__ . ": failsafe: database says " . $this->newTitle->getPrefixedDBkey() .
+                               " is a redirect, but it doesn't contain a valid redirect.\n" );
+                       return false;
+               }
+       }
+
        /**
         * @param User $user
         * @param string $reason
@@ -135,6 +231,8 @@ class MovePage {
        public function move( User $user, $reason, $createRedirect ) {
                global $wgCategoryCollation;
 
+               wfRunHooks( 'TitleMove', array( $this->oldTitle, $this->newTitle, $user ) );
+
                // If it is a file, move it first.
                // It is done before all other moving stuff is done because it's hard to revert.
                $dbw = wfGetDB( DB_MASTER );
@@ -274,7 +372,6 @@ class MovePage {
 
                wfRunHooks( 'TitleMoveComplete', array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason ) );
                return Status::newGood();
-
        }
 
        /**
index 5af818f..b061990 100644 (file)
@@ -40,7 +40,7 @@
  */
 function wfPHPVersionError( $type ) {
        $mwVersion = '1.25';
-       $minimumVersionPHP = '5.3.2';
+       $minimumVersionPHP = '5.3.3';
 
        $phpVersion = PHP_VERSION;
        $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
index 0efc94e..b97d36a 100644 (file)
@@ -2232,19 +2232,13 @@ class Title {
                } elseif ( $action == 'create' ) {
                        $title_protection = $this->getTitleProtection();
                        if ( $title_protection ) {
-                               if ( $title_protection['pt_create_perm'] == 'sysop' ) {
-                                       $title_protection['pt_create_perm'] = 'editprotected'; // B/C
-                               }
-                               if ( $title_protection['pt_create_perm'] == 'autoconfirmed' ) {
-                                       $title_protection['pt_create_perm'] = 'editsemiprotected'; // B/C
-                               }
-                               if ( $title_protection['pt_create_perm'] == ''
-                                       || !$user->isAllowed( $title_protection['pt_create_perm'] )
+                               if ( $title_protection['permission'] == ''
+                                       || !$user->isAllowed( $title_protection['permission'] )
                                ) {
                                        $errors[] = array(
                                                'titleprotected',
-                                               User::whoIs( $title_protection['pt_user'] ),
-                                               $title_protection['pt_reason']
+                                               User::whoIs( $title_protection['user'] ),
+                                               $title_protection['reason']
                                        );
                                }
                        }
@@ -2536,7 +2530,7 @@ class Title {
         * @return array|bool An associative array representing any existent title
         *   protection, or false if there's none.
         */
-       private function getTitleProtection() {
+       public function getTitleProtection() {
                // Can't protect pages in special namespaces
                if ( $this->getNamespace() < 0 ) {
                        return false;
@@ -2551,13 +2545,27 @@ class Title {
                        $dbr = wfGetDB( DB_SLAVE );
                        $res = $dbr->select(
                                'protected_titles',
-                               array( 'pt_user', 'pt_reason', 'pt_expiry', 'pt_create_perm' ),
+                               array(
+                                       'user' => 'pt_user',
+                                       'reason' => 'pt_reason',
+                                       'expiry' => 'pt_expiry',
+                                       'permission' => 'pt_create_perm'
+                               ),
                                array( 'pt_namespace' => $this->getNamespace(), 'pt_title' => $this->getDBkey() ),
                                __METHOD__
                        );
 
                        // fetchRow returns false if there are no rows.
-                       $this->mTitleProtection = $dbr->fetchRow( $res );
+                       $row = $dbr->fetchRow( $res );
+                       if ( $row ) {
+                               if ( $row['permission'] == 'sysop' ) {
+                                       $row['permission'] = 'editprotected'; // B/C
+                               }
+                               if ( $row['permission'] == 'autoconfirmed' ) {
+                                       $row['permission'] = 'editsemiprotected'; // B/C
+                               }
+                       }
+                       $this->mTitleProtection = $row;
                }
                return $this->mTitleProtection;
        }
@@ -2978,12 +2986,12 @@ class Title {
 
                                if ( $title_protection ) {
                                        $now = wfTimestampNow();
-                                       $expiry = $wgContLang->formatExpiry( $title_protection['pt_expiry'], TS_MW );
+                                       $expiry = $wgContLang->formatExpiry( $title_protection['expiry'], TS_MW );
 
                                        if ( !$expiry || $expiry > $now ) {
                                                // Apply the restrictions
                                                $this->mRestrictionsExpiry['create'] = $expiry;
-                                               $this->mRestrictions['create'] = explode( ',', trim( $title_protection['pt_create_perm'] ) );
+                                               $this->mRestrictions['create'] = explode( ',', trim( $title_protection['permission'] ) );
                                        } else { // Get rid of the old restrictions
                                                Title::purgeExpiredRestrictions();
                                                $this->mTitleProtection = false;
@@ -3579,10 +3587,12 @@ class Title {
        /**
         * Move this page without authentication
         *
+        * @deprecated since 1.25 use MovePage class instead
         * @param Title $nt The new page Title
         * @return array|bool True on success, getUserPermissionsErrors()-like array on failure
         */
        public function moveNoAuth( &$nt ) {
+               wfDeprecated( __METHOD__, '1.25' );
                return $this->moveTo( $nt, false );
        }
 
@@ -3590,10 +3600,9 @@ class Title {
         * Check whether a given move operation would be valid.
         * Returns true if ok, or a getUserPermissionsErrors()-like array otherwise
         *
-        * @todo finish moving this into MovePage
+        * @deprecated since 1.25, use MovePage's methods instead
         * @param Title $nt The new title
-        * @param bool $auth Indicates whether $wgUser's permissions
-        *  should be checked
+        * @param bool $auth Ignored
         * @param string $reason Is the log summary of the move, used for spam checking
         * @return array|bool True on success, getUserPermissionsErrors()-like array on failure
         */
@@ -3607,54 +3616,12 @@ class Title {
                }
 
                $mp = new MovePage( $this, $nt );
-               $errors = $mp->isValidMove()->getErrorsArray();
-
-               $newid = $nt->getArticleID();
-
-               if ( $auth ) {
-                       $errors = wfMergeErrorArrays( $errors,
-                               $this->getUserPermissionsErrors( 'move', $wgUser ),
-                               $this->getUserPermissionsErrors( 'edit', $wgUser ),
-                               $nt->getUserPermissionsErrors( 'move-target', $wgUser ),
-                               $nt->getUserPermissionsErrors( 'edit', $wgUser ) );
-               }
-
-               $match = EditPage::matchSummarySpamRegex( $reason );
-               if ( $match !== false ) {
-                       // This is kind of lame, won't display nice
-                       $errors[] = array( 'spamprotectiontext' );
-               }
-
-               $err = null;
-               if ( !wfRunHooks( 'AbortMove', array( $this, $nt, $wgUser, &$err, $reason ) ) ) {
-                       $errors[] = array( 'hookaborted', $err );
-               }
-
-               # The move is allowed only if (1) the target doesn't exist, or
-               # (2) the target is a redirect to the source, and has no history
-               # (so we can undo bad moves right after they're done).
+               $errors = wfMergeErrorArrays(
+                       $mp->isValidMove()->getErrorsArray(),
+                       $mp->checkPermissions( $wgUser, $reason )->getErrorsArray()
+               );
 
-               if ( 0 != $newid ) { # Target exists; check for validity
-                       if ( !$this->isValidMoveTarget( $nt ) ) {
-                               $errors[] = array( 'articleexists' );
-                       }
-               } else {
-                       $tp = $nt->getTitleProtection();
-                       $right = $tp['pt_create_perm'];
-                       if ( $right == 'sysop' ) {
-                               $right = 'editprotected'; // B/C
-                       }
-                       if ( $right == 'autoconfirmed' ) {
-                               $right = 'editsemiprotected'; // B/C
-                       }
-                       if ( $tp && !$wgUser->isAllowed( $right ) ) {
-                               $errors[] = array( 'cantmove-titleprotected' );
-                       }
-               }
-               if ( empty( $errors ) ) {
-                       return true;
-               }
-               return $errors;
+               return $errors ? : true;
        }
 
        /**
@@ -3679,7 +3646,7 @@ class Title {
        /**
         * Move a title to a new location
         *
-        * @todo Deprecate this in favor of MovePage
+        * @deprecated since 1.25, use the MovePage class instead
         * @param Title $nt The new title
         * @param bool $auth Indicates whether $wgUser's permissions
         *  should be checked
@@ -3701,8 +3668,6 @@ class Title {
                        $createRedirect = true;
                }
 
-               wfRunHooks( 'TitleMove', array( $this, $nt, $wgUser ) );
-
                $mp = new MovePage( $this, $nt );
                $status = $mp->move( $wgUser, $reason, $createRedirect );
                if ( $status->isOK() ) {
@@ -3838,7 +3803,7 @@ class Title {
         * Checks if $this can be moved to a given Title
         * - Selects for update, so don't call it unless you mean business
         *
-        * @todo move to MovePage
+        * @deprecated since 1.25, use MovePage's methods instead
         * @param Title $nt The new title to check
         * @return bool
         */
index 44565a8..dea43ba 100644 (file)
@@ -169,7 +169,7 @@ class ApiBlock extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
                                => 'apihelp-block-example-ip-simple',
index 8667a67..eb471ae 100644 (file)
@@ -42,7 +42,7 @@ class ApiClearHasMsg extends ApiBase {
                return false;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=clearhasmsg'
                                => 'apihelp-clearhasmsg-example-1',
index a2f33ea..ce256a6 100644 (file)
@@ -126,7 +126,7 @@ class ApiComparePages extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=compare&fromrev=1&torev=2'
                                => 'apihelp-compare-example-1',
index cfb6dab..89f8481 100644 (file)
@@ -200,7 +200,7 @@ class ApiCreateAccount extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=createaccount&name=testuser&password=test123'
                                => 'apihelp-createaccount-example-pass',
index e455f71..d8b5718 100644 (file)
@@ -214,7 +214,7 @@ class ApiDelete extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=delete&title=Main%20Page&token=123ABC'
                                => 'apihelp-delete-example-simple',
index f2bb273..269b016 100644 (file)
@@ -565,7 +565,7 @@ class ApiEditPage extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=edit&title=Test&summary=test%20summary&' .
                                'text=article%20content&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
index 911f454..15eb475 100644 (file)
@@ -106,7 +106,7 @@ class ApiEmailUser extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=emailuser&target=WikiSysop&text=Content&token=123ABC'
                                => 'apihelp-emailuser-example-email',
index 93903b5..eea10e9 100644 (file)
@@ -75,7 +75,7 @@ class ApiExpandTemplates extends ApiBase {
                                $this->logFeatureUsage( 'action=expandtemplates&generatexml' );
                        }
 
-                       $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
+                       $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
                        $dom = $wgParser->preprocessToDom( $params['text'] );
                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
                                $xml = $dom->saveXML();
@@ -96,7 +96,7 @@ class ApiExpandTemplates extends ApiBase {
                // if they didn't want any output except (probably) the parse tree,
                // then don't bother actually fully expanding it
                if ( $prop || $params['prop'] === null ) {
-                       $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
+                       $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
                        $frame = $wgParser->getPreprocessor()->newFrame();
                        $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, null, $frame );
                        if ( $params['prop'] === null ) {
@@ -159,7 +159,7 @@ class ApiExpandTemplates extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=expandtemplates&text={{Project:Sandbox}}'
                                => 'apihelp-expandtemplates-example-simple',
index 20f4d3d..ced5f0c 100644 (file)
@@ -199,7 +199,7 @@ class ApiFeedContributions extends ApiBase {
                return $ret;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=feedcontributions&user=Example'
                                => 'apihelp-feedcontributions-example-simple',
index 0d2fca6..d452bbd 100644 (file)
@@ -171,7 +171,7 @@ class ApiFeedRecentChanges extends ApiBase {
                return $ret;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=feedrecentchanges'
                                => 'apihelp-feedrecentchanges-example-simple',
index 84ee228..561ff3b 100644 (file)
@@ -249,7 +249,7 @@ class ApiFeedWatchlist extends ApiBase {
                return $ret;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=feedwatchlist'
                                => 'apihelp-feedwatchlist-example-default',
index 02147fa..61966e5 100644 (file)
@@ -139,7 +139,7 @@ class ApiFileRevert extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=filerevert&filename=Wiki.png&comment=Revert&' .
                                'archivename=20110305152740!Wiki.png&token=123ABC'
index 62705ef..913b8eb 100644 (file)
@@ -164,8 +164,8 @@ abstract class ApiFormatBase extends ApiBase {
                        $out->setPageTitle( $context->msg( 'api-format-title' ) );
 
                        $header = $context->msg( 'api-format-prettyprint-header' )
-                          ->params( $format, strtolower( $format ) )
-                          ->parseAsBlock();
+                               ->params( $format, strtolower( $format ) )
+                               ->parseAsBlock();
                        $out->addHTML(
                                Html::rawElement( 'div', array( 'class' => 'api-pretty-header' ),
                                        ApiHelp::fixHelpLinks( $header )
@@ -207,7 +207,7 @@ abstract class ApiFormatBase extends ApiBase {
                return $this->mBuffer;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&meta=siteinfo&siprop=namespaces&format=' . $this->getModuleName()
                                => array( 'apihelp-format-example-generic', $this->getFormat() )
index 9be2d92..fdde4bd 100644 (file)
@@ -60,7 +60,7 @@ class ApiHelp extends ApiBase {
                if ( $params['wrap'] ) {
                        $data = array(
                                'mime' => 'text/html',
-                               'help' => $help,
+                               'help' => $html,
                        );
                        $result->setSubelements( $data, 'help' );
                        $result->addValue( null, $this->getModuleName(), $data );
@@ -528,11 +528,11 @@ class ApiHelp extends ApiBase {
                                                        ->parse();
                                        }
 
-                                       if ( !$description && !$info ) {
-                                               $description[] = self::wrap(
+                                       if ( !array_filter( $description ) ) {
+                                               $description = array( self::wrap(
                                                        $context->msg( 'api-help-param-no-description' ),
                                                        'apihelp-empty'
-                                               );
+                                               ) );
                                        }
 
                                        // Add "deprecated" flag
@@ -650,7 +650,7 @@ class ApiHelp extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=help'
                                => 'apihelp-help-example-main',
index 6aa9c22..aba6921 100644 (file)
@@ -199,7 +199,7 @@ class ApiImageRotate extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=imagerotate&titles=File:Example.jpg&rotation=90&token=123ABC'
                                => 'apihelp-imagerotate-example-simple',
index 8b7802c..a134074 100644 (file)
@@ -60,7 +60,7 @@ class ApiImport extends ApiBase {
                        $this->dieStatus( $source );
                }
 
-               $importer = new WikiImporter( $source->value );
+               $importer = new WikiImporter( $source->value, $this->getConfig() );
                if ( isset( $params['namespace'] ) ) {
                        $importer->setTargetNamespace( $params['namespace'] );
                }
@@ -120,7 +120,7 @@ class ApiImport extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
                                'namespace=100&fullhistory=&token=123ABC'
index eae8ebc..cc4dee4 100644 (file)
@@ -184,7 +184,7 @@ class ApiLogin extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=login&lgname=user&lgpassword=password'
                                => 'apihelp-login-example-gettoken',
index bfdad34..bf81723 100644 (file)
@@ -46,7 +46,7 @@ class ApiLogout extends ApiBase {
                return false;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=logout'
                                => 'apihelp-logout-example-logout',
index bf26eee..f7588a3 100644 (file)
@@ -310,7 +310,7 @@ class ApiMain extends ApiBase {
                        // then there's an appropriate Vary header set by whatever set
                        // their non-default language.
                        wfDebug( __METHOD__ . ": downgrading cache mode 'public' to " .
-                          "'anon-public-user-private' due to uselang=user\n" );
+                               "'anon-public-user-private' due to uselang=user\n" );
                        $mode = 'anon-public-user-private';
                }
 
@@ -1157,7 +1157,7 @@ class ApiMain extends ApiBase {
        }
 
        /** @see ApiBase::getExamplesMessages() */
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=help'
                                => 'apihelp-help-example-main',
index db0fde3..c7f40c7 100644 (file)
@@ -72,9 +72,9 @@ class ApiMove extends ApiBase {
 
                // Move the page
                $toTitleExists = $toTitle->exists();
-               $retval = $fromTitle->moveTo( $toTitle, true, $params['reason'], !$params['noredirect'] );
-               if ( $retval !== true ) {
-                       $this->dieUsageMsg( reset( $retval ) );
+               $status = $this->movePage( $fromTitle, $toTitle, $params['reason'], !$params['noredirect'] );
+               if ( !$status->isOK() ) {
+                       $this->dieStatus( $status );
                }
 
                $r = array(
@@ -99,8 +99,8 @@ class ApiMove extends ApiBase {
                // Move the talk page
                if ( $params['movetalk'] && $fromTalk->exists() && !$fromTitle->isTalkPage() ) {
                        $toTalkExists = $toTalk->exists();
-                       $retval = $fromTalk->moveTo( $toTalk, true, $params['reason'], !$params['noredirect'] );
-                       if ( $retval === true ) {
+                       $status = $this->movePage( $fromTalk, $toTalk, $params['reason'], !$params['noredirect'] );
+                       if ( $status->isOK() ) {
                                $r['talkfrom'] = $fromTalk->getPrefixedText();
                                $r['talkto'] = $toTalk->getPrefixedText();
                                if ( $toTalkExists ) {
@@ -108,9 +108,9 @@ class ApiMove extends ApiBase {
                                }
                        } else {
                                // We're not gonna dieUsage() on failure, since we already changed something
-                               $parsed = $this->parseMsg( reset( $retval ) );
-                               $r['talkmove-error-code'] = $parsed['code'];
-                               $r['talkmove-error-info'] = $parsed['info'];
+                               $error = $this->getErrorFromStatus( $status );
+                               $r['talkmove-error-code'] = $error[0];
+                               $r['talkmove-error-info'] = $error[1];
                        }
                }
 
@@ -147,6 +147,28 @@ class ApiMove extends ApiBase {
                $result->addValue( null, $this->getModuleName(), $r );
        }
 
+       /**
+        * @param Title $from
+        * @param Title $to
+        * @param string $reason
+        * @param bool $createRedirect
+        * @return Status
+        */
+       protected function movePage( Title $from, Title $to, $reason, $createRedirect ) {
+               $mp = new MovePage( $from, $to );
+               $valid = $mp->isValidMove();
+               if ( !$valid->isOK() ) {
+                       return $valid;
+               }
+
+               $permStatus = $mp->checkPermissions( $this->getUser(), $reason );
+               if ( !$permStatus->isOK() ) {
+                       return $permStatus;
+               }
+
+               return $mp->move( $this->getUser(), $reason, $createRedirect );
+       }
+
        /**
         * @param Title $fromTitle
         * @param Title $toTitle
@@ -224,7 +246,7 @@ class ApiMove extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
                                'reason=Misspelled%20title&movetalk=&noredirect='
index 4c72677..8fa495c 100644 (file)
@@ -91,7 +91,7 @@ class ApiOpenSearch extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=opensearch&search=Te'
                                => 'apihelp-opensearch-example-te',
index c804563..8ef0629 100644 (file)
@@ -161,7 +161,7 @@ class ApiOptions extends ApiBase {
                return 'https://www.mediawiki.org/wiki/API:Options';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=options&reset=&token=123ABC'
                                => 'apihelp-options-example-reset',
index ab705b2..db5eb52 100644 (file)
@@ -669,6 +669,10 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Populate this PageSet from a rowset returned from the database
+        *
+        * Note that the query result must include the columns returned by
+        * $this->getPageTableFields().
+        *
         * @param DatabaseBase $db
         * @param ResultWrapper $queryResult Query result object
         */
index d07907f..07670f6 100644 (file)
@@ -385,7 +385,7 @@ class ApiParamInfo extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=paraminfo&modules=parse|phpfm|query+allpages|query+siteinfo'
                                => 'apihelp-paraminfo-example-1',
index d25c87a..2bf1677 100644 (file)
@@ -376,7 +376,7 @@ class ApiParse extends ApiBase {
                                $this->dieUsage( "generatexml is only supported for wikitext content", "notwikitext" );
                        }
 
-                       $wgParser->startExternalParse( $titleObj, $popts, OT_PREPROCESS );
+                       $wgParser->startExternalParse( $titleObj, $popts, Parser::OT_PREPROCESS );
                        $dom = $wgParser->preprocessToDom( $this->content->getNativeData() );
                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
                                $xml = $dom->saveXML();
@@ -721,7 +721,7 @@ class ApiParse extends ApiBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=parse&page=Project:Sandbox'
                                => 'apihelp-parse-example-page',
index 01bc568..3684461 100644 (file)
@@ -90,7 +90,7 @@ class ApiPatrol extends ApiBase {
                return 'patrol';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=patrol&token=123ABC&rcid=230672766'
                                => 'apihelp-patrol-example-rcid',
index f5786e8..ae7d42b 100644 (file)
@@ -179,7 +179,7 @@ class ApiProtect extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=protect&title=Main%20Page&token=123ABC&' .
                                'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never'
index a69a0d5..ec55137 100644 (file)
@@ -144,7 +144,7 @@ class ApiPurge extends ApiBase {
                return $result;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=purge&titles=Main_Page|API'
                                => 'apihelp-purge-example-simple',
index cf63a7d..a091663 100644 (file)
@@ -607,7 +607,7 @@ class ApiQuery extends ApiBase {
                return true;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=revisions&meta=siteinfo&' .
                                'titles=Main%20Page&rvprop=user|comment&continue='
index 36c2088..672c234 100644 (file)
@@ -191,7 +191,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=allcategories&acprop=size'
                                => 'apihelp-query+allcategories-example-size',
index 95ad6ef..725b782 100644 (file)
@@ -376,7 +376,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
        private $propertyFilter = array( 'archivename', 'thumbmime', 'uploadwarning' );
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=allimages&aifrom=B'
                                => 'apihelp-query+allimages-example-B',
index 075d199..a70d019 100644 (file)
@@ -280,7 +280,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                return $allowedParams;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                $p = $this->getModulePrefix();
                $name = $this->getModuleName();
                $path = $this->getModulePath();
index 7e0ceff..98552ba 100644 (file)
@@ -235,7 +235,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&meta=allmessages&amprefix=ipb-'
                                => 'apihelp-query+allmessages-example-ipb',
index d7d71b3..a85c9c9 100644 (file)
@@ -299,7 +299,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=allpages&apfrom=B'
                                => 'apihelp-query+allpages-example-B',
index d9a173d..1c3f9fb 100644 (file)
@@ -362,7 +362,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=allusers&aufrom=Y'
                                => 'apihelp-query+allusers-example-Y',
index a0786b0..5e17a5c 100644 (file)
@@ -550,7 +550,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                return $retval;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                static $examples = array(
                        'backlinks' => array(
                                'action=query&list=backlinks&bltitle=Main%20Page'
index 7804dbf..b4752ae 100644 (file)
@@ -389,7 +389,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                return $ret;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                $settings = self::$settings[$this->getModuleName()];
                $name = $this->getModuleName();
                $path = $this->getModulePath();
index b1581f3..998cc91 100644 (file)
@@ -70,6 +70,10 @@ abstract class ApiQueryBase extends ApiBase {
        /**
         * Override this method to request extra fields from the pageSet
         * using $pageSet->requestField('fieldName')
+        *
+        * Note this only makes sense for 'prop' modules, as 'list' and 'meta'
+        * modules should not be using the pageset.
+        *
         * @param ApiPageSet $pageSet
         */
        public function requestExtraData( $pageSet ) {
index 159b1c8..5c44173 100644 (file)
@@ -341,7 +341,7 @@ class ApiQueryBlocks extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=blocks'
                                => 'apihelp-query+blocks-example-simple',
index 7518dad..fcfddd6 100644 (file)
@@ -218,7 +218,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=categories&titles=Albert%20Einstein'
                                => 'apihelp-query+categories-example-simple',
index 8f9b229..5c67ebf 100644 (file)
@@ -109,7 +109,7 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar'
                                => 'apihelp-query+categoryinfo-example-simple',
index 5b4a766..a6fc223 100644 (file)
@@ -47,6 +47,15 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                $this->run( $resultPageSet );
        }
 
+       /**
+        * @param string $hexSortkey
+        * @return bool
+        */
+       private function validateHexSortkey( $hexSortkey ) {
+               // A hex sortkey has an unbound number of 2 letter pairs
+               return preg_match( '/^(?:[a-fA-F0-9]{2})*$/', $hexSortkey );
+       }
+
        /**
         * @param ApiPageSet $resultPageSet
         * @return void
@@ -128,6 +137,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                $queryTypes = array_slice( $queryTypes, $contTypeIndex );
 
                                // Add a WHERE clause for sortkey and from
+                               $this->dieContinueUsageIf( !$this->validateHexSortkey( $cont[1] ) );
                                // pack( "H*", $foo ) is used to convert hex back to binary
                                $escSortkey = $this->getDB()->addQuotes( pack( 'H*', $cont[1] ) );
                                $from = intval( $cont[2] );
@@ -143,6 +153,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                if ( $params['startsortkeyprefix'] !== null ) {
                                        $startsortkey = Collation::singleton()->getSortkey( $params['startsortkeyprefix'] );
                                } elseif ( $params['starthexsortkey'] !== null ) {
+                                       if ( !$this->validateHexSortkey( $params['starthexsortkey'] ) ) {
+                                               $this->dieUsage( 'The starthexsortkey provided is not valid', 'bad_starthexsortkey' );
+                                       }
                                        $startsortkey = pack( 'H*', $params['starthexsortkey'] );
                                } else {
                                        $this->logFeatureUsage( 'list=categorymembers&cmstartsortkey' );
@@ -151,6 +164,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                if ( $params['endsortkeyprefix'] !== null ) {
                                        $endsortkey = Collation::singleton()->getSortkey( $params['endsortkeyprefix'] );
                                } elseif ( $params['endhexsortkey'] !== null ) {
+                                       if ( !$this->validateHexSortkey( $params['endhexsortkey'] ) ) {
+                                               $this->dieUsage( 'The endhexsortkey provided is not valid', 'bad_endhexsortkey' );
+                                       }
                                        $endsortkey = pack( 'H*', $params['endhexsortkey'] );
                                } else {
                                        $this->logFeatureUsage( 'list=categorymembers&cmendsortkey' );
@@ -363,7 +379,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                return $ret;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=categorymembers&cmtitle=Category:Physics'
                                => 'apihelp-query+categorymembers-example-simple',
index b31b14b..7e76db2 100644 (file)
@@ -242,7 +242,7 @@ class ApiQueryContributors extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=contributors&titles=Main_Page'
                                => 'apihelp-query+contributors-example-simple',
index 9d34724..4a5f5fd 100644 (file)
@@ -495,7 +495,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
                                'drprop=user|comment|content'
index 763c306..010f8d5 100644 (file)
@@ -181,7 +181,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles'
                                => 'apihelp-query+duplicatefiles-example-simple',
index 9836352..e77355b 100644 (file)
@@ -216,7 +216,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                }
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=exturlusage&euquery=www.mediawiki.org'
                                => 'apihelp-query+exturlusage-example-simple',
index b9a4263..6ddb6c8 100644 (file)
@@ -126,7 +126,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=extlinks&titles=Main%20Page'
                                => 'apihelp-query+extlinks-example-simple',
index cb5af2f..39c5902 100644 (file)
@@ -89,7 +89,7 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                ) ) );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&meta=filerepoinfo&friprop=apiurl|name|displayname'
                                => 'apihelp-query+filerepoinfo-example-simple',
index 415cb3d..6b92603 100644 (file)
@@ -288,7 +288,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=filearchive'
                                => 'apihelp-query+filearchive-example-simple',
index 23f6477..a2af124 100644 (file)
@@ -197,7 +197,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks'
                                => 'apihelp-query+iwbacklinks-example-simple',
index fb398dd..c1208cb 100644 (file)
@@ -179,7 +179,7 @@ class ApiQueryIWLinks extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=iwlinks&titles=Main%20Page'
                                => 'apihelp-query+iwlinks-example-simple',
index 18da1e6..cfd06f1 100644 (file)
@@ -749,7 +749,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo'
                                => 'apihelp-query+imageinfo-example-simple',
index e23ce45..029d945 100644 (file)
@@ -162,7 +162,7 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=images&titles=Main%20Page'
                                => 'apihelp-query+images-example-simple',
index 3a924b0..7ecb429 100644 (file)
@@ -821,7 +821,7 @@ class ApiQueryInfo extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=info&titles=Main%20Page'
                                => 'apihelp-query+info-example-simple',
index a3a285b..b41b4b7 100644 (file)
@@ -196,7 +196,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=langbacklinks&lbltitle=Test&lbllang=fr'
                                => 'apihelp-query+langbacklinks-example-simple',
index 2b555d3..2d03347 100644 (file)
@@ -175,7 +175,7 @@ class ApiQueryLangLinks extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=langlinks&titles=Main%20Page&redirects='
                                => 'apihelp-query+langlinks-example-simple',
index d654550..3bd3714 100644 (file)
@@ -207,7 +207,7 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                $name = $this->getModuleName();
                $path = $this->getModulePath();
 
index eb5ca4f..917332b 100644 (file)
@@ -551,7 +551,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                return $ret;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=logevents'
                                => 'apihelp-query+logevents-example-simple',
index e4a5002..026f061 100644 (file)
@@ -96,7 +96,7 @@ class ApiQueryPagePropNames extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=pagepropnames'
                                => 'apihelp-query+pagepropnames-example-simple',
index 130b829..269afb1 100644 (file)
@@ -134,7 +134,7 @@ class ApiQueryPageProps extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=pageprops&titles=Category:Foo'
                                => 'apihelp-query+pageprops-example-simple',
index 1e9bc4d..6ffe0ae 100644 (file)
@@ -160,7 +160,7 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
                                => 'apihelp-query+pageswithprop-example-simple',
index 2694067..3c90acc 100644 (file)
@@ -100,7 +100,7 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                        );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=prefixsearch&pssearch=meaning'
                                => 'apihelp-query+prefixsearch-example-simple',
index 098bfc7..f1e6d01 100644 (file)
@@ -224,7 +224,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=protectedtitles'
                                => 'apihelp-query+protectedtitles-example-simple',
index 2da5777..74586bb 100644 (file)
@@ -158,7 +158,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=querypage&qppage=Ancientpages'
                                => 'apihelp-query+querypage-example-ancientpages',
index f4061e7..282f498 100644 (file)
@@ -165,7 +165,7 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=random&rnnamespace=0&rnlimit=2'
                                => 'apihelp-query+random-example-simple',
index a620a9f..e20380e 100644 (file)
@@ -703,7 +703,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=recentchanges'
                                => 'apihelp-query+recentchanges-example-simple',
index d547929..f5ad9d0 100644 (file)
@@ -558,7 +558,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        $wgParser->startExternalParse(
                                                $title,
                                                ParserOptions::newFromContext( $this->getContext() ),
-                                               OT_PREPROCESS
+                                               Parser::OT_PREPROCESS
                                        );
                                        $dom = $wgParser->preprocessToDom( $t );
                                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
@@ -775,7 +775,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=revisions&titles=API|Main%20Page&' .
                                'rvprop=timestamp|user|comment|content'
index 7d07f57..cc9f9aa 100644 (file)
@@ -331,7 +331,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                return $params;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=search&srsearch=meaning'
                                => 'apihelp-query+search-example-simple',
index 068418d..18bbc5a 100644 (file)
@@ -834,7 +834,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
                                => 'apihelp-query+siteinfo-example-simple',
index 21b58af..be6f669 100644 (file)
@@ -113,7 +113,7 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567'
                                => 'apihelp-query+stashimageinfo-example-simple',
index d1e6e28..f3b2652 100644 (file)
@@ -158,7 +158,7 @@ class ApiQueryTags extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=tags&tgprop=displayname|description|hitcount'
                                => 'apihelp-query+tags-example-simple',
index 10d62cb..41f7ee7 100644 (file)
@@ -524,7 +524,7 @@ class ApiQueryContributions extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=usercontribs&ucuser=Example'
                                => 'apihelp-query+usercontribs-example-user',
index f9eb677..fed5a33 100644 (file)
@@ -256,7 +256,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&meta=userinfo'
                                => 'apihelp-query+userinfo-example-simple',
index 6d14523..db8cc1c 100644 (file)
@@ -314,7 +314,7 @@ class ApiQueryUsers extends ApiQueryBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=users&ususers=Example&usprop=groups|editcount|gender'
                                => 'apihelp-query+users-example-simple',
index bb6e59a..4059ff8 100644 (file)
@@ -519,7 +519,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=watchlist'
                                => 'apihelp-query+watchlist-example-simple',
index 71ce27f..ae3596d 100644 (file)
@@ -175,7 +175,7 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=query&list=watchlistraw'
                                => 'apihelp-query+watchlistraw-example-simple',
index 946977d..5bc2efb 100644 (file)
@@ -481,10 +481,14 @@ class ApiResult extends ApiBase {
                        $continue = explode( '||', $continue );
                        $this->dieContinueUsageIf( count( $continue ) !== 2 );
                        $this->generatorDone = ( $continue[0] === '-' );
+                       $skip = explode( '|', $continue[1] );
                        if ( !$this->generatorDone ) {
                                $this->generatorParams = explode( '|', $continue[0] );
+                       } else {
+                               // When the generator is complete, don't run any modules that
+                               // depend on it.
+                               $skip += $this->continueGeneratedModules;
                        }
-                       $skip = explode( '|', $continue[1] );
                }
 
                $this->continueAllModules = array();
index 5107455..783a39b 100644 (file)
@@ -203,7 +203,7 @@ class ApiRevisionDelete extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
                                'hide=content&token=123ABC'
index 471fb43..02e62a0 100644 (file)
@@ -190,7 +190,7 @@ class ApiRollback extends ApiBase {
                return $this->mTitleObj;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=rollback&title=Main%20Page&user=Example&token=123ABC' =>
                                'apihelp-rollback-example-simple',
index d32b0dd..91f3266 100644 (file)
@@ -51,7 +51,7 @@ class ApiRsd extends ApiBase {
                return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=rsd'
                                => 'apihelp-rsd-example-simple',
index ed3ea15..5d37e20 100644 (file)
@@ -230,7 +230,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                return $result;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
                                => 'apihelp-setnotificationtimestamp-example-all',
index fb41839..1af83ba 100644 (file)
@@ -97,7 +97,7 @@ class ApiUnblock extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=unblock&id=105'
                                => 'apihelp-unblock-example-id',
index 39b63f4..943ae8e 100644 (file)
@@ -121,7 +121,7 @@ class ApiUndelete extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page'
                                => 'apihelp-undelete-example-page',
index 8cf53d7..9ddadcb 100644 (file)
@@ -64,7 +64,7 @@ class ApiUpload extends ApiBase {
                                $this->dieUsage( 'No upload module set', 'nomodule' );
                        }
                } catch ( UploadStashException $e ) { // XXX: don't spam exception log
-                       $this->dieUsage( get_class( $e ) . ": " . $e->getMessage(), 'stasherror' );
+                       $this->handleStashException( $e );
                }
 
                // First check permission to upload
@@ -112,7 +112,7 @@ class ApiUpload extends ApiBase {
                                $result['imageinfo'] = $this->mUpload->getImageInfo( $this->getResult() );
                        }
                } catch ( UploadStashException $e ) { // XXX: don't spam exception log
-                       $this->dieUsage( get_class( $e ) . ": " . $e->getMessage(), 'stasherror' );
+                       $this->handleStashException( $e );
                }
 
                $this->getResult()->addValue( null, $this->getModuleName(), $result );
@@ -159,6 +159,8 @@ class ApiUpload extends ApiBase {
                        if ( $warnings && count( $warnings ) > 0 ) {
                                $result['warnings'] = $warnings;
                        }
+               } catch ( UploadStashException $e ) {
+                       $this->handleStashException( $e );
                } catch ( MWException $e ) {
                        $this->dieUsage( $e->getMessage(), 'stashfailed' );
                }
@@ -180,6 +182,8 @@ class ApiUpload extends ApiBase {
                try {
                        $result['filekey'] = $this->performStash();
                        $result['sessionkey'] = $result['filekey']; // backwards compatibility
+               } catch ( UploadStashException $e ) {
+                       $this->handleStashException( $e );
                } catch ( MWException $e ) {
                        $result['warnings']['stashfailed'] = $e->getMessage();
                }
@@ -205,6 +209,8 @@ class ApiUpload extends ApiBase {
                if ( $this->mParams['offset'] == 0 ) {
                        try {
                                $filekey = $this->performStash();
+                       } catch ( UploadStashException $e ) {
+                               $this->handleStashException( $e );
                        } catch ( MWException $e ) {
                                // FIXME: Error handling here is wrong/different from rest of this
                                $this->dieUsage( $e->getMessage(), 'stashfailed' );
@@ -282,7 +288,8 @@ class ApiUpload extends ApiBase {
                } catch ( MWException $e ) {
                        $message = 'Stashing temporary file failed: ' . get_class( $e ) . ' ' . $e->getMessage();
                        wfDebug( __METHOD__ . ' ' . $message . "\n" );
-                       throw new MWException( $message );
+                       $className = get_class( $e );
+                       throw new $className( $message );
                }
 
                return $fileKey;
@@ -576,6 +583,41 @@ class ApiUpload extends ApiBase {
                return $warnings;
        }
 
+       /**
+        * Handles a stash exception, giving a useful error to the user.
+        * @param Exception $e The exception we encountered.
+        */
+       protected function handleStashException( $e ) {
+               $exceptionType = get_class( $e );
+
+               switch ( $exceptionType ) {
+                       case 'UploadStashFileNotFoundException':
+                               $this->dieUsage( 'Could not find the file in the stash: ' . $e->getMessage(), 'stashedfilenotfound' );
+                               break;
+                       case 'UploadStashBadPathException':
+                               $this->dieUsage( 'File key of improper format or otherwise invalid: ' . $e->getMessage(), 'stashpathinvalid' );
+                               break;
+                       case 'UploadStashFileException':
+                               $this->dieUsage( 'Could not store upload in the stash: ' . $e->getMessage(), 'stashfilestorage' );
+                               break;
+                       case 'UploadStashZeroLengthFileException':
+                               $this->dieUsage( 'File is of zero length, and could not be stored in the stash: ' . $e->getMessage(), 'stashzerolength' );
+                               break;
+                       case 'UploadStashNotLoggedInException':
+                               $this->dieUsage( 'Not logged in: ' . $e->getMessage(), 'stashnotloggedin' );
+                               break;
+                       case 'UploadStashWrongOwnerException':
+                               $this->dieUsage( 'Wrong owner: ' . $e->getMessage(), 'stashwrongowner' );
+                               break;
+                       case 'UploadStashNoSuchKeyException':
+                               $this->dieUsage( 'No such filekey: ' . $e->getMessage(), 'stashnosuchfilekey' );
+                               break;
+                       default:
+                               $this->dieUsage( $exceptionType . ": " . $e->getMessage(), 'stasherror' );
+                               break;
+               }
+       }
+
        /**
         * Perform the actual upload. Returns a suitable result array on success;
         * dies on failure.
@@ -736,7 +778,7 @@ class ApiUpload extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=upload&filename=Wiki.png' .
                                '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
index 7e93c3e..cf8ed5a 100644 (file)
@@ -135,7 +135,7 @@ class ApiUserrights extends ApiBase {
                return $this->getUrUser( $params )->getName();
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC'
                                => 'apihelp-userrights-example-user',
index 3ba06e1..09638f3 100644 (file)
@@ -172,7 +172,7 @@ class ApiWatch extends ApiBase {
                return $result;
        }
 
-       public function getExamplesMessages() {
+       protected function getExamplesMessages() {
                return array(
                        'action=watch&titles=Main_Page&token=123ABC'
                                => 'apihelp-watch-example-watch',
diff --git a/includes/api/i18n/be-tarask.json b/includes/api/i18n/be-tarask.json
new file mode 100644 (file)
index 0000000..09d2086
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Red Winged Duck"
+               ]
+       },
+       "apihelp-main-param-action": "Дзеяньне для выкананьня."
+}
diff --git a/includes/api/i18n/ce.json b/includes/api/i18n/ce.json
new file mode 100644 (file)
index 0000000..1eb7109
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Умар"
+               ]
+       },
+       "apihelp-userrights-param-userid": "Декъашхочун ID."
+}
diff --git a/includes/api/i18n/cs.json b/includes/api/i18n/cs.json
new file mode 100644 (file)
index 0000000..a0751b8
--- /dev/null
@@ -0,0 +1,87 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mormegil"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page Dokumentace]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete na stránce https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Jaká akce se má provést.",
+       "apihelp-main-param-format": "Formát výstupu.",
+       "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „maxlag“ s hlášením typu „Waiting for $host: $lag seconds lagged“.<br />Více informací najdete v [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Maxlag_parameter příručce].",
+       "apihelp-main-param-smaxage": "Nastaví hlavičku s-maxage na uvedený počet sekund. Chyby se nekešují nikdy.",
+       "apihelp-main-param-maxage": "Nastaví hlavičku max-age na uvedený počet sekund. Chyby se nekešují nikdy.",
+       "apihelp-main-param-assert": "Ověřit, že je uživatel přihlášen, pokud je nastaveno na „user“, nebo že má uživatelské oprávnění bot, pokud je nastaveno na „bot“.",
+       "apihelp-main-param-requestid": "Libovolná zde uvedená hodnota bude zahrnuta v odpovědi. Lze použít pro rozlišení požadavků.",
+       "apihelp-main-param-servedby": "Zahrnout do odpovědi název hostitele, který požadavek obsloužil.",
+       "apihelp-main-param-curtimestamp": "Zahrnout do odpovědi aktuální časové razítko.",
+       "apihelp-main-param-origin": "Pokud k API přistupujete pomocí mezidoménového AJAXového požadavku (CORS), nastavte tento parametr na doménu původu. Musí být součástí všech předběžných požadavků, takže musí být součástí URI požadavku (nikoli těla POSTu). Hodnota musí přesně odpovídat jednomu z původů v hlavičce Origin:, takže musí být nastavena na něco jako http://en.wikipedia.org nebo https://meta.wikimedia.org. Pokud parametr neodpovídá hlavičce Origin:, bude vrácena odpověď 403. Pokud parametr odpovídá hlavičce Origin: a tento původ je na bílé listině, bude nastavena hlavička Access-Control-Allow-Origin.",
+       "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Seznam kódů lze načíst z [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]] nebo uveďte „user“ pro použití předvoleného jazyka aktuálního uživatele.",
+       "apihelp-help-description": "Zobrazuje nápovědu k uvedeným modulům.",
+       "apihelp-help-param-modules": "Moduly, pro které se má zobrazit nápověda (hodnoty parametrů action= a format= nebo „main“). Submoduly lze zadávat pomocí „+“.",
+       "apihelp-help-param-submodules": "Zahrnout nápovědu pro submoduly uvedeného modulu.",
+       "apihelp-help-param-recursivesubmodules": "Zahrnout nápovědu pro submoduly rekurzivně.",
+       "apihelp-help-param-helpformat": "Formát výstupu nápovědy.",
+       "apihelp-help-param-wrap": "Obalit výstup do standardní struktury API odpovědi.",
+       "apihelp-help-param-toc": "Zahrnout v HTML výstupu tabulku obsahu.",
+       "apihelp-help-example-main": "Nápověda k hlavnímu modulu",
+       "apihelp-help-example-recursive": "Veškerá nápověda na jedné stránce",
+       "apihelp-help-example-help": "Nápověda k samotnému modulu nápovědy",
+       "apihelp-help-example-query": "Nápověda pro dva submoduly query",
+       "apihelp-format-example-generic": "Výsledek dotazu vypsat ve formátu $1.",
+       "apihelp-dbg-description": "Vypisuje data ve formátu funkce var_export() z PHP.",
+       "apihelp-dbgfm-description": "Vypisuje data ve formátu funkce var_export() z PHP (v čitelné HTML podobě).",
+       "apihelp-dump-description": "Vypisuje data ve formátu funkce var_dump() z PHP.",
+       "apihelp-dumpfm-description": "Vypisuje data ve formátu funkce var_dump() z PHP (v čitelné HTML podobě).",
+       "apihelp-json-description": "Vypisuje data ve formátu JSON.",
+       "apihelp-json-param-callback": "Pokud je uvedeno, obalí výstup do zadaného volání funkce. Z bezpečnostních důvodů budou omezena všechna data specifická pro uživatele.",
+       "apihelp-json-param-utf8": "Pokud je uvedeno, bude většina ne-ASCII znaků (ale ne všechny) kódována v UTF-8 místo nahrazení hexadecimálními escape sekvencemi.",
+       "apihelp-jsonfm-description": "Vypisuje data ve formátu JSON (v čitelné HTML podobě).",
+       "apihelp-none-description": "Nevypisuje nic.",
+       "apihelp-php-description": "Vypisuje data v serializačním formátu PHP.",
+       "apihelp-phpfm-description": "Vypisuje data ve serializačním formátu PHP (v čitelné HTML podobě).",
+       "apihelp-rawfm-description": "Vypisuje data s ladicími prvky ve formátu JSON (v čitelné HTML podobě).",
+       "apihelp-txt-description": "Vypisuje data ve formátu funkce print_r() z PHP.",
+       "apihelp-txtfm-description": "Vypisuje data ve formátu funkce print_r() z PHP (v čitelné HTML podobě).",
+       "apihelp-wddx-description": "Vypisuje data ve formátu WDDX.",
+       "apihelp-wddxfm-description": "Vypisuje data ve formátu WDDX (v čitelné HTML podobě).",
+       "apihelp-xml-description": "Vypisuje data ve formátu XML.",
+       "apihelp-xml-param-xslt": "Pokud je uvedeno, přidá stylopis &lt;xslt&gt;. Měla by jím být wikistránka v jmenném prostoru MediaWiki, jejíž název končí na „.xsl“.",
+       "apihelp-xml-param-includexmlnamespace": "Pokud je uvedeno, přidá jmenný prostor XML.",
+       "apihelp-xmlfm-description": "Vypisuje data ve formátu XML (v čitelné HTML podobě).",
+       "apihelp-yaml-description": "Vypisuje data ve formátu YAML.",
+       "apihelp-yamlfm-description": "Vypisuje data ve formátu YAML (v čitelné HTML podobě).",
+       "api-format-title": "Odpověď z MediaWiki API",
+       "api-format-prettyprint-header": "Díváte se na HTML reprezentaci formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr format. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte format=$2.\n\nVíce informací najdete v [https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page úplné dokumentaci] nebo [[Special:ApiHelp/main|nápovědě k API]].",
+       "api-help-title": "Nápověda k MediaWiki API",
+       "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Hlavní modul",
+       "api-help-flag-deprecated": "Tento modul je zastaralý.",
+       "api-help-flag-internal": "<strong>Tento modul je interní nebo nestabilní.</strong> Jeho funkčnost se může bez předchozího upozornění změnit.",
+       "api-help-flag-readrights": "Tento modul vyžaduje oprávnění ke čtení.",
+       "api-help-flag-writerights": "Tento modul vyžaduje oprávnění k zápisu.",
+       "api-help-flag-mustbeposted": "Tento modul přijímá pouze požadavky POST.",
+       "api-help-flag-generator": "Tento modul lze využívat jako generátor.",
+       "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+       "api-help-param-deprecated": "Zastaralý.",
+       "api-help-param-required": "Tento parametr je povinný.",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna hodnota|2=Hodnoty (oddělené „{{!}}“)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
+       "api-help-param-limit": "Není dovoleno více než $1.",
+       "api-help-param-limit2": "Není dovoleno více než $1 ($2 pro boty).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být nižší než $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být vyšší než $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Hodnota|2=Hodnoty}} musí ležet mezi $2 a $3.",
+       "api-help-param-upload": "Musí se odeslat POST požadavkem jako načítaný soubor pomocí multipart/form-data.",
+       "api-help-param-multi-separate": "Hodnoty oddělujte pomocí „|“.",
+       "api-help-param-multi-max": "Maximální počet hodnot je {{PLURAL:$1|$1}} (pro boty {{PLURAL:$2|$2}}).",
+       "api-help-param-default": "Implicitní hodnota: $1",
+       "api-help-param-default-empty": "Implicitní hodnota: <span class=\"apihelp-empty\">(prázdné)</span>",
+       "api-help-param-token": "Token typu „$1“ získaný pomocí [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez popisu)</span>",
+       "api-help-examples": "{{PLURAL:$1|Příklad|Příklady}}:",
+       "api-help-permissions": "{{PLURAL:$1|Oprávnění}}:",
+       "api-help-permissions-granted-to": "Uděleno {{PLURAL:$1|skupině|skupinám}}: $2",
+       "api-help-right-apihighlimits": "Používání vyšších limitů v API dotazech (pomalé dotazy: $1, rychlé dotazy: $2). Limity pro pomalé dotazy se vztahují i na vícehodnotové parametry.",
+       "api-credits-header": "Zásluhy",
+       "api-credits": "Vývojáři API:\n* Roan Kattouw (hlavní vývojář září 2007–2009)\n* Viktor Vasiljev\n* Bryan Tong Minh\n* Sam Reed\n* Jurij Astrachan (tvůrce, hlavní vývojář září 2006–září 2007)\n* Brad Jorsch (hlavní vývojář od 2013)\n\nSvé komentáře, návrhy či dotazy posílejte na mediawiki-api@lists.wikimedia.org\nnebo založte chybové hlášení na https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/de.json b/includes/api/i18n/de.json
new file mode 100644 (file)
index 0000000..df676ff
--- /dev/null
@@ -0,0 +1,323 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Florian",
+                       "Kghbln",
+                       "Metalhead64"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page/de Dokumentation]\n* [https://www.mediawiki.org/wiki/API:FAQ/de Häufig gestellte Fragen]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, aber die API ist noch in aktiver Entwicklung und könnte sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste] für Mitteilungen über Aktualisierungen.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ versandt. Die zurückgesandten Werte des Headers und des Fehlercodes werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Welche Aktion ausgeführt werden soll.",
+       "apihelp-main-param-format": "Das Format der Ausgabe.",
+       "apihelp-main-param-maxlag": "Maximale Verzögerung kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um Aktionen zu speichern, die Websitereplikationsverzögerungen verursachen, kann dieser Parameter den Client warten lassen, bis die Replikationsverzögerung weniger als dem angegebenen Wert entspricht. Im Fall einer übermäßigen Verzögerung wird der Fehlercode „maxlag“ zurückgegeben mit einer Nachricht wie „Waiting for $host: $lag seconds lagged“.<br />Siehe https://www.mediawiki.org/wiki/Manual:Maxlag_parameter für weitere Informationen.",
+       "apihelp-main-param-smaxage": "Den s-maxage-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+       "apihelp-main-param-maxage": "Den max-age-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+       "apihelp-main-param-assert": "Den angemeldeten Benutzer verifizieren, falls auf „user“ festgelegt oder hat das Bot-Benutzerrecht, falls „bot“.",
+       "apihelp-main-param-requestid": "Jeder hier angegebene Wert wird in der Antwort eingeschlossen. Kann für unterschiedliche Anfragen verwendet werden.",
+       "apihelp-main-param-servedby": "Den von der Anfrage bereitgestellten Hostnamen in den Ergebnissen einschließen.",
+       "apihelp-main-param-curtimestamp": "Den aktuellen Zeitstempel im Ergebnis einschließen.",
+       "apihelp-main-param-origin": "Beim Zugriff auf die API mit einer Kreuz-Domain-AJAX-Anfrage (CORS) lege dies auf die entstehende Domain fest. Dies muss in einer beliebigen Vorfluganfrage eingeschlossen werden und deshalb ein Teil der Anfrage-URI sein (nicht der POST-Body). Dies muss genau einem der Ursprünge im Origin: header entsprechen, so muss es auf etwas festgelegt werden wie http://de.wikipedia.org oder https://meta.wikimedia.org. Falls dieser Parameter nicht dem Origin: header entspricht, wird eine 403-Antwort zurückgegeben. Falls dieser Parameter dem Origin: header entspricht und der Ursprung weißgelistet ist, wird ein Zugriffskontrolle-erlauben-Ursprung festgelegt.",
+       "apihelp-main-param-uselang": "Zu verwendende Sprache für Nachrichtenübersetzungen. Eine Liste der Codes kann von [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]] abgerufen werden oder gib „user“ an zum Verwenden der aktuellen Benutzerspracheinstellung.",
+       "apihelp-block-description": "Einen Benutzer sperren.",
+       "apihelp-block-param-user": "Benutzername, IP-Adresse oder IP-Bereich, den du sperren willst.",
+       "apihelp-block-param-expiry": "Ablaufzeit. Kann relativ (z.&nbsp;B. „5 Monate“ oder „2 Wochen“) oder absolut (z.&nbsp;B. „2014-09-18T12:34:56Z“) sein. Falls auf „unbeschränkt“ oder „niemals“ gesetzt, wird die Sperre nie ablaufen.",
+       "apihelp-block-param-reason": "Grund für die Sperre.",
+       "apihelp-block-param-anononly": "Nur anonyme Benutzer sperren (z.&nbsp;B. anonyme Bearbeitungen für diese IP deaktivieren).",
+       "apihelp-block-param-nocreate": "Benutzerkontenerstellung verhindern.",
+       "apihelp-block-param-autoblock": "Die zuletzt verwendete IP-Adresse automatisch sperren und alle darauffolgenden IP-Adressen, die versuchen sich anzumelden.",
+       "apihelp-block-param-noemail": "Benutzer davon abhalten, E-Mails auf dem Wiki zu versenden (erfordert das blockemail-Recht).",
+       "apihelp-block-param-hidename": "Den Benutzernamen im Sperr-Logbuch verstecken (erfordert das hideuser-Recht).",
+       "apihelp-block-param-allowusertalk": "Dem Benutzer erlauben, seine eigene Diskussionsseite zu bearbeiten (abhängig von $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "Falls der Benutzer bereits gesperrt ist, die vorhandene Sperre überschreiben.",
+       "apihelp-block-param-watchuser": "Beobachtet die Benutzer- oder IP-Benutzer- und -diskussionsseiten.",
+       "apihelp-block-example-ip-simple": "Sperren der IP 192.0.2.5 für drei Tage mit der Begründung „erste Verwarnung“",
+       "apihelp-block-example-user-complex": "Benutzer unbeschränkt sperren mit der Begründung „Vandalismus“ und Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.",
+       "apihelp-clearhasmsg-description": "Löscht das hasmsg-Flag für den aktuellen Benutzer.",
+       "apihelp-clearhasmsg-example-1": "Löscht das hasmsg-Flag für den aktuellen Benutzer",
+       "apihelp-compare-description": "Ruft den Unterschied zwischen 2 Seiten ab.\n\nDu musst eine Versionsnummer, einen Seitentitel oder eine Seitenkennung für „von“ und „nach“ angeben.",
+       "apihelp-compare-param-fromtitle": "Erster zu vergleichender Titel.",
+       "apihelp-compare-param-fromid": "Erste zu vergleichende Seitenkennung.",
+       "apihelp-compare-param-fromrev": "Erste zu vergleichende Version.",
+       "apihelp-compare-param-totitle": "Zweiter zu vergleichender Titel.",
+       "apihelp-compare-param-toid": "Zweite zu vergleichende Seitenkennung.",
+       "apihelp-compare-param-torev": "Zweite zu vergleichende Version.",
+       "apihelp-compare-example-1": "Erstellt einen Unterschied zwischen Version 1 und 2",
+       "apihelp-createaccount-description": "Erstellt ein neues Benutzerkonto.",
+       "apihelp-createaccount-param-name": "Benutzername.",
+       "apihelp-createaccount-param-password": "Passwort (ignoriert, falls $1mailpassword festgelegt ist).",
+       "apihelp-createaccount-param-domain": "Domain für die externe Authentifizierung (optional).",
+       "apihelp-createaccount-param-token": "Der in der ersten Anfrage erhaltene Benutzerkontenerstellungs-Token.",
+       "apihelp-createaccount-param-email": "E-Mail-Adresse des Benutzers (optional).",
+       "apihelp-createaccount-param-realname": "Bürgerlicher Name des Benutzers (optional).",
+       "apihelp-createaccount-param-mailpassword": "Falls auf einen beliebigen Wert gesetzt, wird ein zufälliges Passwort per E-Mail an den Benutzer versandt.",
+       "apihelp-createaccount-param-reason": "Optionale Begründung für die Benutzerkontenerstellung, die in den Logbüchern vermerkt wird.",
+       "apihelp-createaccount-param-language": "Festzulegender standardmäßiger Sprachcode für den Benutzer (optional, Standard ist Inhaltssprache).",
+       "apihelp-createaccount-example-pass": "Erstellt den Benutzer „testuser“ mit dem Passwort „test123“",
+       "apihelp-createaccount-example-mail": "Benutzer „testmailuser“ erstellen und ein zufällig generiertes Passwort per E-Mail versenden",
+       "apihelp-delete-description": "Löscht eine Seite.",
+       "apihelp-delete-param-title": "Titel der Seite, die du löschen möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
+       "apihelp-delete-param-pageid": "Seitenkennung der Seite, die du löschen möchtest. Kann nicht zusammen mit $1title verwendet werden.",
+       "apihelp-delete-param-reason": "Grund für die Löschung. Falls nicht festgelegt, wird ein automatisch generierter Grund verwendet.",
+       "apihelp-delete-param-watch": "Fügt die Seite deiner Beobachtungsliste hinzu.",
+       "apihelp-delete-param-watchlist": "Die Seite bedingungslos zu deiner Beobachtungsliste hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+       "apihelp-delete-param-unwatch": "Die Seite von deiner Beobachtungsliste entfernen.",
+       "apihelp-delete-param-oldimage": "Der Name des alten zu löschenden Bildes, wie von [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] angegeben.",
+       "apihelp-delete-example-simple": "Löscht die Hauptseite",
+       "apihelp-delete-example-reason": "Die Hauptseite löschen mit der Begründung „Vorbereitung für die Verschiebung“",
+       "apihelp-disabled-description": "Dieses Modul wurde deaktiviert.",
+       "apihelp-edit-description": "Erstellt und bearbeitet Seiten.",
+       "apihelp-edit-param-title": "Titel der Seite, die du bearbeiten möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
+       "apihelp-edit-param-pageid": "Seitenkennung der Seite, die du bearbeiten möchtest. Kann nicht zusammen mit $1title verwendet werden.",
+       "apihelp-edit-param-section": "Abschnittsnummer. 0 für die Einleitung, „new“ für einen neuen Abschnitt.",
+       "apihelp-edit-param-sectiontitle": "Der Titel für einen neuen Abschnitt.",
+       "apihelp-edit-param-text": "Seiteninhalt.",
+       "apihelp-edit-param-summary": "Bearbeitungszusammenfassung. Auch Abschnittstitel, wenn $1section=new und $1sectiontitle nicht festgelegt ist.",
+       "apihelp-edit-param-minor": "Kleine Bearbeitung.",
+       "apihelp-edit-param-notminor": "Nicht-kleine Bearbeitung.",
+       "apihelp-edit-param-bot": "Diese Bearbeitung als Bot-Bearbeitung markieren.",
+       "apihelp-edit-param-basetimestamp": "Zeitstempel der Basisversion, wird verwendet zum Aufspüren von Bearbeitungskonflikten. Kann abgerufen werden durch [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Zeitstempel, an dem du den Bearbeitungsprozess begonnen hast, wird verwendet zum Aufspüren von Bearbeitungskonflikten. Ein geeigneter Wert kann abgerufen werden mithilfe [[Special:ApiHelp/main|curtimestamp]] beim Beginn des Bearbeitungsprozesses (z.&nbsp;B. beim Laden des Seiteninhalts zum Bearbeiten).",
+       "apihelp-edit-param-recreate": "Fehler ignorieren, wenn der Artikel in der Zwischenzeit gelöscht wurde.",
+       "apihelp-edit-param-createonly": "Die Seite nicht bearbeiten, falls sie bereits vorhanden ist.",
+       "apihelp-edit-param-nocreate": "Einen Fehler zurückgeben, falls die Seite nicht vorhanden ist.",
+       "apihelp-edit-param-watch": "Fügt die Seite deiner Beobachtungsliste hinzu.",
+       "apihelp-edit-param-unwatch": "Entfernt die Seite von deiner Beobachtungsliste.",
+       "apihelp-edit-param-watchlist": "Die Seite bedingungslos zu deiner Beobachtungsliste hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+       "apihelp-edit-param-md5": "Der MD5-Hash des Parameters $1text oder die verbundenen Parameter $1prependtext und $1appendtext. Falls festgelegt, wird die Bearbeitung nicht ausgeführt, bis der Hash korrekt ist.",
+       "apihelp-edit-param-prependtext": "Ergänzt diesen Text am Anfang der Seite. Überschreibt $1text.",
+       "apihelp-edit-param-appendtext": "Fügt diesen Text an das Ende der Seite hinzu. Überschreibt $1text.\n\nVerwende $1section=new zum Anhängen eines neuen Abschnitts anstatt dieses Parameters.",
+       "apihelp-edit-param-undo": "Diese Version rückgängig machen. Überschreibt $1text, $1prependtext und $1appendtext.",
+       "apihelp-edit-param-undoafter": "Alle Versionen von $1undo auf diese rückgängig machen. Falls nicht angegeben, nur eine Version rückgängig machen.",
+       "apihelp-edit-param-redirect": "Weiterleitungen automatisch anpassen.",
+       "apihelp-edit-param-contentformat": "Für den Eingabetext verwendetes Inhaltsserialisierungsformat.",
+       "apihelp-edit-param-contentmodel": "Inhaltsmodell des neuen Inhalts.",
+       "apihelp-edit-param-token": "Der Token sollte immer als letzter Parameter gesendet werden, mindestens aber nach dem $1text-Parameter.",
+       "apihelp-edit-example-edit": "Eine Seite bearbeiten",
+       "apihelp-edit-example-prepend": "_&#95;NOTOC_&#95; bei einer Seite voranstellen",
+       "apihelp-edit-example-undo": "Versionen 13579 bis 13585 mit automatischer Zusammenfassung rückgängig machen",
+       "apihelp-emailuser-description": "E-Mail an einen Benutzer senden.",
+       "apihelp-emailuser-param-target": "Benutzer, an den die E-Mail gesendet werden soll.",
+       "apihelp-emailuser-param-subject": "Betreffzeile.",
+       "apihelp-emailuser-param-text": "Textkörper.",
+       "apihelp-emailuser-param-ccme": "Eine Kopie dieser E-Mail an mich senden.",
+       "apihelp-emailuser-example-email": "Eine E-Mail an den Benutzer „WikiSysop“ mit dem Text „Inhalt“ senden",
+       "apihelp-expandtemplates-description": "Alle Vorlagen im Wikitext expandieren.",
+       "apihelp-expandtemplates-param-title": "Titel der Seite.",
+       "apihelp-expandtemplates-param-text": "Zu konvertierender Wikitext.",
+       "apihelp-expandtemplates-param-includecomments": "Ob HTML-Kommentare in der Ausgabe eingeschlossen werden sollen.",
+       "apihelp-expandtemplates-param-generatexml": "XML-Parserbaum erzeugen (ersetzt durch $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Expandiert den Wikitext „<nowiki>{{Project:Spielwiese}}</nowiki>“",
+       "apihelp-feedcontributions-description": "Gibt einen Benutzerbeiträge-Feed zurück.",
+       "apihelp-feedcontributions-param-feedformat": "Das Format des Feeds.",
+       "apihelp-feedcontributions-param-user": "Von welchen Benutzern die Beiträge abgerufen werden sollen.",
+       "apihelp-feedcontributions-param-namespace": "Auf welchen Namensraum die Beiträge gefiltert werden sollen.",
+       "apihelp-feedcontributions-param-year": "Von Jahr (und früher).",
+       "apihelp-feedcontributions-param-month": "Von Monat (und früher).",
+       "apihelp-feedcontributions-param-tagfilter": "Beiträge filtern, die diese Markierungen haben.",
+       "apihelp-feedcontributions-param-deletedonly": "Nur gelöschte Beiträge anzeigen.",
+       "apihelp-feedcontributions-param-toponly": "Nur aktuelle Versionen anzeigen.",
+       "apihelp-feedcontributions-param-newonly": "Nur Seitenerstellungen anzeigen.",
+       "apihelp-feedcontributions-param-showsizediff": "Zeigt den Größenunterschied zwischen Versionen an.",
+       "apihelp-feedcontributions-example-simple": "Beiträge für [[Benutzer:Beispiel]] zurückgeben",
+       "apihelp-feedrecentchanges-description": "Gibt einen Letzte-Änderungen-Feed zurück.",
+       "apihelp-feedrecentchanges-param-feedformat": "Das Format des Feeds.",
+       "apihelp-feedrecentchanges-param-namespace": "Namensraum, auf den die Ergebnisse beschränkt werden sollen.",
+       "apihelp-feedrecentchanges-param-invert": "Alle Namensräume außer dem ausgewählten.",
+       "apihelp-feedrecentchanges-param-associated": "Verbundene Namensräume (Diskussion oder Haupt) einschließen.",
+       "apihelp-feedrecentchanges-param-days": "Tage, auf die die Ergebnisse beschränkt werden sollen.",
+       "apihelp-feedrecentchanges-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+       "apihelp-feedrecentchanges-param-from": "Änderungen seit jetzt anzeigen.",
+       "apihelp-feedrecentchanges-param-hideminor": "Kleine Änderungen ausblenden.",
+       "apihelp-feedrecentchanges-param-hidebots": "Änderungen von Bots ausblenden.",
+       "apihelp-feedrecentchanges-param-hideanons": "Änderungen von anonymen Benutzern ausblenden.",
+       "apihelp-feedrecentchanges-param-hideliu": "Änderungen von registrierten Benutzern ausblenden.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Kontrollierte Änderungen ausblenden.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Eigene Änderungen ausblenden.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Nach Markierung filtern.",
+       "apihelp-feedrecentchanges-param-target": "Nur Änderungen an Seiten anzeigen, die von dieser Seite verlinkt sind.",
+       "apihelp-feedrecentchanges-example-simple": "Letzte Änderungen anzeigen",
+       "apihelp-feedrecentchanges-example-30days": "Letzte Änderungen für 30 Tage anzeigen",
+       "apihelp-feedwatchlist-description": "Gibt einen Beobachtungslisten-Feed zurück.",
+       "apihelp-feedwatchlist-param-feedformat": "Das Format des Feeds.",
+       "apihelp-feedwatchlist-param-linktosections": "Verlinke direkt zum veränderten Abschnitt, wenn möglich.",
+       "apihelp-feedwatchlist-example-default": "Den Beobachtungslisten-Feed anzeigen",
+       "apihelp-feedwatchlist-example-all6hrs": "Zeige alle Änderungen an beobachteten Seiten der letzten 6 Stunden.",
+       "apihelp-filerevert-description": "Eine Datei auf eine alte Version zurücksetzen.",
+       "apihelp-filerevert-param-filename": "Ziel-Datei, ohne das Datei:-Präfix.",
+       "apihelp-filerevert-param-comment": "Hochladekommentar.",
+       "apihelp-filerevert-param-archivename": "Archivname der Version, auf die die Datei zurückgesetzt werden soll.",
+       "apihelp-filerevert-example-revert": "Wiki.png auf die Version vom 2011-03-05T15:27:40Z zurücksetzen",
+       "apihelp-help-description": "Hilfe für die angegebenen Module anzeigen.",
+       "apihelp-help-param-modules": "Module, zu denen eine Hilfe angezeigt werden soll (Werte der Parameter action= und format= oder „main“). Kann Submodule mit einem „+“ angeben.",
+       "apihelp-help-param-submodules": "Hilfe für Submodule des benannten Moduls einschließen.",
+       "apihelp-help-param-recursivesubmodules": "Hilfe für Submodule rekursiv einschließen.",
+       "apihelp-help-param-helpformat": "Format der Hilfe-Ausgabe.",
+       "apihelp-help-param-wrap": "Die Ausgabe in eine Standard-API-Antwort-Struktur einschließen.",
+       "apihelp-help-param-toc": "Ein Inhaltsverzeichnis in der HTML-Ausgabe einschließen.",
+       "apihelp-help-example-main": "Hilfe für das Hauptmodul",
+       "apihelp-help-example-recursive": "Alle Hilfen in einer Seite",
+       "apihelp-help-example-help": "Hilfe für das Hilfemodul selbst",
+       "apihelp-help-example-query": "Hilfe für zwei Abfrage-Submodule",
+       "apihelp-imagerotate-description": "Ein oder mehrere Bilder drehen.",
+       "apihelp-imagerotate-param-rotation": "Anzahl der Grad, um die das Bild im Uhrzeigersinn gedreht werden soll.",
+       "apihelp-imagerotate-example-simple": "[[:Datei:Example.png]] um 90 Grad drehen",
+       "apihelp-imagerotate-example-generator": "Alle Bilder in der [[:Kategorie:Flip]] um 180 Grad drehen",
+       "apihelp-import-param-summary": "Import-Zusammenfassung.",
+       "apihelp-import-param-xml": "Hochgeladene XML-Datei.",
+       "apihelp-import-param-interwikisource": "Für Interwiki-Importe: Wiki, von dem importiert werden soll.",
+       "apihelp-import-param-interwikipage": "Für Interwiki-Importe: zu importierende Seite.",
+       "apihelp-import-param-fullhistory": "Für Interwiki-Importe: importiere die komplette Versionsgeschichte, nicht nur die aktuelle Version.",
+       "apihelp-import-param-templates": "Für Interwiki-Importe: importiere auch alle eingebundenen Vorlagen.",
+       "apihelp-import-param-namespace": "Für Interwiki-Importe: importiere in diesen Namensraum.",
+       "apihelp-import-param-rootpage": "Als Unterseite dieser Seite importieren.",
+       "apihelp-import-example-import": "Importiere [[meta:Help:Parserfunctions]] mit der kompletten Versionsgeschichte in den Namensraum 100.",
+       "apihelp-login-param-name": "Benutzername.",
+       "apihelp-login-param-password": "Passwort.",
+       "apihelp-login-param-domain": "Domain (optional).",
+       "apihelp-login-param-token": "Anmeldetoken, den du in der ersten Anfrage erhalten hast.",
+       "apihelp-login-example-gettoken": "Ruft einen Anmelde-Token ab",
+       "apihelp-login-example-login": "Anmelden",
+       "apihelp-logout-description": "Abmelden und alle Sitzungsdaten löschen.",
+       "apihelp-logout-example-logout": "Meldet den aktuellen Benutzer ab",
+       "apihelp-move-description": "Eine Seite verschieben.",
+       "apihelp-move-param-from": "Titel der Seite, die du verschieben möchtest. Kann nicht zusammen mit $1fromid verwendet werden.",
+       "apihelp-move-param-to": "Titel, zu dem die Seite umbenannt werden soll.",
+       "apihelp-move-param-reason": "Grund für die Verschiebung.",
+       "apihelp-move-param-movetalk": "Verschiebt die Diskussionsseite, falls vorhanden.",
+       "apihelp-move-param-movesubpages": "Unterseiten verschieben, falls zutreffend.",
+       "apihelp-move-param-noredirect": "Keine Weiterleitung erstellen.",
+       "apihelp-move-param-ignorewarnings": "Alle Warnungen ignorieren.",
+       "apihelp-move-example-move": "„Schlechter Titel“ nach „Guter Titel“ verschieben, ohne eine Weiterleitung zu erstellen",
+       "apihelp-opensearch-description": "Das Wiki mithilfe des OpenSearch-Protokolls durchsuchen.",
+       "apihelp-opensearch-param-search": "Such-Zeichenfolge.",
+       "apihelp-opensearch-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+       "apihelp-opensearch-param-namespace": "Zu durchsuchende Namensräume.",
+       "apihelp-opensearch-param-suggest": "Nichts unternehmen, falls [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] falsch ist.",
+       "apihelp-opensearch-param-format": "Das Format der Ausgabe.",
+       "apihelp-opensearch-example-te": "Seiten finden, die mit „Te“ beginnen",
+       "apihelp-options-param-reset": "Setzt die Einstellungen auf Websitestandards zurück.",
+       "apihelp-options-example-reset": "Alle Einstellungen zurücksetzen",
+       "apihelp-options-example-change": "Ändert die Einstellungen „skin“ und „hideminor“",
+       "apihelp-options-example-complex": "Setzt alle Einstellungen zurück, dann „skin“ und „nickname“ festlegen",
+       "apihelp-paraminfo-description": "Ruft Informationen über API-Module ab.",
+       "apihelp-paraminfo-param-helpformat": "Format der Hilfe-Zeichenfolgen.",
+       "apihelp-parse-example-page": "Eine Seite parsen.",
+       "apihelp-protect-example-protect": "Schützt eine Seite",
+       "apihelp-purge-param-forcelinkupdate": "Aktualisiert die Linktabellen.",
+       "apihelp-query+allcategories-description": "Alle Kategorien aufzählen.",
+       "apihelp-query+allcategories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
+       "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
+       "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
+       "apihelp-query+allfileusages-example-generator": "Seiten abrufen, die die Dateien enthalten",
+       "apihelp-query+allimages-description": "Alle Bilder nacheinander auflisten.",
+       "apihelp-query+allimages-param-sha1": "SHA1-Hash des Bildes. Überschreibt $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "SHA1-Hash des Bildes (Basis 36; verwendet in MediaWiki).",
+       "apihelp-query+allimages-param-limit": "Wie viele Gesamtbilder zurückgegeben werden sollen.",
+       "apihelp-query+alllinks-example-unique": "Einheitlich verlinkte Titel auflisten",
+       "apihelp-query+allredirects-example-unique": "Einheitliche Zielseiten auflisten",
+       "apihelp-query+allredirects-example-generator": "Seiten abrufen, die die Weiterleitungen enthalten",
+       "apihelp-query+alltransclusions-param-namespace": "Der aufzulistende Namensraum.",
+       "apihelp-query+alltransclusions-example-unique": "Einheitlich eingebundene Titel auflisten",
+       "apihelp-query+allusers-example-Y": "Benutzer ab Y auflisten",
+       "apihelp-query+backlinks-description": "Alle Seiten finden, die auf die angegebene Seite verlinken.",
+       "apihelp-query+backlinks-example-simple": "Links auf [[Hauptseite]] anzeigen",
+       "apihelp-query+blocks-example-simple": "Sperren auflisten",
+       "apihelp-query+categorymembers-param-startsortkey": "Stattdessen $1starthexsortkey verwenden.",
+       "apihelp-query+categorymembers-param-endsortkey": "Stattdessen $1endhexsortkey verwenden.",
+       "apihelp-query+deletedrevs-param-from": "Auflistung bei diesem Titel beginnen.",
+       "apihelp-query+deletedrevs-param-to": "Auflistung bei diesem Titel beenden.",
+       "apihelp-query+imageinfo-param-limit": "Wie viele Dateiversionen pro Datei zurückgegeben werden sollen.",
+       "apihelp-query+imageinfo-param-start": "Zeitstempel, von dem die Liste beginnen soll.",
+       "apihelp-query+imageinfo-param-end": "Zeitstempel, an dem die Liste enden soll.",
+       "apihelp-query+imageinfo-param-urlheight": "Ähnlich wie $1urlwidth.",
+       "apihelp-query+iwbacklinks-param-prefix": "Präfix für das Interwiki.",
+       "apihelp-query+langbacklinks-param-limit": "Wie viele Gesamtseiten zurückgegeben werden sollen.",
+       "apihelp-query+links-example-simple": "Links von der [[Hauptseite]] abrufen",
+       "apihelp-query+linkshere-description": "Alle Seiten finden, die auf die angegebenen Seiten verlinken.",
+       "apihelp-query+logevents-description": "Ereignisse von den Logbüchern abrufen.",
+       "apihelp-query+search-example-simple": "Nach „meaning“ suchen",
+       "apihelp-query+search-example-text": "Texte nach „meaning“ durchsuchen",
+       "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen",
+       "apihelp-query+tags-description": "Änderungs-Tags auflisten.",
+       "apihelp-query+tags-example-simple": "Verfügbare Tags auflisten",
+       "apihelp-query+usercontribs-description": "Alle Bearbeitungen von einem Benutzer abrufen.",
+       "apihelp-query+userinfo-example-simple": "Informationen über den aktuellen Benutzer abrufen",
+       "apihelp-query+users-description": "Informationen über eine Liste von Benutzern abrufen.",
+       "apihelp-rsd-description": "Ein RSD-Schema (Really Simple Discovery) exportieren.",
+       "apihelp-rsd-example-simple": "Das RSD-Schema exportieren",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "An allen beobachteten Seiten arbeiten.",
+       "apihelp-unblock-description": "Einen Benutzer freigeben.",
+       "apihelp-unblock-param-reason": "Grund für die Freigabe.",
+       "apihelp-unblock-example-id": "Sperrkennung #105 freigeben",
+       "apihelp-undelete-param-reason": "Grund für die Wiederherstellung.",
+       "apihelp-upload-param-filename": "Ziel-Dateiname.",
+       "apihelp-upload-param-watch": "Die Seite beobachten.",
+       "apihelp-upload-param-file": "Dateiinhalte.",
+       "apihelp-upload-param-url": "URL, von der die Datei abgerufen werden soll.",
+       "apihelp-upload-example-url": "Von einer URL hochladen",
+       "apihelp-userrights-param-user": "Benutzername.",
+       "apihelp-userrights-param-userid": "Benutzerkennung.",
+       "apihelp-watch-example-watch": "Die Seite „Hauptseite“ beobachten",
+       "apihelp-format-example-generic": "Das Abfrageergebnis im $1-Format formatieren",
+       "apihelp-dbg-description": "Daten im PHP-var_export()-Format ausgeben.",
+       "apihelp-dbgfm-description": "Daten im PHP-var_export()-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-dump-description": "Daten im PHP-var_dump()-Format ausgeben.",
+       "apihelp-dumpfm-description": "Daten im PHP-var_dump()-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-json-description": "Daten im JSON-Format ausgeben.",
+       "apihelp-json-param-callback": "Falls angegeben, wird die Ausgabe in einen angegebenen Funktionsaufruf eingeschlossen. Aus Sicherheitsgründen sind benutzerspezifische Daten beschränkt.",
+       "apihelp-json-param-utf8": "Falls angegeben, kodiert die meisten (aber nicht alle) Nicht-ASCII-Zeichen als UTF-8 anstatt sie mit hexadezimalen Escape-Sequenzen zu ersetzen.",
+       "apihelp-jsonfm-description": "Daten im JSON-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-none-description": "Nichts ausgeben.",
+       "apihelp-php-description": "Daten im serialisierten PHP-Format ausgeben.",
+       "apihelp-phpfm-description": "Daten im serialisierten PHP-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-rawfm-description": "Daten mit den Fehlerbehebungselementen im JSON-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-txt-description": "Daten im PHP-print_r()-Format ausgeben.",
+       "apihelp-txtfm-description": "Daten im PHP-print_r()-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-wddx-description": "Daten im WDDX-Format ausgeben.",
+       "apihelp-wddxfm-description": "Daten im WDDX-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-xml-description": "Daten im XML-Format ausgeben.",
+       "apihelp-xml-param-xslt": "Falls angegeben, ergänzt &lt;xslt&gt; als Stylesheet. Dies sollte eine Wikiseite im MediaWiki-Namensraum sein, dessen Seitenname mit „.xsl“ endet.",
+       "apihelp-xml-param-includexmlnamespace": "Falls angegeben, ergänzt einen XML-Namensraum.",
+       "apihelp-xmlfm-description": "Daten im XML-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-yaml-description": "Daten im YAML-Format ausgeben.",
+       "apihelp-yamlfm-description": "Daten im YAML-Format ausgeben (schöngedruckt in HTML).",
+       "api-format-title": "MediaWiki-API-Ergebnis",
+       "api-format-prettyprint-header": "Du suchst nach der HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Formatparameter an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege format=$2 fest.\n\nSiehe die [https://www.mediawiki.org/wiki/API/de vollständige Dokumentation] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
+       "api-orm-param-props": "Felder an die Anfrage.",
+       "api-orm-param-limit": "Maximale Anzahl zurückgegebender Zeilen.",
+       "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
+       "api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
+       "api-pageset-param-revids": "Eine Liste der Versionskennungen, an denen gearbeitet werden soll.",
+       "api-help-title": "MediaWiki-API-Hilfe",
+       "api-help-lead": "Dies ist eine automatisch generierte MediaWiki-API-Dokumentationsseite.\n\nDokumentation und Beispiele: https://www.mediawiki.org/wiki/API/de",
+       "api-help-main-header": "Hauptmodul",
+       "api-help-flag-deprecated": "Dieses Modul ist veraltet.",
+       "api-help-flag-internal": "<strong>Dieses Modul ist intern oder instabil.</strong> Seine Operationen werden ohne Kenntnisnahme geändert.",
+       "api-help-flag-readrights": "Dieses Modul erfordert Leserechte.",
+       "api-help-flag-writerights": "Dieses Modul erfordert Schreibrechte.",
+       "api-help-flag-mustbeposted": "Dieses Modul akzeptiert nur POST-Anfragen.",
+       "api-help-flag-generator": "Dieses Modul kann als Generator verwendet werden.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+       "api-help-param-deprecated": "Veraltet.",
+       "api-help-param-required": "Dieser Parameter ist erforderlich.",
+       "api-help-param-list": "{{PLURAL:$1|1=Ein Wert|2=Werte (mit „{{!}}“ trennen)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Muss leer sein|Kann leer sein oder $2}}",
+       "api-help-param-limit": "Nicht mehr als $1 erlaubt.",
+       "api-help-param-limit2": "Nicht mehr als $1 ($2 für Bots) erlaubt.",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht kleiner sein als $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht größer sein als $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Der Wert muss|2=Die Werte müssen}} zwischen $2 und $3 sein.",
+       "api-help-param-upload": "Muss als Dateiupload mithilfe Mehrteil-Formdaten bereitgestellt werden.",
+       "api-help-param-multi-separate": "Werte mit „|“ trennen.",
+       "api-help-param-multi-max": "Maximale Anzahl der Werte ist {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} für Bots).",
+       "api-help-param-default": "Standard: $1",
+       "api-help-param-default-empty": "Standard: <span class=\"apihelp-empty\">(leer)</span>",
+       "api-help-param-token": "Ein „$1“-Token wurde abgerufen von [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(keine Beschreibung)</span>",
+       "api-help-examples": "{{PLURAL:$1|Beispiel|Beispiele}}:",
+       "api-help-permissions": "{{PLURAL:$1|Berechtigung|Berechtigungen}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Gewährt an}}: $2",
+       "api-help-right-apihighlimits": "Höhere Beschränkungen in API-Anfragen verwenden (langsame Anfragen: $1; schnelle Anfragen: $2). Die Beschränkungen für langsame Anfragen werden auch auf Mehrwertparameter angewandt.",
+       "api-credits-header": "Danksagungen",
+       "api-credits": "API-Entwickler:\n* Roan Kattouw (Hauptentwickler von September 2007 bis 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Autor, Hauptentwickler von September 2006 bis September 2007)\n* Brad Jorsch (Hauptentwickler seit 2013)\n\nBitte sende deine Kommentare, Vorschläge und Fragen an mediawiki-api@lists.wikimedia.org\noder reiche einen Fehlerbericht auf https://bugzilla.wikimedia.org/ ein."
+}
index 82a2c91..2bec759 100644 (file)
        "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
        "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
        "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.",
+       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.",
        "apihelp-query+allfileusages-param-limit": "How many total items to return.",
        "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
-       "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page IDs they are from, starting at B",
        "apihelp-query+allfileusages-example-unique": "List unique file titles",
        "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones",
        "apihelp-query+allfileusages-example-generator": "Gets pages containing the files",
        "apihelp-query+alllinks-param-to": "The title of the link to stop enumerating at.",
        "apihelp-query+alllinks-param-prefix": "Search for all linked titles that begin with this value.",
        "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+alllinks-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the linking page (cannot be used with $1unique).\n;title:Adds the title of the link.",
+       "apihelp-query+alllinks-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the linking page (cannot be used with $1unique).\n;title:Adds the title of the link.",
        "apihelp-query+alllinks-param-namespace": "The namespace to enumerate.",
        "apihelp-query+alllinks-param-limit": "How many total items to return.",
        "apihelp-query+alllinks-param-dir": "The direction in which to list.",
-       "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page IDs they are from, starting at B",
        "apihelp-query+alllinks-example-unique": "List unique linked titles",
        "apihelp-query+alllinks-example-unique-generator": "Gets all linked titles, marking the missing ones",
        "apihelp-query+alllinks-example-generator": "Gets pages containing the links",
        "apihelp-query+allredirects-param-to": "The title of the redirect to stop enumerating at.",
        "apihelp-query+allredirects-param-prefix": "Search for all target pages that begin with this value.",
        "apihelp-query+allredirects-param-unique": "Only show distinct target pages. Cannot be used with $1prop=ids|fragment|interwiki.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+allredirects-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the redirecting page (cannot be used with $1unique).\n;title:Adds the title of the redirect.\n;fragment:Adds the fragment from the redirect, if any (cannot be used with $1unique).\n;interwiki:Adds the interwiki prefix from the redirect, if any (cannot be used with $1unique).",
+       "apihelp-query+allredirects-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the redirecting page (cannot be used with $1unique).\n;title:Adds the title of the redirect.\n;fragment:Adds the fragment from the redirect, if any (cannot be used with $1unique).\n;interwiki:Adds the interwiki prefix from the redirect, if any (cannot be used with $1unique).",
        "apihelp-query+allredirects-param-namespace": "The namespace to enumerate.",
        "apihelp-query+allredirects-param-limit": "How many total items to return.",
        "apihelp-query+allredirects-param-dir": "The direction in which to list.",
-       "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page IDs they are from, starting at B",
        "apihelp-query+allredirects-example-unique": "List unique target pages",
        "apihelp-query+allredirects-example-unique-generator": "Gets all target pages, marking the missing ones",
        "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects",
        "apihelp-query+alltransclusions-param-to": "The title of the transclusion to stop enumerating at.",
        "apihelp-query+alltransclusions-param-prefix": "Search for all transcluded titles that begin with this value.",
        "apihelp-query+alltransclusions-param-unique": "Only show distinct transcluded titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the transcluding page (cannot be used with $1unique).\n;title:Adds the title of the transclusion.",
+       "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the transcluding page (cannot be used with $1unique).\n;title:Adds the title of the transclusion.",
        "apihelp-query+alltransclusions-param-namespace": "The namespace to enumerate.",
        "apihelp-query+alltransclusions-param-limit": "How many total items to return.",
        "apihelp-query+alltransclusions-param-dir": "The direction in which to list.",
-       "apihelp-query+alltransclusions-example-B": "List transcluded titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+alltransclusions-example-B": "List transcluded titles, including missing ones, with page IDs they are from, starting at B",
        "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles",
        "apihelp-query+alltransclusions-example-unique-generator": "Gets all transcluded titles, marking the missing ones",
        "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions",
 
        "apihelp-query+backlinks-description": "Find all pages that link to the given page.",
        "apihelp-query+backlinks-param-title": "Title to search. Cannot be used together with $1pageid.",
-       "apihelp-query+backlinks-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+backlinks-param-pageid": "Page ID to search. Cannot be used together with $1title.",
        "apihelp-query+backlinks-param-namespace": "The namespace to enumerate.",
        "apihelp-query+backlinks-param-dir": "The direction in which to list.",
        "apihelp-query+backlinks-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
 
        "apihelp-query+embeddedin-description": "Find all pages that embed (transclude) the given title.",
        "apihelp-query+embeddedin-param-title": "Title to search. Cannot be used together with $1pageid.",
-       "apihelp-query+embeddedin-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+embeddedin-param-pageid": "Page ID to search. Cannot be used together with $1title.",
        "apihelp-query+embeddedin-param-namespace": "The namespace to enumerate.",
        "apihelp-query+embeddedin-param-dir": "The direction in which to list.",
        "apihelp-query+embeddedin-param-filterredir": "How to filter for redirects.",
        "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories",
 
        "apihelp-query+fileusage-description": "Find all pages that use the given files.",
-       "apihelp-query+fileusage-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+fileusage-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
        "apihelp-query+fileusage-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+fileusage-param-limit": "How many to return.",
        "apihelp-query+fileusage-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
 
        "apihelp-query+imageusage-description": "Find all pages that use the given image title.",
        "apihelp-query+imageusage-param-title": "Title to search. Cannot be used together with $1pageid.",
-       "apihelp-query+imageusage-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+imageusage-param-pageid": "Page ID to search. Cannot be used together with $1title.",
        "apihelp-query+imageusage-param-namespace": "The namespace to enumerate.",
        "apihelp-query+imageusage-param-dir": "The direction in which to list.",
        "apihelp-query+imageusage-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
        "apihelp-query+links-example-namespaces": "Get links from the [[Main Page]] in the User and Template namespaces",
 
        "apihelp-query+linkshere-description": "Find all pages that link to the given pages.",
-       "apihelp-query+linkshere-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+linkshere-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
        "apihelp-query+linkshere-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+linkshere-param-limit": "How many to return.",
        "apihelp-query+linkshere-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
        "apihelp-query+protectedtitles-param-limit": "How many total pages to return.",
        "apihelp-query+protectedtitles-param-start": "Start listing at this protection timestamp.",
        "apihelp-query+protectedtitles-param-end": "Stop listing at this protection timestamp.",
-       "apihelp-query+protectedtitles-param-prop": "Which properties to get:\n;timestamp:Adds the timestamp of when protection was added.\n;user:Adds the user that added the protection.\n;userid:Adds the user id that added the protection.\n;comment:Adds the comment for the protection.\n;parsedcomment:Adds the parsed comment for the protection.\n;expiry:Adds the timestamp of when the protection will be lifted.\n;level:Adds the protection level.",
+       "apihelp-query+protectedtitles-param-prop": "Which properties to get:\n;timestamp:Adds the timestamp of when protection was added.\n;user:Adds the user that added the protection.\n;userid:Adds the user ID that added the protection.\n;comment:Adds the comment for the protection.\n;parsedcomment:Adds the parsed comment for the protection.\n;expiry:Adds the timestamp of when the protection will be lifted.\n;level:Adds the protection level.",
        "apihelp-query+protectedtitles-example-simple": "List protected titles",
        "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace",
 
        "apihelp-query+recentchanges-param-user": "Only list changes by this user.",
        "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user.",
        "apihelp-query+recentchanges-param-tag": "Only list changes tagged with this tag.",
-       "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:\n;user:Adds the user responsible for the edit and tags if they are an IP.\n;userid:Adds the user id responsible for the edit.\n;comment:Adds the comment for the edit.\n;parsedcomment:Adds the parsed comment for the edit.\n;flags:Adds flags for the edit.\n;timestamp:Adds timestamp of the edit.\n;title:Adds the page title of the edit.\n;ids:Adds the page ID, recent changes ID and the new and old revision ID.\n;sizes:Adds the new and old page length in bytes.\n;redirect:Tags edit if page is a redirect.\n;patrolled:Tags patrollable edits as being patrolled or unpatrolled.\n;loginfo:Adds log information (logid, logtype, etc) to log entries.\n;tags:Lists tags for the entry.\n;sha1:Adds the content checksum for entries associated with a revision.",
+       "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:\n;user:Adds the user responsible for the edit and tags if they are an IP.\n;userid:Adds the user ID responsible for the edit.\n;comment:Adds the comment for the edit.\n;parsedcomment:Adds the parsed comment for the edit.\n;flags:Adds flags for the edit.\n;timestamp:Adds timestamp of the edit.\n;title:Adds the page title of the edit.\n;ids:Adds the page ID, recent changes ID and the new and old revision ID.\n;sizes:Adds the new and old page length in bytes.\n;redirect:Tags edit if page is a redirect.\n;patrolled:Tags patrollable edits as being patrolled or unpatrolled.\n;loginfo:Adds log information (log ID, log type, etc) to log entries.\n;tags:Lists tags for the entry.\n;sha1:Adds the content checksum for entries associated with a revision.",
        "apihelp-query+recentchanges-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
        "apihelp-query+recentchanges-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "How many total changes to return.",
        "apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes",
 
        "apihelp-query+redirects-description": "Returns all redirects to the given pages.",
-       "apihelp-query+redirects-param-prop": "Which properties to get:\n;pageid:Page id of each redirect.\n;title:Title of each redirect.\n;fragment:Fragment of each redirect, if any.",
+       "apihelp-query+redirects-param-prop": "Which properties to get:\n;pageid:Page ID of each redirect.\n;title:Title of each redirect.\n;fragment:Fragment of each redirect, if any.",
        "apihelp-query+redirects-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+redirects-param-limit": "How many redirects to return.",
        "apihelp-query+redirects-param-show": "Show only items that meet these criteria:\n;fragment:Only show redirects with a fragment.\n;!fragment:Only show redirects without a fragment.",
 
        "apihelp-query+revisions-description": "Get revision information.\n\nMay be used in several ways:\n# Get data about a set of pages (last revision), by setting titles or pageids.\n# Get revisions for one given page, by using titles or pageids with start, end, or limit.\n# Get data about a set of revisions by setting their IDs with revids.",
        "apihelp-query+revisions-paraminfo-singlepageonly": "May only be used with a single page (mode #2).",
-       "apihelp-query+revisions-param-prop": "Which properties to get for each revision:\n;ids:The ID of the revision.\n;flags:Revision flags (minor).\n;timestamp:The timestamp of the revision.\n;user:User that made the revision.\n;userid:User id of revision creator.\n;size:Length (bytes) of the revision.\n;sha1:SHA-1 (base 16) of the revision.\n;contentmodel:Content model id.\n;comment:Comment by the user for revision.\n;parsedcomment:Parsed comment by the user for the revision.\n;content:Text of the revision.\n;tags:Tags for the revision.",
+       "apihelp-query+revisions-param-prop": "Which properties to get for each revision:\n;ids:The ID of the revision.\n;flags:Revision flags (minor).\n;timestamp:The timestamp of the revision.\n;user:User that made the revision.\n;userid:User ID of revision creator.\n;size:Length (bytes) of the revision.\n;sha1:SHA-1 (base 16) of the revision.\n;contentmodel:Content model ID.\n;comment:Comment by the user for revision.\n;parsedcomment:Parsed comment by the user for the revision.\n;content:Text of the revision.\n;tags:Tags for the revision.",
        "apihelp-query+revisions-param-limit": "Limit how many revisions will be returned.",
-       "apihelp-query+revisions-param-startid": "From which revision id to start enumeration.",
-       "apihelp-query+revisions-param-endid": "Stop revision enumeration on this revid.",
+       "apihelp-query+revisions-param-startid": "From which revision ID to start enumeration.",
+       "apihelp-query+revisions-param-endid": "Stop revision enumeration on this revision ID.",
        "apihelp-query+revisions-param-start": "From which revision timestamp to start enumeration.",
        "apihelp-query+revisions-param-end": "Enumerate up to this timestamp.",
        "apihelp-query+revisions-param-user": "Only include revisions made by user.",
        "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token",
 
        "apihelp-query+transcludedin-description": "Find all pages that transclude the given pages.",
-       "apihelp-query+transcludedin-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+transcludedin-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
        "apihelp-query+transcludedin-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+transcludedin-param-limit": "How many to return.",
        "apihelp-query+transcludedin-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
        "apihelp-query+watchlist-param-user": "Only list changes by this user.",
        "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user.",
        "apihelp-query+watchlist-param-limit": "How many total results to return per request.",
-       "apihelp-query+watchlist-param-prop": "Which additional items to get:\n;ids:Adds revision ids and page ids.\n;title:Adds title of the page.\n;flags:Adds flags for the edit.\n;user:Adds the user who made the edit.\n;userid:Adds user id of whom made the edit.\n;comment:Adds comment of the edit.\n;parsedcomment:Adds parsed comment of the edit.\n;timestamp:Adds timestamp of the edit.\n;patrol:Tags edits that are patrolled.\n;sizes:Adds the old and new lengths of the page.\n;notificationtimestamp:Adds timestamp of when the user was last notified about the edit.\n;loginfo:Adds log information where appropriate.",
+       "apihelp-query+watchlist-param-prop": "Which additional items to get:\n;ids:Adds revision IDs and page IDs.\n;title:Adds title of the page.\n;flags:Adds flags for the edit.\n;user:Adds the user who made the edit.\n;userid:Adds user ID of whom made the edit.\n;comment:Adds comment of the edit.\n;parsedcomment:Adds parsed comment of the edit.\n;timestamp:Adds timestamp of the edit.\n;patrol:Tags edits that are patrolled.\n;sizes:Adds the old and new lengths of the page.\n;notificationtimestamp:Adds timestamp of when the user was last notified about the edit.\n;loginfo:Adds log information where appropriate.",
        "apihelp-query+watchlist-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
        "apihelp-query+watchlist-param-type": "Which types of changes to show:\n;edit:Regular page edits.\n;external:External changes.\n;new:Page creations.\n;log:Log entries.",
        "apihelp-query+watchlist-param-owner": "Used along with $1token to access a different user's watchlist.",
        "apihelp-unblock-example-id": "Unblock block ID #105",
        "apihelp-unblock-example-user": "Unblock user Bob with reason \"Sorry Bob\"",
 
-       "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file ids can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file IDs can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
        "apihelp-undelete-param-title": "Title of the page to restore.",
        "apihelp-undelete-param-reason": "Reason for restoring.",
        "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both $1timestamps and $1fileids are empty, all will be restored.",
 
        "apihelp-userrights-description": "Change a user's group membership.",
        "apihelp-userrights-param-user": "User name.",
-       "apihelp-userrights-param-userid": "User id.",
+       "apihelp-userrights-param-userid": "User ID.",
        "apihelp-userrights-param-add": "Add the user to these groups.",
        "apihelp-userrights-param-remove": "Remove the user from these groups.",
        "apihelp-userrights-param-reason": "Reason for the change.",
        "apihelp-userrights-example-user": "Add user FooBot to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
-       "apihelp-userrights-example-userid": "Add the user with id 123 to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
+       "apihelp-userrights-example-userid": "Add the user with ID 123 to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
 
        "apihelp-watch-description": "Add or remove pages from the current user's watchlist.",
        "apihelp-watch-param-title": "The page to (un)watch. Use $1titles instead.",
diff --git a/includes/api/i18n/es.json b/includes/api/i18n/es.json
new file mode 100644 (file)
index 0000000..5768706
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Macofe"
+               ]
+       },
+       "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
+       "apihelp-query+images-description": "Devuelve todos los archivos contenidos en las páginas dadas.",
+       "apihelp-query+search-param-info": "Qué metadatos devolver.",
+       "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
+       "apihelp-query+watchlist-param-excludeuser": "No listar cambios de este usuario.",
+       "apihelp-query+watchlistraw-param-show": "Sólo listar los elementos que cumplen estos criterios."
+}
diff --git a/includes/api/i18n/fa.json b/includes/api/i18n/fa.json
new file mode 100644 (file)
index 0000000..7e51a3f
--- /dev/null
@@ -0,0 +1,200 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Alirezaaa",
+                       "Arash.pt",
+                       "Fatemi127",
+                       "Reza1615",
+                       "KhabarNegar"
+               ]
+       },
+       "apihelp-main-param-action": "کدام عملیات را انجام دهد.",
+       "apihelp-main-param-format": "فرمت خروجی.",
+       "apihelp-main-param-curtimestamp": "برچسب زمان کنونی را در نتیجه قرار دهید.",
+       "apihelp-block-description": "بستن کاربر",
+       "apihelp-block-param-user": "نام کاربری، آدرس آی پی یا محدوده آی پی موردنظر شما برای بستن.",
+       "apihelp-block-param-reason": "دلیل بسته‌شدن",
+       "apihelp-block-param-anononly": "بستن فقط کاربران ناشناس (مانند غیرفعال‌کردن ویرایش‌های ناشناس این آی‌پی).",
+       "apihelp-block-param-nocreate": "جلوگیری از ایجاد حساب.",
+       "apihelp-block-param-autoblock": "به طور خودکار آخرین نشانی آی‌پی استفاده‌شده، و هر نشانی پس از آن که سعی می‌کند از آن داخل شود را ببند.",
+       "apihelp-block-param-noemail": "از کاربر در برابر ارسال پست الکترونیکی از طریق ویکی جلوگیری شود. (نیازمند دسترسی «blockemail» است).",
+       "apihelp-block-param-hidename": "نام کاربری را از سیاههٔ بستن پنهان کن. (نیازمند دسترسی «hideuser» است).",
+       "apihelp-block-param-allowusertalk": "به کاربر برای ویرایش صفحه بحث‌شان اجازه دهید (بسته به $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "اگر کاربر پیش از این مسدود شده‌است، مسدود موجود را بازنویسی کن.",
+       "apihelp-block-param-watchuser": "صفحه‌های کاربر و بحث کاربر نشانی آی‌پی یا کاربر را پی‌گیری کنید.",
+       "apihelp-block-example-ip-simple": "آی‌پی ۱۹۲.۰.۲.۵ را برای سه روز همراه دلیل «نخستین برخورد» ببندید",
+       "apihelp-clearhasmsg-description": "پرچم hasmsg را برای کاربر جاری پاک کن.",
+       "apihelp-clearhasmsg-example-1": "پاک‌کردن پرچم hasmsg برای کاربر جاری",
+       "apihelp-compare-description": "تفاوت بین ۲ صفحه را بیابید.\n\nشما باید یک شماره بازبینی، یک عنوان صفحه، یا یک شناسه صفحه برای هر دو «از» و «به» مشخص کنید.",
+       "apihelp-compare-param-fromtitle": "عنوان اول برای مقایسه.",
+       "apihelp-compare-param-fromid": "شناسه صفحه اول برای مقایسه.",
+       "apihelp-compare-param-fromrev": "نسخه اول برای مقایسه.",
+       "apihelp-compare-param-totitle": "عنوان دوم برای مقایسه.",
+       "apihelp-compare-param-toid": "شناسه صفحه دوم برای مقایسه.",
+       "apihelp-compare-param-torev": "نسخه دوم برای مقایسه.",
+       "apihelp-compare-example-1": "ایجاد تفاوت بین نسخه 1 و 2",
+       "apihelp-createaccount-description": "ایجاد حساب کاربری",
+       "apihelp-createaccount-param-name": "نام کاربری.",
+       "apihelp-createaccount-param-password": "رمز عبور (نادیده گرفته می‌شود اگر $1mailpassword تنظیم شده‌باشد).",
+       "apihelp-createaccount-param-domain": "دامنه برای احراز هویت خارجی (اختیاری).",
+       "apihelp-createaccount-param-email": "رایانامه کاربر (اختیاری)",
+       "apihelp-createaccount-param-realname": "نام واقعی کاربر (اختیاری).",
+       "apihelp-createaccount-param-mailpassword": "اگر به هر مقداری تنظیم شود، یک رمز عبور تصادفی به کاربر ایمیل خواهد شد.",
+       "apihelp-createaccount-param-reason": "دلیل اختیاری برای ایجاد حساب کاربری جهت قرارگرفتن در سیاهه‌ها.",
+       "apihelp-createaccount-example-pass": "ایجاد کاربر «testuser» همراه رمز عبور «test123»",
+       "apihelp-createaccount-example-mail": "ایجاد کاربر «testmailuser» و ایمیل‌کردن یک رمز عبور تصادفی ساخته‌شده",
+       "apihelp-delete-description": "حذف صفحه",
+       "apihelp-delete-param-title": "عنوان صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار $1pageid استفاده شود.",
+       "apihelp-delete-param-pageid": "شناسه صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار $1title استفاده شود.",
+       "apihelp-delete-param-reason": "دلیل برای حذف. اگر تنظیم نشود، یک دلیل خودکار ساخته‌شده استفاده می‌شود.",
+       "apihelp-delete-param-watch": "افزودن صفحه به فهرست پی‌گیری شما",
+       "apihelp-delete-param-unwatch": "صفحه را از پی‌گیری‌تان حذف کنید.",
+       "apihelp-delete-example-simple": "حذف صفحه اصلی",
+       "apihelp-delete-example-reason": "حذف صفحهٔ اصلی همراه دلیل «آماده برای انتقال»",
+       "apihelp-disabled-description": "این پودمان غیرفعال شده است.",
+       "apihelp-edit-description": "ایجاد و ویرایش صفحه",
+       "apihelp-edit-param-title": "عنوان صفحه‌ای که قصد ویرایشش را دارید. نمی‌تواند در کنار $1pageid استفاده شود.",
+       "apihelp-edit-param-pageid": "شناسه صفحهٔ صفحه‌ای که می‌خواهید ویرایشش کنید. نمی‌تواند در کنار $1title استفاده شود.",
+       "apihelp-edit-param-section": "شماره بخش. ۰ برای بخش بالا، «تازه» برای یک بخش تازه.",
+       "apihelp-edit-param-sectiontitle": "عنوان برای بخش جدید.",
+       "apihelp-edit-param-text": "محتوای صفحه.",
+       "apihelp-edit-param-summary": "خلاصه را ویرایش کنید. همچنین عنوان بخش را زمانی که $1section=تازه و $1sectiontitle تنظیم نشده‌است.",
+       "apihelp-edit-param-minor": "ویرایش جزئی.",
+       "apihelp-edit-param-notminor": "ویرایش غیر جزئی.",
+       "apihelp-edit-param-bot": "علامت زدن این ویرایش به عنوان ویرایش ربات.",
+       "apihelp-edit-param-createonly": "اگر صفحه موجود بود، ویرایش نکن.",
+       "apihelp-edit-param-nocreate": "رها کردن خطا در صورتی که صفحه وجود ندارد.",
+       "apihelp-edit-param-watch": "افزودن صفحه به فهرست پی‌گیری شما",
+       "apihelp-edit-param-unwatch": "حذف صفحه از فهرست پی‌گیری شما",
+       "apihelp-edit-param-prependtext": "این متن را به ابتدای صفحه اضافه کنید. $1text را لغو می‌کند.",
+       "apihelp-edit-param-redirect": "اصلاح خودکار تغییرمسیرها.",
+       "apihelp-edit-example-edit": "ویرایش صفحه",
+       "apihelp-emailuser-description": "ایمیل به کاربر",
+       "apihelp-emailuser-param-target": "کاربر برای ارسال رایانامه.",
+       "apihelp-emailuser-param-subject": "موضوع هدر.",
+       "apihelp-emailuser-param-text": "متن رایانه.",
+       "apihelp-emailuser-param-ccme": "ارسال یک نسخه از رایانه به شما.",
+       "apihelp-expandtemplates-param-title": "عنوان صفحه",
+       "apihelp-expandtemplates-param-text": "تبدیل برای ویکی‌متن.",
+       "apihelp-feedcontributions-param-feedformat": "فرمت خوراک.",
+       "apihelp-feedcontributions-param-namespace": "فیلتر شدن مشارکتها براساس فضای نام.",
+       "apihelp-feedcontributions-param-year": "از سال (و پیش از آن).",
+       "apihelp-feedcontributions-param-month": "از ماه (و پیش از آن).",
+       "apihelp-feedcontributions-param-tagfilter": "فیلتر کردن مشارکتها براساس این برچسب‌ها.",
+       "apihelp-feedcontributions-param-deletedonly": "فقط مشارکت‌های حذف شده نمایش داده شود.",
+       "apihelp-feedcontributions-param-toponly": "فقط ویرایش‌هایی که آخرین نسخه‌اند نمایش داده شود.",
+       "apihelp-feedcontributions-param-newonly": "فقط نمایش ویرایش‌هایی که تولید‌های صفحه هستند.",
+       "apihelp-feedcontributions-param-showsizediff": "نمایش تفاوت حجم تغییرات بین نسخه‌ها.",
+       "apihelp-feedrecentchanges-param-feedformat": "فرمت خوراک.",
+       "apihelp-feedrecentchanges-param-namespace": "فضای نام برای محدودکردن نتایج به.",
+       "apihelp-feedrecentchanges-param-invert": "همهٔ فضاهای نام به جز انتخاب‌شده‌ها.",
+       "apihelp-feedrecentchanges-param-days": "روز برای محدود کردن نتایج.",
+       "apihelp-feedrecentchanges-param-limit": "حداکثر تعداد نتایج خروجی.",
+       "apihelp-feedrecentchanges-param-from": "نمایش تغییرات پس از آن.",
+       "apihelp-feedrecentchanges-param-hideminor": "پنهان کردن تغییرات جزئی.",
+       "apihelp-feedrecentchanges-param-hidebots": "پنهان کردن تغییرات انجام شده توسط ربات‌ها.",
+       "apihelp-feedrecentchanges-param-hideanons": "پنهان کردن ویرایش‌های کاربران ناشناس.",
+       "apihelp-feedrecentchanges-param-hideliu": "پنهان کردن ویرایش‌های کاربران ثبت‌نام کرده.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "پنهان کردن ویرایش گشت‌زن‌ها.",
+       "apihelp-feedrecentchanges-param-hidemyself": "پنهان کردن ویرایش‌های خودتان.",
+       "apihelp-feedrecentchanges-param-tagfilter": "فیلتر کردن براساس برچسب",
+       "apihelp-feedrecentchanges-param-target": "فقط نمایش ویرایش‌هایی که پیوند دارند به این صفحه.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "نمایش ویرایش‌ها بر روی صفحات پیوند داده شده به صفحات انتخاب شده.",
+       "apihelp-feedrecentchanges-example-simple": "نمایش تغییرات اخیر",
+       "apihelp-feedrecentchanges-example-30days": "نمایش تغییرات اخیر در 30 روز اخیر",
+       "apihelp-feedwatchlist-description": "برگرداندن فهرست پیگیری‌های خوراک.",
+       "apihelp-feedwatchlist-param-feedformat": "فرمت خوراک.",
+       "apihelp-feedwatchlist-example-default": "نمایش خوراک فهرست پی‌گیری",
+       "apihelp-filerevert-description": "واگردانی فایل به یک نسخه قدیمی",
+       "apihelp-filerevert-param-comment": "ارسال دیدگاه.",
+       "apihelp-help-example-main": "راهنما برای پودمان اصلی",
+       "apihelp-help-example-recursive": "همهٔ راهنما در یک صفحه",
+       "apihelp-help-example-help": "راهنما برای خود ماژول راهنما",
+       "apihelp-help-example-query": "راهنما برای دو زیر پودمان کوئری",
+       "apihelp-imagerotate-description": "چرخاندن یک یا چند تصویر",
+       "apihelp-imagerotate-param-rotation": "درجه برای چرخاندن تصویر در جهت ساعت‌گرد.",
+       "apihelp-imagerotate-example-simple": "چرخاندن ۹۰ درجه برای [[:File:Example.png]]",
+       "apihelp-imagerotate-example-generator": "چرخاندن ۱۸۰ درجه برای همهٔ تصاویر موجود در [[:Category:Flip]]",
+       "apihelp-import-param-summary": "خلاصه درون‌ریزی.",
+       "apihelp-import-param-xml": "پرونده XML بارگذاری شد.",
+       "apihelp-import-param-interwikisource": "برای درون‌ریز میان‌ویکی: ویکی برای درون‌ریزی از.",
+       "apihelp-import-param-interwikipage": "برای درون‌ریز میان‌ویکی: صفحه برای درون‌ریزی.",
+       "apihelp-import-param-fullhistory": "برای درون‌ریزی میان‌ویکی: درون‌ریزی تاریخچهٔ کامل، نه فقط نسخهٔ موجود.",
+       "apihelp-import-param-templates": "برای درون ریزی میان‌ویکی: همچنین درون‌ریزی الگوهای مورد استفاده.",
+       "apihelp-import-param-namespace": "برای درون‌ریزی میان‌ویکی: درون‌ریزی به این فضای نام.",
+       "apihelp-import-param-rootpage": "درون‌ریزی به عنوان زیر صفحهٔ این صفحه.",
+       "apihelp-login-param-name": "نام کاربری.",
+       "apihelp-login-param-password": "گذرواژه.",
+       "apihelp-login-param-domain": "دامنه (اختیاری)",
+       "apihelp-login-example-gettoken": "دریافت توکن ورود",
+       "apihelp-login-example-login": "ورود",
+       "apihelp-logout-description": "خروج به همراه پاک نمودن اطلاعات این نشست",
+       "apihelp-logout-example-logout": "خروج کاربر فعلی",
+       "apihelp-move-description": "انتقال صفحه",
+       "apihelp-move-param-to": "عنوانی که شما قصد دارید صفحه را به آن نام تغییر دهید.",
+       "apihelp-move-param-reason": "دلیل انتقال",
+       "apihelp-move-param-movetalk": "انتقال صفحهٔ بحث اگر وجود دارد.",
+       "apihelp-move-param-movesubpages": "انتقال زیر صفحه‌ها اگر امکان‌پذیر است.",
+       "apihelp-move-param-noredirect": "عدم ساخت تغییرمسیر.",
+       "apihelp-move-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+       "apihelp-opensearch-param-search": "جستجوی رشته.",
+       "apihelp-opensearch-param-limit": "حداکثر تعداد نتایج برای بازگرداندن.",
+       "apihelp-opensearch-param-namespace": "فضاهای نامی برای جستجو",
+       "apihelp-opensearch-param-format": "فرمت خروجی.",
+       "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با «ته» آغاز می‌شوند",
+       "apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
+       "apihelp-parse-example-page": "تجزیه یک صفحه.",
+       "apihelp-parse-example-text": "تجزیه متن ویکی.",
+       "apihelp-parse-example-summary": "تجزیه خلاصه.",
+       "apihelp-patrol-description": "گشت‌زنی یک صفحه یا نسخهٔ ویرایشی.",
+       "apihelp-patrol-example-rcid": "گشت‌زنی یک تغییر اخیر",
+       "apihelp-patrol-example-revid": "گشت‌زدن یک نسخه",
+       "apihelp-protect-description": "تغییر سطح محافظت صفحه",
+       "apihelp-protect-param-reason": "دلیل برای (عدم) حفاظت.",
+       "apihelp-protect-example-protect": "محافظت از صفحه",
+       "apihelp-protect-example-unprotect": "خارج ساختن صفحه از حفاظت با تغییر سطح حفاظتی به \"همگان\"",
+       "apihelp-protect-example-unprotect2": "خارج ساختن صفحه از حفاظت با قراردادن هیچ‌گونه محدودیت‌حفاظتی",
+       "apihelp-purge-param-forcelinkupdate": "به‌روزرسانی جداول پیوندها.",
+       "apihelp-query+allfileusages-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+       "apihelp-query+allfileusages-param-dir": "جهتی که باید فهرست شود.",
+       "apihelp-query+allfileusages-example-unique": "فهرست پرونده‌های با عنوان یکتا",
+       "apihelp-query+allfileusages-example-unique-generator": "گرفتن عنوان همهٔ پرونده‌ها، برچسب زدن موارد گم شده",
+       "apihelp-query+allfileusages-example-generator": "گرفتن صفحاتی که دارای پرونده هستند",
+       "apihelp-query+allimages-description": "متوالی شمردن همهٔ تصاویر.",
+       "apihelp-query+allimages-param-sort": "خصوصیت برای مرتب‌سازی بر پایه آن",
+       "apihelp-query+allimages-param-dir": "جهتی که باید فهرست شود.",
+       "apihelp-query+allimages-param-minsize": "محدودکردن به صفحه‌هایی که دست کم این تعداد بایت دارند.",
+       "apihelp-query+allimages-param-maxsize": "محدودکردن به صفحه‌هایی که حداکثر این تعداد بایت دارند.",
+       "apihelp-query+alllinks-param-namespace": "فضای نامی که باید شمرده شود.",
+       "apihelp-query+alllinks-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+       "apihelp-query+alllinks-param-dir": "جهتی که باید فهرست شود.",
+       "apihelp-query+allpages-param-filterredir": "صفحه‌هایی که باید فهرست شوند.",
+       "apihelp-query+allpages-param-minsize": "محدودکردن به صفحه‌هایی که همراه دست کم این تعداد بایت است.",
+       "apihelp-query+allredirects-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+       "apihelp-query+categorymembers-description": "فهرست‌کردن همهٔ صفحه‌ها در یک ردهٔ مشخص‌شده.",
+       "apihelp-query+categorymembers-param-startsortkey": "جایش از $1starthexsortkey استفاده کنید.",
+       "apihelp-query+imageinfo-param-urlheight": "مشابه $1urlwidth.",
+       "apihelp-query+info-description": "دریافت اطلاعات سادهٔ صفحه.",
+       "apihelp-query+iwbacklinks-param-prefix": "پیشوند میان‌ویکی.",
+       "apihelp-query+iwbacklinks-param-title": "پیوند میان‌ویکی برای جستجو. باید همراه $1blprefix استفاده شود.",
+       "apihelp-query+iwbacklinks-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+       "apihelp-query+linkshere-param-limit": "تعداد برای بازگرداندن.",
+       "apihelp-query+logevents-description": "دریافت رویدادها از سیاهه‌ها.",
+       "apihelp-query+protectedtitles-param-namespace": "فقط عنوان‌ها در این فضاهای نام را فهرست کنید.",
+       "apihelp-query+protectedtitles-param-level": "فقط عنوان‌ها در این سطح‌های حفاظت را فهرست کنید.",
+       "apihelp-query+protectedtitles-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+       "apihelp-query+protectedtitles-param-start": "آغاز فهرست‌کردن از این برچسب زمانی حفاظت.",
+       "apihelp-query+protectedtitles-param-end": "متوقف‌کردن فهرست‌کردن در این برچسب زمانی حفاظت.",
+       "apihelp-query+random-param-namespace": "بازگرداندن صفحه‌های فقط در این فضاهای نام.",
+       "apihelp-query+random-param-limit": "محدود کنید چه تعداد صفحه بازگردانده خواهد شد.",
+       "apihelp-query+random-param-redirect": "یک تغییرمسیر تصادفی جای یک صفحه تصادفی بارگیری کنید.",
+       "apihelp-query+random-example-simple": "بازگرداندن تو صفحهٔ تصادفی از فضای نام اصلی",
+       "apihelp-query+random-example-generator": "بازگرداندن اطلاعات صفحه دربارهٔ دو صفحهٔ تصادفی از فضای نام اصلی",
+       "apihelp-query+recentchanges-param-start": "برچسب زمانی برای آغاز شمارش از.",
+       "apihelp-query+recentchanges-param-end": "برچسب زمانی برای پایان شمارش.",
+       "apihelp-query+redirects-param-limit": "تعداد تغییرمسیرها برای بازگرداندن.",
+       "apihelp-upload-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+       "apihelp-userrights-param-user": "نام کاربری.",
+       "api-help-param-deprecated": "توصیه.",
+       "api-credits-header": "اعتبار"
+}
diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json
new file mode 100644 (file)
index 0000000..5821c4a
--- /dev/null
@@ -0,0 +1,510 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gomoko",
+                       "Windes"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Documentation]\n* [https://www.mediawiki.org/wiki/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en  cours de développement, et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Demandes erronées :</strong> Qaund des demandes erronés sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error » et à la fois la valeur de l’entête et le code d’erreur retourné prendront la même valeur. Pour plus d’information, voyez https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Quelle action effectuer.",
+       "apihelp-main-param-format": "Le format de sortie.",
+       "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur « maxlag » est renvoyé avec un message tel que « Attente de $host : $lag secondes de délai ».<br />Voyez https://www.mediawiki.org/wiki/Manual:Maxlag_parameter pour plus d’information.",
+       "apihelp-main-param-smaxage": "Fixer l’entête s-maxage à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+       "apihelp-main-param-maxage": "Fixer l’entête max-age à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+       "apihelp-main-param-assert": "Vérifier si l’utilisateur est connecté si positionné à « user », ou a le droit utilisateur robot si positionné à « bot ».",
+       "apihelp-main-param-requestid": "Toute valeur fournie ici sera incluse dans la réponse. Peut être utilisé pour distinguer des demandes.",
+       "apihelp-main-param-servedby": "Inclure le nom d’hôte qui a renvoyé la requête dans les résultats.",
+       "apihelp-main-param-curtimestamp": "Inclure l’horodatage actuel dans le résultat.",
+       "apihelp-main-param-origin": "En accédant à l’API en utilisant une requête AJAX inter-domaines (CORS), mettre le domaine d’origine dans ce paramètre. Il doit être inclus dans toute requête de pre-flight, et ne doit donc pas faire partie de l’URI de la requête (ni du corps du POST). Il doit correspondre exactement à une des origines dans l’entête Origin: header, donc il doit être fixé avec quelque chose comme http://en.wikipedia.org or https://meta.wikimedia.org. Si ce paramètre ne correspond pas à l’entête Origin:, une réponse 403 sera renvoyée. Si ce paramètre correspond à l’entête Origin: et que l’origine est en liste blanche, un entête Access-Control-Allow-Origin sera positionné.",
+       "apihelp-main-param-uselang": "Langue à utiliser pour les traductions de message. Une liste de codes peut être analysée depuis [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], ou en spécifiant « user » pour utiliser la préférence de langue de l’utilisateur actuel.",
+       "apihelp-block-description": "Bloquer un utilisateur.",
+       "apihelp-block-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresses IP que vous voulez bloquer.",
+       "apihelp-block-param-expiry": "Durée d’expiration. Peut être relative (par ex. « 5 mois » ou « 2 semaines ») ou absolue (par ex. « 2014-09-18T12:34:56Z »). Si elle est mise à « infinite », « indefinite » ou « never », le blocage n’expirera jamais.",
+       "apihelp-block-param-reason": "Motif du blocage.",
+       "apihelp-block-param-anononly": "Bloquer uniquement les utilisateurs anonymes (c’est-à-dire désactiver les modifications anonymes pour cette adresse IP).",
+       "apihelp-block-param-nocreate": "Empêcher la création de compte.",
+       "apihelp-block-param-autoblock": "Bloquer automatiquement la dernière adresse IP utilisée, et toute les adresses IP subséquentes depuis lesquelles ils ont essayé de se connecter.",
+       "apihelp-block-param-noemail": "Empêcher l’utilisateur d’envoyer des courriels via le wiki (nécessite le doit « blockemail »).",
+       "apihelp-block-param-hidename": "Masque le nom de l’utilisateur dans le journal des blocages (nécessite le droit « hideuser »).",
+       "apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "Si l’utilisateur est déjà bloqué, écraser le blocage existant.",
+       "apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
+       "apihelp-block-example-ip-simple": "Bloquer l’adresse IP 192.0.2.5 pour trois jours avec le motif « Premier avertissement ».",
+       "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur Vandale avec le motif « Vandalisme », et empêcher la création de nouveau compte et de courriel",
+       "apihelp-clearhasmsg-description": "Efface le drapeau hasmsg pour l’utilisateur courant.",
+       "apihelp-clearhasmsg-example-1": "Effacer le drapeau hasmsg pour l’utilisateur courant",
+       "apihelp-compare-description": "Obtenir la différence entre 2 pages.\n\nVous devez passer un numéro de révision, un titre de page, ou un ID de page, à la fois pour « from » et « to ».",
+       "apihelp-compare-param-fromtitle": "Premier titre à comparer.",
+       "apihelp-compare-param-fromid": "ID de la première page à comparer.",
+       "apihelp-compare-param-fromrev": "Première révision à comparer.",
+       "apihelp-compare-param-totitle": "Second titre à comparer.",
+       "apihelp-compare-param-toid": "ID de la seconde page à comparer.",
+       "apihelp-compare-param-torev": "Seconde révision à comparer.",
+       "apihelp-compare-example-1": "Créer une différence entre les révisions 1 et 2",
+       "apihelp-createaccount-description": "Créer un nouveau compte utilisateur.",
+       "apihelp-createaccount-param-name": "Nom d’utilisateur.",
+       "apihelp-createaccount-param-password": "Mot de passe (ignoré si $1mailpassword est défini).",
+       "apihelp-createaccount-param-domain": "Domaine pour l’authentification externe (facultatif).",
+       "apihelp-createaccount-param-token": "Jeton de création de compte obtenu à la première requête.",
+       "apihelp-createaccount-param-email": "Adresse de courriel de l’utilisateur (facultatif).",
+       "apihelp-createaccount-param-realname": "Vrai nom de l’utilisateur (facultatif).",
+       "apihelp-createaccount-param-mailpassword": "S’il est fixé à une valeur quelconque, un mot de passe aléatoire sera envoyé par courriel à l’utilisateur.",
+       "apihelp-createaccount-param-reason": "Motif facultatif de création du compte à mettre dans les journaux.",
+       "apihelp-createaccount-param-language": "Code de langue à mettre par défaut pour l’utilisateur (facultatif, par défaut langue du contenu).",
+       "apihelp-createaccount-example-pass": "Créer l’utilisateur « testuser » avec le mot de passe « test123 »",
+       "apihelp-createaccount-example-mail": "Créer l’utilisateur « testmailuser » et envoyer par courriel un mot de passe généré aléatoirement",
+       "apihelp-delete-description": "Supprimer une page.",
+       "apihelp-delete-param-title": "Titre de la page que vous voulez supprimer. Impossible de l’utiliser avec $1pageid.",
+       "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec $1title.",
+       "apihelp-delete-param-reason": "Motif de suppression. Si non défini, un motif généré automatiquement sera utilisé.",
+       "apihelp-delete-param-watch": "Ajouter la page à votre liste de suivi.",
+       "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-delete-param-unwatch": "Supprimer la page de votre liste de suivi.",
+       "apihelp-delete-param-oldimage": "Le nom de l’ancienne image à supprimer tel que fourni par [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Supprimer la Page principale",
+       "apihelp-delete-example-reason": "Supprimer la Page principale avec le motif « Préparation au déplacement »",
+       "apihelp-disabled-description": "Ce module a été désactivé.",
+       "apihelp-edit-description": "Créer et modifier les pages.",
+       "apihelp-edit-param-title": "Titre de la page que vous voulez modifier. Impossible de l’utiliser avec $1pageid.",
+       "apihelp-edit-param-pageid": "ID de la page que vous voulez modifier. Impossible à utiliser avec $1title.",
+       "apihelp-edit-param-section": "Numéro de section. 0 pour la section de tête, « new » pour une nouvelle section.",
+       "apihelp-edit-param-sectiontitle": "Le titre pour une nouvelle section.",
+       "apihelp-edit-param-text": "Contenu de la page.",
+       "apihelp-edit-param-summary": "Modifier le résumé. Également le titre de la section quand $1section=new et $1sectiontitle n’est pas défini.",
+       "apihelp-edit-param-minor": "Modification mineure.",
+       "apihelp-edit-param-notminor": "Modification non mineure.",
+       "apihelp-edit-param-bot": "Marquer cette modification comme robot.",
+       "apihelp-edit-param-basetimestamp": "Horodatage de la révision de base, utilisé pour détecter les conflits de modification. Peut être obtenu via [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Horodatage quand vous avez commencé le processus de modification, utilisé pour détecter les conflits de modification. Une valeur appropriée peut être obtenue en utilisant [[Special:ApiHelp/main|curtimestamp]] lors du démarrage du processus de modification (par ex. en chargeant le contenu de la page à modifier).",
+       "apihelp-edit-param-recreate": "Écraser toutes les erreurs sur l’article ayant été supprimé pendant ce temps.",
+       "apihelp-edit-param-createonly": "Ne pas modifier la page si elle existe déjà.",
+       "apihelp-edit-param-nocreate": "Lever une erreur si la page n’existe pas.",
+       "apihelp-edit-param-watch": "Ajouter la page à votre liste de suivi.",
+       "apihelp-edit-param-unwatch": "Supprimer la page de votre liste de suivi.",
+       "apihelp-edit-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas changer le suivi.",
+       "apihelp-edit-param-md5": "Le hachage MD5 du paramètre $1text, ou les paramètres $1prependtext et $1appendtext concaténés. Si défini, la modification ne sera pas effectuée à moins que le hachage ne soit correct.",
+       "apihelp-edit-param-prependtext": "Ajouter ce texte au début de la page. Écrase $1text.",
+       "apihelp-edit-param-appendtext": "Ajouter ce texte à la fin de la page. Écrase $1text.\n\nUtiliser $1section=new pour ajouter une nouvelle section, plutôt que ce paramètre.",
+       "apihelp-edit-param-undo": "Annuler cette révision. Écrase $1text, $1prependtext et $1appendtext.",
+       "apihelp-edit-param-undoafter": "Annuler toutes les révisions depuis $1undo jusqu’à celle-ci. Si non défini, annuler uniquement une révision.",
+       "apihelp-edit-param-redirect": "Résoudre automatiquement les redirections.",
+       "apihelp-edit-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée.",
+       "apihelp-edit-param-contentmodel": "Modèle de contenu du nouveau contenu.",
+       "apihelp-edit-param-token": "Le jeton doit toujours être envoyé en tant que dernier paramètre, ou au moins après le paramètre $1text.",
+       "apihelp-edit-example-edit": "Modifier une page",
+       "apihelp-edit-example-prepend": "Préfixer une page par _&#95;NOTOC_&#95;",
+       "apihelp-edit-example-undo": "Annuler les révisions 13579 à 13585 avec résumé automatique",
+       "apihelp-emailuser-description": "Envoyer un courriel à un utilisateur.",
+       "apihelp-emailuser-param-target": "Utilisateur à qui envoyer le courriel.",
+       "apihelp-emailuser-param-subject": "Entête du sujet.",
+       "apihelp-emailuser-param-text": "Corps du courriel.",
+       "apihelp-emailuser-param-ccme": "M’envoyer une copie de ce courriel.",
+       "apihelp-emailuser-example-email": "Envoyer un courriel à l’utilisateur « WikiSysop » avec le texte « Contenu »",
+       "apihelp-expandtemplates-description": "Développe tous les modèles en wikitexte.",
+       "apihelp-expandtemplates-param-title": "Titre de la page.",
+       "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
+       "apihelp-expandtemplates-param-prop": "Quelles informations récupérer :\n;wikitext:Le wikitexte développé.\n;categories:Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans le wikitexte de sortie.\n;volatile:Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.\n;ttl:Le délai maximal après lequel les caches du résultat devraient être invalidés.\n;parsetree:L’arbre d’analyse XML de l’entrée.\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format obsolète.",
+       "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.",
+       "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Développe le wikitexte « <nowiki>{{Project:Sandbox}}</nowiki> »",
+       "apihelp-feedcontributions-description": "Renvoie le fil des contributions d’un utilisateur.",
+       "apihelp-feedcontributions-param-feedformat": "Le format du flux.",
+       "apihelp-feedcontributions-param-user": "Pour quels utilisateurs récupérer les contributions.",
+       "apihelp-feedcontributions-param-namespace": "Par quels espaces de nom filtrer les contributions.",
+       "apihelp-feedcontributions-param-year": "Depuis l’année (et plus récent).",
+       "apihelp-feedcontributions-param-month": "Depuis le mois (et plus récent).",
+       "apihelp-feedcontributions-param-tagfilter": "Filtrer les contributions qui ont ces balises.",
+       "apihelp-feedcontributions-param-deletedonly": "Afficher uniquement les contributions supprimées.",
+       "apihelp-feedcontributions-param-toponly": "Afficher uniquement les modifications qui sont les dernières révisions.",
+       "apihelp-feedcontributions-param-newonly": "Afficher uniquement les modifications qui sont des créations de page.",
+       "apihelp-feedcontributions-param-showsizediff": "Afficher la différence de taille entre les révisions.",
+       "apihelp-feedcontributions-example-simple": "Renvoyer les contributions de [[User:Example]]",
+       "apihelp-feedrecentchanges-description": "Renvoie un fil de modifications récentes.",
+       "apihelp-feedrecentchanges-param-feedformat": "Le format du flux.",
+       "apihelp-feedrecentchanges-param-namespace": "Espace de noms auquel limiter les résultats.",
+       "apihelp-feedrecentchanges-param-invert": "Tous les espaces de nom sauf le sélectionné.",
+       "apihelp-feedrecentchanges-param-associated": "Inclure l’espace de noms associé (discussion ou principal).",
+       "apihelp-feedrecentchanges-param-days": "Jours auxquels limiter le résultat.",
+       "apihelp-feedrecentchanges-param-limit": "Nombre maximal de résultats à renvoyer.",
+       "apihelp-feedrecentchanges-param-from": "Afficher les modifications depuis lors.",
+       "apihelp-feedrecentchanges-param-hideminor": "Masquer les modifications mineures.",
+       "apihelp-feedrecentchanges-param-hidebots": "Masquer les modifications faites par des robots.",
+       "apihelp-feedrecentchanges-param-hideanons": "Masquer les modifications faites par des utilisateurs anonymes.",
+       "apihelp-feedrecentchanges-param-hideliu": "Masquer les modifications faites par des utilisateurs enregistrés.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Masquer les modifications contrôlées.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Masquer les modifications que vous avez faites.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtrer par balise.",
+       "apihelp-feedrecentchanges-param-target": "Afficher uniquement les modifications sur les pages liées depuis cette page.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Afficher les modifications plutôt sur les pages liées vers la page sélectionnée.",
+       "apihelp-feedrecentchanges-example-simple": "Afficher les modifications récentes",
+       "apihelp-feedrecentchanges-example-30days": "Afficher les modifications récentes sur 30 jours",
+       "apihelp-feedwatchlist-description": "Renvoie un flux de liste de suivi.",
+       "apihelp-feedwatchlist-param-feedformat": "Le format du flux.",
+       "apihelp-feedwatchlist-param-hours": "Lister les pages modifiées lors de ce nombre d’heures depuis maintenant.",
+       "apihelp-feedwatchlist-param-linktosections": "Lier directement pour modifier les sections si possible.",
+       "apihelp-feedwatchlist-example-default": "Afficher le flux de la liste de suivi",
+       "apihelp-feedwatchlist-example-all6hrs": "Afficher toutes les modifications sur les pages suivies dans les dernières 6 heures",
+       "apihelp-filerevert-description": "Rétablir un fichier dans une ancienne version.",
+       "apihelp-filerevert-param-filename": "Nom de fichier cible, sans le préfixe File:.",
+       "apihelp-filerevert-param-comment": "Télécharger le commentaire.",
+       "apihelp-filerevert-param-archivename": "Nom d’archive de la révision à rétablir.",
+       "apihelp-filerevert-example-revert": "Rétablir Wiki.png dans la version du 2011-03-05T15:27:40Z",
+       "apihelp-help-description": "Afficher l’aide pour les modules spécifiés.",
+       "apihelp-help-param-modules": "Modules pour lesquels afficher l’aide (valeurs des paramètres action= et format=, ou « main »). Les sous-modules peuvent être spécifiés avec un « + ».",
+       "apihelp-help-param-submodules": "Inclure l’aide pour les sous-modules du module nommé.",
+       "apihelp-help-param-recursivesubmodules": "Inclure l’aide pour les sous-modules de façon récursive.",
+       "apihelp-help-param-helpformat": "Format de sortie de l’aide.",
+       "apihelp-help-param-wrap": "Inclut la sortie dans une structure de réponse API standard.",
+       "apihelp-help-param-toc": "Inclure une table des matières dans la sortir HTML.",
+       "apihelp-help-example-main": "Aide pour le module principal",
+       "apihelp-help-example-recursive": "Toute l’aide sur une page",
+       "apihelp-help-example-help": "Aide pour le module d’aide lui-même",
+       "apihelp-help-example-query": "Aide pour deux sous-modules de recherche",
+       "apihelp-imagerotate-description": "Faire pivoter une ou plusieurs images.",
+       "apihelp-imagerotate-param-rotation": "Degrés de rotation de l’image dans le sens des aiguilles d’une montre.",
+       "apihelp-imagerotate-example-simple": "Faire pivoter [[:File:Example.png]] de 90 degrés",
+       "apihelp-imagerotate-example-generator": "Faire pivoter toutes les images de [[:Category:Flip]] de 180 degrés",
+       "apihelp-import-description": "Importer une page depuis un autre wiki, ou un fichier XML.\n\nNoter que le POST HTTP doit être effectué comme un import de fichier (c’est-à-dire en utilisant multipart/form-data) lors de l’envoi d’un fichier pour le paramètre « xml ».",
+       "apihelp-import-param-summary": "Importer le résumé.",
+       "apihelp-import-param-xml": "Fichier XML téléchargé.",
+       "apihelp-import-param-interwikisource": "Pour les importations interwiki : wiki depuis lequel importer.",
+       "apihelp-import-param-interwikipage": "Pour les importations interwiki : page à importer.",
+       "apihelp-import-param-fullhistory": "Pour les importations interwiki : importer tout l’historique, et pas seulement la version courante.",
+       "apihelp-import-param-templates": "Pour les importations interwiki : importer aussi tous les modèles inclus.",
+       "apihelp-import-param-namespace": "Pour les importations interwiki : importer vers cet espace de noms.",
+       "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page.",
+       "apihelp-import-example-import": "Importer [[meta:Help:Parserfunctions]] vers l’espace de noms 100 avec tout l’historique.",
+       "apihelp-login-description": "Se connecter et obtenir les cookies d’authentification.\n\nDans le cas d’une connexion réussie, les cookies nécessaires seront inclus dans les entêtes de la réponse HTTP. Dans le cas d’une connexion en échec, les essais ultérieurs pourront être réduits afin de limiter les attaques automatisées de découverte du mot de passe.",
+       "apihelp-login-param-name": "Nom d’utilisateur.",
+       "apihelp-login-param-password": "Mot de passe.",
+       "apihelp-login-param-domain": "Domaine (facultatif).",
+       "apihelp-login-param-token": "Jeton de connexion obtenu à la première requête.",
+       "apihelp-login-example-gettoken": "Récupérer un jeton de connexion",
+       "apihelp-login-example-login": "Se connecter",
+       "apihelp-logout-description": "Se déconnecter et effacer les données de session.",
+       "apihelp-logout-example-logout": "Déconnecter l’utilisateur actuel.",
+       "apihelp-move-description": "Déplacer une page.",
+       "apihelp-move-param-from": "Titre de la page que vous voulez déplacer. Impossible de l’utiliser avec $1fromid.",
+       "apihelp-move-param-fromid": "ID de la page que vous voulez déplacer. Impossible à utiliser avec $1from.",
+       "apihelp-move-param-to": "Titre de la page renommée.",
+       "apihelp-move-param-reason": "Motif du déplacement.",
+       "apihelp-move-param-movetalk": "Déplacer la page de discussion, si elle existe.",
+       "apihelp-move-param-movesubpages": "Déplacer les sous-pages, le cas échéant.",
+       "apihelp-move-param-noredirect": "Ne pas créer une redirection.",
+       "apihelp-move-param-watch": "Ajouter une page et la redirection à votre liste de suivi.",
+       "apihelp-move-param-unwatch": "Supprimer la page et la redirection de votre liste de suivi.",
+       "apihelp-move-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas changer le suivi.",
+       "apihelp-move-param-ignorewarnings": "Ignorer tous les avertissements.",
+       "apihelp-move-example-move": "Déplacer « Mauvais titre » en « Bon titre » sans garder de redirection",
+       "apihelp-opensearch-description": "Rechercher dans le wiki en utilisant le protocole OpenSearch.",
+       "apihelp-opensearch-param-search": "Chaîne de recherche.",
+       "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+       "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher.",
+       "apihelp-opensearch-param-suggest": "Ne rien faire si [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] vaut faux.",
+       "apihelp-opensearch-param-format": "Le format de sortie.",
+       "apihelp-opensearch-example-te": "Trouver les pages commençant par « Te »",
+       "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec une clé préfixée par « userjs- » (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
+       "apihelp-options-param-reset": "Réinitialise les préférences aux valeurs par défaut du site.",
+       "apihelp-options-param-resetkinds": "Liste des types d’option à réinitialiser quand l’option « $1reset » est définie.",
+       "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). La valeur ne peut pas contenir de caractère barre verticale. Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut.",
+       "apihelp-options-param-optionname": "Un nom d’option qui doit être fixé à la valeur fournie par « $1optionvalue ».",
+       "apihelp-options-param-optionvalue": "La valeur d’une option spécifiée par « $1optionname » peut contenir des caractères barre verticale.",
+       "apihelp-options-example-reset": "Réinitialiser toutes les préférences",
+       "apihelp-options-example-change": "Modifier les préférences « skin » et « hideminor »",
+       "apihelp-options-example-complex": "Réinitialiser toutes les préférences, puis définir « skin » et « nickname »",
+       "apihelp-paraminfo-description": "Obtenir des informations sur les modules de l’API.",
+       "apihelp-paraminfo-param-modules": "Liste des noms de module (valeurs des paramètres action= et format=, ou « main »). Peut spécifier des sous-modules avec un « + ».",
+       "apihelp-paraminfo-param-helpformat": "Format des chaînes d’aide.",
+       "apihelp-paraminfo-param-querymodules": "Liste des noms de module de requêtage (valeur des paramètres prop=, meta= ou list=). Utiliser « $1modules=query+foo » au lieu de « $1querymodules=foo ».",
+       "apihelp-paraminfo-param-mainmodule": "Obtenir aussi des informations sur le module principal (niveau supérieur). Utiliser plutôt « $1modules=main ».",
+       "apihelp-paraminfo-param-pagesetmodule": "Obtenir aussi des informations sur le module pageset (en fournissant titles= et ses amis).",
+       "apihelp-paraminfo-param-formatmodules": "Liste des noms de module de mise en forme (valeur du paramètre format=). Utiliser plutôt « $1modules ».",
+       "apihelp-paraminfo-example-1": "Afficher les informations pour [[Special:ApiHelp/parse|action=parse]], [[Special:ApiHelp/jsonfm|format=jsonfm]], [[Special:ApiHelp/query+allpages|action=query&list=allpages]], et [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]",
+       "apihelp-parse-description": "Analyse le contenu et renvoie le résultat de l’analyseur.\n\nVoyez les différents modules prop de [[Special:ApiHelp/query|action=query]] pour avoir de l’information sur la version actuelle d’une page.\n\nIl y a plusieurs moyens de spécifier le texte à analyser :\n# Spécifier une page ou une révision, en utilisant $1page, $1pageid, ou $1oldid.\n# Spécifier explicitement un contenu, en utilisant $1text, $1title, et $1contentmodel.\n# Spécifier uniquement un résumé à analyser. $1prop doit recevoir une valeur vide.",
+       "apihelp-parse-param-title": "Titre de la page à laquelle appartient le texte. Si omis, $1contentmodel doit être spécifié, et « [[API]] » sera utilisé comme titre.",
+       "apihelp-parse-param-text": "Texte à analyser. utiliser $1title ou $1contentmodel pour contrôler le modèle de contenu.",
+       "apihelp-parse-param-summary": "Résumé à analyser.",
+       "apihelp-parse-param-page": "Analyser le contenu de cette page. Impossible à utiliser avec $1text et $1title.",
+       "apihelp-parse-param-pageid": "Analyser le contenu de cette page. Écrase $1page.",
+       "apihelp-parse-param-redirects": "Si le paramètre $1page ou $1pageid est positionné sur une redirection, la résoudre.",
+       "apihelp-parse-param-oldid": "Analyser le contenu de cette révision. Écrase $1page et $1pageid.",
+       "apihelp-parse-param-prop": "Quelles informations obtenir :\n;text:Fournit le texte analysé du wikitexte.\n;langlinks:Fournit les liens de langue dans le wikitexte analysé.\n;categories:Fournit les catégories dans le wikitexte analysé.\n;categorieshtml:Fournit la version HTML des catégories.\n;links:Fournit les liens internes dans le wikitexte analysé.\n;templates:Fournit les modèles dans le wikitexte analysé.\n;images:Fournit les images dans le wikitexte analysé.\n;externallinks:Fournit les liens externes dans le wikitexte analysé.\n;sections:Fournit les sections dans le wikitexte analysé.\n;revid:Ajoute l’ID de révision de la page analysée.\n;displaytitle:Ajoute le titre du wikitexte analysé.\n;headitems:Fournit les éléments à mettre dans le &lt;head&gt; de la page.\n;headhtml:Fournit le &lt;head&gt; analysé de la page.\n;modules:Fournit les modules ResourceLoader utilisés sur la page.\n;indicators:Fournit le HTML des indicateurs d’état de la page utilisés dans la page.\n;iwlinks:Fournit les liens interwiki dans le wikitexte analysé.\n;wikitext:Fournit le wikitexte d’origine qui a été analysé.\n;properties:Fournit différentes propriétés définies dans le wikitexte analysé.\n;limitreportdata:Fournit le rapport de limite de façon structurée. Ne fournit aucune donnée, quand $1disablepp est activé.\n;limitreporthtml:Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, quand $1disablepp est activé.",
+       "apihelp-parse-param-pst": "Faire une transformation avant enregistrement de l’entrée avant de l’analyser. Valide uniquement quand utilisé avec du texte.",
+       "apihelp-parse-param-onlypst": "Faire une transformation avant enregistrement (PST) de l’entrée, mais ne pas l’analyser. Renvoie le même wikitexte, après que la PST a été appliquée. Valide uniquement quand utilisé avec $1text.",
+       "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec $1prop=langlinks).",
+       "apihelp-parse-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
+       "apihelp-parse-param-disablepp": "Désactiver le rapport PP de la sortie de l’analyseur.",
+       "apihelp-parse-param-disableeditsection": "Désactiver les liens de modification de section de la sortie de l’analyseur.",
+       "apihelp-parse-param-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu « $1 »).",
+       "apihelp-parse-param-preview": "Analyser en mode aperçu.",
+       "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).",
+       "apihelp-parse-param-disabletoc": "Désactiver la table des matières dans la sortie.",
+       "apihelp-parse-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée. Valide uniquement si utilisé avec $1text.",
+       "apihelp-parse-param-contentmodel": "Modèle de contenu du texte d’entrée. Si omis, $1title doit être spécifié, et la valeur par défaut sera le modèle du titre spécifié. Valide uniquement quand utilisé avec $1text.",
+       "apihelp-parse-example-page": "Analyser une page.",
+       "apihelp-parse-example-text": "Analyser le wikitexte.",
+       "apihelp-parse-example-texttitle": "Analyser du wikitexte, en spécifiant le titre de la page.",
+       "apihelp-parse-example-summary": "Analyser un résumé.",
+       "apihelp-patrol-description": "Patrouiller une page ou une révision.",
+       "apihelp-patrol-param-rcid": "ID de modification récente à patrouiller.",
+       "apihelp-patrol-param-revid": "ID de révision à patrouiller.",
+       "apihelp-patrol-example-rcid": "Patrouiller une modification récente",
+       "apihelp-patrol-example-revid": "Patrouiller une révision",
+       "apihelp-protect-description": "Modifier le niveau de protection d’une page.",
+       "apihelp-protect-param-title": "Titre de la page à (dé)protéger. Impossible à utiliser avec $1pageid.",
+       "apihelp-protect-param-pageid": "ID de la page à (dé)protéger. Impossible à utiliser avec $1title.",
+       "apihelp-protect-param-protections": "Liste des niveaux de protection, au format action=niveau (par ex. edit=sysop).\n\n'''NOTE :''' Toutes les actions non listées auront leur restrictions supprimées.",
+       "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser « infinite », « indefinite », « infinity » ou « never » pour une protection sans expiration.",
+       "apihelp-protect-param-reason": "Motif de (dé)protection.",
+       "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les pages incluses dans cette page). Ignoré si tous les niveaux de protection fournis ne supportent pas la mise en cascade.",
+       "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à votre liste de suivi.",
+       "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-protect-example-protect": "Protéger une page",
+       "apihelp-protect-example-unprotect": "Enlever la protection d’une page en mettant les restrictions à « all »",
+       "apihelp-protect-example-unprotect2": "Enlever la protection de la page en ne mettant aucune restriction",
+       "apihelp-purge-description": "Vider le cache des titres fournis.\n\nNécessite une requête POST si l’utilisateur n’est pas connecté.",
+       "apihelp-purge-param-forcelinkupdate": "Mettre à jour les tables de liens.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Mettre à jour la table des liens, et mettre à jour les tables de liens pour toute page qui utilise cette page comme modèle",
+       "apihelp-purge-example-simple": "Purger les pages « Page principale » et « API »",
+       "apihelp-purge-example-generator": "Purger les 10 premières pages de l’espace de noms principal",
+       "apihelp-query-description": "Extraire des données de et sur MédiaWiki.\n\nToutes les modifications de données devront d’abord utiliser une requête pour obtenir un jeton, afin d’éviter les abus de la part de sites malveillants.",
+       "apihelp-query-param-prop": "Quelles propriétés obtenir des pages demandées.",
+       "apihelp-query-param-list": "Quelles listes obtenir.",
+       "apihelp-query-param-meta": "Quelles métadonnées obtenir.",
+       "apihelp-query-param-indexpageids": "Inclure une section pageids supplémentaire listant tous les IDs de page renvoyés.",
+       "apihelp-query-param-export": "Exporter les révisions actuelles de toutes les pages fournies ou générées.",
+       "apihelp-query-param-exportnowrap": "Renvoyer le XML exporté sans l’inclure dans un résultat XML (même format que [[Special:Export]]). Utilisable uniquement avec $1export.",
+       "apihelp-query-param-iwurl": "S’il faut obtenir l’URL complète si le titre est un lien interwiki.",
+       "apihelp-query-param-continue": "Quand il est présent, met en forme query-continue sous forme de paires clé-valeur qui devrait simplement être fusionné dans la requête d’origine. Ce paramètre doit être fixé à une chaîne vide dans la requête initiale.\n\nCe paramètre est recommandé pour tout nouveau développement, et sera mis par défaut dans la prochaine version de l’API.",
+       "apihelp-query-param-rawcontinue": "Actuellement ignoré. Plus tard, « $1continue= » deviendra la valeur par défaut et sera nécessaire pour recevoir les données brutes de query-continue.",
+       "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de la Page principale",
+       "apihelp-query-example-allpages": "Récupérer les révisions des pages commençant par « API/ »",
+       "apihelp-query+allcategories-description": "Énumérer toutes les catégories.",
+       "apihelp-query+allcategories-param-from": "La catégorie depuis laquelle démarrer l’énumération.",
+       "apihelp-query+allcategories-param-to": "La catégorie à laquelle terminer l’énumération.",
+       "apihelp-query+allcategories-param-prefix": "Rechercher tous les titres de catégorie qui commencent avec cette valeur.",
+       "apihelp-query+allcategories-param-dir": "Direction dans laquelle trier.",
+       "apihelp-query+allcategories-param-min": "Renvoyer uniquement les catégories avec au moins ce nombre de membres.",
+       "apihelp-query+allcategories-param-max": "Renvoyer uniquement les catégories avec au plus ce nombre de membres.",
+       "apihelp-query+allcategories-param-limit": "Combien de catégories renvoyer.",
+       "apihelp-query+allcategories-param-prop": "Quelles propriétés récupérer :\n;size:Ajoute le nombre de pages dans la catégorie.\n;hidden:Marque les catégories qui sont cachées avec _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-example-size": "Lister les catégories avec l’information sur le nombre de pages dans chacune",
+       "apihelp-query+allcategories-example-generator": "Récupérer l’information sur la page de catégorie elle-même pour les catégories commençant par « List »",
+       "apihelp-query+allfileusages-description": "Lister toutes les utilisations de fichier, y compris ceux n’existant pas.",
+       "apihelp-query+allfileusages-param-from": "Le titre du fichier depuis lequel commencer l’énumération.",
+       "apihelp-query+allfileusages-param-to": "Le titre du fichier auquel arrêter l’énumération.",
+       "apihelp-query+allfileusages-param-prefix": "Rechercher tous les fichiers dont le titre commence par cette valeur.",
+       "apihelp-query+allfileusages-param-unique": "Afficher uniquement les titres de fichier distincts. Impossible à utiliser avec $1prop=ids.\nQuand utilisé comme générateur, produit les pages cibles au lieu des sources.",
+       "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page utilisatrice (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du fichier.",
+       "apihelp-query+allfileusages-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+allfileusages-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allfileusages-example-B": "Lister les titres de fichier, y compris les manquants, avec les ids de page d’où ils proviennent, en commençant à B",
+       "apihelp-query+allfileusages-example-unique": "Lister les titres de fichier uniques",
+       "apihelp-query+allfileusages-example-unique-generator": "Obtient tous les titres de fichier, en marquant les manquants",
+       "apihelp-query+allfileusages-example-generator": "Obtient les pages contenant les fichiers",
+       "apihelp-query+allimages-description": "Énumérer toutes les images séquentiellement.",
+       "apihelp-query+allimages-param-sort": "Propriété par laquelle trier.",
+       "apihelp-query+allimages-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allimages-param-from": "Le titre de l’image depuis laquelle démarrer l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+       "apihelp-query+allimages-param-to": "Le titre de l’image auquel arrêter l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+       "apihelp-query+allimages-param-start": "L’horodatage depuis lequel énumérer. Ne peut être utilisé qu’avec $1sort=timestamp.",
+       "apihelp-query+allimages-param-end": "L’horodatage de fin de l’énumération. Ne peut être utilisé qu’avec $1sort=timestamp.",
+       "apihelp-query+allimages-param-prop": "Quelle information obtenir sur l’image :\n;timestamp:Ajoute l’horodatage de la version téléchargée.\n;user:Ajoute l’utilisateur qui a téléchargé la version de l’image.\n;userid:Ajoute l’ID de l’utilisateur qui a téléchargé la version de l’image.\n;comment:Commentaire sur la version.\n;parsedcomment:Analyser le commentaire de la version.\n;canonicaltitle:Ajoute le titre canonique du fichier image.\n;url:Fournit l’URL vers l’image et la page de description.\n;size:Ajoute la taille de l’image en octets et sa hauteur et largeur, et le numéro de page (si applicable).\n;dimensions:Alias de la taille.\n;sha1:Ajoute le hachage SHA-1 de l’image.\n;mime:Ajoute le type MIME de l’image.\n;mediatype:Ajoute le type de média de l’image.\n;metadata:Liste les métadonnées Exif de la version de l’image.\n;commonmetadata:Liste les métadonnées génériques du format de fichier pour la version de l’image.\n;extmetadata:Liste les métadonnées mises en forme regroupées depuis différentes sources. Les résultats sont au format HTML.\n;bitdepth:Ajoute la profondeur de couleur de la version.",
+       "apihelp-query+allimages-param-prefix": "Rechercher toutes les images dont le titre commence par cette valeur. Utilisable uniquement avec $1sort=name.",
+       "apihelp-query+allimages-param-minsize": "Restreindre aux images avec au moins ce nombre d’octets.",
+       "apihelp-query+allimages-param-maxsize": "Restreindre aux images avec au plus ce nombre d’octets.",
+       "apihelp-query+allimages-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MédiaWiki).",
+       "apihelp-query+allimages-param-user": "Renvoyer seulement les fichiers téléchargés par cet utilisateur. Utilisable uniquement avec $1sort=timestamp. Impossible à utiliser avec $1filterbots.",
+       "apihelp-query+allimages-param-filterbots": "Comment filtrer les fichiers téléchargés par des robots. Peut être utilisé uniquement avec $1sort=timestamp. Impossible à utiliser avec $1user.",
+       "apihelp-query+allimages-param-mime": "Quel type MIME rechercher, par ex. image/jpeg.",
+       "apihelp-query+allimages-param-limit": "Combien d’images renvoyer au total.",
+       "apihelp-query+allimages-example-B": "Afficher une liste des fichiers commençant par la lettre « B »",
+       "apihelp-query+allimages-example-recent": "Afficher une liste des fichiers récemment téléchargés semblable à [[Special:NewFiles]]",
+       "apihelp-query+allimages-example-generator": "Afficher l’information sur 4 fichiers commençant par la lettre « T »",
+       "apihelp-query+alllinks-description": "Énumérer tous les liens pointant vers un espace de noms donné.",
+       "apihelp-query+alllinks-param-from": "Le titre du lien auquel démarrer l’énumération.",
+       "apihelp-query+alllinks-param-to": "Le titre du lien auquel arrêter l’énumération.",
+       "apihelp-query+alllinks-param-prefix": "Rechercher tous les titres liés commençant par cette valeur.",
+       "apihelp-query+alllinks-param-unique": "Afficher uniquement les titres liés distincts. Impossible à utiliser avec $1prop=ids.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+       "apihelp-query+alllinks-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de liaison (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du lien.",
+       "apihelp-query+alllinks-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+alllinks-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+alllinks-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+alllinks-example-B": "Lister les titres liés, y compris les manquants, avec les ids des pages d’où ils proviennent, en démarrant à B",
+       "apihelp-query+alllinks-example-unique": "Lister les titres liés uniques",
+       "apihelp-query+alllinks-example-unique-generator": "Obtient tous les titres liés, en marquant les manquants",
+       "apihelp-query+alllinks-example-generator": "Obtient les pages contenant les liens",
+       "apihelp-query+allmessages-description": "Renvoyer les messages depuis ce site.",
+       "apihelp-query+allmessages-param-messages": "Quels messages sortir. « * » (par défaut) signifie tous les messages.",
+       "apihelp-query+allmessages-param-prop": "Quelles propriétés obtenir.",
+       "apihelp-query+allmessages-param-enableparser": "Si positionné pour activer l’analyseur, traitera en avance le wikitexte du message (substitution des mots magiques, gestion des modèles, etc.).",
+       "apihelp-query+allmessages-param-nocontent": "Si positionné, ne pas inclure le contenu des messages dans la sortie.",
+       "apihelp-query+allmessages-param-includelocal": "Inclure aussi les messages locaux, c’est-à-dire les messages qui n’existent pas dans le logiciel mais sous forme d’une page MediaWiki:.\nCela liste toutes les pages MediaWiki:, donc aussi celles qui ne sont pas vraiment des messages, telles que [[MediaWiki:Common.js|Common.js]].",
+       "apihelp-query+allmessages-param-args": "Arguments à substituer dans le message.",
+       "apihelp-query+allmessages-param-filter": "Renvoyer uniquement les messages avec des noms contenant cette chaîne.",
+       "apihelp-query+allmessages-param-customised": "Renvoyer uniquement les messages dans cet état de personnalisation.",
+       "apihelp-query+allmessages-param-lang": "Renvoyer les messages dans cette langue.",
+       "apihelp-query+allmessages-param-from": "Renvoyer les messages commençant à ce message.",
+       "apihelp-query+allmessages-param-to": "Renvoyer les messages en terminant à ce message.",
+       "apihelp-query+allmessages-param-title": "Nom de page à utiliser comme contexte en analysant le message (pour l’option $1enableparser).",
+       "apihelp-query+allmessages-param-prefix": "Renvoyer les messages avec ce préfixe.",
+       "apihelp-query+allmessages-example-ipb": "Afficher les messages commençant par « ipb- »",
+       "apihelp-query+allmessages-example-de": "Afficher les messages « august » et «mainpage » en allemand",
+       "apihelp-query+allpages-description": "Énumérer toutes les pages séquentiellement dans un espace de noms donné.",
+       "apihelp-query+allpages-param-from": "Le titre de la page depuis lequel commencer l’énumération.",
+       "apihelp-query+allpages-param-to": "Le titre de la page auquel stopper l’énumération.",
+       "apihelp-query+allpages-param-prefix": "Rechercher tous les titres de page qui commencent par cette valeur.",
+       "apihelp-query+allpages-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+allpages-param-filterredir": "Quelles pages lister.",
+       "apihelp-query+allpages-param-minsize": "Limiter aux pages avec au moins ce nombre d’octets.",
+       "apihelp-query+allpages-param-maxsize": "Limiter aux pages avec au plus ce nombre d’octets.",
+       "apihelp-query+allpages-param-prtype": "Limiter aux pages protégées uniquement.",
+       "apihelp-query+allpages-param-prlevel": "Filtrer les protections basées sur le niveau de protection (doit être utilisé avec le paramètre $1prtype=).",
+       "apihelp-query+allpages-param-prfiltercascade": "Filtrer les protections d’après leur cascade (ignoré si $1prtype n’est pas positionné).",
+       "apihelp-query+allpages-param-limit": "Combien de pages renvoyer au total.",
+       "apihelp-query+allpages-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allpages-param-filterlanglinks": "Filtrer si une page a des liens de langue. Noter que cela ne prend pas en compte les liens de langue ajoutés par des extensions.",
+       "apihelp-query+allpages-param-prexpiry": "Quelle expiration de protection sur laquelle filtrer la page :\n;indefinite:N’obtenir que les pages avec une expiration de protection infinie.\n;definite:N’obtenir que les pages avec une expiration de protection définie (spécifique).\n;all:Obtenir toutes les pages avec une expiration de protection.",
+       "apihelp-query+allpages-example-B": "Afficher une liste des pages commençant par la lettre « B »",
+       "apihelp-query+allpages-example-generator": "Afficher l’information sur 4 pages commençant par la lettre « T »",
+       "apihelp-query+allpages-example-generator-revisions": "Afficher le contenu des 2 premières pages hors redirections commençant par « Re »",
+       "apihelp-query+allredirects-description": "Lister toutes les redirections vers un espace de noms.",
+       "apihelp-query+allredirects-param-from": "Le titre de la redirection auquel démarrer l’énumération.",
+       "apihelp-query+allredirects-param-to": "Le titre de la redirection auquel arrêter l’énumération.",
+       "apihelp-query+allredirects-param-prefix": "Rechercher toutes les pages cible commençant par cette valeur.",
+       "apihelp-query+allredirects-param-unique": "Afficher uniquement les pages cibles distinctes. Impossible à utiliser avec $1prop=ids|fragment|interwiki.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+       "apihelp-query+allredirects-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de redirection (impossible à utiliser avec $1unique).\n;title:Ajoute le titre de la redirection.\n;fragment:Ajoute le fragment de la redirection, s’il y en a un (impossible à utiliser avec $1unique).\n;interwiki:Ajoute le préfixe interwiki de la redirection, s’il y en a un (impossible à utiliser avec $1unique).",
+       "apihelp-query+allredirects-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+allredirects-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+allredirects-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allredirects-example-B": "Lister les pages cible, y compris les manquantes, avec les IDs de page d’où ils proviennent, en commençant à B",
+       "apihelp-query+allredirects-example-unique": "Lister les pages cible unique",
+       "apihelp-query+allredirects-example-unique-generator": "Obtient toutes les pages cible, en marquant les manquantes",
+       "apihelp-query+allredirects-example-generator": "Obtient les pages contenant les redirections",
+       "apihelp-query+alltransclusions-description": "Lister toutes les transclusions (pages intégrées en utilisant &#123;&#123;x&#125;&#125;), y compris les inexistantes.",
+       "apihelp-query+alltransclusions-param-from": "Le titre de la transclusion depuis lequel commencer l’énumération.",
+       "apihelp-query+alltransclusions-param-to": "Le titre de la transclusion auquel arrêter l’énumération.",
+       "apihelp-query+alltransclusions-param-prefix": "Rechercher tous les titres inclus qui commencent par cette valeur.",
+       "apihelp-query+alltransclusions-param-unique": "Afficher uniquement les titres inclus. Impossible à utiliser avec $1prop=ids.\nUtilisé avec un générateur, produit les pages cible plutôt que les pages source.",
+       "apihelp-query+alltransclusions-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page incluse (impossible à utiliser avec $1unique).\n;title:Ajoute le titre de la transclusion.",
+       "apihelp-query+alltransclusions-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+alltransclusions-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+alltransclusions-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+alltransclusions-example-B": "Lister les titres inclus, y compris les manquants, avec les IDs des pages d’où ils viennent, en commençant à B",
+       "apihelp-query+alltransclusions-example-unique": "Lister les titres inclus uniques",
+       "apihelp-query+alltransclusions-example-unique-generator": "Obtient tous les titres inclus, en marquant les manquants",
+       "apihelp-query+alltransclusions-example-generator": "Obtient les pages contenant des transclusions",
+       "apihelp-query+allusers-description": "Énumérer tous les utilisateurs enregistrés.",
+       "apihelp-query+allusers-param-from": "Le nom d’utilisateur auquel démarrer l’énumération.",
+       "apihelp-query+allusers-param-to": "Le nom d’utilisateur auquel stopper l’énumération.",
+       "apihelp-query+allusers-param-prefix": "Rechercher tous les utilisateurs commençant par cette valeur.",
+       "apihelp-query+allusers-param-dir": "Direction du tri.",
+       "apihelp-query+allusers-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés.",
+       "apihelp-query+allusers-param-excludegroup": "Exclure les utilisateurs dans les groupes donnés.",
+       "apihelp-query+allusers-param-rights": "Inclure uniquement les utilisateurs avec les droits indiqués. Ne comprend pas les droits accordés par des groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+       "apihelp-query+allusers-param-prop": "Quelles informations inclure :\n;blockinfo:Ajoute l’information sur le bloc actuel d’un utilisateur.\n;groups:Liste des groupes auxquels appartient l’utilisateur. Cela utilise beaucoup de ressources du serveur et peut renvoyer moins de résultats que la limite.\n;implicitgroups:Liste tous les groupes auxquels l’utilisateur est affecté automatiquement.\n;rights:Liste les droits qu’à l’utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage de l’inscription de l’utilisateur, s’il est disponible (peut être vide).",
+       "apihelp-query+allusers-param-limit": "Combien de noms d’utilisateur renvoyer au total.",
+       "apihelp-query+allusers-param-witheditsonly": "Ne lister que les utilisateurs qui ont fait des modifications.",
+       "apihelp-query+allusers-param-activeusers": "Lister uniquement les utilisateurs actifs durant {{PLURAL:$1|le dernier jour|les $1 derniers jours}}.",
+       "apihelp-query+allusers-example-Y": "Lister les utilisateurs en commençant à Y",
+       "apihelp-query+backlinks-description": "Trouver toutes les pages qui ont un lien vers la page donnée.",
+       "apihelp-query+backlinks-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+       "apihelp-query+backlinks-param-pageid": "ID de la page à chercher. Impossible à utiliser avec $1title.",
+       "apihelp-query+backlinks-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+backlinks-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+backlinks-param-filterredir": "Comment filtrer les redirections. Si positionné à nonredirects quand $1redirect est activé, cela ne s’applique qu’au second niveau.",
+       "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui signifie que vous pouvez obtenir jusqu’à 2 * limite résultats).",
+       "apihelp-query+backlinks-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont un lien vers cette redirection aussi. La limite maximale est divisée par deux.",
+       "apihelp-query+backlinks-example-simple": "Afficher les liens vers [[Main page]]",
+       "apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[Main page]]",
+       "apihelp-query+blocks-description": "Lister tous les utilisateurs et les adresses IP bloqués.",
+       "apihelp-query+blocks-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+blocks-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+blocks-param-ids": "Liste des IDs de bloc à lister (facultatif).",
+       "apihelp-query+blocks-param-users": "Liste des utilisateurs à rechercher (facultatif).",
+       "apihelp-query+blocks-param-ip": "Obtenir tous les blocs s’appliquant à cette adresse IP ou à cette plage CIDR, y compris les blocs de plage.\nImpossible à utiliser avec $3users. Les plages CIDR plus larges que IPv4/$1 ou IPv6/$2 ne sont pas acceptées.",
+       "apihelp-query+blocks-param-limit": "Le nombre maximal de blocs à lister.",
+       "apihelp-query+blocks-param-prop": "Quelles propriétés obtenir :\n;id:Ajoute l’ID du blocage.\n;user:Ajoute le nom de l’utilisateur bloqué.\n;userid:Ajoute l’ID de l’utilisateur bloqué.\n;by:Ajoute le nom de l’utilisateur ayant bloqué.\n;byid:Ajoute l’ID de l’utilisateur ayant bloqué.\n;timestamp:Ajoute l’horodatage du blocage.\n;expiry:Ajoute l’horodatage d’expiration du blocage.\n;reason:Ajoute le motif du blocage.\n;range:Ajoute la plage d&adresses IP affectée par le blocage.\n;flags:Marque le bannissement avec (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-show": "Afficher uniquement les éléments correspondant à ces critères.\nPar exemple, pour voir uniquement les blocages infinis sur les adresses IP, mettre $1show=ip|!temp.",
+       "apihelp-query+blocks-example-simple": "Lister les blocages",
+       "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs Alice et Bob",
+       "apihelp-query+categories-description": "Lister toutes les catégories auxquelles les pages appartiennent.",
+       "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :\n;sortkey:Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.\n;timestamp:Ajoute l’horodatage de l’ajout de la catégorie.\n;hidden:Marque els catégories cachées avec _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-show": "Quelle sorte de catégories afficher.",
+       "apihelp-query+categories-param-limit": "Combien de catégories renvoyer.",
+       "apihelp-query+categories-param-categories": "Lister uniquement ces catégories. Utile pour vérifier si une certaine page est dans une certaine catégorie.",
+       "apihelp-query+categories-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+categories-example-simple": "Obtenir une liste des catégories auxquelles appartient [[Albert Einstein]]",
+       "apihelp-query+categories-example-generator": "Obtenir des informations sur toutes les catégories utilisées dans [[Albert Einstein]]",
+       "apihelp-query+categoryinfo-description": "Renvoie les informations sur les catégories données.",
+       "apihelp-query+categoryinfo-example-simple": "Obtenir des informations sur [[:Category:Foo]] et [[:Category:Bar]]",
+       "apihelp-query+categorymembers-description": "Lister toutes les pages d’une catégorie donnée.",
+       "apihelp-query+categorymembers-param-title": "Quelle catégorie énumérer (obligatoire). Doit comprendre le préfixe « Category: ». Impossible à utiliser avec $1pageid.",
+       "apihelp-query+categorymembers-param-pageid": "ID de la page de la catégorie à énumérer. Impossible à utiliser avec $1title.",
+       "apihelp-query+categorymembers-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;sortkey:Ajoute la clé de tri utilisée pour trier dans la catégorie (chaîne hexadécimale).\n;sortkeyprefix:Ajoute le préfixe de la clé de tri utilisé pour trier dans la catégorie (partie lisible de la clé de tri).\n;type:Ajoute le type dans lequel a été catégorisée la page (page, sous-catégorie ou fichier).\n;timestamp:Ajoute l’horodatage de l’inclusion de la page.",
+       "apihelp-query+categorymembers-param-namespace": "Inclure uniquement les pages dans ces espaces de nom. Remarquez que $1type=subcat ou $1type=file peuvent  être utilisés à la place de $1namespace=14 or 6.",
+       "apihelp-query+categorymembers-param-type": "Quel type de membres de la catégorie inclure. Ignoré quand $1sort=timestamp est positionné.",
+       "apihelp-query+categorymembers-param-limit": "Le nombre maximal de pages à renvoyer.",
+       "apihelp-query+categorymembers-param-sort": "Propriété par laquelle trier.",
+       "apihelp-query+categorymembers-param-dir": "Dans quelle direction trier.",
+       "apihelp-query+categorymembers-param-start": "Horodatage auquel démarrer la liste. Peut être utilisé uniquement avec $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-end": "Horodatage auquel terminer la liste. Peut être utilisé uniquement avec $1sort=timestamp.",
+       "apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1",
+       "apihelp-dbg-description": "Extraire les données au format de var_export() de PHP.",
+       "apihelp-dbgfm-description": "Extraire les données au format de var_export() de PHP (affiché proprement en HTML).",
+       "apihelp-dump-description": "Extraire les données au format de var_dump() de PHP.",
+       "apihelp-dumpfm-description": "Extraire les données au format de var_dump() de PHP (affiché proprement en HTML).",
+       "apihelp-json-description": "Extraire les données au format JSON.",
+       "apihelp-json-param-callback": "Si spécifié, inclut la sortie dans l’appel d’une fonction fournie. Pour plus de sûreté, toutes les données spécifiques à l’utilisateur seront restreintes.",
+       "apihelp-json-param-utf8": "Si spécifié, encode la plupart (mais pas tous) des caractères non ASCII en URF-8 au lieu de les remplacer par leur séquence d’échappement hexadécimale.",
+       "apihelp-jsonfm-description": "Extraire les données au format JSON (affiché proprement en HTML).",
+       "apihelp-none-description": "Ne rien extraire.",
+       "apihelp-php-description": "Extraire les données au format sérialisé de PHP.",
+       "apihelp-phpfm-description": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).",
+       "apihelp-rawfm-description": "Extraire les données avec les éléments de débogage au format JSON (affiché proprement en HTML).",
+       "apihelp-txt-description": "Extraire les données au format de print_r() de PHP.",
+       "apihelp-txtfm-description": "Extraire les données au format de print_r() de PHP (affiché proprement en HTML).",
+       "apihelp-wddx-description": "Extraire les données au format WDDX.",
+       "apihelp-wddxfm-description": "Extraire les données au format WDDX (affiché proprement en HTML).",
+       "apihelp-xml-description": "Extraire les données au format XML.",
+       "apihelp-xml-param-xslt": "Si spécifié, ajoute &lt;xslt&gt; comme feuille de style. Ce devrait être une page du wiki dans l’espace de noms MediaWiki dont le nom de page se termine par « .xsl ».",
+       "apihelp-xml-param-includexmlnamespace": "Si spécifié, ajoute un espace de noms XML.",
+       "apihelp-xmlfm-description": "Extraire les données au format XML (affiché proprement en HTML).",
+       "apihelp-yaml-description": "Extraire les données au format YAML.",
+       "apihelp-yamlfm-description": "Extraire les données YAML (affiché proprement en HTML).",
+       "api-format-title": "Résultat de l’API de MédiaWiki",
+       "api-format-prettyprint-header": "Vous regardez la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre format pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez format=$2.\n\nVoyez la [https://www.mediawiki.org/wiki/API documentation complète], ou l’ [[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+       "api-help-title": "Aide de l’API de MédiaWiki",
+       "api-help-lead": "Ceci est une page d’aide de l’API de MédiaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Module principal",
+       "api-help-flag-deprecated": "Ce module est obsolète.",
+       "api-help-flag-internal": "<strong>Ce module est interne ou instable.</strong> Son fonctionnement peut être modifié sans préavis.",
+       "api-help-flag-readrights": "Ce module nécessite des droits de lecture.",
+       "api-help-flag-writerights": "Ce module nécessite des droits d’écriture.",
+       "api-help-flag-mustbeposted": "Ce module n’accepte que les requêtes POST.",
+       "api-help-flag-generator": "Ce module peut être utilisé comme générateur.",
+       "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
+       "api-help-param-deprecated": "Obsolète.",
+       "api-help-param-required": "Ce paramètre est obligatoire.",
+       "api-help-param-list": "{{PLURAL:$1|1=Une valeur|2=Valeurs (séparées par « {{!}} »)}} : $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Doit être vide|Peut être vide, ou $2}}",
+       "api-help-param-limit": "Pas plus de $1 autorisé.",
+       "api-help-param-limit2": "Pas plus de $1 autorisé ($2 pour les robots).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=La valeur doit être inférieure|2=Les valeurs doivent être inférieures}} à $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=La valeur ne doit pas être supérieure|2=Les valeurs ne doivent pas être supérieures}} à $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=La valeur doit|2=Les valeurs doivent}} être entre $2 et $3.",
+       "api-help-param-upload": "Doit être envoyé comme un fichier importé utilisant multipart/form-data.",
+       "api-help-param-multi-separate": "Valeurs séparées par « | ».",
+       "api-help-param-multi-max": "Le nombre maximal de valeurs est {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} pour les robots).",
+       "api-help-param-default": "Par défaut : $1",
+       "api-help-param-default-empty": "Par défaut : <span class=\"apihelp-empty\">(vide)</span>",
+       "api-help-param-token": "Un jeton « $1 » récupéré par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(aucune description)</span>",
+       "api-help-examples": "{{PLURAL:$1|Exemple|Exemples}} :",
+       "api-help-permissions": "{{PLURAL:$1|Droit|Droits}} :",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Accordé à}} : $2",
+       "api-help-right-apihighlimits": "Utiliser des valeurs plus hautes dans les requêtes de l’API (requêtes lentes : $1 ; requêtes rapides : $2). Les limites pour les requêtes lentes s’appliquent aussi aux paramètres multivalués.",
+       "api-credits-header": "Remerciements",
+       "api-credits": "Développeurs de l’API :\n* Roan Kattouw (développeur en chef Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (créateur, développeur en chef Sept. 2006–Sept. 2007)\n* Brad Jorsch (développeur en chef depuis 2013)\n\nVeuillez envoyer vos commentaires, suggestions et questions à mediawiki-api@lists.wikimedia.org\nou remplir un rapport de bogue sur https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/he.json b/includes/api/i18n/he.json
new file mode 100644 (file)
index 0000000..8363d0d
--- /dev/null
@@ -0,0 +1,40 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Guycn2",
+                       "Amire80"
+               ]
+       },
+       "apihelp-main-param-action": "איזו פעולה לבצע.",
+       "apihelp-main-param-format": "התבנית של הפלט.",
+       "apihelp-help-description": "הצגת עזרה עבור היחידות שצוינו.",
+       "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
+       "apihelp-query+categories-param-limit": "כמה קטגוריות להחזיר.",
+       "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
+       "apihelp-xml-param-xslt": "אם צוין, מוסיף &lt;xslt&gt; כגליון סגנונות. זה צריך להיות דף ויקי במרחב השם מדיה ויקי ששמו מסתיים ב\".xsl\".",
+       "api-help-title": "עזרה של MediaWiki API",
+       "api-help-lead": "זהו דף תיעוד של API שנוצר באופן אוטומטי.\n\nתיעוד ודוגמאות: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "יחידה ראשית",
+       "api-help-flag-deprecated": "יחידה זו אינה מומלצת לשימוש.",
+       "api-help-flag-internal": "<strong>יחידה זו היא פנימית או לא יציבה.</strong>\nהפעולה שלה עשויה להשתנות ללא הודעה מוקדמת.",
+       "api-help-flag-readrights": "יחידה זו דורשת הרשאות קריאה.",
+       "api-help-flag-writerights": "יחידה זו דורשת הרשאות כתיבה.",
+       "api-help-flag-mustbeposted": "יחידה זו מקבלת רק בקשות POST.",
+       "api-help-parameters": "{{PLURAL:$1|פרמטר|פרמטרים}}:",
+       "api-help-param-required": "פרמטר זה נדרש.",
+       "api-help-param-list": "{{PLURAL:$1|1=ערך אחד|2=ערכים (מופרדים באמצעות \"{{!}}\")}}: $2",
+       "api-help-param-limit": "מספר הפרמטרים לא יכול להיות גדול מ־$1.",
+       "api-help-param-limit2": "המספר המרבי המותר הוא $1 (עבור בוטים – $2).",
+       "api-help-param-integer-min": "ה{{PLURAL:$1|1=ערך|2=ערכים}} לא יכולים להיות קטנים מ־$2.",
+       "api-help-param-integer-max": "ה{{PLURAL:$1|1=ערך לא יכול להיות גדול|2=ערכים לא יכולים להיות גדולים}} מ־$3.",
+       "api-help-param-integer-minmax": "ה{{PLURAL:$1|1=ערך חייב|2=ערכים חייבים}} להיות בין $2 ל־$3.",
+       "api-help-param-multi-separate": "הפרדה בין ערכים נעשית באמצעות \"|\".",
+       "api-help-param-multi-max": "מספר הערכים המרבי הוא {{PLURAL:$1|$1}} (עבור בוטים – {{PLURAL:$2|$2}}).",
+       "api-help-param-default": "ברירת מחדל: $1",
+       "api-help-param-default-empty": "ברירת מחדל: <span class=\"apihelp-empty\">(ריק)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(ללא תיאור)</span>",
+       "api-help-examples": "{{PLURAL:$1|דוגמה|דוגמאות}}:",
+       "api-help-permissions": "{{PLURAL:$1|הרשאה|הרשאות}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|הוענק ל|הוענקו ל}}: $2",
+       "api-credits-header": "קרדיטים"
+}
diff --git a/includes/api/i18n/hu.json b/includes/api/i18n/hu.json
new file mode 100644 (file)
index 0000000..cdf9057
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Csega"
+               ]
+       },
+       "apihelp-userrights-param-userid": "Felhasználói azonosító."
+}
diff --git a/includes/api/i18n/ia.json b/includes/api/i18n/ia.json
new file mode 100644 (file)
index 0000000..e16e368
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "McDutchie"
+               ]
+       },
+       "apihelp-main-param-action": "Qual action exequer.",
+       "apihelp-main-param-format": "Le formato del resultato."
+}
diff --git a/includes/api/i18n/it.json b/includes/api/i18n/it.json
new file mode 100644 (file)
index 0000000..884eb21
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Beta16"
+               ]
+       },
+       "api-help-parameters": "{{PLURAL:$1|Parametro|Parametri}}:",
+       "api-help-param-deprecated": "Deprecato.",
+       "api-help-param-required": "Questo parametro è obbligatorio.",
+       "api-help-param-default": "Predefinito: $1",
+       "api-help-param-default-empty": "Predefinito: <span class=\"apihelp-empty\">(vuoto)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(nessuna descrizione)</span>",
+       "api-help-examples": "{{PLURAL:$1|Esempio|Esempi}}:",
+       "api-credits-header": "Crediti"
+}
diff --git a/includes/api/i18n/ja.json b/includes/api/i18n/ja.json
new file mode 100644 (file)
index 0000000..ed02edf
--- /dev/null
@@ -0,0 +1,80 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Shirayuki"
+               ]
+       },
+       "apihelp-main-param-action": "実行する操作です。",
+       "apihelp-main-param-format": "出力する形式です。",
+       "apihelp-main-param-smaxage": "s-maxage ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
+       "apihelp-main-param-maxage": "max-age ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
+       "apihelp-main-param-assert": "\"user\" を設定した場合は利用者がログイン済みかどうかを、\"bot\" を指定した場合はボット権限があるかどうかを、それぞれ検証します。",
+       "apihelp-main-param-requestid": "任意の値を指定でき、その値が結果に含められます。リクエストを識別するために使用できます。",
+       "apihelp-main-param-servedby": "リクエストを処理したホスト名を結果に含めます。",
+       "apihelp-main-param-curtimestamp": "現在のタイムスタンプを結果に含めます。",
+       "apihelp-main-param-uselang": "メッセージの翻訳に使用する言語です。言語の一覧は [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]] から取得できます。\"user\" を指定することで、現在の利用者の個人設定の言語を使用することもできます。",
+       "apihelp-help-description": "指定したモジュールのヘルプを表示します。",
+       "apihelp-help-param-modules": "ヘルプを表示するモジュールです (action= パラメーターおよび format= パラメーターの値、または \"main\")。\"+\" を使用して下位モジュールを指定できます。",
+       "apihelp-help-param-submodules": "指定したモジュールの下位モジュールのヘルプを含めます。",
+       "apihelp-help-param-recursivesubmodules": "下位モジュールのヘルプを再帰的に含めます。",
+       "apihelp-help-param-helpformat": "ヘルプの出力形式です。",
+       "apihelp-help-param-toc": "HTML 出力に目次を含めます。",
+       "apihelp-help-example-main": "メイン モジュールのヘルプ",
+       "apihelp-help-example-recursive": "すべてのヘルプを1つのページに",
+       "apihelp-help-example-help": "ヘルプ モジュール自身のヘルプ",
+       "apihelp-help-example-query": "2つの下位モジュールのヘルプ",
+       "apihelp-format-example-generic": "クエリの結果を $1 形式に整形します",
+       "apihelp-dbg-description": "データを PHP の var_export() 形式で出力します。",
+       "apihelp-dbgfm-description": "データを PHP の var_export() 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-dump-description": "データを PHP の var_dump() 形式で出力します。",
+       "apihelp-dumpfm-description": "データを PHP の var_dump() 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-json-description": "データを JSON 形式で出力します。",
+       "apihelp-json-param-callback": "指定すると、指定した関数呼び出しで出力をラップします。安全のため、利用者固有のデータはすべて制限されます。",
+       "apihelp-json-param-utf8": "指定すると、大部分の非 ASCII 文字 (すべてではありません) を、16 進のエスケープ シーケンスに置換する代わりに UTF-8 として符号化します。",
+       "apihelp-jsonfm-description": "データを JSON 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-none-description": "何も出力しません。",
+       "apihelp-php-description": "データを PHP のシリアル化した形式で出力します。",
+       "apihelp-phpfm-description": "データを PHP のシリアル化した形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-rawfm-description": "データをデバッグ要素付きで JSON 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-txt-description": "データを PHP の print_r() 形式で出力します。",
+       "apihelp-txtfm-description": "データを PHP の print_r() 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-wddx-description": "データを WDDX 形式で出力します。",
+       "apihelp-wddxfm-description": "データを WDDX 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-xml-description": "データを XML 形式で出力します。",
+       "apihelp-xml-param-xslt": "指定すると、スタイルシートとして &lt;xslt&gt; を追加します。MediaWiki 名前空間の、ページ名の末尾が \".xsl\" のウィキページに対して使用すべきです。",
+       "apihelp-xml-param-includexmlnamespace": "指定すると、XML 名前空間を追加します。",
+       "apihelp-xmlfm-description": "データを XML 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-yaml-description": "データを YAML 形式で出力します。",
+       "apihelp-yamlfm-description": "データを YAML 形式 (HTML に埋め込んだ形式) で出力します。",
+       "api-format-title": "MediaWiki API の結果",
+       "api-format-prettyprint-header": "このページは $1 形式を HTML で表現したものです。HTML はデバッグに役立ちますが、アプリケーションでの使用には適していません。\n\n出力形式を変更するには format パラメーターを指定します。$1 形式の非 HTML 版を閲覧するには、format=$2 を設定します。\n\n詳細情報については [https://www.mediawiki.org/wiki/API の完全な説明文書]または [[Special:ApiHelp/main|API のヘルプ]]を参照してください。",
+       "api-help-title": "MediaWiki API ヘルプ",
+       "api-help-lead": "このページは自動生成された MediaWiki API の説明文書ページです。\n\n説明文書と例: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "メイン モジュール",
+       "api-help-flag-deprecated": "このモジュールは廃止予定です。",
+       "api-help-flag-internal": "<strong>このモジュールは内部的または不安定です。</strong>動作が予告なく変更される場合があります。",
+       "api-help-flag-readrights": "このモジュールは読み取りの権限を必要とします。",
+       "api-help-flag-writerights": "このモジュールは書き込みの権限を必要とします。",
+       "api-help-flag-mustbeposted": "このモジュールは POST リクエストのみを受け付けます。",
+       "api-help-flag-generator": "このモジュールはジェネレーターとして使用できます。",
+       "api-help-parameters": "{{PLURAL:$1|パラメーター}}:",
+       "api-help-param-deprecated": "廃止予定です。",
+       "api-help-param-required": "このパラメーターは必須です。",
+       "api-help-param-list": "{{PLURAL:$1|1=値 (いずれか1つ)|2=値 (「{{!}}」で区切る)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=空欄にしてください|空欄にするか、または $2}}",
+       "api-help-param-integer-min": "{{PLURAL:$1|値}}は $2 以上にしてください。",
+       "api-help-param-integer-max": "{{PLURAL:$1|値}}は $3 以下にしてください。",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|値}}は $2 以上 $3 以下にしてください。",
+       "api-help-param-upload": "multipart/form-data 形式でファイルをアップロードしてください。",
+       "api-help-param-multi-separate": "複数の値は「|」で区切ってください。",
+       "api-help-param-multi-max": "値の最大値は {{PLURAL:$1|$1}} (ボットの場合は {{PLURAL:$2|$2}}) です。",
+       "api-help-param-default": "既定値: $1",
+       "api-help-param-default-empty": "既定値: <span class=\"apihelp-empty\">(空)</span>",
+       "api-help-param-token": "[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] から取得した「$1」トークン",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(説明なし)</span>",
+       "api-help-examples": "{{PLURAL:$1|例}}:",
+       "api-help-permissions": "{{PLURAL:$1|権限}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|権限を持つグループ}}: $2",
+       "api-credits-header": "クレジット",
+       "api-credits": "API の開発者:\n* Roan Kattouw (2007年9月-2009年の主任開発者)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (作成者、2006年9月-2007年9月の主任開発者)\n* Brad Jorsch (2013年-現在の主任開発者)\n\nコメント、提案、質問は mediawiki-api@lists.wikimedia.org にお送りください。\nバグはこちらへご報告ください: https://bugzilla.wikimedia.org/"
+}
diff --git a/includes/api/i18n/jam.json b/includes/api/i18n/jam.json
new file mode 100644 (file)
index 0000000..3c44fd2
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chabi1"
+               ]
+       },
+       "api-help-main-header": "Mien madyuul"
+}
diff --git a/includes/api/i18n/lb.json b/includes/api/i18n/lb.json
new file mode 100644 (file)
index 0000000..4040c1f
--- /dev/null
@@ -0,0 +1,80 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robby"
+               ]
+       },
+       "apihelp-block-description": "E Benotzer spären.",
+       "apihelp-block-param-user": "Benotzernumm, IP-Adress oder IP-Beräich deen Dir späre wëllt.",
+       "apihelp-block-param-reason": "Grond fir ze spären.",
+       "apihelp-block-param-anononly": "Nëmmen anonym Benotzer spären (z. Bsp. anonym Ännerunge vun dëser IP ausschalten)",
+       "apihelp-block-param-nocreate": "Opmaache vun engem Benotzerkont verhënneren.",
+       "apihelp-block-param-reblock": "Wann de Benotzer scho gespaart ass, déi aktuell Spär iwwerschreiwen.",
+       "apihelp-block-param-watchuser": "Dem Benotzer oder der IP hier Benotzer- an Diskussiouns-Säiten iwwerwaachen.",
+       "apihelp-createaccount-description": "En neie Benotzerkont uleeën.",
+       "apihelp-createaccount-param-name": "Benotzernumm.",
+       "apihelp-createaccount-param-email": "E-Mail-Adress vum Benotzer (fakultativ).",
+       "apihelp-createaccount-param-realname": "Richtegen Numm vum Benotzer (fakultativ).",
+       "apihelp-delete-description": "Eng Säit läschen.",
+       "apihelp-delete-param-watch": "D'Säit op Är Iwwerwaachungslëscht derbäisetzen.",
+       "apihelp-delete-example-simple": "D'Haaptsäit läschen",
+       "apihelp-disabled-description": "Dëse Modul gouf ausgeschalt.",
+       "apihelp-edit-param-sectiontitle": "Den Titel fir en neien Abschnitt.",
+       "apihelp-edit-param-minor": "Kleng Ännerung.",
+       "apihelp-edit-param-bot": "Dës Ännerung als Bot-Ännerung markéieren.",
+       "apihelp-edit-param-watch": "D'Säit op Är Iwwerwaachungslëscht derbäisetzen.",
+       "apihelp-edit-example-edit": "Eng Säit änneren",
+       "apihelp-expandtemplates-param-title": "Titel vun der Säit.",
+       "apihelp-feedrecentchanges-param-hideminor": "Kleng Ännerunge verstoppen.",
+       "apihelp-feedrecentchanges-param-hideanons": "Ännerunge vun anonyme Benotzer verstoppen.",
+       "apihelp-feedrecentchanges-param-hideliu": "Ännerunge vu registréierte Benotzer verstoppen.",
+       "apihelp-feedrecentchanges-example-simple": "Rezent Ännerunge weisen",
+       "apihelp-help-example-recursive": "All Hëllef op enger Säit",
+       "apihelp-imagerotate-description": "Eent oder méi Biller dréinen.",
+       "apihelp-imagerotate-example-generator": "All Biller an der [[:Category:Flip]] ëm 180 Grad dréinen",
+       "apihelp-import-param-summary": "Resumé importéieren.",
+       "apihelp-login-param-name": "Benotzernumm.",
+       "apihelp-login-param-password": "Passwuert.",
+       "apihelp-move-description": "Eng Säit réckelen.",
+       "apihelp-move-param-ignorewarnings": "All Warnungen ignoréieren.",
+       "apihelp-options-example-reset": "All Astellungen zrécksetzen",
+       "apihelp-protect-example-protect": "Eng Säit spären",
+       "apihelp-query+allcategories-description": "All Kategorien opzielen.",
+       "apihelp-query+allusers-description": "All registréiert Benotzer opzielen.",
+       "apihelp-query+allusers-param-activeusers": "Nëmme Benotzer opzielen déi an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.",
+       "apihelp-query+blocks-description": "Lëscht vun de gespaarte Benotzer an IP-Adressen.",
+       "apihelp-query+blocks-example-simple": "Lëscht vun de Spären",
+       "apihelp-query+categories-description": "All Kategorien opzielen zu deenen dës Säit gehéiert.",
+       "apihelp-query+categorymembers-description": "All Säiten aus enger bestëmmter Kategorie opzielen.",
+       "apihelp-query+categorymembers-example-simple": "Déi éischt 10 Säiten aus der [[:Category:Physics]] kréien",
+       "apihelp-query+deletedrevs-param-unique": "Nëmmen eng Versioun fir all Säit weisen.",
+       "apihelp-query+filearchive-example-simple": "Eng Lëscht vun alle geläschte Fichiere weisen",
+       "apihelp-query+imageinfo-param-urlheight": "Ähnlech wéi $1urlwidth.",
+       "apihelp-query+images-example-simple": "Eng Lëscht vun de Fichiere kréien déi op der [[Main Page|Haaptsäit]] benotzt ginn",
+       "apihelp-query+imageusage-example-simple": "Säite weisen déi [[:File:Albert Einstein Head.jpg]] benotzen",
+       "apihelp-query+langlinks-param-lang": "Nëmme Sproochlinke mat dësem Sproochcode zréckginn.",
+       "apihelp-query+protectedtitles-param-namespace": "Nëmmen Titelen aus dësen Nummraim opzielen.",
+       "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+       "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
+       "apihelp-query+revisions-example-last5": "Déi lescht 5 Versioune vun der \"Haaptsäit\" kréien",
+       "apihelp-query+usercontribs-description": "All Ännerunge vun engem Benotzer kréien.",
+       "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+       "apihelp-query+watchlist-param-excludeuser": "Ännerunge vun dësem Benotzer net opzielen.",
+       "apihelp-query+watchlistraw-param-show": "Nëmmen Elementer opzielen déi dëse Critèren entspriechen.",
+       "apihelp-query+watchlistraw-example-simple": "Säite vum aktuelle Benotzer senger Iwwerwaachungslëscht opzielen",
+       "apihelp-revisiondelete-description": "Versioune läschen a restauréieren.",
+       "apihelp-revisiondelete-param-reason": "Grond fir ze Läschen oder ze Restauréieren.",
+       "apihelp-rsd-example-simple": "Den RSD-Schema exportéieren",
+       "apihelp-unblock-description": "D'Spär vun engem Benotzer ophiewen.",
+       "apihelp-unblock-param-reason": "Grond fir d'Spär opzehiewen",
+       "apihelp-undelete-param-reason": "Grond fir ze restauréieren.",
+       "apihelp-undelete-example-page": "[[Main Page]] restauréieren",
+       "apihelp-upload-param-watch": "D'Säit iwwerwaachen.",
+       "apihelp-userrights-param-user": "Benotzernumm.",
+       "apihelp-userrights-param-userid": "Benotzer Id.",
+       "apihelp-userrights-param-reason": "Grond fir d'Ännerung.",
+       "apihelp-watch-example-watch": "D'Säit \"Haaptsäit\" iwwerwaachen",
+       "api-help-param-deprecated": "Vereelst.",
+       "api-help-param-required": "Dëse Parameter ass obligatoresch.",
+       "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:"
+}
diff --git a/includes/api/i18n/lv.json b/includes/api/i18n/lv.json
new file mode 100644 (file)
index 0000000..b24e5f6
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Papuass"
+               ]
+       },
+       "apihelp-userrights-param-userid": "Lietotāja ID:"
+}
diff --git a/includes/api/i18n/mk.json b/includes/api/i18n/mk.json
new file mode 100644 (file)
index 0000000..c6fcec7
--- /dev/null
@@ -0,0 +1,354 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bjankuloski06"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Документација]\n* [https://www.mediawiki.org/wiki/API:FAQ ЧПП]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Поштенски список]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Соопштенија за Прилогот]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Грешки и барања]\n</div>\n<strong>Статус:</strong> Сите ставки на страницава би требало да работат, но Прилогот сепак е во активна разработка, што значи дека може да се смени во секое време. Објавите за измени можете да ги дознавате ако се пријавите на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ поштенскиот список „the mediawiki-api-announce“].\n\n<strong>Погрешни барања:</strong> Кога Прилогот ќе добие погрешни барања, ќе се испрати HTTP-заглавие со клучот „MediaWiki-API-Error“ и потоа на вредностите на заглавието и шифрата на грешката што ќе се појават ќе им биде зададена истата вредност. ПОвеќе информации ќе најдете на https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Кое дејство да се изврши.",
+       "apihelp-main-param-format": "Формат на изводот.",
+       "apihelp-main-param-maxlag": "Максималниот заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код „maxlag“ со порака од обликот „Го чекам $host: има заостаток од $lag секунди“.<br />Погл. https://www.mediawiki.org/wiki/Manual:Maxlag_parameter за повеќе информации.",
+       "apihelp-main-param-smaxage": "Задајте му олку секунди на заглавитето s-maxage. Грешките никогаш не се чуваат во меѓускладот.",
+       "apihelp-main-param-maxage": "Задајте му олку секунди на заглавитето max-age. Грешките никогаш не се чуваат во меѓускладот.",
+       "apihelp-main-param-assert": "Провери дали корисникот е најавен ако е зададено „user“ или дали го има корисничкото право на бот, ако е зададено „bot“.",
+       "apihelp-main-param-requestid": "Тука внесената вредност ќе биде вклучена во извештајот. Може да се користи за разликување на барањата.",
+       "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во резултатите.",
+       "apihelp-main-param-curtimestamp": "Бклучи тековно време и време и датум во резултатот.",
+       "apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како http://en.wikipedia.org or https://meta.wikimedia.org. Ако овој параметар не се совпаѓа со заглавието Origin:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе ззаглавието Контрола на пристап-Изворник.",
+       "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], или пак укажете „user“ за да го користите тековно зададениот јазик корисникот.",
+       "apihelp-block-description": "Блокирај корисник.",
+       "apihelp-block-param-user": "Корисничко име, IP-адреса или IP-опсег ако сакате да блокирате.",
+       "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. „5 месеци“ или „2 недели“) или пак апсолутно (на пр. „2014-09-18T12:34:56Z“). Ако го зададете „бесконечно“, „неодредено“ или „никогаш“, блокот ќе трае засекогаш.",
+       "apihelp-block-param-reason": "Причина за блокирање.",
+       "apihelp-block-param-anononly": "Блокирај само анонимни корисници (т.е. оневозможи анонимно уредување од оваа IP-адреса).",
+       "apihelp-block-param-nocreate": "Оневозможи создавање кориснички сметки.",
+       "apihelp-block-param-autoblock": "Автоматски блокирај ја последно употребената IP-адреса и сите понатамошни IP-адреси од кои лицето ќе се обиде да се најави.",
+       "apihelp-block-param-noemail": "Оневозможи му на корисникот да испаќа е-пошта преку викито. (Го бара правото „блокирање е-пошта“).",
+       "apihelp-block-param-hidename": "Скриј го корисничкото име од дневникот на блокирања. (Го бара правото „скривање корисник“)",
+       "apihelp-block-param-allowusertalk": "Овозможи му на корисникот да си ја уредува сопствената страница за разговор (зависи од $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "Ако корисникот е веќе блокиран, наметни врз постоечкиот блок.",
+       "apihelp-block-param-watchuser": "Набљудувај ја корисничката страница и страницата за разговор на овој корисник или IP-адреса",
+       "apihelp-block-example-ip-simple": "Блокирај ја IP-адресата 192.0.2.5 три дена со причината „Прва опомена“",
+       "apihelp-block-example-user-complex": "Блокирај го корисникот Вандал (Vandal) бесконечно со причината „Вандализам“ и оневозможи создавање на нови сметки и праќање е-пошта",
+       "apihelp-clearhasmsg-description": "Ја отстранува ознаката „hasmsg“ од тековниот корисник.",
+       "apihelp-clearhasmsg-example-1": "Отстрани ја ознаката „hasmsg“ од тековниот корисник",
+       "apihelp-compare-description": "Добивање на разлика помеѓу две страници.\n\nМора да се добие број на преработката, наслов на странивата или пак нејзина назнака. Важи и за „од“ и за „на“.",
+       "apihelp-compare-param-fromtitle": "Прв наслов за споредба.",
+       "apihelp-compare-param-fromid": "Прва назнака на страница за споредба.",
+       "apihelp-compare-param-fromrev": "Прва преработка за споредба.",
+       "apihelp-compare-param-totitle": "Втор наслов за споредба.",
+       "apihelp-compare-param-toid": "Втора назнака на страница за споредба.",
+       "apihelp-compare-param-torev": "Бтора преработка за споредба.",
+       "apihelp-compare-example-1": "Дај разлика помеѓу преработките 1 и 2",
+       "apihelp-createaccount-description": "Создај нова корисничка сметка.",
+       "apihelp-createaccount-param-name": "Корисничко име.",
+       "apihelp-createaccount-param-password": "Лозинка (се занемарува ако е зададено $1mailpassword).",
+       "apihelp-createaccount-param-domain": "Домен за надворешна заверка (незадолжително).",
+       "apihelp-createaccount-param-token": "Шифра за создавање сметка добиена во првото барање.",
+       "apihelp-createaccount-param-email": "Е-пошта на корисникот (незадолжително).",
+       "apihelp-createaccount-param-realname": "Вистинско име на корисникот (незадолжително).",
+       "apihelp-createaccount-param-mailpassword": "Ако му се зададе било каква вредност, тогаш на корисникот ќе му биде испратена случајна лозинка.",
+       "apihelp-createaccount-param-reason": "Незадолжителна прочина за создавање на сметката која ќе стои во дневниците.",
+       "apihelp-createaccount-param-language": "Јазичен код кој ќе биде стандарден за корисникот (незадолжително, по основно: јазикот на самото вики).",
+       "apihelp-createaccount-example-pass": "Создај го корисникот „testuser“ со лозинката „test123“",
+       "apihelp-createaccount-example-mail": "Создај го корисникот „testmailuser“ и испрати случајно-создадена лозинка по е-пошта",
+       "apihelp-delete-description": "Избриши страница.",
+       "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со $1pageid.",
+       "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со $1title.",
+       "apihelp-delete-param-reason": "Причина за бришење. Ако не се зададе, ќе се наведе автоматска причина.",
+       "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните.",
+       "apihelp-delete-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-delete-param-unwatch": "Отстрани ја страницата од набљудуваните.",
+       "apihelp-delete-param-oldimage": "Името на страта слика за бришење според добиеното од [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Избриши ја Главната страница",
+       "apihelp-delete-example-reason": "Избриши ја Главната страница со причината „Подготовка за преместување“",
+       "apihelp-disabled-description": "Модулот е деактивиран.",
+       "apihelp-edit-description": "Создај или уреди страници.",
+       "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со $1pageid.",
+       "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со $1title.",
+       "apihelp-edit-param-section": "Број на поднасловот. 0 за првиот, „new“ за нов.",
+       "apihelp-edit-param-sectiontitle": "Назив на новиот поднаслов",
+       "apihelp-edit-param-text": "Содржина на страницата.",
+       "apihelp-edit-param-summary": "Опис на уредувањето. Ова е и назив на поднасловот кога не се зададени $1section=new и $1sectiontitle.",
+       "apihelp-edit-param-minor": "Ситно уредување.",
+       "apihelp-edit-param-notminor": "Неситно уредување.",
+       "apihelp-edit-param-bot": "Означи го уредувањево како ботско.",
+       "apihelp-edit-param-basetimestamp": "Датум и време на преработката на базата, кои се користат за утврдување на спротиставености во уредувањето. Може да се добие преку [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Датум и време кога сте го почнале уредувањето, кои се користат за утврдување на спротиставености во уредувањата. Соодветната вредност се добива користејќи [[Special:ApiHelp/main|curtimestamp]] кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
+       "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со статијата што е избришана во меѓувреме.",
+       "apihelp-edit-param-createonly": "Не ја уредувај страницата ако веќе постои.",
+       "apihelp-edit-param-nocreate": "Дај грешка ако страницата не постои.",
+       "apihelp-edit-param-watch": "Додај ја страницата во набљудуваните.",
+       "apihelp-edit-param-unwatch": "Отстрани ја страницата од набљудуваните.",
+       "apihelp-edit-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-edit-param-md5": "MD5-тарабата на параметарот $1text, или параметрите $1prependtext и $1appendtext поврзани. Ако е зададено, уредувањето нема да се изврши без тарабата да биде исправна.",
+       "apihelp-edit-param-prependtext": "Ставете го текстов на почетокот од страницата. Го заменува  $1text.",
+       "apihelp-edit-param-appendtext": "Ставете го текстов на крајот од страницата. Го заменува $1text.\n\nКористете $1section=new наместо овој параметар за да приложите кон новиот поднаслов.",
+       "apihelp-edit-param-undo": "Отповикај ја преработкава. Ги заменува $1text, $1prependtext и $1appendtext.",
+       "apihelp-edit-param-undoafter": "Отповикај ги преработките од $1undo до оваа. Ако не е зададено, отповикај само една.",
+       "apihelp-edit-param-redirect": "Автоматски решавај пренасочувања.",
+       "apihelp-edit-param-contentformat": "Форматот за серијализација на содржината што се користи во вносниот текст.",
+       "apihelp-edit-param-contentmodel": "Содржински модел на новата содржина.",
+       "apihelp-edit-param-token": "Шифрата треба секогаш да се испраќа како последниот параметар, или барем по параметарот $1text.",
+       "apihelp-edit-example-edit": "Уреди страница",
+       "apihelp-edit-example-prepend": "Стави _&#95;NOTOC_&#95; пред страницата",
+       "apihelp-edit-example-undo": "Отповикај ги преработките од 13579 до 13585 со автоматски опис",
+       "apihelp-emailuser-description": "Испрати е-пошта на корисник.",
+       "apihelp-emailuser-param-target": "На кој корисник да му се испрати е-поштата.",
+       "apihelp-emailuser-param-subject": "Наслов.",
+       "apihelp-emailuser-param-text": "Содржина.",
+       "apihelp-emailuser-param-ccme": "Прати ми примерок и мене.",
+       "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот „WikiSysop“ со текстот „Содржина“",
+       "apihelp-expandtemplates-description": "Ги проширува сите шаблони во викитекст.",
+       "apihelp-expandtemplates-param-title": "Наслов на страница.",
+       "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
+       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+       "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
+       "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Прошири го викитекстот „<nowiki>{{Project:Sandbox}}</nowiki>“",
+       "apihelp-feedcontributions-description": "Дава канал со придонеси на корисник.",
+       "apihelp-feedcontributions-param-feedformat": "Формат на каналот.",
+       "apihelp-feedcontributions-param-user": "За кои корисници да се прикажуваат придонесите.",
+       "apihelp-feedcontributions-param-namespace": "По кој именски простор да се филтрираат придонесите:",
+       "apihelp-feedcontributions-param-year": "Од година (и порано):",
+       "apihelp-feedcontributions-param-month": "Од месец (и порано):",
+       "apihelp-feedcontributions-param-tagfilter": "Филтрирај придонеси што имаат ознаки.",
+       "apihelp-feedcontributions-param-deletedonly": "Прикажувај само избришани придонеси.",
+       "apihelp-feedcontributions-param-toponly": "Прикажувај само последни преработки.",
+       "apihelp-feedcontributions-param-newonly": "Прикажувај само новосоздадени страници",
+       "apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
+       "apihelp-feedcontributions-example-simple": "Покажувај придонеси на [[Корисник:Пример]]",
+       "apihelp-feedrecentchanges-description": "Дава канал со скорешни промени.",
+       "apihelp-feedrecentchanges-param-feedformat": "Форматот на каналот.",
+       "apihelp-feedrecentchanges-param-namespace": "На кој именски простор да се ограничат резултатите.",
+       "apihelp-feedrecentchanges-param-invert": "Сите именски простори освен избраниот.",
+       "apihelp-feedrecentchanges-param-associated": "Вклучи придружни именски простори (разговор или главен).",
+       "apihelp-feedrecentchanges-param-days": "На кои денови да се ограничат резултатите.",
+       "apihelp-feedrecentchanges-param-limit": "Максималниот број на резултати за прикажување.",
+       "apihelp-feedrecentchanges-param-from": "Прикажи ги промените оттогаш.",
+       "apihelp-feedrecentchanges-param-hideminor": "Скриј ги ситните промени.",
+       "apihelp-feedrecentchanges-param-hidebots": "Скриј ги промените напарвени од ботови.",
+       "apihelp-feedrecentchanges-param-hideanons": "Скриј ги промените направени од анонимни корисници.",
+       "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Скриј ги моите промени.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
+       "apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
+       "apihelp-feedrecentchanges-example-simple": "Прикажи скорешни промени",
+       "apihelp-feedrecentchanges-example-30days": "Прикажувај скорешни промени 30 дена",
+       "apihelp-feedwatchlist-description": "Дава канал од набљудуваните.",
+       "apihelp-feedwatchlist-param-feedformat": "Форматот на каналот.",
+       "apihelp-feedwatchlist-param-hours": "Испиши страници изменети во рок од олку часови отсега.",
+       "apihelp-feedwatchlist-param-linktosections": "Давај ме право на изменетите делови, ако е можно.",
+       "apihelp-feedwatchlist-example-default": "Прикажи го каналот од набљудуваните.",
+       "apihelp-feedwatchlist-example-all6hrs": "Прикажи ги сите промени во набљудуваните во последните 6 часа",
+       "apihelp-filerevert-description": "Врати податотека на претходна верзија.",
+       "apihelp-filerevert-param-filename": "Име на целната податотека, без претставката „Податотека:“.",
+       "apihelp-filerevert-param-comment": "Коментар за подигањето.",
+       "apihelp-filerevert-param-archivename": "Архивски назив на преработката што ја повраќате.",
+       "apihelp-filerevert-example-revert": "Врати ја Wiki.png на верзијата од 2011-03-05T15:27:40Z",
+       "apihelp-help-description": "Прикажувај помош за укажаните модули.",
+       "apihelp-help-param-modules": "Модули за приказ на помош за (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "apihelp-help-param-submodules": "Прикажувај и помош за подмодули на именуваниот модул.",
+       "apihelp-help-param-recursivesubmodules": "Прикажувај и помош за подмодули рекурзивно.",
+       "apihelp-help-param-helpformat": "Формат на изводот на помошта.",
+       "apihelp-help-param-wrap": "Обвиткај го изводот како станрадна одѕивна структура од прилотот.",
+       "apihelp-help-param-toc": "Вклучи табела со содржина во HTML-изводот.",
+       "apihelp-help-example-main": "Помош за главниот модул",
+       "apihelp-help-example-recursive": "Сета помош на една страница",
+       "apihelp-help-example-help": "Помош за самиот помошен модул",
+       "apihelp-help-example-query": "Помош за два подмодула за барања",
+       "apihelp-imagerotate-description": "Сврти една или повеќе слики.",
+       "apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
+       "apihelp-imagerotate-example-simple": "Сврти ја [[:Податотека:Пример.png]] за 90 степени",
+       "apihelp-imagerotate-example-generator": "Сврти ги сите слики во [[:Категорија:Некоја]] за 180 степени",
+       "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот „xml“.",
+       "apihelp-import-param-summary": "Увези опис.",
+       "apihelp-import-param-xml": "Подигната XML-податотека.",
+       "apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
+       "apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
+       "apihelp-import-param-fullhistory": "За меѓујазични увози:: увези ја целата историја, а не само тековната верзија.",
+       "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
+       "apihelp-import-param-namespace": "За меѓујазични увози: увези во овој именски простор.",
+       "apihelp-import-param-rootpage": "Увези како потстраница на страницава.",
+       "apihelp-import-example-import": "Увези [[meta:Help:Parserfunctions]] во именскиот простор 100 со целата историја.",
+       "apihelp-login-description": "Најавете се и добијте колачиња за заверка.\n\nВо случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
+       "apihelp-login-param-name": "Корисничко име.",
+       "apihelp-login-param-password": "Лозинка.",
+       "apihelp-login-param-domain": "Домен (незадолжително).",
+       "apihelp-login-param-token": "Најавна шифра добиена со првото барање.",
+       "apihelp-login-example-gettoken": "Набави најавна шифра.",
+       "apihelp-login-example-login": "Најава",
+       "apihelp-logout-description": "Одјави се и исчисти ги податоците на седницата.",
+       "apihelp-logout-example-logout": "Одјави го тековниот корисник",
+       "apihelp-move-description": "Премести страница.",
+       "apihelp-move-param-from": "Наслов на страницата што сакате да ја преместите. Не може да се користи заедно со $1fromid.",
+       "apihelp-move-param-fromid": "Назнака на страницата што сакате да ја преместите. Не може да се користи заедно со $1from.",
+       "apihelp-move-param-to": "Како сакате да гласи новиот наслов на страницата.",
+       "apihelp-move-param-reason": "Причина за преместувањето.",
+       "apihelp-move-param-movetalk": "Премести ја и страницата за разговор, ако ја има.",
+       "apihelp-move-param-movesubpages": "Премести потстраници, ако има",
+       "apihelp-move-param-noredirect": "Не прави пренасочување.",
+       "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните.",
+       "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните.",
+       "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-move-param-ignorewarnings": "Занемари предупредувања.",
+       "apihelp-move-example-move": "Премести го „Лош наслов“ на „Добар наслов“, неоставајќи пренасочување",
+       "apihelp-opensearch-description": "Пребарување на викито со протоколот OpenSearch.",
+       "apihelp-opensearch-param-search": "Низа за пребарување.",
+       "apihelp-opensearch-param-limit": "Максималниот број на резултати за прикажување.",
+       "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
+       "apihelp-opensearch-param-suggest": "Не прави ништо ако [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] е неточно.",
+       "apihelp-opensearch-param-format": "Формат на изводот.",
+       "apihelp-opensearch-example-te": "Најди страници што почнуваат со „Те“",
+       "apihelp-options-param-reset": "Ги враќа поставките по основно.",
+       "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста „$1reset“.",
+       "apihelp-options-param-change": "Список на промени во форматот name=value (на пр. skin=vector). Вредностите не треба да содржат исправени црти. Ако не зададете вредност (дури ни знак за равенство), на пр., можност|другаможност|..., ќе биде зададена вредноста на можноста по основно.",
+       "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од „$1optionvalue“.",
+       "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од „$1optionnam“. Може да содржи исправени црти.",
+       "apihelp-options-example-reset": "Врати ги сите поставки по основно",
+       "apihelp-options-example-change": "Смени ги поставките „skinЗ“ и „hideminor“",
+       "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги „skin“ и „nickname“",
+       "apihelp-paraminfo-description": "Набави информации за прилошки (API) модули.",
+       "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
+       "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот prop=, meta= или list=). Користете го „$1modules=query+foo“ наместо „$1querymodules=foo“.",
+       "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го „$1modules=main“ наместо тоа.",
+       "apihelp-parse-param-summary": "Опис за расчленување.",
+       "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
+       "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
+       "apihelp-parse-param-disabletoc": "Изземи го преглед на содржината во изводеот.",
+       "apihelp-parse-param-contentformat": "Формат на серијализацијата на содржината во вносниот текст. Важи само кога се користи со $1text.",
+       "apihelp-parse-example-page": "Расчлени страница.",
+       "apihelp-parse-example-text": "Расчлени викитекст.",
+       "apihelp-parse-example-texttitle": "Расчлени страница, укажувајќи го насловот на страницата.",
+       "apihelp-parse-example-summary": "Расчлени опис.",
+       "apihelp-patrol-description": "Испатролирај страница или ревизија.",
+       "apihelp-patrol-param-rcid": "Назнака на спорешните промени за патролирање.",
+       "apihelp-patrol-param-revid": "Назнака на преработката за патролирање.",
+       "apihelp-patrol-example-rcid": "Испатролирај скорешна промена",
+       "apihelp-patrol-example-revid": "Патролирај праработка",
+       "apihelp-protect-description": "Смени го степенот на заштита на страница.",
+       "apihelp-protect-param-title": "Наслов на страница што се (од)заштитува. Не може да се користи заедно со $1pageid.",
+       "apihelp-protect-param-pageid": "Назнака на страница што се (од)заштитува. Не може да се користи заедно со $1title.",
+       "apihelp-protect-param-reason": "Причиина за (од)заштитување",
+       "apihelp-protect-example-protect": "Заштити страница",
+       "apihelp-purge-param-forcelinkupdate": "Поднови ги табелите со врски.",
+       "apihelp-purge-example-simple": "Превчитај ги „Главна страница“ и „Прилог“",
+       "apihelp-query-param-list": "Кои списоци да се набават.",
+       "apihelp-query-param-meta": "Кои метаподатоци да се набават.",
+       "apihelp-query+allcategories-description": "Наброј ги сите категории.",
+       "apihelp-query+allcategories-param-from": "Од која категорија да почне набројувањето.",
+       "apihelp-query+allcategories-param-to": "На која категорија да запре набројувањето.",
+       "apihelp-query+allcategories-param-dir": "Насока на подредувањето.",
+       "apihelp-query+backlinks-example-simple": "Прикажи врски до [[Главна страница|Главната страница]]",
+       "apihelp-query+backlinks-example-generator": "Дава информации за страниците што водат до [[Главна страница|Главната страница]]",
+       "apihelp-query+blocks-description": "Список на сите блокирани корисници и IP-адреси",
+       "apihelp-query+blocks-param-start": "Од кој датум и време да се почне набројувањето.",
+       "apihelp-query+blocks-param-end": "На кој датум и време да запре набројувањето.",
+       "apihelp-query+blocks-param-ids": "Список на назнаки на блоковите за испис (незадолжително)",
+       "apihelp-query+blocks-param-users": "Список на корисници што ќе се пребаруваат (незадолжително)",
+       "apihelp-query+imageinfo-param-urlheight": "Слично на $1urlwidth.",
+       "apihelp-query+revisions-example-last5": "Дај ги последните 5 преработки на „Главна страница“",
+       "apihelp-query+revisions-example-first5": "Дај ги првите 5 преработки на „Главна страница“",
+       "apihelp-query+revisions-example-first5-after": "Дај ги првите 5 преработки на „Главна страница“ направени по 2006-05-01 (1 мај 2006 г.)",
+       "apihelp-query+revisions-example-first5-not-localhost": "Дај ги првите 5 преработки на „Главна страница“ кои не се направени од анонимниот корисник „127.0.0.1“",
+       "apihelp-query+revisions-example-first5-user": "Дај ги првите 5 преработки на „Главна страница“ кои се направени од корисникот „зададен од МедијаВики“ (MediaWiki default)",
+       "apihelp-query+search-example-simple": "Побарај „meaning“",
+       "apihelp-query+search-example-text": "Побарај го „meaning“ по текстовите",
+       "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во резултатите од пребарувањето на „meaning“",
+       "apihelp-query+siteinfo-description": "Дај општи информации за мрежното место.",
+       "apihelp-upload-param-filename": "Целно име на податотеката.",
+       "apihelp-upload-param-comment": "Коментар при подигање. Се користи и како првичен текст на страницата за нови податотеки ако не е укажано „$1text“.",
+       "apihelp-upload-param-text": "Првичен текст на страницата за нови податотеки.",
+       "apihelp-upload-param-watch": "Набљудувај ја страницата.",
+       "apihelp-upload-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-upload-param-ignorewarnings": "Занемари предупредувања.",
+       "apihelp-upload-param-file": "Содржина на податотеката.",
+       "apihelp-upload-param-url": "Од која URL-адреса да се преземе податотеката.",
+       "apihelp-upload-param-filekey": "Клуч на претходното подигање кое е привремено складирано.",
+       "apihelp-upload-param-sessionkey": "Исто што и $1filekey. Се одржува за назадна складност.",
+       "apihelp-upload-param-stash": "Ако е зададено, опслужувачот нема да ја стави податотеката во складиштето за привремено чување.",
+       "apihelp-upload-param-filesize": "Големина на целото подигање.",
+       "apihelp-upload-param-offset": "Зафатнина на делот во бајти.",
+       "apihelp-upload-param-chunk": "Содржина на делот.",
+       "apihelp-upload-param-async": "Направи ги работите со потенцијално големи податотеки неусогласени, кога е можно.",
+       "apihelp-upload-param-asyncdownload": "Направи го добивањето на URL-адреса неусогласено.",
+       "apihelp-upload-param-leavemessage": "Ако се користи неусогласено преземање, остави порака на страницата за разговор на корисникот ако е готово.",
+       "apihelp-upload-param-statuskey": "Дај ја состојбата на подигнатост за овој податотечен клуч (подигање по URL-адреса).",
+       "apihelp-upload-param-checkstatus": "Дај ја состојбата на подигнатост само за дадениот податотечен клуч.",
+       "apihelp-upload-example-url": "Подигни од URL-адреса",
+       "apihelp-userrights-param-userid": "Корисничка назнака.",
+       "apihelp-userrights-param-add": "Стави го корисникот во следниве групи.",
+       "apihelp-userrights-param-remove": "Отстрани го корисникот од следниве групи.",
+       "apihelp-userrights-param-reason": "Причина за промената.",
+       "apihelp-watch-example-watch": "Набљудувај ја страницата „Главна страница“",
+       "apihelp-watch-example-unwatch": "Отстрани ја страницата „Главна страница“ од набљудуваните",
+       "apihelp-watch-example-generator": "Набљудувај ги првите неколку страници во главниот именски простор",
+       "apihelp-format-example-generic": "Форматирај го резултатот од барањето во $1-формат",
+       "apihelp-dbg-description": "Давај го изводот во PHP-форматот var_export().",
+       "apihelp-dbgfm-description": "Давај го изводот во PHP-форматот var_export() (подобрен испис во HTML).",
+       "apihelp-dump-description": "Давај го изводот во PHP-форматот var_dump().",
+       "apihelp-dumpfm-description": "Давај го изводот во PHP-форматот var_dump() (подобрен испис во HTML).",
+       "apihelp-json-description": "Давај го изводот во JSON-формат.",
+       "apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
+       "apihelp-json-param-utf8": "Ако е укажано, ја ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи.",
+       "apihelp-jsonfm-description": "Давај го изводот во JSON-формат (подобрен испис во HTML).",
+       "apihelp-none-description": "Де давај извод.",
+       "apihelp-php-description": "Давај го изводот во серијализиран PHP-формат.",
+       "apihelp-phpfm-description": "Давај го изводот во серијализиран PHP-формат (подобрен испис во HTML).",
+       "apihelp-rawfm-description": "Давај го изводот со елементи за отстранување грешки во JSON-формат (подобрен испис во HTML).",
+       "apihelp-txt-description": "Давај го изводот во PHP-форматот print_r().",
+       "apihelp-txtfm-description": "Давај го изводот во PHP-форматот print_r() (подобрен испис во HTML).",
+       "apihelp-wddx-description": "Давај го изводот во WDDX-формат.",
+       "apihelp-wddxfm-description": "Давај го изводот во WDDX-формат (подобрен испис во HTML).",
+       "apihelp-xml-description": "Давај го изводот во XML-формат.",
+       "apihelp-xml-param-xslt": "Ако е укажано, додава &lt;xslt&gt; како стилска страница. Ова треба да е викистраница во именскиот простор МедијаВики (MediaWiki) чиј наслов завршува со „.xsl“.",
+       "apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
+       "apihelp-xmlfm-description": "Давај го изводот во XML-формат (подобрен испис во HTML).",
+       "apihelp-yaml-description": "Давај го изводот во YAML-формат.",
+       "apihelp-yamlfm-description": "Давај го изводот во YAML-формат (подобрен испис во HTML).",
+       "api-format-title": "Резултат од Прилогот на МедијаВики",
+       "api-format-prettyprint-header": "Ја гледате HTML-претставата на форматот $1. HTML е добар за отстранување на грешки, но не е погоден за употреб во прилог.\n\nУкажете го параметарот за формат за да го смените изводниот формат. За да ги видите претставите на форматот $1 вон HTML, задајте format=$2.\n\nПовеќе информации ќе најдете на [https://www.mediawiki.org/wiki/API целосната документација], или пак [[Special:ApiHelp/main|помош со прилогот]].",
+       "api-orm-param-props": "Полиња за пребарување.",
+       "api-orm-param-limit": "Макс. број на редови во изводот.",
+       "api-pageset-param-titles": "Список на наслови на кои ќе се работи",
+       "api-pageset-param-pageids": "Список на назнаки за страници на кои ќе се работи",
+       "api-pageset-param-revids": "Список на назнаки на преработки на кои ќе се работи",
+       "api-pageset-param-generator": "Дај го списокот на страници на кои ќе се работи исполнувајќи го укажаниот модул за барање.\n\n'''НАПОМЕНА:''' називите на создавачките параметри мора да ја имаат претставката „g“. Погледајте ги примерите.",
+       "api-help-title": "Помош со Прилогот на МедијаВики",
+       "api-help-lead": "Ова е самосоздадена документациска страница за Прилогот на МедијаВики.\n\nDocumentation and examples: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Главен модул",
+       "api-help-flag-deprecated": "Овој модул е застарен.",
+       "api-help-flag-internal": "<strong>Овој модул е внатрешен или нестабилен.</strong> Работењето може да му се промени без предупредување.",
+       "api-help-flag-readrights": "За овој модул се потребни права на читање.",
+       "api-help-flag-writerights": "За овој модул се потребни права на пишување.",
+       "api-help-flag-mustbeposted": "Овој модул прифаќа само POST-барања.",
+       "api-help-flag-generator": "Овој модул може да се користи како создавач.",
+       "api-help-parameters": "{{PLURAL:$1|Параметар|Параметри}}:",
+       "api-help-param-deprecated": "Застарен.",
+       "api-help-param-required": "Овој параметар е задолжителен.",
+       "api-help-param-list": "{{PLURAL:$1|1=Една вредност|2=Вредности (одделени со „{{!}}“)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Мора да биде празно|Може да биде празно или $2}}",
+       "api-help-param-limit": "Не се допушта повеќе од $1.",
+       "api-help-param-limit2": "Не се допушта повеќе од $1 ($2 за ботови).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Вредноста не може да изнесува|2=Вредностите не може да изнесуваат}} помалку од $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Вредноста не може да изнесува|2=Вредностите е може да изнесуваат}} повеќе од $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Вредноста мора да изнесува|2=Вредностите мораат да изнесуваат}} помеѓу $2 и $3.",
+       "api-help-param-upload": "Мора да биде објавено како податотечно подигање користејќи податоци кои се повеќеделни или од образец.",
+       "api-help-param-multi-separate": "Одделувајте ги вредностите со „|“.",
+       "api-help-param-multi-max": "Максималниот број на вредности изнесува {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} за ботови).",
+       "api-help-param-default": "По основно: $1",
+       "api-help-param-default-empty": "По основно: <span class=\"apihelp-empty\">(празно)</span>",
+       "api-help-param-token": "Шифра „$1“ добиена од [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "За складност, се прифаќа и шифрата што се користи за обичниот кориснички посредник.",
+       "api-help-param-disabled-in-miser-mode": "Исклучено поради [https://www.mediawiki.org/wiki/Manual:$wgMiserMode скржавиот режим].",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(нема опис)</span>",
+       "api-help-examples": "{{PLURAL:$1|Пример|Примери}}:",
+       "api-help-permissions": "{{PLURAL:$1|Дозвола|Дозволи}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Доделена на}: $2",
+       "api-help-right-apihighlimits": "Уоптреба на повисоки ограничувања за приложни барања (бавни барања: $1; брзи барања: $2). Ограничувањата за бавни барања важат и за повеќевредносни параметри.",
+       "api-credits-header": "Признанија",
+       "api-credits": "Разработувачи на Прилогот:\n* Роан Катау (главен резработувач од септември 2007 до 2009 г.)\n* Виктор Василев\n* Брајан Тонг Мињ\n* Сем Рид\n* Јуриј Астрахан (создавач, главен разработувач од септември 2006 до септември 2007 г.)\n* Brad Jorsch (главен разработувач од 2013 г. до денес)\n\nВашите коментари, предлози и прашања испраќајте ги на mediawiki-api@lists.wikimedia.org\nа грешките пријавувајте ги на https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/ms.json b/includes/api/i18n/ms.json
new file mode 100644 (file)
index 0000000..6b10584
--- /dev/null
@@ -0,0 +1,58 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anakmalaysia"
+               ]
+       },
+       "apihelp-main-param-action": "Tindakan mana untuk dilakukan.",
+       "apihelp-main-param-format": "Format output.",
+       "apihelp-main-param-uselang": "Bahasa yang hendak digunakan untuk penterjemahan mesej. Senarai kod boleh diperoleh dari [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], ataupun menyatakan \"user\" untuk menggunakan bahasa kegemaran pengguna semasa.",
+       "apihelp-expandtemplates-example-simple": "Perluaskan \"<nowiki>{{Project:Sandbox}}</nowiki>\" wikiteks",
+       "apihelp-help-param-helpformat": "Format output bantuan.",
+       "apihelp-help-example-main": "Bantuan untuk modul utama",
+       "apihelp-help-example-recursive": "Segala bantuan dalam satu halaman",
+       "apihelp-help-example-help": "Bantuan untuk modul bantuan",
+       "apihelp-userrights-param-userid": "ID pengguna.",
+       "apihelp-dbgfm-description": "Data output dalam format var_export() PHP (''pretty-print'' dalam HTML).",
+       "apihelp-dump-description": "Output data dalam format var_dump() PHP.",
+       "apihelp-dumpfm-description": "Data output dalam format var_dump() PHP (''pretty-print'' dalam HTML).",
+       "apihelp-json-description": "Data output dalam format JSON.",
+       "apihelp-json-param-utf8": "Jika dinyatakan, mengekodkan kenanyakan (tetapi bukan semua) aksara bukan ASCII sebagai UTF-8 daripada menggantikannya dengan jujukan lepasan perenambelasan.",
+       "apihelp-jsonfm-description": "Output data dalam format JSON (''pretty-print'' dalam HTML).",
+       "apihelp-php-description": "Data output dalam format PHP bersiri.",
+       "apihelp-txt-description": "Data output dalam format print_r() PHP.",
+       "apihelp-txtfm-description": "Data output dalam format print_r() PHP (''pretty-print'' dalam HTML).",
+       "apihelp-wddx-description": "Data output dalam format WDDX.",
+       "apihelp-wddxfm-description": "Output data dalam format WDDX (''pretty-print'' dalam HTML).",
+       "apihelp-xml-description": "Data output dalam format XML.",
+       "apihelp-xmlfm-description": "Data output dalam format XML (''pretty-print'' dalam HTML).",
+       "apihelp-yaml-description": "Data output dalam format YAML.",
+       "apihelp-yamlfm-description": "Output data dalam format YAML (''pretty-print'' dalam HTML).",
+       "api-format-title": "Hasil API MediaWiki",
+       "api-format-prettyprint-header": "Anda sedang menyaksikan representasi format $1 dalam bentuk HTML. HTML bagus untuk menyah pepijat, tetapi tidak sesuai untuk kegunaan aplikasi.\n\nNyatakan parameter format untuk mengubah format outputnya. Untuk melihat representasi format $1 yang bukan HTML, tetapkan format=$2.\n\nSila rujuk [https://www.mediawiki.org/wiki/API dokumentasi lengkapnya] ataupun [[Special:ApiHelp/main|bantuan API]] untuk keterangan lanjut.",
+       "api-help-title": "Bantuan API MediaWiki",
+       "api-help-lead": "Ini merupakan laman dokumentasi MediaWiki API yang dihasilkan secara automatik.\n\nDokumentasi dan contoh-contoh: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Modul utama",
+       "api-help-flag-deprecated": "Modul ini sudah lapuk.",
+       "api-help-flag-internal": "<strong>Modul ini dalaman atau tidak stabil.</strong> Operasinya boleh berubah tanpa amaran.",
+       "api-help-flag-readrights": "Modul ini memerlukan hak membaca.",
+       "api-help-flag-writerights": "Modul ini memerlukan hak menulis.",
+       "api-help-flag-mustbeposted": "Modul ini menerima permohonan POST sahaja.",
+       "api-help-flag-generator": "Modul ini boleh digunakan sebagai penjana.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+       "api-help-param-deprecated": "Lapuk.",
+       "api-help-param-required": "Parameter ini diwajibkan.",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Mestilah kosong|Bolehlah kosong atau $2}}",
+       "api-help-param-limit2": "Dibenarkannya tidak lebih daripada $1 ($2 untuk bot).",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mesti tidak melebihi $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mestilah antara $2 hingga $3.",
+       "api-help-param-multi-separate": "Asingkan nilai-nilai dengan \"|\".",
+       "api-help-param-multi-max": "Bilangan nilai maksimum adalah {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} untuk bot).",
+       "api-help-param-default": "Asal: $1",
+       "api-help-param-default-empty": "Asal: <span class=\"apihelp-empty\">(kosong)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(tiada keterangan)</span>",
+       "api-help-examples": "{{PLURAL:$1|Contoh|Contoh-contoh}}:",
+       "api-help-permissions": "{{PLURAL:$1|Keizinan}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Diberikan kepada}}: $2",
+       "api-credits-header": "Kredit"
+}
diff --git a/includes/api/i18n/nb.json b/includes/api/i18n/nb.json
new file mode 100644 (file)
index 0000000..6dcba40
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jeblad"
+               ]
+       },
+       "apihelp-main-param-action": "Hvilken handling skal utføres",
+       "apihelp-main-param-format": "Resultatets format.",
+       "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-dbg-description": "Resultatdata i PHP's var_export() format.",
+       "apihelp-dbgfm-description": "Resultatdata i PHP's var_export() format (pen utskrift i HTML).",
+       "apihelp-dump-description": "Resultatdata i PHP's var_export() format.",
+       "apihelp-dumpfm-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.",
+       "api-help-flag-writerights": "Denne modulen krever skrivetilgang.",
+       "api-help-flag-mustbeposted": "Denne modulen aksepterer bare POST forespørsler.",
+       "api-help-flag-generator": "Denne modulen kan brukes som en generator.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter|Parametre}}:",
+       "api-help-param-deprecated": "Utgått.",
+       "api-help-param-required": "Denne parameteren er påkrevd."
+}
diff --git a/includes/api/i18n/nl.json b/includes/api/i18n/nl.json
new file mode 100644 (file)
index 0000000..8ead891
--- /dev/null
@@ -0,0 +1,34 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Siebrand",
+                       "Sjoerddebruin",
+                       "Robin0van0der0vliet",
+                       "Mar(c)"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Documentatie]\n* [https://www.mediawiki.org/wiki/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle funties die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op  de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie https://www.mediawiki.org/wiki/API:Errors_and_warnings voor meer informatie.",
+       "apihelp-main-param-action": "Welke handeling uit te voeren.",
+       "apihelp-main-param-format": "De opmaak van de uitvoer.",
+       "apihelp-main-param-maxlag": "De maximale vertraging kan gebruikt worden als MediaWiki is geïnstalleerd op een databasecluster die gebruik maakt van replicatie. Om te voorkomen dat handelingen nog meer databasereplicatievertraging veroorzaken, kan deze parameter er voor zorgen dat de client wacht totdat de replicatievertraging lager is dan de aangegeven waarde. In het geval van buitensporige vertraging, wordt de foutcode \"maxlag\" teruggegeven met een bericht als \"Waiting for $host: $lag seconds lagged\".<br />Zie https://www.mediawiki.org/wiki/Manual:Maxlag_parameter voor mee informatie.",
+       "apihelp-main-param-smaxage": "Stelt de header \"s-maxage\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+       "apihelp-main-param-maxage": "Stelt de header \"max-age\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+       "apihelp-block-description": "Gebruiker blokkeren.",
+       "apihelp-block-param-reason": "Reden voor blokkade.",
+       "apihelp-edit-example-edit": "Pagina bewerken",
+       "apihelp-emailuser-description": "Gebruiker e-mailen.",
+       "apihelp-emailuser-param-subject": "Onderwerp header.",
+       "apihelp-emailuser-param-text": "Mailbody",
+       "apihelp-expandtemplates-param-title": "Titel van de pagina.",
+       "apihelp-feedcontributions-param-year": "Van jaar (en eerder).",
+       "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
+       "apihelp-login-param-name": "Gebruikersnaam.",
+       "apihelp-login-param-password": "Wachtwoord.",
+       "apihelp-login-param-domain": "Domein (optioneel).",
+       "apihelp-login-example-login": "Aanmelden",
+       "apihelp-move-description": "Pagina hernoemen.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
+       "api-help-param-deprecated": "Verouderd.",
+       "api-help-param-default": "Standaard: $1",
+       "api-credits-header": "Vermeldingen"
+}
diff --git a/includes/api/i18n/pa.json b/includes/api/i18n/pa.json
new file mode 100644 (file)
index 0000000..96c8694
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Babanwalia"
+               ]
+       },
+       "apihelp-help-example-recursive": "ਇੱਕੋ ਸਫ਼ੇ 'ਤੇ ਸਾਰੀ ਮਦਦ"
+}
diff --git a/includes/api/i18n/pl.json b/includes/api/i18n/pl.json
new file mode 100644 (file)
index 0000000..7d89e3c
--- /dev/null
@@ -0,0 +1,74 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chrumps",
+                       "Py64"
+               ]
+       },
+       "apihelp-main-param-action": "Wybierz akcję do wykonania.",
+       "apihelp-main-param-format": "Format danych wyjściowych.",
+       "apihelp-main-param-maxlag": "Maksymalne opóźnienie mogą być używane kiedy MediaWiki jest zainstalowana w klastrze zreplikowanej bazy danych. By zapisać działania powodujące większe opóźnienie replikacji, ten parametr może wymusić czekanie u klienta, dopóki opóźnienie replikacji jest mniejsze niż określona wartość. W przypadku nadmiernego opóźnienia, kod błędu \"maxlag\" jest zwracany z wiadomością jak \"Oczekiwanie na $host: $lag sekund opóźnienia\".<br />Zobacz https://www.mediawiki.org/wiki/Manual:Maxlag_parameter by uzyskać więcej informacji.",
+       "apihelp-main-param-assert": "Sprawdź, czy użytkownik jest zalogowany jeżeli jest ustawiony na \"użytkownik\", lub ma prawa bota jeśli \"bot\".",
+       "apihelp-edit-example-edit": "Edytuj stronę",
+       "apihelp-help-description": "Wyświetl pomoc dla określonych modułów.",
+       "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości akcji= i format= parametry, lub \"głównego\"). Może określić podmoduły z \"+\".",
+       "apihelp-help-param-recursivesubmodules": "Zawiera pomoc dla podmodułów rekursywnie.",
+       "apihelp-help-example-main": "Pomoc dla modułu głównego",
+       "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
+       "apihelp-help-example-help": "Pomoc dla modułu pomocy",
+       "apihelp-move-description": "Przenieś stronę.",
+       "apihelp-protect-example-protect": "Zabezpiecz stronę",
+       "apihelp-query+search-description": "Wykonaj wyszukiwanie pełnotekstowe.",
+       "apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
+       "apihelp-unblock-param-reason": "Powód odblokowania.",
+       "apihelp-undelete-param-reason": "Powód przywracania.",
+       "apihelp-upload-param-filename": "Nazwa pliku docelowego.",
+       "apihelp-userrights-param-user": "Nazwa użytkownika.",
+       "apihelp-userrights-param-reason": "Powód zmiany.",
+       "apihelp-dbg-description": "Dane wyjściowe w formacie var_export() (funkcji PHP).",
+       "apihelp-dbgfm-description": "Dane wyjściowe w formacie var_export() (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+       "apihelp-dump-description": "Dane wyjściowe w formacie var_dump() (funkcji PHP).",
+       "apihelp-dumpfm-description": "Dane wyjściowe w formacie var_dump() (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+       "apihelp-json-description": "Dane wyjściowe w formacie JSON.",
+       "apihelp-jsonfm-description": "Dane wyjściowe w formacie JSON (prawidłowo wyświetlane w HTML).",
+       "apihelp-php-description": "Dane wyjściowe w serializowany formacie PHP.",
+       "apihelp-phpfm-description": "Dane wyjściowe w serializowanym formacie PHP (prawidłowo wyświetlane w HTML).",
+       "apihelp-txt-description": "Dane wyjściowe w formacie print_r() (funkcji PHP).",
+       "apihelp-txtfm-description": "Dane wyjściowe w formacie print_r() (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+       "apihelp-wddx-description": "Dane wyjściowe w formacie WDDX.",
+       "apihelp-wddxfm-description": "Dane wyjściowe w formacie WDDX (prawidłowo wyświetlane w HTML).",
+       "apihelp-xml-description": "Dane wyjściowe w formacie XML.",
+       "apihelp-xml-param-xslt": "Jeśli określony, dodaje &lt;xslt&gt; jako arkusz styli. Powinna to być strona wiki w przestrzeni nazw MediaWiki, której nazwy stron kończą się na \".xsl\".",
+       "apihelp-xmlfm-description": "Dane wyjściowe w formacie XML (prawidłowo wyświetlane w HTML).",
+       "apihelp-yaml-description": "Dane wyjściowe w formacie YAML.",
+       "apihelp-yamlfm-description": "Dane wyjściowe w formacie YAML (prawidłowo wyświetlane w HTML).",
+       "api-format-title": "Wynik MediaWiki API",
+       "api-help-title": "Pomoc MediaWiki API",
+       "api-help-lead": "To jest automatycznie wygenerowana strona dokumentacji MediaWiki API.\nDokumentacja i przykłady: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Moduł główny",
+       "api-help-flag-deprecated": "Ten moduł jest przestarzały.",
+       "api-help-flag-internal": "<strong>Ten moduł jest wewnętrzny lub niestabilny.</strong> Jego działanie może się zmienić bez uprzedzenia.",
+       "api-help-flag-readrights": "Ten moduł wymaga praw odczytu.",
+       "api-help-flag-writerights": "Ten moduł wymaga praw zapisu.",
+       "api-help-flag-mustbeposted": "Ten moduł akceptuje tylko żądania POST.",
+       "api-help-flag-generator": "Ten moduł może być użyty jako generator.",
+       "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+       "api-help-param-deprecated": "Przestarzałe.",
+       "api-help-param-required": "Ten parametr jest wymagany.",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna wartość|2=Wartości (oddziel z \"{{!}}\")}}: $2",
+       "api-help-param-limit": "Nie więcej niż $1 dozwolone.",
+       "api-help-param-limit2": "Nie więcej niż $1 ($2 dla botów) dozwolone.",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość|2=Wartości}} musza być mniejsze niż $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być nie większa niż $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
+       "api-help-param-multi-separate": "Oddziel wartości z \"|\".",
+       "api-help-param-multi-max": "Maksymalna ilość wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
+       "api-help-param-default": "Domyślnie: $1",
+       "api-help-param-default-empty": "Domyślnie: <span class=\"apihelp-empty\">(puste)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez opisu)</span>",
+       "api-help-examples": "{{PLURAL:$1|Przykład|Przykłady}}:",
+       "api-help-permissions": "{{PLURAL:$2|Uprawnienie|Uprawnienia}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Przydzielone dla}}: $2",
+       "api-credits-header": "Twórcy",
+       "api-credits": "Deweloperzy API:\n* Roan Kattouw (główny programista wrzesień 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (twórca, główny programista wrzesień 2006–wrzesień 2007)\n* Brad Jorsch (główny programista 2013–obecnie)\n\nProsimy wysyłać komentarze, sugestie i pytania do mediawiki-api@lists.wikimedia.org\nlub zgłoś błąd na https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/pt.json b/includes/api/i18n/pt.json
new file mode 100644 (file)
index 0000000..27eaa94
--- /dev/null
@@ -0,0 +1,88 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Vitorvicentevalente"
+               ]
+       },
+       "apihelp-main-param-format": "O formato de saída.",
+       "apihelp-block-description": "Bloquear um utilizador.",
+       "apihelp-block-param-user": "Nome de utilizador(a), endereço ou gama de IP que pretende bloquear.",
+       "apihelp-block-param-nocreate": "Impedir criação de contas.",
+       "apihelp-createaccount-description": "Criar uma nova conta.",
+       "apihelp-createaccount-param-name": "Nome de utilizador(a).",
+       "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
+       "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
+       "apihelp-delete-description": "Eliminar uma página.",
+       "apihelp-delete-param-watch": "Adicionar esta página à lista de vigiadas.",
+       "apihelp-delete-param-unwatch": "Remover esta página da lista de vigiadas.",
+       "apihelp-delete-example-simple": "Eliminar Página Principal",
+       "apihelp-disabled-description": "O módulo foi desativado.",
+       "apihelp-edit-description": "Criar e editar páginas.",
+       "apihelp-edit-param-sectiontitle": "Título para uma nova seção.",
+       "apihelp-edit-param-text": "Conteúdo da página.",
+       "apihelp-edit-param-minor": "Edição menor.",
+       "apihelp-edit-param-bot": "Marcar esta edição como robô.",
+       "apihelp-edit-example-edit": "Editar uma página",
+       "apihelp-expandtemplates-param-title": "Título da página.",
+       "apihelp-feedcontributions-param-deletedonly": "Mostrar apenas contribuições eliminadas.",
+       "apihelp-feedcontributions-param-showsizediff": "Mostrar diferença de tamanho entre edições.",
+       "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados a apresentar.",
+       "apihelp-feedrecentchanges-param-from": "Mostrar alterações desde então.",
+       "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
+       "apihelp-feedrecentchanges-param-hidebots": "Ocultar alterações feitas por robôs.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar alterações patrulhadas.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas por mim.",
+       "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
+       "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
+       "apihelp-help-example-main": "Ajuda para o módulo principal",
+       "apihelp-help-example-recursive": "Toda a ajuda numa página",
+       "apihelp-login-param-name": "Nome de utilizador(a).",
+       "apihelp-login-param-password": "Palavra-passe.",
+       "apihelp-login-param-domain": "Domínio (opcional).",
+       "apihelp-login-example-login": "Entrar",
+       "apihelp-logout-description": "Terminar e limpar dados de sessão.",
+       "apihelp-move-description": "Mover uma página.",
+       "apihelp-move-param-noredirect": "Não criar um redirecionamento.",
+       "apihelp-move-param-ignorewarnings": "Ignorar quaisquer avisos.",
+       "apihelp-opensearch-param-limit": "Número máximo de resultados a apresentar.",
+       "apihelp-options-param-reset": "Reiniciar preferências para os padrões do sítio.",
+       "apihelp-options-example-reset": "Reiniciar todas as preferências",
+       "apihelp-patrol-description": "Patrulhar uma página ou edição.",
+       "apihelp-patrol-example-rcid": "Patrulhar uma mudança recente",
+       "apihelp-patrol-example-revid": "Patrulhar uma edição",
+       "apihelp-protect-example-protect": "Proteger uma página",
+       "apihelp-query+allcategories-description": "Enumerar todas as categorias.",
+       "apihelp-query+allpages-param-prefix": "Pesquisa para todos os títulos de páginas que comecem com este valor.",
+       "apihelp-query+allpages-example-generator": "Mostrar informação sobre 4 páginas que comecem com a letra \"T\"",
+       "apihelp-query+allusers-example-Y": "Lista de utilizadores que comecem com Y",
+       "apihelp-query+blocks-param-limit": "O número máximo de bloqueios a listar.",
+       "apihelp-query+categorymembers-description": "Lista de todas as páginas numa categoria fornecida.",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+       "apihelp-query+deletedrevs-param-excludeuser": "Não listar edições deste utilizador.",
+       "apihelp-query+deletedrevs-param-namespace": "Listar apenas as páginas neste domínio.",
+       "apihelp-query+filearchive-example-simple": "Mostrar lista de todos os ficheiros eliminados",
+       "apihelp-query+info-description": "Obter informação básica da página.",
+       "apihelp-query+recentchanges-example-simple": "Lista de mudanças recentes",
+       "apihelp-unblock-description": "Desbloquear um utilizador.",
+       "apihelp-unblock-param-reason": "Motivo para o desbloqueio.",
+       "apihelp-undelete-param-title": "Título da página a restaurar.",
+       "apihelp-upload-param-watch": "Vigiar página.",
+       "apihelp-upload-param-ignorewarnings": "Ignorar todos os avisos.",
+       "apihelp-userrights-param-user": "Nome de utilizador(a).",
+       "apihelp-userrights-param-userid": "ID de utilizador.",
+       "apihelp-userrights-param-add": "Adicionar o utilizador a estes grupos.",
+       "apihelp-userrights-param-remove": "Remover este utilizador destes grupos.",
+       "apihelp-watch-example-unwatch": "Deixar de vigiar a \"Página Principal\"",
+       "apihelp-json-description": "Dados de saída em formato JSON.",
+       "api-help-title": "Ajuda API da MediaWiki",
+       "api-help-main-header": "Módulo principal",
+       "api-help-flag-deprecated": "Este módulo está obsoleto.",
+       "api-help-parameters": "{{PLURAL:$1|Parâmetro|Parâmetros}}:",
+       "api-help-param-deprecated": "Obsoleto.",
+       "api-help-param-required": "Este parâmetro é obrigatório.",
+       "api-help-param-multi-separate": "Separe os valores com \"|\".",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
+       "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+       "api-credits-header": "Créditos",
+       "api-credits": "Programadores API:\n* Roan Kattouw (programador principal Set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (criador, programador-líder Set 2006–Set 2007)\n* Brad Jorsch (programador-líder 2013–presente)\n\nPor favor, envie os seus comentários, sugestões e perguntas para mediawiki-api@lists.wikimedia.org ou reporte um erro técnico em https://bugzilla.wikimedia.org/."
+}
index 6fac19c..25ba0b2 100644 (file)
@@ -1,12 +1,15 @@
 {
        "@metadata": {
-               "authors": []
+               "authors": [
+                       "Liuxinyu970226",
+                       "Robby",
+                       "Shirayuki"
+               ]
        },
-
        "apihelp-main-description": "{{doc-apihelp-description|main}}",
        "apihelp-main-param-action": "{{doc-apihelp-param|main|action}}",
        "apihelp-main-param-format": "{{doc-apihelp-param|main|format}}",
-       "apihelp-main-param-maxlag": "{{doc-apihelp-param|main|maxlag}}",
+       "apihelp-main-param-maxlag": "{{doc-apihelp-param|main|maxlag}}\n\n\"$host\" and \"$lag\" are not variables and appear as is.",
        "apihelp-main-param-smaxage": "{{doc-apihelp-param|main|smaxage}}",
        "apihelp-main-param-maxage": "{{doc-apihelp-param|main|maxage}}",
        "apihelp-main-param-assert": "{{doc-apihelp-param|main|assert}}",
@@ -15,7 +18,6 @@
        "apihelp-main-param-curtimestamp": "{{doc-apihelp-param|main|curtimestamp}}",
        "apihelp-main-param-origin": "{{doc-apihelp-param|main|origin}}",
        "apihelp-main-param-uselang": "{{doc-apihelp-param|main|uselang}}",
-
        "apihelp-block-description": "{{doc-apihelp-description|block}}",
        "apihelp-block-param-user": "{{doc-apihelp-param|block|user}}",
        "apihelp-block-param-expiry": "{{doc-apihelp-param|block|expiry}}",
        "apihelp-block-param-watchuser": "{{doc-apihelp-param|block|watchuser}}",
        "apihelp-block-example-ip-simple": "{{doc-apihelp-example|block}}",
        "apihelp-block-example-user-complex": "{{doc-apihelp-example|block}}",
-
        "apihelp-clearhasmsg-description": "{{doc-apihelp-description|clearhasmsg}}",
        "apihelp-clearhasmsg-example-1": "{{doc-apihelp-example|clearhasmsg}}",
-
        "apihelp-compare-description": "{{doc-apihelp-description|compare}}",
        "apihelp-compare-param-fromtitle": "{{doc-apihelp-param|compare|fromtitle}}",
        "apihelp-compare-param-fromid": "{{doc-apihelp-param|compare|fromid}}",
@@ -42,7 +42,6 @@
        "apihelp-compare-param-toid": "{{doc-apihelp-param|compare|toid}}",
        "apihelp-compare-param-torev": "{{doc-apihelp-param|compare|torev}}",
        "apihelp-compare-example-1": "{{doc-apihelp-example|compare}}",
-
        "apihelp-createaccount-description": "{{doc-apihelp-description|createaccount}}",
        "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}",
        "apihelp-createaccount-param-password": "{{doc-apihelp-param|createaccount|password}}",
@@ -55,7 +54,6 @@
        "apihelp-createaccount-param-language": "{{doc-apihelp-param|createaccount|language}}",
        "apihelp-createaccount-example-pass": "{{doc-apihelp-example|createaccount}}",
        "apihelp-createaccount-example-mail": "{{doc-apihelp-example|createaccount}}",
-
        "apihelp-delete-description": "{{doc-apihelp-description|delete}}",
        "apihelp-delete-param-title": "{{doc-apihelp-param|delete|title}}",
        "apihelp-delete-param-pageid": "{{doc-apihelp-param|delete|pageid}}",
@@ -66,9 +64,7 @@
        "apihelp-delete-param-oldimage": "{{doc-apihelp-param|delete|oldimage}}",
        "apihelp-delete-example-simple": "{{doc-apihelp-example|delete}}",
        "apihelp-delete-example-reason": "{{doc-apihelp-example|delete}}",
-
        "apihelp-disabled-description": "{{doc-apihelp-description|disabled}}",
-
        "apihelp-edit-description": "{{doc-apihelp-description|edit}}",
        "apihelp-edit-param-title": "{{doc-apihelp-param|edit|title}}",
        "apihelp-edit-param-pageid": "{{doc-apihelp-param|edit|pageid}}",
@@ -76,7 +72,7 @@
        "apihelp-edit-param-sectiontitle": "{{doc-apihelp-param|edit|sectiontitle}}",
        "apihelp-edit-param-text": "{{doc-apihelp-param|edit|text}}",
        "apihelp-edit-param-summary": "{{doc-apihelp-param|edit|summary}}",
-       "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}",
+       "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}\n{{Identical|Minor edit}}",
        "apihelp-edit-param-notminor": "{{doc-apihelp-param|edit|notminor}}",
        "apihelp-edit-param-bot": "{{doc-apihelp-param|edit|bot}}",
        "apihelp-edit-param-basetimestamp": "{{doc-apihelp-param|edit|basetimestamp}}",
        "apihelp-edit-example-edit": "{{doc-apihelp-example|edit}}",
        "apihelp-edit-example-prepend": "{{doc-apihelp-example|edit}}",
        "apihelp-edit-example-undo": "{{doc-apihelp-example|edit}}",
-
        "apihelp-emailuser-description": "{{doc-apihelp-description|emailuser}}",
        "apihelp-emailuser-param-target": "{{doc-apihelp-param|emailuser|target}}",
        "apihelp-emailuser-param-subject": "{{doc-apihelp-param|emailuser|subject}}",
        "apihelp-emailuser-param-text": "{{doc-apihelp-param|emailuser|text}}",
        "apihelp-emailuser-param-ccme": "{{doc-apihelp-param|emailuser|ccme}}",
        "apihelp-emailuser-example-email": "{{doc-apihelp-example|emailuser}}",
-
        "apihelp-expandtemplates-description": "{{doc-apihelp-description|expandtemplates}}",
        "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
        "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
        "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
        "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
        "apihelp-expandtemplates-example-simple": "{{doc-apihelp-example|expandtemplates}}",
-
        "apihelp-feedcontributions-description": "{{doc-apihelp-description|feedcontributions}}",
        "apihelp-feedcontributions-param-feedformat": "{{doc-apihelp-param|feedcontributions|feedformat}}",
        "apihelp-feedcontributions-param-user": "{{doc-apihelp-param|feedcontributions|user}}",
        "apihelp-feedcontributions-param-newonly": "{{doc-apihelp-param|feedcontributions|newonly}}",
        "apihelp-feedcontributions-param-showsizediff": "{{doc-apihelp-param|feedcontributions|showsizediff}}",
        "apihelp-feedcontributions-example-simple": "{{doc-apihelp-example|feedcontributions}}",
-
        "apihelp-feedrecentchanges-description": "{{doc-apihelp-description|feedrecentchanges}}",
        "apihelp-feedrecentchanges-param-feedformat": "{{doc-apihelp-param|feedrecentchanges|feedformat}}",
        "apihelp-feedrecentchanges-param-namespace": "{{doc-apihelp-param|feedrecentchanges|namespace}}",
        "apihelp-feedrecentchanges-param-showlinkedto": "{{doc-apihelp-param|feedrecentchanges|showlinkedto}}",
        "apihelp-feedrecentchanges-example-simple": "{{doc-apihelp-example|feedrecentchanges}}",
        "apihelp-feedrecentchanges-example-30days": "{{doc-apihelp-example|feedrecentchanges}}",
-
        "apihelp-feedwatchlist-description": "{{doc-apihelp-description|feedwatchlist}}",
        "apihelp-feedwatchlist-param-feedformat": "{{doc-apihelp-param|feedwatchlist|feedformat}}",
        "apihelp-feedwatchlist-param-hours": "{{doc-apihelp-param|feedwatchlist|hours}}",
        "apihelp-feedwatchlist-param-linktosections": "{{doc-apihelp-param|feedwatchlist|linktosections}}",
        "apihelp-feedwatchlist-example-default": "{{doc-apihelp-example|feedwatchlist}}",
        "apihelp-feedwatchlist-example-all6hrs": "{{doc-apihelp-example|feedwatchlist}}",
-
        "apihelp-filerevert-description": "{{doc-apihelp-description|filerevert}}",
        "apihelp-filerevert-param-filename": "{{doc-apihelp-param|filerevert|filename}}",
        "apihelp-filerevert-param-comment": "{{doc-apihelp-param|filerevert|comment}}",
        "apihelp-filerevert-param-archivename": "{{doc-apihelp-param|filerevert|archivename}}",
        "apihelp-filerevert-example-revert": "{{doc-apihelp-example|filerevert}}",
-
        "apihelp-help-description": "{{doc-apihelp-description|help}}",
        "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
        "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
        "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
        "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
        "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
-
        "apihelp-imagerotate-description": "{{doc-apihelp-description|imagerotate}}",
        "apihelp-imagerotate-param-rotation": "{{doc-apihelp-param|imagerotate|rotation}}",
        "apihelp-imagerotate-example-simple": "{{doc-apihelp-example|imagerotate}}",
        "apihelp-imagerotate-example-generator": "{{doc-apihelp-example|imagerotate}}",
-
        "apihelp-import-description": "{{doc-apihelp-description|import}}",
        "apihelp-import-param-summary": "{{doc-apihelp-param|import|summary}}",
        "apihelp-import-param-xml": "{{doc-apihelp-param|import|xml}}",
        "apihelp-import-param-namespace": "{{doc-apihelp-param|import|namespace}}",
        "apihelp-import-param-rootpage": "{{doc-apihelp-param|import|rootpage}}",
        "apihelp-import-example-import": "{{doc-apihelp-example|import}}",
-
        "apihelp-login-description": "{{doc-apihelp-description|login}}",
-       "apihelp-login-param-name": "{{doc-apihelp-param|login|name}}",
-       "apihelp-login-param-password": "{{doc-apihelp-param|login|password}}",
+       "apihelp-login-param-name": "{{doc-apihelp-param|login|name}}\n{{Identical|Username}}",
+       "apihelp-login-param-password": "{{doc-apihelp-param|login|password}}\n{{Identical|Password}}",
        "apihelp-login-param-domain": "{{doc-apihelp-param|login|domain}}",
        "apihelp-login-param-token": "{{doc-apihelp-param|login|token}}",
        "apihelp-login-example-gettoken": "{{doc-apihelp-example|login}}",
        "apihelp-login-example-login": "{{doc-apihelp-example|login}}",
-
        "apihelp-logout-description": "{{doc-apihelp-description|logout}}",
        "apihelp-logout-example-logout": "{{doc-apihelp-example|logout}}",
-
        "apihelp-move-description": "{{doc-apihelp-description|move}}",
        "apihelp-move-param-from": "{{doc-apihelp-param|move|from}}",
        "apihelp-move-param-fromid": "{{doc-apihelp-param|move|fromid}}",
        "apihelp-move-param-watchlist": "{{doc-apihelp-param|move|watchlist}}",
        "apihelp-move-param-ignorewarnings": "{{doc-apihelp-param|move|ignorewarnings}}",
        "apihelp-move-example-move": "{{doc-apihelp-example|move}}",
-
        "apihelp-opensearch-description": "{{doc-apihelp-description|opensearch}}",
        "apihelp-opensearch-param-search": "{{doc-apihelp-param|opensearch|search}}",
        "apihelp-opensearch-param-limit": "{{doc-apihelp-param|opensearch|limit}}",
        "apihelp-opensearch-param-suggest": "{{doc-apihelp-param|opensearch|suggest}}",
        "apihelp-opensearch-param-format": "{{doc-apihelp-param|opensearch|format}}",
        "apihelp-opensearch-example-te": "{{doc-apihelp-example|opensearch}}",
-
        "apihelp-options-description": "{{doc-apihelp-description|options}}",
        "apihelp-options-param-reset": "{{doc-apihelp-param|options|reset}}",
        "apihelp-options-param-resetkinds": "{{doc-apihelp-param|options|resetkinds}}",
        "apihelp-options-example-reset": "{{doc-apihelp-example|options}}",
        "apihelp-options-example-change": "{{doc-apihelp-example|options}}",
        "apihelp-options-example-complex": "{{doc-apihelp-example|options}}",
-
        "apihelp-paraminfo-description": "{{doc-apihelp-description|paraminfo}}",
        "apihelp-paraminfo-param-modules": "{{doc-apihelp-param|paraminfo|modules}}",
        "apihelp-paraminfo-param-helpformat": "{{doc-apihelp-param|paraminfo|helpformat}}",
        "apihelp-paraminfo-param-pagesetmodule": "{{doc-apihelp-param|paraminfo|pagesetmodule}}",
        "apihelp-paraminfo-param-formatmodules": "{{doc-apihelp-param|paraminfo|formatmodules}}",
        "apihelp-paraminfo-example-1": "{{doc-apihelp-example|paraminfo}}",
-
        "apihelp-parse-description": "{{doc-apihelp-description|parse}}",
        "apihelp-parse-param-title": "{{doc-apihelp-param|parse|title}}",
        "apihelp-parse-param-text": "{{doc-apihelp-param|parse|text}}",
        "apihelp-parse-example-text": "{{doc-apihelp-example|parse}}",
        "apihelp-parse-example-texttitle": "{{doc-apihelp-example|parse}}",
        "apihelp-parse-example-summary": "{{doc-apihelp-example|parse}}",
-
        "apihelp-patrol-description": "{{doc-apihelp-description|patrol}}",
        "apihelp-patrol-param-rcid": "{{doc-apihelp-param|patrol|rcid}}",
        "apihelp-patrol-param-revid": "{{doc-apihelp-param|patrol|revid}}",
        "apihelp-patrol-example-rcid": "{{doc-apihelp-example|patrol}}",
        "apihelp-patrol-example-revid": "{{doc-apihelp-example|patrol}}",
-
        "apihelp-protect-description": "{{doc-apihelp-description|protect}}",
        "apihelp-protect-param-title": "{{doc-apihelp-param|protect|title}}",
        "apihelp-protect-param-pageid": "{{doc-apihelp-param|protect|pageid}}",
        "apihelp-protect-example-protect": "{{doc-apihelp-example|protect}}",
        "apihelp-protect-example-unprotect": "{{doc-apihelp-example|protect}}",
        "apihelp-protect-example-unprotect2": "{{doc-apihelp-example|protect}}",
-
        "apihelp-purge-description": "{{doc-apihelp-description|purge}}",
        "apihelp-purge-param-forcelinkupdate": "{{doc-apihelp-param|purge|forcelinkupdate}}",
        "apihelp-purge-param-forcerecursivelinkupdate": "{{doc-apihelp-param|purge|forcerecursivelinkupdate}}",
        "apihelp-purge-example-simple": "{{doc-apihelp-example|purge}}",
        "apihelp-purge-example-generator": "{{doc-apihelp-example|purge}}",
-
        "apihelp-query-description": "{{doc-apihelp-description|query}}",
        "apihelp-query-param-prop": "{{doc-apihelp-param|query|prop}}",
        "apihelp-query-param-list": "{{doc-apihelp-param|query|list}}",
        "apihelp-query-param-rawcontinue": "{{doc-apihelp-param|query|rawcontinue}}",
        "apihelp-query-example-revisions": "{{doc-apihelp-example|query}}",
        "apihelp-query-example-allpages": "{{doc-apihelp-example|query}}",
-
        "apihelp-query+allcategories-description": "{{doc-apihelp-description|query+allcategories}}",
        "apihelp-query+allcategories-param-from": "{{doc-apihelp-param|query+allcategories|from}}",
        "apihelp-query+allcategories-param-to": "{{doc-apihelp-param|query+allcategories|to}}",
        "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop}}",
        "apihelp-query+allcategories-example-size": "{{doc-apihelp-example|query+allcategories}}",
        "apihelp-query+allcategories-example-generator": "{{doc-apihelp-example|query+allcategories}}",
-
        "apihelp-query+allfileusages-description": "{{doc-apihelp-description|query+allfileusages}}",
        "apihelp-query+allfileusages-param-from": "{{doc-apihelp-param|query+allfileusages|from}}",
        "apihelp-query+allfileusages-param-to": "{{doc-apihelp-param|query+allfileusages|to}}",
        "apihelp-query+allfileusages-example-unique": "{{doc-apihelp-example|query+allfileusages}}",
        "apihelp-query+allfileusages-example-unique-generator": "{{doc-apihelp-example|query+allfileusages}}",
        "apihelp-query+allfileusages-example-generator": "{{doc-apihelp-example|query+allfileusages}}",
-
        "apihelp-query+allimages-description": "{{doc-apihelp-description|query+allimages}}",
        "apihelp-query+allimages-param-sort": "{{doc-apihelp-param|query+allimages|sort}}",
        "apihelp-query+allimages-param-dir": "{{doc-apihelp-param|query+allimages|dir}}",
        "apihelp-query+allimages-example-B": "{{doc-apihelp-example|query+allimages}}",
        "apihelp-query+allimages-example-recent": "{{doc-apihelp-example|query+allimages}}",
        "apihelp-query+allimages-example-generator": "{{doc-apihelp-example|query+allimages}}",
-
        "apihelp-query+alllinks-description": "{{doc-apihelp-description|query+alllinks}}",
        "apihelp-query+alllinks-param-from": "{{doc-apihelp-param|query+alllinks|from}}",
        "apihelp-query+alllinks-param-to": "{{doc-apihelp-param|query+alllinks|to}}",
        "apihelp-query+alllinks-example-unique": "{{doc-apihelp-example|query+alllinks}}",
        "apihelp-query+alllinks-example-unique-generator": "{{doc-apihelp-example|query+alllinks}}",
        "apihelp-query+alllinks-example-generator": "{{doc-apihelp-example|query+alllinks}}",
-
        "apihelp-query+allmessages-description": "{{doc-apihelp-description|query+allmessages}}",
        "apihelp-query+allmessages-param-messages": "{{doc-apihelp-param|query+allmessages|messages}}",
        "apihelp-query+allmessages-param-prop": "{{doc-apihelp-param|query+allmessages|prop}}",
        "apihelp-query+allmessages-param-prefix": "{{doc-apihelp-param|query+allmessages|prefix}}",
        "apihelp-query+allmessages-example-ipb": "{{doc-apihelp-example|query+allmessages}}",
        "apihelp-query+allmessages-example-de": "{{doc-apihelp-example|query+allmessages}}",
-
        "apihelp-query+allpages-description": "{{doc-apihelp-description|query+allpages}}",
        "apihelp-query+allpages-param-from": "{{doc-apihelp-param|query+allpages|from}}",
        "apihelp-query+allpages-param-to": "{{doc-apihelp-param|query+allpages|to}}",
        "apihelp-query+allpages-example-B": "{{doc-apihelp-example|query+allpages}}",
        "apihelp-query+allpages-example-generator": "{{doc-apihelp-example|query+allpages}}",
        "apihelp-query+allpages-example-generator-revisions": "{{doc-apihelp-example|query+allpages}}",
-
        "apihelp-query+allredirects-description": "{{doc-apihelp-description|query+allredirects}}",
        "apihelp-query+allredirects-param-from": "{{doc-apihelp-param|query+allredirects|from}}",
        "apihelp-query+allredirects-param-to": "{{doc-apihelp-param|query+allredirects|to}}",
        "apihelp-query+allredirects-example-unique": "{{doc-apihelp-example|query+allredirects}}",
        "apihelp-query+allredirects-example-unique-generator": "{{doc-apihelp-example|query+allredirects}}",
        "apihelp-query+allredirects-example-generator": "{{doc-apihelp-example|query+allredirects}}",
-
        "apihelp-query+alltransclusions-description": "{{doc-apihelp-description|query+alltransclusions}}",
        "apihelp-query+alltransclusions-param-from": "{{doc-apihelp-param|query+alltransclusions|from}}",
        "apihelp-query+alltransclusions-param-to": "{{doc-apihelp-param|query+alltransclusions|to}}",
        "apihelp-query+alltransclusions-example-unique": "{{doc-apihelp-example|query+alltransclusions}}",
        "apihelp-query+alltransclusions-example-unique-generator": "{{doc-apihelp-example|query+alltransclusions}}",
        "apihelp-query+alltransclusions-example-generator": "{{doc-apihelp-example|query+alltransclusions}}",
-
        "apihelp-query+allusers-description": "{{doc-apihelp-description|query+allusers}}",
        "apihelp-query+allusers-param-from": "{{doc-apihelp-param|query+allusers|from}}",
        "apihelp-query+allusers-param-to": "{{doc-apihelp-param|query+allusers|to}}",
        "apihelp-query+allusers-param-witheditsonly": "{{doc-apihelp-param|query+allusers|witheditsonly}}",
        "apihelp-query+allusers-param-activeusers": "{{doc-apihelp-param|query+allusers|activeusers|params=* $1 - Value of [[mw:Manual:$wgActiveUserDays]]|paramstart=2}}",
        "apihelp-query+allusers-example-Y": "{{doc-apihelp-example|query+allusers}}",
-
        "apihelp-query+backlinks-description": "{{doc-apihelp-description|query+backlinks}}",
        "apihelp-query+backlinks-param-title": "{{doc-apihelp-param|query+backlinks|title}}",
        "apihelp-query+backlinks-param-pageid": "{{doc-apihelp-param|query+backlinks|pageid}}",
        "apihelp-query+backlinks-param-redirect": "{{doc-apihelp-param|query+backlinks|redirect}}",
        "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
        "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
-
        "apihelp-query+blocks-description": "{{doc-apihelp-description|query+blocks}}",
        "apihelp-query+blocks-param-start": "{{doc-apihelp-param|query+blocks|start}}",
        "apihelp-query+blocks-param-end": "{{doc-apihelp-param|query+blocks|end}}",
        "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
        "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
        "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
-
        "apihelp-query+categories-description": "{{doc-apihelp-description|query+categories}}",
        "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop}}",
        "apihelp-query+categories-param-show": "{{doc-apihelp-param|query+categories|show}}",
        "apihelp-query+categories-param-dir": "{{doc-apihelp-param|query+categories|dir}}",
        "apihelp-query+categories-example-simple": "{{doc-apihelp-example|query+categories}}",
        "apihelp-query+categories-example-generator": "{{doc-apihelp-example|query+categories}}",
-
        "apihelp-query+categoryinfo-description": "{{doc-apihelp-description|query+categoryinfo}}",
        "apihelp-query+categoryinfo-example-simple": "{{doc-apihelp-example|query+categoryinfo}}",
-
        "apihelp-query+categorymembers-description": "{{doc-apihelp-description|query+categorymembers}}",
        "apihelp-query+categorymembers-param-title": "{{doc-apihelp-param|query+categorymembers|title}}",
        "apihelp-query+categorymembers-param-pageid": "{{doc-apihelp-param|query+categorymembers|pageid}}",
        "apihelp-query+categorymembers-param-endsortkey": "{{doc-apihelp-param|query+categorymembers|endsortkey}}",
        "apihelp-query+categorymembers-example-simple": "{{doc-apihelp-example|query+categorymembers}}",
        "apihelp-query+categorymembers-example-generator": "{{doc-apihelp-example|query+categorymembers}}",
-
        "apihelp-query+contributors-description": "{{doc-apihelp-description|query+contributors}}",
        "apihelp-query+contributors-param-group": "{{doc-apihelp-param|query+contributors|group}}",
        "apihelp-query+contributors-param-excludegroup": "{{doc-apihelp-param|query+contributors|excludegroup}}",
        "apihelp-query+contributors-param-excluderights": "{{doc-apihelp-param|query+contributors|excluderights}}",
        "apihelp-query+contributors-param-limit": "{{doc-apihelp-param|query+contributors|limit}}",
        "apihelp-query+contributors-example-simple": "{{doc-apihelp-example|query+contributors}}",
-
        "apihelp-query+deletedrevs-description": "{{doc-apihelp-description|query+deletedrevs}}",
-       "apihelp-query+deletedrevs-paraminfo-modes": "{{doc-apihelp-paraminfo|query+deletedrevs|modes}}",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{doc-apihelp-paraminfo|query+deletedrevs|modes}}\n{{Identical|Mode}}",
        "apihelp-query+deletedrevs-param-start": "{{doc-apihelp-param|query+deletedrevs|start}}",
        "apihelp-query+deletedrevs-param-end": "{{doc-apihelp-param|query+deletedrevs|end}}",
        "apihelp-query+deletedrevs-param-from": "{{doc-apihelp-param|query+deletedrevs|from}}",
        "apihelp-query+deletedrevs-example-mode2": "{{doc-apihelp-example|query+deletedrevs}}",
        "apihelp-query+deletedrevs-example-mode3-main": "{{doc-apihelp-example|query+deletedrevs}}",
        "apihelp-query+deletedrevs-example-mode3-talk": "{{doc-apihelp-example|query+deletedrevs}}",
-
        "apihelp-query+disabled-description": "{{doc-apihelp-description|query+disabled}}",
-
        "apihelp-query+duplicatefiles-description": "{{doc-apihelp-description|query+duplicatefiles}}",
        "apihelp-query+duplicatefiles-param-limit": "{{doc-apihelp-param|query+duplicatefiles|limit}}",
        "apihelp-query+duplicatefiles-param-dir": "{{doc-apihelp-param|query+duplicatefiles|dir}}",
        "apihelp-query+duplicatefiles-param-localonly": "{{doc-apihelp-param|query+duplicatefiles|localonly}}",
        "apihelp-query+duplicatefiles-example-simple": "{{doc-apihelp-example|query+duplicatefiles}}",
        "apihelp-query+duplicatefiles-example-generated": "{{doc-apihelp-example|query+duplicatefiles}}",
-
        "apihelp-query+embeddedin-description": "{{doc-apihelp-description|query+embeddedin}}",
        "apihelp-query+embeddedin-param-title": "{{doc-apihelp-param|query+embeddedin|title}}",
        "apihelp-query+embeddedin-param-pageid": "{{doc-apihelp-param|query+embeddedin|pageid}}",
        "apihelp-query+embeddedin-param-limit": "{{doc-apihelp-param|query+embeddedin|limit}}",
        "apihelp-query+embeddedin-example-simple": "{{doc-apihelp-example|query+embeddedin}}",
        "apihelp-query+embeddedin-example-generator": "{{doc-apihelp-example|query+embeddedin}}",
-
        "apihelp-query+extlinks-description": "{{doc-apihelp-description|query+extlinks}}",
        "apihelp-query+extlinks-param-limit": "{{doc-apihelp-param|query+extlinks|limit}}",
        "apihelp-query+extlinks-param-protocol": "{{doc-apihelp-param|query+extlinks|protocol}}",
        "apihelp-query+extlinks-param-query": "{{doc-apihelp-param|query+extlinks|query}}",
        "apihelp-query+extlinks-param-expandurl": "{{doc-apihelp-param|query+extlinks|expandurl}}",
        "apihelp-query+extlinks-example-simple": "{{doc-apihelp-example|query+extlinks}}",
-
        "apihelp-query+exturlusage-description": "{{doc-apihelp-description|query+exturlusage}}",
        "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop}}",
        "apihelp-query+exturlusage-param-protocol": "{{doc-apihelp-param|query+exturlusage|protocol}}",
        "apihelp-query+exturlusage-param-limit": "{{doc-apihelp-param|query+exturlusage|limit}}",
        "apihelp-query+exturlusage-param-expandurl": "{{doc-apihelp-param|query+exturlusage|expandurl}}",
        "apihelp-query+exturlusage-example-simple": "{{doc-apihelp-example|query+exturlusage}}",
-
        "apihelp-query+filearchive-description": "{{doc-apihelp-description|query+filearchive}}",
        "apihelp-query+filearchive-param-from": "{{doc-apihelp-param|query+filearchive|from}}",
        "apihelp-query+filearchive-param-to": "{{doc-apihelp-param|query+filearchive|to}}",
        "apihelp-query+filearchive-param-sha1base36": "{{doc-apihelp-param|query+filearchive|sha1base36}}",
        "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop}}",
        "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
-
        "apihelp-query+filerepoinfo-description": "{{doc-apihelp-description|query+filerepoinfo}}",
        "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
        "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
-
        "apihelp-query+fileusage-description": "{{doc-apihelp-description|query+fileusage}}",
        "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop}}",
        "apihelp-query+fileusage-param-namespace": "{{doc-apihelp-param|query+fileusage|namespace}}",
        "apihelp-query+fileusage-param-show": "{{doc-apihelp-param|query+fileusage|show}}",
        "apihelp-query+fileusage-example-simple": "{{doc-apihelp-example|query+fileusage}}",
        "apihelp-query+fileusage-example-generator": "{{doc-apihelp-example|query+fileusage}}",
-
        "apihelp-query+imageinfo-description": "{{doc-apihelp-description|query+imageinfo}}",
        "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop}}",
        "apihelp-query+imageinfo-param-limit": "{{doc-apihelp-param|query+imageinfo|limit}}",
        "apihelp-query+imageinfo-param-localonly": "{{doc-apihelp-param|query+imageinfo|localonly}}",
        "apihelp-query+imageinfo-example-simple": "{{doc-apihelp-example|query+imageinfo}}",
        "apihelp-query+imageinfo-example-dated": "{{doc-apihelp-example|query+imageinfo}}",
-
        "apihelp-query+images-description": "{{doc-apihelp-description|query+images}}",
        "apihelp-query+images-param-limit": "{{doc-apihelp-param|query+images|limit}}",
        "apihelp-query+images-param-images": "{{doc-apihelp-param|query+images|images}}",
        "apihelp-query+images-param-dir": "{{doc-apihelp-param|query+images|dir}}",
        "apihelp-query+images-example-simple": "{{doc-apihelp-example|query+images}}",
        "apihelp-query+images-example-generator": "{{doc-apihelp-example|query+images}}",
-
        "apihelp-query+imageusage-description": "{{doc-apihelp-description|query+imageusage}}",
        "apihelp-query+imageusage-param-title": "{{doc-apihelp-param|query+imageusage|title}}",
        "apihelp-query+imageusage-param-pageid": "{{doc-apihelp-param|query+imageusage|pageid}}",
        "apihelp-query+imageusage-param-redirect": "{{doc-apihelp-param|query+imageusage|redirect}}",
        "apihelp-query+imageusage-example-simple": "{{doc-apihelp-example|query+imageusage}}",
        "apihelp-query+imageusage-example-generator": "{{doc-apihelp-example|query+imageusage}}",
-
        "apihelp-query+info-description": "{{doc-apihelp-description|query+info}}",
        "apihelp-query+info-param-prop": "{{doc-apihelp-param|query+info|prop}}",
        "apihelp-query+info-param-token": "{{doc-apihelp-param|query+info|token}}",
        "apihelp-query+info-example-simple": "{{doc-apihelp-example|query+info}}",
        "apihelp-query+info-example-protection": "{{doc-apihelp-example|query+info}}",
-
        "apihelp-query+iwbacklinks-description": "{{doc-apihelp-description|query+iwbacklinks}}",
        "apihelp-query+iwbacklinks-param-prefix": "{{doc-apihelp-param|query+iwbacklinks|prefix}}",
        "apihelp-query+iwbacklinks-param-title": "{{doc-apihelp-param|query+iwbacklinks|title}}",
        "apihelp-query+iwbacklinks-param-dir": "{{doc-apihelp-param|query+iwbacklinks|dir}}",
        "apihelp-query+iwbacklinks-example-simple": "{{doc-apihelp-example|query+iwbacklinks}}",
        "apihelp-query+iwbacklinks-example-generator": "{{doc-apihelp-example|query+iwbacklinks}}",
-
        "apihelp-query+iwlinks-description": "{{doc-apihelp-description|query+iwlinks}}",
        "apihelp-query+iwlinks-param-url": "{{doc-apihelp-param|query+iwlinks|url}}",
        "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop}}",
        "apihelp-query+iwlinks-param-title": "{{doc-apihelp-param|query+iwlinks|title}}",
        "apihelp-query+iwlinks-param-dir": "{{doc-apihelp-param|query+iwlinks|dir}}",
        "apihelp-query+iwlinks-example-simple": "{{doc-apihelp-example|query+iwlinks}}",
-
        "apihelp-query+langbacklinks-description": "{{doc-apihelp-description|query+langbacklinks}}",
        "apihelp-query+langbacklinks-param-lang": "{{doc-apihelp-param|query+langbacklinks|lang}}",
        "apihelp-query+langbacklinks-param-title": "{{doc-apihelp-param|query+langbacklinks|title}}",
        "apihelp-query+langbacklinks-param-dir": "{{doc-apihelp-param|query+langbacklinks|dir}}",
        "apihelp-query+langbacklinks-example-simple": "{{doc-apihelp-example|query+langbacklinks}}",
        "apihelp-query+langbacklinks-example-generator": "{{doc-apihelp-example|query+langbacklinks}}",
-
        "apihelp-query+langlinks-description": "{{doc-apihelp-description|query+langlinks}}",
        "apihelp-query+langlinks-param-limit": "{{doc-apihelp-param|query+langlinks|limit}}",
        "apihelp-query+langlinks-param-url": "{{doc-apihelp-param|query+langlinks|url}}",
        "apihelp-query+langlinks-param-dir": "{{doc-apihelp-param|query+langlinks|dir}}",
        "apihelp-query+langlinks-param-inlanguagecode": "{{doc-apihelp-param|query+langlinks|inlanguagecode}}",
        "apihelp-query+langlinks-example-simple": "{{doc-apihelp-example|query+langlinks}}",
-
        "apihelp-query+links-description": "{{doc-apihelp-description|query+links}}",
        "apihelp-query+links-param-namespace": "{{doc-apihelp-param|query+links|namespace}}",
        "apihelp-query+links-param-limit": "{{doc-apihelp-param|query+links|limit}}",
        "apihelp-query+links-example-simple": "{{doc-apihelp-example|query+links}}",
        "apihelp-query+links-example-generator": "{{doc-apihelp-example|query+links}}",
        "apihelp-query+links-example-namespaces": "{{doc-apihelp-example|query+links}}",
-
        "apihelp-query+linkshere-description": "{{doc-apihelp-description|query+linkshere}}",
        "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop}}",
        "apihelp-query+linkshere-param-namespace": "{{doc-apihelp-param|query+linkshere|namespace}}",
        "apihelp-query+linkshere-param-show": "{{doc-apihelp-param|query+linkshere|show}}",
        "apihelp-query+linkshere-example-simple": "{{doc-apihelp-example|query+linkshere}}",
        "apihelp-query+linkshere-example-generator": "{{doc-apihelp-example|query+linkshere}}",
-
        "apihelp-query+logevents-description": "{{doc-apihelp-description|query+logevents}}",
        "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop}}",
        "apihelp-query+logevents-param-type": "{{doc-apihelp-param|query+logevents|type}}",
        "apihelp-query+logevents-param-tag": "{{doc-apihelp-param|query+logevents|tag}}",
        "apihelp-query+logevents-param-limit": "{{doc-apihelp-param|query+logevents|limit}}",
        "apihelp-query+logevents-example-simple": "{{doc-apihelp-example|query+logevents}}",
-
        "apihelp-query+pagepropnames-description": "{{doc-apihelp-description|query+pagepropnames}}",
        "apihelp-query+pagepropnames-param-limit": "{{doc-apihelp-param|query+pagepropnames|limit}}",
        "apihelp-query+pagepropnames-example-simple": "{{doc-apihelp-example|query+pagepropnames}}",
-
        "apihelp-query+pageprops-description": "{{doc-apihelp-description|query+pageprops}}",
        "apihelp-query+pageprops-param-prop": "{{doc-apihelp-param|query+pageprops|prop}}",
        "apihelp-query+pageprops-example-simple": "{{doc-apihelp-example|query+pageprops}}",
-
        "apihelp-query+pageswithprop-description": "{{doc-apihelp-description|query+pageswithprop}}",
        "apihelp-query+pageswithprop-param-propname": "{{doc-apihelp-param|query+pageswithprop|propname}}",
        "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop}}",
        "apihelp-query+pageswithprop-param-dir": "{{doc-apihelp-param|query+pageswithprop|dir}}",
        "apihelp-query+pageswithprop-example-simple": "{{doc-apihelp-example|query+pageswithprop}}",
        "apihelp-query+pageswithprop-example-generator": "{{doc-apihelp-example|query+pageswithprop}}",
-
        "apihelp-query+prefixsearch-description": "{{doc-apihelp-description|query+prefixsearch}}",
        "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
        "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
        "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
        "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
-
        "apihelp-query+protectedtitles-description": "{{doc-apihelp-description|query+protectedtitles}}",
        "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
        "apihelp-query+protectedtitles-param-level": "{{doc-apihelp-param|query+protectedtitles|level}}",
        "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop}}",
        "apihelp-query+protectedtitles-example-simple": "{{doc-apihelp-example|query+protectedtitles}}",
        "apihelp-query+protectedtitles-example-generator": "{{doc-apihelp-example|query+protectedtitles}}",
-
        "apihelp-query+querypage-description": "{{doc-apihelp-description|query+querypage}}",
        "apihelp-query+querypage-param-page": "{{doc-apihelp-param|query+querypage|page}}",
        "apihelp-query+querypage-param-limit": "{{doc-apihelp-param|query+querypage|limit}}",
        "apihelp-query+querypage-example-ancientpages": "{{doc-apihelp-example|query+querypage}}",
-
        "apihelp-query+random-description": "{{doc-apihelp-description|query+random}}",
        "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
        "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
        "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
        "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
        "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
-
        "apihelp-query+recentchanges-description": "{{doc-apihelp-description|query+recentchanges}}",
        "apihelp-query+recentchanges-param-start": "{{doc-apihelp-param|query+recentchanges|start}}",
        "apihelp-query+recentchanges-param-end": "{{doc-apihelp-param|query+recentchanges|end}}",
        "apihelp-query+recentchanges-param-toponly": "{{doc-apihelp-param|query+recentchanges|toponly}}",
        "apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
        "apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
-
        "apihelp-query+redirects-description": "{{doc-apihelp-description|query+redirects}}",
        "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop}}",
        "apihelp-query+redirects-param-namespace": "{{doc-apihelp-param|query+redirects|namespace}}",
        "apihelp-query+redirects-param-show": "{{doc-apihelp-param|query+redirects|show}}",
        "apihelp-query+redirects-example-simple": "{{doc-apihelp-example|query+redirects}}",
        "apihelp-query+redirects-example-generator": "{{doc-apihelp-example|query+redirects}}",
-
        "apihelp-query+revisions-description": "{{doc-apihelp-description|query+revisions}}",
        "apihelp-query+revisions-paraminfo-singlepageonly": "{{doc-apihelp-paraminfo|query+revisions|singlepageonly}}",
        "apihelp-query+revisions-param-prop": "{{doc-apihelp-param|query+revisions|prop}}",
        "apihelp-query+revisions-example-first5-after": "{{doc-apihelp-example|query+revisions}}",
        "apihelp-query+revisions-example-first5-not-localhost": "{{doc-apihelp-example|query+revisions}}",
        "apihelp-query+revisions-example-first5-user": "{{doc-apihelp-example|query+revisions}}",
-
        "apihelp-query+search-description": "{{doc-apihelp-description|query+search}}",
        "apihelp-query+search-param-search": "{{doc-apihelp-param|query+search|search}}",
        "apihelp-query+search-param-namespace": "{{doc-apihelp-param|query+search|namespace}}",
        "apihelp-query+search-example-simple": "{{doc-apihelp-example|query+search}}",
        "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
        "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
-
        "apihelp-query+siteinfo-description": "{{doc-apihelp-description|query+siteinfo}}",
        "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop}}",
        "apihelp-query+siteinfo-param-filteriw": "{{doc-apihelp-param|query+siteinfo|filteriw}}",
        "apihelp-query+siteinfo-example-simple": "{{doc-apihelp-example|query+siteinfo}}",
        "apihelp-query+siteinfo-example-interwiki": "{{doc-apihelp-example|query+siteinfo}}",
        "apihelp-query+siteinfo-example-replag": "{{doc-apihelp-example|query+siteinfo}}",
-
        "apihelp-query+stashimageinfo-description": "{{doc-apihelp-description|query+stashimageinfo}}",
        "apihelp-query+stashimageinfo-param-filekey": "{{doc-apihelp-param|query+stashimageinfo|filekey}}",
        "apihelp-query+stashimageinfo-param-sessionkey": "{{doc-apihelp-param|query+stashimageinfo|sessionkey}}",
        "apihelp-query+stashimageinfo-param-prop": "{{doc-apihelp-param|query+stashimageinfo|prop}}",
        "apihelp-query+stashimageinfo-example-simple": "{{doc-apihelp-example|query+stashimageinfo}}",
        "apihelp-query+stashimageinfo-example-params": "{{doc-apihelp-example|query+stashimageinfo}}",
-
        "apihelp-query+tags-description": "{{doc-apihelp-description|query+tags}}",
        "apihelp-query+tags-param-limit": "{{doc-apihelp-param|query+tags|limit}}",
        "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop}}",
        "apihelp-query+tags-example-simple": "{{doc-apihelp-example|query+tags}}",
-
        "apihelp-query+templates-description": "{{doc-apihelp-description|query+templates}}",
        "apihelp-query+templates-param-namespace": "{{doc-apihelp-param|query+templates|namespace}}",
        "apihelp-query+templates-param-limit": "{{doc-apihelp-param|query+templates|limit}}",
        "apihelp-query+templates-example-simple": "{{doc-apihelp-example|query+templates}}",
        "apihelp-query+templates-example-generator": "{{doc-apihelp-example|query+templates}}",
        "apihelp-query+templates-example-namespaces": "{{doc-apihelp-example|query+templates}}",
-
        "apihelp-query+tokens-description": "{{doc-apihelp-description|query+tokens}}",
        "apihelp-query+tokens-param-type": "{{doc-apihelp-param|query+tokens|type}}",
        "apihelp-query+tokens-example-simple": "{{doc-apihelp-example|query+tokens}}",
        "apihelp-query+tokens-example-types": "{{doc-apihelp-example|query+tokens}}",
-
        "apihelp-query+transcludedin-description": "{{doc-apihelp-description|query+transcludedin}}",
        "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop}}",
        "apihelp-query+transcludedin-param-namespace": "{{doc-apihelp-param|query+transcludedin|namespace}}",
        "apihelp-query+transcludedin-param-show": "{{doc-apihelp-param|query+transcludedin|show}}",
        "apihelp-query+transcludedin-example-simple": "{{doc-apihelp-example|query+transcludedin}}",
        "apihelp-query+transcludedin-example-generator": "{{doc-apihelp-example|query+transcludedin}}",
-
        "apihelp-query+usercontribs-description": "{{doc-apihelp-description|query+usercontribs}}",
        "apihelp-query+usercontribs-param-limit": "{{doc-apihelp-param|query+usercontribs|limit}}",
        "apihelp-query+usercontribs-param-start": "{{doc-apihelp-param|query+usercontribs|start}}",
        "apihelp-query+usercontribs-param-toponly": "{{doc-apihelp-param|query+usercontribs|toponly}}",
        "apihelp-query+usercontribs-example-user": "{{doc-apihelp-example|query+usercontribs}}",
        "apihelp-query+usercontribs-example-ipprefix": "{{doc-apihelp-example|query+usercontribs}}",
-
        "apihelp-query+userinfo-description": "{{doc-apihelp-description|query+userinfo}}",
        "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|params=* $1 - Maximum value for the \"unreadcount\" property.\n$2 - Return value when there are more unread pages.|paramstart=3}}",
        "apihelp-query+userinfo-example-simple": "{{doc-apihelp-example|query+userinfo}}",
        "apihelp-query+userinfo-example-data": "{{doc-apihelp-example|query+userinfo}}",
-
        "apihelp-query+users-description": "{{doc-apihelp-description|query+users}}",
        "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop}}",
        "apihelp-query+users-param-users": "{{doc-apihelp-param|query+users|users}}",
        "apihelp-query+users-param-token": "{{doc-apihelp-param|query+users|token}}",
        "apihelp-query+users-example-simple": "{{doc-apihelp-example|query+users}}",
-
        "apihelp-query+watchlist-description": "{{doc-apihelp-description|query+watchlist}}",
        "apihelp-query+watchlist-param-allrev": "{{doc-apihelp-param|query+watchlist|allrev}}",
        "apihelp-query+watchlist-param-start": "{{doc-apihelp-param|query+watchlist|start}}",
        "apihelp-query+watchlist-example-generator": "{{doc-apihelp-example|query+watchlist}}",
        "apihelp-query+watchlist-example-generator-rev": "{{doc-apihelp-example|query+watchlist}}",
        "apihelp-query+watchlist-example-wlowner": "{{doc-apihelp-example|query+watchlist}}",
-
        "apihelp-query+watchlistraw-description": "{{doc-apihelp-description|query+watchlistraw}}",
        "apihelp-query+watchlistraw-param-namespace": "{{doc-apihelp-param|query+watchlistraw|namespace}}",
        "apihelp-query+watchlistraw-param-limit": "{{doc-apihelp-param|query+watchlistraw|limit}}",
        "apihelp-query+watchlistraw-param-token": "{{doc-apihelp-param|query+watchlistraw|token}}",
        "apihelp-query+watchlistraw-example-simple": "{{doc-apihelp-example|query+watchlistraw}}",
        "apihelp-query+watchlistraw-example-generator": "{{doc-apihelp-example|query+watchlistraw}}",
-
        "apihelp-revisiondelete-description": "{{doc-apihelp-description|revisiondelete}}",
        "apihelp-revisiondelete-param-type": "{{doc-apihelp-param|revisiondelete|type}}",
        "apihelp-revisiondelete-param-target": "{{doc-apihelp-param|revisiondelete|target}}",
        "apihelp-revisiondelete-param-reason": "{{doc-apihelp-param|revisiondelete|reason}}",
        "apihelp-revisiondelete-example-revision": "{{doc-apihelp-example|revisiondelete}}",
        "apihelp-revisiondelete-example-log": "{{doc-apihelp-example|revisiondelete}}",
-
        "apihelp-rollback-description": "{{doc-apihelp-description|rollback}}",
        "apihelp-rollback-param-title": "{{doc-apihelp-param|rollback|title}}",
        "apihelp-rollback-param-pageid": "{{doc-apihelp-param|rollback|pageid}}",
        "apihelp-rollback-param-watchlist": "{{doc-apihelp-param|rollback|watchlist}}",
        "apihelp-rollback-example-simple": "{{doc-apihelp-example|rollback}}",
        "apihelp-rollback-example-summary": "{{doc-apihelp-example|rollback}}",
-
        "apihelp-rsd-description": "{{doc-apihelp-description|rsd}}",
        "apihelp-rsd-example-simple": "{{doc-apihelp-example|rsd}}",
-
        "apihelp-setnotificationtimestamp-description": "{{doc-apihelp-description|setnotificationtimestamp}}",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "{{doc-apihelp-param|setnotificationtimestamp|entirewatchlist}}",
        "apihelp-setnotificationtimestamp-param-timestamp": "{{doc-apihelp-param|setnotificationtimestamp|timestamp}}",
        "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
        "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
-
        "apihelp-tokens-description": "{{doc-apihelp-description|tokens}}",
        "apihelp-tokens-param-type": "{{doc-apihelp-param|tokens|type}}",
        "apihelp-tokens-example-edit": "{{doc-apihelp-example|tokens}}",
        "apihelp-tokens-example-emailmove": "{{doc-apihelp-example|tokens}}",
-
        "apihelp-unblock-description": "{{doc-apihelp-description|unblock}}",
        "apihelp-unblock-param-id": "{{doc-apihelp-param|unblock|id}}",
        "apihelp-unblock-param-user": "{{doc-apihelp-param|unblock|user}}",
        "apihelp-unblock-param-reason": "{{doc-apihelp-param|unblock|reason}}",
        "apihelp-unblock-example-id": "{{doc-apihelp-example|unblock}}",
        "apihelp-unblock-example-user": "{{doc-apihelp-example|unblock}}",
-
        "apihelp-undelete-description": "{{doc-apihelp-description|undelete}}",
        "apihelp-undelete-param-title": "{{doc-apihelp-param|undelete|title}}",
        "apihelp-undelete-param-reason": "{{doc-apihelp-param|undelete|reason}}",
        "apihelp-undelete-param-watchlist": "{{doc-apihelp-param|undelete|watchlist}}",
        "apihelp-undelete-example-page": "{{doc-apihelp-example|undelete}}",
        "apihelp-undelete-example-revisions": "{{doc-apihelp-example|undelete}}",
-
        "apihelp-upload-description": "{{doc-apihelp-description|upload}}",
        "apihelp-upload-param-filename": "{{doc-apihelp-param|upload|filename}}",
        "apihelp-upload-param-comment": "{{doc-apihelp-param|upload|comment}}",
        "apihelp-upload-param-checkstatus": "{{doc-apihelp-param|upload|checkstatus}}",
        "apihelp-upload-example-url": "{{doc-apihelp-example|upload}}",
        "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
-
        "apihelp-userrights-description": "{{doc-apihelp-description|userrights}}",
-       "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}",
+       "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}\n{{Identical|Username}}",
        "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}",
        "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
        "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
        "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
        "apihelp-userrights-example-user": "{{doc-apihelp-example|userrights}}",
        "apihelp-userrights-example-userid": "{{doc-apihelp-example|userrights}}",
-
        "apihelp-watch-description": "{{doc-apihelp-description|watch}}",
        "apihelp-watch-param-title": "{{doc-apihelp-param|watch|title}}",
        "apihelp-watch-param-unwatch": "{{doc-apihelp-param|watch|unwatch}}",
        "apihelp-watch-example-watch": "{{doc-apihelp-example|watch}}",
        "apihelp-watch-example-unwatch": "{{doc-apihelp-example|watch}}",
        "apihelp-watch-example-generator": "{{doc-apihelp-example|watch}}",
-
        "apihelp-format-example-generic": "{{doc-apihelp-example|format|params=* $1 - Format name|paramstart=2|noseealso=1}}",
        "apihelp-dbg-description": "{{doc-apihelp-description|dbg|seealso=* {{msg-mw|apihelp-dbgfm-description}}}}",
        "apihelp-dbgfm-description": "{{doc-apihelp-description|dbgfm|seealso=* {{msg-mw|apihelp-dbg-description}}}}",
        "apihelp-xmlfm-description": "{{doc-apihelp-description|xmlfm|seealso=* {{msg-mw|apihelp-xml-description}}}}",
        "apihelp-yaml-description": "{{doc-apihelp-description|yaml|seealso=* {{msg-mw|apihelp-yamlfm-description}}}}",
        "apihelp-yamlfm-description": "{{doc-apihelp-description|yamlfm|seealso=* {{msg-mw|apihelp-yaml-description}}}}",
-
        "api-format-title": "Page title when API output is pretty-printed in HTML.",
        "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
-
        "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
        "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
-
        "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
        "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
        "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
        "api-pageset-param-redirects-generator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is also available}}",
        "api-pageset-param-redirects-nogenerator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is not available}}",
        "api-pageset-param-converttitles": "{{doc-apihelp-param|pageset|converttitles|description=the \"converttitles\" parameter in pageset-using modules|params=* $1 - List of languages with variants|paramstart=2}}",
-
        "api-help-title": "Page title for the auto-generated help output",
        "api-help-lead": "Text displayed at the top of the API help page",
        "api-help-main-header": "Text for the header of the main module",
        "api-help-flag-mustbeposted": "Flag displayed for an API module that only accepts POST requests",
        "api-help-flag-generator": "Flag displayed for an API module that can be used as a generator",
        "api-help-help-urls": "{{optional}} Label for the API help urls section\n\nParameters:\n* $1 - Number of urls to be displayed",
-       "api-help-parameters": "Label for the API help parameters section\n\nParameters:\n* $1 - Number of parameters to be displayed",
-       "api-help-param-deprecated": "Displayed in the API help for any deprecated parameter",
+       "api-help-parameters": "Label for the API help parameters section\n\nParameters:\n* $1 - Number of parameters to be displayed\n{{Identical|Parameter}}",
+       "api-help-param-deprecated": "Displayed in the API help for any deprecated parameter\n{{Identical|Deprecated}}",
        "api-help-param-required": "Displayed in the API help for any required parameter",
        "api-help-param-list": "Used to display the possible values for a parameter taking a list of values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Comma-separated list of values, possibly formatted using {{msg-mw|api-help-param-list-can-be-empty}}",
        "api-help-param-list-can-be-empty": "Used to indicate that one of the possible values in the list is the empty string.\n\nParameters:\n* $1 - Number of items in the rest of the list; may be 0\n* $2 - Remainder of the list as a comma-separated string",
        "api-help-param-limit": "Used to display the maximum value of a limit parameter\n\nParameters:\n* $1 - Maximum value",
        "api-help-param-limit2": "Used to display the maximum values of a limit parameter\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
        "api-help-param-integer-min": "Used to display an integer parameter with a minimum but no maximum value\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - unused\n\nSee also:\n* {{msg-mw|api-help-param-integer-max}}\n* {{msg-mw|api-help-param-integer-minmax}}",
-       "api-help-param-integer-max": "Used to display an integer parameter with a maximum but no minimum value\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - unused\n* $3 - Maximum value\n\nSee also:\n* {{msg-mw|api-help-param-integer-min}}\n* {{msg-mw|api-help-param-integer-minmax}}",
+       "api-help-param-integer-max": "Used to display an integer parameter with a maximum but no minimum value.\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - (Unused)\n* $3 - Maximum value\nSee also:\n* {{msg-mw|Api-help-param-integer-min}}\n* {{msg-mw|Api-help-param-integer-minmax}}",
        "api-help-param-integer-minmax": "Used to display an integer parameter with a maximum and minimum values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - Maximum value\n\nSee also:\n* {{msg-mw|api-help-param-integer-min}}\n* {{msg-mw|api-help-param-integer-max}}",
        "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-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}}",
+       "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=3|params=\n* $1 - Token type|noseealso=1}}",
        "api-help-param-token-webui": "{{doc-apihelp-param|description=additional text for any \"token\" parameter, explaining that web UI tokens are also accepted|noseealso=1}}",
        "api-help-param-direction": "{{doc-apihelp-param|description=any standard \"dir\" parameter|noseealso=1}}",
        "api-help-param-continue": "{{doc-apihelp-param|description=any standard \"continue\" parameter, or other parameter with the same semantics|noseealso=1}}",
        "api-help-param-no-description": "Displayed on API parameters that lack any description",
-       "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed",
-       "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed",
+       "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed\n{{Identical|Example}}",
+       "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed\n{{Identical|Permission}}",
        "api-help-permissions-granted-to": "Used to introduce the list of groups each permission is assigned to.\n\nParameters:\n* $1 - Number of groups\n* $2 - List of group names, comma-separated",
        "api-help-right-apihighlimits": "{{technical}}{{doc-right|apihighlimits|prefix=api-help}}\nThis message is used instead of {{msg-mw|right-apihighlimits}} in the API help to display the actual limits.\n\nParameters:\n* $1 - Limit for slow queries\n* $2 - Limit for fast queries",
-
-       "api-credits-header": "Header for the API credits section in the API help output",
+       "api-credits-header": "Header for the API credits section in the API help output\n{{Identical|Credit}}",
        "api-credits": "API credits text, displayed in the API help output"
 }
diff --git a/includes/api/i18n/ru.json b/includes/api/i18n/ru.json
new file mode 100644 (file)
index 0000000..330da6d
--- /dev/null
@@ -0,0 +1,44 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mahairod",
+                       "Okras"
+               ]
+       },
+       "apihelp-main-param-action": "Действие, которое следует выполнить.",
+       "apihelp-main-param-format": "Формат вывода.",
+       "apihelp-main-param-smaxage": "Устанавливает заголовок s-maxage в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-maxage": "Устанавливает заголовок max-age в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано \"user\", или что имеет права бота, если задано \"bot\".",
+       "apihelp-main-param-requestid": "Любое значение, заданное здесь, будет включено в ответ. Может быть использовано для различения запросов.",
+       "apihelp-main-param-servedby": "Включить в результаты имя хоста, обработавшего запрос.",
+       "apihelp-main-param-curtimestamp": "Включить в результаты временную метку.",
+       "apihelp-main-param-origin": "При обращении к API, используя кросс-доменный AJAX запрос (CORS), задайте параметру значение исходного домена. Он должен быть включён в любой предварительный запрос и таким образом должен быть частью URI запроса (не тела POST). Он должен точно соответствовать одному из источников в заголовке Origin:, так что он должен быть задан наподобие http://en.wikipedia.org или https://meta.wikimedia.org. Если параметр не соответствует заголовку Origin:, будет возвращён ответ с кодом ошибки 403. Если параметр соответствует заголовку Origin: и источник в белом списке, будет установлен заголовок Access-Control-Allow-Origin.",
+       "apihelp-block-description": "Блокировка участника.",
+       "apihelp-block-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите заблокировать.",
+       "apihelp-block-param-reason": "Причина блокировки.",
+       "apihelp-block-param-nocreate": "Запретить создание учётных записей.",
+       "apihelp-createaccount-param-name": "Имя участника.",
+       "apihelp-delete-description": "Удалить страницу.",
+       "apihelp-delete-param-watch": "Добавить эту страницу в список наблюдения.",
+       "apihelp-disabled-description": "Этот модуль был отключен.",
+       "apihelp-edit-param-sectiontitle": "Заголовок для нового раздела.",
+       "apihelp-edit-param-text": "Содержание страницы.",
+       "apihelp-edit-example-edit": "Редактировать страницу",
+       "apihelp-expandtemplates-param-title": "Заголовок страницы.",
+       "apihelp-import-param-xml": "Загруженный XML-файл.",
+       "apihelp-login-param-name": "Имя участника.",
+       "apihelp-login-param-password": "Пароль.",
+       "apihelp-login-param-domain": "Домен (необязательно).",
+       "apihelp-login-example-login": "Войти",
+       "apihelp-logout-description": "Выйти и очистить данные сессии.",
+       "api-help-main-header": "Главный модуль",
+       "api-help-parameters": "Параметр{{PLURAL:$1||ы}}:",
+       "api-help-param-deprecated": "Устаревший.",
+       "api-help-param-required": "Этот параметр является обязательным.",
+       "api-help-param-default": "По умолчанию: $1",
+       "api-help-param-default-empty": "По умолчанию: <span class=\"apihelp-empty\">(пусто)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(описание отсутствует)</span>",
+       "api-help-examples": "Пример{{PLURAL:$1||ы}}:",
+       "api-credits-header": "Создатели"
+}
diff --git a/includes/api/i18n/si.json b/includes/api/i18n/si.json
new file mode 100644 (file)
index 0000000..14e0015
--- /dev/null
@@ -0,0 +1,70 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Susith Chandira Gts"
+               ]
+       },
+       "apihelp-main-param-action": "ඉටු කිරීමට ඇත්තේ කුමන ක්‍රියාවද.",
+       "apihelp-main-param-format": "ප්‍රතිදානයේ ආකෘතිය.",
+       "apihelp-main-param-requestid": "මෙහි ඇති සියලුම වටිනාකම් ප්‍රතිචාරයන්හි අන්තර්ගතකොට ඇත. ඇතැම් විට පැහැදිලිව වටහාගත් ඉල්ලීම් සදහා භාවිතා වේ.",
+       "apihelp-main-param-servedby": "ප්‍රතිපලයන්හි ඉල්ලීම් ඉටුකළ ධාරකනාමය ඇතුලත් කරන්න.",
+       "apihelp-main-param-curtimestamp": "ප්‍රථිපලයන්හි කාල මුද්‍රාව ඇතුලත් කරන්න.",
+       "apihelp-help-description": "නිරූපිත ඒකක සදහා උදවු පෙන්වන්න.",
+       "apihelp-help-param-submodules": "නම් කරන ලද ඒකකයේ, අනුඒකක සදහා උදවු ඇතුලත් කරන්න.",
+       "apihelp-help-param-helpformat": "උදවු ප්‍රතිදානයේ ආකෘතිය.",
+       "apihelp-help-param-wrap": "ප්‍රතිදානය නියමිත API අනුකූලතා ආකෘතියකට හරවන්න.",
+       "apihelp-help-param-toc": "HTML ප්‍රතිදනයන්ගේ පටුනේ ලැයිස්තුවක් ඇතුලත් කරන්න.",
+       "apihelp-help-example-main": "ප්‍රධාන ඒකකය සදහා උදවු කරන්න",
+       "apihelp-help-example-recursive": "සියලුම උදවු එක පිටුවක් තුල",
+       "apihelp-help-example-query": "සැකසහිත අනුඒකක සදහා උදවු කරන්න",
+       "apihelp-format-example-generic": "$1 ආකෘතියේ ඇති සැක සහිත ප්‍රථිපල පරිවර්තනය කරන්න",
+       "apihelp-dbg-description": "ප්‍රතිදාන දත්ත PHP හි var_export() ආකෘතියෙන් පවතී.",
+       "apihelp-dbgfm-description": "ප්‍රතිදාන දත්ත PHP හි var_export() ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-dump-description": "ප්‍රතිදාන දත්ත PHP හි var_dump() ආකෘතියෙන් පවතී.",
+       "apihelp-dumpfm-description": "ප්‍රතිදාන දත්ත PHP හි var_dump() ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-json-description": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී.",
+       "apihelp-jsonfm-description": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-none-description": "ප්‍රතිදානයේ කිසිවක් නොමැත.",
+       "apihelp-php-description": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී.",
+       "apihelp-phpfm-description": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-txt-description": "ප්‍රතිදාන දත්ත PHP හි print_r() ආකෘතියෙන් පවතී.",
+       "apihelp-txtfm-description": "ප්‍රතිදාන දත්ත PHP හි print_r() ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-wddx-description": "ප්‍රතිදාන දත්ත WDDX ආකෘතියෙන් පවතී",
+       "apihelp-wddxfm-description": "ප්‍රතිදාන දත්ත WDDX ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-xml-description": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී.",
+       "apihelp-xml-param-includexmlnamespace": "නිරූපණය කළා නම්, XML නාමාවකාශයක් එකතු කරන්න.",
+       "apihelp-xmlfm-description": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-yaml-description": "ප්‍රතිදාන දත්ත YAML ආකෘතියෙන් පවතී.",
+       "apihelp-yamlfm-description": "ප්‍රතිදාන දත්ත YAML ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "api-format-title": "මාධ්‍යවිකි API ප්‍රථිපල",
+       "api-help-title": "මාධ්‍යවිකි API උදවු",
+       "api-help-lead": "මෙය ස්වයං-ජනිත මාධ්‍යවිකි API \tප්‍රලේඛන පිටුවකි.\n\nප්‍රලේඛනය සහ උදාහරණ:\nhttps://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "ප්‍රධාන ආකෘතිය",
+       "api-help-flag-deprecated": "මෙම ආකෘතිය විරුද්ධත්වය ප්‍රකාශ කරන ලදී.",
+       "api-help-flag-internal": "<strong>මෙම ඒකකය අභ්‍යන්තර හෝ අස්ථායි.\n</strong> එහි ක්‍රියාකාරිත්වය දැනුම් දීමකින් තොරව වෙනස් වියහැක.",
+       "api-help-flag-readrights": "මෙම ඒකකය සදහා හිමිකම් කියවීම අවශ්‍ය වේ.",
+       "api-help-flag-writerights": "මෙම ඒකකය සදහා හිමිකම් ලිවීම අවශ්‍ය වේ.",
+       "api-help-flag-mustbeposted": "මෙම ඒකකය POST ඉල්ලීම් පමණක් බාරගනී.",
+       "api-help-flag-generator": "මෙම ආකෘතිය \tඋත්පාදකයක් ලෙස භාවිතා කල හැක.",
+       "api-help-parameters": "{{PLURAL:$1|පරාමිතිය|පරාමිතීන්}}:",
+       "api-help-param-deprecated": "විරුද්ධත්වය ප්‍රකාශ කර ඇත.",
+       "api-help-param-required": "මෙම පරාමිතිය අවශ්‍යයි.",
+       "api-help-param-list": "{{PLURAL:$1|1=එක් වටිනාකමක්|2=වටිනාකම් (\"{{!}}\" සමග වෙන් කරන්න)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=හිස් කල යුතුයි|හිස් කල හැකියි, හෝ $2}}",
+       "api-help-param-limit": "$1 ට වඩා අනුමත නොකරයි.",
+       "api-help-param-limit2": "$1 කට වැඩ අනුමත කරන්නේ නැත ($2 බොට්ස් සදහාය).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=අගය|2=අගයන්}} $2 ට වඩා අඩු නොවිය යුතුය.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=වටිනාකම|2=වටිනාකම්}} $3 ට ව වැඩි නොවිය යුතුය.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=අගය|2=අගයන්}} $2 සහ $3 අතර පැවතිය යුතුය.",
+       "api-help-param-multi-separate": "වටිනාකම් \"|\" සමග වෙන් කරන්න.",
+       "api-help-param-multi-max": "අංක සදහා උපරිම වටිනාකම {{PLURAL:$1|$1}}\n({{PLURAL:$2|$2}} බොට්ස් සදහා)",
+       "api-help-param-default": "Default: $1",
+       "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(හිස්)</span>",
+       "api-help-param-token": "[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] මගින් \"$1\" \tසංඥාව සොයාගන්නා ලදී",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(විස්තරයක් නැත)</span>",
+       "api-help-examples": "{{PLURAL:$1|උදාහරණය|උදාහරණ}}:",
+       "api-help-permissions": "{{PLURAL:$1|අවසරය|අවසරයන්}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|\tප්‍රදානලාභියාට}}: $2",
+       "api-credits-header": "ස්තුතිය",
+       "api-credits": "API වැඩිදියුණු කරන්නන්:\n* Roan Kattouw (ප්‍රධානියා 2007 සැප්. –2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (නිර්මාපකයා, ප්‍රධානියා 2006 සැප්. – 2007 සැප්.)\n* Brad Jorsch (ප්‍රධානියා 2013–මේ දක්වා)\n\nඔබගේ අදහස්, යෝජනා හා ගැටළු mediawiki-api@lists.wikimedia.org වෙත යොමු කරන්න, පින්තූර හෝ ගොනු හරහා ගැටළු ඉදිරිපත් කිරීමට  https://bugzilla.wikimedia.org/ වෙත පිවිසෙන්න."
+}
diff --git a/includes/api/i18n/sv.json b/includes/api/i18n/sv.json
new file mode 100644 (file)
index 0000000..ae40cd9
--- /dev/null
@@ -0,0 +1,66 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jopparn",
+                       "Lokal Profil",
+                       "WikiPhoenix"
+               ]
+       },
+       "apihelp-main-param-curtimestamp": "Inkludera den aktuella tidsstämpeln i resultatet.",
+       "apihelp-block-description": "Blockera en användare.",
+       "apihelp-block-param-user": "Användare, IP-adress eller IP-intervall du vill blockera.",
+       "apihelp-block-param-reason": "Orsak till blockering.",
+       "apihelp-block-param-anononly": "Blockera endast anonyma användare (t.ex. inaktivera anonyma redigeringar för denna IP-adress).",
+       "apihelp-block-param-nocreate": "Förhindra registrering av användarkonton.",
+       "apihelp-createaccount-description": "Skapa ett nytt användarkonto.",
+       "apihelp-createaccount-param-name": "Användarnamn.",
+       "apihelp-createaccount-param-password": "Lösenord (ignoreras om $1mailpassword angetts).",
+       "apihelp-createaccount-param-email": "Användarens e-postadress (valfritt).",
+       "apihelp-createaccount-param-realname": "Användarens riktiga namn (valfritt).",
+       "apihelp-createaccount-example-pass": "Skapa användaren \"testuser\" med lösenordet \"test123\"",
+       "apihelp-delete-description": "Radera en sida.",
+       "apihelp-delete-param-watch": "Lägg till sidan i din bevakningslista.",
+       "apihelp-delete-param-unwatch": "Ta bort sidan från din bevakningslista.",
+       "apihelp-delete-example-simple": "Radera huvudsidan",
+       "apihelp-delete-example-reason": "Raderar huvudsidan med orsaken \"Förbereder flyttning\"",
+       "apihelp-disabled-description": "Denna modul har inaktiverats.",
+       "apihelp-edit-description": "Skapa och redigera sidor.",
+       "apihelp-edit-param-text": "Sidans innehåll.",
+       "apihelp-edit-param-summary": "Redigeringssammanfattning. Även avsnittets rubrik när $1section=new och $1sectiontitle inte anges.",
+       "apihelp-edit-param-minor": "Mindre redigering.",
+       "apihelp-edit-param-watch": "Lägg till sidan i din bevakningslista.",
+       "apihelp-edit-param-unwatch": "Ta bort sidan från din bevakningslista.",
+       "apihelp-edit-example-edit": "Redigera en sida",
+       "apihelp-emailuser-description": "Skicka e-post till en användare.",
+       "apihelp-expandtemplates-param-title": "Sidans rubrik.",
+       "apihelp-expandtemplates-param-text": "Wikitext att konvertera.",
+       "apihelp-feedcontributions-param-year": "Från år (och tidigare).",
+       "apihelp-feedcontributions-param-month": "Från månad (och tidigare).",
+       "apihelp-feedrecentchanges-param-hideminor": "Dölj mindre ändringar.",
+       "apihelp-feedrecentchanges-param-hidebots": "Dölj robotändringar.",
+       "apihelp-feedrecentchanges-param-hideanons": "Dölj ändringar av oinloggade användare.",
+       "apihelp-feedrecentchanges-param-hideliu": "Dölj ändringar av inloggade användare.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Dölj patrullerade ändringar.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Dölj mina ändringar.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtrera efter tagg.",
+       "apihelp-feedrecentchanges-param-target": "Visa endast ändringarna av sidor som den här sidan länkar till.",
+       "apihelp-feedrecentchanges-example-simple": "Visa senaste ändringar",
+       "apihelp-feedrecentchanges-example-30days": "Visa senaste ändringar för 30 dygn",
+       "apihelp-filerevert-param-comment": "Ladda upp kommentar.",
+       "apihelp-help-example-recursive": "All hjälp på en sida",
+       "apihelp-help-example-help": "Hjälp för själva hjälpmodulen",
+       "api-help-main-header": "Huvudmodul",
+       "api-help-flag-deprecated": "Denna modul är föråldrad.",
+       "api-help-flag-internal": "<strong>Denna modul är intern eller instabil.</strong> Dess funktion kan ändras utan föregående meddelande.",
+       "api-help-flag-readrights": "Denna modul kräver läsrättigheter.",
+       "api-help-flag-writerights": "Denna modul kräver skrivrättigheter.",
+       "api-help-flag-mustbeposted": "Denna modul accepterar endast POST-begäranden.",
+       "api-help-flag-generator": "Denna modul kan användas som en generator.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter|Parametrar}}:",
+       "api-help-param-deprecated": "Föråldrad.",
+       "api-help-param-required": "Denna parameter är obligatorisk.",
+       "api-help-param-list": "{{PLURAL:$1|1=ett värde|2=värden (separade med \"{{!}}\")}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Måste vara tom|Kan vara tom, eller $2}}",
+       "api-help-param-limit": "Inte mer än $1 tillåts.",
+       "api-help-param-limit2": "Inte mer än $1 ($2 för robotar) tillåts."
+}
diff --git a/includes/api/i18n/tr.json b/includes/api/i18n/tr.json
new file mode 100644 (file)
index 0000000..3a9ff25
--- /dev/null
@@ -0,0 +1,40 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sayginer"
+               ]
+       },
+       "apihelp-edit-param-text": "Sayfa içeriği.",
+       "apihelp-edit-param-minor": "Küçük değişiklik.",
+       "apihelp-edit-param-nocreate": "Sayfa mevcut değilse hata oluştur.",
+       "apihelp-edit-param-watch": "Sayfayı izleme listenize ekleyin.",
+       "apihelp-edit-param-unwatch": "Sayfayı izleme listenizden çıkarın.",
+       "apihelp-edit-param-redirect": "Yönlendirmeleri otomatik olarak çöz.",
+       "apihelp-emailuser-description": "Bir kullanıcıya e-posta gönder.",
+       "apihelp-emailuser-param-target": "E-posta gönderilecek kullanıcı.",
+       "apihelp-emailuser-param-subject": "Konu başlığı.",
+       "apihelp-emailuser-param-text": "E-posta metni.",
+       "apihelp-emailuser-param-ccme": "Bu e-postanın bir kopyasını bana gönder.",
+       "apihelp-feedcontributions-param-toponly": "Yalnızca son revizyon olan değişiklikleri göster.",
+       "apihelp-feedcontributions-param-newonly": "Yalnızca yeni sayfa oluşturan değişiklikleri göster.",
+       "apihelp-feedcontributions-param-showsizediff": "Sürümler arasındaki boyut farkını göster.",
+       "apihelp-feedrecentchanges-param-limit": "Verilecek azami sonuç sayısı.",
+       "apihelp-feedrecentchanges-param-hideminor": "Küçük değişiklikleri gizle.",
+       "apihelp-feedrecentchanges-param-hidebots": "Bot değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-param-hideanons": "Anonim kullanıcı değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-param-hideliu": "Kayıtlı kullanıcı değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Kendi değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-example-simple": "Son değişiklikleri göster",
+       "apihelp-feedrecentchanges-example-30days": "Son 30 gündeki değişiklikleri göster",
+       "apihelp-filerevert-description": "Bir dosyayı eski bir sürümüne geri döndür.",
+       "apihelp-move-description": "Bir sayfayı taşı.",
+       "apihelp-move-param-from": "Taşımak istediğiniz sayfanın başlığı. $1fromid ile birlikte kullanılamaz.",
+       "apihelp-move-param-noredirect": "Yönlendirme oluşturmayın.",
+       "apihelp-opensearch-param-limit": "Verilecek azami sonuç sayısı.",
+       "apihelp-options-example-reset": "Tüm tercihleri sıfırla",
+       "api-help-title": "MediaWiki API yardımı",
+       "api-help-parameters": "{{PLURAL:$1|Parametre|Parametre}}:",
+       "api-help-param-limit": "$1 taneden fazla olamaz.",
+       "api-help-param-limit2": "$1 taneden fazla (botlar için $2) olamaz.",
+       "api-help-param-default": "Varsayılan: $1"
+}
diff --git a/includes/api/i18n/uk.json b/includes/api/i18n/uk.json
new file mode 100644 (file)
index 0000000..d9f89a4
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ата"
+               ]
+       },
+       "apihelp-main-param-action": "Яку дію виконати.",
+       "apihelp-main-param-format": "Формат виводу."
+}
diff --git a/includes/api/i18n/vi.json b/includes/api/i18n/vi.json
new file mode 100644 (file)
index 0000000..baae76c
--- /dev/null
@@ -0,0 +1,48 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Minh Nguyen"
+               ]
+       },
+       "apihelp-main-param-action": "Tác vụ để thực hiện.",
+       "apihelp-main-param-format": "Định dạng của dữ liệu được cho ra.",
+       "apihelp-help-param-helpformat": "Định dạng của văn bản trợ giúp được cho ra.",
+       "apihelp-format-example-generic": "Định dạng kết quả truy vấn dưới dạng $1",
+       "apihelp-dbg-description": "Cho ra dữ liệu dưới dạng var_export() của PHP.",
+       "apihelp-dbgfm-description": "Cho ra dữ liệu dưới dạng var_export() của PHP (định dạng bằng HTML).",
+       "apihelp-dump-description": "Cho ra dữ liệu dưới dạng var_dump() của PHP.",
+       "apihelp-dumpfm-description": "Cho ra dữ liệu dưới dạng var_dump() của PHP (định dạng bằng HTML).",
+       "apihelp-json-description": "Cho ra dữ liệu dưới dạng JSON.",
+       "apihelp-jsonfm-description": "Cho ra dữ liệu dưới dạng JSON (định dạng bằng HTML).",
+       "apihelp-none-description": "Không cho ra gì.",
+       "apihelp-rawfm-description": "Cho ra dữ liệu với các phần tử gỡ lỗi dưới dạng JSON (định dạng bằng HTML).",
+       "apihelp-txt-description": "Cho ra dữ liệu dưới dạng print_r() của PHP.",
+       "apihelp-txtfm-description": "Cho ra dữ liệu dưới dạng print_r() của PHP (định dạng bằng HTML).",
+       "apihelp-wddx-description": "Cho ra dữ liệu dưới dạng WDDX.",
+       "apihelp-wddxfm-description": "Cho ra dữ liệu dưới dạng WDDX (định dạng bằng HTML).",
+       "apihelp-xml-description": "Cho ra dữ liệu dưới dạng XML.",
+       "apihelp-xmlfm-description": "Cho ra dữ liệu dưới dạng XML (định dạng bằng HTML).",
+       "apihelp-yaml-description": "Cho ra dữ liệu dưới dạng YAML.",
+       "apihelp-yamlfm-description": "Cho ra dữ liệu dưới dạng YAML (định dạng bằng HTML).",
+       "api-format-title": "Kết quả API MediaWiki",
+       "api-help-title": "Trợ giúp về API MediaWiki",
+       "api-help-main-header": "Mô đun chính",
+       "api-help-flag-deprecated": "Mô đun này đã bị phản đối.",
+       "api-help-flag-readrights": "Mô đun này cần quyền đọc.",
+       "api-help-flag-writerights": "Mô đun này cần quyền ghi.",
+       "api-help-flag-mustbeposted": "Mô đun này chỉ có nhận các yêu cầu POST.",
+       "api-help-parameters": "{{PLURAL:$1|Tham số|Các tham số}}:",
+       "api-help-param-deprecated": "Bị phản đối.",
+       "api-help-param-required": "Tham số này là bắt buộc.",
+       "api-help-param-list": "{{PLURAL:$1|1=Một giá trị|2=Các giá trị (phân tách bằng “{{!}}”)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Cần phải để trống|Cần phải để trống hoặc là $2}}",
+       "api-help-param-limit": "Không cho phép hơn $1.",
+       "api-help-param-limit2": "Không cho phép hơn $1 ($2 đối với các bot).",
+       "api-help-param-multi-separate": "Phân tách các giá trị bằng “|”.",
+       "api-help-param-default": "Mặc định: $1",
+       "api-help-param-default-empty": "Mặc định: <span class=\"apihelp-empty\">(trống)</span>",
+       "api-help-examples": "{{PLURAL:$1|Ví dụ|Các ví dụ}}:",
+       "api-help-permissions": "{{PLURAL:$1|Quyền hạn|Các quyền hạn}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1}}Cấp cho: $2",
+       "api-credits-header": "Ghi công"
+}
diff --git a/includes/api/i18n/zh-hans.json b/includes/api/i18n/zh-hans.json
new file mode 100644 (file)
index 0000000..32175ed
--- /dev/null
@@ -0,0 +1,379 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gaoxuewei",
+                       "Linforest",
+                       "Liuxinyu970226",
+                       "Papapasan"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page 文档]\n* [https://www.mediawiki.org/wiki/API:FAQ 问答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Bugs与需求信息]\n</div>\n<strong>状态信息:</strong> 本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong> 当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅https://www.mediawiki.org/wiki/API:Errors_and_warnings 。",
+       "apihelp-main-param-action": "要执行哪些操作。",
+       "apihelp-main-param-format": "输出的格式。",
+       "apihelp-main-param-curtimestamp": "在结果中包括当前时间戳。",
+       "apihelp-block-description": "封禁一位用户。",
+       "apihelp-block-param-user": "您要封禁的用户、IP地址或IP地址段。",
+       "apihelp-block-param-reason": "封禁的原因",
+       "apihelp-block-param-nocreate": "防止创建帐户。",
+       "apihelp-block-param-noemail": "阻止用户通过 wiki发送电子邮件。(要求\"blockemail\"权限)。",
+       "apihelp-block-param-hidename": "从封禁日志中隐藏用户名。(需要“隐藏用户”权限)。",
+       "apihelp-block-param-allowusertalk": "允许用户编辑自己的讨论页 (取决于 $wgBlockAllowsUTEdit)。",
+       "apihelp-block-param-watchuser": "监视该用户或该 IP 的用户页和讨论页。",
+       "apihelp-block-example-ip-simple": "封禁IP地址192.0.2.5三天,原因“首次罢工”",
+       "apihelp-clearhasmsg-description": "清除当前用户的 hasmsg 标志。",
+       "apihelp-clearhasmsg-example-1": "清除当前用户的 hasmsg 标志",
+       "apihelp-compare-description": "获取2个页面之间的差别。\n\n您必须为\"from\"和\"to\"传递特定的修订版本号、 页面标题或页面ID。",
+       "apihelp-compare-param-fromtitle": "要比较的第一个标题。",
+       "apihelp-compare-param-fromid": "要比较的第一个页面 ID。",
+       "apihelp-compare-param-fromrev": "要比较的第一个修订版本。",
+       "apihelp-compare-param-totitle": "要比较的第二个标题。",
+       "apihelp-compare-param-toid": "要比较的第一个页面 ID。",
+       "apihelp-compare-param-torev": "要比较的第二个修订版本。",
+       "apihelp-compare-example-1": "在版本1和2中创建差异",
+       "apihelp-createaccount-description": "创建一个新用户账户。",
+       "apihelp-createaccount-param-name": "用户名",
+       "apihelp-createaccount-param-password": "密码(如果设置$1mailpassword则忽略)。",
+       "apihelp-createaccount-param-domain": "外部身份验证域 (可选)。",
+       "apihelp-createaccount-param-token": "在第一个请求中获得的帐户创建标记。",
+       "apihelp-createaccount-param-email": "用户的电子邮件地址(可选)。",
+       "apihelp-createaccount-param-realname": "用户的真实姓名(可选)。",
+       "apihelp-createaccount-param-mailpassword": "如果设置为任何值,将向用户发送一个随机密码。",
+       "apihelp-createaccount-param-reason": "将要放在日志中的,关于创建帐户的可选原因。",
+       "apihelp-createaccount-example-pass": "创建用户“testuser”和密码“test123”",
+       "apihelp-delete-description": "删除一个页面。",
+       "apihelp-delete-param-title": "你所希望删除的页面的标题。不能与$1pageid一起使用。",
+       "apihelp-delete-param-pageid": "你所希望删除的页面的页面ID。不能与$1title一起使用。",
+       "apihelp-delete-param-reason": "删除原因。如果未设置,将使用一个自动生成的原因。",
+       "apihelp-delete-param-watch": "将该页面加入您的监视列表。",
+       "apihelp-delete-param-unwatch": "将该页面从您的监视列表删除。",
+       "apihelp-delete-example-simple": "删除首页",
+       "apihelp-delete-example-reason": "删除首页,原因“准备移动”",
+       "apihelp-disabled-description": "此模块已禁用。",
+       "apihelp-edit-description": "创建和编辑页面。",
+       "apihelp-edit-param-sectiontitle": "新小节的标题。",
+       "apihelp-edit-param-text": "页面内容。",
+       "apihelp-edit-param-summary": "编辑摘要。当$1section=new且未设置$1sectiontitle时,还包括小节标题。",
+       "apihelp-edit-param-minor": "小编辑。",
+       "apihelp-edit-param-notminor": "不是小编辑。",
+       "apihelp-edit-param-bot": "标记此编辑为机器人编辑。",
+       "apihelp-edit-param-createonly": "不要编辑页面,如果已经存在。",
+       "apihelp-edit-param-nocreate": "如果该页面不存在,则抛出一个错误。",
+       "apihelp-edit-param-watch": "将页面加入您的监视列表。",
+       "apihelp-edit-param-unwatch": "将页面从您的监视列表移除。",
+       "apihelp-edit-param-redirect": "自动解析重定向。",
+       "apihelp-edit-example-edit": "编辑一个页面",
+       "apihelp-edit-example-prepend": "页面中预置_&#95;NOTOC_&#95;",
+       "apihelp-emailuser-description": "电子邮件联系一位用户。",
+       "apihelp-emailuser-param-target": "电子邮件的目标用户。",
+       "apihelp-emailuser-param-subject": "主题页眉。",
+       "apihelp-emailuser-param-text": "邮件正文。",
+       "apihelp-emailuser-param-ccme": "给我发送一份该邮件的副本。",
+       "apihelp-emailuser-example-email": "向用户“WikiSysop”发送邮件,带文字“Content”",
+       "apihelp-expandtemplates-description": "展开维基文本中的所有模板。",
+       "apihelp-expandtemplates-param-title": "页面标题。",
+       "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
+       "apihelp-expandtemplates-example-simple": "展开wiki文本“<nowiki>{{Project:Sandbox}}</nowiki>”",
+       "apihelp-feedcontributions-description": "返回用户贡献纲要。",
+       "apihelp-feedcontributions-param-feedformat": "纲要的格式。",
+       "apihelp-feedcontributions-param-deletedonly": "仅显示已删除的贡献。",
+       "apihelp-feedcontributions-param-toponly": "仅仅显示那些作为最新修订的编辑。",
+       "apihelp-feedcontributions-param-newonly": "仅仅显示那些作为页面创建的编辑。",
+       "apihelp-feedcontributions-param-showsizediff": "显示修订版本之间的大小差别。",
+       "apihelp-feedcontributions-example-simple": "返回[[User:Example]]的贡献",
+       "apihelp-feedrecentchanges-description": "返回最新变更纲要。",
+       "apihelp-feedrecentchanges-param-feedformat": "纲要的格式。",
+       "apihelp-feedrecentchanges-param-namespace": "用于限制结果的命名空间。",
+       "apihelp-feedrecentchanges-param-invert": "除所选定者外的所有命名空间。",
+       "apihelp-feedrecentchanges-param-days": "用于限制结果的天数。",
+       "apihelp-feedrecentchanges-param-limit": "所要返回结果的最大数目。",
+       "apihelp-feedrecentchanges-param-from": "显示自那时以来的更改。",
+       "apihelp-feedrecentchanges-param-hideminor": "隐藏小更改。",
+       "apihelp-feedrecentchanges-param-hidebots": "隐藏机器人所做的更改。",
+       "apihelp-feedrecentchanges-param-hideanons": "隐藏匿名用户做出的更改。",
+       "apihelp-feedrecentchanges-param-hideliu": "隐藏注册用户做出的更改。",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "隐藏已巡查更改。",
+       "apihelp-feedrecentchanges-param-hidemyself": "隐藏您做出的更改。",
+       "apihelp-feedrecentchanges-param-tagfilter": "按标签过滤。",
+       "apihelp-feedrecentchanges-param-target": "仅仅显示从该页面链出的那些页面的变更。",
+       "apihelp-feedrecentchanges-param-showlinkedto": "仅仅显示链入到该页面的那些页面的变更。",
+       "apihelp-feedrecentchanges-example-simple": "显示最近更改",
+       "apihelp-feedrecentchanges-example-30days": "显示最近30天的更改",
+       "apihelp-feedwatchlist-description": "返回监视列表纲要。",
+       "apihelp-feedwatchlist-param-feedformat": "纲要的格式。",
+       "apihelp-feedwatchlist-param-hours": "列出从现在起数小时内修改的页面。",
+       "apihelp-feedwatchlist-param-linktosections": "如果可能的话,直接链接到已变更的小节。",
+       "apihelp-feedwatchlist-example-default": "显示监视列表订阅",
+       "apihelp-feedwatchlist-example-all6hrs": "显示过去6小时内受监视页面的所有更改。",
+       "apihelp-filerevert-description": "回退一个文件至某一旧版本。",
+       "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
+       "apihelp-filerevert-param-comment": "上传评论。",
+       "apihelp-filerevert-example-revert": "回退Wiki.png至2011-03-05T15:27:40Z的版本",
+       "apihelp-help-example-main": "主模块帮助",
+       "apihelp-help-example-recursive": "一个页面中的所有帮助",
+       "apihelp-help-example-help": "帮助模块本身的帮助",
+       "apihelp-help-example-query": "两个查询子模块的帮助",
+       "apihelp-import-param-summary": "导入摘要。",
+       "apihelp-import-param-xml": "上传的XML文件。",
+       "apihelp-import-param-interwikipage": "用于跨wiki导入:导入的页面。",
+       "apihelp-import-param-rootpage": "导入作为此页面的子页面。",
+       "apihelp-import-example-import": "将页面[[meta:Help:Parserfunctions]]连带完整历史导入至100名字空间。",
+       "apihelp-login-param-name": "用户名。",
+       "apihelp-login-param-password": "密码。",
+       "apihelp-login-param-domain": "域名(可选)。",
+       "apihelp-login-example-gettoken": "检索登录令牌",
+       "apihelp-login-example-login": "登录",
+       "apihelp-move-description": "移动一个页面。",
+       "apihelp-move-param-reason": "移动原因。",
+       "apihelp-move-param-movetalk": "移动讨论页,如果存在。",
+       "apihelp-move-param-movesubpages": "移动子页面,如果可以。",
+       "apihelp-move-param-noredirect": "不要创建重定向。",
+       "apihelp-move-param-ignorewarnings": "忽略任何警告。",
+       "apihelp-opensearch-param-search": "搜索字符串。",
+       "apihelp-opensearch-param-namespace": "搜索的名字空间。",
+       "apihelp-opensearch-param-suggest": "如果[https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest]设置为false则不做任何事情。",
+       "apihelp-opensearch-param-format": "输出格式。",
+       "apihelp-opensearch-example-te": "查找以“Te”开头的页面",
+       "apihelp-options-example-reset": "重置所有用户设置",
+       "apihelp-options-example-change": "更改“皮肤”和“hideminot”设置",
+       "apihelp-options-example-complex": "重置所有设置,之后设置“皮肤”和“昵称”",
+       "apihelp-paraminfo-description": "获取关于 API 模块的信息。",
+       "apihelp-paraminfo-param-modules": "模块名称列表(action=和format=参数值,或“主”)。可通过“+”指定子模块。",
+       "apihelp-paraminfo-param-helpformat": "帮助字符串的格式。",
+       "apihelp-paraminfo-example-1": "显示[[Special:ApiHelp/parse|action=parse]]、[[Special:ApiHelp/jsonfm|format=jsonfm]]、[[Special:ApiHelp/query+allpages|action=query&list=allpages]]和[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]的信息",
+       "apihelp-parse-param-summary": "所要解析的摘要。",
+       "apihelp-parse-param-page": "解析此页的内容。不能与$1text和$1title一起使用。",
+       "apihelp-parse-param-pageid": "解析此页的内容。覆盖 $1 页。",
+       "apihelp-parse-param-redirects": "如果 $1page 或 $1 pageid 参数被设置为一个重定向,则解析它。",
+       "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖 $1page 和 $1 pageid。",
+       "apihelp-parse-param-preview": "在预览模式下解析。",
+       "apihelp-parse-param-sectionpreview": "在小节预览模式下解析 (同时要启用预览模式)。",
+       "apihelp-parse-param-disabletoc": "在输出中禁用目录。",
+       "apihelp-parse-example-page": "解析一个页面。",
+       "apihelp-parse-example-text": "解析wiki文本。",
+       "apihelp-parse-example-texttitle": "解析维基文本,指定页面标题。",
+       "apihelp-parse-example-summary": "解析一个摘要。",
+       "apihelp-patrol-description": "巡查页面或修订版本。",
+       "apihelp-patrol-param-rcid": "所要巡查的最近变更 ID。",
+       "apihelp-patrol-param-revid": "要巡查的修订版本ID。",
+       "apihelp-patrol-example-rcid": "巡查一次最近更改",
+       "apihelp-patrol-example-revid": "巡查一次修订",
+       "apihelp-protect-description": "更改页面的保护等级。",
+       "apihelp-protect-param-reason": "(解除)保护的原因。",
+       "apihelp-protect-example-protect": "保护一个页面",
+       "apihelp-purge-param-forcelinkupdate": "更新链接表。",
+       "apihelp-purge-param-forcerecursivelinkupdate": "更新链接表中,并更新任何使用此页作为模板的页面的链接表。",
+       "apihelp-purge-example-simple": "刷新“首页”和“API”页面",
+       "apihelp-purge-example-generator": "刷新主名字空间的前10个页面",
+       "apihelp-query-param-list": "要获取的列表。",
+       "apihelp-query-param-meta": "要获取的元数据。",
+       "apihelp-query-example-revisions": "获取首页的[[Special:ApiHelp/query+siteinfo|站点信息]]和[[Special:ApiHelp/query+revisions|修订版本]]",
+       "apihelp-query+allcategories-description": "枚举所有类别。",
+       "apihelp-query+allcategories-param-from": "要作为枚举起始点的类别。",
+       "apihelp-query+allcategories-param-to": "要作为枚举终止点的类别。",
+       "apihelp-query+allcategories-param-limit": "要返回多少个类别。",
+       "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
+       "apihelp-query+allfileusages-example-unique": "列出唯一性的文件标题",
+       "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者",
+       "apihelp-query+allfileusages-example-generator": "获取包含这些文件的页面",
+       "apihelp-query+allimages-description": "按顺序枚举所有图像。",
+       "apihelp-query+allimages-param-sort": "要作为排序方式的属性。",
+       "apihelp-query+allimages-param-dir": "罗列所采用的方向。",
+       "apihelp-query+allimages-param-minsize": "限于至少这么多字节的图像。",
+       "apihelp-query+allimages-param-maxsize": "限于顶多这么多字节的图像。",
+       "apihelp-query+allimages-param-sha1": "图像的 SHA1 哈希。覆盖$1sha1base36。",
+       "apihelp-query+allimages-param-limit": "共计要返回多少图像。",
+       "apihelp-query+allimages-example-B": "显示以字母“B”开始的文件列表",
+       "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面",
+       "apihelp-query+allmessages-description": "返回来自该站点的消息。",
+       "apihelp-query+allmessages-param-messages": "要输出的哪些消息。\"*\" (默认值) 表示所有消息。",
+       "apihelp-query+allmessages-param-prop": "要获取的属性。",
+       "apihelp-query+allmessages-param-lang": "返回这种语言的信息。",
+       "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
+       "apihelp-query+allmessages-example-ipb": "显示以“ipb-”开始的消息",
+       "apihelp-query+allpages-param-filterredir": "要列出哪些页面。",
+       "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
+       "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
+       "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
+       "apihelp-query+allredirects-description": "列出至一个名字空间的重定向。",
+       "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
+       "apihelp-query+allusers-param-witheditsonly": "只列出有编辑的用户。",
+       "apihelp-query+allusers-param-activeusers": "只列出最近$1天内活跃的用户。",
+       "apihelp-query+allusers-example-Y": "列出以Y开头的用户",
+       "apihelp-query+backlinks-example-simple": "显示至[[首页]]的链接",
+       "apihelp-query+backlinks-example-generator": "获取关于链接至[[首页]]的页面的信息",
+       "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
+       "apihelp-query+blocks-example-simple": "封禁列表",
+       "apihelp-query+categories-param-show": "显示何种分类。",
+       "apihelp-query+categories-param-limit": "返回多少分类。",
+       "apihelp-query+categoryinfo-example-simple": "获取有关[[:Category:Foo]]和[[:Category:Bar]]的信息",
+       "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
+       "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
+       "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
+       "apihelp-query+categorymembers-example-simple": "获取[[:Category:Physics]]中的前10个页面。",
+       "apihelp-query+categorymembers-example-generator": "获取关于[[:Category:Physics]]中的前10个页面的页面信息。",
+       "apihelp-query+contributors-example-simple": "显示[[首页]]的贡献",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
+       "apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
+       "apihelp-query+deletedrevs-example-mode1": "列出最近已删除的对首页和Talk:首页的贡献,带内容(模式1)",
+       "apihelp-query+deletedrevs-example-mode2": "列出由Bob作出的最近50次已删除贡献(模式2)",
+       "apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次讨论名字空间已删除页面(模式3):",
+       "apihelp-query+disabled-description": "此查询模块已被禁用。",
+       "apihelp-query+duplicatefiles-param-limit": "返回多少重复文件。",
+       "apihelp-query+duplicatefiles-example-simple": "查找与[[:File:Albert Einstein Head.jpg]]重复的文件",
+       "apihelp-query+duplicatefiles-example-generated": "查找所有文件的重复文件",
+       "apihelp-query+embeddedin-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+       "apihelp-query+embeddedin-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+       "apihelp-query+embeddedin-param-namespace": "列举的名字空间。",
+       "apihelp-query+embeddedin-example-simple": "显示嵌入[[Template:Stub]]的页面",
+       "apihelp-query+embeddedin-example-generator": "获取有关显示嵌入[[Template:Stub]]的页面的信息",
+       "apihelp-query+extlinks-param-limit": "返回多少链接。",
+       "apihelp-query+exturlusage-param-limit": "返回多少页面。",
+       "apihelp-query+exturlusage-example-simple": "显示链接至http://www.mediawiki.org的页面",
+       "apihelp-query+filearchive-example-simple": "显示已删除文件列表",
+       "apihelp-query+fileusage-param-limit": "返回多少。",
+       "apihelp-query+fileusage-example-simple": "获取使用[[:File:Example.jpg]]的页面列表",
+       "apihelp-query+fileusage-example-generator": "获取有关使用[[:File:Example.jpg]]的页面的信息",
+       "apihelp-query+imageinfo-description": "返回文件信息和上传历史。",
+       "apihelp-query+imageinfo-param-urlheight": "与$1urlwidth类似。",
+       "apihelp-query+images-param-limit": "返回多少文件。",
+       "apihelp-query+images-example-simple": "获取[[首页]]使用的文件列表",
+       "apihelp-query+images-example-generator": "获取有关[[首页]]使用的文件的信息",
+       "apihelp-query+imageusage-example-simple": "显示使用[[:File:Albert Einstein Head.jpg]]的页面",
+       "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
+       "apihelp-query+info-description": "获取基本页面信息。",
+       "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+       "apihelp-query+info-example-simple": "获取有关[[首页]]的信息",
+       "apihelp-query+iwbacklinks-param-prefix": "跨维基前缀。",
+       "apihelp-query+iwbacklinks-example-simple": "获取链接至[[wikibooks:Test]]的页面",
+       "apihelp-query+iwbacklinks-example-generator": "获取有关链接至[[wikibooks:Test]]的页面的信息",
+       "apihelp-query+iwlinks-param-limit": "返回多少跨wiki链接。",
+       "apihelp-query+iwlinks-param-prefix": "只返回此前缀的跨wiki链接。",
+       "apihelp-query+iwlinks-param-title": "用于搜索的跨wiki链接。必须与$1prefix一起使用。",
+       "apihelp-query+iwlinks-example-simple": "从[[首页]]获取跨wiki链接",
+       "apihelp-query+langbacklinks-param-lang": "用于语言链接的语言。",
+       "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
+       "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
+       "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
+       "apihelp-query+langlinks-example-simple": "从[[首页]]获取跨语言链接",
+       "apihelp-query+links-param-limit": "返回多少链接。",
+       "apihelp-query+links-example-simple": "从[[首页]]获取链接",
+       "apihelp-query+links-example-generator": "获取有关[[首页]]链接页面的信息",
+       "apihelp-query+linkshere-param-limit": "返回多少。",
+       "apihelp-query+linkshere-example-simple": "获取链接至[[首页]]的页面列表",
+       "apihelp-query+linkshere-example-generator": "获取有关链接至[[首页]]的页面的信息",
+       "apihelp-query+logevents-description": "从日志获取事件。",
+       "apihelp-query+pagepropnames-example-simple": "获取前10个常用名称",
+       "apihelp-query+pageprops-example-simple": "获取用于[[:Category:Foo]]的属性",
+       "apihelp-query+pageswithprop-example-simple": "列出前10个使用&#123;&#123;DISPLAYTITLE:&#125;&#125;的页面",
+       "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用_&#95;NOTOC_&#95;的页面的信息",
+       "apihelp-query+prefixsearch-param-search": "搜索字符串。",
+       "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。",
+       "apihelp-query+protectedtitles-example-simple": "受保护标题列表",
+       "apihelp-query+querypage-param-limit": "返回的结果数。",
+       "apihelp-query+querypage-example-ancientpages": "返回[[Special:Ancientpages]]的结果。",
+       "apihelp-query+random-param-namespace": "只返回这些名字空间的页面。",
+       "apihelp-query+recentchanges-description": "枚举最近更改。",
+       "apihelp-query+recentchanges-param-user": "只列出此用户的更改。",
+       "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
+       "apihelp-query+recentchanges-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+       "apihelp-query+recentchanges-example-simple": "最近更改列表",
+       "apihelp-query+redirects-example-simple": "获取至[[首页]]的重定向列表",
+       "apihelp-query+redirects-example-generator": "获取所有重定向至[[首页]]的信息",
+       "apihelp-query+revisions-example-last5": "获取“首页”的最近5次修订",
+       "apihelp-query+revisions-example-first5": "获取“首页”的前5次修订版本",
+       "apihelp-query+revisions-example-first5-after": "获取“首页”于2006年05月01日之后做出的前5次修订版本",
+       "apihelp-query+search-param-info": "要返回的元数据。",
+       "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
+       "apihelp-query+search-example-simple": "搜索“意义”",
+       "apihelp-query+search-example-text": "搜索文本“意义”",
+       "apihelp-query+siteinfo-example-simple": "获取网站信息",
+       "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
+       "apihelp-query+tags-description": "列出更改标签。",
+       "apihelp-query+tags-example-simple": "可用标签列表",
+       "apihelp-query+templates-param-limit": "返回多少模板。",
+       "apihelp-query+templates-param-templates": "只列出这些模板。对于检查某一页面使用某一模板很有用。",
+       "apihelp-query+templates-example-simple": "从[[首页]]获取模板",
+       "apihelp-query+templates-example-generator": "获取有关[[首页]]中的模板页面的信息",
+       "apihelp-query+templates-example-namespaces": "从[[首页]]获取用户和模板名字空间中的模板",
+       "apihelp-query+transcludedin-param-namespace": "至包含这些名字空间的页面。",
+       "apihelp-query+transcludedin-param-limit": "返回多少。",
+       "apihelp-query+transcludedin-example-simple": "获取嵌入[[首页]]的页面列表",
+       "apihelp-query+transcludedin-example-generator": "获取有关嵌入[[首页]]的页面的信息",
+       "apihelp-query+usercontribs-description": "获取一位用户的所有编辑。",
+       "apihelp-query+usercontribs-param-namespace": "只列出这些名字空间的贡献。",
+       "apihelp-query+usercontribs-example-user": "显示[[User:Example]]的贡献",
+       "apihelp-query+usercontribs-example-ipprefix": "显示来自“192.0.2.”前缀所有IP地址的贡献",
+       "apihelp-query+userinfo-description": "获取有关当前用户的信息。",
+       "apihelp-query+userinfo-example-simple": "获取有关当前用户的信息",
+       "apihelp-query+userinfo-example-data": "获取有关当前用户的额外信息",
+       "apihelp-query+users-description": "获取有关列出用户的信息。",
+       "apihelp-query+users-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+       "apihelp-query+users-example-simple": "返回[[User:Example]]的信息",
+       "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
+       "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
+       "apihelp-query+watchlistraw-description": "获取登录用户的监视列表的所有页面。",
+       "apihelp-query+watchlistraw-param-namespace": "只列出指定名字空间的页面。",
+       "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
+       "apihelp-rollback-example-simple": "回退由用户Example对[[首页]]做出的最近编辑",
+       "apihelp-rollback-example-summary": "回退由IP用户192.0.2.5对[[首页]]做出的最近编辑,带编辑摘要“回退破坏”,并将这些编辑和回退标记为“机器人”",
+       "apihelp-rsd-description": "导出一个RSD(Really Simple Discovery)架构",
+       "apihelp-rsd-example-simple": "导出RSD架构",
+       "apihelp-unblock-description": "解封一位用户。",
+       "apihelp-unblock-param-id": "解封时需要的封禁ID(通过list=blocks获得)。不能与$1user一起使用。",
+       "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP段。不能与$1id一起使用。",
+       "apihelp-unblock-param-reason": "解封的原因。",
+       "apihelp-unblock-example-id": "解封封禁ID#105",
+       "apihelp-unblock-example-user": "解封用户Bob,原因“抱歉Bob”",
+       "apihelp-undelete-param-title": "要恢复的页面标题。",
+       "apihelp-undelete-param-reason": "恢复的原因。",
+       "apihelp-undelete-example-page": "恢复[[首页]]",
+       "apihelp-undelete-example-revisions": "恢复[[首页]]的两个修订",
+       "apihelp-upload-param-filename": "目标文件名。",
+       "apihelp-upload-param-watch": "监视页面。",
+       "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
+       "apihelp-upload-param-file": "文件内容。",
+       "apihelp-upload-example-url": "从URL上传",
+       "apihelp-userrights-param-user": "用户名。",
+       "apihelp-userrights-param-userid": "用户ID。",
+       "apihelp-userrights-param-reason": "更改原因。",
+       "apihelp-userrights-example-user": "将用户FooBot添加至“机器人”用户组,并从“管理员”和“行政员”组移除",
+       "apihelp-watch-example-watch": "监视页面“首页”",
+       "apihelp-watch-example-unwatch": "取消监视页面“首页”",
+       "apihelp-none-description": "不输出任何东西。",
+       "apihelp-yaml-description": "以YAML格式输出数据。",
+       "api-format-title": "MediaWiki API 结果",
+       "api-orm-param-props": "要查询的字段。",
+       "api-help-title": "MediaWiki API 帮助",
+       "api-help-lead": "这是自动生成的MediaWiki API文档页面。\n\n文档和例子:https://www.mediawiki.org/wiki/API:Main_page/zh",
+       "api-help-main-header": "主模块",
+       "api-help-flag-deprecated": "此模块已弃用。",
+       "api-help-flag-internal": "<strong>此模块是内部或不稳定的。</strong>它的操作可以更改而不另行通知。",
+       "api-help-flag-readrights": "此模块需要读取权限。",
+       "api-help-flag-writerights": "此模块需要写入权限。",
+       "api-help-flag-mustbeposted": "此模块只允许POST请求。",
+       "api-help-flag-generator": "此模块可作为发生器使用。",
+       "api-help-parameters": "{{PLURAL:$1|参数}}:",
+       "api-help-param-deprecated": "不推荐使用。",
+       "api-help-param-required": "这个参数是必须的。",
+       "api-help-param-list": "{{PLURAL:$1|1=一个值|2=值(以“{{!}}”分隔)}}:$2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必须为空|可以为空,或$2}}",
+       "api-help-param-limit": "不允许超过$1。",
+       "api-help-param-limit2": "不允许超过$1个(对于机器人则是$2个)。",
+       "api-help-param-integer-min": "{{PLURAL:$1|值}}必须不少于$2。",
+       "api-help-param-integer-max": "{{PLURAL:$1|值}}必须不大于$2。",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|值}}必须介于$2和$3之间。",
+       "api-help-param-multi-separate": "通过“|”隔开各值。",
+       "api-help-param-multi-max": "值的最高数字是{{PLURAL:$1|$1}}(对于机器人则是{{PLURAL:$2|$2}})。",
+       "api-help-param-default": "默认:$1",
+       "api-help-param-default-empty": "默认:<span class=\"apihelp-empty\">(空)</span>",
+       "api-help-param-disabled-in-miser-mode": "由于[https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser模式]而禁用。",
+       "api-help-param-limited-in-miser-mode": "'''注意:'''由于[https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser模式],使用这个可能导致继续前返回少于“$1limit”个结果;极端情况下可能不会返回任何结果。",
+       "api-help-param-continue": "什么时候更多结果可用什么时候继续使用。",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(没有说明)</span>",
+       "api-help-examples": "{{PLURAL:$1|例子}}:",
+       "api-help-permissions": "{{PLURAL:$1|权限}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|授予}}:$2",
+       "api-credits-header": "制作人员",
+       "api-credits": "API 开发人员:\n* Roan Kattouw(2007年9月~2009年的开发组领导)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan(创建者,2006年9月~2007年9月的开发组领导)\n* Brad Jorsch(2013年至今的开发组领导)\n\n请将您的评论、建议和问题发送至mediawiki-api@lists.wikimedia.org,或提交错误请求在https://bugzilla.wikimedia.org/。"
+}
diff --git a/includes/api/i18n/zh-hant.json b/includes/api/i18n/zh-hant.json
new file mode 100644 (file)
index 0000000..1038f71
--- /dev/null
@@ -0,0 +1,51 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cwlin0416",
+                       "Liuxinyu970226"
+               ]
+       },
+       "apihelp-main-param-action": "要執行的動作。",
+       "apihelp-main-param-format": "輸出的格式。",
+       "apihelp-login-param-name": "使用者名稱。",
+       "apihelp-userrights-param-user": "使用者名稱。",
+       "apihelp-format-example-generic": "格式化查詢結果為 $1 格式",
+       "apihelp-dbg-description": "使用 PHP 的 var_export() 格式輸出資料。",
+       "apihelp-dbgfm-description": "使用 PHP 的 var_export() 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-dump-description": "使用 PHP 的 var_dump() 格式輸出資料。",
+       "apihelp-dumpfm-description": "使用 PHP 的 var_dump() 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-json-description": "使用 JSON 格式輸出資料。",
+       "apihelp-jsonfm-description": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-none-description": "不輸出。",
+       "apihelp-php-description": "使用序列化 PHP 格式輸出資料。",
+       "apihelp-phpfm-description": "使用序列化 PHP 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-rawfm-description": "使用 JSON 格式的除錯元素輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-txt-description": "使用 PHP 的 print_r() 格式輸出資料。",
+       "apihelp-txtfm-description": "使用 PHP 的 print_r() 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-wddx-description": "使用 WDDX 格式輸出資料。",
+       "apihelp-wddxfm-description": "使用 WDDX 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-xml-description": "使用 XML 格式輸出資料。",
+       "apihelp-xmlfm-description": "使用 XML 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-yaml-description": "使用 YAML 格式輸出資料。",
+       "apihelp-yamlfm-description": "使用 YAML 格式輸出資料 (使用 HTML 格式顯示)。",
+       "api-format-title": "MediaWiki API 結果",
+       "api-help-title": "MediaWiki API 說明",
+       "api-help-main-header": "主要模組",
+       "api-help-flag-deprecated": "此模組已停用。",
+       "api-help-flag-readrights": "此模組需要讀取權限。",
+       "api-help-flag-writerights": "此模組需要寫入權限。",
+       "api-help-flag-mustbeposted": "此模組僅接受 POST 請求。",
+       "api-help-parameters": "{{PLURAL:$1|參數}}:",
+       "api-help-param-deprecated": "已停用。",
+       "api-help-param-required": "此參數為必填。",
+       "api-help-param-limit": "不允許超過 $1。",
+       "api-help-param-limit2": "不允許超過 $1 (機器人為 $2)。",
+       "api-help-param-multi-separate": "使用 \"|\" 分隔數值。",
+       "api-help-param-default": "預設值:$1",
+       "api-help-param-default-empty": "預設值:<span class=\"apihelp-empty\">(空)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(無描述)</span>",
+       "api-help-examples": "{{PLURAL:$1|範例}}:",
+       "api-help-permissions": "{{PLURAL:$1|權限}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|已授權給}}: $2",
+       "api-credits-header": "製作群"
+}
index ab8d366..669525a 100644 (file)
@@ -953,12 +953,8 @@ class DatabaseMssql extends DatabaseBase {
                // Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
                $pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
                if ( preg_match( $pattern, $sql, $matches ) ) {
-                       // row_count = $matches[4]
                        $row_count = $matches[4];
-                       // offset = $matches[3] OR $matches[6]
-                       $offset = $matches[3] or
-                       $offset = $matches[6] or
-                       $offset = false;
+                       $offset = $matches[3] ?: $matches[6] ?: false;
 
                        // strip the matching LIMIT clause out
                        $sql = str_replace( $matches[0], '', $sql );
index 4dc693a..6e262e8 100644 (file)
@@ -442,10 +442,11 @@ interface IORMTable {
         * Takes an array of field names with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
-        * @param array $fieldNames
+        * @param string[] $fieldNames
         *
-        * @return array
+        * @return string[]
         */
        public function unprefixFieldNames( array $fieldNames );
 
@@ -453,6 +454,7 @@ interface IORMTable {
         * Takes a field name with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
         * @param string $fieldName
         *
index 31f32e5..b22df39 100644 (file)
@@ -778,15 +778,29 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * Takes an array of field names with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
-        * @param array $fieldNames
+        * @param string[] $fieldNames
         *
-        * @return array
+        * @return string[]
         */
        public function unprefixFieldNames( array $fieldNames ) {
+               wfDeprecated( __METHOD__, '1.25' );
+
+               return $this->stripFieldPrefix( $fieldNames );
+       }
+
+       /**
+        * Takes an array of field names with prefix and returns the unprefixed equivalent.
+        *
+        * @param string[] $fieldNames
+        *
+        * @return string[]
+        */
+       private function stripFieldPrefix( array $fieldNames ) {
                $start = strlen( $this->fieldPrefix );
 
-               return array_map( function( $fieldName ) use ( $start ) {
+               return array_map( function ( $fieldName ) use ( $start ) {
                        return substr( $fieldName, $start );
                }, $fieldNames );
        }
@@ -795,12 +809,15 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * Takes a field name with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
         * @param string $fieldName
         *
         * @return string
         */
        public function unprefixFieldName( $fieldName ) {
+               wfDeprecated( __METHOD__, '1.25' );
+
                return substr( $fieldName, strlen( $this->fieldPrefix ) );
        }
 
@@ -837,7 +854,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
                $result = (array)$result;
 
                $rawFields = array_combine(
-                       $this->unprefixFieldNames( array_keys( $result ) ),
+                       $this->stripFieldPrefix( array_keys( $result ) ),
                        array_values( $result )
                );
 
index c2f2223..ffc6b3b 100644 (file)
@@ -46,7 +46,7 @@ class MWDebug {
        protected static $debug = array();
 
        /**
-        * SQL statements of the databses queries.
+        * SQL statements of the database queries.
         *
         * @var array $query
         */
index f5dd1cf..f5d2445 100644 (file)
  * @file
  */
 
+if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
+       $message = <<<TXT
+MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging library</a> to be present. This library is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
+
+Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
+TXT;
+       echo $message;
+       trigger_error( $message, E_USER_ERROR );
+       die( 1 );
+}
+
 /**
  * PSR-3 logging service.
  *
@@ -198,11 +209,9 @@ class MWLogger implements \Psr\Log\LoggerInterface {
        public static function getInstance( $channel ) {
                if ( self::$spi === null ) {
                        global $wgMWLoggerDefaultSpi;
-                       if ( is_callable( $wgMWLoggerDefaultSpi ) ) {
-                               $provider = $wgMWLoggerDefaultSpi();
-                       } else {
-                               $provider = new $wgMWLoggerDefaultSpi();
-                       }
+                       $provider = ObjectFactory::getObjectFromSpec(
+                               $wgMWLoggerDefaultSpi
+                       );
                        self::registerProvider( $provider );
                }
 
index 6c38c32..33304fc 100644 (file)
  * MWLogger service provider that creates \Psr\Log\NullLogger instances.
  * A NullLogger silently discards all log events sent to it.
  *
+ * Usage:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ *   'class' => 'MWLoggerNullSpi',
+ * );
+ * @endcode
+ *
  * @see MWLogger
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
diff --git a/includes/debug/logger/legacy/Logger.php b/includes/debug/logger/legacy/Logger.php
new file mode 100644 (file)
index 0000000..5823d51
--- /dev/null
@@ -0,0 +1,318 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * PSR-3 logger that mimics the historic implementation of MediaWiki's
+ * wfErrorLog logging implementation.
+ *
+ * This logger is configured by the following global configuration variables:
+ * - `$wgDebugLogFile`
+ * - `$wgDebugLogGroups`
+ * - `$wgDBerrorLog`
+ * - `$wgDBerrorLogTZ`
+ *
+ * See documentation in DefaultSettings.php for detailed explanations of each
+ * variable.
+ *
+ * @see MWLogger
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerLegacyLogger extends \Psr\Log\AbstractLogger {
+
+       /**
+        * @var string $channel
+        */
+       protected $channel;
+
+
+       /**
+        * @param string $channel
+        */
+       public function __construct( $channel ) {
+               $this->channel = $channel;
+       }
+
+       /**
+        * Logs with an arbitrary level.
+        *
+        * @param string|int $level
+        * @param string $message
+        * @param array $context
+        */
+       public function log( $level, $message, array $context = array() ) {
+               if ( self::shouldEmit( $this->channel, $message, $context ) ) {
+                       $text = self::format( $this->channel, $message, $context );
+                       $destination = self::destination( $this->channel, $message, $context );
+                       self::emit( $text, $destination );
+               }
+       }
+
+
+       /**
+        * Determine if the given message should be emitted or not.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return bool True if message should be sent to disk/network, false
+        * otherwise
+        */
+       protected static function shouldEmit( $channel, $message, $context ) {
+               global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
+
+               if ( $channel === 'wfLogDBError' ) {
+                       // wfLogDBError messages are emitted if a database log location is
+                       // specfied.
+                       $shouldEmit = (bool)$wgDBerrorLog;
+
+               } elseif ( $channel === 'wfErrorLog' ) {
+                       // All messages on the wfErrorLog channel should be emitted.
+                       $shouldEmit = true;
+
+               } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
+                       $logConfig = $wgDebugLogGroups[$channel];
+
+                       if ( is_array( $logConfig ) && isset( $logConfig['sample'] ) ) {
+                               // Emit randomly with a 1 in 'sample' chance for each message.
+                               $shouldEmit = mt_rand( 1, $logConfig['sample'] ) === 1;
+
+                       } else {
+                               // Emit unless the config value is explictly false.
+                               $shouldEmit = $logConfig !== false;
+                       }
+
+               } elseif ( isset( $context['private'] ) && $context['private'] ) {
+                       // Don't emit if the message didn't match previous checks based on the
+                       // channel and the event is marked as private. This check discards
+                       // messages sent via wfDebugLog() with dest == 'private' and no explicit
+                       // wgDebugLogGroups configuration.
+                       $shouldEmit = false;
+               } else {
+                       // Default return value is the the same as the historic wfDebug
+                       // method: emit if $wgDebugLogFile has been set.
+                       $shouldEmit = $wgDebugLogFile != '';
+               }
+
+               return $shouldEmit;
+       }
+
+
+       /**
+        * Format a message.
+        *
+        * Messages to the 'wfDebug', 'wfLogDBError' and 'wfErrorLog' channels
+        * receive special fomatting to mimic the historic output of the functions
+        * of the same name. All other channel values are formatted based on the
+        * historic output of the `wfDebugLog()` global function.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       protected static function format( $channel, $message, $context ) {
+               global $wgDebugLogGroups;
+
+               if ( $channel === 'wfDebug' ) {
+                       $text = self::formatWfDebug( $channel, $message, $context );
+
+               } elseif ( $channel === 'wfLogDBError' ) {
+                       $text = self::formatWfLogDBError( $channel, $message, $context );
+
+               } elseif ( $channel === 'wfErrorLog' ) {
+                       $text = "{$message}\n";
+
+               } elseif ( !isset( $wgDebugLogGroups[$channel] ) ) {
+                       $text = self::formatWfDebug(
+                               $channel, "[{$channel}] {$message}", $context );
+
+               } else {
+                       // Default formatting is wfDebugLog's historic style
+                       $time = wfTimestamp( TS_DB );
+                       $wiki = wfWikiID();
+                       $host = wfHostname();
+                       $text = "{$time} {$host} {$wiki}: {$message}\n";
+               }
+               return $text;
+       }
+
+
+       /**
+        * Format a message as `wfDebug()` would have formatted it.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       protected static function formatWfDebug( $channel, $message, $context ) {
+               $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $message );
+               if ( isset( $context['prefix'] ) ) {
+                       $text = "{$context['prefix']}{$text}";
+               }
+               return "{$text}\n";
+       }
+
+
+       /**
+        * Format a message as `wfLogDBError()` would have formatted it.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       protected static function formatWfLogDBError( $channel, $message, $context ) {
+               global $wgDBerrorLogTZ;
+               static $cachedTimezone = null;
+
+               if ( $wgDBerrorLogTZ && !$cachedTimezone ) {
+                       $cachedTimezone = new DateTimeZone( $wgDBerrorLogTZ );
+               }
+
+               // Workaround for https://bugs.php.net/bug.php?id=52063
+               // Can be removed when min PHP > 5.3.6
+               if ( $cachedTimezone === null ) {
+                       $d = date_create( 'now' );
+               } else {
+                       $d = date_create( 'now', $cachedTimezone );
+               }
+               $date = $d->format( 'D M j G:i:s T Y' );
+
+               $host = wfHostname();
+               $wiki = wfWikiID();
+
+               $text = "{$date}\t{$host}\t{$wiki}\t{$message}\n";
+               return $text;
+       }
+
+
+       /**
+        * Select the appropriate log output destination for the given log event.
+        *
+        * If the event context contains 'destination'
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       protected static function destination( $channel, $message, $context ) {
+               global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
+
+               // Default destination is the debug log file as historically used by
+               // the wfDebug function.
+               $destination = $wgDebugLogFile;
+
+               if ( isset( $context['destination'] ) ) {
+                       // Use destination explicitly provided in context
+                       $destination = $context['destination'];
+
+               } elseif ( $channel === 'wfDebug' ) {
+                       $destination = $wgDebugLogFile;
+
+               } elseif ( $channel === 'wfLogDBError' ) {
+                       $destination = $wgDBerrorLog;
+
+               } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
+                       $logConfig = $wgDebugLogGroups[$channel];
+
+                       if ( is_array( $logConfig ) ) {
+                               $destination = $logConfig['destination'];
+                       } else {
+                               $destination = strval( $logConfig );
+                       }
+               }
+
+               return $destination;
+       }
+
+
+       /**
+       * Log to a file without getting "file size exceeded" signals.
+       *
+       * Can also log to UDP with the syntax udp://host:port/prefix. This will send
+       * lines to the specified port, prefixed by the specified prefix and a space.
+       *
+       * @param string $text
+       * @param string $file Filename
+       * @throws MWException
+       */
+       public static function emit( $text, $file ) {
+               if ( substr( $file, 0, 4 ) == 'udp:' ) {
+                       # Needs the sockets extension
+                       if ( preg_match( '!^udp:(?://)?\[([0-9a-fA-F:]+)\]:(\d+)(?:/(.*))?$!', $file, $m ) ) {
+                               // IPv6 bracketed host
+                               $host = $m[1];
+                               $port = intval( $m[2] );
+                               $prefix = isset( $m[3] ) ? $m[3] : false;
+                               $domain = AF_INET6;
+                       } elseif ( preg_match( '!^udp:(?://)?([a-zA-Z0-9.-]+):(\d+)(?:/(.*))?$!', $file, $m ) ) {
+                               $host = $m[1];
+                               if ( !IP::isIPv4( $host ) ) {
+                                       $host = gethostbyname( $host );
+                               }
+                               $port = intval( $m[2] );
+                               $prefix = isset( $m[3] ) ? $m[3] : false;
+                               $domain = AF_INET;
+                       } else {
+                               throw new MWException( __METHOD__ . ': Invalid UDP specification' );
+                       }
+
+                       // Clean it up for the multiplexer
+                       if ( strval( $prefix ) !== '' ) {
+                               $text = preg_replace( '/^/m', $prefix . ' ', $text );
+
+                               // Limit to 64KB
+                               if ( strlen( $text ) > 65506 ) {
+                                       $text = substr( $text, 0, 65506 );
+                               }
+
+                               if ( substr( $text, -1 ) != "\n" ) {
+                                       $text .= "\n";
+                               }
+                       } elseif ( strlen( $text ) > 65507 ) {
+                               $text = substr( $text, 0, 65507 );
+                       }
+
+                       $sock = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
+                       if ( !$sock ) {
+                               return;
+                       }
+
+                       socket_sendto( $sock, $text, strlen( $text ), 0, $host, $port );
+                       socket_close( $sock );
+               } else {
+                       wfSuppressWarnings();
+                       $exists = file_exists( $file );
+                       $size = $exists ? filesize( $file ) : false;
+                       if ( !$exists ||
+                               ( $size !== false && $size + strlen( $text ) < 0x7fffffff )
+                       ) {
+                               file_put_contents( $file, $text, FILE_APPEND );
+                       }
+                       wfRestoreWarnings();
+               }
+       }
+
+}
diff --git a/includes/debug/logger/legacy/Spi.php b/includes/debug/logger/legacy/Spi.php
new file mode 100644 (file)
index 0000000..a3d34fa
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * MWLogger service provider that creates MWLoggerLegacyLogger instances.
+ *
+ * Usage:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ *   'class' => 'MWLoggerLegacySpi',
+ * );
+ * @endcode
+ *
+ * @see MWLogger
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerLegacySpi implements MWLoggerSpi {
+
+       /**
+        * @var array $singletons
+        */
+       protected $singletons = array();
+
+
+       /**
+        * Get a logger instance.
+        *
+        * @param string $channel Logging channel
+        * @return MWLogger Logger instance
+        */
+       public function getLogger( $channel ) {
+               if ( !isset( $this->singletons[$channel] ) ) {
+                       $this->singletons[$channel] = new MWLoggerLegacyLogger( $channel );
+               }
+               return $this->singletons[$channel];
+       }
+
+}
index 1472459..02ab309 100644 (file)
@@ -168,7 +168,7 @@ class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler
                        $this->openSink();
                }
 
-               $text = (string) $record['formatted'];
+               $text = (string)$record['formatted'];
                if ( $this->useUdp() ) {
 
                        // Clean it up for the multiplexer
index fc39b25..e514715 100644 (file)
  * for any channel that isn't explicitly named in the 'loggers' configuration
  * section.
  *
- * Configuration can be specified using the $wgMWLoggerMonologSpiConfig global
- * variable.
- *
- * Example:
+ * Configuration will most typically be provided in the $wgMWLoggerDefaultSpi
+ * global configuration variable used by MWLogger to construct its default SPI
+ * provider:
  * @code
- * $wgMWLoggerMonologSpiConfig = array(
- *     'loggers' => array(
- *         '@default' => array(
- *             'processors' => array( 'wiki', 'psr', 'pid', 'uid', 'web' ),
- *             'handlers'   => array( 'stream' ),
- *         ),
- *         'runJobs' => array(
- *             'processors' => array( 'wiki', 'psr', 'pid' ),
- *             'handlers'   => array( 'stream' ),
- *         )
- *     ),
- *     'processors' => array(
- *         'wiki' => array(
- *             'class' => 'MWLoggerMonologProcessor',
- *         ),
- *         'psr' => array(
- *             'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
- *         ),
- *         'pid' => array(
- *             'class' => '\\Monolog\\Processor\\ProcessIdProcessor',
- *         ),
- *         'uid' => array(
- *             'class' => '\\Monolog\\Processor\\UidProcessor',
- *         ),
- *         'web' => array(
- *             'class' => '\\Monolog\\Processor\\WebProcessor',
- *         ),
- *     ),
- *     'handlers' => array(
- *         'stream' => array(
- *             'class'     => '\\Monolog\\Handler\\StreamHandler',
- *             'args'      => array( 'path/to/your.log' ),
- *             'formatter' => 'line',
- *         ),
- *         'redis' => array(
- *             'class'     => '\\Monolog\\Handler\\RedisHandler',
- *             'args'      => array( function() {
- *                     $redis = new Redis();
- *                     $redis->connect( '127.0.0.1', 6379 );
- *                     return $redis;
- *                 },
- *                 'logstash'
- *             ),
- *             'formatter' => 'logstash',
- *         ),
- *         'udp2log' => array(
- *             'class' => 'MWLoggerMonologHandler',
- *             'args' => array(
- *                 'udp://127.0.0.1:8420/mediawiki
- *             ),
- *             'formatter' => 'line',
- *         ),
- *     ),
- *     'formatters' => array(
- *         'line' => array(
- *             'class' => '\\Monolog\\Formatter\\LineFormatter',
- *          ),
- *          'logstash' => array(
- *              'class' => '\\Monolog\\Formatter\\LogstashFormatter',
- *              'args'  => array( 'mediawiki', php_uname( 'n' ), null, '', 1 ),
- *          ),
- *     ),
+ * $wgMWLoggerDefaultSpi = array(
+ *   'class' => 'MWLoggerMonologSpi',
+ *   'args' => array( array(
+ *       'loggers' => array(
+ *           '@default' => array(
+ *               'processors' => array( 'wiki', 'psr', 'pid', 'uid', 'web' ),
+ *               'handlers'   => array( 'stream' ),
+ *           ),
+ *           'runJobs' => array(
+ *               'processors' => array( 'wiki', 'psr', 'pid' ),
+ *               'handlers'   => array( 'stream' ),
+ *           )
+ *       ),
+ *       'processors' => array(
+ *           'wiki' => array(
+ *               'class' => 'MWLoggerMonologProcessor',
+ *           ),
+ *           'psr' => array(
+ *               'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
+ *           ),
+ *           'pid' => array(
+ *               'class' => '\\Monolog\\Processor\\ProcessIdProcessor',
+ *           ),
+ *           'uid' => array(
+ *               'class' => '\\Monolog\\Processor\\UidProcessor',
+ *           ),
+ *           'web' => array(
+ *               'class' => '\\Monolog\\Processor\\WebProcessor',
+ *           ),
+ *       ),
+ *       'handlers' => array(
+ *           'stream' => array(
+ *               'class'     => '\\Monolog\\Handler\\StreamHandler',
+ *               'args'      => array( 'path/to/your.log' ),
+ *               'formatter' => 'line',
+ *           ),
+ *           'redis' => array(
+ *               'class'     => '\\Monolog\\Handler\\RedisHandler',
+ *               'args'      => array( function() {
+ *                       $redis = new Redis();
+ *                       $redis->connect( '127.0.0.1', 6379 );
+ *                       return $redis;
+ *                   },
+ *                   'logstash'
+ *               ),
+ *               'formatter' => 'logstash',
+ *           ),
+ *           'udp2log' => array(
+ *               'class' => 'MWLoggerMonologHandler',
+ *               'args' => array(
+ *                   'udp://127.0.0.1:8420/mediawiki
+ *               ),
+ *               'formatter' => 'line',
+ *           ),
+ *       ),
+ *       'formatters' => array(
+ *           'line' => array(
+ *               'class' => '\\Monolog\\Formatter\\LineFormatter',
+ *            ),
+ *            'logstash' => array(
+ *                'class' => '\\Monolog\\Formatter\\LogstashFormatter',
+ *                'args'  => array( 'mediawiki', php_uname( 'n' ), null, '', 1 ),
+ *            ),
+ *       ),
+ *   ) ),
  * );
  * @endcode
  *
@@ -119,14 +121,9 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
 
 
        /**
-        * @param array $config Configuration data. Defaults to global
-        *     $wgMWLoggerMonologSpiConfig
+        * @param array $config Configuration data.
         */
-       public function __construct( $config = null ) {
-               if ( $config === null ) {
-                       global $wgMWLoggerMonologSpiConfig;
-                       $config = $wgMWLoggerMonologSpiConfig;
-               }
+       public function __construct( array $config ) {
                $this->config = $config;
                $this->reset();
        }
@@ -166,8 +163,8 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
                                $this->config['loggers'][$channel] :
                                $this->config['loggers']['@default'];
 
-                               $monolog = $this->createLogger( $channel, $spec );
-                               $this->singletons['loggers'][$channel] = new MWLogger( $monolog );
+                       $monolog = $this->createLogger( $channel, $spec );
+                       $this->singletons['loggers'][$channel] = new MWLogger( $monolog );
                }
 
                return $this->singletons['loggers'][$channel];
@@ -206,7 +203,8 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
        protected function getProcessor( $name ) {
                if ( !isset( $this->singletons['processors'][$name] ) ) {
                        $spec = $this->config['processors'][$name];
-                       $this->singletons['processors'][$name] = $this->instantiate( $spec );
+                       $processor = ObjectFactory::getObjectFromSpec( $spec );
+                       $this->singletons['processors'][$name] = $processor;
                }
                return $this->singletons['processors'][$name];
        }
@@ -220,7 +218,7 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
        protected function getHandler( $name ) {
                if ( !isset( $this->singletons['handlers'][$name] ) ) {
                        $spec = $this->config['handlers'][$name];
-                       $handler = $this->instantiate( $spec );
+                       $handler = ObjectFactory::getObjectFromSpec( $spec );
                        $handler->setFormatter( $this->getFormatter( $spec['formatter'] ) );
                        $this->singletons['handlers'][$name] = $handler;
                }
@@ -236,44 +234,9 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
        protected function getFormatter( $name ) {
                if ( !isset( $this->singletons['formatters'][$name] ) ) {
                        $spec = $this->config['formatters'][$name];
-                       $this->singletons['formatters'][$name] = $this->instantiate( $spec );
+                       $formatter = ObjectFactory::getObjectFromSpec( $spec );
+                       $this->singletons['formatters'][$name] = $formatter;
                }
                return $this->singletons['formatters'][$name];
        }
-
-
-       /**
-        * Instantiate the requested object.
-        *
-        * The specification array must contain a 'class' key with string value that
-        * specifies the class name to instantiate. It can optionally contain an
-        * 'args' key that provides constructor arguments.
-        *
-        * @param array $spec Object specification
-        * @return object
-        */
-       protected function instantiate( $spec ) {
-               $clazz = $spec['class'];
-               $args = isset( $spec['args'] ) ? $spec['args'] : array();
-               // If an argument is a callable, call it.
-               // This allows passing things such as a database connection to a logger.
-               $args = array_map( function ( $value ) {
-                               if ( is_callable( $value ) ) {
-                                       return $value();
-                               } else {
-                                       return $value;
-                               }
-                       }, $args );
-
-               if ( empty( $args ) ) {
-                       $obj = new $clazz();
-
-               } else {
-                       $ref = new ReflectionClass( $clazz );
-                       $obj = $ref->newInstanceArgs( $args );
-               }
-
-               return $obj;
-       }
-
 }
index 03ba0b2..02fca3d 100644 (file)
@@ -25,8 +25,9 @@
  * 'exception-nologin' as a title and 'exception-nologin-text' for the message.
  *
  * @note In order for this exception to redirect, the error message passed to the
- * constructor has to be explicitly added to LoginForm::validErrorMessages. Otherwise,
- * the user will just be shown the message rather than redirected.
+ * constructor has to be explicitly added to LoginForm::validErrorMessages or with
+ * the LoginFormValidErrorMessages hook. Otherwise, the user will just be shown the message
+ * rather than redirected.
  *
  * @par Example:
  * @code
@@ -52,7 +53,8 @@
 class UserNotLoggedIn extends ErrorPageError {
 
        /**
-        * @note The value of the $reasonMsg parameter must be put into LoginForm::validErrorMessages
+        * @note The value of the $reasonMsg parameter must be put into LoginForm::validErrorMessages or
+        * set with the LoginFormValidErrorMessages Hook.
         * if you want the user to be automatically redirected to the login form.
         *
         * @param string $reasonMsg A message key containing the reason for the error.
@@ -77,7 +79,7 @@ class UserNotLoggedIn extends ErrorPageError {
        public function report() {
                // If an unsupported message is used, don't try redirecting to Special:Userlogin,
                // since the message may not be compatible.
-               if ( !in_array( $this->msg, LoginForm::$validErrorMessages ) ) {
+               if ( !in_array( $this->msg, LoginForm::getValidErrorMessages() ) ) {
                        parent::report();
                }
 
index df8d2d4..762bc66 100644 (file)
@@ -72,9 +72,9 @@ abstract class LockManager {
        public function __construct( array $config ) {
                $this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
                if ( isset( $config['lockTTL'] ) ) {
-                       $this->lockTTL = max( 1, $config['lockTTL'] );
+                       $this->lockTTL = max( 5, $config['lockTTL'] );
                } elseif ( PHP_SAPI === 'cli' ) {
-                       $this->lockTTL = 2 * 3600;
+                       $this->lockTTL = 3600;
                } else {
                        $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
                        $this->lockTTL = max( 5 * 60, 2 * (int)$met );
index 08c9afb..9f14669 100644 (file)
@@ -1303,9 +1303,11 @@ class LocalFile extends File {
                );
                if ( $dbw->affectedRows() == 0 ) {
                        if ( $allowTimeKludge ) {
-                               # Use FOR UPDATE to ignore any transaction snapshotting
+                               # Use LOCK IN SHARE MODE to ignore any transaction snapshotting
                                $ltimestamp = $dbw->selectField( 'image', 'img_timestamp',
-                                       array( 'img_name' => $this->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+                                       array( 'img_name' => $this->getName() ),
+                                       __METHOD__,
+                                       array( 'LOCK IN SHARE MODE' ) );
                                $lUnixtime = $ltimestamp ? wfTimestamp( TS_UNIX, $ltimestamp ) : false;
                                # Avoid a timestamp that is not newer than the last version
                                # TODO: the image/oldimage tables should be like page/revision with an ID field
index da5e85c..eac9423 100644 (file)
@@ -10,6 +10,6 @@ class HTMLTagFilter extends HTMLFormField {
                        // we only need the select field, HTMLForm should handle the label
                        return $tagFilterSelector;
                }
-               return;
+               return '';
        }
 }
index 190ee04..9135393 100644 (file)
@@ -5,6 +5,7 @@
                ]
        },
        "config-information": "文訊",
+       "config-page-language": "語",
        "mainpagetext": "'''共筆臺已立'''",
        "mainpagedocfooter": "欲識維基,見[//meta.wikimedia.org/wiki/Help:Contents User's Guide]\n\n== 始 ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
 }
index 1cbe7d5..cfe4d83 100644 (file)
        "config-localsettings-cli-upgrade": "È stato scummigliato nu file <code>LocalSettings.php</code>.\nPe l'agghiurnà sta installazione, secutate <code>update.php</code>",
        "config-localsettings-key": "Chiave d'agghiurnamiento:",
        "config-localsettings-badkey": "'A chiave c'avete dato nun è curretta.",
+       "config-upgrade-key-missing": "S'è scummigliata n'installazione 'e MediaWiki ch'esisteva già.\nPe' ll'agghiurnà, nzertate pe' piacere sta riga ccà abbascio dint' 'a parta vascia d' 'o <code>LocalSettings.php</code> vuosto:\n\n$1",
+       "config-localsettings-incomplete": "'O file <code>LocalSettings.php</code> esistente pare ca fosse cumpleto a metà.\n'A variabbele $1 nun è mpustata.\nCagnate <code>LocalSettings.php</code> in modo ca sta variabbele fosse mpustata e facite clic ncopp'a \"{{int:Config-continue}}\".",
+       "config-localsettings-connection-error": "S'è truvato n'errore pe' tramente ca se faceva 'a connessione a 'o database ausanno 'e mpustaziune specificate dint'a <code>LocalSettings.php</code>. Pe' piacere curriggite sti mpustaziuni e provate n'ata vota.\n\n$1",
+       "config-session-error": "Errore facenno accumincià 'a sessione: $1",
+       "config-session-expired": "'E date d' 'a sessione pareno ammaturate.\n'E sessiune so' configurate pe na durata 'e $1.\n'A putite aumentà pe' bbìa 'e na mpustazione  <code>session.gc_maxlifetime</code> dint' 'o file php.ini.\nRiabbìa 'o prucesso 'e installazione.",
+       "config-no-session": "'E date d' 'a sessione so' state perdute!\nCuntrullate 'o file php.ini vuosto e assicurateve ca 'a <code>session.save_path</code> è stata mpustata ncopp'a na cartella appropriata.",
+       "config-your-language": "'A lengua vosta:",
+       "config-your-language-help": "Scigliete na lengua pe' l'ausà pe' tramente ca se fa 'o prucesso 'installazione.",
+       "config-wiki-language": "Lengua d' 'o wiki:",
+       "config-wiki-language-help": "Scigliete 'a lengua ca sarrà ausàta prevalentemente ncopp' 'a wiki.",
+       "config-back": "← Arreto",
+       "config-continue": "Annanze →",
+       "config-page-language": "Lengua",
+       "config-page-welcome": "Bemmenute a MediaWiki!",
+       "config-page-dbconnect": "Connessione a 'o database",
+       "config-page-upgrade": "Agghiuorna l'istallazione esistente",
+       "config-page-dbsettings": "Mpustaziune d' 'o database",
+       "config-page-name": "Nomme",
+       "config-page-options": "Opziune",
+       "config-page-install": "Installa",
+       "config-page-complete": "Cumpreta!",
+       "config-page-restart": "Riabbìa l'installazione",
+       "config-page-readme": "Lieggeme",
+       "config-page-releasenotes": "Note 'e verziona",
+       "config-page-copying": "Copia",
+       "config-page-upgradedoc": "Agghiurnanno",
+       "config-page-existingwiki": "Wiki esistente",
+       "config-help-restart": "Vulite scancellà tutt' 'e date astipate c'avite nzertato e riabbià 'o prucesso d'installazione?",
+       "config-restart": "Sì, riabbìa",
+       "config-welcome": "=== Cuntrollo 'e ll'ambiente ===\nSarranno eseguite 'e cuntrolle bbase pe' putè vedè si st'ambiente è adatto pe' ne ffà l'installazione 'e MediaWiki.\nArricurdateve d'includere sti nfurmaziune si spiate assistenza ncopp' 'a maniera 'e cumpletà l'installazione.",
+       "config-copyright": "=== Copyright e termine ===\n\n$1\n\nChistu programma è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nChistu programma è destribbuito c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICOLARE.\nIate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nCu stu programma avísseve 'a ricevere <doclink href=Copying>na copia d' 'a Licienza GNU GPL</doclink> cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html liggite sta paggena ncopp' 'a l'Internet].",
+       "config-sidebar": "* [//www.mediawiki.org Paggina prencepale MediaWiki]\n* [//www.mediawiki.org/wiki/Aiuto:Guida a 'e cuntenute pe' l'utente]\n* [//www.mediawiki.org/wiki/Manuale:Guida a 'e cuntenute pe l'ammenistrature]\n* [//www.mediawiki.org/wiki/Manuale:FAQ FAQ]\n----\n* <doclink href=Readme>Lieggeme</doclink>\n* <doclink href=ReleaseNotes>Note 'e verziona</doclink>\n* <doclink href=Copying>Copie</doclink>\n* <doclink href=UpgradeDoc>Agghiurnamento</doclink>",
+       "config-env-good": "L'ambiente è stato cuntrullato.\nÈ pussibbele installare MediaWiki.",
+       "config-env-bad": "L'ambiente è stato cuntrullato.\nNun se può installà MediaWiki.",
+       "config-env-php": "PHP $1 è installato.",
+       "config-env-hhvm": "HHVM $1 è installato.",
+       "config-unicode-using-utf8": "Aúsa Brion Vibber's utf8_normalize.so pe' ne fà 'a normalizzazione Unicode.",
+       "config-unicode-using-intl": "Aúsa [http://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.",
+       "config-unicode-pure-php-warning": "<strong>Attenziò:</strong> L' [http://pecl.php.net/intl estensione intl PECL] nun è disponibbele pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].",
+       "config-unicode-update-warning": "<strong>Attenziò:</strong> 'A verziona installata 'e normalizzazione Unicode aùsa 'a verziona viecchia d' 'o [http://site.icu-project.org/ pruggetto ICU].\nV'avite 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agghiurnà] si state a penzà ncopp' 'o fatto d'ausà Unicode.",
+       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n'E furmatte 'e database ccà annanze songo suppurtate: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
+       "config-outdated-sqlite": "'''Attenziò''': tenite 'o SQLite $1 pe' tramente ca ce vulesse 'a verziona $2, SQLite nun sarrà disponibbele.",
+       "config-memory-raised": "'O valore 'e PHP <code>memory_limit</code> è $1, aumentato a $2.",
+       "config-memory-bad": "<strong>Attenziò:</strong> 'o valore 'e PHP <code>memory_limit</code> è $1.\nProbabbilmente troppo basso.\n'A installazione se putesse scassà!",
+       "config-ctype": "'''Errore''': 'o PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
+       "config-iconv": "<strong>Fatale:</strong> PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/en/iconv.installation.php estensione iconv].",
+       "config-diff3-bad": "GNU diff3 nun truvato.",
+       "config-git": "Truvato software 'e cuntrollo d' 'a verziona Git: <code>$1</code>.",
+       "config-git-bad": "Software 'e cuntrollo d' 'a verziona Git nun truvato.",
+       "config-imagemagick": "Truvato ImageMagick: <code>$1</code>.\n'E miniature d' 'e fiùre sarranno prisente si l'upload song'abbiàte.",
+       "config-gd": "Truvata 'a bibblioteca ntegrata GD Graphics.\n'E miniature 'e ll'immaggene sarranno prisente si l'upload se song'abbiàte.",
+       "config-no-scaling": "Nun se può truvà 'a bibblioteca GD o ImageMagick.\n'E miniature 'e l'immaggene sarranno stutate.",
+       "config-no-uri": "<strong>Errore:</strong> Nun se può determina l'URI 'e mmò.\nInstallazione interrotta.",
+       "config-db-port": "Porta d' 'o database:",
+       "config-db-schema": "Schema pe' MediaWiki:",
+       "config-db-schema-help": "Stu schema 'n genere sarrà buono.\nSi 'o vulite cagnà facite sulamente si ne tenite abbesuogno.",
+       "config-pg-test-error": "Nun se può connettà a 'o database <strong>$1</strong>: $2",
+       "config-sqlite-dir": "Cartella 'e data 'e SQLite:",
+       "config-oracle-def-ts": "Tablespace 'e default:",
+       "config-oracle-temp-ts": "Tablespace temporaneo:",
+       "config-type-mysql": "MySQL (o compatibbele)",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-header-mysql": "Mpustaziune MySQL",
+       "config-header-postgres": "Mpustaziune PostgreSQL",
+       "config-header-sqlite": "Mpustaziune SQLite",
+       "config-header-oracle": "Mpustaziune Oracle",
+       "config-header-mssql": "Mpustaziune 'e Microsoft SQL Server",
+       "config-invalid-db-type": "'O tipo 'e database nun è buono.",
        "config-mssql-install-auth": "Sceglie 'o tipo d'autenticazziona ca s'ausarrà pe cunnettà â database, durante ll'operazziona d'istallazziona. Si piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
        "config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d&#39;'a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate."
 }
index b9ed0ea..9cf7006 100644 (file)
        "config-restart": "Ja, opnieuw starten",
        "config-welcome": "=== Controle omgeving ===\nEr worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.\nLever deze gegevens dan ook aan indien u support vraagt bij de installatie.",
        "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoort u een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
-       "config-sidebar": "* [//www.mediawiki.org MediaWiki thuispagina]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veel gestelde vragen] (Engelstalig)\n----\n* <doclink href=Readme>Leesmij</doclink> (Engelstalig)\n* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)\n* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)\n* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)",
+       "config-sidebar": "* [//www.mediawiki.org MediaWiki thuispagina]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen] (Engelstalig)\n----\n* <doclink href=Readme>Leesmij</doclink> (Engelstalig)\n* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)\n* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)\n* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)",
        "config-env-good": "De omgeving is gecontroleerd.\nU kunt MediaWiki installeren.",
        "config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.",
        "config-env-php": "PHP $1 is op dit moment geïnstalleerd.",
+       "config-env-hhvm": "HHVM $1 is geïnstalleerd.",
        "config-unicode-using-utf8": "Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.",
        "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
        "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].",
@@ -65,6 +66,8 @@
        "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP. U moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls u een gedeelde omgeving gebruikt, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren.\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.",
        "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
        "config-no-fts3": "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
+       "config-register-globals-error": "<strong>Fout: de optie <code>[http://php.net/register_globals register_globals]</code> van PHP is ingeschakeld.\nDeze optie moet uitgeschakeld zijn om door te kunnen gaan met de installatie.</strong>\nOp de pagina [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] staat beschreven hoe u dit kunt doen.",
+       "config-magic-quotes-gpc": "<strong>Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] is actief!<strong>\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-magic-quotes-runtime": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
@@ -75,6 +78,7 @@
        "config-memory-raised": "PHP's <code>memory_limit</code> is $1 en is verhoogd tot $2.",
        "config-memory-bad": "'''Waarschuwing:''' PHP's <code>memory_limit</code> is $1.\nDit is waarschijnlijk te laag.\nDe installatie kan mislukken!",
        "config-ctype": "'''Fataal:''' PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/ctype.installation.php extensie Ctype].",
+       "config-iconv": "<strong>Onherstelbare fout:</strong> PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/iconv.installation.php uitbreiding iconv].",
        "config-json": "'''Fatale fout:''' PHP is gecompileerd zonder ondersteuning voor JSON.\nU moet de PHP-extensie JSON installeren of de extensie [http://pecl.php.net/package/jsonc PECL jsonc] voordat u MediaWiki installeert.\n* De PHP-extensie is beschikbaar in Red Hat Enterprise Linux (CentOS) 5 en 6, maar moet ingeschakeld worden <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Sommige Linuxdistributies die zijn uitgebracht na mei 2013 hebben de PHP-extensie niet, maar hebben een package voor de PECL-extensie als <code>php5-json</code> of <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd",
        "config-apc": "[http://www.php.net/apc APC] is op dit moment geïnstalleerd",
        "config-license-gfdl": "GNU Free Documentation License 1.3 of hoger",
        "config-license-pd": "Publiek domein",
        "config-license-cc-choose": "Een Creative Commons-licentie selecteren",
-       "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
+       "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
        "config-email-settings": "E-mailinstellingen",
        "config-enable-email": "Uitgaande e-mail inschakelen",
        "config-enable-email-help": "Als u wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.",
        "config-extensions": "Uitbreidingen",
        "config-extensions-help": "De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.\n\nMogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.",
        "config-skins": "Vormgevingen",
+       "config-skins-help": "De hierboven weergegeven uiterlijken zijn aangetroffen in de map <code>./skins</code>. U moet tenminste één uiterlijk inschakelen en het standaard uiterlijk kiezen.",
        "config-skins-use-as-default": "Als standaard vormgeving instellen",
+       "config-skins-missing": "Er zijn geen uiterlijken aangetroffen. MediaWiki gebruikt een basisuiterlijk totdat u een uiterlijk installeert.",
        "config-skins-must-enable-some": "U moet minstens één vormgeving kiezen om in te schakelen.",
        "config-skins-must-enable-default": "De vormgeving gekozen als standaard moet ingeschakeld zijn.",
        "config-install-alreadydone": "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.\nGa door naar de volgende pagina.",
        "config-install-stats": "Statistieken initialiseren",
        "config-install-keys": "Bezig met aanmaken van geheime sleutels",
        "config-insecure-keys": "'''Waarschuwing:''' De {{PLURAL:$2|sleutel die is aangemaakt|sleutels die zijn aangemaakt}} ($1) tijdens de installatie {{PLURAL:$2|is|zijn}} niet volledig veilig. Overweeg deze handmatig te wijzigen.",
+       "config-install-updates": "Voorkomen dat updates onnodig worden uitgevoerd",
+       "config-install-updates-failed": "<strong>Fout:</strong> het toevoegen van updatesleutels aan tabellen is mislukt met de volgende fout: $1",
        "config-install-sysop": "Gebruiker voor beheerder aanmaken",
        "config-install-subscribe-fail": "Het is niet mogelijk te abonneren op mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL is niet geïnstalleerd en <code>allow_url_fopen</code> is niet beschikbaar.",
index ad6bca7..a22f94d 100644 (file)
@@ -37,7 +37,7 @@
        "config-env-good": "Prostredie bolo skontrolované.\nMôžete nainštalovať MediaWiki.",
        "config-env-bad": "Prostredie bolo skontrolované.\nNemôžete nainštalovať MediaWiki.",
        "config-env-php": "PHP $1 je nainštalované.",
-       "config-env-php-toolow": "PHP $1 je nainštalované. Avšak, MediaWiki vyžaduje PHP $2 alebo vyššie.",
+       "config-env-hhvm": "HHVM $1 je nainštalované.",
        "config-db-type": "Typ databázy:",
        "config-db-host": "Databázový server:",
        "config-db-host-oracle": "Databázové TNS:",
        "config-missing-db-name": "Musíte zadať hodnotu pre \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Musíte zadať hodnotu pre \"{{int:config-db-host}}\".",
        "config-missing-db-server-oracle": "Musíte zadať hodnotu pre \"{{int:config-db-host-oracle}}\".",
+       "config-admin-box": "Účet správcu",
        "config-admin-name": "Vaše používateľské meno:",
        "config-admin-password": "Heslo:",
-       "config-admin-password-confirm": "Zopakuj heslo:",
+       "config-admin-password-confirm": "Zopakujte heslo:",
        "config-admin-name-blank": "Zadajte používateľské meno správcu.",
        "config-admin-name-invalid": "Zadané používateľské meno \"<nowiki>$1</nowiki>\" je neplatné. \nZadajte iné meno.",
        "config-admin-password-blank": "Zadajte heslo ku správcovskému účtu.",
index 9a894c2..4b83500 100644 (file)
@@ -50,7 +50,6 @@
        "config-env-good": "Nasuri na ang kapaligiran.\nMailuluklok mo ang MediaWiki.",
        "config-env-bad": "Nasuri na ang kapaligiran.\nHindi mo mailuklok ang MediaWiki.",
        "config-env-php": "Naitalaga ang PHP na $1.",
-       "config-env-php-toolow": "Naitalaga ang PHP $1.\nSubalit, nangangailangan ang MediaWiki ng PHP $2 o mas mataas pa.",
        "config-unicode-using-utf8": "Ginagamit ang utf8_normalize.so ni Brion Vibber para sa pagpapanormal ng Unikodigo.",
        "config-unicode-using-intl": "Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.",
        "config-unicode-pure-php-warning": "'''Babala''': Ang [http://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.\nKapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
@@ -58,7 +57,6 @@
        "config-no-db": "Hindi matagpuan ang isang angkop na tagapagmaneho ng kalipunan ng datos! Kailangan mong magluklok ng isang tagapagmaneho ng kalipunan ng dato para sa PHP.\nTinatangkilik ang sumusunod na mga uri ng kalipunan ng dato: $1.\n\nKung ikaw ay nasa isang pinagsasaluhang pagpapasinaya, hilingin sa iyong tagapagbigay ng pagpapasinaya na iluklok ang isang angkop na tagapagmaneho ng kalipunan ng dato.\nKung ikaw mismo ang nangalap ng PHP, muling isaayos ito na pinagagana ang isang kliyente ng kalipunan ng dato, halimbawa na ang paggamit ng <code>./configure --with-mysql</code>.\nKung iniluklok mo ang PHP mula sa isang pakete ng Debian o Ubuntu, kung gayon kailangan mo ring magluklok ng modyul na php5-mysql.",
        "config-outdated-sqlite": "'''Babala''': mayroong kang $1 ng SQLite, na mas mababa kaysa sa pinaka mababang kailangang bersiyon na $2. Magiging hindi makukuha ang SQLite.",
        "config-no-fts3": "'''Warning''': Ang SQLite ay hindi itinala at tinipon na wala ang [//sqlite.org/fts3.html modulong FTS3], ang mga tampok na panghanap ay magiging hindi makukuha sa ibabaw ng panlikod na dulong ito.",
-       "config-register-globals": "'''Babala: Ang mapipili na <code>[http://php.net/register_globals register_globals]</code> ng PHP ay pinagagana.'''\n'''Huwag paganahin kung kaya mo.'''\nAandar ang MediaWiki, subalit ang tagapaghain mo ay nakalantad sa maaaring maganap na mga kahinaang pangkatiwasayan.",
        "config-magic-quotes-runtime": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nAng piniling ito ay hindi mahuhulaan na pipinsala sa lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na gumagana ang pinili na ito.",
        "config-magic-quotes-sybase": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nHindi mahuhulaan na sinisira ng napiling ito ang lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
        "config-mbstring": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nAng napiling ito ay nagdurulot ng mga kamalian at maaaring sumira nang hindi nahuhulaan ang dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
diff --git a/includes/libs/ObjectFactory.php b/includes/libs/ObjectFactory.php
new file mode 100644 (file)
index 0000000..ee696c3
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Construct objects from configuration instructions.
+ *
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class ObjectFactory {
+
+       /**
+        * Instantiate an object based on a specification array.
+        *
+        * The specification array must contain a 'class' key with string value
+        * that specifies the class name to instantiate or a 'factory' key with
+        * a callable (is_callable() === true). It can optionally contain
+        * an 'args' key that provides arguments to pass to the
+        * constructor/callable.
+        *
+        * Object construction using a specification having both 'class' and
+        * 'args' members will call the constructor of the class using
+        * ReflectionClass::newInstanceArgs. The use of ReflectionClass carries
+        * a performance penalty and should not be used to create large numbers of
+        * objects. If this is needed, consider introducing a factory method that
+        * can be called via call_user_func_array() instead.
+        *
+        * Values in the arguments collection which are Closure instances will be
+        * expanded by invoking them with no arguments before passing the
+        * resulting value on to the constructor/callable. This can be used to
+        * pass DatabaseBase instances or other live objects to the
+        * constructor/callable.
+        *
+        * @param array $spec Object specification
+        * @return object
+        * @throws InvalidArgumentException when object specification does not
+        * contain 'class' or 'factory' keys
+        * @throws ReflectionException when 'args' are supplied and 'class'
+        * constructor is non-public or non-existant
+        */
+       public static function getObjectFromSpec( $spec ) {
+               $args = isset( $spec['args'] ) ? $spec['args'] : array();
+
+               $args = array_map( function ( $value ) {
+                       if ( is_object( $value ) && $value instanceof Closure ) {
+                               // If an argument is a Closure, call it.
+                               return $value();
+                       } else {
+                               return $value;
+                       }
+               }, $args );
+
+               if ( isset( $spec['class'] ) ) {
+                       $clazz = $spec['class'];
+                       if ( !$args ) {
+                               $obj = new $clazz();
+                       } else {
+                               $ref = new ReflectionClass( $clazz );
+                               $obj = $ref->newInstanceArgs( $args );
+                       }
+               } elseif ( isset( $spec['factory'] ) ) {
+                       $obj = call_user_func_array( $spec['factory'], $args );
+               } else {
+                       throw new InvalidArgumentException(
+                               'Provided specification lacks both factory and class parameters.'
+                       );
+               }
+
+               return $obj;
+       }
+}
old mode 100644 (file)
new mode 100755 (executable)
index 70f1f1a..8421672 100644 (file)
@@ -535,7 +535,23 @@ class LogEventsList extends ContextSource {
                        $pager->mLimit = $lim;
                }
 
-               $logBody = $pager->getBody();
+               $logBody = null;
+               // Check if we can avoid the DB query all together
+               if ( $page !== '' && !$param['useMaster'] ) {
+                       $title = ( $page instanceof Title ) ? $page : Title::newFromText( $page );
+                       if ( $title ) {
+                               $member = $title->getNamespace() . ':' . $title->getDBkey();
+                               if ( !BloomCache::get( 'main' )->check( wfWikiId(), 'TitleHasLogs', $member ) ) {
+                                       $logBody = '';
+                               }
+                       } else {
+                               $logBody = '';
+                       }
+               }
+
+               // Fetch the log rows and build the HTML if needed
+               $logBody = ( $logBody === null ) ? $pager->getBody() : $logBody;
+
                $s = '';
 
                if ( $logBody ) {
index d8d86db..3585e57 100644 (file)
@@ -322,9 +322,7 @@ class SqlBagOStuff extends BagOStuff {
                        if ( $exptime == 0 ) {
                                $encExpiry = $this->getMaxDateTime( $db );
                        } else {
-                               if ( $exptime < 3.16e8 ) { # ~10 years
-                                       $exptime += time();
-                               }
+                               $exptime = $this->convertExpiry( $exptime );
                                $encExpiry = $db->timestamp( $exptime );
                        }
                        foreach ( $serverKeys as $tableName => $tableKeys ) {
@@ -377,10 +375,7 @@ class SqlBagOStuff extends BagOStuff {
                        if ( $exptime == 0 ) {
                                $encExpiry = $this->getMaxDateTime( $db );
                        } else {
-                               if ( $exptime < 3.16e8 ) { # ~10 years
-                                       $exptime += time();
-                               }
-
+                               $exptime = $this->convertExpiry( $exptime );
                                $encExpiry = $db->timestamp( $exptime );
                        }
                        // (bug 24425) use a replace if the db supports it instead of
@@ -421,9 +416,7 @@ class SqlBagOStuff extends BagOStuff {
                        if ( $exptime == 0 ) {
                                $encExpiry = $this->getMaxDateTime( $db );
                        } else {
-                               if ( $exptime < 3.16e8 ) { # ~10 years
-                                       $exptime += time();
-                               }
+                               $exptime = $this->convertExpiry( $exptime );
                                $encExpiry = $db->timestamp( $exptime );
                        }
                        // (bug 24425) use a replace if the db supports it instead of
index 54fab29..7900b2c 100644 (file)
@@ -1248,16 +1248,12 @@ class Article implements Page {
                wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
 
                # Show delete and move logs
-               $member = $title->getNamespace() . ':' . $title->getDBkey();
-               // @todo: move optimization to showLogExtract()?
-               if ( BloomCache::get( 'main' )->check( wfWikiId(), 'TitleHasLogs', $member ) ) {
-                       LogEventsList::showLogExtract( $outputPage, $logTypes, $title, '',
-                               array( 'lim' => 10,
-                                       'conds' => $conds,
-                                       'showIfEmpty' => false,
-                                       'msgKey' => array( 'moveddeleted-notice' ) )
-                       );
-               }
+               LogEventsList::showLogExtract( $outputPage, $logTypes, $title, '',
+                       array( 'lim' => 10,
+                               'conds' => $conds,
+                               'showIfEmpty' => false,
+                               'msgKey' => array( 'moveddeleted-notice' ) )
+               );
 
                if ( !$this->mPage->hasViewableContent() && $wgSend404Code && !$validUserPage ) {
                        // If there's no backing content, send a 404 Not Found
index 3ffa16c..df868ea 100644 (file)
@@ -135,7 +135,7 @@ class CoreTagHooks {
        public static function indicator( $content, array $attributes, Parser $parser, PPFrame $frame ) {
                if ( !isset( $attributes['name'] ) || trim( $attributes['name'] ) === '' ) {
                        return '<span class="error">' .
-                               wfMessage( 'invalid-indicator-name' )->inContentLanguage()->text() .
+                               wfMessage( 'invalid-indicator-name' )->inContentLanguage()->parse() .
                                '</span>';
                }
 
index 0ba407f..afa5cac 100644 (file)
@@ -38,7 +38,7 @@ class MWOldPassword extends ParameterizedPassword {
        public function crypt( $plaintext ) {
                global $wgPasswordSalt;
 
-               if ( $wgPasswordSalt && count( $this->args ) == 1 ) {
+               if ( $wgPasswordSalt && count( $this->args ) === 1 ) {
                        $this->hash = md5( $this->args[0] . '-' . md5( $plaintext ) );
                } else {
                        $this->args = array();
index 4d6e415..187f895 100644 (file)
@@ -83,10 +83,14 @@ abstract class ParameterizedPassword extends Password {
        }
 
        public function toString() {
-               return
-                       ':' . $this->config['type'] . ':' .
-                       implode( $this->getDelimiter(), array_merge( $this->params, $this->args ) ) .
-                       $this->getDelimiter() . $this->hash;
+               $str = ':' . $this->config['type'] . ':';
+
+               if ( count( $this->params ) || count( $this->args ) ) {
+                       $str .= implode( $this->getDelimiter(), array_merge( $this->params, $this->args ) );
+                       $str .= $this->getDelimiter();
+               }
+
+               return $str . $this->hash;
        }
 
        /**
index 418b5d4..aaf899f 100644 (file)
@@ -143,14 +143,10 @@ abstract class Profiler {
                        if ( is_array( $wgProfiler ) ) {
                                if ( !isset( $wgProfiler['class'] ) ) {
                                        $class = 'ProfilerStub';
-                               } elseif ( $wgProfiler['class'] === 'Profiler' ) {
-                                       $class = 'ProfilerStub'; // b/c; don't explode
                                } else {
                                        $class = $wgProfiler['class'];
                                }
                                self::$__instance = new $class( $wgProfiler );
-                       } elseif ( $wgProfiler instanceof Profiler ) {
-                               self::$__instance = $wgProfiler; // back-compat
                        } else {
                                self::$__instance = new ProfilerStub( array() );
                        }
diff --git a/includes/profiler/ProfilerMwprof.php b/includes/profiler/ProfilerMwprof.php
deleted file mode 100644 (file)
index 83fed28..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-/**
- * Profiler class for Mwprof.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Profiler
- */
-
-/**
- * Profiler class for Mwprof.
- *
- * Mwprof is a high-performance MediaWiki profiling data collector, designed to
- * collect profiling data from multiple hosts running in tandem. This class
- * serializes profiling samples into MessagePack arrays and sends them to an
- * Mwprof instance via UDP.
- *
- * @see https://github.com/wikimedia/operations-software-mwprof
- * @since 1.23
- */
-class ProfilerMwprof extends Profiler {
-       /** @var array Queue of open profile calls with start data */
-       protected $mWorkStack = array();
-
-       /** @var array Map of (function name => aggregate data array) */
-       protected $mCollated = array();
-       /** @var array Cache of a standard broken collation entry */
-       protected $mErrorEntry;
-
-       // Message types
-       const TYPE_SINGLE = 1;
-       const TYPE_RUNNING = 2;
-
-       public function isStub() {
-               return false;
-       }
-
-       public function isPersistent() {
-               return true;
-       }
-
-       /**
-        * Start a profiling section.
-        *
-        * Marks the beginning of the function or code-block that should be time
-        * and logged under some specific name.
-        *
-        * @param string $inName Section to start
-        */
-       public function profileIn( $inName ) {
-               $this->mWorkStack[] = array( $inName, count( $this->mWorkStack ),
-                       $this->getTime(), $this->getTime( 'cpu' ), 0 );
-       }
-
-       /**
-        * Close a profiling section.
-        *
-        * Marks the end of the function or code-block that should be timed and
-        * logged under some specific name.
-        *
-        * @param string $outName Section to close
-        */
-       public function profileOut( $outName ) {
-               list( $inName, , $inWall, $inCpu ) = array_pop( $this->mWorkStack );
-
-               // Check for unbalanced profileIn / profileOut calls.
-               // Bad entries are logged but not sent.
-               if ( $inName !== $outName ) {
-                       $this->debugGroup( 'ProfilerUnbalanced', json_encode( array( $inName, $outName ) ) );
-                       return;
-               }
-
-               $elapsedCpu = $this->getTime( 'cpu' ) - $inCpu;
-               $elapsedWall = $this->getTime() - $inWall;
-               $this->updateRunningEntry( $outName, $elapsedCpu, $elapsedWall );
-               $this->trxProfiler->recordFunctionCompletion( $outName, $elapsedWall );
-       }
-
-       /**
-        * Update an entry with timing data.
-        *
-        * @param string $name Section name
-        * @param float $elapsedCpu Elapsed CPU time
-        * @param float $elapsedWall Elapsed wall-clock time
-        */
-       public function updateRunningEntry( $name, $elapsedCpu, $elapsedWall ) {
-               // If this is the first measurement for this entry, store plain values.
-               // Many profiled functions will only be called once per request.
-               if ( !isset( $this->mCollated[$name] ) ) {
-                       $this->mCollated[$name] = array(
-                               'cpu'   => $elapsedCpu,
-                               'wall'  => $elapsedWall,
-                               'count' => 1,
-                       );
-                       return;
-               }
-
-               $entry = &$this->mCollated[$name];
-
-               // If it's the second measurement, convert the plain values to
-               // RunningStat instances, so we can push the incoming values on top.
-               if ( $entry['count'] === 1 ) {
-                       $cpu = new RunningStat();
-                       $cpu->push( $entry['cpu'] );
-                       $entry['cpu'] = $cpu;
-
-                       $wall = new RunningStat();
-                       $wall->push( $entry['wall'] );
-                       $entry['wall'] = $wall;
-               }
-
-               $entry['count']++;
-               $entry['cpu']->push( $elapsedCpu );
-               $entry['wall']->push( $elapsedWall );
-       }
-
-       /**
-        * @return array
-        */
-       public function getRawData() {
-               // This method is called before shutdown in the footer method on Skins.
-               // If some outer methods have not yet called wfProfileOut(), work around
-               // that by clearing anything in the work stack to just the "-total" entry.
-               if ( count( $this->mWorkStack ) > 1 ) {
-                       $oldWorkStack = $this->mWorkStack;
-                       $this->mWorkStack = array( $this->mWorkStack[0] ); // just the "-total" one
-               } else {
-                       $oldWorkStack = null;
-               }
-               $this->close();
-               // If this trick is used, then the old work stack is swapped back afterwards.
-               // This means that logData() will still make use of all the method data since
-               // the missing wfProfileOut() calls should be made by the time it is called.
-               if ( $oldWorkStack ) {
-                       $this->mWorkStack = $oldWorkStack;
-               }
-
-               $totalWall = 0.0;
-               $profile = array();
-               foreach ( $this->mCollated as $fname => $data ) {
-                       if ( $data['count'] == 1 ) {
-                               $profile[] = array(
-                                       'name' => $fname,
-                                       'calls' => $data['count'],
-                                       'elapsed' => $data['wall'] * 1000,
-                                       'memory' => 0, // not supported
-                                       'min' => $data['wall'] * 1000,
-                                       'max' => $data['wall'] * 1000,
-                                       'overhead' => 0, // not supported
-                                       'periods' => array() // not supported
-                               );
-                               $totalWall += $data['wall'];
-                       } else {
-                               $profile[] = array(
-                                       'name' => $fname,
-                                       'calls' => $data['count'],
-                                       'elapsed' => $data['wall']->n * $data['wall']->getMean() * 1000,
-                                       'memory' => 0, // not supported
-                                       'min' => $data['wall']->min * 1000,
-                                       'max' => $data['wall']->max * 1000,
-                                       'overhead' => 0, // not supported
-                                       'periods' => array() // not supported
-                               );
-                               $totalWall += $data['wall']->n * $data['wall']->getMean();
-                       }
-               }
-               $totalWall = $totalWall * 1000;
-
-               foreach ( $profile as &$item ) {
-                       $item['percent'] = $totalWall ? 100 * $item['elapsed'] / $totalWall : 0;
-               }
-
-               return $profile;
-       }
-
-       /**
-        * Serialize profiling data and send to a profiling data aggregator.
-        *
-        * Individual entries are represented as arrays and then encoded using
-        * MessagePack, an efficient binary data-interchange format. Encoded
-        * entries are accumulated into a buffer and sent in batch via UDP to the
-        * profiling data aggregator.
-        */
-       public function logData() {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort;
-
-               $this->close();
-
-               if ( !function_exists( 'socket_create' ) ) {
-                       return; // avoid fatal
-               }
-
-               $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
-               socket_connect( $sock, $wgUDPProfilerHost, $wgUDPProfilerPort );
-               $bufferLength = 0;
-               $buffer = '';
-               foreach ( $this->mCollated as $name => $entry ) {
-                       $count = $entry['count'];
-                       $cpu = $entry['cpu'];
-                       $wall = $entry['wall'];
-
-                       if ( $count === 1 ) {
-                               $data = array( self::TYPE_SINGLE, $name, $cpu, $wall );
-                       } else {
-                               $data = array( self::TYPE_RUNNING, $name, $count,
-                                       $cpu->m1, $cpu->m2, $cpu->min, $cpu->max,
-                                       $wall->m1, $wall->m2, $wall->min, $wall->max );
-                       }
-
-                       $encoded = MWMessagePack::pack( $data );
-                       $length = strlen( $encoded );
-
-                       // If adding this entry would cause the size of the buffer to
-                       // exceed the standard ethernet MTU size less the UDP header,
-                       // send all pending data and reset the buffer. Otherwise, continue
-                       // accumulating entries into the current buffer.
-                       if ( $length + $bufferLength > 1450 ) {
-                               socket_send( $sock, $buffer, $bufferLength, 0 );
-                               $buffer = '';
-                               $bufferLength = 0;
-                       }
-                       $buffer .= $encoded;
-                       $bufferLength += $length;
-               }
-               if ( $bufferLength !== 0 ) {
-                       socket_send( $sock, $buffer, $bufferLength, 0 );
-               }
-       }
-
-       /**
-        * Close opened profiling sections
-        */
-       public function close() {
-               while ( count( $this->mWorkStack ) ) {
-                       $this->profileOut( 'close' );
-               }
-       }
-
-       public function getOutput() {
-               return ''; // no report
-       }
-}
index 7ef0ad0..5e62f7c 100644 (file)
  * @ingroup Profiler
  */
 class ProfilerSimpleDB extends ProfilerStandard {
-       protected function collateOnly() {
-               return true;
-       }
-
        public function isPersistent() {
                return true;
        }
index 0ee7aad..2d96b88 100644 (file)
@@ -42,10 +42,6 @@ class ProfilerSimpleText extends ProfilerStandard {
                parent::__construct( $profileConfig );
        }
 
-       protected function collateOnly() {
-               return true;
-       }
-
        public function logData() {
                if ( $this->mTemplated ) {
                        $this->close();
index 2a44494..95e4bc6 100644 (file)
@@ -30,10 +30,6 @@ class ProfilerSimpleTrace extends ProfilerStandard {
        protected $trace = "Beginning trace: \n";
        protected $memory = 0;
 
-       protected function collateOnly() {
-               return true;
-       }
-
        public function profileIn( $functionname ) {
                parent::profileIn( $functionname );
 
index 627b4de..02405af 100644 (file)
  * @ingroup Profiler
  */
 class ProfilerSimpleUDP extends ProfilerStandard {
-       protected function collateOnly() {
-               return true;
-       }
-
        public function isPersistent() {
                return true;
        }
index cc13416..a65e53e 100644 (file)
@@ -40,8 +40,8 @@ class ProfilerStandard extends Profiler {
        protected $mCollated = array();
        /** @var bool */
        protected $mCollateDone = false;
-       /** @var bool */
-       protected $mCollateOnly = false;
+       /** @var bool Whether to collect the full stack trace or just aggregates */
+       protected $mCollateOnly = true;
        /** @var array Cache of a standard broken collation entry */
        protected $mErrorEntry;
 
@@ -51,8 +51,6 @@ class ProfilerStandard extends Profiler {
        public function __construct( array $params ) {
                parent::__construct( $params );
 
-               $this->mCollateOnly = $this->collateOnly();
-
                $this->addInitialStack();
        }
 
@@ -75,18 +73,6 @@ class ProfilerStandard extends Profiler {
                return false;
        }
 
-       /**
-        * Whether to internally just track aggregates and ignore the full stack trace
-        *
-        * Only doing collation saves memory overhead but limits the use of certain
-        * features like that of graph generation for the debug toolbar.
-        *
-        * @return bool
-        */
-       protected function collateOnly() {
-               return false;
-       }
-
        /**
         * Add the inital item in the stack.
         */
index 57deb00..eecb936 100644 (file)
@@ -974,12 +974,20 @@ class ResourceLoader {
                                        case 'messages':
                                                $out .= self::makeMessageSetScript( new XmlJsCode( $messagesBlob ) );
                                                break;
+                                       case 'templates':
+                                               $out .= Xml::encodeJsCall(
+                                                       'mw.templates.set',
+                                                       array( $name, (object)$module->getTemplates() ),
+                                                       ResourceLoader::inDebugMode()
+                                               );
+                                               break;
                                        default:
                                                $out .= self::makeLoaderImplementScript(
                                                        $name,
                                                        $scripts,
                                                        $styles,
-                                                       new XmlJsCode( $messagesBlob )
+                                                       new XmlJsCode( $messagesBlob ),
+                                                       $module->getTemplates()
                                                );
                                                break;
                                }
@@ -1044,15 +1052,20 @@ class ResourceLoader {
         * @param mixed $messages List of messages associated with this module. May either be an
         *   associative array mapping message key to value, or a JSON-encoded message blob containing
         *   the same data, wrapped in an XmlJsCode object.
+        * @param array $templates Keys are name of templates and values are the source of
+        *   the template.
         * @throws MWException
         * @return string
         */
-       public static function makeLoaderImplementScript( $name, $scripts, $styles, $messages ) {
+       public static function makeLoaderImplementScript( $name, $scripts, $styles,
+               $messages, $templates
+       ) {
                if ( is_string( $scripts ) ) {
                        $scripts = new XmlJsCode( "function ( $, jQuery ) {\n{$scripts}\n}" );
                } elseif ( !is_array( $scripts ) ) {
                        throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' );
                }
+
                return Xml::encodeJsCall(
                        'mw.loader.implement',
                        array(
@@ -1064,7 +1077,8 @@ class ResourceLoader {
                                // PHP/json_encode() consider empty arrays to be numerical arrays and
                                // output javascript "[]" instead of "{}". This fixes that.
                                (object)$styles,
-                               (object)$messages
+                               (object)$messages,
+                               (object)$templates,
                        ),
                        ResourceLoader::inDebugMode()
                );
index 7bbc9bb..bcef149 100644 (file)
@@ -34,6 +34,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /** @var string Remote base path, see __construct() */
        protected $remoteBasePath = '';
 
+       /** @var array Saves a list of the templates named by the modules. */
+       protected $templates = array();
+
        /**
         * @var array List of paths to JavaScript files to always include
         * @par Usage:
@@ -199,6 +202,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         'loaderScripts' => [file path string or array of file path strings],
         *         // Modules which must be loaded before this module
         *         'dependencies' => [module name string or array of module name strings],
+        *         'templates' => array(
+        *             [template alias with file.ext] => [file path to a template file],
+        *         ),
         *         // Styles to always load
         *         'styles' => [file path string or array of file path strings],
         *         // Styles to include in specific skin contexts
@@ -223,6 +229,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $localBasePath = null,
                $remoteBasePath = null
        ) {
+               // Flag to decide whether to automagically add the mediawiki.template module
+               $hasTemplates = false;
                // localBasePath and remoteBasePath both have unbelievably long fallback chains
                // and need to be handled separately.
                list( $this->localBasePath, $this->remoteBasePath ) =
@@ -238,6 +246,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                case 'styles':
                                        $this->{$member} = (array)$option;
                                        break;
+                               case 'templates':
+                                       $hasTemplates = true;
+                                       $this->{$member} = (array)$option;
+                                       break;
                                // Collated lists of file paths
                                case 'languageScripts':
                                case 'skinScripts':
@@ -281,6 +293,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                        break;
                        }
                }
+               if ( $hasTemplates ) {
+                       $this->dependencies[] = 'mediawiki.template';
+               }
        }
 
        /**
@@ -535,6 +550,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $files = array_merge(
                        $files,
                        $this->scripts,
+                       $this->templates,
                        $context->getDebug() ? $this->debugScripts : array(),
                        $this->getLanguageScripts( $context->getLanguage() ),
                        self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ),
@@ -590,6 +606,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        'dependencies',
                        'messages',
                        'targets',
+                       'templates',
                        'group',
                        'position',
                        'skipFunction',
@@ -959,4 +976,30 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        protected function getLessCompiler( ResourceLoaderContext $context = null ) {
                return ResourceLoader::getLessCompiler( $this->getConfig() );
        }
+
+       /**
+        * Takes named templates by the module and returns an array mapping.
+        *
+        * @return array of templates mapping template alias to content
+        */
+       public function getTemplates() {
+               $templates = array();
+
+               foreach ( $this->templates as $alias => $templatePath ) {
+                       // Alias is optional
+                       if ( is_int( $alias ) ) {
+                               $alias = $templatePath;
+                       }
+                       $localPath = $this->getLocalPath( $templatePath );
+                       if ( file_exists( $localPath ) ) {
+                               $content = file_get_contents( $localPath );
+                               $templates[$alias] = $content;
+                       } else {
+                               $msg = __METHOD__ . ": template file not found: \"$localPath\"";
+                               wfDebugLog( 'resourceloader', $msg );
+                               throw new MWException( $msg );
+                       }
+               }
+               return $templates;
+       }
 }
index 45eb70f..4c49fae 100644 (file)
@@ -134,6 +134,16 @@ abstract class ResourceLoaderModule {
                return '';
        }
 
+       /**
+        * Takes named templates by the module and returns an array mapping.
+        *
+        * @return array of templates mapping template alias to content
+        */
+       public function getTemplates() {
+               // Stub, override expected.
+               return array();
+       }
+
        /**
         * @return Config
         * @since 1.24
index 2a1736d..e195cf2 100644 (file)
@@ -70,7 +70,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * In particular, it doesn't work for getting the content of JS and CSS pages. That functionality
         * will use the local DB irrespective of the return value of this method.
         *
-        * @return DatabaseBase|null
+        * @return IDatabase|null
         */
        protected function getDB() {
                return wfGetDB( DB_SLAVE );
index d5c57eb..2062da8 100644 (file)
@@ -46,8 +46,7 @@ class SkinApiTemplate extends BaseTemplate {
 
                <?php $this->printTrail() ?>
                </body></html>
-
-       <?php
+<?php
        }
 
        // Skip work and hooks for stuff we don't use
index f3adeba..aab9c3e 100644 (file)
@@ -77,7 +77,7 @@ class SpecialExpandTemplates extends SpecialPage {
                        $options->setMaxIncludeSize( self::MAX_INCLUDE_SIZE );
 
                        if ( $this->generateXML ) {
-                               $wgParser->startExternalParse( $title, $options, OT_PREPROCESS );
+                               $wgParser->startExternalParse( $title, $options, Parser::OT_PREPROCESS );
                                $dom = $wgParser->preprocessToDom( $input );
 
                                if ( method_exists( $dom, 'saveXML' ) ) {
index 3d762aa..0831c20 100644 (file)
@@ -157,7 +157,7 @@ class SpecialImport extends SpecialPage {
                                array( 'importfailed', $source->getWikiText() )
                        );
                } else {
-                       $importer = new WikiImporter( $source->value );
+                       $importer = new WikiImporter( $source->value, $this->getConfig() );
                        if ( !is_null( $this->namespace ) ) {
                                $importer->setTargetNamespace( $this->namespace );
                        }
@@ -251,7 +251,7 @@ class SpecialImport extends SpecialPage {
                                        Xml::label( $this->msg( 'import-comment' )->text(), 'mw-import-comment' ) .
                                        "</td>
                                        <td class='mw-input'>" .
-                                       Xml::input( 'log-comment', 50, 
+                                       Xml::input( 'log-comment', 50,
                                                ( $this->sourceName == 'upload' ? $this->logcomment : '' ),
                                                array( 'id' => 'mw-import-comment', 'type' => 'text' ) ) . ' ' .
                                        "</td>
index 37edc0f..2d6213a 100644 (file)
@@ -251,6 +251,25 @@ class LinkSearchPage extends QueryPage {
                return $retval;
        }
 
+       /**
+        * Pre-fill the link cache
+        *
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+               if ( $res->numRows() > 0 ) {
+                       $linkBatch = new LinkBatch();
+
+                       foreach ( $res as $row ) {
+                               $linkBatch->add( $row->namespace, $row->title );
+                       }
+
+                       $res->seek( 0 );
+                       $linkBatch->execute();
+               }
+       }
+
        /**
         * @param Skin $skin
         * @param object $result Result row
index ec9593f..4cbf584 100644 (file)
@@ -549,10 +549,22 @@ class MovePageForm extends UnlistedSpecialPage {
                }
 
                # Do the actual move.
-               $error = $ot->moveTo( $nt, true, $this->reason, $createRedirect );
-               if ( $error !== true ) {
-                       $this->showForm( $error );
+               $mp = new MovePage( $ot, $nt );
+               $valid = $mp->isValidMove();
+               if ( !$valid->isOK() ) {
+                       $this->showForm( $valid->getErrorsArray() );
+                       return;
+               }
+
+               $permStatus = $mp->checkPermissions( $user, $this->reason );
+               if ( !$permStatus->isOK() ) {
+                       $this->showForm( $permStatus->getErrorsArray() );
+                       return;
+               }
 
+               $status = $mp->move( $user, $this->reason, $createRedirect );
+               if ( !$status->isOK() ) {
+                       $this->showForm( $status->getErrorsArray() );
                        return;
                }
 
index 5b34297..ad1f051 100644 (file)
@@ -255,7 +255,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                // The form should be visible on each request (inclusive requests with submitted forms), so
                // return always false here.
                $htmlForm->setSubmitCallback(
-                       function() {
+                       function () {
                                return false;
                        }
                );
index 895f1e8..b1baf67 100644 (file)
@@ -895,10 +895,7 @@ class SpecialSearch extends SpecialPage {
                // be arranged nicely while still accommodating different screen widths
                $namespaceTables = '';
                for ( $i = 0; $i < $numRows; $i += 4 ) {
-                       $namespaceTables .= Xml::openElement(
-                               'table',
-                               array( 'cellpadding' => 0, 'cellspacing' => 0 )
-                       );
+                       $namespaceTables .= Xml::openElement( 'table' );
 
                        for ( $j = $i; $j < $i + 4 && $j < $numRows; $j++ ) {
                                $namespaceTables .= Xml::tags( 'tr', null, $rows[$j] );
index 51dd7bd..77ad9aa 100644 (file)
@@ -746,7 +746,7 @@ class SpecialUpload extends SpecialPage {
         *
         * @todo What about non-BitmapHandler handled files?
         */
-       static public function rotationEnabled() {
+       public static function rotationEnabled() {
                $bitmapHandler = new BitmapHandler();
                return $bitmapHandler->autoRotateEnabled();
        }
@@ -903,7 +903,7 @@ class UploadForm extends HTMLForm {
                                        $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
                                )->parse() .
                                        $this->msg( 'word-separator' )->escaped() .
-                                       $this->msg( 'upload_source_url' )->escaped(),
+                                       $this->msg( 'upload_source_url' )->parse(),
                                'checked' => $selectedSourceType == 'url',
                        );
                }
index bdd6751..b6a3be2 100644 (file)
@@ -113,6 +113,21 @@ class LoginForm extends SpecialPage {
                $wgUseMediaWikiUIEverywhere = true;
        }
 
+       /**
+        * Returns an array of all valid error messages.
+        *
+        * @return array
+        */
+       public static function getValidErrorMessages() {
+               static $messages = null;
+               if ( !$messages ) {
+                       $messages = self::$validErrorMessages;
+                       wfRunHooks( 'LoginFormValidErrorMessages', array( &$messages ) );
+               }
+
+               return $messages;
+       }
+
        /**
         * Loader
         */
@@ -175,13 +190,13 @@ class LoginForm extends SpecialPage {
 
                // Only show valid error or warning messages.
                if ( $entryError->exists()
-                       && in_array( $entryError->getKey(), self::$validErrorMessages )
+                       && in_array( $entryError->getKey(), self::getValidErrorMessages() )
                ) {
                        $this->mEntryErrorType = 'error';
                        $this->mEntryError = $entryError->rawParams( $loginreqlink )->escaped();
 
                } elseif ( $entryWarning->exists()
-                       && in_array( $entryWarning->getKey(), self::$validErrorMessages )
+                       && in_array( $entryWarning->getKey(), self::getValidErrorMessages() )
                ) {
                        $this->mEntryErrorType = 'warning';
                        $this->mEntryError = $entryWarning->rawParams( $loginreqlink )->escaped();
index cefdad0..6ca57aa 100644 (file)
@@ -415,6 +415,8 @@ class UserrightsPage extends SpecialPage {
         * Output a form to allow searching for a user
         */
        function switchForm() {
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
                $this->getOutput()->addHTML(
                        Html::openElement(
                                'form',
@@ -433,7 +435,10 @@ class UserrightsPage extends SpecialPage {
                                'username',
                                30,
                                str_replace( '_', ' ', $this->mTarget ),
-                               array( 'autofocus' => true )
+                               array(
+                                       'autofocus' => true,
+                                       'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
+                               )
                        ) . ' ' .
                        Xml::submitButton( $this->msg( 'editusergroup' )->text() ) .
                        Html::closeElement( 'fieldset' ) .
index 7d80b44..52ce4d3 100644 (file)
@@ -151,6 +151,7 @@ class UploadStash {
 
                if ( !$this->files[$key]->exists() ) {
                        wfDebug( __METHOD__ . " tried to get file at $key, but it doesn't exist\n" );
+                       // @todo Is this not an UploadStashFileNotFoundException case?
                        throw new UploadStashBadPathException( "path doesn't exist" );
                }
 
index b35967b..c32bd3a 100644 (file)
--- a/index.php
+++ b/index.php
@@ -34,7 +34,7 @@
 # has structures (try/catch, foo()->bar(), etc etc) which throw parse errors in
 # PHP 4. Setup.php and ObjectCache.php have structures invalid in PHP 5.0 and
 # 5.1, respectively.
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'index.php' );
index aafc393..1ed6a51 100644 (file)
@@ -2,14 +2,6 @@
 <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
 <supplementalData>
        <plurals>
-               <!-- Lower Sorbian (Dolnoserbski) and  Upper Sorbian (Hornjoserbsce). Not present in CLDR -->
-               <pluralRules locales="dsb hsb">
-                       <pluralRule count="one">n % 100 = 1 @integer 1, 101, 201, 301, …</pluralRule>
-                       <pluralRule count="two">n % 100 = 2 @integer 2, 102, 202, 302, …</pluralRule>
-                       <pluralRule count="few">n % 100 = 3..4 @integer 3~4, 103~104, …</pluralRule>
-                       <pluralRule count="other"> @integer 5, 6, 7, 8, 9, 10, 105, 206, 307, …</pluralRule>
-               </pluralRules>
-
                <!-- Belarusian in Taraškievica orthography (Беларуская тарашкевіца). Copied from "be" -->
                <pluralRules locales="be-tarask">
                        <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
index fd4eaf6..e364f1b 100644 (file)
@@ -6,71 +6,148 @@ CLDR data files are interpreted according to the LDML specification (http://unic
 For terms of use, see http://www.unicode.org/copyright.html
 -->
 <supplementalData>
-    <version number="$Revision: 9369 $"/>
-    <generation date="$Date: 2013-09-14 01:26:08 +0530 (ശ, 14 സെപ് 2013) $"/>
+    <version number="$Revision: 10807 $"/>
+    <generation date="$Date: 2014-08-14 14:43:27 -0500 (Thu, 14 Aug 2014) $"/>
     <plurals type="cardinal">
         <!-- For a canonicalized list, use GeneratedPluralSamples -->
-        <!-- if locale is known to have no plurals, there are no rules -->
-        <pluralRules locales="ar">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
-            <pluralRule count="few">n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …</pluralRule>
-            <pluralRule count="many">n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
-            <pluralRule count="other"> @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+        <!-- 1: other -->
+
+        <pluralRules locales="bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo root sah ses sg th to vi wo yo zh">
+            <pluralRule count="other"> @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="he iw">
+
+        <!-- 2: one,other -->
+
+        <pluralRules locales="am bn fa gu hi kn mr zu">
+            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ff fr hy kab">
+            <pluralRule count="one">i = 0,1 @integer 0, 1 @decimal 0.0~1.5</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ast ca de en et fi fy gl it ji nl sv sw ur yi">
             <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
-            <pluralRule count="two">i = 2 and v = 0 @integer 2</pluralRule>
-            <pluralRule count="many">v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="af asa ast az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur fy gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts uz ve vo vun wae xh xog">
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="si">
+            <pluralRule count="one">n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="ak bh guw ln mg nso pa ti wa">
             <pluralRule count="one">n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule>
             <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ff fr hy kab">
-            <pluralRule count="one">i = 0,1 @integer 0, 1 @decimal 0.0~1.5</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="tzm">
+            <pluralRule count="one">n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0</pluralRule>
+            <pluralRule count="other"> @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="pt">
+            <pluralRule count="one">n = 0..2 and n != 2 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="af asa az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog">
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="pt_PT">
+            <pluralRule count="one">n = 1 and v = 0 @integer 1</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="da">
+            <pluralRule count="one">n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="is">
+            <pluralRule count="one">t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="mk">
+            <pluralRule count="one">v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="fil tl">
+            <pluralRule count="one">v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="lv">
+
+        <!-- 3: zero,one,other -->
+
+        <pluralRules locales="lv prg">
             <pluralRule count="zero">n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
             <pluralRule count="one">n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
             <pluralRule count="other"> @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …</pluralRule>
         </pluralRules>
+        <pluralRules locales="lag">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ksh">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+
+        <!-- 3: one,two,other -->
+
         <pluralRules locales="iu kw naq se sma smi smj smn sms">
             <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
             <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
             <pluralRule count="other"> @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ga">
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
-            <pluralRule count="few">n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000</pluralRule>
-            <pluralRule count="many">n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000</pluralRule>
-            <pluralRule count="other"> @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+        <!-- 3: one,few,other -->
+
+        <pluralRules locales="shi">
+            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
+            <pluralRule count="few">n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00</pluralRule>
+            <pluralRule count="other"> @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="mo ro">
             <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
             <pluralRule count="few">v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
             <pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="lt">
-            <pluralRule count="one">n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
-            <pluralRule count="few">n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …</pluralRule>
-            <pluralRule count="many">f != 0   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="bs hr sh sr">
+            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="be">
-            <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
-            <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule>
-            <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-            <pluralRule count="other">   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+
+        <!-- 4: one,two,few,other -->
+
+        <pluralRules locales="gd">
+            <pluralRule count="one">n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000</pluralRule>
+            <pluralRule count="two">n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000</pluralRule>
+            <pluralRule count="few">n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00</pluralRule>
+            <pluralRule count="other"> @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="sl">
+            <pluralRule count="one">v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …</pluralRule>
+            <pluralRule count="two">v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="dsb hsb">
+            <pluralRule count="one">v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="two">v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+
+        <!-- 4: one,two,many,other -->
+
+        <pluralRules locales="he iw">
+            <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
+            <pluralRule count="two">i = 2 and v = 0 @integer 2</pluralRule>
+            <pluralRule count="many">v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
+
+        <!-- 4: one,few,many,other -->
+
         <pluralRules locales="cs sk">
             <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
             <pluralRule count="few">i = 2..4 and v = 0 @integer 2~4</pluralRule>
@@ -83,11 +160,17 @@ For terms of use, see http://www.unicode.org/copyright.html
             <pluralRule count="many">v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
             <pluralRule count="other">   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="sl">
-            <pluralRule count="one">v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …</pluralRule>
-            <pluralRule count="two">v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …</pluralRule>
-            <pluralRule count="few">v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+        <pluralRules locales="be">
+            <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
+            <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule>
+            <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other">   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lt">
+            <pluralRule count="one">n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
+            <pluralRule count="few">n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …</pluralRule>
+            <pluralRule count="many">f != 0   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="mt">
             <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
@@ -95,28 +178,15 @@ For terms of use, see http://www.unicode.org/copyright.html
             <pluralRule count="many">n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
             <pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="mk">
-            <pluralRule count="one">v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="cy">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
-            <pluralRule count="few">n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000</pluralRule>
-            <pluralRule count="many">n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000</pluralRule>
-            <pluralRule count="other"> @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="lag">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
-            <pluralRule count="one">i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="shi">
-            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
-            <pluralRule count="few">n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00</pluralRule>
-            <pluralRule count="other"> @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="ru uk">
+            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule>
+            <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+            <pluralRule count="other">   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
+
+        <!-- 5: one,two,few,many,other -->
+
         <pluralRules locales="br">
             <pluralRule count="one">n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …</pluralRule>
             <pluralRule count="two">n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …</pluralRule>
@@ -124,77 +194,38 @@ For terms of use, see http://www.unicode.org/copyright.html
             <pluralRule count="many">n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …</pluralRule>
             <pluralRule count="other"> @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ksh">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+        <pluralRules locales="ga">
             <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="tzm">
-            <pluralRule count="one">n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0</pluralRule>
-            <pluralRule count="other"> @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+            <pluralRule count="few">n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000</pluralRule>
+            <pluralRule count="many">n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000</pluralRule>
+            <pluralRule count="other"> @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="gv">
-            <pluralRule count="one">n % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 1.0, 11.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 101.0, 1001.0, …</pluralRule>
-            <pluralRule count="two">n % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, … @decimal 2.0, 12.0, 22.0, 32.0, 42.0, 52.0, 62.0, 72.0, 102.0, 1002.0, …</pluralRule>
-            <pluralRule count="few">n % 100 = 0,20,40,60 @integer 0, 20, 40, 60, 100, 120, 140, 160, 1000, 10000, 100000, 1000000, … @decimal 0.0, 20.0, 40.0, 60.0, 100.0, 120.0, 140.0, 160.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-            <pluralRule count="other"> @integer 3~10, 13~19, 23, 103, 1003, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.1, 1000.1, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="gd">
-            <pluralRule count="one">n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000</pluralRule>
-            <pluralRule count="few">n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00</pluralRule>
-            <pluralRule count="other"> @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo sah ses sg th to vi wo yo zh">
-            <pluralRule count="other"> @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="fil tl">
-            <pluralRule count="one">i = 0..1 and v = 0 @integer 0, 1</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="ca de en et fi gl it ji nl sv sw ur yi">
-            <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="pt">
-            <pluralRule count="one">i = 1 and v = 0 or i = 0 and t = 1 @integer 1 @decimal 0.1, 0.01, 0.10, 0.001, 0.010, 0.100, 0.0001, 0.0010, 0.0100, 0.1000</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="da">
-            <pluralRule count="one">n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="pt_PT">
-            <pluralRule count="one">n = 1 and v = 0 @integer 1</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="am bn fa gu hi kn mr zu">
-            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="is">
-            <pluralRule count="one">t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="si">
-            <pluralRule count="one">n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="bs hr sh sr">
-            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="one">v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …</pluralRule>
+            <pluralRule count="two">v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …</pluralRule>
+            <pluralRule count="many">v != 0   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 3~10, 13~19, 23, 103, 1003, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ru">
-            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
-            <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
-            <pluralRule count="other"> @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+        <!-- 6: zero,one,two,few,many,other -->
+
+        <pluralRules locales="ar">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+            <pluralRule count="few">n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …</pluralRule>
+            <pluralRule count="many">n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
+            <pluralRule count="other"> @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="uk">
-            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
-            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule>
-            <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
-            <pluralRule count="other">   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="cy">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+            <pluralRule count="few">n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000</pluralRule>
+            <pluralRule count="many">n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000</pluralRule>
+            <pluralRule count="other"> @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
     </plurals>
 </supplementalData>
index 51968b8..75bfc34 100644 (file)
@@ -45,7 +45,8 @@
                        "아라",
                        "Test Create account",
                        "Kuwaity26",
-                       "Calak"
+                       "Calak",
+                       "Omda4wady"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "randomincategory": "صفحة عشوائية في التصنيف",
        "randomincategory-invalidcategory": "\"$1\" ليس اسم تصنيف صالح.",
        "randomincategory-nopages": "لا توجد صفحات في التصنيف [[:Category:$1|$1]].",
+       "randomincategory-category": "التصنيف:",
+       "randomincategory-legend": "صفحة عشوائية في التصنيف",
        "randomredirect": "تحويلة عشوائية",
        "randomredirect-nopages": "لا توجد تحويلات في النطاق \"$1\".",
        "statistics": "إحصاءات",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "البحث عن مصادر الكتب",
        "booksources-isbn": "ردمك:",
+       "booksources-search": "بحث",
        "booksources-text": "توجد أدناه قائمة بوصلات لمواقع أخرى تبيع الكتب الجديدة والمستعملة، أيضا يمكنك أن تحصل على معلومات إضافية عن الكتب التي تبحث عنها من هناك:",
        "booksources-invalid-isbn": "رقم ISBN المعطى لا يبدو صحيحا؛ تحقق من أخطاء النسخ من المصدر الأصلي.",
        "specialloguserlabel": "المؤدي:",
        "pagelang-select-lang": "اختر اللغة",
        "right-pagelang": "تغيير لغة الصفحة",
        "action-pagelang": "تغيير لغة الصفحة",
-       "log-name-pagelang": "تغيير سجل الصفحة"
+       "log-name-pagelang": "تغيير سجل الصفحة",
+       "mediastatistics-header-video": "مقاطع الفيديو",
+       "json-error-syntax": "خطأ صياغة"
 }
index e55f79c..493f818 100644 (file)
@@ -11,7 +11,8 @@
                        "Mousa",
                        "Shirayuki",
                        "Microchip08",
-                       "아라"
+                       "아라",
+                       "Koroğlu"
                ]
        },
        "tog-underline": "باغلانتیلارین آلتینی خطله:",
        "cancel": "وازگئچ",
        "moredotdotdot": "داها...",
        "morenotlisted": "بۇ لیست کامل دئییل.",
-       "mypage": "صحیفه",
+       "mypage": "صفحه",
        "mytalk": "دانیشیق",
        "anontalk": "بو آی‌پی آدرسینه دانیشیق",
        "navigation": "دوْلانماق",
        "qbfind": "تاپ",
        "qbbrowse": "گؤزدن گئچیرت",
        "qbedit": "دَییشدیر",
-       "qbpageoptions": "بۇ صحیفه‌‌",
-       "qbmyoptions": "صحیفه‌‌لریم",
+       "qbpageoptions": "بۇ صفحه‌‌",
+       "qbmyoptions": "صفحه‌‌لریم",
        "faq": "چوْخ سوْروشولان سوْال‌لار",
        "faqpage": "Project:چوْخ سوْروشولان سوْال‌لار",
        "actions": "چالیشمالار",
        "searchbutton": "آختار",
        "go": "گئت",
        "searcharticle": "گئت",
-       "history": "صحیفه‌‌نین گئچمیشی",
+       "history": "صفحه‌‌نین گئچمیشی",
        "history_short": "گئچمیش",
        "updatedmarker": "سوْن باخیشیمدان سوْنرا یئنی‌لنیب‌دیر",
        "printableversion": "یازدیریرا بیلن نۆسخه",
        "newpage": "يئنی صحیفه‌‌",
        "talkpage": "بۇ صحیفه‌نی دانیش",
        "talkpagelinktext": "دانیشیق",
-       "specialpage": "اؤزل صحیفه",
+       "specialpage": "اؤزل صفحه",
        "personaltools": "شخصی آراجلار",
        "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
        "disclaimers": "رد ائتمک",
        "disclaimerpage": "Project:عمومی رد ائتمک",
        "edithelp": "ديَیشتیرمک یاردیمی",
-       "mainpage": "آنا صحیفه",
-       "mainpage-description": "آنا صحیفه",
+       "mainpage": "آنا صفحه",
+       "mainpage-description": "آنا صفحه",
        "policy-url": "Project:قایدالار",
        "portal": "توْپلوم پوْرتالی",
        "portal-url": "Project:توْپلوم پوْرتالی",
        "red-link-title": "$1 (صحیفه یوْخدور)",
        "sort-descending": "آزالان سیرالاماق",
        "sort-ascending": "چوْخالان سیرالاماق",
-       "nstab-main": "صحیفه",
+       "nstab-main": "صفحه",
        "nstab-user": "ایستیفاده‌چی صحیفه‌سی",
        "nstab-media": "مئدیا صحیفه‌سی",
        "nstab-special": "اؤزل صحیفه",
        "tooltip-search": "{{SITENAME}}-دا آختار",
        "tooltip-search-go": "اولورسا بو آددا بیر صحیفه‌یه گئت",
        "tooltip-search-fulltext": "بو یازی اولان صحیفه‌لری آختار",
-       "tooltip-p-logo": "آنا صحیفه‌یه باخ",
+       "tooltip-p-logo": "آنا صفحه‌یه باخ",
        "tooltip-n-mainpage": "آنا صحیفه‌‌یه باخین",
-       "tooltip-n-mainpage-description": "آنا صحیفه‌یه باخین",
+       "tooltip-n-mainpage-description": "آنا صفحه‌یه باخ",
        "tooltip-n-portal": "پروژه‌ یه گؤره، سیز نه ایش گوره بیلرسیز، هاردا نه‌لری تاپا بیلرسیز",
        "tooltip-n-currentevents": "ایندیکی اولایلارا ایلگیلی بیلگیلر تاپ",
        "tooltip-n-recentchanges": "بو ویکی‌ده سون دَییشیکلرین لیستی",
index 4e5d334..af8a98c 100644 (file)
        "createacct-another-submit": "Тағы бер иҫәп яҙмаһын булдырырға",
        "createacct-benefit-heading": "{{SITENAME}} һеҙҙең кеүек үк кешеләр тарафынан булдырылған",
        "createacct-benefit-body1": "{{PLURAL:$1|үҙгәртеү}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|мәҡәлә|мәҡәләнең|мәҡәлә}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|мәҡәлә|мәҡәлә|мәҡәләнең}}",
        "createacct-benefit-body3": "һуңғы ваҡытта {{PLURAL:$1|ҡатнашыусы}}",
        "badretype": "Һеҙ кереткән серһүҙҙәр тап килмәй.",
        "userexists": "Керетелгән исем ҡулланыла инде.\nЗинһар, башҡа исем һайлағыҙ.",
        "duration-minutes": "$1 {{PLURAL:$1|1=минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|1=сәғәт|сәғәт}}",
        "duration-days": "$1 {{PLURAL:$1|1=көн|көн}}",
-       "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙна|аҙналар}}",
+       "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙналар|аҙна}}",
        "duration-years": "$1 {{PLURAL:$1|1=йыл|йылдар}}",
        "duration-decades": "$1 {{PLURAL:$1|1=ун көнлөк|ун көнлөктәр}}",
        "duration-centuries": "$1 {{PLURAL:$1|1=быуат|быуаттар}}",
index cd26578..f038e86 100644 (file)
        "may-date": "مئ، سۆچکان $1",
        "june-date": "جون، جلکان $1",
        "july-date": "جولای، سهێل $1",
-       "august-date": "اگست، ساچان $1",
+       "august-date": "اگوست، ساچان $1",
        "september-date": "سپٹامبر، تۆمشان $1",
        "october-date": "اکتۆبر، سارتان $1",
        "november-date": "نوامبر، گۆپشان $1",
-       "december-date": "دسمبر، تاکشان $1",
+       "december-date": "دسمبر، تۆمشان $1",
        "pagecategories": "{{PLURAL:$1|دسته|دسته جات}}",
        "category_header": "صفحات ته دسته \"$1\"",
        "subcategories": "زیردسته جات",
        "article": "محتوا صفحه",
        "newwindow": "(ته نوکین پنچره ی پچ کن)",
        "cancel": "کنسل",
-       "moredotdotdot": "گیشتر...",
+       "moredotdotdot": "گیشتیر...",
        "morenotlisted": "ائ لیست پکا نه انت",
        "mypage": "دیم یا تاک",
        "mytalk": "گپ",
        "variants": "گوشگان",
        "navigation-heading": "منوء ناویگ",
        "errorpagetitle": "حطا",
-       "returnto": "تررگ Ø¨Ù\87 $1.",
-       "tagline": "چه {{SITENAME}}",
-       "help": "کمک",
+       "returnto": "Ø´Ù\88تÛ\8cÙ\86 Ø¨Û\8c $1.",
+       "tagline": "شه {{SITENAME}}",
+       "help": "Ú©Ù\88Ù\85Ú©",
        "search": "گردگ",
        "searchbutton": "گردگ",
        "go": "برا",
        "searcharticle": "برا",
        "history": "دیمی تاریخ",
-       "history_short": "تارÛ\8cØ­",
+       "history_short": "دپتر",
        "updatedmarker": "په روچ بیتگین چه منی اهری  اهری  چارگ",
        "printableversion": "نسخه چهاپی",
        "permalink": "دایمی لینک",
        "editsectionhint": ": $1اصلاح انتخاب",
        "toc": "محتوا",
        "showtoc": "پیش دار",
-       "hidetoc": "پناه کن",
-       "collapsible-collapse": "چیر داتن",
+       "hidetoc": "چیهر داتین",
+       "collapsible-collapse": "چیهر داتین",
        "collapsible-expand": "تچک کتن",
        "confirmable-confirm": "آیا {{GENDER:$1|شما}} مطمعین ویت?",
        "confirmable-yes": "هان",
        "nstab-main": "دیم یا تاک",
        "nstab-user": "کار زوروکی دیم",
        "nstab-media": "میڈیای دیم",
-       "nstab-special": "حاصین صفحات",
-       "nstab-project": "صفحه پروژه",
+       "nstab-special": "هاسین تاکدیم",
+       "nstab-project": "پروژه یی تاکدیم",
        "nstab-image": "پایل",
        "nstab-mediawiki": "کوله",
-       "nstab-template": "تمپلت",
-       "nstab-help": "صÙ\81Ø­Ù\87 Ú©Ù\85Ú©",
-       "nstab-category": "دستÙ\87",
+       "nstab-template": "تراشوان",
+       "nstab-help": "رÙ\87Ù\86Ù\85اÛ\8cÛ\8c ØªØ§Ú©Ø¯Û\8cÙ\85",
+       "nstab-category": "تÙ\87ر",
        "nosuchaction": "نی چشین عمل",
        "nosuchactiontext": "ای کاری که گون اای یو ار ال مشخص بیتت نامشخص انت.\nشما بلکین یو‌ارال شر ننوشتت یا رند چه هرابیت لینکی اتکگیت\nشی بلکین یک خطایی ته برنامه سایت {{SITENAME}} پیش داریت.",
        "nosuchspecialpage": "نی چشین حاصین صفحه",
        "logouttext": "''' شما انیگء در شُت ات'''\nبزان که تانکه شمئی بروزرء چیرداتگین هافظه پهک مبیت، لهتئ چه تاکان ممکن انت رندا هم هنچوش پیش دارگ ببنت که انگار شما لاگین کتگ ات.",
        "welcomeuser": "وشاتک ات $1!",
        "welcomecreation-msg": "انیگء شمئی اکانت اڈ بیتگ انت.\nمشموش ات که وتی [[Special:Preferences|ترجیحات {{SITENAME}}]] رء ٹگل دئیت.",
-       "yourname": "نام کاربری",
-       "userlogin-yourname": "اکانتء نام",
+       "yourname": "کار زوروکی نام:",
+       "userlogin-yourname": "کار زوروکی نام",
        "userlogin-yourname-ph": "وتی یوزرنامء بلک ات",
        "createacct-another-username-ph": "وتی یوزرنامء بلک ات",
        "yourpassword": "کلمه رمز",
        "passwordreset-legend": "نوکین پسوردء بلوٹ",
        "passwordreset-disabled": "پسوردء واتر کتن مان ائ ویکیء نافعال بیتگ انت.",
        "passwordreset-emaildisabled": "ایمیلء حالتان مان ائ ویکیء نافعال بیتگ انت.",
-       "passwordreset-username": "یوزرنام:",
+       "passwordreset-username": "کار زوروکی نام:",
        "passwordreset-domain": "دامین:",
        "passwordreset-capture": "آسریگین ایمیل پیش دارگ بیت؟",
        "passwordreset-capture-help": "اگان ائ گزینگ رء نشانیگ بهل ات، یک ایمیلء (گون موکتین پسوردء) شما رء پیش دارگ بیت ءُ هنچوش پر کاربرء راهیگ بیت انت.",
        "subject": "موضوع/سرخط:",
        "minoredit": "ای شی یک هوردین اصلاحیت",
        "watchthis": "ای صفحه بچار",
-       "savearticle": "صÙ\81Ø­Ù\87 Ø°Ø®Û\8cرÙ\87 Ú©ن",
-       "preview": "بازبین",
+       "savearticle": "تاکدÛ\8cÙ\85Ù\90 Ø°Ø®Û\8cرÙ\87 Ú©Ù\88رتÛ\8cن",
+       "preview": "دÛ\8cستین",
        "showpreview": "بازبین پیش دار",
        "showdiff": "تغییرات پیش دار",
        "blankarticle": "<strong>هشتار:</strong> شما بی یک هالی دیمی جوڑ\t کورتینا ئالاتا ویت.\nاگه \"{{int:savearticle}}\" ها پدا کلیک کنیت، بدون مئتواین دیمی جوڑ\tا بیت .",
        "edit-gone-missing": "نه تونیت صفحهء په روچی کنت.\nچوش که جاه کیت آیی حذف بوتگت.",
        "edit-conflict": "جنگ اصلاحی",
        "edit-no-change": "شمی اصلاح نادید گرگ بوت، په چی که هچ تغییری په متن دهگ نه بوت.",
-       "postedit-confirmation-created": "تاک اڈ بوت.",
+       "postedit-confirmation-created": "تاکدیم جوڑ بوت.",
        "postedit-confirmation-restored": "تاک واتر بوت.",
        "postedit-confirmation-saved": "شمئی ادیت ذخیرگ بوت.",
        "edit-already-exists": "نه تونیت یک نوکین صفحه ای شر کنت.\nهنو شی هستن.",
        "search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک جهلرده|$2 جهلرده}}، {{PLURAL:$3|یک فایل|$3 فایل}})",
        "search-redirect": "(غیر مستقیم $1 )",
        "search-section": "(بخش $1 )",
+       "search-category": "(تهر  $1)",
        "search-file-match": "(فایلء محتواء همجندی)",
        "search-suggest": "شما را منظور ات: $1",
        "search-interwiki-caption": "پروژه آن گوهار",
        "yourlanguage": "زبان:",
        "yourvariant": "زبان محتواء گؤشگ:",
        "prefs-help-variant": "شمئی درچتگین گؤشگ پر تاکانی محتواء پیش دارگ مان ائ ویکی.",
-       "yournick": "امضا:",
+       "yournick": "نوکین دسنام:",
        "prefs-help-signature": "نبشتگین کامنت ان مان ترانء تاک پیکن گون «<nowiki>~~~~</nowiki>» ایمزا به بنت؛ ائ نشانیگ گون وتکارین حالت پر شمئی ایمزا و وهدستامپء کنورتء بیت انت.",
        "badsig": "نامعتبرین حامین امضا تگان HTML چک کن",
        "badsiglength": "شمل امضا باز مزنتت.\nآی بایدن   $1 {{PLURAL:$1|کارکاتر|کاراکتران}} مزن تر مبیت",
        "yourgender": "لوٹ ات که چونکا توصیف به بیت؟",
        "gender-unknown": "ترجیحء دیان که نامالوم به بیت",
-       "gender-male": "مردین",
-       "gender-female": "جنین",
+       "gender-male": "مردین زاگ",
+       "gender-female": "جنین زاگ",
        "prefs-help-gender": "ائ تنظیمء کارمرز کتن ایهتیاری انت.\nسفتور چه ائ انداجگ پر درستین اشارگ پر شمئی اکانت گون زبانء گرامرء بهر زیر ات.\nائ اطلاهات عام انت.",
        "email": "ایمیل",
        "prefs-help-realname": "راستین  نام اهتیاریتن. اگه شما یکی انتخاب کنیت شی په شمی کارء نشان هلگ په روت.",
        "prefs-help-email-required": "آدرس ایمیل نیازنت.",
        "prefs-info": "اولگین اطلاعات",
        "prefs-i18n": "بین المللی کتن",
-       "prefs-signature": "اÙ\85ضا",
+       "prefs-signature": "دسÙ\86اÙ\85",
        "prefs-dateformat": "تاریح داب",
-       "prefs-timeoffset": "وهد بنگیج",
+       "prefs-timeoffset": "بنگیج بوتینِ وهد",
        "prefs-advancedediting": "عمومی تنظیمات",
        "prefs-editor": "اصلاح کنوک",
        "prefs-preview": "پیشچارگ",
        "right-createtalk": "شرکتن صفحات بحث",
        "right-createaccount": "شرکتن نوکین حسابان کاربری",
        "right-minoredit": "نشان کن اصلاحات په داب هوردین",
-       "right-move": "جاه په جاه کن صفحات",
+       "right-move": "جاه بی جاه کن تاکدیمانا",
        "right-move-subpages": "جاه په جاه کن صفحات گون زیرصفحاتش",
        "right-move-rootuserpages": "جاه په جاه کتن صفحات کاربری اصلی",
        "right-move-categorypages": "انتقال مان کتگوریء پیج ان",
        "right-nominornewtalk": "نداشتن هوردین اصلاح ته صفحات بحث یک نوکین کوله یانی پیش داریت",
        "right-apihighlimits": "استفاده کن چه بالاترین محدویتان ته جوستان API",
        "right-writeapi": "استفاده چه نوشتن API",
-       "right-delete": "حذÙ\81 ØµÙ\81حات",
+       "right-delete": "تاکدÛ\8cÙ\85اÙ\86Ù\90 Ù¾Ø§Ú© Ú©Ù\88رتÛ\8cÙ\86",
        "right-bigdelete": "حذف صفحات گون درازین تاریح",
        "right-deletelogentry": "هزپ و واتر چه خاصین مدخل چه سیاهه",
        "right-deleterevision": "حذف و حذف نه کتن مخصوصین بازبینی آن صفحات",
        "recentchangeslinked-toolbox": "مربوطین تغییرات",
        "recentchangeslinked-title": "تغییراتی مربوط په \"$1\"",
        "recentchangeslinked-summary": "شی یک لیستی چه تغییراتی هستنت که نوکی اعمال بوتگنت په صفحاتی که چه یک صفحه خاصی لینک بوته( یا په اعضای یک خاصین دسته).\nصفحات ته [[Special:Watchlist| شمی لیست چارگ]] '''' پررنگنت''''",
-       "recentchangeslinked-page": "صÙ\81Ø­Ù\87 نام:",
+       "recentchangeslinked-page": "تاکدÛ\8cÙ\85Ù\90 نام:",
        "recentchangeslinked-to": "پیش دار تغییرات په صفحاتی که لینک بوتگنت به جاه داتگین صفحه",
        "upload": "آپلود کتن فایل",
        "uploadbtn": "آپلود فایل",
        "uploadwarning": "هوژاری آپلود",
        "savefile": "ذخیره فایل",
        "uploaddisabled": "آپ.د غبر فعال انت",
+       "copyuploaddisabled": "بارگذاری از طریق نشانی اینترنتی غیرفعال است.",
        "uploaddisabledtext": "آپلود فایل غیر فعال انت.",
        "php-uploaddisabledtext": "آپلود کتن فایل ته پی‌اچ‌پی فعال نهنت. تنظیم file_uploads کنترل کنیت.",
        "uploadscripted": "ای فایل شامل کد HTML یا اسکریپت انت که شاید گون وب بروزر اشتباهی وانگ بیت.",
+       "uploadscriptednamespace": "این پوشه اس‌وی‌جی شامل فضای نام غیرقانونی '$1' است",
+       "uploadinvalidxml": "XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.",
        "uploadvirus": "فایل یک ویروسی داریتن! جزییات: $1",
+       "uploadjava": "این پرونده یک پرونده زیپ است که حاوی پرونده‌ای از نوع ‎‎.class جاوا است.\nبارگذاری پرونده‌های جاوا مجاز نیست، چرا که ممکن است اجازه دور زدن محدودیت‌های امنیتی را بدهند.",
        "upload-source": "پرونده منبع",
        "sourcefilename": "منبع نام فایل:",
        "sourceurl": "نشانی منبع:",
        "upload-http-error": "یک ارور اچ‌تی‌تی‌پی پیش آتک : $1",
        "upload-copy-upload-invalid-domain": "بارگذاری کپی پرونده‌ها از این دامنه امکان‌پذیر نیست.",
        "backend-fail-stream": "نمی‌توان پروندهٔ $1 را ارسال کرد.",
+       "backend-fail-backup": "نمی‌توان نسخهٔ پشتیبان برای پروندهٔ $1 ایجاد کرد.",
+       "backend-fail-notexists": "ای $1 پایل وجود نداریت.",
+       "backend-fail-hashes": "دریافت هش‌های پرونده برای مقایسه ناموفق بود.",
+       "backend-fail-notsame": "پروندهٔ غیریکسانی در $1 وجود دارد.",
+       "backend-fail-invalidpath": "$1 مسیر ذخیره‌سازی معتبری نیست.",
+       "backend-fail-delete": "شما نتوانیت ای $1 پایلا پاک کنیت.",
+       "backend-fail-describe": "نمی‌توان فرادادهٔ پروندهٔ «$1» را تغییر داد.",
+       "backend-fail-alreadyexists": "ای پایل $1 شه دیما وجود داشت.",
+       "backend-fail-store": "شما نتوانیت ای $1 پایلابی $2 تاذخیره بکنیت.",
+       "backend-fail-copy": "نمی‌توان پروندهٔ $1 را به $2 کپی کرد.",
+       "backend-fail-move": "نمی‌توان پروندهٔ $1 را به $2 منتقل کرد.",
+       "backend-fail-opentemp": "نمی‌توان پروندهٔ موقتی را باز کرد.",
+       "backend-fail-writetemp": "امکان نوشتن بر روی پروندهٔ موقتی وجود ندارد.",
+       "backend-fail-closetemp": "نمی‌توان پروندهٔ موقتی را بست.",
+       "backend-fail-read": "نمی‌توان پروندهٔ $1 را خواند.",
+       "backend-fail-create": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت.",
+       "backend-fail-maxsize": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت چون بزرگتر از {{PLURAL:$2|یک بایت|$2 بایت}} است.",
+       "backend-fail-readonly": "پشتیبان «$1» درحال حاضر در وضیت فقط خواندنی است. دلیل ارائه شده چنین است: «$2»",
+       "backend-fail-synced": "پرونده «$1» در پشتیبان‌های ذخیره داخلی در وضعیتی ناپایدار قرار دارد",
+       "backend-fail-connect": "ارتباط با پشیبان ذخیره «$1» برقرار نشد.",
+       "backend-fail-internal": "خطایی نامعلوم در پشتیبان ذخیره «$1» رخ داد.",
+       "backend-fail-contenttype": "تعیین نوع محتوای پایل په ذخیره بی «$1» ناموفق ات.",
+       "backend-fail-batchsize": "دسته‌ای مشتمل بر $1 {{PLURAL:$1|عملکرد|عملکرد}} پرونده به پشتیبان ذخیره داده شد؛ حداکثر مجاز $2 {{PLURAL:$2|عملکرد|عملکرد}} است.",
+       "backend-fail-usable": "امکان خواندن یا نوشتن پروندهٔ $1 وجود نداشت چرا که سطح دسترسی کافی نیست یا شاخه/محفظهٔ مورد نظر وجود ندارد.",
+       "filejournal-fail-dbconnect": "امکان وصل شدن به پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
+       "filejournal-fail-dbquery": "امکان به روز کردن پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
+       "lockmanager-notlocked": "نمی‌توان قفل «$1» را گشود؛ چون قفل نشده‌است.",
+       "lockmanager-fail-closelock": "امکان بستن پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-deletelock": "امکان حذف پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-acquirelock": "نمی‌توان قفل «$1» را کسب کرد.",
+       "lockmanager-fail-openlock": "امکان باز کردن پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-releaselock": "نمی‌توان قفل «$1» را گشود.",
+       "lockmanager-fail-db-bucket": "امکان ارتباط با تعداد کافی پایگاه داده قفل‌ها در محفظه $1 وجود نداشت.",
+       "lockmanager-fail-db-release": "بازکردن قفل‌های پایگاه دادهٔ $1 ممکن نیست.",
+       "lockmanager-fail-svr-acquire": "امکان گرفتن قفل‌های سرور $1 وجود ندارد.",
+       "lockmanager-fail-svr-release": "امکان باز کردن قفل‌های سرور $1 وجود ندارد.",
+       "zip-file-open-error": "در هنگام باز کردن پرونده زیپ برای بررسی محتوای آن خطایی رخ داد.",
+       "zip-wrong-format": "پرونده مشخص شده یک پرونده زیپ نیست.",
+       "zip-bad": "پرونده زیپ خراب یا غیر قابل خواندن است.\nنمی‌توان محتوای آن را از نظر امنیت به درستی بررسی کرد.",
+       "zip-unsupported": "پرونده زیپ از ویژگی‌هایی استفاده می‌کند که توسط مدیاویکی پشتیبانی نمی‌شوند.\nنمی‌توان محتوای آن را از نظر امنیت به درستی بررسی کرد.",
        "uploadstash": "اپلوڈی سٹاش",
+       "uploadstash-summary": "این صفحه دسترسی به پرونده‌هایی که بارگذاری شده‌اند (یا در حال بارگذاری هستند) اما هنوز در ویکی منتشر نشده‌اند را فراهم می‌کند. این پرونده‌ها توسط هیچ کاربری به جز کسی که آن‌ها را بارگذاری کرده قابل دیدن نیستند.",
+       "uploadstash-clear": "پاک‌کردن پرونده‌های انبارشده",
+       "uploadstash-nofiles": "شما هیچ پروندهٔ انبارشده‌ای ندارید.",
+       "uploadstash-badtoken": "انجام این اقدام ناموفق بود، احتمالاً به این دلیل که اعتبار ویرایش شما به اتمام رسیده است. دوباره امتحان کنید.",
+       "uploadstash-errclear": "پاک‌کردن پرونده‌ها ناموفق بود.",
+       "uploadstash-refresh": "تازه‌کردن فهرست پرونده‌ها",
+       "invalid-chunk-offset": "جابجایی نامعتبر قطعه",
+       "img-auth-accessdenied": "منع دسترسی",
+       "img-auth-nopathinfo": "PATH_INFO موجود نیست.\nسرور شما برای ردکردن این مقدار تنظیم نشده‌است.\nممکن است مبتنی بر سی‌جی‌آی باشد و از img_auth پشتیبانی نکند.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization را ببینید.",
+       "img-auth-notindir": "مسیر درخواست شده در شاخهٔ بارگذاری تنظیم‌شده قرار ندارد.",
+       "img-auth-badtitle": "امکان ایجاد یک عنوان مجاز از «$1» وجود ندارد.",
+       "img-auth-nologinnWL": "شما به سامانه وارد نشده‌اید و «$1» در فهرست سفید قرار ندارد.",
+       "img-auth-nofile": "پایلی «$1» وجود نداریت.",
+       "img-auth-isdir": "شما تلاش کرده‌اید به شاخهٔ «$1» دسترسی پیدا کنید.\nتنها دسترسی به پرونده مجاز است.",
+       "img-auth-streaming": "در حال جاری ساختن «$1».",
+       "img-auth-public": "عملکرد img_auth.php برونداد پرونده‌ها از یک ویکی خصوصی است.\nاین ویکی به عنوان یک ویکی عمومی تنظیم شده‌است.\nبرای امنیت بهینه، img_auth.php غیرفعال است.",
+       "img-auth-noread": "کاربر دسترسی خواندن «$1» را ندارد.",
+       "http-invalid-url": "نشانی نامعتبر: $1",
+       "http-invalid-scheme": "نشانی‌های اینترنتی با طرح «$1» پشتیبانی نمی‌شوند.",
+       "http-request-error": "درخواست اچ‌تی‌تی‌پی به علت خطایی ناشناخته، ناموفق بود.",
+       "http-read-error": "خطای خواندن اچ‌تی‌تی‌پی.",
+       "http-timed-out": "مهلت درخواست اچ‌تی‌تی‌پی به سر رسید.",
+       "http-curl-error": "خطا در آوردن نشانی اینترنتی: $1",
+       "http-bad-status": "در حین درخواست اچ‌تی‌تی‌پی خطایی رخ داد: $1 $2",
        "upload-curl-error6": "نه تونیت په URL برسیت",
        "upload-curl-error6-text": "داتگین URL دسترسی نه بیت.\nلطفا دگه کنترل کنیت که URL درستنت و سایت په راه انت.",
        "upload-curl-error28": "وهد آپلود هلت",
        "upload-curl-error28-text": "سایت باز وهدی بورت په جواب دهگء.\nلطفا کنترل کنیت که سایت روشننت، کمی صبر کنیت و دگه سعی کنیت.\nشاید شما یک وهد حلوت تری کوشش کنیت.",
        "license": "لیسانس کنت:",
-       "license-header": "لیسانس کنت:",
+       "license-header": "اجازه‌نامه",
        "nolicense": "هچ یک انتخاب نه بوتت",
+       "licenses-edit": "گزینه‌های مجوز ویرایش",
        "license-nopreview": "(بازبین موجود نهنت)",
-       "upload_source_url": "(یک متعبرین، عمومی دسترسی انت URL)",
-       "upload_source_file": "(یک فایل ته شمی کامپیوتر)",
-       "listfiles-summary": "ای حاصین صفحه کل آپلودی فایلانء پیش داریت.\nبه طور پیش فرض اهری فایل آپلودی ته بالاد لیست پیش دارگ بیت.\nیک کلیکی بالاد ستون ترتیب عوض کنت.",
+       "upload_source_url": "(شما یک پرونده انتخاب از یک URL معتبر و دسترس عموم انتخاب کردید)",
+       "upload_source_file": "(پرونده‌ای از رایانهٔ شما انتخاب شده‌است)",
+       "listfiles-delete": "پاک کورتین",
+       "listfiles-summary": "این صفحهٔ ویژه تمام پرونده‌های بارگذاری‌شده را نمایش می‌دهد.",
        "listfiles_search_for": "گردگ په  مدیا:",
        "imgfile": "فایل",
        "listfiles": "لیست فایل",
+       "listfiles_thumb": "نائونی",
        "listfiles_date": "تاریح",
        "listfiles_name": "نام",
        "listfiles_user": "کاربر",
        "listfiles_size": "اندازه",
        "listfiles_description": "توضیح",
        "listfiles_count": "نسخ",
+       "listfiles-show-all": "شامل نسخه‌های قدیمی عکس‌ها",
+       "listfiles-latestversion": "انونین ویرژن",
        "listfiles-latestversion-yes": "هان",
        "listfiles-latestversion-no": "نه",
        "file-anchor-link": "فایل",
        "filehist-dimensions": "جنبه یان",
        "filehist-filesize": "اندازه فایل",
        "filehist-comment": "نظر",
-       "imagelinks": "Ù\84Û\8cÙ\86Ú© Ù\81اÛ\8cÙ\84",
+       "imagelinks": "پاÛ\8cÙ\84Û\8c Ù¾Ù\87 Ú©Ø§Ø± Ú©Û\8cپتÛ\8cÙ\86",
        "linkstoimage": "جهلیگین {{PLURAL:$1|صفحه |$1 صفحات لینک}} پی ای فایل",
        "linkstoimage-more": "گیشتر چه  $1 {{PLURAL:$1|صفحه لینکان|صفحات لینک}} پی ای فایل.\nجهلگین لیست {{PLURAL:$1|اولین لینک صفحه|اولین $1 لینکان صفحه ی}} پی ای فایل فقط پیش داریت.\nیک [[Special:WhatLinksHere/$2|لیست کامل]] موجودنت.",
        "nolinkstoimage": "هچ صفحه ای نیست که به ای فایل لینک بوت.",
        "morelinkstoimage": "View [[Special:WhatLinksHere/$1|گیشتر لینکان]]به ای فایل",
+       "linkstoimage-redirect": "$1 (تغییرمسیر پرونده) $2",
        "duplicatesoffile": "جهلیگین {{PLURAL:$1|فایل یک کپی انت|$2 فایلان کپی انت}} چه هی فایل ([[Special:FileDuplicateSearch/$2|گیشترین اطلاعات]]):",
        "sharedupload": "ای فایل چه $1 انت و شاید گون دگه پروژه یان استفاده بیت.",
        "sharedupload-desc-there": "ای پرونده در $1 انت و ممکن انت ته دگه پروژه‌ها هم استفاده ببیت.\nپه اطلاعات گیشتذ لطفاً [$2 صفحهٔ توضیحات پرونده] را بچاریت.",
        "sharedupload-desc-here": "ای پرونده ته $1 هستن و ممکن انت ته دگه پروژه‌هان هم استفاده ببیت.\nتوضیحات موجود ته [$2 صفحهٔ توضیحات پرونده] ته ادان،جهل پیش دارگ بنت.",
+       "sharedupload-desc-edit": "این پرونده از $1 است و می‌تواند توسط پروژه‌های دیگر هم استفاده شود.\nاگر خواستید می‌توانید توضیحات پرونده را از [$2 صفحهٔ توضیحاتش] در آنجا ویرایش کنید.",
+       "sharedupload-desc-create": "این پرونده از $1 است و می‌تواند توسط پروژه‌های دیگر هم استفاده شود.\nاگر خواستید می‌توانید توضیحات پرونده را از [$2 صفحهٔ توضیحاتش] در آنجا ویرایش کنید.",
        "filepage-nofile": "هچ فایلی گون ای نام نیستن",
        "filepage-nofile-link": "هی فایلی گوپن ای نام نیستن، بله شما تونیت [آی ءَ $1 بار کنیت]",
        "uploadnewversion-linktext": "یک نوکین نسخه ای چه ای فایل آپلود کن",
-       "shared-repo-from": "چه $1",
+       "shared-repo-from": "شه $1",
        "shared-repo": "هورین مخزن",
+       "upload-disallowed-here": "متأسفانه شما نمی‌توانید این پرونده را بازنویس کنید.",
        "filerevert": "ترین $1",
        "filerevert-legend": "ترینگ فایل",
        "filerevert-intro": " شما په ترینگء '''[[Media:$1|$1]]''' په  [$4 نسخه ای په داب چه $3, $2].",
-       "filerevert-comment": "نظر:",
+       "filerevert-comment": "دلیل:",
        "filerevert-defaultcomment": "تررت په نسخه په داب $2, $1",
        "filerevert-submit": "تررگ",
        "filerevert-success": "''[[Media:$1|$1]]'''  بدل بوتت په [$4 نسخه په داب چه $3, $2].",
        "filedelete-reason-otherlist": "دگ دلیل",
        "filedelete-reason-dropdown": "*متداول این دلایل حذف\n** نقص حق کپی\n** فایل کپی",
        "filedelete-edit-reasonlist": "اصلاح دلایل حذف",
+       "filedelete-maintenance": "حذف و احیای پرونده‌ها در مدت نگهداری به طور موقت غیرفعال است.",
+       "filedelete-maintenance-title": "نمی‌تواند پرونده را حذف کند",
        "mimesearch": "گردگ په مایم",
-       "mimesearch-summary": "اÛ\8c ØµÙ\81Ø­Ù\87 Ù\81Û\8cÙ\84تر Ú©ØªÙ\86 Ù\81اÛ\8cÙ\84اÙ\86 Ù¾Ù\87 Ø§Ø³Ø§Ø³ Ù\86Ù\88ع Ù\85اÛ\8cÙ\85 Ø§Ø´ Ù\81عاÙ\84 Ú©Ù\86ت.\nÙ\88رÙ\88دÛ\8c\85تحÙ\88اÙ\86Ù\88ع/زÛ\8cرÙ\86Ù\88عØ\8cÙ\85Ø«Ù\84<code>image/jpeg</code>.",
+       "mimesearch-summary": "با Ú©Ù\85Ú© Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø´Ù\85ا Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ù¾Ø±Ù\88Ù\86دÙ\87â\80\8cÙ\87اÛ\8cÛ\8c Ú©Ù\87 Û\8cÚ© Ù\86Ù\88ع MIME Ø¨Ù\87 Ø®ØµÙ\88ص Ø¯Ø§Ø±Ù\86د Ø±Ø§ Ù¾Û\8cدا Ú©Ù\86Û\8cد.\nÙ\88رÙ\88دÛ\8c: Ø¨Ù\87 ØµÙ\88رت contenttype/subtype Û\8cا contenttype/*&lrm;Ø\8c Ù\86ظÛ\8cر <code>image/jpeg</code>.",
        "mimetype": "نوع مایم:",
        "download": "آیرگیزگ",
        "unwatchedpages": "نه چارتگین صفحات",
        "listredirects": "لیست غیر مستقیمان",
+       "listduplicatedfiles": "فهرست همهٔ پرونده‌ها به‌همراه تکراری‌ها",
+       "listduplicatedfiles-summary": "این فهرست پرونده‌هایی با نسخه‌های اخیر این پرونده تکراری است که نسخه‌های اخبر سایر پرونده‌ها است. فقط پرونده‌های محلی در نظر گرفته شده‌اند.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] دارد.",
        "unusedtemplates": "تمپلتان بی استفاده",
        "unusedtemplatestext": "ای صفحه لیست کن کل صفحات ته {{ns:template}} نام فضا که ته دگه صفحه نهنت.\nمه شموش تا کنترل کنیت په دگه لینکان ته تمپلتان پیش چه حذف کتن آیان.",
        "unusedtemplateswlh": "دگر لینکان",
        "randompage": "تصادفی صفحه",
-       "randompage-nopages": "\"$1\" هچ صفحه ای ته ای نام فضا نیست.",
+       "randompage-nopages": "هیچ صفحه‌ای در این {{PLURAL:$2|فضای نام|فضاهای نام}} موجود نیست: $1.",
+       "randomincategory": "بی اهتیارین تاکدیم بی تهرِ تا",
+       "randomincategory-invalidcategory": "«$1» نامی معتبر برای یک ردهٔ نیست.",
+       "randomincategory-nopages": "هیچ تاکدیمی بی ای تهرِ تا [[:Category:$1|$1]] وجود نداریت.",
+       "randomincategory-category": "تهر:",
+       "randomincategory-legend": "بی اهتیارین تاکدیم بی تهرِ تا",
        "randomredirect": "تصادفی غیر مستقیم",
        "randomredirect-nopages": "\"$1\"هچ غیر مستقیمی ته ای نام فضا نیست.",
        "statistics": "آمار",
        "statistics-header-pages": "صفحه ی آمار",
        "statistics-header-edits": "اصلاح آمار",
        "statistics-header-users": "آمار کاربر",
+       "statistics-header-hooks": "دیگرین آمار",
        "statistics-articles": "صفحات محتوا",
-       "statistics-pages": "صÙ\81حات",
+       "statistics-pages": "تاکدÛ\8cÙ\85اÙ\86",
        "statistics-pages-desc": "کل صفحات ته ویکی په داب صفحات بحث ،غیر مستقیمان و دگه چیز.",
        "statistics-files": "آپلود بیتگین فایلان",
        "statistics-edits": "اصلاح صفحات چه وهدی که {{SITENAME}} شر بوتت",
        "statistics-users": "ثبت نامی [[Special:ListUsers|users]]",
        "statistics-users-active": "فعالین کاربر",
        "statistics-users-active-desc": "کاربرانی که ته پیشگین {{PLURAL:$1|روچ|$1 روچان}} کاری اش کتت",
+       "pageswithprop": "آ تاکدیمان که بی تاکدیمی رکما انت",
+       "pageswithprop-legend": "آ تاکدیمان که بی تاکدیمی رکما انت",
+       "pageswithprop-text": "این صفحه فهرستی است از صفحه‌هایی که از یک خاصیت صفحهٔ خاص استفاده می‌کنند.",
+       "pageswithprop-prop": "هاسیئتی نام:",
        "pageswithprop-submit": "برا",
        "pageswithprop-prophidden-long": "جزییات مخفی متن طولانی ($1)",
        "pageswithprop-prophidden-binary": "جزییات مقدار مخفی باینری ($1)",
        "nrevisions": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}}",
        "nviews": "$1 {{PLURAL:$1|دیستن|دیستن}}",
        "nimagelinks": "$1 × $2, $3 {{PLURAL:$3|صفحه|صفحات}}",
+       "ntransclusions": "بی $1 {{PLURAL:$1|تاکدیم|تاکدیم}} استپاده بوته",
        "specialpage-empty": "په ای گزارش هچ نتیجه ای نیست ان.",
        "lonelypages": "صفحات یتیم",
        "lonelypagestext": "جهلیگین صفحات چه دگه صفحات لینک یا داهل نه بوتگنت ته {{SITENAME}}.",
        "wantedpages": "لوٹتگین صفحات",
        "wantedpages-badtitle": "عنوان غیر مجازین ته جمع نتایج: $1",
        "wantedfiles": "لوٹتگین فایلان",
+       "wantedfiletext-cat": "پرونده‌های زیر استفاده می‌شوند اما موجود نیستند. همچنین ممکن است پرونده‌های مخازن خارجی با وجود موجود بودن در اینجا فهرست شوند. هرگونه رتبه مثبت کاذب <del>خط خواهد خورد.</del> علاوه بر این، صفحاتی که پرونده‌هایی ناموجود را در خود جای داده‌اند در [[:$1]] فهرست شده‌اند.",
        "wantedtemplates": "لوٹتگین تمپلت",
        "mostlinked": "صفحاتی که گیشنر لینک دیگ بیتگنت",
        "mostlinkedcategories": "دسته جاتی که گیشتر لینک دیگ بیتگنت",
        "protectedpages-indef": "فقط محافظت نامحدود",
        "protectedpages-cascade": "محافظتان آبشاری فقط",
        "protectedpagesempty": "هچ صفحه ای گون ای پارامترآن",
-       "protectedpages-page": "دیم یا تاک",
+       "protectedpages-page": "تاکدیم",
+       "protectedpages-unknown-timestamp": "ناشناس",
+       "protectedpages-unknown-performer": "نا زانتین کار زوروک",
        "protectedtitles": "عناوین محافظتی",
+       "protectedtitles-summary": "این صفحه فهرست صفحات موجود است که در حال حاضر محافظت از ساخت شده‌اند. برای فهرست عنوان‌هایی که محافظت از ویرایش شده‌اند، به [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] مراجعه کنید.",
        "protectedtitlesempty": "هچ عنوانی هنو گو ای پارامتران محافظت نهنت.",
        "listusers": "لیست کاربر",
        "listusers-editsonly": "فقط کاربرانی که اصلاحاتش هست پیش بدار",
        "booksources": "منابع کتاب",
        "booksources-search-legend": "گردگ په منابع کتاب",
        "booksources-isbn": "شابک:",
+       "booksources-search": "گردگ",
        "booksources-text": "چهلا یک لیستی چه لینکان په دگه سایتان هست که نوکین  یا مستعمل این کتاب بها کنند و شما شاید گیشترین اطلاعات آی کتابانی باره که پرش گردیت در گیزیت:",
        "booksources-invalid-isbn": "داتگین شماره کتاب چوش که جاه کیت درست نهنت, خطایانءِ بچار چه اصلی جاگاه کپی کن",
-       "specialloguserlabel": "کاربر:",
+       "specialloguserlabel": "Ú¯Ù\88Ø´Û\8cÙ\86دÙ\87:",
        "speciallogtitlelabel": "عنوان:",
        "log": "ورودان",
        "all-logs-page": "کل ورودان",
        "allpagesto": "پیش بدار صفحاتی که هلنت گون:",
        "allarticles": "کل صفحات",
        "allinnamespace": "کل صفحات($1 نام فضا)",
-       "allpagessubmit": "برو",
+       "allpagessubmit": "برا",
        "allpagesprefix": "صفحات پیش دار گون پیشوند:",
        "allpagesbadtitle": "داتگین عنوان صفحه نامعتبر انت یا  یک پیشوند بین ویکی یا یبن زبانی سحتی هستت.\nشاید شامل یک یا گیشتر کاراکتر بیت که ته عنوانین استفاده نه بیت.",
        "allpages-bad-ns": "{{SITENAME}} فضانامی نیست \"$1\".",
-       "categories": "دستÙ\87 Û\8cان",
+       "categories": "تÙ\87رئان",
        "categoriespagetext": "جهلیگین {{PLURAL:$1|دسته شامل|دسته جات شامل}} صفحات یا مدیا انت\n[[Special:UnusedCategories|دسته جات بی استفاده]] ادان پیشدارگ نه بنت.\n هنچوش بچار[[Special:WantedCategories|لوٹتگین دسته]].",
        "categoriesfrom": "پیشدار دسته جات که شروع بنت گون:",
        "special-categories-sort-count": "ترتیب په اساس شمار",
        "noemailtitle": "هچ آدرس ایمیل",
        "noemailtext": "ای کاربر یک آدرس ایمیل معتبری مشخص نه کتت.",
        "nowikiemailtext": "ای کاربر نه لوٹیت چه دگه کاربران ایمیل بگیرت.",
+       "emailusername": "کار زوروکی نام:",
+       "emailusernamesubmit": "دیم دی",
        "email-legend": "یک ایمیلی په دگه کاربر {{SITENAME}} دیم دی",
-       "emailfrom": ":چه",
-       "emailto": "به:",
+       "emailfrom": "شه:",
+       "emailto": "بی:",
        "emailsubject": "موضوع:",
        "emailmessage": "کوله:",
        "emailsend": "دیم دی",
        "addedwatchtext": "صفحه  \"[[:$1]]\"  په شمی [[Special:Watchlist|watchlist]] هور بیت.\nدیمگی تغییرات په ای صفحه و آیاء صفحه گپ ادان لیست بنت، و صفحه پررنگ جاه کیت ته [[Special:RecentChanges|لیست نوکیت تغییرات]] په راحتر کتن شی که آی زورگ بیت.",
        "removedwatchtext": "صفحه\"[[:$1]]\"  چه [[Special:Watchlist|شمی لیست چارگ]]. دربیت.",
        "watch": "به چار",
-       "watchthispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Û\8c Ø¨Ú\86ار",
+       "watchthispage": "اÛ\8c ØªØ§Ú©Ø¯Û\8cÙ\85ا Ø¨Ú¯Û\8cÙ\86د",
        "unwatch": "نه چارگ",
        "unwatchthispage": "چارگ بند کن",
        "notanarticle": "یک صفحه محتوا نهت",
        "enotif_body": "آزیزین $WATCHINGUSERNAME،\n\nصفحه {{SITENAME}} $PAGETITLE بوتت $CHANGEDORCREATED ته  $PAGEEDITDATE گون $PAGEEDITOR، بچار $PAGETITLE_URL په هنوکین نسخه.\n\n$NEWPAGE\n\nخلاصهء اصلاح کنوک:$PAGESUMMARY $PAGEMINOREDIT\n\nتماس گر گون اصلاح کنوک:\nایمیل:$PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nدگه گیشترین اخطار په تغییرات دگه دیم دهگ نه بوت مگر شی که شما ای صفحه بچاریت.\nشما تونیت هنچوش نشانآن اخطارء ته وتی لیست چارگ په کلی چارتگین صفحات تنظیم کنیت.\n\nشمی دوستین سیستم اخطار {{SITENAME}}\n\n--\nپه عوض کتن تنظیمات وتی لیست چارگ،به چار\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nنظرات و گیشترین کمک:\n$HELPPAGE",
        "created": "شربوتت",
        "changed": "عوض بوت.",
-       "deletepage": "حذÙ\81 ØµÙ\81Ø­Ù\87",
+       "deletepage": "تاکدÛ\8cÙ\85Ù\90 Ù¾Ø§Ú© Ú©Ù\88رتÛ\8cÙ\86",
        "confirm": "تایید",
        "excontent": "محتوا هستنت:  '$1'",
        "excontentauthor": "محتوا ات: '$1' (و  فقط شرکت کنندگان انت '[[Special:Contributions/$2|$2]]')",
        "undelete-show-file-submit": "بله",
        "namespace": "فاصله نام",
        "invert": "برگردینگ انتخاب",
-       "blanknamespace": "(اصÙ\84ی)",
+       "blanknamespace": "(بÙ\8fÙ\86Û\8cادی)",
        "contributions": "مشارکتان کاربر",
        "contributions-title": "مشارکتان کاربر په $1",
        "mycontris": "می مشارکتان",
        "exportcuronly": "فقط شامل هنوکین بازبینی، نه تاریح کامل",
        "exportnohistory": "----\n'''توجه:''' گردگ تاریح کامل صفحات چه طریق ای فرم په خاطر دلایل اجرایی غیر فعال بوتت.",
        "export-submit": "درگیزگ",
-       "export-addcattext": "چه دسته صفحات اضافه کن:",
+       "export-addcattext": "تاکدیمانِ اڈ کورتین شه تهر آ :",
        "export-addcat": "اضافه کن",
        "export-addnstext": "صفحاتی چه نام‌فضا هورکن:",
        "export-addns": "هورکن",
        "allmessages-filter-modified": "عوض بیتگ",
        "allmessages-prefix": "فیلتر گون پیشوند:",
        "allmessages-language": "زبان:",
-       "allmessages-filter-submit": "برو",
+       "allmessages-filter-submit": "برا",
        "thumbnail-more": "مزن",
        "filemissing": "فایل گارنت",
        "thumbnail_error": "خطا ته شرکتن هوردوکین$1",
        "tooltip-search": "گردگ {{SITENAME}}",
        "tooltip-search-go": "برو به یک صفحه گون همی نامی اگر که هستن",
        "tooltip-search-fulltext": "گرد صفحات په ای متن",
-       "tooltip-p-logo": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84ی",
-       "tooltip-n-mainpage": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c Ø¨Ú\86ار",
+       "tooltip-p-logo": "دÛ\8cستÛ\8cÙ\86 Ø¨Ù\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85ی",
+       "tooltip-n-mainpage": "دÛ\8cستÛ\8cÙ\86 Ø¨Ù\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85Û\8c",
        "tooltip-n-mainpage-description": "دیستن صفحه اصلی",
        "tooltip-n-portal": "پروژه ی باره: هرچی که شما تونیت انجام دهیت، جاهی که چیزانا درگیزیت",
        "tooltip-n-currentevents": "در گیزگ اطلاعات پیش زمینه ته هنوکین رویدادآن",
        "colon-separator": ":&#32;",
        "imgmultipageprev": "← پیشگین صفحه",
        "imgmultipagenext": "صفحه بعدی →",
-       "imgmultigo": "برو!",
+       "imgmultigo": "برا!",
        "imgmultigoto": "برو به صفحه  $1",
        "ascending_abbrev": "بالادی",
        "descending_abbrev": "جهلادی",
        "table_pager_first": "اولی صفحه",
        "table_pager_last": "اهری صفحه",
        "table_pager_limit": "پیش دار  $1  ایتم ته هر صفحه",
-       "table_pager_limit_submit": "برو",
+       "table_pager_limit_submit": "برا",
        "table_pager_empty": "بی نتیجه",
        "autosumm-blank": "هالیکین صفحه",
        "autosumm-replace": "جاه په جاه کتن صفحه گون '$1'",
index a92960e..24cbe04 100644 (file)
        "search-result-category-size": "$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}} ($2 {{PLURAL:$2|падкатэгорыя|падкатэгорыі|падкатэгорыяў}}, $3 {{PLURAL:|файл|файлы|файлаў}})",
        "search-redirect": "(перанакіраваньне $1)",
        "search-section": "(сэкцыя $1)",
+       "search-category": "(катэгорыя $1)",
        "search-file-match": "(супадае зь зьмесьцівам файла)",
        "search-suggest": "Магчыма, вы мелі на ўвазе: $1",
        "search-interwiki-caption": "Сумежныя праекты",
        "api-error-stashfailed": "Унутраная памылка: сэрвэр ня змог захаваць часовы файл.",
        "api-error-publishfailed": "Унутраная памылка: сэрвэр ня змог захаваць часловы файл.",
        "api-error-stasherror": "Падчас загрузкі файла ў сховішча адбылася памылка.",
+       "api-error-stashedfilenotfound": "Схаваны файл ня быў знойдзены пры спробе загрузіць яго з схованкі.",
        "api-error-timeout": "Сэрвэр не адказаў у чаканы тэрмін.",
        "api-error-unclassified": "Узьнікла невядомая памылка",
        "api-error-unknown-code": "Невядомая памылка: «$1».",
index 1463611..d7e2743 100644 (file)
        "nstab-user": "Старонка",
        "nstab-media": "Мультымедыя",
        "nstab-special": "Адмысловая старонка",
-       "nstab-project": "Старонка праекту",
+       "nstab-project": "Старонка праекта",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Паведамленне",
        "nstab-template": "Шаблон",
        "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-emailtext-user": "Удзельнік $1 з праекту {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
+       "passwordreset-emailtext-user": "Удзельнік $1 з праекта {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і выбраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
        "passwordreset-emailelement": "Імя ўдзельніка: $1\nЧасовы пароль: $2",
        "passwordreset-emailsent": "Па электроннай пошце быў адпраўлены ліст пра скід пароля.",
        "passwordreset-emailsent-capture": "Ніжэй прыведзены адпраўлены ліст пра скід пароля.",
        "contributions-userdoesnotexist": "Уліковы запіс удзельніка \"$1\" не зарэгістраваны.",
        "nocontribs": "Не знойдзена змен, адпаведных зададзеным параметрам.",
        "uctop": "(апошн.)",
-       "month": "Ад месяцу (і раней):",
-       "year": "Ад году (і раней):",
+       "month": "Ад месяца (і раней):",
+       "year": "Ад года (і раней):",
        "sp-contributions-newbies": "Паказваць толькі ўклады з новых рахункаў",
        "sp-contributions-newbies-sub": "З новых рахункаў",
        "sp-contributions-newbies-title": "Уклады ўдзельнікаў з новых рахункаў",
index 3b4f98b..1b52e6e 100644 (file)
        "viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:",
        "viewyourtext": "আপনি ' ' ' আপনার সম্পাদনা ' ' ' এই পাতায় দেখতে এবং কপি করতে পারেন:",
        "protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
-       "editinginterface": "'''সতর্কীকরণ:''' আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
+       "editinginterface": "<strong>সতর্কীকরণ:</strong> আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।",
+       "translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে, দয়া করে [//translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
        "cascadeprotected": "এই পাতাটি সম্পাদনা থেকে সুরক্ষিত, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতার|টি পাতার}} অন্তর্গত, যে পাতা(গুলি) \"প্রপাতাকার\" (cascading) বৈশিষ্ট্য সহযোগে সুরক্ষিত করা হয়েছে:\n$2",
        "namespaceprotected": "'''$1''' নামস্থানে কোন পাতা আপনার সম্পাদনা করার অনুমতি নেই।",
        "customcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
        "content-model-text": "সাধারণ লেখা",
        "content-model-javascript": "জাভাস্ক্রিপ্ট",
        "content-model-css": "সিএসএস",
+       "duplicate-args-category": "টেমপ্লেট আহ্বানে সদৃশ আর্গুমেন্ট ব্যবহার করা পাতা",
+       "duplicate-args-category-desc": "এই পাতায় টেমপ্লেট আহ্বান উপস্থিত রয়েছে যা সদৃশ আর্গুমেন্ট ব্যবহার করেছে, যেমন <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> বা <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>।",
        "expensive-parserfunction-warning": "'''সতর্ক হোন:''' এই পাতাটি অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল রয়েছে।\n\nএটি $2-এর চেয়ে কম পরিমাণ {{PLURAL:$2|কল|কল}} থাকা উচিত, যেখানে মোট কলের সংখ্যা {{PLURAL:$1|বর্তমানে $1|বর্তমানে $1}}।",
        "expensive-parserfunction-category": "অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল থাকা পাতাসমূহ",
        "post-expand-template-inclusion-warning": "'''সতর্ক হোন:''' টেমপ্লেটের ইনক্লুড আকার অনেক বেশি।\nকিছু টেমপ্লেট সংযুক্ত করা নাও যেতে পারে।",
        "search-result-category-size": "{{PLURAL:$1 |১টি সদস্য |$1টি সদস্য}} ({{PLURAL:$2 |১টি উপবিষয়শ্রেণী|$2টি উপবিষয়শ্রেণী}}, {{PLURAL:$3 |১টি ফাইল |$3টি ফাইল}})",
        "search-redirect": "(পুনর্নিদেশনা $1)",
        "search-section": "(অনুচ্ছেদ $1)",
+       "search-category": "(বিষয়শ্রেণী $1)",
        "search-file-match": "(নথির বিষয়বস্তু মিলে যায়)",
        "search-suggest": "আপনি সম্ভবত বুঝাতে চাইছেন: $1",
        "search-interwiki-caption": "সহপ্রকল্পসমূহ",
        "gender-female": "তিনি (মহিলা) উইকি পাতা সম্পাদনা করেন",
        "prefs-help-gender": "সেটিংসের এই পরিবর্তন ঐচ্ছিক।\nসফটওয়্যারে মাধ্যমে লিঙ্গ অনুযায়ী সম্বধনের ক্ষেত্রে এটি ব্যবহৃত হয়।\nএই তথ্য সকলের জন্য উন্মুক্ত থাকেবে।",
        "email": "ই-মেইল",
-       "prefs-help-realname": "আসল নাম দেওয়া অনাবশ্যক। যদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।",
+       "prefs-help-realname": "আসল নাম দেওয়া অনাবশ্যক।\nযদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।",
        "prefs-help-email": "ইমেইল ঠিকানা ঐচ্ছিক, তবে পাসওয়ার্ড ভুলে গেলে নতুন করে পাসওয়ার্ড নিতে এটির প্রয়োজন হবে।",
        "prefs-help-email-others": "আপনি আপনার পরিচয় প্রকাশ না করেও আপনার ব্যবহারকারী অথবা আলাপ পাতাটির মাধ্যমে অন্যদেরকে আপনার সাথে যোগাযোগ করতে দিতে পারেন।",
        "prefs-help-email-required": "ই-মেইল ঠিকানা আবশ্যক।",
        "pager-older-n": "{{PLURAL:$1|আরও পুরনো ১টি|আরও পুরনো $1টি}}",
        "suppress": "ওভারসাইট",
        "querypage-disabled": "কারিগরি কারণে এই বিশেষ পাতাটি আপাতত বন্ধ রয়েছে।",
+       "apihelp": "এপিআই সাহায্য",
+       "apihelp-no-such-module": "মডিউল \"$1\" পাওয়া যায়নি।",
        "booksources": "বইয়ের উৎস",
        "booksources-search-legend": "বইয়ের উৎসের জন্য অনুসন্ধান করা হোক",
        "booksources-isbn": "আইএসবিএন:",
        "tooltip-preferences-save": "পছন্দ সংরক্ষণ",
        "tooltip-summary": "একটি সংক্ষিপ্ত সারাংশ দিন",
        "interlanguage-link-title": "$1 - $2",
+       "common.css": "/* এখানে সিএসএস নিবেশিত করা হলে তা সব স্কিনে প্রয়োগ করা হবে */",
        "anonymous": "{{SITENAME}} এর বেনামী {{PLURAL:$1|ব্যবহারকারী|ব্যবহারকারীবৃন্দ}}",
        "siteuser": "{{SITENAME}} ব্যবহারকারী $1",
        "anonuser": "{{SITENAME}} বেনামী ব্যবহারকারী $1",
        "version-parser-function-hooks": "পার্সার ফাংশন হুক",
        "version-hook-name": "হুকের নাম",
        "version-hook-subscribedby": "সাবস্ক্রাইব করেছেন",
-       "version-version": "(সংস্করণ $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[নাম নেই]",
        "version-license": "মিডিয়াউইকি লাইসেন্স",
        "version-ext-license": "লাইসেন্স",
        "mediastatistics-header-audio": "অডিও",
        "mediastatistics-header-video": "ভিডিও",
        "mediastatistics-header-office": "অফিস",
+       "mediastatistics-header-archive": "সংকুচিত বিন্যাস",
        "json-error-unknown": "JSON-এ একটি সমস্যা রয়েছে। ত্রুটি: $1",
        "json-error-syntax": "সিনট্যাক্স ত্রুটি"
 }
index 912ae86..880f255 100644 (file)
        "viewyourtext": "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
        "protectedinterface": "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.\nPer afegir o canviar les traduccions per a tots els wikis, feu servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
        "editinginterface": "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'altres usuaris. Per afegir o modificar traduccions a totes les wikis, plantegeu-vos utilitzar la [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
+       "translateinterface": "Per afegir o canviar traduccions per a tots els wikis, utilitzeu [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
        "cascadeprotected": "Aquesta pàgina està protegida i no es pot modificar perquè està inclosa en {{PLURAL:$1|la següent pàgina, que té|les següents pàgines, que tenen}} activada l'opció de «protecció en cascada»:\n$2",
        "namespaceprotected": "No teniu permís per a modificar pàgines en l'espai de noms '''$1'''.",
        "customcssprotected": "No teniu permisos per editar la pàgina CSS perquè conté els paràmetres personals d'un altre usuari.",
        "badipaddress": "L'adreça IP no té el format correcte.",
        "blockipsuccesssub": "S'ha blocat amb èxit",
        "blockipsuccesstext": "S'ha {{GENDER:$1|blocat|blocada}} [[Special:Contributions/$1|$1]] .<br />\nVegeu la [[Special:BlockList|llista de bloqueigs]] per revisar-los.",
-       "ipb-blockingself": "Esteu a punt de blocar-vos a vós mateix! Esteu segurs de voler-ho fer?",
-       "ipb-confirmhideuser": "Esteu a punt de bloquejar un usuari que està marcat amb l'opció «amaga l'usuari». Això suprimirà el seu nom a totes les llistes i registres. Esteu segurs de voler-ho fer?",
+       "ipb-blockingself": "Esteu a punt de blocar el vostre propi compte! Esteu segur de voler-ho fer?",
+       "ipb-confirmhideuser": "Esteu a punt de blocar un usuari amb l'opció d'amagar el seu nom. Això suprimirà el seu nom a totes les llistes i registres. Esteu segur de voler-ho fer?",
        "ipb-confirmaction": "Si esteu segur que voleu fer-ho, marqueu el camp «{{int:ipb-confirm}}» a la part inferior.",
        "ipb-edit-dropdown": "Edita les raons per a blocar",
        "ipb-unblock-addr": "Desbloca $1",
index fc2629b..8c9c020 100644 (file)
        "content-model-text": "цхьалхе йоза",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Кепийн кхайкхамашкахь аргументаш юх-юха лелош йолу агӀонаш",
        "expensive-parserfunction-warning": "'''Тидам бе!''' Ресурсийн функцийн дехарш сов даьлла агӀонаш .\n\nДукху хилла ца деза {{PLURAL:$2|$2 дехар|$2 дехарш|1=цхьана дехар}}, хӀинца $1 {{PLURAL:$1|дехар}} ду.",
        "expensive-parserfunction-category": "Ресурсийн функцийн дехарш сов даьлла агӀонаш",
        "post-expand-template-inclusion-warning": "ДӀахьедар: юкъа тоьхна кепашан жамӀан барам тӀех бокха бу. Цхьайолу кепаш юкъа тухур яц.",
        "search-result-category-size": "$1 {{PLURAL:$1|юкъаяр}} ($2 {{PLURAL:$2|1=бухара категори|бухара категореш}}, $3 {{PLURAL:$3|1=файл|файлаш}}).",
        "search-redirect": "(дlасахьажийна $1)",
        "search-section": "(дакъа $1)",
+       "search-category": "(категори $1)",
        "search-file-match": "(файлан чулацаме тера хилар)",
        "search-suggest": "Хила мега ахьа лоьхарг: $1",
        "search-interwiki-caption": "Гергара проекташ",
-       "search-interwiki-default": "$1 хилам.:",
+       "search-interwiki-default": "$1 хилам:",
        "search-interwiki-more": "(кхин)",
        "search-relatedarticle": "ХӀоттаделларг",
        "searchrelated": "хlоттаделларг",
        "searchall": "массо",
-       "showingresults": "Лахахьа {{PLURAL:$1|гойта|гойту|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам|хиламаш|хиламаш}}, дlаболало кху № <strong>$2</strong>.",
+       "showingresults": "Лахахьа {{PLURAL:$1|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам}}, дӀаболало кху № <strong>$2</strong>.",
        "showingresultsinrange": "Лахахь гайтина {{PLURAL:$1|<strong>1</strong> хилам}} диапазонехь <strong>$2</strong> тӀера <strong>$3</strong> кхаччалц.",
        "search-showingresults": "{{PLURAL:$4|Хилам <strong>$1</strong> <strong>$3</strong> нах}}",
        "search-nonefound": "Дехаре терра цхьа хӀума ца карийна.",
        "brokenredirects-delete": "дӀаяккха",
        "withoutinterwiki": "Юкъарвики-хьажоргаш йоцу агӀонаш",
        "withoutinterwiki-summary": "Лахара агӀонийн юкъарвики-хьажоргаш яц:",
+       "withoutinterwiki-legend": "ТӀетоьхна элпаш",
        "withoutinterwiki-submit": "Гайта",
        "fewestrevisions": "ЧӀогӀа кӀезиг версеш йолу агӀонаш",
        "nbytes": "$1 {{PLURAL:$1|байт}}",
        "pager-newer-n": "{{PLURAL:$1|алсамо керла 1|алсамо керланаш $1}}",
        "pager-older-n": "{{PLURAL:$1|алсамо шира 1|алсамо ширниш $1}}",
        "suppress": "Хьулдар",
+       "apihelp": "API гӀо",
+       "apihelp-no-such-module": "Модуль «$1» цакарий.",
        "booksources": "Жайнан хьосташ",
        "booksources-search-legend": "Жайнех лаьцна хаам лахар",
        "booksources-search": "Лаха",
        "locknoconfirm": "Ахьа бакъдеш йолу меттиге билгало йилина яц.",
        "lockdbsuccesssub": "Хаамийн базан блоктоьхна",
        "unlockdbsuccesssub": "Хаамийн базан тӀера блокдӀаяьккхина",
+       "lockedbyandtime": "($1 $2 $3)",
        "move-page": "$1 — цӀе хийцар",
        "move-page-legend": "ЦӀe хийца яр",
        "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movenotallowedfile": "Хьан файлийн цӀераш хийца бакъо яц.",
        "cant-move-user-page": "Хьан бакъо яц декъашхойн коьрта агӀонийн цӀераш хийца.",
        "cant-move-to-user-page": "Хьан бакъо яц агӀона цӀе декъашхочун агӀон тӀе хийца (бухара агӀон тӀе хийца мега).",
+       "cant-move-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
+       "cant-move-to-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
        "newtitle": "Керла цӀе",
        "move-watch": "Латайé хӀара агӀо тергаме могӀанан юкъахь",
        "movepagebtn": "АгӀон цӀе хийца",
        "nextdiff": "Тlяхьа догlа нисдинарг →",
        "imagemaxsize": "Суьртан бараман доза тохар:<br />''(Файла агӀона куц дийцар)''",
        "thumbsize": "Жима дина суьртан барам:",
-       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|агlо|агlонаш|агlонаш}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|агӀо}}",
        "file-info": "файлан барам: $1, MIME-тайп: $2",
        "file-info-size": "$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4",
        "file-info-size-pages": "$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4, $5 {{PLURAL:$5|1=агӀо|агӀонаш}}",
        "confirm-unwatch-button": "ХӀаъ",
        "confirm-unwatch-top": "ДӀаяккха хӀара агӀо хьай тергаме могӀанан юкъар?",
        "comma-separator": ",&#32;",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← хьалхара агlо",
        "imgmultipagenext": "тlаьхьара агlо →",
        "imgmultigo": "ДехьагӀо!",
        "imgmultigoto": "АгӀончу $1 гӀо",
        "img-lang-default": "(Ӏад битарца болу мотт)",
+       "img-lang-info": "Гайта хӀара сурт $1 $2 маттахь",
        "img-lang-go": "Кхочушдé",
+       "ascending_abbrev": "гар",
+       "descending_abbrev": "йина",
        "table_pager_next": "Тlаьхьа йогlу агlо",
        "table_pager_prev": "Хьалха йоьду агlо",
        "table_pager_first": "Дуьххьаралера агlо",
        "watchlistedit-raw-explain": "Лахахь гойтуш ю хьа тергаме могӀанийн юкъахь йолу агӀонаш. Хьан йиш ю могӀан хийцам ба, оьцу чура цӀераш тӀетухуш а дӀайохкуш а.\nХийцамаш бина баьлчи тӀетаӀе кнопка «{{int:Watchlistedit-raw-submit}}».\nХьа кхин йиш ю [[Special:EditWatchlist|лело стандартни тадар]].",
        "watchlistedit-raw-titles": "ДӀаяздарш:",
        "watchlistedit-raw-submit": "МогӀам Ӏалашбар",
+       "watchlistedit-raw-done": "Хьан тергаман могӀам Ӏалашбина",
        "watchlistedit-raw-added": "{{PLURAL:$1|ТӀетоьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ДӀаяьккхина|ДӀаяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-clear-title": "Тергаман могӀам дӀацӀанбар",
        "watchlisttools-edit": "Хьажа/нисбé могӀам",
        "watchlisttools-raw": "Йоза санна тае",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|дийцаре]])",
+       "unknown_extension_tag": "«$1» шордаран ца йоьвзу тег",
        "version": "Верси MediaWiki",
        "version-extensions": "ДӀахӀоттийна шордарш",
        "version-skins": "ДӀахӀоттийна кечяран темаш",
        "version-software-version": "Верси",
        "version-entrypoints": "ЧугӀо адресин тӀадамаш",
        "version-entrypoints-header-entrypoint": "Яздаран тӀадам",
+       "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath АгӀона тӀе некъ]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Скриптан тӀе некъ]",
        "redirect": "Декъашхочун файлан тӀера дӀасхьажор",
        "fileduplicatesearch-result-1": "«$1» файлах тера хӀума яц.",
        "fileduplicatesearch-noresults": "ЦӀе «$1» йолуш файл цакарий.",
        "specialpages": "Леррина агӀонаш",
+       "specialpages-note-top": "Легенда",
        "specialpages-note": "* Гуттарлера белха агlонаш.\n* <strong class=\"mw-specialpagerestricted\">Кlеззиг таронаш йолу леррина агlонаш.</strong>",
        "specialpages-group-maintenance": "Жамlаш гlирса хьашташ кхочушдар",
        "specialpages-group-other": "Кхин белхан агӀонаш",
index 5d65c1f..f23330b 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 položka|$1 položky|$1 položek}} ({{PLURAL:$2|1 podkategorie|$2 podkategorie|$2 podkategorií}}, {{PLURAL:$3|1 soubor|$3 soubory|$3 souborů}})",
        "search-redirect": "(přesměrování $1)",
        "search-section": "(část $1)",
+       "search-category": "(kategorie $1)",
        "search-file-match": "(odpovídá obsahu souboru)",
        "search-suggest": "Mysleli jste: $1",
        "search-interwiki-caption": "Sesterské projekty",
        "api-error-stashfailed": "Vnitřní chyba: Serveru se nepodařilo uložit dočasný soubor.",
        "api-error-publishfailed": "Vnitřní chyba: Serveru se nepodařilo zveřejnit dočasný soubor.",
        "api-error-stasherror": "Při načítání souboru do skrýše došlo k chybě.",
+       "api-error-stashedfilenotfound": "Při pokusu o načtení souboru ze skrýše nebyl uložený soubor nalezen.",
+       "api-error-stashpathinvalid": "Cesta, na které měl být soubor uložen ve skrýši, je neplatná.",
+       "api-error-stashfilestorage": "Při ukládání souboru do skrýše došlo k chybě.",
+       "api-error-stashzerolength": "Server nemohl soubor uložit do skrýše, protože má nulovou délku.",
+       "api-error-stashnotloggedin": "Pro ukládání souboru do skrýše musíte být přihlášeni.",
+       "api-error-stashwrongowner": "Soubor, ke kterému se ve skrýši pokoušíte přistoupit, vám nepatří.",
+       "api-error-stashnosuchfilekey": "Klíč souboru, ke kterém se ve skrýši pokoušíte přistoupit, neexistuje.",
        "api-error-timeout": "Server neodpověděl v očekávaném čase.",
        "api-error-unclassified": "Došlo k neznámé chybě.",
        "api-error-unknown-code": "Neznámá chyba: „$1“.",
index 51ba021..ec6594d 100644 (file)
        "emailuser": "E-mail til denne bruger",
        "emailuser-title-target": "Send e-mail til denne {{GENDER:$1|bruger}}",
        "emailuser-title-notarget": "Send e-mail til en bruger",
-       "emailpage": "E-mail bruger",
+       "emailpage": "E-mail til bruger",
        "emailpagetext": "Du kan bruge formularen nedenfor til at sende en e-mail til denne {{GENDER:$1|bruger}}.\nDen e-mailadresse, du har angivet i [[Special:Preferences|dine indstillinger]], vil dukke op i \"fra\"-feltet på e-mailen, så modtageren kan svare dig.",
        "defemailsubject": "{{SITENAME}}-e-mail fra brugeren \"$1\"",
        "usermaildisabled": "Bruger-e-mail deaktiveret",
        "emailmessage": "Besked:",
        "emailsend": "Send",
        "emailccme": "Send en kopi af denne e-mail til mig",
-       "emailccsubject": "Kopi sendes til $1: $2",
+       "emailccsubject": "Kopi af din besked til $1: $2",
        "emailsent": "E-mail sendt",
        "emailsenttext": "Din e-mail er blevet sendt.",
        "emailuserfooter": "Denne e-mail er sendt af $1 til $2 ved hjælp af funktionen \"E-mail til denne bruger\" på {{SITENAME}}.",
index 71c0722..eecd71f 100644 (file)
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "duplicate-args-category": "Seiten, die doppelte Argumente in Vorlagenaufrufe verwenden",
+       "duplicate-args-category": "Seiten, die doppelte Argumente in Vorlagenaufrufen verwenden",
        "duplicate-args-category-desc": "Die Seite enthält Vorlagenaufrufe, die Duplikate von Argumenten verwenden, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Achtung:''' Diese Seite enthält zu viele Aufrufe aufwändiger Parserfunktionen.\n\nSie darf nicht mehr als $2 {{PLURAL:$2|Aufruf|Aufrufe}} haben, es {{PLURAL:$1|ist aktuell $1 Aufruf|sind aktuell $1 Aufrufe}}.",
        "expensive-parserfunction-category": "Seiten, die aufwändige Parserfunktionen zu oft aufrufen",
        "api-error-stashfailed": "Interner Fehler: Der Server konnte keine temporäre Datei speichern.",
        "api-error-publishfailed": "Interner Fehler: Der Server konnte die temporäre Datei nicht veröffentlichen.",
        "api-error-stasherror": "Beim Hochladen der Datei gab es einen Fehler.",
+       "api-error-stashedfilenotfound": "Die vorab gespeicherte Datei wurde beim Versuch, sie vom Speicher hochzuladen, nicht gefunden.",
+       "api-error-stashpathinvalid": "Der Pfad, unter dem die gespeicherte Datei gefunden werden sollte, war ungültig.",
+       "api-error-stashfilestorage": "Beim Speichern der Datei in den Speicher gab es einen Fehler.",
+       "api-error-stashzerolength": "Der Server konnte die Datei nicht speichern, da sie eine Länge von Null hat.",
+       "api-error-stashnotloggedin": "Du musst angemeldet sein, um Dateien in den Hochladespeicher zu speichern.",
+       "api-error-stashwrongowner": "Die Datei, auf die du im Speicher zugreifen möchtest, gehört nicht dir.",
+       "api-error-stashnosuchfilekey": "Der Dateischlüssel, auf den du im Speicher zugreifen möchtest, ist nicht vorhanden.",
        "api-error-timeout": "Der Server hat nicht innerhalb der erwarteten Zeit reagiert.",
        "api-error-unclassified": "Ein unbekannter Fehler ist aufgetreten.",
        "api-error-unknown-code": "Unbekannter Fehler: „$1“",
index 1d019f4..057709c 100644 (file)
        "toolbox": "Strumèint",
        "userpage": "Guêrda la pàgina utèint",
        "projectpage": "Guêrda la pàgina dal prugèt",
-       "imagepage": "Guêrda la pàgina dal 'file'",
+       "imagepage": "Guêrda la pàgina dal file",
        "mediawikipage": "Guêrda al mesâg",
        "templatepage": "Guêrda 'l mudèl",
        "viewhelppage": "Guêrda la pàgina 'd ajót",
        "nstab-media": "File multimediêl",
        "nstab-special": "Pàgina specêla",
        "nstab-project": "Pàgina 'd servési",
-       "nstab-image": "'File'",
+       "nstab-image": "File",
        "nstab-mediawiki": "Mesâg",
        "nstab-template": "Mudèl",
        "nstab-help": "Pàgina 'd ajót",
        "viewsourcetext": "L'é pusébil vèder e cupiêr al côdis surzéia ed cla pàgina ché.",
        "viewyourtext": "L'é pusébil vèder e cupiêr al côdis surzéia dal \"tō mudéfichi\" ed cla pàgina ché:",
        "protectedinterface": "Cla pàgina ché la gh'à 'n elemèint ch' al fa pêrt dal colegamèint tra utèint e al progrâma 'd cól sît ché e l'é prutèta per schivşêr pusébil abûş. Per zuntêr o mudufichêr tradusiòun per tót i sistēma wiki druvêr [//translatewiki.net/ translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
-       "editinginterface": "'''Atèinti:''' Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l progrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a gnîran spustêdi insém a i mesâg vést da tót j utèint ed cól wiki ché. Per zuntêr o mudufichêr tradusiòun vâlidi per tót i wiki, cunsîdra la pusibilitê 'd druvêr [/ / translatewiki.net / translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
+       "editinginterface": "<strong>Atèinti:</strong> Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l prugrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a se spècen in sém a i mesâg vést per tót j utèint ed cól wiki ché.",
+       "translateinterface": "Per zuntêr o mudifichêr al tradusiòun vâlidi in sém a tót i wiki, drōva [//translatewiki.net/ translatewiki.net], al prugèt Media Wiki p'r al léngui di divêrs pôst.",
        "cascadeprotected": "Insém a cla pàgina ché an n'é mìa pusébil fêr dal mudéfichi perchè l'é dèinter {{PLURAL:$1|int la pàgina sgnêda ché  'd sègvit, ch' l'é stêda prutèta|int al pàgini sgnêdi ché  'd sègvit, ch' în stêdi prutèti}} cun la prutesiòun ch' la 's arfà in cuntinvasiòun:\n$2",
        "namespaceprotected": "An 's gh'à mìa i permès necesâri per mudifichêr al pàgini dal spâsi di nòm <strong>$1</strong>.",
        "customcssprotected": "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina CSS ché, perchè la gh'à dèinter al j impustasiòun personêli 'd n' êter utèint.",
        "nowiki_sample": "Mèt dèinter ché al tèst mìa furmatê",
        "nowiki_tip": "An badêr mìa la furmatasiòun wiki",
        "image_tip": "Mèt dèinter al file",
-       "media_tip": "Colegamèint al 'file'",
+       "media_tip": "Colegamèint al file",
        "sig_tip": "Fîrma cun la dâta e l'ōra",
        "hr_tip": "Rîga spiâna (drōva cun giudési)",
-       "summary": "Sûnt:",
+       "summary": "Ogèt:",
        "subject": "Argumèint (tétol):",
        "minoredit": "Còsta l'é 'na mudéfica céca",
        "watchthis": "Tîn adrē a cla pàgina ché",
        "content-model-text": "tèst normêl",
        "content-model-javascript": "linguâg JavaScript",
        "content-model-css": "fòj de stîl CSS",
+       "duplicate-args-category": "Pàgini che drōven argumèint dópiê in ciamêdi a i mudē",
+       "duplicate-args-category-desc": "La pàgina la gh'à dèinter ciamêdi a mudē che drōven argumèint dupiê,cme per eşèimpi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Atensiòun:''' cla pàgina ché la gh'à trôpi ciamêdi ala funsiòun parse. A n' in duvré avèir mēno 'd $2, adèsa a {{PLURAL:$1|'gh n'é $1}}.",
        "expensive-parserfunction-category": "Pàgini cun trôpi ciamêdi a la funsiòun parser.",
        "post-expand-template-inclusion-warning": "'''Atensiòun:''' la grandèsa di mudē més dèinter l'é trôp grôsa. Soquânt mudē gnirâ mìa més dèinter.",
        "searchprofile-everything": "Tót",
        "searchprofile-advanced": "Specêla",
        "searchprofile-articles-tooltip": "Sèirca in $1",
-       "searchprofile-images-tooltip": "Sèirca 'file'",
+       "searchprofile-images-tooltip": "Sèirca file",
        "searchprofile-everything-tooltip": "Sērca dapertót (ânch int al pàgini 'd discusuòun).",
        "searchprofile-advanced-tooltip": "Sērca int i spâsi di nòm fât só mzûra.",
        "search-result-size": "$1 ({{PLURAL:$2|'na parôla|$2 parôli}})",
        "search-result-category-size": "{{PLURAL:$1|1 utèint|$1 utèint}} ({{PLURAL:$2|1 sotcategoréia|$2 sotcategoréi}},{{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sesiòun $1)",
+       "search-category": "(categoréia $1)",
        "search-file-match": "(relasiòun dèinter al file)",
        "search-suggest": "Fōrsi 't serchêv $1",
        "search-interwiki-caption": "Prugèt fradē",
        "right-blockemail": "L'impidés a 'n utèint de spidîr la pôsta eletrônica",
        "right-hideuser": "Blôca un nòm utèint, e 'l lōga al póblich",
        "right-ipblock-exempt": "Al vèd mìa i blôch 'd IP, i blôch avtomâtich e i blôch ed range IP",
+       "right-proxyunbannable": "An vèder mìa i blôch avtomâtich di proxi",
+       "right-unblockself": "A şblôca ló 'stès",
+       "right-protect": "Câmbia i livē 'd prutesiòun e mudéfica 'l pàgini prutèti in ripetisiòun",
+       "right-editprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editinterface": "Mudéfica al colegamèint tra sistēma e utèint",
        "newuserlogpage": "Utèint nōv",
        "action-read": "lēzer cla pàgina ché",
        "action-edit": "Mudifichêr cla pàgina ché",
        "action-createpage": "inventêr pàgini",
        "action-move": "spustêr cla pàgina ché",
-       "action-movefile": "spustêr cól 'file' ché",
-       "action-upload": "carghêr cól 'file' ché",
+       "action-movefile": "spustêr cól file ché",
+       "action-upload": "carghêr cól file ché",
        "action-delete": "scanşlêr cla pàgina ché",
        "nchanges": "$1\n{{PLURAL:$1|mudéfica|mudéfichi}}",
        "recentchanges": "Ûltmi mudéfichi",
        "recentchangeslinked-summary": "Cla pàgina specêla ché la fà vèder al j ûltmi mudéfichi al pàgini coleghêdi da còla sgnêda (o dèinter int la categoréia sgnêda). Al pàgini dèint a la tó lésta 'd j [[Special:Watchlist|tgnû sòt ôc specêl]] în sgnêdi in '''grasèt'''.",
        "recentchangeslinked-page": "Nòm ' d la pàgina.",
        "recentchangeslinked-to": "Fà vèder sōl al mudéfichi fâti al pàgini coleghêdi a còla sgnêda.",
-       "upload": "Cârga un 'file'",
+       "upload": "Cârga un file",
        "uploadlogpage": "Fil carghê",
-       "filedesc": "Sûnt.",
+       "filedesc": "Particulêr.",
        "license": "Licèinsa:",
        "license-header": "Licèinsa",
        "nolicense": "Nisóna licèinsa sgnêda",
        "listfiles_date": "Dâta",
        "listfiles_name": "Nòm",
        "listfiles_user": "Utèint",
-       "file-anchor-link": "'File'",
+       "file-anchor-link": "File",
        "filehist": "Stòria 'd la pàgina",
        "filehist-help": "Fà cléch insém a 'n gróp dâta/ōra per vèder al file cm'é l'ēra int al mumèint e-sgnê",
        "filehist-revert": "armèt",
        "filehist-user": "Utèint",
        "filehist-dimensions": "Amzûri",
        "filehist-comment": "Cumèint",
-       "imagelinks": "Ûş dal 'file'",
+       "imagelinks": "Ûş dal file",
        "linkstoimage": "{{PLURAL:$1|Int la pàgina seguèint a gh'é|Int al seguèinti $1 pàgini a gh'é}} colegamèint al file:",
        "nolinkstoimage": "Nisóna pàgina la gh'à colegamèint al file",
        "sharedupload-desc-here": "Cól file ché al deşvîn da $1 e al pōl èser druvê da êter prugèt. Ed sègvit a vîn fât vèder la spiegasiòun che gh'é int la [$2 pàgina de spiegasiòun dal file].",
        "nolinkshere": "Nisóna pàgina la gh'à dèinter colegamèint che pûnten a '''[[:$1]]'''.",
        "isredirect": "Pàgina redirect",
        "istemplate": "uniòun",
-       "isimage": "Colegamèint vêrs al 'file'",
+       "isimage": "Colegamèint vêrs al file",
        "whatlinkshere-prev": "{{PLURAL:$1|còl préma|quî préma $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|còl dôp|quî dôp $1}}",
        "whatlinkshere-links": "← colegamèint",
        "allmessages-filter-submit": "Và",
        "thumbnail-more": "Ingrandés",
        "thumbnail_error": "Erōr mèinter ét fêv la miniadûra:$1",
-       "import-upload-filename": "Nòm dal 'file':",
+       "import-upload-filename": "Nòm dal file:",
        "import-comment": "Argumèint:",
        "import-upload": "Cârga infurmasiòun XML",
        "tooltip-pt-userpage": "La tó pàgina utèint",
        "tooltip-feed-atom": "Feed Atom per cla pàgina ché.",
        "tooltip-t-contributions": "Lèsta di lavōr fât da cl'utèint ché.",
        "tooltip-t-emailuser": "Mânda un mesâg cun la pòsta eletrônica a cl'utèint ché",
-       "tooltip-t-upload": "Cârga un 'file'",
+       "tooltip-t-upload": "Cârga un file",
        "tooltip-t-specialpages": "Elèinch ed tót al pàgini specêli",
        "tooltip-t-print": "Per stampêr cla pàgina ché.",
        "tooltip-t-permalink": "Colegamèint fés a cla versiòun ché 'd  la pàgina.",
        "tooltip-ca-nstab-user": "Guêrda la pàgina utèint",
        "tooltip-ca-nstab-special": "Còsta ché l'é 'na pàgina specêlal l'an pōl mìa èser mudifichêda",
        "tooltip-ca-nstab-project": "Guêrda la pàgina dal prugèt",
-       "tooltip-ca-nstab-image": "Guêrda la pàgina dal 'file'",
+       "tooltip-ca-nstab-image": "Guêrda la pàgina dal file",
        "tooltip-ca-nstab-template": "Guêrda 'l mudèl",
        "tooltip-ca-nstab-help": "Guêrda la pàgina d'ajót",
        "tooltip-ca-nstab-category": "Guêrda la pàgina 'd la categoréia",
        "ilsubmit": "Sērca",
        "bydate": "per dâta",
        "ago": "$1 fa",
-       "bad_image_list": "La manēra l'é còsta:\n\na vînen cunsidrê sōl j elèinch puntê (ríghi che cumîncen cun al carâter *). Al prém colegamèint só ògni rîga al dēv èser un colegamèint a un 'file' mìa vrû. I colegamèint che vînen dôp, int l'istèsa rîga, în cunsidrê cme un chêş (oséia, pàgini in dó al 'file' al pōl èser arciamê normalmèint).",
+       "bad_image_list": "La manēra l'é còsta:\n\na vînen cunsidrê sōl j elèinch puntê (ríghi che cumîncen cun al carâter *). Al prém colegamèint só ògni rîga al dēv èser un colegamèint a un file mìa vrû. I colegamèint che vînen dôp, int l'istèsa rîga, în cunsidrê cme un chêş (oséia, pàgini in dó al file al pōl èser arciamê normalmèint).",
        "metadata": "Metadati",
        "metadata-help": "In cól file ché agh'é dal j infurmasiòun zuntêdi, prubabilmèint zuntêdi da la mâchina fotogrâfica o dal scàner druvê per fotografêrel o per fêrel dvintêr digitêl. Se al file l'é stê mudfifichê, soquânt particulêr a prén cumbinêr mìa cun la realtê.",
        "metadata-fields": "I câmp relatîv a i metadati ed la figûra, in lésta in cól mesâg ché, a gnirân més int la pàgina ed la figûra quând la tabèla di metadati l'é mustrêda int la fōrma cûrta. Per impustasiòun pre-stabilîda, chiêter câmp a gnirân lughê. \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",
        "version-version": "($1)",
        "version-license": "Licèinsa Media Wiki",
        "version-poweredby-others": "êter",
-       "fileduplicatesearch-filename": "Nòm dal 'file':",
+       "fileduplicatesearch-filename": "Nòm dal file:",
        "fileduplicatesearch-submit": "Sērca",
        "specialpages": "Pàgini specêli",
        "external_image_whitelist": "#Lasêr cla pàgina ché acsé cme l'é<pre>\n#Mèter dèinter i pès dal j espresiòun regolêri (sōl la pêrta cla va fra //) ed sègvit\n#Còsti gnirân més a cunfrûnt cun j indirés URL dal figûri d'ed fōra (hotlinked) \n#Al cunbinasiòun asrân fât vèder cme figûri, se no a gnirà fât vèder sōl al colegamèint\n#Al rîghi che cumîncen cun # în cunsidrêdi di cumèint\n#La diferèinsa tr' al lètri grândi e al lètri céchi an gh'à mìa impurtânsa\n\n#Mèter sōver cla rîga ché tót i pès di regex. Lasêr cla rîga ché acsé cme l'é</pre>",
index 324d83c..bc9d6ff 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 μέλος|$1 μέλη}} ({{PLURAL:$2|1 υποκατηγορία|$2 υποκατηγορίες}}, {{PLURAL:$3|1 αρχείο|$3 αρχεία}})",
        "search-redirect": "(ανακατεύθυνση $1)",
        "search-section": "(ενότητα $1)",
+       "search-category": "(κατηγορία $1)",
        "search-file-match": "(ταιριάζει με το περιεχόμενο του αρχείου)",
        "search-suggest": "Μήπως εννοούσατε: $1",
        "search-interwiki-caption": "Αδελφικά εγχειρήματα",
        "emailccsubject": "Αντίγραφο του μηνυματός σας στο $1: $2",
        "emailsent": "Το μήνυμα έχει σταλεί",
        "emailsenttext": "Το μήνυμά σας έχει σταλεί.",
-       "emailuserfooter": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î·Î»ÎµÎºÏ\84Ï\81ονικÏ\8c Î¼Î®Î½Ï\85μα Ï\83Ï\84άλθηκε Î±Ï\80Ï\8c Ï\84ον/Ï\84ην \"$1\" Ï\83Ï\84ον Ï\84ον/Ï\84ην \"$2\" Î¼Î­Ï\83Ï\89 Ï\84ηÏ\82 Î»ÎµÎ¹Ï\84οÏ\85Ï\81γίαÏ\82 \"αÏ\80οÏ\83Ï\84ολήÏ\82 Î¼Î·Î½Ï\85μάÏ\84Ï\89ν\" στο {{SITENAME}}.",
+       "emailuserfooter": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î¼Î®Î½Ï\85μα Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 Ï\83Ï\84άλθηκε Î±Ï\80Ï\8c {{GENDER:$1|Ï\84ον Ï\87Ï\81ήÏ\83Ï\84η|Ï\84ην Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} $1 Ï\83{{GENDER:$2|Ï\84ον Ï\87Ï\81ήÏ\83Ï\84η|Ï\84ην Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} $2 Î¼Î­Ï\83Ï\89 Ï\84ηÏ\82 Î»ÎµÎ¹Ï\84οÏ\85Ï\81γίαÏ\82 Â«Î±Ï\80οÏ\83Ï\84ολήÏ\82 Î¼Î·Î½Ï\8dμαÏ\84οÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 Ï\83ε Ï\87Ï\81ήÏ\83Ï\84η» στο {{SITENAME}}.",
        "usermessage-summary": "Φεύγετε από τις ειδοποιήσεις συστήματος.",
        "usermessage-editor": "Μηνύματα συστήματος",
        "usermessage-template": "MediaWiki:UserMessage",
index 1c6890c..341f626 100644 (file)
        "api-error-stashfailed": "Internal error: Server failed to store temporary file.",
        "api-error-publishfailed": "Internal error: Server failed to publish temporary file.",
        "api-error-stasherror": "There was an error while uploading the file to stash.",
+       "api-error-stashedfilenotfound": "The stashed file was not found when attempting to upload it from the stash.",
+       "api-error-stashpathinvalid": "The path at which the stashed file should have been found was invalid.",
+       "api-error-stashfilestorage": "There was an error while storing the file in the stash.",
+       "api-error-stashzerolength": "The server could not stash the file, because it had zero length.",
+       "api-error-stashnotloggedin": "You must be logged in to save files in the upload stash.",
+       "api-error-stashwrongowner": "The file you were attempting to access in the stash does not belong to you.",
+       "api-error-stashnosuchfilekey": "The file key you were attempting to access in the stash does not exist.",
        "api-error-timeout": "The server did not respond within the expected time.",
        "api-error-unclassified": "An unknown error occurred.",
        "api-error-unknown-code": "Unknown error: \"$1\".",
index 8fddc08..319d4f8 100644 (file)
                        "Amitie 10g",
                        "Eurodyne",
                        "Gleki",
-                       "Jonathan rrr"
+                       "Jonathan rrr",
+                       "Paynekiller92"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "gender-female": "Femenino",
        "prefs-help-gender": "Opcional: el software utiliza esta preferencia para dirigirse a ti con el género gramatical apropiado. Esta información es pública.",
        "email": "Correo electrónico",
-       "prefs-help-realname": "El nombre real es opcional. Si decides proporcionarlo, se usará para dar atribución a tu trabajo.",
+       "prefs-help-realname": "El nombre real es opcional. Si lo proporcionas, se usará para dar atribución a tu trabajo.",
        "prefs-help-email": "La dirección de correo electrónico es opcional, pero es necesaria para el restablecimiento de tu contraseña, en caso de que la olvides.",
        "prefs-help-email-others": "También puedes permitir que otros usuarios te contacten por correo a través de un enlace en tus páginas de usuario y de discusión.\nTu dirección de correo no se revela cuando otros usuarios te contactan.",
        "prefs-help-email-required": "Es necesario proporcionar una dirección de correo electrónico.",
index 81f156b..e5804b1 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 lehekülg|$1 lehekülge}} ({{PLURAL:$2|1 alamkategooria|$2 alamkategooriat}}, {{PLURAL:$3|1 fail|$3 faili}})",
        "search-redirect": "(ümbersuunamine $1)",
        "search-section": "(alaosa $1)",
+       "search-category": "(kategooria \"$1\")",
        "search-file-match": "(vastab faili sisule)",
        "search-suggest": "Kas mõtlesid: $1",
        "search-interwiki-caption": "Sõsarprojektid",
        "api-error-stashfailed": "Sisetõrge: Serveril ei õnnestunud ajutist faili talletada.",
        "api-error-publishfailed": "Sisetõrge: Serveril ebaõnnestus ajutise faili avaldamine.",
        "api-error-stasherror": "Selle faili hoidlasse üleslaadimisel ilmnes tõrge.",
+       "api-error-stashedfilenotfound": "Algses hoidlas talletatud faili ei leitud, kui seda sealt üles püüti laadida.",
+       "api-error-stashpathinvalid": "Failitee, kus algse hoidla fail pidanuks leiduma, oli vigane.",
+       "api-error-stashfilestorage": "Faili algsesse hoidlasse talletamisel esines tõrge.",
+       "api-error-stashzerolength": "Server ei saanud faili algses hoidlas talletada, sest fail on tühi.",
+       "api-error-stashnotloggedin": "Pead olema sisse logitud, et salvestada faile üleslaadimise algsesse hoidlasse.",
+       "api-error-stashwrongowner": "Fail, mille juurde algses hoidlas üritasid pääseda, ei kuulu sulle.",
+       "api-error-stashnosuchfilekey": "Failivõtit, mille juurde algses hoidlas üritasid pääseda, pole olemas.",
        "api-error-timeout": "Server ei vastanud oodatud aja sees.",
        "api-error-unclassified": "Ilmnes teadmata tõrge.",
        "api-error-unknown-code": "Teadmata tõrge: \"$1\"",
index cdeb08c..294d230 100644 (file)
        "revdelete-restricted": "administratzaileentzako mugak ezarri dira",
        "revdelete-unrestricted": "administratzaileentzako mugak kendu dira",
        "logentry-move-move": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du",
-       "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} $3 orria $4 izenera aldatu du, birzuzenketarik utzi gabe",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe",
        "logentry-move-move_redir": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketaren gainetik",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe",
        "logentry-patrol-patrol": "$1(e)k $3 orrialdearen $4 berrikuzpena patruilatutzat {{GENDER:$2|markatu}} du",
index 7aa4941..f79f369 100644 (file)
        "viewsourcetext": "می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:",
        "viewyourtext": "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
        "protectedinterface": "این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.\nبرای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
-       "editinginterface": "'''هشدار:''' صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.\nتغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.\nبرای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
+       "editinginterface": "<strong>هشدار:</strong> صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.\nتغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.",
+       "translateinterface": "برای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
        "cascadeprotected": "این صفحه در مقابل ویرایش محافظت شده‌است چون در {{PLURAL:$1|صفحهٔ|صفحه‌های}} محافظت‌شدهٔ زیر که گزینهٔ «آبشاری» در {{PLURAL:$1|آن|آن‌ها}} انتخاب شده قرار گرفته‌است:\n$2",
        "namespaceprotected": "شما اجازهٔ ویرایش صفحه‌های فضای نام '''$1''' را ندارید.",
        "customcssprotected": "شما اجازهٔ ویرایش این صفحهٔ سی‌اس‌اس را ندارید، زیرا حاوی تنظیم‌های شخصی یک کاربر دیگر است.",
        "content-model-javascript": "جاوااسکریپت",
        "content-model-css": "سی‌اس‌اس",
        "duplicate-args-category": "صفحه‌های دارای آرگومان تکراری در فراخوانی الگو",
+       "duplicate-args-category-desc": "صفحاتی که دارای آرگومان تکراری هستند مانند، <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> یا <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''هشدار:''' این صفحه حاوی تعدادی زیادی فراخوانی دستورهای تجزیه‌گر است.\n\nتعداد آن‌ها باید کمتر از $2 {{PLURAL:$2|فراخوانی|فراخوانی}} باشد، و اینک {{PLURAL:$1|$1 فراخوانی|$1 فراخوانی}} است.",
        "expensive-parserfunction-category": "صفحه‌هایی که حاوی تعداد زیادی فراخوانی سنگین دستورهای تجزیه‌گر هستند",
        "post-expand-template-inclusion-warning": "هشدار: الگو بیش از اندازه بزرگ است.\nبرخی الگوها ممکن است شامل نشوند.",
        "showhideselectedversions": "تغییر پدیداری نسخه‌های انتخاب‌شده",
        "editundo": "خنثی‌سازی",
        "diff-empty": "(بدون تفاوت)",
-       "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}} توسط کاربر مشابهی که نشان داده نشده)",
+       "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}}ِ همین کاربر نمایش داده نشده است)",
        "diff-multi-otherusers": "({{PLURAL:$1|یک نسخهٔ متوسط|$1 نسخه‌های متوسط}} توسط {{PLURAL:$2|کاربر دیگری|$2 کاربران}} نشان داده نشده)",
        "diff-multi-manyusers": "({{PLURAL:$1|یک|$1}} ویرایش میانی توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)",
        "difference-missing-revision": "{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}}  نشد.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
        "search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک زیررده|$2 زیررده}}، {{PLURAL:$3|یک پرونده|$3 پرونده}})",
        "search-redirect": "(تغییرمسیر $1)",
        "search-section": "(بخش $1)",
+       "search-category": "(رده  $1)",
        "search-file-match": "(تشابه محتوی پرونده)",
        "search-suggest": "آیا منظورتان این بود: $1",
        "search-interwiki-caption": "پروژه‌های خواهر",
        "gender-female": "زن",
        "prefs-help-gender": "انجام این تنظیم اختیاری است.\nنرم‌افزار از این مقدار برای اشارهٔ صحیح به جنسیت و ذکر شما برای دیگران با استفاده از دستور زبان درست استفاده می‌کند.\nاین اطلاعات عمومی خواهند بود.",
        "email": "رایانامه",
-       "prefs-help-realname": "نام واقعی اختیاری است.\nاگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آن‌ها به شما از نام واقعی‌تان استفاده خواهد شد.",
+       "prefs-help-realname": "نام واقعی اختیاری است.\nاگر وارد شده است هنگام ارجاع به آثارتان و انتساب آن‌ها به شما ممکن است از نام واقعی‌تان استفاده شود.",
        "prefs-help-email": "نشانی رایانامه اختیاری‌است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.",
        "prefs-help-email-others": "شما همچنین می‌توانید انتخاب کنید که کاربران بتوانند از طریق پیوندی در صفحهٔ کاربری یا صفحهٔ بحث کاربری‌تان به شما رایانامه بفرستند.\nنشانی رایانامه شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.",
        "prefs-help-email-required": "نشانی رایانامه الزامی‌است.",
        "pager-older-n": "{{PLURAL:$1|یک مورد قدیمی‌تر|$1 مورد قدیمی‌تر}}",
        "suppress": "نظارت",
        "querypage-disabled": "این صفحه ویژه به دلایل عملکردی غیرفعال شده‌است.",
+       "apihelp": "راهنمای API",
+       "apihelp-no-such-module": "پودمان \" $1 \" یافت نشد.",
        "booksources": "منابع کتاب",
        "booksources-search-legend": "جستجوی منابع کتاب",
        "booksources-isbn": "شابک:",
        "tooltip-pt-mycontris": "فهرست مشارکت‌های شما",
        "tooltip-pt-login": "توصیه می‌شود که به سامانه وارد شوید، گرچه اجباری نیست",
        "tooltip-pt-logout": "خروج از سامانه",
+       "tooltip-pt-createaccount": "از شما دعوت می‌شود که حساب کاربری بسازید و به سامانه وارد شوید؛ هرچند که ساخت حساب کاربری اختیاری است.",
        "tooltip-ca-talk": "گفتگو پیرامون محتوای صفحه",
        "tooltip-ca-edit": "شما می‌توانید این صفحه را ویرایش کنید. لطفاً پیش از ذخیره از دکمهٔ پیش‌نمایش استفاده کنید.",
        "tooltip-ca-addsection": "بخشی جدید ایجاد کنید",
        "tooltip-feed-atom": "خبرنامهٔ اتم برای این صفحه",
        "tooltip-t-contributions": "فهرست مشارکت‌های این کاربر",
        "tooltip-t-emailuser": "فرستادن رایانامه به این کاربر",
+       "tooltip-t-info": "اطلاعات بیشتر دربارهٔ این صفحه",
        "tooltip-t-upload": "بارگذاری تصاویر و پرونده‌های دیگر",
        "tooltip-t-specialpages": "فهرستی از همهٔ صفحه‌های ویژه",
        "tooltip-t-print": "نسخهٔ قابل چاپ این صفحه",
        "unknown_extension_tag": "برچسب ناشناختهٔ افزونه «$1»",
        "duplicate-defaultsort": "هشدار: ترتیب پیش‌فرض «$2» ترتیب پیش‌فرض قبلی «$1» را باطل می‌کند.",
        "duplicate-displaytitle": "<strong>هشدار:</strong> نمایش عنوان \" $2 \"باعث ابطال پیش نمایش عنوان\" $1 \" می‌شود.",
+       "invalid-indicator-name": "<strong>خطا:</strong>ویژگی های شاخص‌های وضعیت صفحهٔ <code>name</code> نباید خالی باشند.",
        "version": "نسخه",
        "version-extensions": "افزونه‌های نصب‌شده",
        "version-skins": "پوسته‌های نصب شده",
        "revdelete-uname-unhid": "نام کاربری را آشکار کرد",
        "revdelete-restricted": "مدیران را محدود کرد",
        "revdelete-unrestricted": "محدودیت مدیران را لغو کرد",
+       "logentry-merge-merge": "$1  $3  را به  $4 {{GENDER:$2| ادغام کرد}} (نسخه تا  $5)",
        "logentry-move-move": "$1 صفحهٔ $3 را به $4 {{GENDER:$2|منتقل کرد}}",
        "logentry-move-move-noredirect": "$1 صفحهٔ $3 را بدون برجای‌گذاشتن تغییرمسیر به $4 {{GENDER:$2|منتقل کرد}}",
        "logentry-move-move_redir": "$1 صفحهٔ $3 را به $4 که تغییرمسیر بود {{GENDER:$2|منتقل کرد}}",
        "api-error-stashfailed": "خطای داخلی: کارساز نمی‌تواند پرونده موقت را ذخیره کند.",
        "api-error-publishfailed": "خطای داخلی: کارساز نمی‌تواند پرونده موقت را ذخیره کند.",
        "api-error-stasherror": "هنگام انتقال پوشه برای ذخیره خطایی بود.",
+       "api-error-stashedfilenotfound": "زمانی که تلاش برای بارگذاری فایل استش بود، فایل استش یافت نشد.",
+       "api-error-stashpathinvalid": "مسیری که فایل استش در آن باید یافت می‌شد اشتباه است.",
+       "api-error-stashfilestorage": "برای ذخیرهٔ فایل استش خطایی رخ داده است.",
+       "api-error-stashzerolength": "سرور نمی‌تواند فایل استش را ذخیره کند چون حجم آن صفر است.",
+       "api-error-stashnotloggedin": "برای ذخیرهٔ فایل‌ها در بارگذاری استش باید وارد سامانه شده‌باشید.",
+       "api-error-stashwrongowner": "فایلی که در استش قصد داشتید به آن دسترسی داشته‌باشید متعلق به شما نیست.",
+       "api-error-stashnosuchfilekey": "کلیدی که در فایل استش می خواستید به آن دسترسی داشته‌باشید، وجود ندارد.",
        "api-error-timeout": "کارساز در زمان انتظار هیچ پاسخی نداد.",
        "api-error-unclassified": "یک خطای ناشناخته رخ داد.",
        "api-error-unknown-code": "خطای ناشناخته: \" $1 \"",
index d17634d..6cccd40 100644 (file)
        "view-pool-error": "Valitettavasti palvelimet ovat ylikuormittuneet tällä hetkellä.\nLiian monta käyttäjää yrittää tarkastella tätä sivua.\nOdota hetki ennen kuin yrität uudelleen.\n\n$1",
        "generic-pool-error": "Valitettavasti palvelimet ovat ylikuormittuneet tällä hetkellä.\nLiian monta käyttäjää yrittää tarkastella tätä sivua.\nOdota hetki ennen kuin yrität uudelleen.",
        "pool-timeout": "Lukon aikakatkaisu.",
-       "pool-queuefull": "Lukkojono on täysi.",
+       "pool-queuefull": "Prosessijoukon jono on täynnä",
        "pool-errorunknown": "Tuntematon virhe.",
        "pool-servererror": "Pool counter -palvelu ei ole käytettävissä ($1).",
        "aboutsite": "Tietoja {{GRAMMAR:elative|{{SITENAME}}}}",
        "search-result-category-size": "{{PLURAL:$1|1 jäsen|$1 jäsentä}} ({{PLURAL:$2|1 alaluokka|$2 alaluokkaa}}, {{PLURAL:$3|1 tiedosto|$3 tiedostoa}})",
        "search-redirect": "(ohjaus $1)",
        "search-section": "(osio $1)",
+       "search-category": "(luokka $1)",
        "search-file-match": "(vastaa tiedoston sisältöä)",
        "search-suggest": "Tarkoititko: $1",
        "search-interwiki-caption": "Sisarprojektit",
        "powersearch-remember": "Muista valinta tulevia hakuja varten",
        "search-external": "Ulkoinen haku",
        "searchdisabled": "Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>",
-       "search-error": "Virhe ilmaantui haettaessa: $1",
+       "search-error": "Hakutoiminnossa on havaittu virhe: $1",
        "preferences": "Asetukset",
        "mypreferences": "Asetukset",
        "prefs-edits": "Muokkauksia",
        "invert": "Käänteinen valinta",
        "tooltip-invert": "Valitse tämä kohta, jos haluat piilottaa muutokset sivuihin valitussa nimiavaruudessa (ja liittyviin nimiavaruuksiin, jos valittu)",
        "namespace_association": "Liittyvä nimiavaruus",
-       "tooltip-namespace_association": "Valitse tämä kohta, jos haluat sisällyttää ne keskustelu- tai aihe-nimiavaruudet, jotka liittyvät valittuun nimiavaruuteen",
+       "tooltip-namespace_association": "Valitse tämä kohta, jos haluat haun sisältävän myös sen keskustelu- tai aihe-nimiavaruuden, joka liittyy valittuun nimiavaruuteen",
        "blanknamespace": "(sivut)",
        "contributions": "{{GENDER:$1|Käyttäjän}} muokkaukset",
        "contributions-title": "Käyttäjän $1 muokkaukset",
        "unblockiptext": "Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.",
        "ipusubmit": "Poista tämä esto",
        "unblocked": "Käyttäjän [[User:$1|$1]] esto on poistettu",
-       "unblocked-range": "$1 ei ole enää estettynä",
+       "unblocked-range": "Osoitealueen $1 muokkausesto on poistettu.",
        "unblocked-id": "Esto $1 on poistettu",
        "unblocked-ip": "Käyttäjän [[Special:Contributions/$1|$1]] esto on poistettu.",
        "blocklist": "Estetyt käyttäjät",
index e2dbb14..15eeca8 100644 (file)
        "viewsourcetext": "Vous pouvez voir et copier le contenu de la page :",
        "viewyourtext": "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
        "protectedinterface": "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.\nPour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.",
-       "editinginterface": "<strong>Attention</strong> vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel.\nLes changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.",
+       "editinginterface": "<strong>Attention :</strong> vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel.\nLes changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.",
        "translateinterface": "Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MédiaWiki.",
        "cascadeprotected": "Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :\n$2",
        "namespaceprotected": "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
        "search-result-category-size": "$1 membre{{PLURAL:$1||s}} ($2 sous-catégorie{{PLURAL:$2||s}}, $3 fichier{{PLURAL:$3||s}})",
        "search-redirect": "(redirection depuis $1)",
        "search-section": "(section $1)",
+       "search-category": "(catégorie $1)",
        "search-file-match": "(correspond au contenu du fichier)",
        "search-suggest": "Essayez avec cette orthographe : $1",
        "search-interwiki-caption": "Projets frères",
        "api-error-stashfailed": "Erreur interne : le serveur n'a pas pu enregistrer le fichier temporaire.",
        "api-error-publishfailed": "Erreur interne: Le serveur n'a pas pu publier le fichier temporaire.",
        "api-error-stasherror": "Une erreur s'est produite lors du téléchargement du fichier pour le dissimuler.",
+       "api-error-stashedfilenotfound": "Le fichier caché n’a pas été trouvé lors de la tentative pour le télécharger depuis sa cachette.",
+       "api-error-stashpathinvalid": "Le chemin où aurait dû se trouver le fichier caché n’est pas valide.",
+       "api-error-stashfilestorage": "Une erreur s’est produite en stockant le fichier dans la cachette.",
+       "api-error-stashzerolength": "Le serveur n’a pas pu cacher le fichier, car il a une taille de zéro.",
+       "api-error-stashnotloggedin": "Vous devez être connecté pour enregistrer des fichiers dans la cachette de téléchargement.",
+       "api-error-stashwrongowner": "Le fichier auquel vous essayez d’accéder dans la cachette ne vous appartient pas.",
+       "api-error-stashnosuchfilekey": "La clé du fichier auquel vous essayez d’accéder dans la cachette n’existe pas.",
        "api-error-timeout": "Le serveur n'a pas répondu dans le délai imparti.",
        "api-error-unclassified": "Une erreur inconnue s'est produite",
        "api-error-unknown-code": "Erreur inconnue : « $1 »",
index 430c6fc..743f91f 100644 (file)
        "log-name-pagelang": "Logbuk för spriak-feranrangen",
        "log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert.",
-       "default-skin-not-found": "Hoppla! Die in <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDeine Installation scheint die folgenden Benutzeroberflächen zu enthalten. Siehe [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de das Benutzerhandbuch] zur Aktivierung und Auswahl des Standards.\n\n$2\n\n; Falls du gerade MediaWiki installiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. Versuche einige Benutzeroberflächen aus dem  [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das Verzeichnis <code>skins/</code> kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist.\n\n; Falls du gerade MediaWiki aktualisiert hast:\n: MediaWiki 1.24 und neuere Versionen aktivieren nicht mehr automatisch installierte Benutzeroberflächen (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade <code>LocalSettings.php</code> geändert hast:\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
-       "default-skin-not-found-no-skins": "Hoppla! Die in <code>$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDu hast keine installierten Benutzeroberflächen.\n\n; Falls du gerade MediaWiki installiert oder aktualisiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. MediaWiki 1.24 und neuere Versionen enthalten keine Benutzeroberflächen im Haupt-Repositorium. Versuche einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das  <code>skins/</code>-Verzeichnis kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist. Siehe das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch] zur Aktivierung von Benutzeroberflächen und Auswahl des Standards.",
+       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar skaker. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
+       "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ufsteld''')",
        "mediastatistics": "Statistik faan meedien",
index 3c2bdda..57c018c 100644 (file)
@@ -35,6 +35,7 @@
        "tog-watchdefault": "Sälber gändereti Syte un Dateie automatisch beobachte",
        "tog-watchmoves": "Sälber verschobeni Sytene un Dateie automatisch beobachte",
        "tog-watchdeletion": "Sälber gleschti Sytene un Dateie automatisch beobachte",
+       "tog-watchrollback": "Syte, wun i zruckgsetzt haa, automatisch beobachte",
        "tog-minordefault": "Alli dyni Änderigen als «chlyni Änderige» markiere",
        "tog-previewontop": "Vorschou vor em Editierfänschter aazeige",
        "tog-previewonfirst": "Vorschou aazeige bim erschten Editiere",
        "otherlanguages": "Anderi Sproche",
        "redirectedfrom": "(Witergleitet vun $1)",
        "redirectpagesub": "Umgleiteti Syte",
+       "redirectto": "Wyterleitig uf:",
        "lastmodifiedat": "Letschti Änderig vo dere Syte: $2, $1<br />",
        "viewcount": "Die Syte isch {{PLURAL:$1|eimol|$1 Mol}} bsuecht wore.",
        "protectedpage": "Gschützti Syte",
        "hidetoc": "zueklappe",
        "collapsible-collapse": "zueklappe",
        "collapsible-expand": "ufklappe",
+       "confirmable-confirm": "{{GENDER:$1|Bisch}} sicher?",
+       "confirmable-yes": "Jo",
+       "confirmable-no": "Nei",
        "thisisdeleted": "Aaluege oder widerherstelle vu $1?",
        "viewdeleted": "$1 aaluege?",
        "restorelink": "{{PLURAL:$1|gleschti Änderig|$1 gleschti Ändrige}}",
        "viewsourcetext": "Quelltext vo dere Syte:",
        "viewyourtext": "Du chasch dr Quälltext vu '''Dyre Bearbeitig''' vu däre Syte aaluege un kopiere:",
        "protectedinterface": "In däre Syte het s Text fir s Sproch-Interface vu dr Software un si isch gsperrt, zum Missbruch z verhindre.",
-       "editinginterface": "'''Obacht:''' Du bisch e Syten am Verändere, wu zum User.Interface ghert. Wänn Du die Syte veränderesch, no änderet sich s User-Interface au fir di andere Benutzer vu däm Wiki. Fir Ibersetzige lueg bitte, eb Du doodefir s [//translatewiki.net/wiki/Main_Page?setlang=gsw Translatewiki] witt bruuche, s MediaWiki-Lokalisierigsprojäkt.",
+       "editinginterface": "<strong>Warnig:</strong> Uf däre Syte het s Täxt, wu vu dr MediaWiki-Software brucht wird. Änderigen uf däre Syte wirke si uf d Benutzeroberflechi vu däm Wiki uus.",
+       "translateinterface": "Go Ibersetzige fir alli Wiki zuefiege oder ändere, bruuch bitte [//translatewiki.net/ translatewiki.net], s MediaWiki-Lokalisierigsprojäkt.",
        "cascadeprotected": "Die Syte isch fir s Bearbeite gsperrt. Si isch yybunde in {{PLURAL:$1|die Syte, wu do chunnt|die Syte, wu do chemme}} , wu mit ere Kaskadesperroption gschitzt {{PLURAL:$1|isch|sin}}:\n$2",
        "namespaceprotected": "Du hesch kei Berächtigung, die Syte im '''$1'''-Namensruum z bearbeite.",
        "customcssprotected": "Du bisch nid berächtigt, die Syte mit CSS z bearbeite, wel si zue dr persenlige Yystellige vun eme andere Benutzer ghert.",
        "invalidtitle-knownnamespace": "Nit-gültige Titel mit Namensruum „$2“ un Text „$3“",
        "invalidtitle-unknownnamespace": "Ungültige Titel mit unbekannte Namensruumnummer $1 un Text „$2“",
        "exception-nologin": "Nit aagmäldet",
-       "exception-nologin-text": "Du muesch Di [[Special:Userlogin|aamälde]] go die Syte oder Aktion ufruefe chenne.",
+       "exception-nologin-text": "Du muesch Di aamälde go die Syte oder Aktion ufruefe chenne.",
        "exception-nologin-text-manual": "Du muesch Di $1 go die Syte oder Aktion ufruefe chenne.",
        "virus-badscanner": "Fählerhafti Konfiguration: Virescanner, wu nid bekannt isch: ''$1''",
        "virus-scanfailed": "Scan het nid funktioniert (code $1)",
        "createaccount-text": "Fir Dii isch e Benutzerkonto \"$2\" uf {{SITENAME}} ($4) aaglait wore. S Passwort fir \"$2\" , wu automatisch generiert woren isch, isch \"$3\". Du sottsch Di jetz aamälde un s Passwort ändere.\n\nWänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignoriere.",
        "login-throttled": "Du hesch z vilmol umesuscht versuecht, Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.",
        "login-abort-generic": "Dyy Aamäldig isch nit erfolgryych gsii – Abbroche",
+       "login-migrated-generic": "Dy Benutzerkonto isch migriert wore, Dy Benutzername git s nimi uf däm Wiki.",
        "loginlanguagelabel": "Sproch: $1",
        "suspicious-userlogout": "Dyy Versuech di abzmälde isch abbroche wore, wel s uusgsäh het, wie wänn s vun eme bschedigte Browser oder eme Cacheproxy uus gsändet woren isch.",
        "createacct-another-realname-tip": "Dr richtig Name isch optional.\nWänn Du ne aagiisch, wird er bruucht fir d Zueornig vu dr Byytreg.",
        "resetpass-temp-password": "Temporär Passwort:",
        "resetpass-abort-generic": "D Passwortänderig isch dur e Erwyterig abbroche wore.",
        "resetpass-expired": "Dy Passwort isch abglofe. Bitte leg e nej Passwort fir d Aamäldig fescht.",
+       "resetpass-expired-soft": "Dy Passwort isch abgloffe un mueß zruckgsetzt wäre. Bitte wehl jetz e nei Passwort uus oder klick uf „{{int:resetpass-submit-cancel}}“, go s speter zrucksetze.",
+       "resetpass-validity-soft": "Dy Passwort isch nit giltig: $1\n\nBitte wehl jetz e nei Passwort oder klick uf „{{int:resetpass-submit-cancel}}“, go s speter zrucksetze.",
        "passwordreset": "Passwort zruggsetze",
        "passwordreset-text-one": "Fill des Formular uus go Dy Passwort zrucksetze.",
        "passwordreset-text-many": "{{PLURAL:$1|Fill eis vu dr Fälder uus go Dy Passwort zrucksetze.}}",
        "changeemail-none": "(nyt)",
        "changeemail-password": "Dy {{SITENAME}}-Passwort:",
        "changeemail-submit": "E-Mail Adräss ändre",
+       "changeemail-throttled": "Du hesch z vilmol versuecht Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.",
        "resettokens": "Token zrucksetze",
        "resettokens-text": "Du chasch Token zrucksetze, wu Dir dr Zuegriff uf bstimmti privati Date megli mache, wu mit Dym Benutzerkonto do verchnipft sin.\n\nDes sottsch nume mache, wänn Du d Token us Versää mit eberem teilt hesch oder Dy Konto gfehrdet isch.",
        "resettokens-no-tokens": "S git kei Token zum Zrucksetze.",
        "preview": "Vorschou",
        "showpreview": "Vorschau aaluege",
        "showdiff": "Zeig Änderige",
-       "anoneditwarning": "'''Warnig:''' Si sin nit aagmäldet. Ihri IP-Adrässe wird in de Gschicht vo däm Artikel gspeicheret.",
+       "blankarticle": "<strong>Warnig:</strong> D Syte, wu Du aalaisch, isch läär.\nWänn Du nomol uf „{{int:savearticle}}“ klicksch, wird d Syte ohni Inhalt aaglait.",
+       "anoneditwarning": "<strong>Warnig:</strong> Du bisch nit aagmäldet. Dy IP-Adräss wird effetli sichtbar, wänn Du Bearbeitige machsch. Wänn di <strong>[$1 aamälde duesch]</strong> oder <strong>[$2 e Benutzerkonto aalaisch]</strong>, wäre Bearbeitige zämme mit andere Bytreg Dym Nenutzername zuegordnet.",
        "anonpreviewwarning": "''Du bisch nit aagmäldet. Bim Spychere wird Dyy IP-Adräss yydrait in d Versionsgschicht vu däre Syte.''",
        "missingsummary": "'''Obacht:''' Du hesch kei Zämefassig aagee. Wenn du nomol uf Spychere drucksch, wird d Änderung ohni gspychert.",
        "missingcommenttext": "Bitte gib Dyy Kommentar unte yy.",
        "edit-gone-missing": "D Syte het nid chenne aktalisiert wäre.\nSi isch schyns glescht wore.",
        "edit-conflict": "Bearbeitigskonflikt.",
        "edit-no-change": "Dyyni Bearbeitig isch ignoriert wore, wel kei Änderig am Täxt gmacht woren isch.",
+       "postedit-confirmation-created": "D Syte isch aaglait wore.",
+       "postedit-confirmation-restored": "D Syte isch widerhärgstellt wore.",
        "postedit-confirmation-saved": "Dyy Bearbeitig isch gspycheret wore.",
        "edit-already-exists": "Di nej Syte het nid chenne aaglait wäre, wel s si scho git.",
        "defaultmessagetext": "Standardtext",
        "content-failed-to-parse": "Parse vum Inhalt $2 fir Modell $1 fählgschlaa: $3",
        "invalid-content-data": "Uugiltigi Inhaltsdate",
        "content-not-allowed-here": "Dr Inhalt „$1“ isch uf dr Syte [[$2]] nit erlaubt",
-       "editwarning-warning": "Wänn Du die Syte verlosch, cha s syy, ass Du alli Bearbeitige verliersch, wu Du do dra gmacht hesch.\nWänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „Bearbeite“-Beryych vu Dyyne Yystelligen abstelle.",
+       "editwarning-warning": "Wänn Du die Syte verlosch, cha s syy, ass Du alli Bearbeitige verliersch, wu Du do dra gmacht hesch.\nWänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „{{int:prefs-editing}}“-Beryych vu Dyyne Yystelligen abstelle.",
+       "editpage-notsupportedcontentformat-title": "S Inhaltsformat wird nit unterstitzt",
+       "editpage-notsupportedcontentformat-text": "S Inhaltsformat $1 wird vum Inhaltsmodäll $2 nit unterstitzt.",
        "content-model-wikitext": "Wikitext",
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Syte, wu doppleti Argumänt in Vorlagenufruef verwände",
+       "duplicate-args-category-desc": "Uf dr Syte het s Vorlagenufruef, wu Duplikat vu Argumänt verwände, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Achtig: In däre Syte het s z vyyl Ufruef vu ufwändige Parserfunktione.\n\nS {{PLURAL:$2|derf nid meh wie ein Ufruef|derfe nid meh wie $1 Ufruef}} gee.",
        "expensive-parserfunction-category": "Syte, wu ufwändigi Parserfunktione z vyylmol ufruefe",
        "post-expand-template-inclusion-warning": "Warnig: D Gressi vu yybundene Vorlage isch z gross, e Teil Vorlage chenne nid yybunde wäre.",
        "parser-template-recursion-depth-warning": "Vorlagerekursionstiefegränz iberschritte ($1)",
        "language-converter-depth-warning": "Gränz vu dr Sprochkonvertertiefi iberschritte ($1)",
        "node-count-exceeded-category": "Syte, wo d Chnotezaal überschritte hen",
-       "node-count-exceeded-warning": "Die Syte het d Chnotepunktzaal überschritte.",
+       "node-count-exceeded-category-desc": "D Syte iberschrytet di maximal Chnotenaazahl.",
+       "node-count-exceeded-warning": "Die Syte het d Chnotepunktzaal iberschritte.",
        "expansion-depth-exceeded-category": "Syte, wo d Expansionsdiefi überschritte hen",
+       "expansion-depth-exceeded-category-desc": "D Syte iberschrytet di maximal Expandierigstiefi.",
        "expansion-depth-exceeded-warning": "Die Syte het d Expansionsdiefi überschritte.",
        "parser-unstrip-loop-warning": "Zirkelbezug festgstellt",
        "parser-unstrip-recursion-limit": "Rekursionsgränz bim Ufflöse überschritte ($1)",
        "undo-success": "Zum die Änderig ruckgängig z mache, kontrollier bitte d Bearbeitig in dr Verglichsaasicht un druck derno uf „Syte spichere“.",
        "undo-failure": "D Änderig het nid chenne ruckgängig gmacht wäre, wel dää Abschnitt mittlerwyli gänderet woren isch.",
        "undo-norev": "D Bearbeitig het nid chenne ruckgängig gmacht wäre, wel si nid vorhande oder glescht isch.",
+       "undo-nochange": "Schyns isch die Bearbeitig scho rugggängig gmacht wore.",
        "undo-summary": "D Änderig $1 vu [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) isch ruckgängig gmacht wore.",
        "undo-summary-username-hidden": "Änderig $1 vun eme versteckte Benutzer ruckgängig gmacht.",
        "cantcreateaccounttitle": "Benutzerkonto cha nid aagleit wäre.",
        "cantcreateaccount-text": "S Aalege vu me Benutzerkonto vu dr IP-Adräss '''($1)''' isch dur [[User:$3|$3]] gsperrt wore.\n\nGrund vu dr Sperri: ''$2''",
+       "cantcreateaccount-range-text": "S Aalege vu Benutzerkonte vu IP-Adrässen im Berych '''$1''', wu s Dyni IP-Adräss ('''$4''') din het, isch vu [[User:$3|$3]] gsperrt wore.\n\nDr Grund, wu vu $3 aagee woren isch: ''$2''",
        "viewpagelogs": "Logbüecher für die Syten azeige",
        "nohistory": "S git kei Versionsgschicht fir die Syte.",
        "currentrev": "Itzigi Version",
        "currentrev-asof": "Aktuälli Version vu $1",
        "revisionasof": "Version vo $1",
-       "revision-info": "Alti Bearbeitig vom $1 dür $2",
+       "revision-info": "Version vu $4, $5 Uhr vu {{GENDER:$6|$2}}$7",
        "previousrevision": "← Vorderi Version",
        "nextrevision": "Nächschti Version →",
        "currentrevisionlink": "Itzigi Version",
        "rev-deleted-event": "(Logbuechaktion uusegnuh)",
        "rev-deleted-user-contribs": "[Benutzername oder IP-Adräss uusegnuu - Bearbeitig in dr Byytragslischt versteckt]",
        "rev-deleted-text-permission": "Die Version isch '''glescht''' wore.\nInformation zue dr Leschig un e Begrindig het s im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech].",
+       "rev-suppressed-text-permission": "Die Version isch <strong>unterdruckt</strong> wore.\nEinzelheite het s im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Oversight-Logbuech].",
        "rev-deleted-text-unhide": "Die Version isch '''gelöscht''' worde.\nMee Angabe chasch im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuech] finde.\nDu chasch [$1 die Version allno aaluege], wänn de wottsch.",
        "rev-suppressed-text-unhide": "Die Version isch '''unterdrückt''' worde.\nMee Angabe chasch im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückigs-Logbuech] finde.\nDu chasch [$1 die Version allno aaluege], wänn de wottsch.",
        "rev-deleted-text-view": "Die Version isch '''glescht''' wore.\nDu chasch si allno aaluege. Details findsch im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuech].",
        "revdelete-no-file": "D Datei, wu Du aagee hesch, git s nit.",
        "revdelete-show-file-confirm": "Bisch sicher, ass Du di glescht Version vu dr Datei „<nowiki>$1</nowiki>“ vum $2 am $3 witt aaluege?",
        "revdelete-show-file-submit": "Jo",
+       "revdelete-selected-text": "Uusgwehlti {{PLURAL:$1|Version|Versione}} vu [[:$2]]:",
+       "revdelete-selected-file": "Uusgwehlti {{PLURAL:$1|Dateiversion|Dateiversione}} vu [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Usgwehlte Logbuechyytrag|Usgwehlti Logbuechyytreg}}:",
+       "revdelete-text-text": "Gleschti Versione blybe no dr Versionsgschicht, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+       "revdelete-text-file": "Gleschti Dateiversione blybe no in dr Datei-Versionsgschicht, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+       "logdelete-text": "Gleschti Logbuechyytreg blybe no dr Logbiecher, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+       "revdelete-text-others": "Anderi Administratore hän no Zuegriff uf dr verdeckt Inhalt un chenne ne au widerhärstelle, solang keini zuesetzlige Bschränkige feschtgleit wäre.",
        "revdelete-confirm": "Bitte tue bstetige, ass Du vor hesch, des z mache, d Konsequänze drus verstohsch un s machsch in Inbereinstimmig mit dr [[{{MediaWiki:Policy-url}}|Richtlinie]].",
        "revdelete-suppress-text": "Unterdruckige sotte '''nume''' in däne Fäll bruucht wäre:\n* Nit aabrochti Informatione\n*: ''Adrässe, Telifonnummere, Sozialversicherigsnummere usw.'",
        "revdelete-legend": "Setze vu dr Sichtbarkeits-Yyschränkige",
index e3af5e2..f2c38c2 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|חבר אחד|$1 חברים}} ({{PLURAL:$2|קטגוריית משנה אחת|$2 קטגוריות משנה}}, {{PLURAL:$3|קובץ אחד|$3 קבצים}})",
        "search-redirect": "(הפניה $1)",
        "search-section": "(פסקה $1)",
+       "search-category": "(קטגוריה $1)",
        "search-file-match": "(התאמה בתוכן הקובץ)",
        "search-suggest": "האם התכוונת ל: $1",
        "search-interwiki-caption": "מיזמי אחות",
        "api-error-stashfailed": "שגיאה פנימית: השרת נכשל באחסון הקובץ הזמני.",
        "api-error-publishfailed": "שגיאה פנימית: השרת נכשל בפרסום הקובץ הזמני.",
        "api-error-stasherror": "הייתה שגיאה בהעלאת הקובץ למאגר.",
+       "api-error-stashedfilenotfound": "הקובץ שבמאגר לא נמצא בעת הניסיון להעלות אותו מהמאגר.",
+       "api-error-stashpathinvalid": "הנתיב שבו הקובץ שבמאגר אמור היה להימצא היה בלתי תקין.",
+       "api-error-stashfilestorage": "הייתה שגיאה בעת אחסון הקובץ במאגר.",
+       "api-error-stashzerolength": "השרת לא יכול היה לאחסן במאגר את הקובץ, כי אורכו היה אפס.",
+       "api-error-stashnotloggedin": "נדרשת כניסה לחשבון כדי לשמור קבצים במאגר ההעלאות.",
+       "api-error-stashwrongowner": "הקובץ שניסית לגשת אליו במאגר אינו שייך לך.",
+       "api-error-stashnosuchfilekey": "מפתח הקובץ שניסית לגשת אליו במאגר אינו קיים.",
        "api-error-timeout": "השרת לא השיב בזמן המצופה.",
        "api-error-unclassified": "אירעה שגיאה בלתי ידועה.",
        "api-error-unknown-code": "שגיאה בלתי ידועה: \"$1\".",
index 37dba90..0b3807d 100644 (file)
        "movelogpage": "Evidencija premještanja",
        "movelogpagetext": "Ispod je popis premještenih stranica.",
        "movesubpage": "{{PLURAL:$1|Podstranica|Podstranice}}",
-       "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstarnicu|podstranice}} koje su prikazane ispod.",
+       "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstranicu|podstranice|podstranica}} koje su prikazane ispod.",
        "movenosubpage": "Ova stranica nema podstranica.",
        "movereason": "Razlog:",
        "revertmove": "vrati",
index ce3d64d..24aaeee 100644 (file)
        "viewsourcetext": "Tu pote vider e copiar le codice-fonte de iste pagina:",
        "viewyourtext": "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
        "protectedinterface": "Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
-       "editinginterface": "'''Attention:''' Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.\nPro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
+       "editinginterface": "<strong>Attention:</strong> Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification apportate a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.",
+       "translateinterface": "Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de localisation de MediaWiki.",
        "cascadeprotected": "Iste pagina ha essite protegite contra modificationes, proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} es protegite usante le option \"cascada\":\n$2",
        "namespaceprotected": "Tu non ha le permission de modificar paginas in le spatio de nomines '''$1'''.",
        "customcssprotected": "Tu non ha le permission de modificar iste pagina de CSS perque illo contine le configuration personal de un altere usator.",
        "content-model-text": "texto simple",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Paginas que usa parametros duplicate in appellos de patrono",
+       "duplicate-args-category-desc": "Le pagina contine appellos de patrono que usa duplicatos de parametros, como per exemplo <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Attention: Iste pagina contine troppo de appellos costose al functiones del analysator syntactic.\n\nIllo debe haber minus de $2 {{PLURAL:$2|appello|appellos}}, sed al momento ha $1 {{PLURAL:$1|appello|appellos}}.",
        "expensive-parserfunction-category": "Paginas con troppo de appellos costose al functiones del analysator syntactic",
        "post-expand-template-inclusion-warning": "'''Attention:''' Le grandor del patronos includite ha excedite le maximo.\nAlcun patronos non essera includite.",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirection ab $1)",
        "search-section": "(section $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(corresponde al contento del file)",
        "search-suggest": "Esque tu vole dicer: $1",
        "search-interwiki-caption": "Projectos fratres",
        "gender-female": "Illa modifica paginas wiki",
        "prefs-help-gender": "Definir iste preferentia es optional.\nLe software lo usa pro adressar e mentionar te correctemente con le genere appropriate.\nIste information es public.",
        "email": "E-mail",
-       "prefs-help-realname": "Le nomine real es optional.\nSi tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contributiones.",
+       "prefs-help-realname": "Le nomine real es optional.\nSi fornite, illo pote esser usate pro attribuer te tu travalio.",
        "prefs-help-email": "Le adresse de e-mail es optional, ma es necessari pro le reinitialisation de tu contrasigno, in caso que tu lo oblida.",
        "prefs-help-email-others": "Tu pote etiam optar pro permitter que altere personas te contacta via tu pagina de usator o de discussion, sin necessitate de revelar tu identitate.",
        "prefs-help-email-required": "Un adresse de e-mail es obligatori.",
        "pager-older-n": "{{PLURAL:$1|1 minus recente|$1 minus recente}}",
        "suppress": "Supervisor",
        "querypage-disabled": "Iste pagina special es disactivate pro evitar de supercargar le systema.",
+       "apihelp": "Adjuta con le API",
+       "apihelp-no-such-module": "Modulo \"$1\" non trovate.",
        "booksources": "Fontes de libros",
        "booksources-search-legend": "Cercar fontes de libros",
        "booksources-search": "Cercar",
        "tooltip-pt-mycontris": "Lista de tu contributiones",
        "tooltip-pt-login": "Nos recommenda que tu te authentica, ma non es obligatori.",
        "tooltip-pt-logout": "Clauder session",
+       "tooltip-pt-createaccount": "Tu es incoragiate a crear un conto e aperir session; totevia, non es obligatori",
        "tooltip-ca-talk": "Discussiones a proposito del pagina de contento",
        "tooltip-ca-edit": "Tu pote modificar iste pagina.\nPer favor usa le previsualisation ante de publicar.",
        "tooltip-ca-addsection": "Initiar un nove section",
        "tooltip-feed-atom": "Syndication Atom pro iste pagina",
        "tooltip-t-contributions": "Vider le lista de contributiones de iste usator",
        "tooltip-t-emailuser": "Inviar un e-mail a iste usator",
+       "tooltip-t-info": "Plus information super iste pagina",
        "tooltip-t-upload": "Incargar files",
        "tooltip-t-specialpages": "Lista de tote le paginas special",
        "tooltip-t-print": "Version imprimibile de iste pagina",
        "unknown_extension_tag": "Etiquetta de extension incognite \"$1\"",
        "duplicate-defaultsort": "Attention: Le clave de ordination predefinite \"$2\" supplanta le anterior clave de ordination predefinite \"$1\".",
        "duplicate-displaytitle": "<strong>Attention:</strong> Le titulo a monstrar \"$2\" supplanta le ancian titulo a monstrar \"$1\".",
+       "invalid-indicator-name": "<strong>Error:</strong> Le attributo <code>name</code> del indicatores del stato del pagina non pote esser vacue.",
        "version": "Version",
        "version-extensions": "Extensiones installate",
        "version-skins": "Apparentias installate",
        "revdelete-uname-unhid": "nomine de usator non plus celate",
        "revdelete-restricted": "restrictiones applicate al administratores",
        "revdelete-unrestricted": "restrictiones eliminate pro administratores",
+       "logentry-merge-merge": "$1 {{GENDER:$2|fusionava}} $3 in $4 (versiones usque a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4 sin lassar un redirection",
        "logentry-move-move_redir": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4, superscribente un redirection",
index 573c581..d1db2de 100644 (file)
@@ -7,7 +7,8 @@
                        "Sapral Mikail",
                        "Tagir",
                        "Умар",
-                       "아라"
+                       "아라",
+                       "Shirayuki"
                ]
        },
        "tog-underline": "Ӏинкаш белгалде:",
        "searchresults": "Тохкама гIулакхахилар",
        "searchresults-title": "\"$1\" тохка",
        "notextmatches": "ОагIувнаша яздамий вIашагIакхетараш дац",
-       "prevn": "{{PLURAL:$1|хьалхйоаг|ар $1|хьалхйоаг|араш $1|хьалхйоаг|араш $1}}",
+       "prevn": "{{PLURAL:$1|хьалхйоагlар $1|хьалхйоагlараш $1|хьалхйоагlараш $1}}",
        "nextn": "{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}",
        "prevn-title": "{{PLURAL:$1|1=$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}",
        "nextn-title": "{{PLURAL:$1|1=$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}",
        "newpages": "Керда оагIувнаш",
        "move": "ЦIи хувца",
        "movethispage": "Укх оагIува цIи хувца",
-       "pager-newer-n": "{{PLURAL:$1|кеÑ\80дагIа Ð´Ð°Ñ\80а|кеÑ\80дагIа Ð´Ð¾Ð»Ð°Ñ\87аÑ\8cÑ\80аÑ\85Ñ\8c|кеÑ\80дагIа Ð´Ð°Ñ\80аÑ\88}} $1",
-       "pager-older-n": "{{PLURAL:$1|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80а|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð¾Ð»aÑ\87аÑ\8cÑ\80аÑ\85Ñ\8c|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80аÑ\88}} $1",
+       "pager-newer-n": "{{PLURAL:$1|кеÑ\80дагIа Ð´Ð°Ñ\80а|кеÑ\80дагIа Ð´Ð°Ñ\80аÑ\88|кеÑ\80дагIа Ð´Ð¾Ð»Ð°Ñ\87аÑ\8cÑ\80аÑ\85Ñ\8c}} $1",
+       "pager-older-n": "{{PLURAL:$1|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80а|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80аÑ\88|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð¾Ð»aÑ\87аÑ\8cÑ\80аÑ\85Ñ\8c}} $1",
        "booksources": "Китабий гIувам",
        "booksources-search-legend": "Китаба лоаца маIандара тохкам",
        "log": "Тептараш",
index c8d0498..ed1c57e 100644 (file)
        "content-model-text": "testo normale",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "duplicate-args-category": "Pagine che usano argomenti duplicati in chiamate a template",
+       "duplicate-args-category": "Pagine contenenti chiamate a template con parametri duplicati",
        "duplicate-args-category-desc": "La pagina contiene chiamate a template che utilizzano argomenti duplicati, come ad esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.\n\nDovrebbe averne meno di $2, al momento ce {{PLURAL:$1|n'è $1|ne sono $1}}.",
        "expensive-parserfunction-category": "Pagine con troppe chiamate alle funzioni parser",
        "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sezione $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(corrispondenza nel contenuto del file)",
        "search-suggest": "Forse cercavi: $1",
        "search-interwiki-caption": "Progetti fratelli",
        "api-error-stashfailed": "Errore interno: il server non è riuscito a memorizzare il documento temporaneo.",
        "api-error-publishfailed": "Errore interno: il server non è riuscito a pubblicare il documento temporaneo.",
        "api-error-stasherror": "Si è verificato un errore durante il caricamento del file in stash.",
+       "api-error-stashedfilenotfound": "Il file in stash non è stato trovato durante il tentativo di caricamento dallo stash.",
+       "api-error-stashpathinvalid": "Il percorso in cui il file in stash dovrebbe trovarsi non è valido.",
+       "api-error-stashfilestorage": "Si è verificato un errore durante la memorizzazione del file in stash.",
+       "api-error-stashzerolength": "Il server non può inserire il file in stash, poiché ha lunghezza zero.",
+       "api-error-stashnotloggedin": "Devi aver effettuato l'accesso per poter salvare il file nel caricamento in stash.",
+       "api-error-stashwrongowner": "Il file a cui stai tentando di accedere nello stash non appartiene a te.",
+       "api-error-stashnosuchfilekey": "La chiave del file a cui stai tentando di accedere nello stash non esiste.",
        "api-error-timeout": "Il server non ha risposto entro il tempo previsto.",
        "api-error-unclassified": "Si è verificato un errore sconosciuto.",
        "api-error-unknown-code": "Errore sconosciuto: \"$1\"",
index 9f260f9..e95eeea 100644 (file)
@@ -60,7 +60,8 @@
                        "아라",
                        "Rxy",
                        "Mfuji",
-                       "Takot"
+                       "Takot",
+                       "SkyDaisy9"
                ]
        },
        "tog-underline": "リンクの下線:",
        "search-result-category-size": "{{PLURAL:$1|$1 件}} ({{PLURAL:$2|$2 下位カテゴリ}}、{{PLURAL:$3|$3 ファイル}})",
        "search-redirect": "($1からのリダイレクト)",
        "search-section": "($1の節)",
+       "search-category": "(カテゴリ $1)",
        "search-file-match": "(ファイルの内容との一致)",
        "search-suggest": "もしかして: $1",
        "search-interwiki-caption": "姉妹プロジェクト",
        "revdelete-uname-unhid": "利用者名の可視化",
        "revdelete-restricted": "管理者に対する制限の適用",
        "revdelete-unrestricted": "管理者に対する制限の除去",
+       "logentry-merge-merge": "$1{{GENDER:$2|統合元}} と$3を$4に統合(改訂版を$5に掲載)",
        "logentry-move-move": "$1 がページ「$3」を「$4」に{{GENDER:$2|移動しました}}",
        "logentry-move-move-noredirect": "$1 がページ「$3」を「$4」に、リダイレクトを残さずに{{GENDER:$2|移動しました}}",
        "logentry-move-move_redir": "$1 がページ「$3」をリダイレクトの「$4」に{{GENDER:$2|移動しました}}",
index d9fa6f7..ac1921e 100644 (file)
@@ -5,7 +5,8 @@
                        "Ukabia",
                        "Yocahuna",
                        "គីមស៊្រុន",
-                       "아라"
+                       "아라",
+                       "Chabi1"
                ]
        },
        "tog-underline": "Lingk andalainin",
        "powersearch-ns": "Saach ina niemspies:",
        "preferences": "Prefrens",
        "mypreferences": "Mi prefrans",
+       "prefs-help-realname": "Riil niem apshanal. Ef yu giit, imaita yuuz az achribyuushan fi yu wok.",
        "group-sysop": "Adminischrieta",
        "grouppage-sysop": "{{ns:project}}:Adminischrieta",
        "newuserlogpage": "Yuuza krieshan lag",
        "tooltip-feed-atom": "Atom fiid fi dis piej",
        "tooltip-t-contributions": "Vyuu di lis a kanchribyuushan a dis yuuza",
        "tooltip-t-emailuser": "Sen e-miel tu dis yuuza",
+       "tooltip-t-info": "Muo infamieshan bout da piej ya",
        "tooltip-t-upload": "Opluod fail",
        "tooltip-t-specialpages": "Lis a aal peshal piej",
        "tooltip-t-print": "Printobl voerjan a dis piej",
index ed48de8..b37caa4 100644 (file)
        "pagemovedsub": "Бет жылжытылды",
        "movepage-moved": "<strong>«$1» беті «$2» бетіне жылжытылды</strong>",
        "movepage-moved-redirect": "Айдатқыш жасалды.",
+       "movepage-moved-noredirect": "Бағыттау беті басталуы жасырылды.",
        "articleexists": "Осылай аталған бет әлдақашан бар немесе таңдаған атауыңыз жарамды емес.\nБасқа атауды таңдаңыз.",
        "cantmove-titleprotected": "Бетті осы орынға жылжыта алмайсыз, себебі жаңа тақырып аты бастаудан қорғалған",
        "movetalk": "Қатысты талқылау бетін де жылжыту",
index 8ebd626..0d10bec 100644 (file)
        "permalink": "តំណភ្ជាប់អចិន្ត្រៃយ៍",
        "print": "បោះពុម្ព",
        "view": "មើល",
+       "view-foreign": "មើលលើ $1",
        "edit": "កែប្រែ",
        "create": "បង្កើត",
        "editthispage": "កែប្រែទំព័រនេះ",
        "otherlanguages": "ជាភាសាដទៃទៀត",
        "redirectedfrom": "(ត្រូវបានបញ្ជូនបន្តពី $1)",
        "redirectpagesub": "ទំព័របញ្ជូនបន្ត",
+       "redirectto": "បញ្ជូនបន្តទៅ៖",
        "lastmodifiedat": "ទំព័រនេះត្រូវបានកែចុងក្រោយនៅ$2 $1",
        "viewcount": "ទំព័រនេះ​ត្រូវបានចូលមើល​ចំនួន'''{{PLURAL:$1|ម្ដង|$1ដង}}'''",
        "protectedpage": "ទំព័រដែលត្រូវបានការពារ",
        "hidetoc": "លាក់",
        "collapsible-collapse": "បង្រួម",
        "collapsible-expand": "ពន្លាត",
+       "confirmable-confirm": "តើ {{GENDER:$1|អ្នក}} ប្រាកដហើយ?",
+       "confirmable-yes": "បាទ/ចាស",
+       "confirmable-no": "ទេ",
        "thisisdeleted": "មើល ឬ​ ស្ដារ $1 ឡើងវិញ?",
        "viewdeleted": "មើល $1?",
        "restorelink": "{{PLURAL:$1|កំណែប្រែមួយត្រូវបានលុបចោល|កំណែប្រែចំនួន $1 ត្រូវបានលុបចោល}}",
        "viewsourcetext": "អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖",
        "viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''មកកាន់ទំព័រនេះ៖",
        "protectedinterface": "ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។\nដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។",
-       "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។ ដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែ​សំរាប់វិគីទាំងអស់ សូបប្រើប្រាស់  [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] គម្រោង​បកប្រែរបស់មេឌាវិគី ។",
+       "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។",
+       "translateinterface": "ដើម្បីបន្ថែមឬកែប្រែការបកប្រែសម្រាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគម្រោងបកប្រែវិគីមេឌា។",
        "cascadeprotected": "ទំព័រនេះត្រូវបានការពារពីការការប្រែដោយសារវាមាន{{PLURAL:$1|ទំព័រ, ដែលមាន}} ដែលត្រូវបានការពារជាមួយជំរើស\"ជាបណ្ដាក់\"៖\n$2",
        "namespaceprotected": "អ្នកមិនមានសិទ្ធិកែប្រែទំព័រក្នុងប្រភេទ'''$1'''ទេ។",
        "customcssprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែទំព័រ CSS នេះទេ ព្រោះវាផ្ទុកការកំណត់ផ្ទាល់ខ្លួនផ្សេងៗរបស់អ្នកប្រើប្រាស់ម្នាក់ផ្សេងទៀត។",
        "invalidtitle-knownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ \"$2\" និងអត្ថបទ \"$3\"",
        "invalidtitle-unknownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ \"$2\"",
        "exception-nologin": "មិនទាន់កត់ឈ្មោះចូលទេ",
-       "exception-nologin-text": "សូម[[Special:Userlogin|lកត់ឈ្មោះចូល]]ដើម្បីចូលអានទំព័រឬធ្វើសកម្មភាពនេះ។",
+       "exception-nologin-text": "សូមកត់ឈ្មោះចូលដើម្បីចូលអានទំព័រឬធ្វើសកម្មភាពនេះ។",
        "exception-nologin-text-manual": "សូម $1 ដើម្បីអាចចូលមើលទំព័រនេះឬធ្វើសកម្មភាពអ្វីមួយ។",
        "virus-badscanner": "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
        "virus-scanfailed": "ស្កេនមិនបានសំរេច (កូដ $1)",
        "gotaccountlink": "កត់ឈ្មោះចូល",
        "userlogin-resetlink": "តើអ្នកភ្លេចព័ត៌មានលម្អិតសម្រាប់កត់ឈ្មោះចូលហើយ?",
        "userlogin-resetpassword-link": "អ្នកភ្លេចពាក្យសម្ងាត់ហើយ?",
+       "userlogin-helplink2": "ជំនួយលើការកត់ឈ្មោះចូល",
        "userlogin-loggedin": "អ្នកបានកត់ឈ្មោះចូលជា {{GENDER:$1|$1}} ហើយ។\nប្រើសំណុំបែបបទខាងក្រោមដើម្បីកត់ឈ្មោះចូលជាអ្នកប្រើប្រាស់ផ្សេងម្នាក់ទៀត។",
        "userlogin-createanother": "បង្កើតគណនីមួយទៀត",
        "createacct-emailrequired": "អាសយដ្ឋានអ៊ីមែល",
        "loginlanguagelabel": "ភាសា៖ $1",
        "createacct-another-realname-tip": "អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើការរួមចំណែក​នានា​របស់អ្នក។",
        "pt-login": "កត់ឈ្មោះចូល",
+       "pt-login-button": "កត់ឈ្មោះចូល",
        "pt-createaccount": "បង្កើតគណនី",
        "pt-userlogout": "កត់ឈ្មោះចេញ",
        "php-mail-error-unknown": "កំហុសមិនស្គាល់នៅក្នុងអនុគមន៍ mail() របស់ PHP",
        "resetpass-temp-emailed": "អ្នកបានកត់ឈ្មោះចូលដោយប្រើលេខកូដបណ្ដោះអាសន្នផ្ញើតាមអ៊ីមែល។\nដើម្បីបញ្ចប់ការកត់ឈ្មោះចូល អ្នកចាំបាច់ត្រូវតែកំណត់ពាក្យសម្ងាត់ថ្មីនៅទីនេះ៖",
        "resetpass-temp-password": "ពាក្យសម្ងាត់បណ្តោះអាសន្ន:",
        "resetpass-expired": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ។ សូមកំណត់ពាក្យសម្ងាត់ថ្មីដើម្បីកត់ឈ្មោះចូល។",
-       "resetpass-expired-soft": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ ហើយអ្នកត្រូវតែកំណត់វាឡើងវិញ។ សូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីឥឡូវនេះ ឬចុចបោះបង់ដើម្បីកំណត់វានៅពេលក្រោយ។",
-       "passwordreset": "កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ",
+       "resetpass-expired-soft": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ ហើយអ្នកត្រូវតែកំណត់វាឡើងវិញ។ សូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីឥឡូវនេះ ឬចុច\"{{int:resetpass-submit-cancel}}\"ដើម្បីកំណត់វានៅពេលក្រោយ។",
+       "resetpass-validity-soft": "ពាក្យសម្ងាត់របស់អ្នកមិនត្រឹមត្រូវទេ៖ $1\n\nសូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយឥឡូវនេះ ឬក៏ចុច\"{{int:resetpass-submit-cancel}}\" ដើម្បីកំណត់វាឡើងវិញនៅពេលក្រោយ។",
+       "passwordreset": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
        "passwordreset-text-one": "បំពេញសំណុំបែបបទនេះដើម្បីស្ដារពាក្យសម្ងាត់របស់អ្នក។",
        "passwordreset-text-many": "{{PLURAL:$1|សូមបំពេញក្នុងប្រអប់មួយក្នុងចំណោមប្រអប់ខាងក្រោមដើម្បីទទួលពាក្យសម្ងាត់បណ្ដោះអាសន្នមួយតាមរយៈអ៊ីមែល។}}",
-       "passwordreset-legend": "á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\9fá\9e¶á\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89",
+       "passwordreset-legend": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
        "passwordreset-disabled": "មុខងារប្ដូរទៅពាក្យសម្ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
        "passwordreset-emaildisabled": "មុខងារអ៊ីមែលត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
        "passwordreset-username": "អត្តនាម៖",
        "preview": "មើលជាមុន",
        "showpreview": "បង្ហាញ​ការមើលជាមុន",
        "showdiff": "បង្ហាញ​បន្លាស់ប្ដូរ",
-       "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។",
-       "anonpreviewwarning": "''អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។''",
+       "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។ បើសិនជាអ្នក <strong>[$1 កត់ឈ្មោះចូល]</strong> ឬ <strong>[$2 បង្កើតគណនី]</strong> នោះការកែប្រែរបស់អ្នកនឹងត្រូវភ្ចាប់ជាមួយអត្តនាមរបស់អ្នកផង នឹងមានផលប្រយោជន៍ផ្សេងទៀតផង។",
+       "anonpreviewwarning": "<em>អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។</em>",
        "missingsummary": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។\n\nបើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។",
        "missingcommenttext": "សូមវាយបញ្ចូលយោបល់មួយនៅខាងក្រោម។",
        "missingcommentheader": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ឱ្យនូវ ប្រធានបទ/ចំណងជើង របស់មតិយោបល់នេះទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។",
        "edit-gone-missing": "មិនអាចបន្ទាន់សម័យទំព័រនេះទេ។\n\nទំព័រនេះហាក់ដូចជាត្រូវបានលុបចោលហើយ។",
        "edit-conflict": "កែប្រែ​ភាពឆ្គង​។",
        "edit-no-change": "ការកែប្រែរបស់អ្នកត្រូវបានមិនទុកជាការទេ ព្រោះគ្មានការផ្លាស់ប្ដូរណាមួយត្រូវបានធ្វើនៅលើអត្ថបទនេះទេ។",
+       "postedit-confirmation-created": "បានបង្កើតទំព័ររូចហើយ។",
+       "postedit-confirmation-restored": "បានស្ដារទំព័រឡើងវិញរួចហើយ។",
        "postedit-confirmation-saved": "កំណែប្រែរបស់អ្នកត្រូវបានរក្សាទុកហើយ។",
        "edit-already-exists": "មិនអាចបង្កើតទំព័រថ្មីមួយទេ។\n\nទំព័រនេះមានរួចហើយ។",
        "defaultmessagetext": "អត្ថបទសារតាមលំនាំដើម",
        "currentrev": "កំណែបច្ចុប្បន្ន",
        "currentrev-asof": "កំណែប្រែបច្ចុប្បន្ន $1",
        "revisionasof": "កំណែ​របស់ $1",
-       "revision-info": "á\9e\80á\9f\86á\9e\8eá\9f\82â\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8b $1 á\9e\8aá\9f\84á\9e\99 $2",
+       "revision-info": "á\9e\80á\9f\86á\9e\8eá\9f\82â\80\8bá\9e\93á\9f\85 $1 á\9e\8aá\9f\84á\9e\99 {{GENDER:$6|$2}}$7",
        "previousrevision": "← កំណែ​មុន",
        "nextrevision": "កំណែបន្ទាប់ →",
        "currentrevisionlink": "កំណែបច្ចុប្បន្ន",
        "shown-title": "បង្ហាញ $1 {{PLURAL:$1|លទ្ធផល|លទ្ធផល}}ក្នុងមួយទំព័រ",
        "viewprevnext": "មើល ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "* ទំព័រ '''[[$1]]'''",
-       "searchmenu-new": "'''បង្កើតទំព័រ \"[[:$1]]\" នៅ​លើ​វិគី​នេះ!'''",
+       "searchmenu-new": "<strong>បង្កើតទំព័រ \"[[:$1]]\" នៅ​លើ​វិគី​នេះ!</strong> {{PLURAL:$2|0=|សូមមើលផងដែរទំព័រដែលរកឃើញជាមួយពាក្យដែលអ្នកស្វែងរក។|សូមមើលផងដែរលទ្ធផលដែលរកឃើញ។}}",
        "searchprofile-articles": "ទំព័រ​មាតិកា",
        "searchprofile-images": "ពហុ​ព័ត៌មាន",
        "searchprofile-everything": "ទាំងអស់",
        "search-result-category-size": "{{PLURAL:$1|សមាជិកម្នាក់|សមាជិក$1នាក់}} ({{PLURAL:$2|កូនចំណាត់ថ្នាក់ក្រុម១|$2 កូនចំណាត់ថ្នាក់ក្រុម}}, {{PLURAL:$3|1 ឯកសារ|$3 ឯកសារ}})",
        "search-redirect": "(បញ្ជូនបន្ត $1)",
        "search-section": "(ផ្នែក $1)",
+       "search-category": "(ចំណាត់ថ្នាក់ក្រុម $1)",
+       "search-file-match": "(ខ្លឹមសារឯកសារត្រូវគ្នា)",
        "search-suggest": "ប្រហែលជាអ្នកចង់រក៖ $1",
        "search-interwiki-caption": "គម្រោងជាបងប្អូន",
        "search-interwiki-default": "លទ្ធផលពី$1៖",
        "preferences": "ចំណង់ចំណូលចិត្ត",
        "mypreferences": "ចំណង់ចំណូលចិត្ត​",
        "prefs-edits": "ចំនួនកំណែប្រែ៖",
+       "prefsnologintext2": "សូមកត់ឈ្មោះចូលដើម្បីផ្លាស់ប្ដូរចំណង់ចំណូលចិត្តរបស់អ្នក។",
        "prefs-skin": "សំបក",
        "skin-preview": "មើលជាមុន",
        "datedefault": "គ្មានចំណូលចិត្ត",
        "gender-female": "ស្រី",
        "prefs-help-gender": "ចំណង់ចំណូលចិត្តនេះកំណត់ក៏បានមិនកំណត់ក៏បាន៖ ប្រើសំរាប់អោយសូហ្វវែរហៅតាមភេទអោយបាមត្រឹមត្រូវ។ ព័ត៌មាននេះនឹងត្រូវបង្ហាញជាសាធារណៈ។",
        "email": "អ៊ីមែល",
-       "prefs-help-realname": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\96á\9e·á\9e\8fá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9e\98á\9e·á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9f\94 á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e±á\9f\92á\9e\99 á\9e\9cá\9e¶á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9f\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\97á\9e¶á\9e\96á\9e\87á\9e¶á\9e\98á\9f\92á\9e\85á\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\9bá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\9aá\9e½á\9e\98á\9e\85á\9f\86á\9e\8eá\9f\82á\9e\80â\80\8bá\9e\93á\9e¶á\9e\93á\9e​របស់អ្នក។",
+       "prefs-help-realname": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\96á\9e·á\9e\8fá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9e\98á\9e·á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9f\94 á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e±á\9f\92á\9e\99 á\9e\9cá\9e¶á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9f\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\97á\9e¶á\9e\96á\9e\87á\9e¶á\9e\98á\9f\92á\9e\85á\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\9bá\9e¾á\9e\9fá\9f\92á\9e\93á\9e¶á\9e\8aá\9f\83​របស់អ្នក។",
        "prefs-help-email": "អ្នកអាចផ្ដល់អាសយដ្ឋានអ៊ីមែលរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ ប៉ុន្ដែអាសយដ្ឋានអ៊ីមែលដែលផ្ដល់អោយនឹងមានប្រយោជន៍ក្នុងការប្ដូរពាក្យសម្ងាត់ ពេលដែលអ្នកភ្លេចវា។",
        "prefs-help-email-others": "អ្នកក៏អាចជ្រើសរើស​ការផ្ដល់លទ្ឋភាព​​ឱ្យអ្នកដទៃទាក់ទងអ្នក​តាមរយៈ​​ទំព័រអ្នកប្រើប្រាស់​​ឬទំព័រពិភាក្សារបស់អ្នក​​ដោយមិនចាំបាច់ឱ្យគេដឹងពីអត្តសញ្ញាណរបស់អ្នកផងដែរ។",
        "prefs-help-email-required": "អាសយដ្ឋានអ៊ីមែលត្រូវការជាចាំបាច់។",
        "right-move": "ប្ដូរទីតាំងទំព័រ",
        "right-move-subpages": "ប្ដូរទីតាំងទំព័ររួមជាមួយទំព័ររងរបស់វា",
        "right-move-rootuserpages": "ប្ដូរទីតាំងឫសទំព័រអ្នកប្រើប្រាស់",
+       "right-move-categorypages": "ប្ដូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម",
        "right-movefile": "ប្ដូរទីតាំងឯកសារ",
        "right-suppressredirect": "មិនបង្កើតការបញ្ជូនបន្តពីទំព័រប្រភពនៅពេលប្ដូរទីតាំងទំព័រ",
        "right-upload": "ផ្ទុកឡើងឯកសារ",
        "action-move": "ប្ដូរទីតាំងទំព័រនេះ",
        "action-move-subpages": "ប្ដូរទីតាំងទំព័រនេះព្រមទាំងអនុទំព័ររបស់វា",
        "action-move-rootuserpages": "ប្ដូរទីតាំងឫសទំព័រអ្នកប្រើប្រាស់",
+       "action-move-categorypages": "ប្ដូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម",
        "action-movefile": "ប្ដូរទីតាំងឯកសារនេះ",
        "action-upload": "ផ្ទុកឡើងឯកសារនេះ",
        "action-reupload": "ផ្ទុកជាន់ពីលើឯកសារដែលមានស្រាប់ហើយនេះ",
        "license-nopreview": "(មិនទាន់មានការបង្ហាញការមើលជាមុនទេ)",
        "upload_source_url": "(URL ត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)",
        "upload_source_file": "(ឯកសារក្នុងកុំព្យូទ័ររបស់អ្នក)",
+       "listfiles-delete": "លុបចោល",
        "listfiles-summary": "ទំព័រពិសេស​នេះ​បង្ហាញ​គ្រប់​ឯកសារ​ដែល​បានផ្ទុកឡើង។",
        "listfiles_search_for": "ស្វែងរកឈ្មោះមេឌា៖",
        "imgfile": "ឯកសារ",
        "booksources": "ប្រភពសៀវភៅ",
        "booksources-search-legend": "ស្វែងរកប្រភពសៀវភៅ",
        "booksources-isbn": "លេខ​កូដ​សៀវ​ភៅ​ ISBN ៖",
+       "booksources-search": "ស្វែងរក",
        "booksources-text": "ខាងក្រោមនេះជាបញ្ជីនៃតំណភ្ជាប់ទៅវិបសាយនានាដែលលក់​សៀវភៅថ្មីនិងជជុះ ហើយអាចផ្ដល់ព័ត៌មានបន្ថែមផ្សេងទៀតអំពីសៀវភៅដែលអ្នកកំពុងស្វែងរក៖",
        "booksources-invalid-isbn": "លេខISBNដែលអ្នកផ្ដល់អោយហាក់ដូចជាមិនត្រឹមត្រូវទេ។ សូមពិនិត្យក្រែងលោមានកំហុសក្នុងការចម្លងចេញពីប្រភពដើម។",
        "specialloguserlabel": "អ្នកប្រព្រឹត្តិ៖",
        "listgrouprights-removegroup-self": "យក​ចេញ​{{PLURAL:$2|ក្រុម}}ពី​​គណនី​ផ្ទាល់ខ្លួន​៖ $1",
        "listgrouprights-addgroup-self-all": "បន្ថែម​ក្រុម​ទាំងអស់​ទៅ​គណនី​ផ្ទាល់ខ្លួន​",
        "listgrouprights-removegroup-self-all": "យក​ចេញ​​ក្រុម​ទាំងអស់​ពី​​គណនី​ផ្ទាល់ខ្លួន​",
+       "trackingcategories-name": "ឈ្មោះសារ",
        "mailnologin": "គ្មានអាសយដ្ឋានផ្ញើទេ",
        "mailnologintext": "អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។",
        "emailuser": "ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ",
        "mywatchlist": "បញ្ជីតាមដាន​",
        "watchlistfor2": "សម្រាប់ $1 $2",
        "nowatchlist": "គ្មានអ្វីនៅក្នុងបញ្ជីតាមដានរបស់អ្នកទេ។",
-       "watchlistanontext": "សូម $1 ដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។",
+       "watchlistanontext": "សូមកត់ឈ្មោះចូលដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។",
        "watchnologin": "មិនទាន់កត់ឈ្មោះចូលទេ",
        "addwatch": "បន្ថែមទៅបញ្ជីតាមដាន",
        "addedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដាក់បញ្ចូលទៅក្នុង​[[Special:Watchlist|បញ្ជីតាមដាន]]របស់លោកអ្នកហើយ ។ រាល់ការផ្លាស់ប្ដូរនៃទំព័រនេះ រួមទាំងទំព័រពិភាក្សារបស់វាផងដែរ នឹងត្រូវបានដាក់បញ្ចូលក្នុងបញ្ជីនៅទីនោះ។",
+       "addedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានបន្ថែមទៅក្នុងបញ្ជីតាមដានរបស់អ្នកហើយ។",
        "removewatch": "ដកចេញពីបញ្ជីតាមដាន",
-       "removedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដកចេញពី[[Special:Watchlist|បញ្ជីតាមដាន]]របស់លោកអ្នកហើយ ។",
+       "removedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដកចេញពី[[Special:Watchlist|បញ្ជីតាមដានរបស់លោកអ្នក]]ហើយ ។",
+       "removedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានដកចេញបញ្ជីតាមដានរបស់អ្នកហើយ។",
        "watch": "តាមដាន",
        "watchthispage": "តាមដានទំព័រនេះ",
        "unwatch": "ឈប់​តាមដាន",
        "wlheader-enotif": "បើកប្រើការផ្ដល់ដំណឹងតាមរយៈអ៊ីមែល។",
        "wlheader-showupdated": "ទំព័រដែលត្រូវបានផ្លាស់ប្តូរតាំងពីពេលចូលមើលចុងក្រោយរបស់អ្នក ត្រូវបានបង្ហាញជា '''អក្សរដិត'''។",
        "wlnote": "ខាងក្រោមនេះជា {{PLURAL:$1|បំលាស់ប្តូរចុងក្រោយ|'''$1'''បំលាស់ប្តូរចុងក្រោយ}}ក្នុងរយះពេល{{PLURAL:$2|'''$2'''ម៉ោង}}ចុងក្រោយ គិតចាប់ពី $3, $4។",
-       "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ ឬ",
+       "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ",
        "watchlist-options": "ជម្រើសនានាក្នុងបញ្ជីតាមដាន",
        "watching": "កំពុង​តាមដាន...",
        "unwatching": "ឈប់​តាមដាន...",
        "delete-edit-reasonlist": "ពិនិត្យផ្ទៀងផ្ទាត់ហេតុផលនៃការលុប",
        "delete-toobig": "ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។\n\nការលុបទំព័របែបនេះចោលត្រូវបានហាមឃាត់ ដើម្បីបង្ការកុំអោយមានការរអាក់រអួលក្នុង{{SITENAME}}។",
        "delete-warning-toobig": "ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។\n\nការលុបទំព័របែបនេះចោលអាចធ្វើអោយមានការរអាក់រអួលប្រតិបត្តិការរបស់មូលដ្ឋានទិន្នន័យក្នុង{{SITENAME}}។\n\nសូមបន្តសកម្មភាពនេះដោយប្រុងប្រយ័ត្ន។",
+       "deleteprotected": "អ្នកមិនអាចលុបចោលទំព័រនេះបានទេព្រោះវាត្រូវបានការពារហើយ។",
        "rollback": "មូលត្រឡប់កំណែប្រែ",
        "rollback_short": "មូលត្រឡប់",
        "rollbacklink": "មូលត្រឡប់",
        "protect-othertime": "រយៈពេលផុតកំណត់ផ្សេងទៀត៖",
        "protect-othertime-op": "រយៈពេលផុតកំណត់ផ្សេងទៀត",
        "protect-existing-expiry": "រយៈពេលផុតកំណត់មានស្រាប់៖ $3, $2",
+       "protect-existing-expiry-infinity": "រយៈពេលផុតកំណត់មានស្រាប់៖ ជារៀងរហូត",
        "protect-otherreason": "មូលហេតុបន្ថែមផ្សេងៗទៀត៖",
        "protect-otherreason-op": "មូលហេតុផ្សេងទៀត",
        "protect-dropdown": "*មូលហេតុការពារជាទូទៅ\n** ទទួលការបំផ្លិចបំផ្លាញយ៉ាងសំបើមក្រៃលែង\n** ស្ព៊ែមយ៉ាងសំបើមក្រៃលែង\n** សង្រ្គាមនៃការកែប្រែដែលនាំឲខូចប្រយោជន៍\n** ទំព័រដែលមានចរាចរកម្រិតខ្ពស់",
        "contributions-title": "ការរួមចំណែករបស់អ្នកប្រើប្រាស់ $1",
        "mycontris": "ការរួមចំណែក",
        "contribsub2": "សម្រាប់{{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "គណនីអ្នកប្រើប្រាស់ដែលមានឈ្មោះ \"$1\"មិនទាន់បានចុះឈ្មោះទេ។",
        "nocontribs": "គ្មានការផ្លាស់ប្តូរត្រូវបានឃើញដូចនឹងលក្ខណៈវិនិច្ឆ័យទាំងនេះ។",
        "uctop": "(បច្ចុប្បន្ន)",
        "month": "ខែ៖",
        "autoblockid": "ដាក់ការហាមឃាត់ជាស្វ័យប្រវត្តិលើ #$1",
        "block": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "unblock": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់",
-       "blockip": "á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\80á\9e¶á\9e\9aá\9e á\9e¶á\9e\98á\9e\83á\9e¶á\9e\8fá\9f\8bá\9e\9bá\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b",
+       "blockip": "á\9e á\9e¶á\9e\98á\9e\83á\9e¶á\9e\8fá\9f\8b{{GENDER:$1|á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b}}",
        "blockip-legend": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "blockiptext": "សូម​ប្រើប្រាស់​សំណុំ​បែបបទ​ខាងក្រោម​ដើម្បី​ហាមឃាត់ការសរសេរ​ពី​អាសយដ្ឋាន IP ឬ​ឈ្មោះ​អ្នកប្រើប្រាស់ណាមួយ​។\nការ​ធ្វើ​បែបនេះ​គួរតែ​ធ្វើឡើង​ក្នុង​គោលបំណង​បង្ការ​ការប៉ុនប៉ង​បំផ្លាញ(vandalism)ដូច​ដែល​មាន​ចែង​ក្នុង[[{{MediaWiki:Policy-url}}|គោលការណ៍]]។\nសូមបំពេញមូលហេតុច្បាស់លាស់មួយខាងក្រោម (ឧទាហរណ៍៖ រាយឈ្មោះទំព័រនានាដែលត្រូវបានគេបំផ្លាញ)។",
        "ipaddressorusername": "អាសយដ្ឋានIP ឬអត្តនាម៖",
        "ipb-unblock-addr": "ដកការហាមឃាត់លើ $1",
        "ipb-unblock": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់ ឬ អាសយដ្ឋាន IP",
        "ipb-blocklist": "មើលការហាមឃាត់ដែលមានហើយ",
-       "ipb-blocklist-contribs": "ការរួមចំណែកសម្រាប់ $1",
+       "ipb-blocklist-contribs": "ការរួមចំណែកសម្រាប់ {{GENDER:$1|$1}}",
        "unblockip": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "unblockiptext": "សូម​ប្រើប្រាស់​ទម្រង់​បែបបទ​ខាងក្រោម​នេះ ដើម្បី​បើក​សិទ្ឋិ​សរសេរ​ឡើងវិញ សម្រាប់​អាសយដ្ឋាន​IP​ឬ​អ្នកប្រើប្រាស់​ដែល​ត្រូវ​បាន​ហាមឃាត់ពីមុន​។",
        "ipusubmit": "ដក​ការហាមឃាត់នេះ​ចេញ",
        "thumbnail_image-missing": "ឯកសារហាក់ដូចជាកំពុងបាត់ខ្លួន៖$1",
        "import": "ការនាំចូលទំព័រ",
        "importinterwiki": "ការនាំចូលអន្តរវិគី",
+       "import-interwiki-sourcewiki": "វិគីប្រភព៖",
+       "import-interwiki-sourcepage": "ទំព័រប្រភព៖",
        "import-interwiki-history": "ចម្លង គ្រប់កំណែចាស់ នៃទំព័រនេះ",
        "import-interwiki-templates": "រាប់​បញ្ចូល​ទំព័រគំរូ​ទាំងអស់​",
        "import-interwiki-submit": "នាំចូល",
        "tooltip-feed-atom": "បម្រែបម្រួល Atom ចំពោះទំព័រនេះ",
        "tooltip-t-contributions": "បង្ហាញបញ្ជីរួមចំណែករបស់អ្នកប្រើប្រាស់នេះ",
        "tooltip-t-emailuser": "ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់នេះ",
+       "tooltip-t-info": "ព័ត៌មានបន្ថែមអំពីទំព័រនេះ",
        "tooltip-t-upload": "ឯកសារផ្ទុកឡើង",
        "tooltip-t-specialpages": "បញ្ជីទំព័រពិសេសៗទាំងមូល",
        "tooltip-t-print": "ទម្រង់សម្រាប់បោះពុម្ភរបស់ទំព័រនេះ",
        "autosumm-replace": "ជំនួសខ្លឹមសារនៃទំព័រដោយ '$1'",
        "autoredircomment": "បញ្ជូនបន្តទៅ [[$1]]",
        "autosumm-new": "បានបង្កើតទំព័រដែលផ្ដើមដោយ $1",
+       "autosumm-newblank": "បានបង្កើតទំព័រទទេ",
        "size-bytes": "$1បៃ",
        "size-kilobytes": "$1គីឡូបៃ",
        "size-megabytes": "$1មេកាបៃ",
        "watchlistedit-raw-done": "បញ្ជីតាមដានរបស់អ្នកត្រូវបានធ្វើឱ្យទាន់សម័យហើយ។",
        "watchlistedit-raw-added": "{{PLURAL:$1| ចំណងជើង១បានត្រូវ|$1 ចំណងជើងបានត្រូវ}}ដាក់បន្ថែម៖",
        "watchlistedit-raw-removed": "{{PLURAL:$1|១ចំណងជើងបានត្រូវ|$1ចំណងជើងបានត្រូវ}}ដកចេញ៖",
+       "watchlistedit-clear-title": "បានសម្អាតបញ្ចីតាមដាន",
+       "watchlistedit-clear-legend": "សម្អាតបញ្ជីតាមដាន",
        "watchlisttools-view": "មើលបន្លាស់ប្ដូរពាក់ព័ន្ធ",
        "watchlisttools-edit": "មើលនិងកែប្រែបញ្ជីតាមដាន",
        "watchlisttools-raw": "កែប្រែបញ្ជីតាមដានឆៅ",
        "version-hook-name": "ឈ្មោះ​ Hook",
        "version-hook-subscribedby": "បានជាវ ជាប្រចាំ ដោយ",
        "version-version": "(កំណែ $1)",
+       "version-no-ext-name": "[គ្មានឈ្មោះ]",
        "version-license": "អាជ្ញាបណ្ណ​មេឌាវិគី",
        "version-ext-license": "អាជ្ញាបណ្ណ",
+       "version-skin-colheader-name": "សំបក",
        "version-ext-colheader-version": "កំណែ",
        "version-ext-colheader-license": "អាជ្ញាបណ្ណ",
        "version-ext-colheader-description": "ការពិពណ៌នា",
        "fileduplicatesearch-result-n": "មាន {{PLURAL:$2|1 ឯកសារដូចគ្នាបេះបិទ|$2 ឯកសារដូចគ្នាបេះបិទ}}ទៅនឹងឯកសារ \"$1\"។",
        "fileduplicatesearch-noresults": "រកមិនឃើញឯកសារដែលមានឈ្មោះ \"$1\" ទេ។",
        "specialpages": "ទំព័រ​ពិសេស​ៗ",
+       "specialpages-note-top": "កំណត់សម្គាល់",
        "specialpages-note": "* ទំព័រពិសេសៗធម្មតា។\n* <span class=\"mw-specialpagerestricted\">ទំព័រពិសេសៗដែលមានការដាក់កំហិត។</span>",
        "specialpages-group-maintenance": "របាយការណ៍នានាអំពីតំហែទាំ",
        "specialpages-group-other": "ទំព័រពិសេសៗផ្សេងៗទៀត",
        "htmlform-no": "ទេ",
        "htmlform-yes": "ព្រម",
        "htmlform-chosen-placeholder": "ជ្រើសយកជម្រើសមួយ",
+       "htmlform-cloner-create": "បន្ថែមទៀត",
+       "htmlform-cloner-delete": "ដកចេញ",
        "logentry-delete-delete": "$1 {{GENDER:$2|បានលុប}} ទំព័រ $3 ចោល",
        "logentry-delete-restore": "$1 {{GENDER:$2|បានស្ដារ}} ទំព័រ $3 ឡើងវិញ",
        "revdelete-content-hid": "ខ្លឹមសារត្រូវបានលាក់",
index 330bd8c..60eeb0b 100644 (file)
@@ -40,7 +40,8 @@
                        "Keysuck",
                        "Infinity",
                        "Bluemersen",
-                       "Revi"
+                       "Revi",
+                       "Namoroka"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "viewsourcetext": "문서의 원본을 보거나 복사할 수 있습니다:",
        "viewyourtext": "이 문서에 남긴 '''내 편집''' 내용을 보거나 복사할 수 있습니다:",
        "protectedinterface": "이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
-       "editinginterface": "'''경고''': 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
+       "editinginterface": "<strong>경고</strong>: 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/ translatewiki.net]에 참여하시기 바랍니다.",
        "cascadeprotected": "이 문서는 다음 \"연쇄적\" 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다:\n$2",
        "namespaceprotected": "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
        "customcssprotected": "여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 CSS 문서를 편집할 수 없습니다.",
        "content-model-text": "일반 텍스트",
        "content-model-javascript": "자바스크립트",
        "content-model-css": "CSS",
+       "duplicate-args-category": "중복된 인수를 사용한 틀을 포함한 문서",
        "expensive-parserfunction-warning": "'''경고:''' 이 문서는 너무 많은 파서 함수를 포함하고 있습니다.\n\n$2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개를 쓰고 있습니다}}.",
        "expensive-parserfunction-category": "느린 파서 함수 호출을 너무 많이 하는 문서",
        "post-expand-template-inclusion-warning": "'''경고:''' 틀 포함 크기가 너무 큽니다.\n일부 틀은 포함되지 않을 수 있습니다.",
        "parser-template-loop-warning": "재귀적인 틀이 발견되었습니다: [[$1]]",
        "parser-template-recursion-depth-warning": "틀 반복 깊이 제한을 초과함 ($1)",
        "language-converter-depth-warning": "언어 변환기 실행 제한 초과($1)",
-       "node-count-exceeded-category": "문ì\84\9cê°\80 ë\85¸ë\93\9c í\9a\9fì\88\98를 ì´\88ê³¼í\95\98ì\98\80ì\8aµë\8b\88ë\8b¤.",
+       "node-count-exceeded-category": "ë\85¸ë\93\9c í\9a\9fì\88\98를 ì´\88ê³¼í\95\9c ë¬¸ì\84\9c",
        "node-count-exceeded-category-desc": "문서가 최대 노드 수를 초과합니다.",
        "node-count-exceeded-warning": "문서가 노드 수를 초과하였습니다.",
-       "expansion-depth-exceeded-category": "문서가 확장 깊이를 초과하였습니다.",
+       "expansion-depth-exceeded-category": "확장 깊이를 초과한 문서",
        "expansion-depth-exceeded-category-desc": "최대 확장 깊이를 초과하는 문서입니다.",
        "expansion-depth-exceeded-warning": "문서가 확장 깊이를 초과하였습니다",
        "parser-unstrip-loop-warning": "Unstrip의 반복을 감지했습니다",
        "mediastatistics-table-totalbytes": "압축된 크기",
        "mediastatistics-header-unknown": "알 수 없음",
        "mediastatistics-header-bitmap": "비트맵 그림",
-       "mediastatistics-header-drawing": "드로잉 (벡터 그램)",
+       "mediastatistics-header-drawing": "드로잉 (벡터 이미지)",
        "mediastatistics-header-audio": "소리",
        "mediastatistics-header-video": "동영상",
        "mediastatistics-header-multimedia": "리치 미디어",
index 2dcc17b..13a065e 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 Säit|$1 Säiten}} ({{PLURAL:$2|1 Ënnerkategorie|$2 Ënnerkategorien}}, {{PLURAL:$3|1 Fichier|$3 Fichieren}})",
        "search-redirect": "(Viruleedung $1)",
        "search-section": "(Abschnitt $1)",
+       "search-category": "(Kategorie $1)",
        "search-file-match": "(Inhalt vum Fichier passt)",
        "search-suggest": "Mengt Dir: $1",
        "search-interwiki-caption": "Schwësterprojeten",
index 5c82cef..b1a590b 100644 (file)
        "search-result-category-size": "{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 جانیا|$3 جانیایا}}",
        "search-redirect": "(ورگشتن $1)",
        "search-section": "(بشق $1)",
+       "search-category": "(دسه $1)",
        "search-file-match": "(یکی کردن مینونه جانیا)",
        "search-suggest": "منظورت يه بی:$1",
        "search-interwiki-caption": "پروجه یا خوئر",
        "exif-cameraownername": "مالک دیربین",
        "exif-label": "ری دیار",
        "exif-nickname": "نوم نامرتوط سی عسگ",
+       "exif-rating": "امتیاز(د 5)",
        "exif-copyrighted": "حال و بال کپی رایت",
        "exif-copyrightowner": "مالک کپی رایت",
        "exif-usageterms": "کلیمه یا وه کار گرتن",
        "exif-pngfilecomment": "ویر و باور فایل جی پی ان جی",
+       "exif-disclaimer": "کذو نومه",
        "exif-giffilecomment": "ویر و باور فایل جی آی اف",
+       "exif-intellectualgenre": "نوع مورد",
        "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
        "exif-unknowndate": "گات نادیار",
        "exif-orientation-1": "عادی",
        "exif-meteringmode-3": "نقطه جا",
        "exif-meteringmode-4": "چن جاگه ای",
        "exif-meteringmode-5": "الگو",
+       "exif-meteringmode-6": "جزئی",
        "exif-meteringmode-255": "هنی",
        "exif-lightsource-0": "نادیار",
        "exif-lightsource-1": "روشنایی روز",
        "exif-gpsdestdistance-k": "کلومتر",
        "exif-gpsdestdistance-m": "مایل",
        "exif-gpsdop-good": "خو ($1)",
+       "exif-gpsdop-fair": "د ری انصاف ($1)",
        "exif-dc-contributor": "هومیارا",
        "exif-dc-publisher": "درتیجن",
        "exif-dc-relation": "وارسگر مرتوط",
        "version-variables": "آلشت ونا",
        "version-antispam": "نهاگرتن هرزنومه",
        "version-other": "هنی",
+       "version-hook-name": "نوم قلاو",
        "version-no-ext-name": "[بی نوم]",
        "version-ext-license": "ليسانس",
        "version-skin-colheader-name": "پوسه",
        "version-ext-colheader-license": "ليسانس",
        "version-ext-colheader-description": "شرح",
        "version-ext-colheader-credits": "نیسنه یا",
+       "version-license-title": "لیسانس سی $1",
        "version-poweredby-others": "دیه رون",
        "version-software-product": "نتجه",
        "version-software-version": "نسقه",
        "htmlform-selectorother-other": "هنی",
        "htmlform-no": "نه",
        "htmlform-yes": "هری",
+       "htmlform-chosen-placeholder": "یه گل گزینه انتخاو بکیت",
        "htmlform-cloner-create": "هنی اضاف بکیت",
        "htmlform-cloner-delete": "ؤرداشتن",
        "revdelete-content-hid": "مینونه قام بیه",
index fc46017..589613f 100644 (file)
        "recentchanges": "近易",
        "recentchanges-legend": "近易項",
        "recentchanges-summary": "共筆揮新,悉列於此。",
+       "recentchanges-noresult": "無易。",
        "recentchanges-feed-description": "跟wiki源之近易。",
        "recentchanges-label-newpage": "此纂開新頁",
        "recentchanges-label-minor": "此乃細纂",
        "wlheader-enotif": "*准報信。",
        "wlheader-showupdated": "*易者'''粗體'''。",
        "wlnote": "近<b>$2</b>時有$1者易。",
-       "wlshowlast": "見近$1時、$2天、時易",
+       "wlshowlast": "見近$1時、$2天易",
        "watchlist-options": "哨項",
        "watching": "出陣…",
        "unwatching": "收兵…",
        "allmessages-prefix": "以前綴濾:",
        "allmessages-language": "言:",
        "allmessages-filter-submit": "始",
+       "allmessages-filter-translate": "譯",
        "thumbnail-more": "展",
        "filemissing": "喪檔",
        "thumbnail_error": "縮圖$1有誤",
        "intentionallyblankpage": "此頁為白也,試速之用",
        "external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
        "tag-filter": "[[Special:Tags|標]] 之濾:",
+       "tags-title": "標",
        "tags-tag": "標名",
+       "tags-active-yes": "是",
+       "tags-active-no": "否",
        "tags-edit": "纂",
        "comparepages": "較頁",
        "compare-page1": "頁一",
        "rightsnone": "(凡)",
        "revdelete-summary": "摘",
        "searchsuggest-search": "尋",
+       "pagelang-language": "語",
        "mediastatistics-header-unknown": "未知",
        "mediastatistics-header-video": "映像",
        "json-error-syntax": "語法有誤"
index c27d045..3f38f59 100644 (file)
        "searchprofile-everything-tooltip": "Чыла лаштык-влакыште кычалаш (каҥашымаш лаштык-влакыштат)",
        "searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
        "search-result-size": "$1 ({{PLURAL:$2|1=$2 мут|$2 мут}})",
-       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождений|вхождения}} ($2 {{PLURAL:$2|подкатегория|подкатегорий|подкатегории}}, $3 {{PLURAL:$3|файл|файлов|файла}}).",
+       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}}).",
        "search-redirect": "($1 вес вере колтымаш)",
        "search-section": "(ужаш $1)",
        "search-suggest": "Але те $1 возынеда ыле",
index 7173550..a931417 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 член|$1 члена}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})",
        "search-redirect": "(пренасочување $1)",
        "search-section": "(пасус $1)",
+       "search-category": "(категорија $1)",
        "search-file-match": "(се совпаѓа со содржината на податотеката)",
        "search-suggest": "Дали мислевте на: $1",
        "search-interwiki-caption": "Збратимени проекти",
        "api-error-stashfailed": "Внатрешна грешка: Опслужувачот не успеа да ја складира привремената податотека.",
        "api-error-publishfailed": "Внатрешна грешка: Опслужувачот не успеа да ја објави привремената податотека.",
        "api-error-stasherror": "Се јави грешка при подигањето на податотеката во складот.",
+       "api-error-stashedfilenotfound": "Не ја најдов наплстената податотека при обидот да ја подигнам од пластот.",
+       "api-error-stashpathinvalid": "Патеката кајшто требаше да се најде складираната податотека е неважечка.",
+       "api-error-stashfilestorage": "Се јави грешка при ставањето на податотеката во складот.",
+       "api-error-stashzerolength": "Опслужувачот не можеше да ја складира податотеката бидејќи има нулта должина.",
+       "api-error-stashnotloggedin": "Мора да се најавени за да зачувувате податотеки во складот на подигнати.",
+       "api-error-stashwrongowner": "Податотеката во складот до која сакате да дојдете не ви припаѓа вам.",
+       "api-error-stashnosuchfilekey": "Клучот на податотеката во складот до кој сакате да дојдете не постои.",
        "api-error-timeout": "Опслужувачот не одговори во очекуваното време.",
        "api-error-unclassified": "Се појави непозната грешка.",
        "api-error-unknown-code": "Непозната грешка: „$1“",
index 2bd618b..f3cea21 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|ഒരു അംഗം|$1 അംഗങ്ങൾ}} ({{PLURAL:$2|ഒരു ഉപവർഗ്ഗം|$2 ഉപവർഗ്ഗങ്ങൾ}}, {{PLURAL:$3|ഒരു പ്രമാണം|$3 പ്രമാണങ്ങൾ}})",
        "search-redirect": "(തിരിച്ചുവിടൽ താൾ $1)",
        "search-section": "(വിഭാഗം $1)",
+       "search-category": "(വർഗ്ഗം $1)",
        "search-file-match": "(പ്രമാണ ഉള്ളടക്കവുമായി ഒത്തുപോകുന്നുണ്ട്)",
        "search-suggest": "താങ്കൾ ഉദ്ദേശിച്ചത് $1 എന്നാണോ",
        "search-interwiki-caption": "സഹോദര സംരംഭങ്ങൾ",
        "import-error-interwiki": "ബാഹ്യ കണ്ണിചേർക്കലിനു (അന്തർവിക്കി) കരുതിവെച്ചിരിക്കുന്ന പേര് ആയതിനാൽ, \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
        "import-error-special": "താളുകൾ അനുവദിക്കാത്ത പ്രത്യേക നാമമേഖലയിൽ പെടുന്നതായതിനാൽ \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
        "import-error-invalid": "ഇറക്കുമതി ചെയ്യപ്പെട്ടാൽ പേര് ഈ വിക്കിയിൽ അസാധുവാകുമെന്നതിനാൽ \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
+       "import-error-bad-location": "ഉള്ളടക്ക മാതൃക $3 ഉപയോഗിക്കുന്ന $2 നാൾപ്പതിപ്പ്, ഈ വിക്കിയിലെ \"$1\" എന്ന താളിൽ ആ മാതൃക പിന്തുണയ്ക്കുന്നില്ലാത്തതിനാൽ ഉപയോഗിക്കാനാവില്ല.",
        "import-options-wrong": "തെറ്റായ {{PLURAL:$2|ഐച്ഛികം|ഐച്ഛികങ്ങൾ}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "നൽകിയ മൂലതാൾ അസാധുവാണ്.",
        "import-rootpage-nosubpage": "മൂലതാളിന്റെ നാമമേഖലയായ \"$1\" ഉപതാളുകൾ അനുവദിക്കുന്നില്ല.",
index 9f06965..e3282c9 100644 (file)
        "viewsourcetext": "Anda boleh melihat dan menyalin sumber bagi laman ini:",
        "viewyourtext": "Anda boleh melihat dan menyalin sumber '''suntingan anda''' kepada laman ini:",
        "protectedinterface": "Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.\nUntuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
-       "editinginterface": "'''Amaran:''' Anda sedang menyunting laman yang digunakan untuk menghasilkan teks antara muka bagi perisian ini. Sebarang perubahan terhadap laman ini akan menjejaskan rupa antara muka bagi pengguna-pengguna lain di wiki ini.\nUntuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Amaran:</strong> Anda sedang menyunting halaman yang digunakan untuk menyediakan teks antaramuka untuk perisian berkenaan.\nSebarang suntingan ke atas halaman ini akan memberikan kesan kepada penampilan antaramuka pengguna bagi pengguna-pengguna lain wiki ini.",
+       "translateinterface": "Untuk menambah atau menyunting terjemahan untuk kesemua wiki, sila gunakan [//translatewiki.net/ translatewiki.net], iaitu projek penyetempatan MediaWiki.",
        "cascadeprotected": "Laman ini telah dilindungi daripada penyuntingan oleh pengguna selain penyelia, kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi dengan secara \"melata\": $2",
        "namespaceprotected": "Anda tidak mempunyai keizinan untuk menyunting laman dalam ruang nama '''$1'''.",
        "customcssprotected": "Anda tidak dibenarkan menyunting laman JavaScript ini kerana ia mengandungi tetapan peribadi pengguna lain.",
        "search-result-category-size": "$1 {{PLURAL:$1|ahli|ahli}} ($2 {{PLURAL:$2|subkategori|subkategori}}, $3 {{PLURAL:$3|fail|fail}})",
        "search-redirect": "(pelencongan $1)",
        "search-section": "(bahagian $1)",
+       "search-category": "(kategori $1)",
        "search-file-match": "(sepadan dengan kandungan fail)",
        "search-suggest": "Maksud anda, $1?",
        "search-interwiki-caption": "Projek-projek lain",
        "unknown_extension_tag": "Tag penyambung \"$1\" tidak dikenali",
        "duplicate-defaultsort": "'''Amaran''': Kunci susunan asali \"$2\" membatalkan kunci susunan asali \"$1\" yang sebelumnya.",
        "duplicate-displaytitle": "<strong>Amaran:</strong> Tajuk paparan \"$2\" mengatasi tajuk paparan awal \"$1\".",
+       "invalid-indicator-name": "<strong>Ramat:</strong> Atribut <code>name</code> penanda status halaman tidak boleh dibiarkan kosong.",
        "version": "Versi",
        "version-extensions": "Penyambung yang dipasang",
        "version-skins": "Rupa-rupa yang telah dipasangkan",
        "revdelete-uname-unhid": "nama pengguna terdedah",
        "revdelete-restricted": "mengenakan sekatan pada penyelia",
        "revdelete-unrestricted": "menarik sekatan daripada penyelia",
+       "logentry-merge-merge": "$1 telah {{GENDER:$2|menggabungkan}} $3 ke dalam $4 (pindaan sehingga $5)",
        "logentry-move-move": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4",
        "logentry-move-move-noredirect": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 tanpa meninggalkan lencongan",
        "logentry-move-move_redir": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 melalui lencongan",
        "json-error-state-mismatch": "JSON tidak sah atau cacat",
        "json-error-ctrl-char": "Ralat aksara kawalan, mungkin salah dikodkan",
        "json-error-syntax": "Ralat sintaks",
-       "json-error-utf8": "Aksara UTF-8 cacat, mungkin salah dikodkan"
+       "json-error-utf8": "Aksara UTF-8 cacat, mungkin salah dikodkan",
+       "json-error-recursion": "Sekurang-kurangnya satu rujukan rekursif untuk dikodkan di dalam nilai berkenaan",
+       "json-error-inf-or-nan": "Sekurang-kurangnya satu nilai NAN atau INF untuk dikodkan di dalam nilai berkenaan",
+       "json-error-unsupported-type": "Diberikannya nilai jenis yang tidak boleh dikodkan"
 }
index b338f83..d5ea8f7 100644 (file)
        "otherlanguages": "Kî-thaⁿ ê gí-giân",
        "redirectedfrom": "(Tùi $1 choán--lâi)",
        "redirectpagesub": "Choán-ia̍h",
+       "redirectto": "跳去:",
        "lastmodifiedat": "Chit ia̍h tī $1,  $2 ū kái--koè",
        "viewcount": "Chit ia̍h kàu taⁿ, hō͘ lâng khoàⁿ $1 pái.",
        "protectedpage": "Siū pó-hō͘ ê ia̍h",
        "hidetoc": "siu",
        "collapsible-collapse": "Siu",
        "collapsible-expand": "Khui",
+       "confirmable-confirm": "{{GENDER:$1|你}}敢確定唅?",
+       "confirmable-yes": "著啦",
+       "confirmable-no": "無啦!毋是!",
        "thisisdeleted": "Khoàⁿ a̍h-sī kiù $1?",
        "viewdeleted": "Beh khoàⁿ $1?",
        "restorelink": "{{PLURAL:$1|chi̍t ê thâi-tiàu ê pian-chi̍p|$1 thâi-tiàu ê pian-chi̍p}}",
        "viewyourtext": "你會使看<strong>你改的</strong>原始碼,並且khop去這頁:",
        "protectedinterface": "Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
        "editinginterface": "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
+       "translateinterface": "欲改抑是加維基的翻譯,請去維基媒體的在地化專案:[//translatewiki.net/ 翻譯維基網]。",
        "cascadeprotected": "Chit-ê ia̍h í-keng hông pó-hō͘ bē kái tit. In-ūi i tī ē-bīn {{PLURAL:$1|ê|ê}} liân-só pó-hō͘ lāi-té:\n$2",
        "namespaceprotected": "Lí bô khoân-lī kái '''$1'''  miâ-khong-kan ê ia̍h",
        "customcssprotected": "你無受權去改這个 CSS頁,因為這个頁有包括別个用者的個人設定。",
        "ns-specialprotected": "特殊頁袂得改。",
        "titleprotected": "這个標題已經予[[User:$1|$1]]保護起來,袂得提來用。\n原因是 \"<em>$2</em>。",
        "filereadonlyerror": "因為檔案庫這馬只會使看,所以袂得改 \"$1\"這个檔案。\n鎖檔案庫的管理員講是因為:\"$3\"。",
+       "invalidtitle-knownnamespace": "佇名空間 \"$2\"佮文字\"$3\"的標題袂使得。",
+       "invalidtitle-unknownnamespace": "名空間編號 $1(毋知名)的\"$2\"文字標題袂使用。",
        "exception-nologin": "Bô teng-ji̍p",
-       "exception-nologin-text": "請先[[Special:Userlogin|登入]]了才有法度看這頁抑對這頁做動作。",
+       "exception-nologin-text": "請先登入,才有法度看這頁抑對這頁做動作。",
        "exception-nologin-text-manual": "請先$1,才有法度看這頁抑對這頁做動作。",
        "virus-badscanner": "設定毋著:你的病毒掃描程式阮毋知:<em>$1</em>",
        "virus-scanfailed": "掃病毒無成功(代碼$1)",
        "createaccountmail": "Iōng chi̍t-ê lîm-sî loān-sò͘ sán-seng ê bi̍t-bé , kià khì goá chí-tēng ê tiān-chú-phoe tē-chí.",
        "createacct-realname": "真正的名",
        "createaccountreason": "Lí-iû:",
+       "createacct-reason": "理由:",
        "createacct-reason-ph": "為啥物你欲開一另外一个口座?",
        "createacct-captcha": "安全檢驗",
        "createacct-imgcaptcha-ph": "共下跤你看著的字拍入來",
        "createaccounterror": "Bô hoat-tō͘ khui kháu-chō: $1",
        "nocookiesnew": "你的用者口座已經開好矣,毋過你猶未登入,{{SITENAME}}有用Cookies做記錄登入的用者,你無允准用Cookies,請先共阻擋提掉,才閣用你的用者名稱佮密碼登入。",
        "nocookieslogin": "{{SITENAME}}有用cookies做記錄用者,毋過你無允準用cookies,等你改做會當了後,才閣試。",
+       "nocookiesfornew": "因為不明的原因,阮無法度建立用者的口座。\n請先確定你的cookie會使用,閣重進入這頁,閣試一擺。",
+       "noname": "你提供的用者名稱袂使用。",
        "loginsuccesstitle": "Teng-ji̍p sêng-kong",
        "loginsuccess": "Lí hiān-chhú-sî í-keng teng-ji̍p {{SITENAME}} chò \"$1\".",
        "nosuchuser": "Chia bô iōng-chiá hō-chò \"$1\".\nIiōng-chiá hō-chò ū hun toā-jī sè-jī.\nChhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī  [[Special:UserLogin/signup|khui sin iōng-chiá ê kháu-chō.]]",
        "nosuchusershort": "Bô \"$1\" chit ê iōng-chiá miâ.\nTùi khoàⁿ-māi,  lí phah--ê.",
        "nouserspecified": "Lí ài chí-tēng chi̍t ê iōng-chiá miâ.",
+       "login-userblocked": "這個用者已經予人封鎖,袂使登入。",
        "wrongpassword": "Lí su-ji̍p ê bi̍t-bé ū têng-tâⁿ. Chhiáⁿ têng chhì.",
        "wrongpasswordempty": "Bi̍t-bé keh-á khang-khang. Chhiáⁿ têng chhì.",
+       "passwordtooshort": "密碼上少愛{{PLURAL:$1|1字|$1字}}",
+       "password-name-match": "你的密碼愛佮你的用者名稱無仝。",
+       "password-login-forbidden": "這个用者名稱佮密碼已經禁止用。",
        "mailmypassword": "Têng siat bi̍t-bé",
        "passwordremindertitle": "{{SITENAME}} the-chheN li e bit-be",
        "noemail": "Kì-lo̍k bô iōng-chiá \"$1\" ê e-mail chū-chí.",
index 9f26158..411d86f 100644 (file)
        "unexpected": "Valore imprevisto: \"$1\"=\"$2\".",
        "formerror": "Sbàglio: nun se può mannà 'o modulo",
        "badarticleerror": "Chest'azione nun se può fà int'a sta paggena.",
-       "cannotdelete": "Nun è possibbele scassà 'a paggena o 'a fiura $1 addamannata. Putria éssere stato già scancellato.",
+       "cannotdelete": "Nun è pussibbele scassà 'a paggena o 'a fiura $1 addamannata. Putria éssere stato già scancellato.",
        "cannotdelete-title": "Nun se può scancellà 'a paggena \"$1\"",
        "delete-hook-aborted": "'O scancellamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.",
        "no-null-revision": "Nun se può crià na nnova revisione nulla p' 'a paggena \"$1\"",
        "revdelete-hide-user": "Nomme o indirizzo IP 'e ll'autore",
        "revdelete-hide-restricted": "Annascunne 'e nfurmaziune 'nnecate pure a l'ammenistrature",
        "revdelete-radio-same": "(nun cagnà)",
-       "revdelete-radio-set": "Nasconde",
+       "revdelete-radio-set": "Annascunnuto",
        "revdelete-radio-unset": "Faje vedé",
        "revdelete-suppress": "Annascunne 'e nfurmaziune pure a l'ammenistrature",
        "revdelete-unsuppress": "Scancella 'e limmete ncopp' 'e verziune arripigliate",
        "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utente}} ({{PLURAL:$2|1 sottocategurìa|$2 sottocategurìe}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sezzione $1)",
+       "search-category": "(categurìa $1)",
        "search-file-match": "(currispunnenza dint' 'e cuntenute d' 'o file)",
        "search-suggest": "Prova chisto: $1",
        "search-interwiki-caption": "Prugiette frate",
        "rcshowhidepatr": "$1 cagnamiente cuntrullate",
        "rcshowhidepatr-show": "Faje vedé",
        "rcshowhidepatr-hide": "Annascunne",
-       "rcshowhidemine": "$1 'e ffatiche mmee",
+       "rcshowhidemine": "$1 'e ffatiche mieie",
        "rcshowhidemine-show": "Faje vedé",
        "rcshowhidemine-hide": "Annascunne",
        "rclinks": "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne<br />$3",
        "protect-expiring-local": "ammatura 'o $1",
        "protect-expiry-indefinite": "indefinite",
        "protect-cascade": "Prutegge paggene appennute dint'a sta paggena (spanne 'a prutezione a tutt' 'e paggene appennute ccà).",
-       "protect-cantedit": "Nun è possibbele cagnà 'e livelle e prutezione 'e sta paggena, pecchè nun tenite deritto o permesse pe' ne fà 'o cagnamiento.",
+       "protect-cantedit": "Nun è pussibbele cagnà 'e livelle e prutezione 'e sta paggena, pecchè nun tenite deritto o permesse pe' ne fà 'o cagnamiento.",
        "protect-othertime": "N'ata durata:",
        "protect-othertime-op": "ati durate",
        "protect-existing-expiry": "'O tiempo d'ammaturamiento esistente: $3, $2",
        "version-poweredby-others": "ati",
        "version-poweredby-translators": "tradutture 'e translatewiki.net",
        "version-credits-summary": "Nuje vulessemo tené a mmente 'e perzune ccà abbascio pe' purtà rispetto a 'e cuntribbute 'e lloro ncopp'a [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nMediaWiki è destribbuita c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICOLARE. Iate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nAvísseve 'a ricevere [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia d' 'a Licienza GNU GPL] cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liggete sta paggena ncopp' 'a l'Internet].",
+       "version-license-info": "MediaWiki è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nMediaWiki è destribbuita c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICOLARE. Iate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nAvísseve 'a ricevere [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia d' 'a Licienza GNU GPL] cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liggite sta paggena ncopp' 'a l'Internet].",
        "version-software": "Software installato",
        "version-software-product": "Prodotto",
        "version-software-version": "Verziona",
        "htmlform-yes": "Sì",
        "htmlform-chosen-placeholder": "Scigliete n'opzione",
        "htmlform-cloner-create": "Azzecca 'e cchiù",
-       "htmlform-cloner-delete": "Rimuove",
+       "htmlform-cloner-delete": "Lèva",
        "htmlform-cloner-required": "Servesse al minimo nu valore.",
        "sqlite-has-fts": "$1 cu supporto 'e ricerche full-text",
        "sqlite-no-fts": "$1 senza supporto 'e ricerche full-text",
        "logentry-newusers-autocreate": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}} automatecamente",
        "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3 'a $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3",
+       "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa}} automatecamente 'a $4 a $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ave carrecato}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|ave carrecato}} na verziona nnova 'e $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|ave carrecato}} $3",
        "rightsnone": "(nisciuno)",
        "revdelete-summary": "cagna 'o riepilego",
        "feedback-bugornote": "Si site pronto/a a descrivere nu probblema tecnico ch' 'e dettaglie, pe' piacere [$1 mannate nu bug].\nSi nun site pronto/a, allora putite ausà 'o modulo semprice ca vedite ccà abbascio. 'O commento vuosto sarrà mpezzato dint' 'a paggena [$3 $2]\", seguenno 'o nomme utente vuosto e 'o navigatóre web ca state ausanno.",
        "api-error-badaccess-groups": "Tun putite carrecà file ncopp' 'a sta wiki.",
        "api-error-badtoken": "Errore interno: 'O token nun è buono.",
        "api-error-copyuploaddisabled": "'A funzione carrcà 'e n'URL nun è appicciata dint'a stu server.",
+       "api-error-duplicate": "Nce {{PLURAL:$1|stà [$2 n'atu file]|stanno [$2 ati file]}} ncopp' 'o sito ch' 'e stisse cuntenute.",
+       "api-error-duplicate-archive": "Nce {{PLURAL:$1|steva [$2 n'atu file]|stevano [$2 ati file]}} già ncopp' 'o sito ch' 'e stisse cuntenute, però {{PLURAL:$1|è stato|so' state}} scancellate.",
+       "api-error-duplicate-archive-popup-title": "File duprecat{{PLURAL:$1|o che è già stato scancellato|e che songo già state scancellati}}",
+       "api-error-duplicate-popup-title": "Dupreche {{PLURAL:$1|file|file}}",
+       "api-error-empty-file": "'O file ch'avite mannato è abbacante.",
+       "api-error-emptypage": "'A criazione 'e paggene nuove abbacante nun è permessa.",
+       "api-error-fetchfileerror": "Errore interno: Coccosa ascette stuorta quanno se steva 'analizzà stu file.",
+       "api-error-fileexists-forbidden": "Nu file c' 'o nomme \"$1\" esiste già, e chisto nun pò essere sovrascritto.",
+       "api-error-fileexists-shared-forbidden": "Nu file c' 'o nomme \"$1\" esiste già dint' 'a l'archivio 'e file, e chisto nun pò essere sovrascritto.",
+       "api-error-file-too-large": "'O file ch'avite mannato è troppo gruosso.",
        "api-error-filename-tooshort": "'O nomme d' 'o file è troppo curto.",
        "api-error-filetype-banned": "Stu tipo 'e file nun è permesso.",
+       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nun è nu tipo 'e file permesso|nun songo tipe 'e file permesse}}. {{PLURAL:$3|'O tipo 'e file permesso è|'E tipe 'e file permesse songo}} $2.",
+       "api-error-filetype-missing": "Stu file nun tene estensione.",
+       "api-error-hookaborted": "'O cagnamiento c'avite pruvato 'e fà è stato spezzato 'a na stensione.",
+       "api-error-http": "Errore interno: Nun putimmo ngarrà a nce cullegà a 'o server.",
+       "api-error-illegal-filename": "'O nomme d' 'o file nun è permesso.",
+       "api-error-internal-error": "Errore interno: Coccosa ascette male pe' tramente ca se steva processanno 'a carreca dint'a stu wiki.",
+       "api-error-invalid-file-key": "Errore interno: 'O file nun se pò truvà dint' 'a memoria temporanea.",
+       "api-error-missingparam": "Errore interno: nun se trovano 'e parametre pe' ne putè fà 'a richiesta.",
+       "api-error-missingresult": "Errore interno: Nun se pò sapè si 'a copia ascette bbona.",
+       "api-error-mustbeloggedin": "Avite 'a trasì ô sito si vulite carrecà file.",
+       "api-error-mustbeposted": "Errore interno: 'A richiesta vole HTTP POST.",
+       "api-error-noimageinfo": "A carreca ngarraje, ma 'o server nun ce ha pututo dà nisciuna nformazione ncopp' 'o file.",
+       "api-error-nomodule": "Errore interno: Nisciuno modulo 'e carreca mpustato.",
+       "api-error-ok-but-empty": "Errore interno: Nisciuna resposta 'a 'o server.",
+       "api-error-overwrite": "Sovrascrivere nu file ch'esiste già nun è permesso.",
+       "api-error-stashfailed": "Errore interno: 'O server nun ngarraje a s'astipà 'o file temporaneo.",
+       "api-error-publishfailed": "Errore interno: 'O server nun ngarraje a pubbrecà 'o file temporaneo.",
+       "api-error-stasherror": "'A carreca d' 'o file 'n stash è asciuta male, ce sta n'errore.",
+       "api-error-stashedfilenotfound": "'O file 'n stash nun è stato truvato pe' tramente ca se faceva 'a prova 'e carreca d' 'o stash.",
+       "api-error-stashpathinvalid": "'O cullegamento a 'o pizzo addò avesse stà 'o file 'e stash nun è bbuono.",
+       "api-error-stashfilestorage": "L'astipamento d' 'o file 'n stash è asciuto male, ce sta n'errore.",
+       "api-error-stashzerolength": "'O server nun può nzertà 'o file dint'a 'o stash, pecché è luongo zero zero.",
+       "api-error-stashnotloggedin": "Avisseve 'a trasì pe' ne putè astipà 'e file din' 'o stash 'e càrreca.",
+       "api-error-stashwrongowner": "'O file addò stavate a trasì dint' 'o stash nun v'appartene.",
+       "api-error-stashnosuchfilekey": "'A chiave d' 'o file addò stavate a trasì dint' 'o stash nun esiste.",
+       "api-error-timeout": "'O server nun rispunnette dint'a 'o tiempo stabbelito.",
+       "api-error-unclassified": "È capitato n'errore scanusciuto.",
+       "api-error-unknown-code": "Errore scanusciuto: \"$1\"",
+       "api-error-unknown-error": "Errore interno: Coccosa jette a fernì malalamente quano facisteve 'a carreca d' 'o file vuosto.",
+       "api-error-unknown-warning": "Avvertimento scanusciute: $1",
+       "api-error-unknownerror": "Errore scanusciuto: \"$1\"",
+       "api-error-uploaddisabled": "'E carreche so' stutate dint'a sta siki.",
+       "api-error-verification-error": "Stu file putesse stà nguacchiato, o tene n'estensione sbagliata.",
        "duration-seconds": "$1 {{PLURAL:$1|secondo|seconde}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minute}}",
        "duration-hours": "$1 {{PLURAL:$1|ora|ore}}",
        "duration-days": "$1 {{PLURAL:$1|juorno|juorne}}",
+       "duration-weeks": "$1 {{PLURAL:$1|semmana|semmane}}",
+       "duration-years": "$1 {{PLURAL:$1|anno|anne}}",
+       "duration-decades": "$1 {{PLURAL:$1|decade|decade}}",
+       "duration-centuries": "$1 {{PLURAL:$1|seculo|secule}}",
+       "duration-millennia": "$1 {{PLURAL:$1|millennio|millennia}}",
+       "rotate-comment": "Immaggine rotata $1 {{PLURAL:$1|grade}} 'n senzo orario",
+       "limitreport-title": "Analizzatore d' 'e date d' 'a profilazione:",
+       "limitreport-cputime": "Tiempo d'uso d' 'o CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|secondo|seconde}}",
+       "limitreport-walltime": "Tiempo riale d'uso",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|secondo|seconde}}",
+       "limitreport-ppvisitednodes": "Nummero e nurece 'e preprucessore visetate",
+       "limitreport-ppgeneratednodes": "Nummero 'e nurece generate d' 'o preprocessore",
+       "limitreport-postexpandincludesize": "Diminziona d'inclusiune Post-Espanzione",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|byte}}",
+       "limitreport-templateargumentsize": "Dimenzione d' 'o parametro d' 'o template",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|byte}}",
+       "limitreport-expansiondepth": "Funno massimo 'e spanzione",
+       "limitreport-expensivefunctioncount": "Funzione analizzatore ca costasse assaje 'e prucessà",
+       "expandtemplates": "Template spannute",
+       "expand_templates_intro": "Sta pàggena speciale piglia cocche testo e spanne tutt' 'e template ca stann'a dinto recurzivamente.<br />\nChista spanne pure le funziune d'analise comme<br />\n<code><nowiki>{{</nowiki>#language:…}}</code>, e variabbele comme <br />\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.<br />\nIn pratica tutte chille ca stessero dint'a le doppie parentesi graffe.<br />",
+       "expand_templates_title": "Titole contestuale pe' {{FULLPAGENAME}}, ecc.:",
+       "expand_templates_input": "Testo d'input:",
+       "expand_templates_output": "Risultato",
+       "expand_templates_xml_output": "Output XML",
+       "expand_templates_html_output": "Risultato HTML cruro",
        "expand_templates_ok": "OK",
+       "expand_templates_remove_comments": "Lèva 'e commente",
+       "expand_templates_remove_nowiki": "Lèva 'e tag <nowiki> 'a int' 'e resultate",
+       "expand_templates_generate_xml": "Fà vedè l'arvero 'e l'analisi XML",
+       "expand_templates_generate_rawhtml": "Fà verè 'o codece HTML 'n cruro",
        "expand_templates_preview": "Anteprimma",
+       "pagelanguage": "Scigliete 'a lengua d' 'a paggena pe' bbìa e stu strumiento",
        "pagelang-name": "Paggena",
        "pagelang-language": "Lengua",
+       "pagelang-use-default": "Aùsa 'a lengua predefinita",
        "pagelang-select-lang": "Selezziona lengua",
+       "right-pagelang": "Cagnate 'a lengua d' 'a paggena",
+       "action-pagelang": "càgna 'a lengua d' 'a paggena",
+       "log-name-pagelang": "Càgna 'o riggistro 'e llengue",
+       "log-description-pagelang": "Chest'è nu riggistro 'e cagnamiente 'e lengua d' 'e paggene.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ave cagnato}} 'a lengua d' 'a paggena $3 'a $4 a $5.",
+       "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wii vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse 'e skin ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera 'e ll'abbià o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copiare 'e linee ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià tutt' 'e skin installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
+       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
+       "mediastatistics": "Statistiche d' 'e media",
+       "mediastatistics-summary": "Statistiche ncopp' 'e tipe d' 'e file carrecate. Ce truvate azzeccata sulamente 'a verziona cchiù recente d' 'o file. Verziune viecchie o scancellate se so' luvate.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipo 'e MIME",
+       "mediastatistics-table-extensions": "Estenziune pussibbele",
+       "mediastatistics-table-count": "Nummero 'e file",
+       "mediastatistics-table-totalbytes": "Dimenziona cumbinata",
        "mediastatistics-header-unknown": "Scanusciuto",
+       "mediastatistics-header-bitmap": "Immaggene bitmap",
+       "mediastatistics-header-drawing": "Disegne (immaggene vetturiale)",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Cuntenute ricche multimediale",
        "mediastatistics-header-office": "Ufficio",
        "mediastatistics-header-text": "Testuale",
+       "mediastatistics-header-executable": "File eseguetàbbele",
+       "mediastatistics-header-archive": "Furmate compresse",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgola finale è stata luvata|virgule finale so' state luvate}} 'a 'o JSON",
        "json-error-unknown": "Ce sta nu probblema c' 'o JSON. Errore: $1",
+       "json-error-depth": "'O funno massimo 'e stack è stato appassàto",
        "json-error-state-mismatch": "Valore malamente furmato o nun buono p' 'o JSON",
+       "json-error-ctrl-char": "Errore dint' 'o carattere 'e cuntrollo, può darse ca s'avesse codefecato male",
        "json-error-syntax": "Errore 'e sintasse",
        "json-error-utf8": "'E carattere UTF-8 furmate malamente, probbabilmente nun se songhe ncodifecate bbuone",
+       "json-error-recursion": "Uno o cchiù riferimente recurzive dint' 'o valore a codefecare",
+       "json-error-inf-or-nan": "Uno o cchiù valure NAN o INF dint' 'o valore 'a codefecare",
        "json-error-unsupported-type": "S'è dato nu valore pe' nu tipo ca nun se può ncodifecà"
 }
index b769f16..ad62999 100644 (file)
        "viewsourcetext": "U kunt de brontekst van deze pagina bekijken en kopiëren:",
        "viewyourtext": "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
        "protectedinterface": "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen voor alle wiki's toe te voegen of te wijzigen.",
-       "editinginterface": "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+       "editinginterface": "<strong>Waarschuwing:</strong> u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+       "translateinterface": "Om vertalingen voor alle wiki's toe te voegen of te wijzigen kunt u gebruik maken van [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
        "cascadeprotected": "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:\n$2",
        "namespaceprotected": "U hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
        "customcssprotected": "U kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
        "logouttext": "'''U bent nu afgemeld.'''\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
        "welcomeuser": "Welkom, $1!",
-       "welcomecreation-msg": "Uw account is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
+       "welcomecreation-msg": "Uw gebruiker is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
        "yourname": "Gebruikersnaam:",
        "userlogin-yourname": "Gebruikersnaam",
        "userlogin-yourname-ph": "Geef uw gebruikersnaam op",
        "userlogin-signwithsecure": "Beveiligde verbinding gebruiken",
        "yourdomainname": "Uw domein:",
        "password-change-forbidden": "U kunt uw wachtwoord niet wijzigen in deze wiki.",
-       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe account bij te werken.",
+       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe gebruiker bij te werken.",
        "login": "Aanmelden",
        "nav-login-createaccount": "Aanmelden / registreren",
        "userlogin": "Aanmelden / registreren",
        "logout": "Afmelden",
        "userlogout": "Afmelden",
        "notloggedin": "Niet aangemeld",
-       "userlogin-noaccount": "Hebt u geen account?",
+       "userlogin-noaccount": "Hebt u geen gebruiker?",
        "userlogin-joinproject": "Word lid van {{SITENAME}}",
-       "nologin": "Hebt u geen account? $1.",
+       "nologin": "Hebt u geen gebruiker? $1.",
        "nologinlink": "Registreren",
        "createaccount": "Registreren",
-       "gotaccount": "Hebt u al een account? $1.",
+       "gotaccount": "Hebt u al een gebruiker? $1.",
        "gotaccountlink": "Aanmelden",
        "userlogin-resetlink": "Bent u uw aanmeldgegevens vergeten?",
        "userlogin-resetpassword-link": "Wachtwoord vergeten?",
        "userlogin-helplink2": "Hulp bij aanmelden",
        "userlogin-loggedin": "U bent al aangemeld als {{GENDER:$1|$1}}.\nGebruik het onderstaande formulier om aan te melden als een andere gebruiker.",
-       "userlogin-createanother": "Een andere account aanmaken",
+       "userlogin-createanother": "Een andere gebruiker aanmaken",
        "createacct-emailrequired": "E-mailadres",
        "createacct-emailoptional": "E-mailadres (optioneel)",
        "createacct-email-ph": "Geef uw e-mailadres op",
        "noname": "U hebt geen geldige gebruikersnaam opgegeven.",
        "loginsuccesstitle": "Aanmelden geslaagd",
        "loginsuccess": "'''U bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
-       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw account aan]].",
+       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw gebruiker aan]].",
        "nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
        "nouserspecified": "Geef een gebruikersnaam op.",
        "login-userblocked": "Deze gebruiker is geblokkeerd.\nAanmelden is niet mogelijk.",
        "invalidemailaddress": "Het e-mailadres is niet aanvaard, omdat het een ongeldige opmaak heeft.\nGeef een geldig e-mailadres op of laat het veld leeg.",
        "cannotchangeemail": "Het e-mailadres voor een gebruiker kan op deze wiki niet gewijzigd worden.",
        "emaildisabled": "Deze site kan geen e-mails verzenden.",
-       "accountcreated": "Account aangemaakt",
+       "accountcreated": "Gebruiker aangemaakt",
        "accountcreatedtext": "Het gebruikersaccount voor [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
        "createaccount-title": "Gebruikers registreren voor {{SITENAME}}",
        "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en uw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld u aan en wijzig uw wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder uw medeweten is aangemaakt.",
        "login-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.",
        "login-abort-generic": "U bent niet aangemeld. De procedure is afgebroken.",
-       "login-migrated-generic": "Uw account is verplaatst, en uw gebruikersnaam bestaat niet langer op deze wiki.",
+       "login-migrated-generic": "Uw gebruikersnaam is hernoemd, en uw gebruikersnaam bestaat niet langer op deze wiki.",
        "loginlanguagelabel": "Taal: $1",
        "suspicious-userlogout": "Uw verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.",
        "createacct-another-realname-tip": "Echte naam is optioneel.\nAls u deze opgeeft, wordt deze naam gebruikt worden om u erkenning te geven voor uw werk.",
        "showpreview": "Bewerking ter controle bekijken",
        "showdiff": "Wijzigingen bekijken",
        "blankarticle": "<strong>Waarschuwing:</strong> de pagina die u wilt aanmaken is leeg.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt de pagina aangemaakt zonder enige inhoud.",
-       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 inlogt]</strong> of <strong>[$2 een account maakt]</strong zullen uw bewerkingen verschijnen onder u gebruikersnaam, met ook andere voordelen.",
+       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
        "anonpreviewwarning": "''U bent niet aangemeld.''\n''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''",
        "missingsummary": "'''Let op:''' u hebt geen bewerkingssamenvatting opgegeven.\nAls u nogmaals op \"{{int:savearticle}}\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
        "missingcommenttext": "Plaats uw reactie hieronder.",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "duplicate-args-category": "Pagina's met dubbele sjabloonparameters",
+       "duplicate-args-category-desc": "De pagina bevat aanroepen van sjablonen waarin hetzelfde argument meerdere keren wordt gebruikt, bijvoorbeeld <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> of <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Waarschuwing:''' deze pagina gebruikt te veel kostbare parserfuncties.\n\nNu {{PLURAL:$1|is|zijn}} het er $1, terwijl het er minder dan $2 {{PLURAL:$2|moet|moeten}} zijn.",
        "expensive-parserfunction-category": "Pagina's die te veel kostbare parserfuncties gebruiken",
        "post-expand-template-inclusion-warning": "Waarschuwing: de maximale transclusiegrootte voor sjablonen is overschreden.\nSommige sjablonen worden niet getranscludeerd.",
        "search-result-category-size": "{{PLURAL:$1|1 categorielid|$1 categorieleden}} ({{PLURAL:$2|1 ondercategorie|$2 ondercategorieën}}, {{PLURAL:$3|1 bestand|$3 bestanden}})",
        "search-redirect": "(doorverwijzing $1)",
        "search-section": "(subkop $1)",
+       "search-category": "(categorie $1)",
        "search-file-match": "(komt overeen met de inhoud van het bestand)",
        "search-suggest": "Bedoelde u: $1",
        "search-interwiki-caption": "Zusterprojecten",
        "prefs-diffs": "Verschillen",
        "prefs-help-prefershttps": "Deze voorkeur wordt toegepast bij de volgende keer aanmelden.",
        "prefswarning-warning": "U heeft deze wijzigingen gemaakt in uw voorkeuren die nog niet opgeslagen zijn. Wanneer u de pagina verlaat zonder op \"$1\" te klikken zullen uw voorkeuren niet geüpdated worden.",
-       "prefs-tabs-navigation-hint": "Tip: U kunt de pijltjestoetsen naar links en naar rechts gebruiken om te navigeren tussen de tabbladen in de lijst.",
+       "prefs-tabs-navigation-hint": "Tip: u kunt de pijltjestoetsen naar links en naar rechts gebruiken om te navigeren tussen de tabbladen in de lijst.",
        "email-address-validity-valid": "Het e-mailadres lijkt geldig",
        "email-address-validity-invalid": "Geef een geldig e-mailadres op",
        "userrights": "Gebruikersrechtenbeheer",
        "suppress": "Toezicht",
        "querypage-disabled": "Deze speciale pagina is uitgeschakeld om performanceredenen.",
        "apihelp": "API-hulp",
+       "apihelp-no-such-module": "Module \"$1\" niet gevonden.",
        "booksources": "Boekinformatie",
        "booksources-search-legend": "Bronnen en gegevens over een boek zoeken",
        "booksources-search": "Zoeken",
        "protect-othertime": "Andere duur:",
        "protect-othertime-op": "andere duur",
        "protect-existing-expiry": "Bestaande vervaldatum: $2 om $3",
+       "protect-existing-expiry-infinity": "Bestaande vervaldatum: oneindig",
        "protect-otherreason": "Overige/additionele reden:",
        "protect-otherreason-op": "andere reden",
        "protect-dropdown": "*Veel voorkomende redenen voor beveiliging\n** Vandalisme\n** Spam\n** Bewerkingsoorlog\n** Preventieve beveiliging veelbezochte pagina",
        "tooltip-pt-mycontris": "Overzicht van uw bijdragen",
        "tooltip-pt-login": "U wordt van harte uitgenodigd om u aan te melden als gebruiker, maar dit is niet verplicht",
        "tooltip-pt-logout": "Afmelden",
+       "tooltip-pt-createaccount": "Registreer u vooral en meld u aan. Dit is echter niet vereist.",
        "tooltip-ca-talk": "Overleg over deze pagina",
        "tooltip-ca-edit": "U kunt deze pagina bewerken. Gebruik de knop \"Bewerking ter controle bekijken\" voordat u de pagina opslaat",
        "tooltip-ca-addsection": "Nieuw kopje toevoegen",
        "unknown_extension_tag": "Onbekende tag \"$1\"",
        "duplicate-defaultsort": "'''Waarschuwing:''' de standaardsortering \"$2\" krijgt voorrang voor de sortering \"$1\".",
        "duplicate-displaytitle": "<strong>Waarschuwing:</strong>Titelweergave \"$2\" overschrijft eerdere titelweergave \"$1\".",
+       "invalid-indicator-name": "<strong>Fout:</strong> de eigenschap <code>name</code> van de paginastatusindicators mag niet leeg zijn.",
        "version": "Versie",
        "version-extensions": "Geïnstalleerde uitbreidingen",
        "version-skins": "Geïnstalleerde vormgevingen",
        "revdelete-uname-unhid": "gebruikersnaam zichtbaar gemaakt",
        "revdelete-restricted": "heeft beperkingen aan beheerders opgelegd",
        "revdelete-unrestricted": "heeft beperkingen voor beheerders opgeheven",
+       "logentry-merge-merge": "$1 {{GENDER:$2|heeft}} $3 samengevoegd naar $4 (versies tot en met $5)",
        "logentry-move-move": "$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|heeft}} de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten",
        "logentry-move-move_redir": "$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4 over een doorverwijzing",
        "log-name-pagelang": "Logboek van taalwijzigingen",
        "log-description-pagelang": "Dit is een logboek van wijzigingen van de taal van pagina's.",
        "logentry-pagelang-pagelang": "$1 wijzigde de taal van de pagina '$3' van $4 naar $5.",
+       "default-skin-not-found": "Het standaard uiterlijk voor de wiki, dat is ingesteld in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is niet beschikbaar.\n\nUw installatie heeft de volgende uiterlijken. Zie See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handboek: uiterlijk instellen] voor meer informatie over hoe u het uiterlijk instelt en een standaard uiterlijk aangeeft.\n\n$2\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Een van de repositories <code>mediawiki/skins/*</code> te klonen via git in de map <code dir=\"ltr\">skins/</code> van uw installatie van MediaWiki.\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository.\n\n; Als u MediaWiki net hebt bijgewerkt:\n: In MediaWiki 1.24 en nieuwere versies worden geïnstalleerde uiterlijken niet langer automatisch ingeschakeld (zie [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handboek: uiterlijken automatisch vinden]). U kunt de volgende regels kopieren naar <code>LocalSettings.php</code> om alle op dit moment geïnstalleerde uiterlijken in te schakelen:\n\n<pre dir=\"ltr\">$3</pre>\n\n; In het geval u zojuist <code>LocalSettings.php</code> hebt aangepast:\n: Controleer de namen van de uiterlijken op spelfouten.",
+       "default-skin-not-found-no-skins": "Het standaard uiterlijk voor uw wiki, als aangegeven in <code>$wgDefaultSkin</code> als <code>$1</code>, is niet beschikbaar.\n\nU hebt geen geïnstalleerde uiterlijken.\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Een van de repositories <code>mediawiki/skins/*</code> te klonen via git in de map <code dir=\"ltr\">skins/</code> van uw installatie van MediaWiki.\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ingeschakeld)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>uitgeschakeld</strong>)",
        "mediastatistics": "Mediastatistieken",
        "mediastatistics-header-drawing": "Tekeningen (vectorbestanden)",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Video's",
+       "mediastatistics-header-multimedia": "Interactieve media",
        "mediastatistics-header-office": "Kantoorbestanden",
        "mediastatistics-header-text": "Tekstbestanden",
        "mediastatistics-header-executable": "Uitvoerbare bestanden",
        "mediastatistics-header-archive": "Gecomprimeerde bestanden",
+       "json-warn-trailing-comma": "Er {{PLURAL:$1|is $1 komma|zijn $1 komma's}} aan het einde van de regel verwijderd uit de JSON",
        "json-error-unknown": "Er is een fout opgetreden met de JSON. Foutmelding: $1",
-       "json-error-syntax": "Syntaxfoutmelding"
+       "json-error-depth": "De maximale stackdiepte is overschreden",
+       "json-error-state-mismatch": "Ongeldige of onjuiste JSON",
+       "json-error-ctrl-char": "Fout in controlekarakter, mogelijk verkeerd gecodeerd",
+       "json-error-syntax": "Syntaxfoutmelding",
+       "json-error-utf8": "Ongeldige UTF-8-tekens, mogelijk verkeerd gecodeerd",
+       "json-error-recursion": "Een of meer recursieve verwijzingen in de waarde die moet worden gecodeerd",
+       "json-error-inf-or-nan": "Een of meer NAN- of INF-waarden in de waarde die moet worden gecodeerd",
+       "json-error-unsupported-type": "Er is een waarde opgegeven van een type dat niet kan worden gecodeerd"
 }
index 12c7c37..c96e2e7 100644 (file)
@@ -6,7 +6,8 @@
                        "Katimawan2005",
                        "Urhixidur",
                        "Val2397",
-                       "아라"
+                       "아라",
+                       "Leeheonjin"
                ]
        },
        "tog-underline": "Gulisan lang panglalam deng suglung:",
        "search-result-size": "$1 ({{PLURAL:$2|1 a kataya|$2 kataya}})",
        "search-redirect": "(pamanalis direksiun $1)",
        "search-section": "(seksion $1)",
+       "search-category": "(kategorya $1)",
        "search-suggest": "Ing buri mung sabian: $1",
        "search-interwiki-caption": "Kapatad a proyektu",
        "search-interwiki-default": "$1 linual/resulta:",
index 599baf3..220b395 100644 (file)
        "no-null-revision": "Nie można utworzyć zerowej wersji strony \"$1\"",
        "badtitle": "Niepoprawny tytuł",
        "badtitletext": "Podano niepoprawny tytuł strony. Prawdopodobnie jest pusty lub zawiera znaki, których użycie jest zabronione.",
-       "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. Maksymalnie {{PLURAL:$1|jeden wynik jest|$1 wyniki są|$1 wyników jest}} w pamięci podręcznej.",
-       "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. Maksymalnie {{PLURAL:$4|jeden wynik jest|$4 wyniki są|$4 wyników jest}} w pamięci podręcznej.",
+       "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. W pamięci podręcznej {{PLURAL:$1|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$1|jeden wynik|$1 wyniki|$1 wyników}}.",
+       "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. W pamięci podręcznej {{PLURAL:$4|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$4|jeden wynik|$4 wyniki|$4 wyników}}.",
        "querypage-no-updates": "Uaktualnienia dla tej strony są obecnie wyłączone. Znajdujące się tutaj dane nie zostaną odświeżone.",
        "viewsource": "Tekst źródłowy",
        "viewsource-title": "Tekst źródłowy strony $1",
        "search-result-category-size": "{{PLURAL:$1|1 element|$1 elementy|$1 elementów}} ({{PLURAL:$2|1 kategoria|$2 kategorie|$2 kategorii}}, {{PLURAL:$3|1 plik|$3 pliki|$3 plików}})",
        "search-redirect": "(przekierowanie $1)",
        "search-section": "(sekcja $1)",
+       "search-category": "(kategoria $1)",
        "search-file-match": "(odpowiada zawartości pliku)",
        "search-suggest": "Czy chodziło Ci o: $1",
        "search-interwiki-caption": "Projekty siostrzane",
        "powersearch-remember": "Zapamiętaj wybór dla kolejnych wyszukiwań",
        "search-external": "Wyszukiwanie zewnętrzne",
        "searchdisabled": "Wyszukiwanie w {{GRAMMAR:MS.lp|{{SITENAME}}}} zostało wyłączone.\nW międzyczasie możesz skorzystać z wyszukiwania Google.\nJednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google nieaktualne.",
-       "search-error": "Wystąpił błąd podczas wyszukiwania:$1",
+       "search-error": "Wystąpił błąd podczas wyszukiwania: $1",
        "preferences": "Preferencje",
        "mypreferences": "Preferencje",
        "prefs-edits": "Liczba edycji:",
index 6c3b6e5..0ef1b48 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 mèmber|$1 mèmber}} ({{PLURAL:$2|1 sot-categorìa|$2 sot-categorìe}}, {{PLURAL:$3|1 archivi|$3 archivi}})",
        "search-redirect": "(ridiression $1)",
        "search-section": "(session $1)",
+       "search-category": "(categorìa $1)",
        "search-file-match": "(a corëspond al contnù d'archivi)",
        "search-suggest": "Vorìi-lo pa dì: $1",
        "search-interwiki-caption": "Proget frej",
        "api-error-stashfailed": "Eror antern: ël servent a l'ha pa podù memorisé l'archivi a temp.",
        "api-error-publishfailed": "Eror antern: Ël servent a l'ha pa podù publiché l'archivi provisòri.",
        "api-error-stasherror": "A-i é staje n'eror durant ël cariament dl'archivi da stërmé.",
+       "api-error-stashedfilenotfound": "L'archivi stërmà a l'é nen trovasse durant ël tentativ ëd carielo da sò strem.",
+       "api-error-stashpathinvalid": "Ël përcors anté ch'a l'avrìa dovù trovesse l'archivi stërmà a l'era nen bon.",
+       "api-error-stashfilestorage": "A-ié staje n'eror an rangiand l'archivi an sò strem.",
+       "api-error-stashzerolength": "Ël servent a l'ha nen podù stërmé l'archivi, përchè a l'era ëd taja nula.",
+       "api-error-stashnotloggedin": "A dev esse rintrà ant ël sistema për argistré dj'archivi ant lë strem ëd cariament.",
+       "api-error-stashwrongowner": "L'archivi al qual a sërcava d'acede ant lë strem a l'é nen sò.",
+       "api-error-stashnosuchfilekey": "La ciav dl'archivi al qual a sërcava d'acede ant lë strem a esist pa.",
        "api-error-timeout": "Ël servent a l'ha pa rëspondù ant ël temp ëspetà.",
        "api-error-unclassified": "A l'é capitaje n'eror nen conossù.",
        "api-error-unknown-code": "Eror sconossù: «$1».",
        "log-name-pagelang": "Argistr dij cangiament ëd lenga",
        "log-description-pagelang": "Cost-sì a l'é n'argistr dij cangiament ant le lenghe dle pàgine.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a l'ha cangià}} la lenga dla pàgina $3 da $4 a $5.",
-       "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne col apredefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel Ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modifivà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro."
+       "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne col apredefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel Ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modifivà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
+       "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilità)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilità''')",
+       "mediastatistics": "Statìstiche an sij mojen",
+       "mediastatistics-summary": "Statìstiche an sle sòrt d'archivi carià. A ancludo mach la version pi recent ëd n'archivi. Le version veje o dëscancelà dj'archivi a son escludùe.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 otet}} ($2 ; $3%)",
+       "mediastatistics-table-mimetype": "Sòrt MIME",
+       "mediastatistics-table-extensions": "Estension possìbij",
+       "mediastatistics-table-count": "Nùmer d'archivi",
+       "mediastatistics-table-totalbytes": "Taja combinà",
+       "mediastatistics-header-unknown": "Nen conossù",
+       "mediastatistics-header-bitmap": "Plance bitmap",
+       "mediastatistics-header-drawing": "Dissegn (plance vetoriaj)",
+       "mediastatistics-header-audio": "Sonor",
+       "mediastatistics-header-video": "Filmà",
+       "mediastatistics-header-multimedia": "Mojen rich",
+       "mediastatistics-header-office": "Ufissi",
+       "mediastatistics-header-text": "Testual",
+       "mediastatistics-header-executable": "Eseguìbij",
+       "mediastatistics-header-archive": "Formà compress",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|coma final a l'é stàita|còme finaj a son ëstàite}} gavà dal JSON",
+       "json-error-unknown": "A-i é staje un problema con ël JSON. Eror: $1"
 }
index efb0ca2..4747ded 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})",
        "search-redirect": "(redirecionamento de $1)",
        "search-section": "(seção $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(coincide com o conteúdo do ficheiro)",
        "search-suggest": "Será que quis dizer: $1",
        "search-interwiki-caption": "Projetos irmãos",
        "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-toponly": "Mostrar somente as revisões mais recentes",
+       "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-submit": "Pesquisar",
        "whatlinkshere": "Páginas afluentes",
index ab7e33a..b9d586c 100644 (file)
@@ -75,6 +75,7 @@
                        "MIKHEIL",
                        "Malafaya",
                        "MarkvA",
+                       "marktraceur",
                        "Matma Rex",
                        "MaxSem",
                        "McDutchie",
        "search-result-category-size": "Parameters:\n* $1 - number of members in this category. $1 is equal to $2+$3.\n* $2 - number of subcategories\n* $3 - number of files",
        "search-redirect": "\"Redirect\" is a noun here, not a verb.\n\nParameters:\n* $1 - a link to the redirect to the page (so, $1 is the page that the search result is redirected '''from''')",
        "search-section": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that section is more relevant than the rest of the page. $1 is a section title.\n{{Identical|Section}}",
-       "search-category": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that the page being in a particular category is relevant. $1 is the category's name with any matching portion highlighted.",
+       "search-category": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that the page being in a particular category is relevant.\n\nParameters:\n* $1 - the category's name with any matching portion highlighted\n{{Identical|Category}}",
        "search-file-match": "This text will be shown on the search result listing after the page title of a result if the search engine got search results from the contents of files, rather than the pages.",
        "search-suggest": "Used for \"Did you mean\" suggestions:\n* $1 - suggested link",
        "search-interwiki-caption": "Used in [[Special:Search]], when showing search results from other wikis.",
        "prefs-displayrc": "\"Display\" is a noun that specifies the kind of \"options\". So translate as \"options about display\", not as \"display the options\".\n\nUsed in [[Special:Preferences]], tab \"Recent changes\". The display options refer to:\n* {{msg-mw|Recentchangesdays}}\n* {{msg-mw|Recentchangescount}}",
        "prefs-displaywatchlist": "\"Display\" is a noun that specifies the kind of \"options\". So translate as \"options about display\", not as \"display the options\".\n\nUsed in [[Special:Preferences]], tab \"Watchlist\". The display options refer to:\n* {{msg-mw|Prefs-watchlist-days}}\n* {{msg-mw|Prefs-watchlist-edits}}",
        "prefs-tokenwatchlist": "Section heading.\nUsed in [[Special:Preferences]], tab \"Watchlist\".\n{{Identical|Token}}",
-       "prefs-diffs": "Used in [[Special:Preferences]], tab \"Misc\".",
+       "prefs-diffs": "Used in [[Special:Preferences]], tab \"Misc\".\n{{Identical|Diff}}",
        "prefs-help-prefershttps": "Used as help text for the checkbox in [[Special:Preferences]].\n\nThe checkbox has the label {{msg-mw|Tog-prefershttps}}.\n\nSee example: [[mw:Special:Preferences]].",
        "prefswarning-warning": "Warning shown (except in Firefox) when attempting to leave [[Special:Preferences]] with unsaved changes.\n\nParameters:\n* $1 - Text of {{msg-mw|saveprefs}}, as <nowiki>{{int:saveprefs}}</nowiki> cannot be used directly.",
        "prefs-tabs-navigation-hint": "Hint message that explains the arrow key navigation for the tabs on [[Special:Preferences]] to screenreader users.",
        "action-userrights": "{{Doc-action|userrights}}\n\nThis action allows editing of all of the \"user rights\", not just the rights of the group \"all users\".",
        "action-userrights-interwiki": "{{Doc-action|userrights-interwiki}}",
        "action-siteadmin": "{{Doc-action|siteadmin}}",
-       "action-sendemail": "{{doc-action|sendemail}}",
+       "action-sendemail": "{{doc-action|sendemail}}\n{{Identical|E-mail}}",
        "action-editmywatchlist": "{{doc-action|editmywatchlist}}\n{{Identical|Edit your watchlist}}",
        "action-viewmywatchlist": "{{doc-action|viewmywatchlist}}\n{{Identical|View your watchlist}}",
        "action-viewmyprivateinfo": "{{doc-action|viewmyprivateinfo}}",
        "rcshowhidebots": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhidebots-show}} or {{msg-mw|rcshowhidebots-hide}}\n{{Identical|$1 bots}}",
        "rcshowhidebots-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-show}}\n{{Identical|Show}}",
        "rcshowhidebots-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-hide}}\n{{Identical|Hide}}",
-       "rcshowhideliu": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - any one of the following messages:\n** {{msg-mw|rcshowhideliu-show}}\n** {{msg-mw|rcshowhideliu-hide}}",
+       "rcshowhideliu": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - any one of the following messages:\n** {{msg-mw|rcshowhideliu-show}}\n** {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Registered user}}",
        "rcshowhideliu-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.\n\nSee also:\n* {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Show}}",
        "rcshowhideliu-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.\n\nSee also:\n* {{msg-mw|rcshowhideliu-show}}\n{{Identical|Hide}}",
        "rcshowhideanons": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|Rcshowhideanons-show}} or {{msg-mw|Rcshowhideanons-hide}}\n{{Identical|Anonymous user}}",
        "rcshowhidemine-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.\n\nSee also:\n* {{msg-mw|rcshowhidemine-hide}}\n{{Identical|show}}",
        "rcshowhidemine-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.\n\nSee also:\n* {{msg-mw|rcshowhidemine-show}}\n{{Identical|hide}}",
        "rclinks": "Used on [[Special:RecentChanges]].\n* $1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".\n* $2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".\n* $3 - a block of text that consists of other messages.<br />&nbsp;Example: \"''Hide minor edits{{int:pipe-separator}}Show bots{{int:pipe-separator}}Hide anonymous users{{int:pipe-separator}}Hide logged-in users{{int:pipe-separator}}Hide patrolled edits{{int:pipe-separator}}Hide my edits''\"\nList elements are separated by {{msg-mw|Pipe-separator}} each. Each list element is, or contains, a link.",
-       "diff": "Short form of \"differences\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...",
+       "diff": "Short form of \"differences\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...\n{{Identical|Diff}}",
        "hist": "Short form of \"history\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...",
        "hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Show}}\n{{Identical|Hide}}",
        "show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Hide}}\n{{Identical|Show}}",
        "pubmedurl": "{{notranslate}}\nParameters:\n* $1 - Pubmed number\nSee also:\n* {{msg-mw|Rfcurl}}",
        "specialloguserlabel": "Used in [[Special:Log]] as a label for an input field with which the log can be filtered for entries describing actions ''performed'' by the specified user.  \"Carried out\" and \"done\" are possible alternatives for \"performed\".",
        "speciallogtitlelabel": "Used in [[Special:Log]] as a label for an input field with which the log can be filtered.  This filter selects for pages or users on which a log action was performed.",
-       "log": "{{doc-special|Log}}",
+       "log": "{{doc-special|Log}}\n{{Identical|Log}}",
        "all-logs-page": "{{doc-logpage}}\nTitle of [[Special:Log]].",
        "alllogstext": "Header of [[Special:Log]]",
        "logempty": "Used as warning when there are no items to show.",
        "tooltip-ca-move": "See also:\n* {{msg-mw|Move}}\n* {{msg-mw|Accesskey-ca-move}}\n* {{msg-mw|Tooltip-ca-move}}\n{{Identical|Move this page}}",
        "tooltip-ca-watch": "See also:\n* {{msg-mw|Watch}}\n* {{msg-mw|Accesskey-ca-watch}}\n* {{msg-mw|Tooltip-ca-watch}}\n{{Identical|Add this page to your watchlist}}",
        "tooltip-ca-unwatch": "Tooltip shown when hovering over the {{msg-mw|Unwatch}} tab.\n\nSee also:\n* {{msg-mw|Unwatch}}\n* {{msg-mw|Accesskey-ca-unwatch}}\n* {{msg-mw|Tooltip-ca-unwatch}}",
-       "tooltip-search": "The tooltip when hovering over the search menu.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search}}\n* {{msg-mw|Tooltip-search}}",
+       "tooltip-search": "The tooltip when hovering over the search menu.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search}}\n* {{msg-mw|Tooltip-search}}\n{{Identical|Search}}",
        "tooltip-search-go": "This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Go}} button next to the search box.\n\nSee also:\n* {{msg-mw|Go}}\n* {{msg-mw|Accesskey-search-go}}\n* {{msg-mw|Tooltip-search-go}}",
        "tooltip-search-fulltext": "This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Search}} button under the search box.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search-fulltext}}\n* {{msg-mw|Tooltip-search-fulltext}}",
        "tooltip-p-logo": "Tool tip shown when hovering the mouse over the logo that links to [[Main Page]].\n\nSee also:\n* {{msg-mw|Accesskey-p-logo}}\n* {{msg-mw|Tooltip-p-logo}}\n{{Identical|Visit the main page}}",
        "show-big-image-preview": "Message shown under the image description page thumbnail.\n\nCan be followed by {{msg-mw|Show-big-image-other}}.\n\nParameters:\n* $1 - a link which points to the thumbnail. Its text is {{msg-mw|Show-big-image-size}}",
        "show-big-image-other": "Message shown under the image description page thumbnail.\n\nPreceded by {{msg-mw|Show-big-image-preview}}, if the image is in high resolution.\n\nParameters:\n* $1 - list of resolutions (pipe-separated)\n* $2 - number of resolutions",
        "show-big-image-size": "Parameters:\n* $1 - the width of the image(s) in pixels\n* $2 - the height of the image(s) in pixels",
-       "file-info-gif-looped": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].",
-       "file-info-gif-frames": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page.\n\nParameters:\n* $1 - number of frames",
-       "file-info-png-looped": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.",
+       "file-info-gif-looped": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].\n{{Identical|Looped}}",
+       "file-info-gif-frames": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page.\n\nParameters:\n* $1 - number of frames\n{{Identical|Frame}}",
+       "file-info-png-looped": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.\n{{Identical|Looped}}",
        "file-info-png-repeat": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. The sequence of images is repeating a limited amount of time. It is a sequence of images, each displayed after the other, and the first one displayed after the last, for $1 times.",
-       "file-info-png-frames": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page.\n\nThe variable $1 is the number of individual frames in an animated gif file.\n\nFor example of message in use see [[:File:Mouse10.gif]].",
+       "file-info-png-frames": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page.\n\nThe variable $1 is the number of individual frames in an animated gif file.\n\nFor example of message in use see [[:File:Mouse10.gif]].\n{{Identical|Frame}}",
        "file-no-thumb-animation": "We cannot animate thumbnails of this file.\n\nThis notice is shown on the image description page on animated svg files just below {{msg-mw|File-info-size}}.\n\nThis message may be overridden by a more specific message:\n* {{msg-mw|File-no-thumb-animation-gif}}.",
        "file-no-thumb-animation-gif": "Cannot animate thumbnails of this gif file, because it has too big a resolution. The cut off resolution can vary between wikis ([[mw:manual:$wgMaxAnimatedGifArea|$wgMaxAnimatedGifArea]]). Note that resolution is calculated as width times height times number of frames. See {{msg-mw|file-no-thumb-animation}}.",
        "newimages": "Page title of [[Special:NewImages]].",
        "version-credits-title": "Page title for an about/credits page for a MediaWiki extension.\n\nUsed as heading in credits page. e.g. [[Special:Version/Credits]] and [[Special:Version/Credits/UniversalLanguageSelector]]\n\nParameters:\n* $1 - the name of the extension",
        "version-credits-not-found": "Descriptive error used when detailed about/credits for an extension are not available.\n\nSee example: [[Special:Version/Credits/Foo]]",
        "version-poweredby-credits": "Message shown on [[Special:Version]]. Parameters:\n* $1 - the current year\n* $2 - a list of selected MediaWiki authors",
-       "version-poweredby-others": "Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there's a long list of selected MediaWiki authors, then a comma and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.",
+       "version-poweredby-others": "Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there's a long list of selected MediaWiki authors, then a comma and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.\n{{Identical|Other}}",
        "version-poweredby-translators": "Used as label for a link to [[Translating:MediaWiki/Credits]].\n\nPreceded by {{msg-mw|version-poweredby-others}} and {{msg-mw|and}}.\n\nUsed at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]].",
        "version-credits-summary": "Summary of the [[Special:Version/Credits]] sub page, which lists all developers etc. who contributed to MediaWiki. Shown at the top.",
        "version-license-info": "[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.",
        "api-error-stashfailed": "API error message that can be used for client side localisation of API errors.",
        "api-error-publishfailed": "API error message that can be used for client side localisation of API errors.",
        "api-error-stasherror": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashedfilenotfound": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashpathinvalid": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashfilestorage": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashzerolength": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashnotloggedin": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashwrongowner": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashnosuchfilekey": "API error message that can be used for client side localisation of API errors.",
        "api-error-timeout": "API error message that can be used for client side localisation of API errors.",
        "api-error-unclassified": "API error message that can be used for client side localisation of API errors.",
        "api-error-unknown-code": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - may contain more error details\n{{Identical|Unknown error}}",
        "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.",
        "json-warn-trailing-comma": "A warning message notifying that JSON text was automatically corrected by removing erroneous commas.\n\nParameters:\n* $1 - number of commas that were removed\n{{Related|Json-error}}",
-       "json-error-unknown": "User error message when there’s an unknown error.\n\nThis error is shown if we received an unexpected value from PHP. See http://php.net/manual/en/function.json-last-error.php\n\nParameters:\n* $1 - integer error code\n{{Related|Json-error}}\n{{Identical|Unknown error}}",
+       "json-error-unknown": "User error message when there’s an unknown error.\n\nThis error is shown if we received an unexpected value from PHP. See http://php.net/manual/en/function.json-last-error.php\n\nParameters:\n* $1 - integer error code\n{{Related|Json-error}}",
        "json-error-depth": "User error message when the maximum stack depth is exceeded.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
        "json-error-state-mismatch": "User error message when underflow or the modes mismatch.\n\n'''Underflow''': A data-processing error arising when the absolute value of a computed quantity is smaller than the limits of precision of the computing device, retaining at least one significant digit.\n\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
        "json-error-ctrl-char": "User error message when an unexpected control character has been found.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
index 54de2bd..b8e413b 100644 (file)
        "search-result-category-size": "$1 {{PLURAL:$1|element|elemente}} ($2 {{PLURAL:$2|categorie|categorii}}, $3 {{PLURAL:$3|fișier|fișiere}})",
        "search-redirect": "(redirecționare de la $1)",
        "search-section": "(secțiunea $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(se regăsește în conținutul fișierului)",
        "search-suggest": "V-ați referit la: $1",
        "search-interwiki-caption": "Proiecte înrudite",
index ea44230..1708443 100644 (file)
        "hidden-categories": "{{PLURAL:$1|1=Скрытая категория|Скрытые категории}}",
        "hidden-category-category": "Скрытые категории",
        "category-subcat-count": "{{PLURAL:$2|1=Эта категория содержит только следующую подкатегорию.|В этой категории отображается $1 {{PLURAL:$1|подкатегория|подкатегорий|подкатегории}} из имеющихся $2.}}",
-       "category-subcat-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80иÑ\8f|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ий|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ии}}.",
+       "category-subcat-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80иÑ\8f|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ии|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ий}}.",
        "category-article-count": "{{PLURAL:$2|1=Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страниц|Показаны $1 страницы}} из $2, {{PLURAL:$2|находящейся|находящихся}} в данной категории.}}",
-       "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страниц|$1 страницы|1=только одна страница}}.",
+       "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц|1=только одна страница}}.",
        "category-file-count": "{{PLURAL:$2|1=Эта категория содержит единственный файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файлов|Показаны $1 файла}} из $2, {{PLURAL:$2|находящегося|находящихся}} в данной категории.}}",
-       "category-file-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ñ\84айл|$1 Ñ\84айлов|$1 Ñ\84айла|1=только один файл}}.",
+       "category-file-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ñ\84айл|$1 Ñ\84айла|$1 Ñ\84айлов|1=только один файл}}.",
        "listingcontinuesabbrev": "(продолжение)",
        "index-category": "Индексируемые страницы",
        "noindex-category": "Неиндексируемые страницы",
        "delete": "Удалить",
        "deletethispage": "Удалить эту страницу",
        "undeletethispage": "Восстановить эту страницу",
-       "undelete_short": "Ð\92оÑ\81Ñ\81Ñ\82ановиÑ\82Ñ\8c {{PLURAL:$1|$1 Ð¿Ñ\80авкÑ\83|$1 Ð¿Ñ\80авок|$1 Ð¿Ñ\80авки|1=правку}}",
-       "viewdeleted_short": "Просмотр {{PLURAL:$1|$1 удалённой правки|$1 удалённых правок|удалённой правки}}",
+       "undelete_short": "Ð\92оÑ\81Ñ\81Ñ\82ановиÑ\82Ñ\8c {{PLURAL:$1|$1 Ð¿Ñ\80авкÑ\83|$1 Ð¿Ñ\80авки|$1 Ð¿Ñ\80авок|1=правку}}",
+       "viewdeleted_short": "Просмотр {{PLURAL:$1|$1 удалённой правки|удалённой правки|$1 удалённых правок}}",
        "protect": "Защитить",
        "protect_change": "изменить",
        "protectthispage": "Защитить эту страницу",
        "redirectpagesub": "Страница-перенаправление",
        "redirectto": "Перенаправление на:",
        "lastmodifiedat": "Последнее изменение этой страницы: $2, $1.",
-       "viewcount": "К этой странице обращались $1 {{PLURAL:$1|раз|раз|раза}}.",
+       "viewcount": "К этой странице обращались $1 {{PLURAL:$1|раз|раза|раз}}.",
        "protectedpage": "Защищённая страница",
        "jumpto": "Перейти к:",
        "jumptonavigation": "навигация",
        "confirmable-no": "Нет",
        "thisisdeleted": "Просмотреть или восстановить $1?",
        "viewdeleted": "Просмотреть $1?",
-       "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённых правок|$1 удалённые правки|1=удалённую правку}}",
+       "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённые правки|$1 удалённых правок|1=удалённую правку}}",
        "feedlinks": "В виде:",
        "feed-invalid": "Неправильный тип канала для подписки.",
        "feed-unavailable": "Ленты синдикации недоступны",
        "createacct-submit": "Создать учётную запись",
        "createacct-another-submit": "Создать ещё одну запись",
        "createacct-benefit-heading": "{{SITENAME}} — совместный труд таких же людей, как вы.",
-       "createacct-benefit-body1": "{{PLURAL:$1|пÑ\80авка|пÑ\80авок|пÑ\80авки}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|статья|статей|статьи}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|Ñ\83Ñ\87аÑ\81Ñ\82ник|Ñ\83Ñ\87аÑ\81Ñ\82ников|Ñ\83Ñ\87аÑ\81Ñ\82ника}} за последнее время",
+       "createacct-benefit-body1": "{{PLURAL:$1|пÑ\80авка|пÑ\80авки|пÑ\80авок}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|статья|статьи|статей}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|Ñ\83Ñ\87аÑ\81Ñ\82ник|Ñ\83Ñ\87аÑ\81Ñ\82ника|Ñ\83Ñ\87аÑ\81Ñ\82ников}} за последнее время",
        "badretype": "Введённые вами пароли не совпадают.",
        "userexists": "Введённое имя участника уже используется.\nПожалуйста, выберите другое имя.",
        "loginerror": "Ошибка опознавания участника",
        "yourdiff": "Различия",
        "copyrightwarning": "Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии $2 (см. $1).\nЕсли вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из\nисточника, допускающего свободное распространение и изменение своего содержимого.<br />\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!'''",
        "copyrightwarning2": "Пожалуйста, учтите, что любой ваш вклад в проект «{{SITENAME}}» может быть отредактирован или удалён другими участниками.\nЕсли вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. $1).\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!'''",
-       "longpageerror": "'''ОШИБКА: записываемый вами текст имеет размер $1 {{PLURAL:$1|килобайт|килобайт|килобайта}}, что больше, чем установленный предел в $2 {{PLURAL:$2|килобайт|килобайт|килобайта}}. Страница не может быть сохранена.'''",
+       "longpageerror": "'''ОШИБКА: записываемый вами текст имеет размер $1 {{PLURAL:$1|килобайт|килобайта|килобайт}}, что больше, чем установленный предел в $2 {{PLURAL:$2|килобайт|килобайта|килобайт}}. Страница не может быть сохранена.'''",
        "readonlywarning": "'''Предупреждение. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.'''\nВозможно, вам следует скопировать этот текст в текстовый файл, чтобы сохранить его на будущее.\n\nАдминистратор, заблокировавший базу данных, оставил следующее объяснение: $1",
        "protectedpagewarning": "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администраторов.'''\nНиже для справки приведена последняя запись журнала:",
        "semiprotectedpagewarning": "'''Замечание.''' Эта страница была защищена; редактировать её могут только зарегистрированные участники.\nНиже для справки приведена последняя запись журнала:",
        "history-show-deleted": "Только удалённые",
        "histfirst": "старейшие",
        "histlast": "новейшие",
-       "historysize": "($1 {{PLURAL:$1|байт|байт|байта}})",
+       "historysize": "($1 {{PLURAL:$1|байт|байта|байт}})",
        "historyempty": "(пусто)",
        "history-feed-title": "История изменений",
        "history-feed-description": "История изменений этой страницы в вики",
        "mergehistory-empty": "Не найдены правки для объединения.",
        "mergehistory-success": "$3 {{PLURAL:$3|правка|правок|правки}} из [[:$1]] успешно {{PLURAL:$3|перенесена|перенесены}} в [[:$2]].",
        "mergehistory-fail": "Не удалось произвести объединение историй страниц, пожалуйста, проверьте параметры страницы и времени.",
-       "mergehistory-fail-toobig": "Ð\9dе Ñ\83даÑ\91Ñ\82Ñ\81Ñ\8f Ð²Ñ\8bполниÑ\82Ñ\8c Ñ\81лиÑ\8fние Ð¸Ñ\81Ñ\82оÑ\80ии, Ñ\82ак ÐºÐ°Ðº Ð½ÐµÐ¾Ð±Ñ\85одимо Ð¿ÐµÑ\80енеÑ\81Ñ\82и Ð±Ð¾Ð»Ñ\8cÑ\88е Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82имого Ð»Ð¸Ð¼Ð¸Ñ\82а Ð² $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8e|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}}.",
+       "mergehistory-fail-toobig": "Ð\9dе Ñ\83даÑ\91Ñ\82Ñ\81Ñ\8f Ð²Ñ\8bполниÑ\82Ñ\8c Ñ\81лиÑ\8fние Ð¸Ñ\81Ñ\82оÑ\80ии, Ñ\82ак ÐºÐ°Ðº Ð½ÐµÐ¾Ð±Ñ\85одимо Ð¿ÐµÑ\80енеÑ\81Ñ\82и Ð±Ð¾Ð»Ñ\8cÑ\88е Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82имого Ð»Ð¸Ð¼Ð¸Ñ\82а Ð² $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8e|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}}.",
        "mergehistory-no-source": "Исходная страница «$1» не существует.",
        "mergehistory-no-destination": "Целевая страница «$1» не существует.",
        "mergehistory-invalid-source": "Источник должен иметь правильный заголовок.",
        "showhideselectedversions": "Показать/скрыть выбранные версии",
        "editundo": "отменить",
        "diff-empty": "(нет различий)",
-       "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показано $1 промежуточных версии|показаны $1 промежуточные версии}} этого же участника)",
+       "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версии}} этого же участника)",
        "diff-multi-otherusers": "(не {{PLURAL:$1|показана одна промежуточная версия|показано $1 промежуточных версии|показаны $1 промежуточные версии}} {{PLURAL:$2|ещё одного участника|$2 участников}})",
        "diff-multi-manyusers": "({{PLURAL:$1|не показана $1 промежуточная версия, сделанная|не показаны $1 промежуточных версий, сделанных|не показаны $1 промежуточные версии, сделанные}} более чем {{PLURAL:$2|$2 участником|$2 участниками}})",
        "difference-missing-revision": "Не {{PLURAL:$2|1=найдена|найдены}} {{PLURAL:$2|$2 версия|$2 версий|$2 версии|1=одна из версий}} для этого сравнения ($1).\n\nТакое обычно случается при переходе по устаревшей ссылке сравнения версий для страницы, которая была удалена.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
        "notextmatches": "Нет совпадений в текстах страниц",
        "prevn": "{{PLURAL:$1|1=предыдущая|предыдущие}} $1",
        "nextn": "{{PLURAL:$1|1=следующая|следующие}} $1",
-       "prevn-title": "{{PLURAL:$1|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и}}",
-       "nextn-title": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и}}",
-       "shown-title": "Ð\9fоказÑ\8bваÑ\82Ñ\8c $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}} на странице",
+       "prevn-title": "{{PLURAL:$1|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей}}",
+       "nextn-title": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей}}",
+       "shown-title": "Ð\9fоказÑ\8bваÑ\82Ñ\8c $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}} на странице",
        "viewprevnext": "Просмотреть ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''В этой вики есть страница «[[:$1]]»'''",
        "searchmenu-new": "<strong>Создать страницу «[[:$1]]» в этом вики-проекте!</strong>\n{{PLURAL:$2|0=|См. также страницу, найденную по результатами вашего поиска.|См. также найденные результаты поиска.}}",
        "searchprofile-images-tooltip": "Поиск файлов",
        "searchprofile-everything-tooltip": "Поиск на всех страницах (включая страницы обсуждений)",
        "searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
-       "search-result-size": "$1 ({{PLURAL:$2|$2 слово|$2 слов|$2 слова}})",
-       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождений|вхождения}} ($2 {{PLURAL:$2|подкатегория|подкатегорий|подкатегории}}, $3 {{PLURAL:$3|файл|файлов|файла}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 слов}})",
+       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}})",
        "search-redirect": "(перенаправление с $1)",
        "search-section": "(раздел «$1»)",
+       "search-category": "(категория $1)",
        "search-file-match": "(совпадает с содержимым файла)",
        "search-suggest": "Возможно, вы имели в виду «$1».",
        "search-interwiki-caption": "Родственные проекты",
        "searchrelated": "связанный",
        "searchall": "все",
        "showingresults": "Ниже {{PLURAL:$1|1=показан результат|показаны  результаты}} с № '''$2''' и вплоть до № '''$1'''.",
-       "showingresultsinrange": "Ð\9dиже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ Ð´Ð¾ {{PLURAL:$1|<strong>1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82ов|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а}} в диапазоне от <strong>$2</strong> до <strong>$3</strong>.",
+       "showingresultsinrange": "Ð\9dиже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ Ð´Ð¾ {{PLURAL:$1|<strong>1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82ов}} в диапазоне от <strong>$2</strong> до <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> из <strong>$3</strong>|Результаты <strong>$1 — $2</strong> из <strong>$3</strong>}}",
        "search-nonefound": "Соответствий запросу не найдено.",
        "powersearch-legend": "Расширенный поиск",
        "yournick": "Новая подпись:",
        "prefs-help-signature": "Комментарии на страницах обсуждений должны быть подписаны посредством добавления символов «<nowiki>~~~~</nowiki>», которые будут преобразованы в вашу подпись и время.",
        "badsig": "Неверная подпись. Проверьте корректность HTML-тегов.",
-       "badsiglength": "СлиÑ\88ком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ\8f Ð¿Ð¾Ð´Ð¿Ð¸Ñ\81Ñ\8c.\nÐ\9fодпиÑ\81Ñ\8c Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð° Ð¿Ñ\80евÑ\8bÑ\88аÑ\82Ñ\8c $1 {{PLURAL:$1|Ñ\81имвола|Ñ\81имволов|Ñ\81имвола}}.",
+       "badsiglength": "СлиÑ\88ком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ\8f Ð¿Ð¾Ð´Ð¿Ð¸Ñ\81Ñ\8c.\nÐ\9fодпиÑ\81Ñ\8c Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð° Ð¿Ñ\80евÑ\8bÑ\88аÑ\82Ñ\8c $1 {{PLURAL:$1|Ñ\81имвола|Ñ\81имвола|Ñ\81имволов}}.",
        "yourgender": "Какое описание вам более подходит?",
        "gender-unknown": "Я предпочитаю не указывать",
        "gender-male": "Он редактирует страницы вики",
        "action-viewmywatchlist": "просмотр вашего списка наблюдения",
        "action-viewmyprivateinfo": "просмотр вашей частной информации",
        "action-editmyprivateinfo": "редактирование вашей частной информации",
-       "nchanges": "$1 {{PLURAL:$1|изменение|изменений|изменения}}",
+       "nchanges": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|с последнего посещения}}",
        "enhancedrc-history": "история",
        "recentchanges": "Свежие правки",
        "newpageletter": "Н",
        "boteditletter": "б",
        "unpatrolledletter": "!",
-       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблÑ\8eдаÑ\8eÑ\89ий Ñ\83Ñ\87аÑ\81Ñ\82ник|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ника}}]",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблÑ\8eдаÑ\8eÑ\89ий Ñ\83Ñ\87аÑ\81Ñ\82ник|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ника|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников}}]",
        "rc_categories": "Только из категорий (разделитель «|»)",
        "rc_categories_any": "Любой",
-       "rc-change-size-new": "Размер после изменения: $1 {{PLURAL:$1|байт|байт|байта}}",
+       "rc-change-size-new": "Размер после изменения: $1 {{PLURAL:$1|байт|байта|байт}}",
        "newsectionsummary": "/* $1 */ новая тема",
        "rc-enhanced-expand": "Показать подробности",
        "rc-enhanced-hide": "Скрыть подробности",
        "backend-fail-closetemp": "Не удаётся закрыть временный файл.",
        "backend-fail-read": "Не удалось прочитать файл $1.",
        "backend-fail-create": "Не удалось записать файл $1.",
-       "backend-fail-maxsize": "Не удалось записать файл $1, так как его размер превышает $2 {{PLURAL:$2|байт|байт|байта}}.",
+       "backend-fail-maxsize": "Не удалось записать файл $1, так как его размер превышает $2 {{PLURAL:$2|байт|байта|байт}}.",
        "backend-fail-readonly": "Хранилище «$1» сейчас находится в режиме «только чтение». Причина: «$2»",
        "backend-fail-synced": "Файл «$1» находится в несогласованном состоянии во внутреннем хранилище",
        "backend-fail-connect": "Не удалось подключиться к хранилищу «$1».",
        "filehist-filesize": "Размер файла",
        "filehist-comment": "Примечание",
        "imagelinks": "Использование файла",
-       "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страниц ссылаются|Следующие $1 страницы ссылаются}} на данный файл:",
+       "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страницы ссылаются|Следующие $1 страниц ссылаются}} на данный файл:",
        "linkstoimage-more": "Более $1 {{PLURAL:$1|страницы|страниц}} ссылаются на этот файл.\nВ данном списке {{PLURAL:$1|представлена только $1 ссылка|представлены только $1 ссылок|представлены только $1 ссылки}} на этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
        "nolinkstoimage": "Нет страниц, ссылающихся на данный файл.",
        "morelinkstoimage": "Просмотреть [[Special:WhatLinksHere/$1|остальные ссылки]] на этот файл.",
        "linkstoimage-redirect": "$1 (файловое перенаправление) $2",
-       "duplicatesoffile": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89ий Ñ\84айл Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ом|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айлов Ñ\8fвлÑ\8fÑ\8eÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ами|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айла являются дубликатами}} этого файла ([[Special:FileDuplicateSearch/$2|подробности]]):",
+       "duplicatesoffile": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89ий Ñ\84айл Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ом|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айла Ñ\8fвлÑ\8fÑ\8eÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ами|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айлов являются дубликатами}} этого файла ([[Special:FileDuplicateSearch/$2|подробности]]):",
        "sharedupload": "Этот файл из $1 и может использоваться в других проектах.",
        "sharedupload-desc-there": "Этот файл из $1 и может использоваться в других проектах.\nДополнительную информацию можно найти на [$2 странице описания файла].",
        "sharedupload-desc-here": "Этот файл из $1 и может использоваться в других проектах.\nИнформация с его [$2 страницы описания] приведена ниже.",
        "listredirects": "Список перенаправлений",
        "listduplicatedfiles": "Список файлов с дубликатами",
        "listduplicatedfiles-summary": "Это список файлов, где самая последняя версия файла считается дубликатом последней версии некоторых других файлов. Учитываются только локальные файлы.",
-       "listduplicatedfiles-entry": "У Ñ\84айла [[:File:$1|$1]] â\80\94 [[$3|{{PLURAL:$2|один Ð´Ñ\83бликаÑ\82|$2 Ð´Ñ\83бликаÑ\82ов|$2 Ð´Ñ\83бликаÑ\82а}}]].",
+       "listduplicatedfiles-entry": "У Ñ\84айла [[:File:$1|$1]] â\80\94 [[$3|{{PLURAL:$2|один Ð´Ñ\83бликаÑ\82|$2 Ð´Ñ\83бликаÑ\82а|$2 Ð´Ñ\83бликаÑ\82ов}}]].",
        "unusedtemplates": "Неиспользуемые шаблоны",
        "unusedtemplatestext": "Здесь перечислены все страницы пространства имён «{{ns:template}}», не включённые ни в какие другие страницы.\nНе забывайте проверять отсутствие ссылок на шаблон перед его удалением.",
        "unusedtemplateswlh": "другие ссылки",
        "statistics-edits-average": "Среднее число правок на страницу",
        "statistics-users": "Зарегистрированные [[Special:ListUsers|участники]]",
        "statistics-users-active": "Активные участники",
-       "statistics-users-active-desc": "Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дней|последние $1 дня}}",
+       "statistics-users-active-desc": "Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней}}",
        "pageswithprop": "Страницы с переопределёнными свойствами",
        "pageswithprop-legend": "Страницы с переопределёнными свойствами",
        "pageswithprop-text": "Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.",
        "withoutinterwiki-legend": "Префикс",
        "withoutinterwiki-submit": "Показать",
        "fewestrevisions": "Страницы с наименьшим количеством версий",
-       "nbytes": "$1 {{PLURAL:$1|байÑ\82|байÑ\82ов|байÑ\82а}}",
-       "ncategories": "$1 {{PLURAL:$1|каÑ\82егоÑ\80иÑ\8f|каÑ\82егоÑ\80ий|каÑ\82егоÑ\80ии}}",
-       "ninterwikis": "$1 {{PLURAL:$1|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлка|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлок|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлки}}",
-       "nlinks": "$1 {{PLURAL:$1|Ñ\81Ñ\81Ñ\8bлка|Ñ\81Ñ\81Ñ\8bлок|Ñ\81Ñ\81Ñ\8bлки}}",
-       "nmembers": "$1 {{PLURAL:$1|обÑ\8aекÑ\82|обÑ\8aекÑ\82ов|обÑ\8aекÑ\82а}}",
-       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|обÑ\8aекÑ\82|обÑ\8aекÑ\82ов|обÑ\8aекÑ\82а}}",
-       "nrevisions": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}}",
-       "nviews": "$1 {{PLURAL:$1|пÑ\80оÑ\81моÑ\82Ñ\80|пÑ\80оÑ\81моÑ\82Ñ\80ов|пÑ\80оÑ\81моÑ\82Ñ\80а}}",
+       "nbytes": "$1 {{PLURAL:$1|байÑ\82|байÑ\82а|байÑ\82ов}}",
+       "ncategories": "$1 {{PLURAL:$1|каÑ\82егоÑ\80иÑ\8f|каÑ\82егоÑ\80ии|каÑ\82егоÑ\80ий}}",
+       "ninterwikis": "$1 {{PLURAL:$1|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлка|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлки|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлок}}",
+       "nlinks": "$1 {{PLURAL:$1|Ñ\81Ñ\81Ñ\8bлка|Ñ\81Ñ\81Ñ\8bлки|Ñ\81Ñ\81Ñ\8bлок}}",
+       "nmembers": "$1 {{PLURAL:$1|обÑ\8aекÑ\82|обÑ\8aекÑ\82а|обÑ\8aекÑ\82ов}}",
+       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|обÑ\8aекÑ\82|обÑ\8aекÑ\82а|обÑ\8aекÑ\82ов}}",
+       "nrevisions": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}}",
+       "nviews": "$1 {{PLURAL:$1|пÑ\80оÑ\81моÑ\82Ñ\80|пÑ\80оÑ\81моÑ\82Ñ\80а|пÑ\80оÑ\81моÑ\82Ñ\80ов}}",
        "nimagelinks": "Используется на $1 {{PLURAL:$1|странице|страницах}}",
        "ntransclusions": "используется на $1 {{PLURAL:$1|странице|страницах}}",
        "specialpage-empty": "Запрос не дал результатов.",
        "listusers-editsonly": "Показать только тех участников, кто сделал хотя бы одну правку",
        "listusers-creationsort": "Упорядочить по дате создания",
        "listusers-desc": "Сортировать по убыванию",
-       "usereditcount": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авок|пÑ\80авки}}",
+       "usereditcount": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авки|пÑ\80авок}}",
        "usercreated": "{{GENDER:$3|зарегистрировался|зарегистрировалась}} $1 в $2",
        "newpages": "Новые страницы",
        "newpages-username": "Участник:",
        "notargettext": "Вы не указали целевую страницу или участника для этого действия.",
        "nopagetitle": "Нет такой целевой страницы",
        "nopagetext": "Указанной целевой страницы не существует.",
-       "pager-newer-n": "$1 более {{PLURAL:$1|новая|новых|новые}}",
-       "pager-older-n": "$1 более {{PLURAL:$1|старая|старых|старые}}",
+       "pager-newer-n": "$1 более {{PLURAL:$1|новая|новые|новых}}",
+       "pager-older-n": "$1 более {{PLURAL:$1|старая|старые|старых}}",
        "suppress": "Сокрытие",
        "querypage-disabled": "Эта спецстраница отключена для повышения производительности.",
        "apihelp": "Справка по API",
        "listusers-noresult": "Не найдено участников.",
        "listusers-blocked": "(заблокирован{{GENDER:$1||а}})",
        "activeusers": "Список активных участников",
-       "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дней|последние $1 дня|1=последний день}}.",
-       "activeusers-count": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авок|пÑ\80авки}} Ð·Ð° {{PLURAL:$3|$3 Ð¿Ð¾Ñ\81ледний Ð´ÐµÐ½Ñ\8c|поÑ\81ледние $3 Ð´Ð½ÐµÐ¹|поÑ\81ледние $3 Ð´Ð½Ñ\8f|1=последний день}}",
+       "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней|1=последний день}}.",
+       "activeusers-count": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авки|пÑ\80авок}} Ð·Ð° {{PLURAL:$3|$3 Ð¿Ð¾Ñ\81ледний Ð´ÐµÐ½Ñ\8c|поÑ\81ледние $3 Ð´Ð½Ñ\8f|поÑ\81ледние $3 Ð´Ð½ÐµÐ¹|1=последний день}}",
        "activeusers-from": "Показать участников, начиная с:",
        "activeusers-hidebots": "Скрыть ботов",
        "activeusers-hidesysops": "Скрыть администраторов",
        "unwatchthispage": "Прекратить наблюдение",
        "notanarticle": "Не статья",
        "notvisiblerev": "Версия была удалена",
-       "watchlist-details": "В вашем списке наблюдения $1 {{PLURAL:$1|страница|страниц|страницы}}, не считая страниц обсуждений.",
+       "watchlist-details": "В вашем списке наблюдения $1 {{PLURAL:$1|страница|страницы|страниц}}, не считая страниц обсуждений.",
        "wlheader-enotif": "Уведомления по эл. почте включены.",
        "wlheader-showupdated": "Страницы, изменившиеся с вашего последнего их посещения, выделены '''жирным''' шрифтом.",
-       "wlnote": "Ниже {{PLURAL:$1|показано последнее изменение|показаны <strong>$1</strong> последних изменений|показаны <strong>$1</strong> последние изменения}} за {{PLURAL:$2|последний час|последние <strong>$2</strong> часов|последние <strong>$2</strong> часа}}, по состоянию на $3 $4.",
+       "wlnote": "Ниже {{PLURAL:$1|показано последнее изменение|показаны <strong>$1</strong> последние изменения|показаны <strong>$1</strong> последних изменений}} за {{PLURAL:$2|последний час|последние <strong>$2</strong> часа|последние <strong>$2</strong> часов}}, по состоянию на $3 $4.",
        "wlshowlast": "Показать за последние $1 часов $2 дней",
        "watchlist-options": "Настройки списка наблюдения",
        "watching": "Добавление в список наблюдения…",
        "rollback": "Откатить изменения",
        "rollback_short": "Откат",
        "rollbacklink": "откатить",
-       "rollbacklinkcount": "оÑ\82каÑ\82иÑ\82Ñ\8c $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авок|пÑ\80авки}}",
-       "rollbacklinkcount-morethan": "оÑ\82каÑ\82иÑ\82Ñ\8c Ð±Ð¾Ð»Ñ\8cÑ\88е, Ñ\87ем $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авок|пÑ\80авки}}",
+       "rollbacklinkcount": "оÑ\82каÑ\82иÑ\82Ñ\8c $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авки|пÑ\80авок}}",
+       "rollbacklinkcount-morethan": "оÑ\82каÑ\82иÑ\82Ñ\8c Ð±Ð¾Ð»Ñ\8cÑ\88е, Ñ\87ем $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авки|пÑ\80авок}}",
        "rollbackfailed": "Ошибка при совершении отката",
        "cantrollback": "Невозможно откатить изменения. Последний, кто вносил изменения, является единственным автором этой страницы.",
        "alreadyrolled": "Невозможно откатить последние изменения страницы «[[:$1]]», совершённые [[User:$2|$2]] ([[User talk:$2|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]),\nпоскольку кто-то другой уже успел откатить эти правки или отредактировать страницу.\n\nПоследние изменения {{GENDER:$3|внёс|внесла}} [[User:$3|$3]] ([[User talk:$3|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "undeleteinvert": "Обратить выделение",
        "undeletecomment": "Причина:",
        "undeletedrevisions": "{{PLURAL:$1|восстановлено|восстановлены}} $1 {{PLURAL:$1|изменение|изменений|изменения}}",
-       "undeletedrevisions-files": "воÑ\81Ñ\81Ñ\82ановленÑ\8b $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}} Ð¸ $2 {{PLURAL:$2|Ñ\84айл|Ñ\84айлов|Ñ\84айла}}",
+       "undeletedrevisions-files": "воÑ\81Ñ\81Ñ\82ановленÑ\8b $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}} Ð¸ $2 {{PLURAL:$2|Ñ\84айл|Ñ\84айла|Ñ\84айлов}}",
        "undeletedfiles": "{{PLURAL:$1|восстановлен|восстановлены}} $1 {{PLURAL:$1|файл|файлов|файла}}",
        "cannotundelete": "Ошибка восстановления:\n$1",
        "undeletedpage": "'''Страница «$1» была восстановлена.'''\n\nДля просмотра списка последних удалений и восстановлений см. [[Special:Log/delete|журнал удалений]].",
        "movepage-page-exists": "Страница $1 уже существует и не может быть автоматически перезаписана.",
        "movepage-page-moved": "Страница $1 была переименована в $2.",
        "movepage-page-unmoved": "Страница $1 не может быть переименована в $2.",
-       "movepage-max-pages": "{{PLURAL:$1|Ð\91Ñ\8bла Ð¿ÐµÑ\80еименована|Ð\91Ñ\8bли Ð¿ÐµÑ\80еименованÑ\8b\91Ñ\8bло Ð¿ÐµÑ\80еименовано}} $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86а|Ñ\81Ñ\82Ñ\80аниÑ\86\81Ñ\82Ñ\80аниÑ\86Ñ\8b}} — это максимум; большее число страниц автоматически переименовать нельзя.",
+       "movepage-max-pages": "{{PLURAL:$1|Ð\91Ñ\8bла Ð¿ÐµÑ\80еименована|Ð\91Ñ\8bло Ð¿ÐµÑ\80еименовано|Ð\91Ñ\8bли Ð¿ÐµÑ\80еименованÑ\8b}} $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86а|Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b\81Ñ\82Ñ\80аниÑ\86}} — это максимум; большее число страниц автоматически переименовать нельзя.",
        "movelogpage": "Журнал переименований",
        "movelogpagetext": "Ниже представлен список переименованных страниц.",
        "movesubpage": "{{PLURAL:$1|1=Подстраница|Подстраницы}}",
-       "movesubpagetext": "У этой страницы $1 {{PLURAL:$1|подстраница|подстраниц|подстраницы}}.",
+       "movesubpagetext": "У этой страницы $1 {{PLURAL:$1|подстраница|подстраницы|подстраниц}}.",
        "movenosubpage": "У этой страницы нет подстраниц.",
        "movereason": "Причина:",
        "revertmove": "возврат",
        "import-comment": "Примечание:",
        "importtext": "Пожалуйста, экспортируйте страницу из исходной вики, используя [[Special:Export|соответствующий инструмент]]. Сохраните файл на диск, а затем загрузите его сюда.",
        "importstart": "Импортирование страниц…",
-       "import-revision-count": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}}",
+       "import-revision-count": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}}",
        "importnopages": "Нет страниц для импортирования.",
-       "imported-log-entries": "{{PLURAL:$1|Импортирована $1 запись|Импортировано $1 записей|Импортированы $1 записи}} журнала.",
+       "imported-log-entries": "{{PLURAL:$1|Импортирована $1 запись|Импортированы $1 записи|Импортировано $1 записей}} журнала.",
        "importfailed": "Не удалось импортировать: $1",
        "importunknownsource": "Неизвестный тип импортируемой страницы",
        "importcantopen": "Невозможно открыть импортируемый файл",
        "importlogpage": "Журнал импорта",
        "importlogpagetext": "Импортирование администраторами страниц с историей изменений из других вики.",
        "import-logentry-upload": "«[[$1]]» — импорт из файла",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ий Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ии импортировано}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ии Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ий импортировано}}",
        "import-logentry-interwiki": "«$1» — межвики импорт",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ий  Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ии импортировано}} из $2",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ии Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ий  импортировано}} из $2",
        "javascripttest": "Проверка JavaScript",
        "javascripttest-title": "Проводится проверка $1",
        "javascripttest-pagetext-noframework": "Эта страница зарезервирована для запуска JavaScript-тестов.",
        "pageinfo-redirects-name": "Количество перенаправлений на эту страницу",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Подстраницы данной страницы",
-       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перенаправление|перенаправлений|перенаправления}}; $3 {{PLURAL:$3|обычная|обычных|обычные}})",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перенаправление|перенаправления|перенаправлений}}; $3 {{PLURAL:$3|обычная|обычные|обычных}})",
        "pageinfo-firstuser": "Создатель страницы",
        "pageinfo-firsttime": "Дата создания страницы",
        "pageinfo-lastuser": "Последний редактор",
        "imagemaxsize": "Ограничение на размер изображения:<br />''(для страницы описания файла)''",
        "thumbsize": "Размер уменьшенной версии изображения:",
        "widthheight": "$1 × $2",
-       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|страниц|страницы}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|страницы|страниц}}",
        "file-info": "размер файла: $1, MIME-тип: $2",
-       "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3, MIME-тип: $4",
-       "file-info-size-pages": "$1 × $2 пикселей, размер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страниц|страницы}}",
+       "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3, MIME-тип: $4",
+       "file-info-size-pages": "$1 × $2 пикселей, размер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страницы|страниц}}",
        "file-nohires": "Нет версии с бо́льшим разрешением.",
-       "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3",
-       "svg-long-desc-animated": "Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3",
+       "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3",
+       "svg-long-desc-animated": "Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3",
        "svg-long-error": "неправильный SVG-файл: $1",
        "show-big-image": "Исходный файл",
        "show-big-image-preview": "Размер при предпросмотре: $1.",
        "show-big-image-other": "{{PLURAL:$2|1=Другое разрешение|Другие разрешения}}: $1.",
        "show-big-image-size": "$1 × $2 пикселей",
        "file-info-gif-looped": "закольцованный",
-       "file-info-gif-frames": "$1 {{PLURAL:$1|Ñ\84Ñ\80ейм|Ñ\84Ñ\80еймов|Ñ\84Ñ\80ейма}}",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|Ñ\84Ñ\80ейм|Ñ\84Ñ\80ейма|Ñ\84Ñ\80еймов}}",
        "file-info-png-looped": "закольцованный",
-       "file-info-png-repeat": "проигрывается $1 {{PLURAL:$1|раз|раз|раза}}",
-       "file-info-png-frames": "$1 {{PLURAL:$1|кадÑ\80|кадÑ\80ов|кадÑ\80а}}",
+       "file-info-png-repeat": "проигрывается $1 {{PLURAL:$1|раз|раза|раз}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|кадÑ\80|кадÑ\80а|кадÑ\80ов}}",
        "file-no-thumb-animation": "'''Примечание. По техническим причинам миниатюры этого файла не будет анимироваться.'''",
        "file-no-thumb-animation-gif": "'''Примечание. По техническим причинам миниатюры подобных GIF-изображений высокого разрешения не анимируются.'''",
        "newimages": "Галерея новых файлов",
        "minutes-abbrev": "$1 м",
        "hours-abbrev": "$1 ч",
        "days-abbrev": "$1 д",
-       "seconds": "{{PLURAL:$1|$1 секунда|$1 секунд|$1 секунды}}",
-       "minutes": "{{PLURAL:$1|$1 минута|$1 минут|$1 минуты}}",
-       "hours": "{{PLURAL:$1|$1 Ñ\87аÑ\81|$1 Ñ\87аÑ\81ов|$1 Ñ\87аÑ\81а}}",
-       "days": "{{PLURAL:$1|$1 день|$1 дней|$1 дня}}",
-       "weeks": "{{PLURAL:$1|$1 неделя|$1 недель|$1 недели}}",
-       "months": "{{PLURAL:$1|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86ев|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86а}}",
-       "years": "{{PLURAL:$1|$1 Ð³Ð¾Ð´|$1 Ð»ÐµÑ\82|$1 Ð³Ð¾Ð´Ð°}}",
+       "seconds": "{{PLURAL:$1|$1 секунда|$1 секунды|$1 секунд}}",
+       "minutes": "{{PLURAL:$1|$1 минута|$1 минуты|$1 минут}}",
+       "hours": "{{PLURAL:$1|$1 Ñ\87аÑ\81|$1 Ñ\87аÑ\81а|$1 Ñ\87аÑ\81ов}}",
+       "days": "{{PLURAL:$1|$1 день|$1 дня|$1 дней}}",
+       "weeks": "{{PLURAL:$1|$1 неделя|$1 недели|$1 недель}}",
+       "months": "{{PLURAL:$1|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86а|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86ев}}",
+       "years": "{{PLURAL:$1|$1 Ð³Ð¾Ð´|$1 Ð³Ð¾Ð´Ð°|$1 Ð»ÐµÑ\82}}",
        "ago": "$1 назад",
        "just-now": "только что",
-       "hours-ago": "$1 {{PLURAL:$1|Ñ\87аÑ\81\87аÑ\81ов|Ñ\87аÑ\81а}} назад",
-       "minutes-ago": "$1 {{PLURAL:$1|минуту|минут|минуты}} назад",
-       "seconds-ago": "$1 {{PLURAL:$1|секунду|секунд|секунды}} назад",
+       "hours-ago": "$1 {{PLURAL:$1|Ñ\87аÑ\81\87аÑ\81а|Ñ\87аÑ\81ов}} назад",
+       "minutes-ago": "$1 {{PLURAL:$1|минуту|минуты|минут}} назад",
+       "seconds-ago": "$1 {{PLURAL:$1|секунду|секунды|секунд}} назад",
        "monday-at": "в понедельник в $1",
        "tuesday-at": "во вторник в $1",
        "wednesday-at": "в среду в $1",
        "exif-exposureprogram-6": "Спортивный режим (с минимальной выдержкой)",
        "exif-exposureprogram-7": "Портретный режим (для снимков на близком расстоянии, с фоном не в фокусе)",
        "exif-exposureprogram-8": "Пейзажный режим (для пейзажных снимков, с фоном в фокусе)",
-       "exif-subjectdistance-value": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80ов|меÑ\82Ñ\80а}}",
+       "exif-subjectdistance-value": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80а|меÑ\82Ñ\80ов}}",
        "exif-meteringmode-0": "Неизвестно",
        "exif-meteringmode-1": "Средний",
        "exif-meteringmode-2": "Центровзвешенный",
        "exif-gpslatitude-s": "южной широты",
        "exif-gpslongitude-e": "восточной долготы",
        "exif-gpslongitude-w": "западной долготы",
-       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80ов|меÑ\82Ñ\80а}} над уровнем моря",
-       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80ов|меÑ\82Ñ\80а}} ниже уровня моря",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80а|меÑ\82Ñ\80ов}} над уровнем моря",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80а|меÑ\82Ñ\80ов}} ниже уровня моря",
        "exif-gpsstatus-a": "Измерение не закончено",
        "exif-gpsstatus-v": "Готов к передаче данных",
        "exif-gpsmeasuremode-2": "Измерение 2-х координат",
        "watchlistedit-normal-legend": "Удаление записей из списка наблюдения",
        "watchlistedit-normal-explain": "Ниже перечислены страницы, находящиеся в вашем списке наблюдения.\nДля удаления записей отметьте соответствующие позиции и нажмите кнопку «{{int:Watchlistedit-normal-submit}}».\nВы также можете [[Special:EditWatchlist/raw|править список как текст]].",
        "watchlistedit-normal-submit": "Удалить записи",
-       "watchlistedit-normal-done": "Ð\98з Ð²Ð°Ñ\88его Ñ\81пиÑ\81ка Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f {{PLURAL:$1|бÑ\8bла Ñ\83далена|бÑ\8bло Ñ\83далено|бÑ\8bли Ñ\83даленÑ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
+       "watchlistedit-normal-done": "Ð\98з Ð²Ð°Ñ\88его Ñ\81пиÑ\81ка Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f {{PLURAL:$1|бÑ\8bла Ñ\83далена|бÑ\8bли Ñ\83даленÑ\8b|бÑ\8bло Ñ\83далено}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
        "watchlistedit-raw-title": "Редактирование списка наблюдения как текста",
        "watchlistedit-raw-legend": "Редактирование списка наблюдения",
        "watchlistedit-raw-explain": "Ниже перечислены страницы, находящиеся в вашем списке наблюдения. Вы можете изменять этот список, добавляя и удаляя из него строки с названиями, по одному названию на строке.\nПосле завершения правок нажмите кнопку «{{int:Watchlistedit-raw-submit}}».\nВы также можете [[Special:EditWatchlist|использовать стандартный редактор]].",
        "watchlistedit-raw-titles": "Записи:",
        "watchlistedit-raw-submit": "Сохранить список",
        "watchlistedit-raw-done": "Ваш список наблюдения сохранён.",
-       "watchlistedit-raw-added": "{{PLURAL:$1|Ð\91Ñ\8bла Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð°|Ð\91Ñ\8bло Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾|Ð\91Ñ\8bли Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
-       "watchlistedit-raw-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bло Ñ\83далено|Ð\91Ñ\8bли Ñ\83даленÑ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
+       "watchlistedit-raw-added": "{{PLURAL:$1|Ð\91Ñ\8bла Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð°|Ð\91Ñ\8bли Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ\8b\91Ñ\8bло Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bли Ñ\83даленÑ\8b\91Ñ\8bло Ñ\83далено}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
        "watchlistedit-clear-title": "Очищение списка наблюдения",
        "watchlistedit-clear-legend": "Очистить список наблюдения",
        "watchlistedit-clear-explain": "Все записи будут удалены из вашего списка наблюдения",
        "watchlistedit-clear-titles": "Заголовки:",
        "watchlistedit-clear-submit": "Очистить список наблюдения (это необратимо!)",
        "watchlistedit-clear-done": "Ваш список наблюдения очищен.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bло Ñ\83далено|Ð\91Ñ\8bли Ñ\83даленÑ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bли Ñ\83даленÑ\8b\91Ñ\8bло Ñ\83далено}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
        "watchlistedit-too-many": "Слишком много страниц для того, чтобы показать их здесь.",
        "watchlisttools-clear": "Очистить список наблюдения",
        "watchlisttools-view": "Изменения на страницах из списка",
        "fileduplicatesearch-legend": "Поиск дубликатов",
        "fileduplicatesearch-filename": "Имя файла:",
        "fileduplicatesearch-submit": "Найти",
-       "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}<br />Размер файла: $3<br />MIME-тип: $4",
+       "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}<br />Размер файла: $3<br />MIME-тип: $4",
        "fileduplicatesearch-result-1": "Файл «$1» не имеет идентичных дубликатов.",
-       "fileduplicatesearch-result-n": "Файл Â«$1» Ð¸Ð¼ÐµÐµÑ\82 $2 {{PLURAL:$2|иденÑ\82иÑ\87нÑ\8bй Ð´Ñ\83бликаÑ\82|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82ов|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82а}}.",
+       "fileduplicatesearch-result-n": "Файл Â«$1» Ð¸Ð¼ÐµÐµÑ\82 $2 {{PLURAL:$2|иденÑ\82иÑ\87нÑ\8bй Ð´Ñ\83бликаÑ\82|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82а|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82ов}}.",
        "fileduplicatesearch-noresults": "Не найден файл с именем «$1».",
        "specialpages": "Спецстраницы",
        "specialpages-note-top": "Легенда",
        "tags-active-yes": "Да",
        "tags-active-no": "Нет",
        "tags-edit": "править",
-       "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменений|изменения}}",
+       "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
        "comparepages": "Сравнение страниц",
        "compare-page1": "Первая страница",
        "compare-page2": "Вторая страница",
        "api-error-unknownerror": "Неизвестная ошибка: «$1».",
        "api-error-uploaddisabled": "В этой вики отключена возможность загрузки файлов.",
        "api-error-verification-error": "Возможно, этот файл повреждён или имеет неправильное расширение.",
-       "duration-seconds": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
-       "duration-minutes": "$1 {{PLURAL:$1|минута|минут|минуты}}",
-       "duration-hours": "$1 {{PLURAL:$1|Ñ\87аÑ\81\87аÑ\81ов|Ñ\87аÑ\81а}}",
-       "duration-days": "$1 {{PLURAL:$1|день|дней|дня}}",
-       "duration-weeks": "$1 {{PLURAL:$1|неделя|недель|недели}}",
-       "duration-years": "$1 {{PLURAL:$1|год|леÑ\82|года}}",
-       "duration-decades": "$1 {{PLURAL:$1|десятилетие|десятилетий|десятилетия}}",
-       "duration-centuries": "$1 {{PLURAL:$1|век|веков|века}}",
-       "duration-millennia": "$1 {{PLURAL:$1|тысячелетие|тысячелетий|тысячелетия}}",
-       "rotate-comment": "Ð\98зобÑ\80ажение Ð¿Ð¾Ð²Ñ\91Ñ\80нÑ\83Ñ\82о Ð½Ð° $1 Ð³Ñ\80адÑ\83Ñ\81{{PLURAL:$1||ов|а}} по часовой стрелке",
+       "duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
+       "duration-minutes": "$1 {{PLURAL:$1|минута|минуты|минут}}",
+       "duration-hours": "$1 {{PLURAL:$1|Ñ\87аÑ\81\87аÑ\81а|Ñ\87аÑ\81ов}}",
+       "duration-days": "$1 {{PLURAL:$1|день|дня|дней}}",
+       "duration-weeks": "$1 {{PLURAL:$1|неделя|недели|недель}}",
+       "duration-years": "$1 {{PLURAL:$1|год|года|леÑ\82}}",
+       "duration-decades": "$1 {{PLURAL:$1|десятилетие|десятилетия|десятилетий}}",
+       "duration-centuries": "$1 {{PLURAL:$1|век|века|веков}}",
+       "duration-millennia": "$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}",
+       "rotate-comment": "Ð\98зобÑ\80ажение Ð¿Ð¾Ð²Ñ\91Ñ\80нÑ\83Ñ\82о Ð½Ð° $1 Ð³Ñ\80адÑ\83Ñ\81{{PLURAL:$1||а|ов}} по часовой стрелке",
        "limitreport-title": "Данные анализатора:",
        "limitreport-cputime": "Использование времени процессора",
-       "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
        "limitreport-walltime": "Использование в режиме реального времени",
-       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
        "limitreport-ppvisitednodes": "Количество узлов, посещённых препроцессором",
        "limitreport-ppgeneratednodes": "Количество сгенерированных препроцессором узлов",
        "limitreport-postexpandincludesize": "Размер раскрытых включений",
-       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82ов|байÑ\82а}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82а|байÑ\82ов}}",
        "limitreport-templateargumentsize": "Размер аргумента шаблона",
-       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82ов|байÑ\82а}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82а|байÑ\82ов}}",
        "limitreport-expansiondepth": "Наибольшая глубина расширения",
        "limitreport-expensivefunctioncount": "Количество «дорогих» функций анализатора",
        "expandtemplates": "Развёртка шаблонов",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''отключено''')",
        "mediastatistics": "Медиа-статистика",
        "mediastatistics-summary": "Статистические данные о типах загруженных файлов. Она включает информацию только о последних версиях файлов. Более старые или удалённые версии файлов не учитываются.",
-       "mediastatistics-nbytes": "$1 Ð±Ð°Ð¹Ñ\82{{PLURAL:$1||ов|а}} ($2; $3%)",
+       "mediastatistics-nbytes": "$1 Ð±Ð°Ð¹Ñ\82{{PLURAL:$1||а|ов}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-тип",
        "mediastatistics-table-extensions": "Возможные расширения",
        "mediastatistics-table-count": "Количество файлов",
        "mediastatistics-header-text": "Текстовые",
        "mediastatistics-header-executable": "Исполняемые",
        "mediastatistics-header-archive": "Сжатые форматы",
-       "json-warn-trailing-comma": "$1 {{PLURAL:$1|лишняя запятая в конце была удалена|лишних запятых в конце были удалены|лишние запятые в конце были удалены}} из JSON",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|лишняя запятая в конце была удалена|лишние запятые в конце были удалены|лишних запятых в конце были удалены}} из JSON",
        "json-error-unknown": "Имеется проблема с JSON. Ошибка: $1",
        "json-error-depth": "Превышена максимальная глубина стека",
        "json-error-state-mismatch": "Недопустимый или неправильно составленный JSON",
index d25367d..c723ae6 100644 (file)
        "delete-edit-reasonlist": "Едітовати причіны вымазаня",
        "delete-toobig": "Тота сторінка має велику історію едітованя, через $1 {{PLURAL:$1|верзії|верзій|верзій}}. Мазаня такых сторінок є обмеджено, жебы ся заборонило нехоченому нарушіню {{grammar:2sg|{{SITENAME}}}}.",
        "delete-warning-toobig": "Тота сторінка має велику історію едітацій, через $1 {{PLURAL:$1|верзії|верзій|верзій}}. Мазаня такых сторінок може нарушыти датабазовы операцім {{grammar:2sg|{{SITENAME}}}}; мерькуйте.",
+       "deleting-backlinks-warning": "'''Позірь:'''  Сторінка, котру ся рыхтуєте вымазати, є одказована на [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншых сторінках]] ці вложена до них.",
        "rollback": "Вернути назад едітованя",
        "rollback_short": "Вернути назад",
        "rollbacklink": "вернути назад",
index cf0eeaa..cd7d6aa 100644 (file)
        "otherlanguages": "Атын омук тылынан",
        "redirectedfrom": "(Мантан: $1  көстө)",
        "redirectpagesub": "Утаарар сирэй",
+       "redirectto": "Манна утаарыы:",
        "lastmodifiedat": "Бу сирэй бүтэһигин $2, $1 уларыйбыта.",
        "viewcount": "Бу сирэй {{PLURAL:$1|биирдэ|$1 төгүл}} көрүллүбүт.",
        "protectedpage": "Уларытыллыбат сирэй",
        "viewsourcetext": "Эн бу сирэй төрдүн көрүөххүн уонна төгүллүөххүн сөп:",
        "viewyourtext": "'''Бэйэҥ көннөрүүлэриҥ''' исходнигын бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп:",
        "protectedinterface": "Бу сирэй бырагыраамма интерфейсын биллэриитин көрдөрөр, онон моһуогурууттан халытан хатанан турар.\nТылбааһын уларытыаххын баҕарар буоллаххына онно аналлаах тылбаас ситим-сирин туһан: MediaWiki [//translatewiki.net/ translatewiki.net]",
-       "editinginterface": "'''Болҕой:''' Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.\nБу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр бырагыраамма көстүүтэ уларыйыа. \nТылбааһын уларытыаххын эбэтэр эбиэххин баҕарар буоллаххына Медиавики бырайыактарын тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Болҕой:</strong> Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.\nБу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр быраҕыраамма көстүүтэ уларыйыа.",
+       "translateinterface": "Бу биллэриини тылбаастыырга эбэтэр уларытарга, бука диэн, MediaWiki диэн анал тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Бу сирэй уларыйар кыаҕа суох, тоҕо диэтэххэ уларыйара бобуллубут (каскаднай көмүскэл холбоммут) {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:\n$2",
        "namespaceprotected": "Эн '''$1''' аат эйгэтигэр киирэр сирэйдэри уларытар кыаҕыҥ суох.",
        "customcssprotected": "Эн бу CSS-сирэйи уларытар кыаҕыҥ суох, тоҕо диэтэххэ онтуҥ атын киһи тус бэйэтин туруорууларын таарыйар.",
        "createaccount-text": "Ким эрэ {{SITENAME}} бырайыакка ($4) саҥа $2 ааты бэлиэтээбит. \"$2\" киирии тыла \"$3\". Билигин киирэн киирии тылгын уларытыаххын наада.\n\nСаҥа аат сыыһа оҥоһуллубут буоллаҕына тугу да гыныа суоххун сөп.",
        "login-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
        "login-abort-generic": "Бу аатынан сатаан киирбэтиҥ - быстан хаалла",
+       "login-migrated-generic": "Эн бэлиэ-аатыҥ көһөрүллүбүт, онон урукку аатыҥ бу биикигэ суох буолбут эбит.",
        "loginlanguagelabel": "Омугун тыла: $1",
        "suspicious-userlogout": "Сеансы түмүктүүр ыйытыгыҥ ылыныллыбата, тоҕо диэтэххэ браузер эбэтэр кээштыыр прокси алҕас ыыппыт ыйытыктарыгар майгынныыр.",
        "createacct-another-realname-tip": "Дьиҥнээх аатыҥ булгуччута суох.\nЫйдаххына уларыппыт сирэйиҥ устуоруйатыгар көстөр буолуоҕа.",
        "showpreview": "Уларытыах иннинэ көрүү",
        "showdiff": "Уларытыылар",
        "blankarticle": "<strong>Сэрэтии:</strong> Оҥорор сирэйиҥ кураанах.\nБу тимэҕи «{{int:savearticle}}» хос баттаатаххына кураанах сирэй оҥоһуллуо.",
-       "anoneditwarning": "'''Болҕой:''' Системаҕа киирбэтэххин. Онон аатыҥ оннугар IP аадаырыһыҥ бу сирэй историятыгар киириэ.",
+       "anoneditwarning": "<strong>Болҕой:</strong> Киирбэтэххин. Онон тугу эрэ уларытар түгэҥҥэр аатыҥ оннугар IP аадырыһыҥ барыларыгар көстүө. бу сирэй историятыгар киириэ. Өскөтө <strong>[$1 киирдэххинэ]</strong> эбэтэр <strong>[$2 бэлиэтэннэххинэ]</strong> уларытыыларыҥ Эн ааккын кытта ситимнэниэхтэрэ, ону таһынан ол атын да көдьүүстэрдээх буолуоҕа.",
        "anonpreviewwarning": "''Эн тиһиккэ ааккын эппэттэххин. Уларытыыгын бигэргэттэххинэ IP-аадырыһыҥ сирэй устуоруйатыгар суруллуо.''",
        "missingsummary": "'''Санатыы:''' Уларыппытыҥ кылгас быһаарыытын суруйбатаххын. Уларытыыны бигэргэттэххинэ улартытыыҥ хос быһаарыыта суох барыа.",
        "missingcommenttext": "Манна хос быһаарыыны суруй.",
        "content-model-text": "көннөрү тиэкис",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Халыыптары ыҥырарга хатыланар аргуменнардаах сирэйдэр",
+       "duplicate-args-category-desc": "Халыыптары ыҥырарга хатыланар аргуменнардаах сирэйдэр, холобур маннык <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Болҕой. Бу сирэй наһаа элбэх көмпүүтэри ноҕуруускалыыр ресурсаларга сигэнэр.\n\n{{PLURAL:$2|Сигэнии ахсаана|Сигэниилэр ахсааннара}} мантан тахсыа суохтаах - $2, билигин {{PLURAL:$1|$1 сигэниилээх|$1 сигэниилэрдээх}}.",
        "expensive-parserfunction-category": "Көмпүүтэри ноҕуруускалыыр ресурсаларга наһаа элбэхтик сигэнэр сирэйдэр",
        "post-expand-template-inclusion-warning": "Болҕой: Киллэрэр халыыптарыҥ ыйааһыннара наһаа улахан.\nОнон сорох халыыптар киллэриллиэхтэрэ суоҕа.",
        "mergehistory-empty": "Биир да барыл силлиһэр кыаҕа суох.",
        "mergehistory-success": "$3 {{PLURAL:$3|барыл|барыллар}} [[:$1]] биир [[:$2]] барылга силлистилэр.",
        "mergehistory-fail": "Сирэй устуоруйалара кыайан холбоспотулар, өссө биирдэ торумнар бириэмэлэрин уонна сирэй параметрдарын бэрэбиэркэлээ.",
+       "mergehistory-fail-toobig": "Устуоруйаны холбуур табыллыбата, тоҕо диэтэххэ $1  барылга көҥүллэнэр лимииттэн элбэҕи көһөрөр наада эбит.",
        "mergehistory-no-source": "Бастакы $1 сирэй суох.",
        "mergehistory-no-destination": "Баар буолуохтаах $1 сирэй суох.",
        "mergehistory-invalid-source": "Источнигыҥ сөптөөх ааттаах буолуохтаах.",
        "search-result-category-size": "{{PLURAL:$1|$1 элэмиэн|$1 элэмиэннэр}} ({{PLURAL:$2|$2 субкатегория|$2 субкатегориялар}}, {{PLURAL:$3|$3 билэ|$3 билэлэр}})",
        "search-redirect": "(утаарыы $1)",
        "search-section": "($1 сиэксийэ)",
+       "search-category": "(категория $1)",
        "search-file-match": "(билэ иһинээҕитин кытта сөп түбэһэр)",
        "search-suggest": "Баҕар маннык диэри гыммытыҥ буолуо: $1",
        "search-interwiki-caption": "Уруулуу бырайыактар",
        "license": "Лицензиялааһын:",
        "license-header": "Лицензиялааһын",
        "nolicense": "Талыллыбатах",
+       "licenses-edit": "Лиссиэнсийэ ымпыгын-чымпыгын уларыт",
        "license-nopreview": "(Уларытыыны бигэргэтиэх иннинэ көрүү сатаммат)",
-       "upload_source_url": " (сөптөөх URL, ким баҕарбыт киирэр сирэ)",
-       "upload_source_file": " (билэ көмпүүтэргэр баар)",
+       "upload_source_url": "(сөптөөх URL, ким баҕарбыт киирэр сирин талбыккын)",
+       "upload_source_file": "(көмпүүтэргэр баар билэни талбыккын)",
+       "listfiles-delete": "сотуу",
        "listfiles-summary": "Бу анал сирэй киллэриллибит билэлэри барытын көрдөрөр.",
        "listfiles_search_for": "Миэдьийэни (ойууну) аатынан көрдөтүү:",
        "imgfile": "билэ",
        "randomincategory": "Категория түбэспиччэ ыстатыйата",
        "randomincategory-invalidcategory": "\"$1\" диэн категория суох эбит.",
        "randomincategory-nopages": "Бу категорияҕа [[:Category:$1]] киирэр ыстатыйалар суохтар.",
+       "randomincategory-category": "Категория:",
        "randomredirect": "Түбэспиччэ утаарыы",
        "randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
        "statistics": "Статистика",
        "querypage-disabled": "Бу анал сирэй тиһилик үлэтин түргэтэтээри араарыллыбыт.",
        "booksources": "Кинигэлэр источниктара",
        "booksources-search-legend": "Кинигэ туһунан көрдөө",
+       "booksources-search": "Бул",
        "booksources-text": "Манна кинигэ туһунан атын саайтарга ыйынньыктар хомулуннулар, онно баҕар эбии информация көстүөҕэ.",
        "booksources-invalid-isbn": "ISBN, арааһа, сыыһалаах. Нүөмэр көһөрөргө алҕас тахсыбатаҕын хат көр эрэ.",
        "specialloguserlabel": "Толорооччу:",
        "expand_templates_remove_nowiki": "Түмүккэ <nowiki> бэлиэни аахсыма",
        "expand_templates_generate_xml": "XML-ы мас курдук көрдөр",
        "expand_templates_generate_rawhtml": "HTML-ы көрдөр",
-       "expand_templates_preview": "Холоон көрүү"
+       "expand_templates_preview": "Холоон көрүү",
+       "pagelang-name": "Сирэй",
+       "pagelang-language": "Омугун тыла",
+       "pagelang-use-default": "Сүрүн тылы тутун",
+       "pagelang-select-lang": "Тылы талыы",
+       "right-pagelang": "Сирэй тылын уларыт",
+       "action-pagelang": "сирэй тылын уларытар буол",
+       "log-name-pagelang": "Тылы уларытыы сурунаала",
+       "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME көрүҥэ",
+       "mediastatistics-table-count": "Билэ ахсаана",
+       "mediastatistics-table-totalbytes": "Барытын кээмэйэ",
+       "mediastatistics-header-unknown": "Биллибэт",
+       "mediastatistics-header-bitmap": "Растр ойуулар",
+       "mediastatistics-header-drawing": "Уруһуйдар (вектор ойуулар)",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-office": "Офис",
+       "mediastatistics-header-text": "Тиэкис",
+       "mediastatistics-header-executable": "Толоруллар",
+       "mediastatistics-header-archive": "Ыгыллыбыт формааттар",
+       "json-warn-trailing-comma": "JSON иһиттэн $1 ордук соппутуой сотуллубут"
 }
index 9a07fce..8bb2d3f 100644 (file)
@@ -2,18 +2,28 @@
        "@metadata": {
                "authors": [
                        "Aursani",
-                       "아라"
+                       "아라",
+                       "Fayazburiro"
                ]
        },
-       "tog-showtoolbar": "سنوارپ اوزار دٻي ڏيکاريو (جاوا اسڪرپٽ)",
-       "tog-watchcreations": "منهنجا سرجيل صفحا منهنجي ٽيٽ فهرست ۾ رکو",
-       "tog-watchdefault": "منهنجا ترميميل صفحا منهنجي ٽيٽ فهرست تي رکو",
+       "tog-underline": "هيٺان ڏنل لڪير واري لنڪ",
+       "tog-hideminor": "تازيون ننڍيون تبدليون لڪايو",
+       "tog-hidepatrolled": "تازيون گھميل تبديليون لڪايو",
+       "tog-newpageshidepatrolled": "نئين صفحن تان تازي گھميل صفحي جي لسٽ لڪايو",
+       "tog-numberheadings": "خودڪار نمبرن واري هيڊنگ",
+       "tog-showtoolbar": "ايڊٽ بار ڏيکاريو",
+       "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا ايڊت ڪيو",
+       "tog-watchcreations": "منهنجا سرجيل صفحا منهنجي نهار فهرست ۾ رکو",
+       "tog-watchdefault": "منهنجا ترميميل صفحا منهنجي نهار فهرست تي رکو",
        "tog-watchdeletion": "آئون جيڪي صفحا ڊاهيان، سي منهنجي ٽيٽ فهرست تي رکو",
+       "tog-watchrollback": "انهن صفحن کي منهنجي ٽيٽ فهرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي.",
        "tog-previewontop": "ترميمي باڪس مٿان پيش نگاهه ڏيکاريو",
        "tog-previewonfirst": "پهرين ترميم تي پيش نگاهه ڏيکاريو",
        "tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برق ٽپال اماڻيو",
-       "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ به مون کي برق ٽپال ڪريو",
+       "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برق ٽپال ڪريو",
        "tog-shownumberswatching": "ٽيٽيندڙ يوزرس جو تعداد ڏيکاريو",
+       "tog-oldsig": "موجوده دستخط",
+       "tog-watchlisthideliu": "لاگ اِن ٿيل يوزرس جون ڪيل ترميمون ٽيٽ فهرست ۾ نہ ڏيکاريو",
        "tog-ccmeonemails": "ٻين يوزرس ڏانهن منهنجي موڪليل برق ٽپال جو پرت مون کي اماڻيو",
        "tog-diffonly": "تفاوت هيٺان صفحي جو مواد نه ڏيکاريو",
        "tog-showhiddencats": "لڪل زمرا ڏيکاريو",
        "oct": "آڪٽوبر",
        "nov": "نومبر",
        "dec": "ڊسمبر",
+       "january-date": "جنوري $1",
+       "february-date": "فيبروري $1",
+       "march-date": "مارچ $1",
+       "april-date": "اپريل $1",
+       "may-date": "مَي $1",
+       "june-date": "جُون $1",
+       "july-date": "جُولاءِ $1",
+       "august-date": "آگسٽ $1",
+       "september-date": "سيپٽمبر $1",
+       "october-date": "آڪٽوبر $1",
+       "november-date": "نَوِمبر $1",
+       "december-date": "ڊسمبر $1",
        "category_header": "\"$1\" زمري جا صفحا",
        "subcategories": "ذيلي زمرا",
        "category-media-header": " \"$1\" زمري اندر ذريعات",
        "cancel": "رد",
        "moredotdotdot": "اڃا...",
        "mypage": "منهنجو صفحو",
-       "mytalk": "مون سان ڳالهه",
+       "mytalk": "ڳاله ٻوله",
        "and": "&#32;۽",
        "qbfind": "ڳوليو",
        "qbbrowse": "جھانگيو",
        "printableversion": "ڇپائتو پرت",
        "permalink": "مسقتل ڳنڍڻو",
        "print": "ڇاپيو",
+       "view": "نگاهہ",
        "edit": "سنواريو",
+       "edit-local": "مقامي وضاحت کي ترميميو",
        "create": "سرجيو",
        "editthispage": "هيءُ صفحو سنواريو",
        "create-this-page": "اهو صفحو نئين سر جوڙيو",
        "delete": "ڊاھيو",
        "deletethispage": "هيءُ صفحو ڊاهيو",
+       "undeletethispage": "هيءُ صفحو اڻ ڊاهيو",
        "undelete_short": "اڻڊاهيو {{PLURAL:$1|هڪ ترميم|$1 ترميمون}}",
        "protect": "تحفظيو",
+       "protect_change": "تبديل ڪريو",
        "protectthispage": "هيءُ صفحو تحفظيو",
-       "unprotect": "اڻتحÙ\81ظيو",
-       "unprotectthispage": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ø§Ú»ØªØ­Ù\81ظيو",
+       "unprotect": "Ø­Ù\81اظت Ù\85Ù½يو",
+       "unprotectthispage": "Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø¬Ù\8a Ø­Ù\81اظت Ù\85Ù½يو",
        "newpage": "نئون صفحو",
        "talkpage": "هن صفحي تي بحث ڪريو",
        "talkpagelinktext": "بحث",
        "articlepage": "مسودو ڏسو",
        "talk": "بحث",
        "views": "ڏيٺون",
-       "toolbox": "اوزاردٻي",
+       "toolbox": "ٽولَ",
        "userpage": "يوزر صفحو ڏسو",
        "projectpage": "رٿائي صفحو ڏسو",
        "imagepage": "ذريعاتي صفحو ڏسو",
        "otherlanguages": "ٻين ٻولين ۾",
        "redirectedfrom": "($1 کان چوريل)",
        "redirectpagesub": "چوريل صفحو",
+       "redirectto": "منتقل ڪيو",
        "lastmodifiedat": "هيءُ صفحو آخري ڀيرو $2، $1ع تي ترميميو ويو هو.",
        "viewcount": "هيءُ صفحو {{PLURAL:$1|دفعو|$1 دفعا}} ڏسجي چڪو آهي.",
        "protectedpage": "تحفظيل صفحو",
+       "jumpto": "ڏانهن ٽپ ڏيو",
+       "jumptonavigation": "رهنمائي",
        "jumptosearch": "ڳولا",
+       "generic-pool-error": "معذرت سان سرور هاڻي تمام گھڻو سُڪ آهي.\nتمام گھڻا يوزر هتي موجود آهن.\nمهرباني ڪري ٿورو ترسي پوءِ ڪوشش ڪريو.",
+       "pool-errorunknown": "اڻ ڄاتل چُڪَ",
        "aboutsite": "{{SITENAME}} بابت",
        "aboutpage": "Project:بابت",
        "copyright": "سمورو مواد $1 تحت ميسر ڪجي ٿو",
        "portal-url": "Project:نياتي باب",
        "privacy": "ذاتيات پاليسي",
        "privacypage": "Project:ذاتيات پاليسي",
+       "badaccess": "اجازتنامہ چُڪَ",
        "ok": "ٺيڪ",
        "retrievedfrom": "\"$1\" تان ورتل",
        "youhavenewmessages": "توهان لاءِ $1 ($2) آهن.",
+       "youhavenewmessagesmulti": "$1 تي توهان لاءِ نوان نياپا آهن",
        "editsection": "سنواريو",
        "editold": "سنواريو",
        "viewsourceold": "ڪوڊ ڏسو",
        "toc": "فهرست",
        "showtoc": "ڏيکاريو",
        "hidetoc": "لڪايو",
+       "confirmable-yes": "ها",
+       "confirmable-no": "نه",
        "viewdeleted": "$1 ڏسندا؟",
        "feedlinks": "روان رسد:",
        "site-rss-feed": "$1 آر ايس ايس روان رسد",
index ea52ce1..967b679 100644 (file)
        "actionthrottledtext": "Ako opatrenie proti spamu je počet vykonaní tejto činnosti za určitý čas obmedzený. Tento limit ste prekročili. Prosím, skúste to znova o niekoľko minút.",
        "protectedpagetext": "Táto stránka bola zamknutá aby sa zamedzilo úpravám.",
        "viewsourcetext": "Môžete si zobraziť a kopírovať zdroj tejto stránky:",
-       "viewyourtext": "Môžete si prehliadnuť a skopírovať zdrojový kód '''vašich zmien''' tejto stránky:",
+       "viewyourtext": "Môžete si prehliadnuť a skopírovať zdrojový kód <strong>vašich úprav</strong> tejto stránky:",
        "protectedinterface": "Táto stránka poskytuje text používateľského rozhrania tejto wiki a je zamknutá, aby sa predišlo jej zneužitiu.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
        "editinginterface": "'''Upozornenie:''' Upravujete stránku, ktorá poskytuje text používateľského rozhrania.\nZmeny tejto stránky ovplyvnia vzhľad používateľského rozhrania ostatným používateľom.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
        "cascadeprotected": "Táto stránka bola zamknutá proti úpravám, pretože je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá je zamknutá|nasledovných stránkach, ktoré sú zamknuté}} voľbou „kaskádového zamknutia“:\n$2",
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "duplicate-args-category": "Stránky s duplicitním voláním parametru šablony",
+       "duplicate-args-category": "Stránky s duplicitnými parametrami pri volaniach šablón",
+       "duplicate-args-category-desc": "Stránka obsahuje volania šablóny používajúce duplicitné parametere, ako napríklad <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> alebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Upozornenie: Táto stránka obsahuje príliš mnoho volaní funkcií syntaktického analyzátora, ktoré nadmerne zaťažujú server.\n\nObsahuje $1 {{PLURAL:$1|volanie|volania|volaní}}. Mala by obsahovať menej ako $2 {{PLURAL:$1|volanie|volania|volaní}}.",
        "expensive-parserfunction-category": "Stránky s príliš veľkým počtom volaní funkcií syntaktického analyzátora",
        "post-expand-template-inclusion-warning": "Upozornenie: Vkladaná šablóna je príliš veľká.\nNiektoré zo šablón nebudú vložené.",
        "action-viewmywatchlist": "zobraziť zoznam sledovaných stránok",
        "action-viewmyprivateinfo": "zobraziť vaše súkromné údaje",
        "action-editmyprivateinfo": "upraviť vaše súkromné údaje",
-       "nchanges": "$1 {{PLURAL:$1|zmena|zmeny|zmien}}",
+       "nchanges": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od poslednej návštevy}}",
        "enhancedrc-history": "história",
        "recentchanges": "Posledné úpravy",
        "watchlist-details": "{{PLURAL:$1|Jedna sledovaná stránka|$1 sledované stránky|$1 sledovaných stránok}}, nepočítajúc diskusné stránky.",
        "wlheader-enotif": "Upozorňovanie e-mailom je zapnuté.",
        "wlheader-showupdated": "Stránky, ktoré boli zmenené od vašej poslednej návštevy sú zobrazené '''tučne'''.",
-       "wlnote": "Nižšie {{PLURAL:$1|je posledná jedna zmena|sú posledné '''$1''' zmeny|je posledných '''$1''' zmien}} za {{PLURAL:$2|poslednú hodinu|posledné '''$2''' hodiny|posledných '''$2''' hodín}} do $4, $3.",
+       "wlnote": "Nižšie {{PLURAL:$1|je posledná úprava|sú posledné <strong>$1</strong> úpravy|je posledných <strong>$1</strong> úprav}} za {{PLURAL:$2|poslednú hodinu|posledné <strong>$2</strong> hodiny|posledných <strong>$2</strong> hodín}} do $4, $3.",
        "wlshowlast": "Zobraziť posledných $1 hodín $2 dní",
        "watchlist-options": "Nastavenia zoznamu sledovaných",
        "watching": "Pridávam do zoznamu sledovaných...",
        "markaspatrolledtext": "Označiť túto stránku ako stráženú",
        "markedaspatrolled": "Označené ako strážené",
        "markedaspatrolledtext": "Vybraná verzia [[:$1]] bola označená ako strážená.",
-       "rcpatroldisabled": "Stráženie posledných zmien bolo vypnuté",
-       "rcpatroldisabledtext": "Funkcia stráženia posledných zmien je momentálne vypnutá.",
+       "rcpatroldisabled": "Stráženie posledných úprav bolo vypnuté",
+       "rcpatroldisabledtext": "Funkcia stráženia posledných úprav je momentálne vypnutá.",
        "markedaspatrollederror": "Nie je možné označiť ako strážené",
        "markedaspatrollederrortext": "Pre označenie ako strážený je potrebné uviesť revíziu, ktorá sa má označiť ako strážená.",
-       "markedaspatrollederror-noautopatrol": "Nie je vám umožnené označiť vlastné zmeny za strážené.",
+       "markedaspatrollederror-noautopatrol": "Nie je vám umožnené označiť vlastné úpravy za strážené.",
        "markedaspatrollednotify": "Táto zmena stránky $1 bola označená ako strážená.",
        "markedaspatrollederrornotify": "Označenie ako strážená zlyhalo.",
        "patrol-log-page": "Záznam strážení",
        "blankpage": "Prázdna stránka",
        "intentionallyblankpage": "Táto stránka je zámerne prázdna. Používa sa na meranie výkonnosti atď.",
        "external_image_whitelist": "  #Nechajte tento riadok presne tak, ako je<pre>\n#Časti regulárnych výrazov (tie, ktoré sa píšu medzi //) napíšte dolu\n#Budú porovnané s URL externých obrázkov\n#Tie, ktoré budú zodpovedať reg. výrazu sa zobrazia ako obrázky, inak sa zobrazí iba odkaz na obrázok\n#Riadky, ktoré začínajú znakom # sa považujú za komentáre\n#Na veľkosti písmen nezáleží\n\n#Napíšte všetky časti reg. výrazov nad tento riadok. Nechajte tento riadok presne tak, ako je</pre>",
-       "tags": "Platné označenia úprav",
+       "tags": "Platné značky úprav",
        "tag-filter": "Filter [[Special:Tags|značiek]]:",
        "tag-filter-submit": "Filter",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Značka|Značky}}]]: $2)",
        "tags-title": "Značky",
-       "tags-intro": "Táto stránka obsahuje zoznam značiek, s ktorým softvér môže pracovať a upravovať ich a ich význam.",
+       "tags-intro": "Táto stránka obsahuje zoznam a význam značiek, ktorými môže softvér označovať jednotlivé úpravy.",
        "tags-tag": "Názov značky",
        "tags-display-header": "Vzhľad v zoznamoch úprav",
-       "tags-description-header": "Úplný popis významu",
-       "tags-active-header": "Aktívny?",
-       "tags-hitcount-header": "OznaÄ\8dené Ãºpravy",
+       "tags-description-header": "Popis významu",
+       "tags-active-header": "Aktívna?",
+       "tags-hitcount-header": "OznaÄ\8dených Ãºprav",
        "tags-active-yes": "Áno",
        "tags-active-no": "Nie",
        "tags-edit": "upraviť",
-       "tags-hitcount": "$1 {{PLURAL:$1|zmena|zmeny|zmien}}",
+       "tags-hitcount": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
        "comparepages": "Porovnať stránky",
        "compare-page1": "Stránka 1",
        "compare-page2": "Stránka 2",
index 7ec317a..6e39183 100644 (file)
        "search-result-category-size": "$1 {{PLURAL:$1|član|člana|člani|članov}} ($1 {{PLURAL:$2|podkategorija|podkategoriji|podkategorije|podkategorij}}, $1 {{PLURAL:$3|datoteka|datoteki|datoteke|datotek}})",
        "search-redirect": "(preusmeritev $1)",
        "search-section": "(razdelek $1)",
+       "search-category": "(kategorija $1)",
        "search-file-match": "(ujema se z vsebino datoteke)",
        "search-suggest": "Iščete morda: $1",
        "search-interwiki-caption": "Sorodni projekti",
        "api-error-stashfailed": "Notranja napaka: strežnik ni uspel shraniti začasne datoteke.",
        "api-error-publishfailed": "Notranja napaka: strežnik ni uspel objaviti začasne datoteke.",
        "api-error-stasherror": "Pri nalaganju datoteke v hrambo je prišlo do napake.",
+       "api-error-stashedfilenotfound": "Datoteke iz skrite shrambe med poskusom nalaganja iz skrite shrambe nismo našli.",
+       "api-error-stashpathinvalid": "Pot, na kateri naj bi bila datoteka iz skrite shrambe, ni veljavna.",
+       "api-error-stashfilestorage": "Pri shranjevanju datoteke v skrito shrambo je prišlo do napake.",
+       "api-error-stashzerolength": "Strežnik ni mogel dati datoteke v skrito shrambo, ker ima ničelno dolžino.",
+       "api-error-stashnotloggedin": "Da lahko shranite datoteke v skrito shrambo nalaganja, morate biti prijavljeni.",
+       "api-error-stashwrongowner": "Datoteka, do katere ste poskušali dostopati v skriti shrambi, ne pripada vam.",
+       "api-error-stashnosuchfilekey": "Datoteka, do katere ste poskušali dostopati v skriti shrambi, ne obstaja.",
        "api-error-timeout": "Strežnik se ni odzval v pričakovanem času.",
        "api-error-unclassified": "Prišlo je do neznane napake",
        "api-error-unknown-code": "Neznana napaka: »$1«",
index 3f6ce53..bf93633 100644 (file)
        "parser-unstrip-loop-warning": "Утврђена је петља",
        "parser-unstrip-recursion-limit": "Прекорачено је ограничење рекурзије ($1)",
        "converter-manual-rule-error": "Пронађена је грешка у правилу за ручно претварање језика",
-       "undo-success": "Измена се може вратити.\nПроверите разлике испод па сачувајте измене.",
+       "undo-success": "Измена се може вратити.\nПроверите разлике испод, па сачувајте измене.",
        "undo-failure": "Ова измена се не може поништити због сукоба измена.",
        "undo-norev": "Не могу да вратим измену јер не постоји или је обрисана.",
        "undo-nochange": "Изгледа да је измена већ поништена.",
        "emailsubject": "Наслов:",
        "emailmessage": "Порука:",
        "emailsend": "Пошаљи",
-       "emailccme": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ð¿Ñ\80имеÑ\80ак Ð¿Ð¾Ñ\80Ñ\83ке Ðµ-поÑ\88Ñ\82ом",
-       "emailccsubject": "Ð\9fÑ\80имеÑ\80ак Ð²Ð°Ñ\88е Ð¿Ð¾Ñ\80Ñ\83ке Ð·Ð° $1: $2",
+       "emailccme": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ ÐºÐ¾Ð¿Ð¸Ñ\98Ñ\83 Ð¿Ð¾Ñ\80Ñ\83ке Ð½Ð° Ð¼Ð¾Ñ\98Ñ\83 Ðµ-поÑ\88Ñ\82Ñ\83.",
+       "emailccsubject": "Ð\9aопиÑ\98а Ð²Ð°Ñ\88е Ð¿Ð¾Ñ\80Ñ\83ке ÐºÐ¾Ñ\80иÑ\81никÑ\83 $1: $2",
        "emailsent": "Порука је послата",
-       "emailsenttext": "Ð\92аÑ\88а Ð¿Ð¾Ñ\80Ñ\83ка Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а Ðµ-поÑ\88Ñ\82ом.",
+       "emailsenttext": "Ð\92аÑ\88а Ðµ-поÑ\80Ñ\83ка Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а.",
        "emailuserfooter": "Ову е-поруку је {{GENDER:|послао|послала|послао}} $1 кориснику $2 путем е-поште с викија {{SITENAME}}.",
        "usermessage-summary": "Слање системске поруке.",
        "usermessage-editor": "Уређивач системских порука",
        "deletepage": "Обриши страницу",
        "confirm": "Потврди",
        "excontent": "садржај је био: „$1“",
-       "excontentauthor": "садржај је био: „$1“ (а једини уредник је био „[[Special:Contribs/$2|$2]]“)",
+       "excontentauthor": "садржај је био: „$1“ (а једини уредник [[Special:Contribs/$2|$2]])",
        "exbeforeblank": "садржај пре брисања је био: „$1“",
        "delete-confirm": "Брисање странице „$1“",
        "delete-legend": "Обриши",
        "movepage-moved": "'''„$1“ је премештена на „$2“'''",
        "movepage-moved-redirect": "Преусмерење је направљено.",
        "movepage-moved-noredirect": "Стварање преусмерења је онемогућено.",
-       "articleexists": "Страница с тим именом већ постоји или је име неисправно.\nИзаберите друго име.",
+       "articleexists": "Страница с тим именом већ постоји, или је име неисправно.\nИзаберите друго име.",
        "cantmove-titleprotected": "Не можете да преместите страницу на то место јер је жељени наслов заштићен од стварања",
        "movetalk": "Премести и страницу за разговор",
        "move-subpages": "Премести и подстранице (до $1)",
        "logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} страницу $3",
        "logentry-delete-restore": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3",
        "logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4",
-       "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|$5 измене|$5 измена|1=измене}} на страници $3: $4",
+       "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|$5 измене|$5 измена|1=једне измене}} на страници $3: $4",
        "logentry-delete-event-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику на $3",
        "logentry-delete-revision-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
        "logentry-suppress-delete": "$1 је {{GENDER:$2|потиснуо|потиснула}} страницу $3",
index 71a4e84..fe87203 100644 (file)
        "parser-unstrip-loop-warning": "Utvrđena je petlja",
        "parser-unstrip-recursion-limit": "Prekoračeno je ograničenje rekurzije ($1)",
        "converter-manual-rule-error": "Pronađena je greška u pravilu za ručno pretvaranje jezika",
-       "undo-success": "Izmena se može vratiti.\nProverite razlike ispod pa sačuvajte izmene.",
+       "undo-success": "Izmena se može vratiti.\nProverite razlike ispod, pa sačuvajte izmene.",
        "undo-failure": "Ova izmena se ne može poništiti zbog sukoba izmena.",
        "undo-norev": "Ne mogu da vratim izmenu jer ne postoji ili je obrisana.",
        "undo-nochange": "Izgleda da je izmena već poništena.",
        "emailsubject": "Naslov:",
        "emailmessage": "Poruka:",
        "emailsend": "Pošalji",
-       "emailccme": "Pošalji mi primerak poruke e-poštom",
-       "emailccsubject": "Primerak vaše poruke za $1: $2",
+       "emailccme": "Pošalji mi kopiju poruke na moju e-poštu.",
+       "emailccsubject": "Kopija vaše poruke korisniku $1: $2",
        "emailsent": "Poruka je poslata",
-       "emailsenttext": "Vaša poruka je poslata e-poštom.",
+       "emailsenttext": "Vaša e-poruka je poslata.",
        "emailuserfooter": "Ovu e-poruku je {{GENDER:|poslao|poslala|poslao}} $1 korisniku $2 putem e-pošte s vikija {{SITENAME}}.",
        "usermessage-summary": "Slanje sistemske poruke.",
        "usermessage-editor": "Uređivač sistemskih poruka",
        "deletepage": "Obriši stranicu",
        "confirm": "Potvrdi",
        "excontent": "sadržaj je bio: „$1“",
-       "excontentauthor": "sadržaj je bio: „$1“ (a jedini urednik je bio „[[Special:Contribs/$2|$2]]“)",
+       "excontentauthor": "sadržaj je bio: „$1“ (a jedini urednik [[Special:Contribs/$2|$2]])",
        "exbeforeblank": "sadržaj pre brisanja je bio: „$1“",
        "delete-confirm": "Brisanje stranice „$1“",
        "delete-legend": "Obriši",
        "movepage-moved": "'''„$1“ je premeštena na „$2“'''",
        "movepage-moved-redirect": "Preusmerenje je napravljeno.",
        "movepage-moved-noredirect": "Stvaranje preusmerenja je onemogućeno.",
-       "articleexists": "Stranica s tim imenom već postoji ili je ime neispravno.\nIzaberite drugo ime.",
+       "articleexists": "Stranica s tim imenom već postoji, ili je ime neispravno.\nIzaberite drugo ime.",
        "cantmove-titleprotected": "Ne možete da premestite stranicu na to mesto jer je željeni naslov zaštićen od stvaranja",
        "movetalk": "Premesti i stranicu za razgovor",
        "move-subpages": "Premesti i podstranice (do $1)",
        "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|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja|$5 događaja}} u dnevniku na $3: $4",
-       "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|$5 izmene|$5 izmena|1=izmene}} na stranici $3: $4",
+       "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|$5 izmene|$5 izmena|1=jedne izmene}} na stranici $3: $4",
        "logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku na $3",
        "logentry-delete-revision-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
        "logentry-suppress-delete": "$1 je {{GENDER:$2|potisnuo|potisnula}} stranicu $3",
index 97af5eb..012b957 100644 (file)
        "morenotlisted": "Ieu béréndélan tacan lengkep.",
        "mypage": "Kaca",
        "mytalk": "Obrolan",
-       "anontalk": "Obrolan pikeun IP ieu",
+       "anontalk": "Obrolan pikeun alamat IP ieu",
        "navigation": "Pituduh",
        "and": "&#32;jeung",
        "qbfind": "Panggihan",
        "viewyourtext": "Anjeun bisa némbongkeun sarta nyalin sumber '''éditan anjeun''' ka ieu kaca:",
        "protectedinterface": "Kaca ieu eusina teks antarmuka pikeun dipaké ku pakakas beyé sarta geus dikunci pikeun ngahindar ti kasalahan.",
        "editinginterface": "'''Awas:''' Anjeun keur ngédit kaca nu dipaké pikeun nyadiakeun téks antarmuka pikeun sopwérna.\nParobahan kana ieu kaca bakal mangaruhan pidangan antarmuka pikeun pamaké séjén.\nPikeun alihbasa, mangga sumping ka [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], proyék lokalisasi MediaWiki.",
+       "translateinterface": "Pikeun nambahkeun atawa ngarobah tarjamah keur sakabéh wiki, paké [//translatewiki.net/ translatewiki.net], proyék lokalisasi MediaWiki.",
        "cascadeprotected": "Kaca ieu geus dikonci ti éditan alatan disartakeun di {{PLURAL:$1|kaca|kaca-kaca}} katut anu geus dikonci kalawan pilihan \"runtun\": $2",
        "namespaceprotected": "Anjeun teu ngabogaan hak pikeun ngédit kaca di ngaranspasi '''$1'''.",
        "customcssprotected": "Anjeun teu teu diwenangkeun pikeun ngédit ieu kaca CSS, sabab ngandung setélan pribadi kontributor séjén.",
        "noemail": "Teu aya alamat surélék karékam pikeun \"$1\".",
        "noemailcreate": "Anjeun kudu nyadiakeun alamat surélék anu bener",
        "passwordsent": "Sandi anyar geus dikirim ka alamat surélék nu kadaptar pikeun \"$1\". Mangga asup log deui satutasna katarima.",
-       "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk, moal bisa ngédit, and so\nis not allowed to use the password recovery function to prevent abuse.",
+       "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk tina kabisa ngédit, sarta moal bisa maké fungsi ganti kecap sandi ngarah hanteu disalahgunakeun.",
        "eauthentsent": "Surélék konfirmasi geus dikirim ka alamat bieu.\nMéméh aya surat séjén asup ka akunna, anjeun kudu nuturkeun pituduh dina surélékna pikeun mastikeun yén akun éta téh bener boga anjeun.",
        "throttled-mailpassword": "Surélék pikeun ngarobah kecap sandi geus dikirim {{PLURAL:$1|jam|$1 jam}} kaliwat.\nNgarah hanteu disalahgunakeun, ngan hiji surélék anu bakal dikirim saban {{PLURAL:$1|jam|$1 jam}}.",
        "mailerror": "Kasalahan ngirim surat: $1",
        "resetpass-temp-password": "Sandi samentara:",
        "resetpass-expired": "Kecap sandi anjeun geus kadaluwarsa. Mangga jieun anu anyar pikeun asup log.",
        "passwordreset": "Setél ulang sandi",
+       "passwordreset-text-one": "Eusian formulir ieu pikeun ngirimkeun kecap sandi saheulaanan kana surélék.",
        "passwordreset-legend": "Setél ulang sandi",
        "passwordreset-disabled": "Dina ieu wiki, sandi teu bisa disetél ulang.",
+       "passwordreset-emaildisabled": "Fitur surélék ditumpurkeun di ieu wiki.",
        "passwordreset-username": "Sandiasma:",
        "passwordreset-domain": "Domain:",
        "passwordreset-capture": "Témbongkeun surat-é hasilna?",
        "preview": "Pramidang",
        "showpreview": "Témbongkeun pramidang",
        "showdiff": "Témbongkeun parobahan",
-       "anoneditwarning": "'''Perhatosan:''' Anjeun can asup log. IP anjeun kacatet dina jujutan kaca ieu",
+       "blankarticle": "<strong>Awas:</strong> Kaca anu dijieun ku anjeun kosong kénéh.\nUpama anjeun ngaklik \"{{int:savearticle}}\" deui, kacana bakal dijieun tanpa eusi.",
+       "anoneditwarning": "<strong>Awas:</strong> Anjeun can asup log. Lamun ngédit, alamat IP anjeun bakal katempo ku balaréa. Lamun anjeun <strong>[$1 asup log]</strong> atawa <strong>[$2 nyieun akun]</strong>, ngaran anjeun bakal natrat dina jujutan éditanana, kalayan sababaraha kauntungan lianna.",
        "anonpreviewwarning": "\"Anjeun can asup log. Mun disimpen, alamat IP anjeun bakal kacatet dina jujutan ieu kaca.\"",
        "missingsummary": "'''Pépéling:''' Anjeun can ngeusian sari éditan. Mun anjeun ngaklik deui Simpen, éditan anjeun bakal disimpen tanpa sari éditan",
        "missingcommenttext": "Mangga tulis koméntar di handapeun ieu.",
        "filehist-comment": "Kamandang",
        "imagelinks": "Pamakéan berkas",
        "linkstoimage": "Kaca ieu  {{PLURAL:$1|numbu|$1 numbu}} ka gambar ieu :",
-       "nolinkstoimage": "Teu aya kaca nu numbu ka gambar ieu.",
+       "nolinkstoimage": "Teu aya kaca anu nutumbu ka ieu berkas.",
        "sharedupload": "Ieu koropak téh ti $1 nu bisa jadi dipaké ku proyék-proyék lianna.",
        "sharedupload-desc-here": "Ieu berkas asalna ti $1 anu bisa jadi dipaké ku proyék séjén. \nPedaran ti [$2 kaca pedaranana] dipidangkeun di handap.",
        "uploadnewversion-linktext": "ngamuatkeun vérsi anyar koropak ieu",
        "sp-contributions-talk": "obrolan",
        "sp-contributions-userrights": "ngatur hak pamaké",
        "sp-contributions-blocked-notice": "Ieu pamaké keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
+       "sp-contributions-blocked-notice-anon": "Ieu alamat IP keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
        "sp-contributions-search": "Paluruh kontribusi",
-       "sp-contributions-username": "Alamat IP atawa landihan:",
+       "sp-contributions-username": "Alamat IP atawa sandiasma:",
        "sp-contributions-toponly": "Témbongkeun éditan anu révisi panungtung wungkul",
        "sp-contributions-submit": "Paluruh",
-       "whatlinkshere": "Nu numbu ka dieu",
-       "whatlinkshere-title": "Kaca-kaca nu numbu ka \"$1\"",
+       "whatlinkshere": "Anu nutumbu ka dieu",
+       "whatlinkshere-title": "Kaca anu nutumbu ka \"$1\"",
        "whatlinkshere-page": "Kaca:",
        "linkshere": "Kaca di handap ieu numbu ka '''[[:$1]]''':",
-       "nolinkshere": "Euweuh kaca nu numbu ka '''[[:$1]]'''.",
-       "nolinkshere-ns": "Euweuh kaca nu numbu ka '''[[:$1]]''' dina namespace nu dipilih.",
+       "nolinkshere": "Euweuh kaca anu nutumbu ka <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Euweuh kaca anu nutumbu ka <strong>[[:$1]]</strong> dina ruang-nama anu dipilih.",
        "isredirect": "Kaca alihan",
        "istemplate": "ku citakan",
        "isimage": "tutumbu berkas",
        "blockip": "Peungpeuk pamaké",
        "blockip-legend": "Peungpeuk pamaké",
        "blockiptext": "Paké formulir di handap pikeun meungpeuk aksés nulis ti alamat IP atawa ngaran pamaké husus. Ieu sakuduna ditujukeun pikeun nyegah vandalisme, sarta saluyu jeung [[{{MediaWiki:Policy-url}}|kawijakan]]. Eusi alesan nu jéntré (misal, ngarujuk kaca tinangtu nu geus diruksak).",
-       "ipaddressorusername": "Alamat IP atawa ngaran pamaké",
+       "ipaddressorusername": "Alamat IP atawa sandiasma:",
        "ipbexpiry": "Kadaluarsa",
        "ipbreason": "Alesan:",
+       "ipb-hardblock": "Nyegah pamaké anu asup log pikeun ngédit ti ieu alamat IP",
        "ipbcreateaccount": "Tong bisa nyieun rekening",
        "ipbemailban": "Henteu kaci pamaké ngirimkeun surélék",
        "ipbenableautoblock": "Peungpeuk sacara otomatis alamat IP anu panungtungan dipaké ku pamaké sarta sakabéh alamat IP anu kungsi dipaké.",
        "ip_range_invalid": "Angka IP teu bener.",
        "proxyblocker": "Pameungpeuk proxy",
        "proxyblockreason": "Alamat IP anjeun dipeungpeuk sabab mangrupa proxy muka. Mangga tepungan ''Internet service provider'' atanapi ''tech support'' anjeun, béjakeun masalah serius ieu.",
-       "sorbsreason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL.",
+       "sorbsreason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL anu dipaké ku {{SITENAME}}.",
        "sorbs_create_account_reason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL. Anjeun teu bisa nyieun rekening",
        "ipbblocked": "Anjeun teu bisa meungpeuk atawa muka peungpeuk séjén kontributor ku sabab anjeun sorangan keur dipeungpeuk",
        "lockdb": "Konci pangkalan data",
        "tooltip-n-recentchanges": "Béréndélan nu anyar robah dina wiki",
        "tooltip-n-randompage": "Muatkeun kaca naon baé",
        "tooltip-n-help": "Tempat pikeun néangan pitulung",
-       "tooltip-t-whatlinkshere": "Daptar kaca-kaca wiki nu numbu ka dieu",
-       "tooltip-t-recentchangeslinked": "Nu anyar robah na kaca-kaca nu numbu ka dieu",
+       "tooltip-t-whatlinkshere": "Béréndélan sakabéh kaca wiki anu nutumbu ka dieu",
+       "tooltip-t-recentchangeslinked": "Anu anyar robah dina kaca-kaca anu nutumbu ti dieu",
        "tooltip-feed-rss": "Asupan RSS pikeun kaca ieu",
        "tooltip-feed-atom": "Asupan atom pikeun kaca ieu",
        "tooltip-t-contributions": "Témbongkeun béréndélan kontribusi ti ieu kontributor",
        "file-info-size-pages": "$1 × $2 pixel, ukuran berkas: $3, tipeu MIME: $4, $5 {{PLURAL:$5|kaca|kaca}}",
        "file-nohires": "Euweuh résolusi nu leuwih luhur.",
        "svg-long-desc": "Koropak SVG, nominalna $1 × $2 piksel, ukuranana $3",
-       "show-big-image": "Résolusi pinuh",
+       "show-big-image": "Berkas asli",
        "show-big-image-preview": "Ukuran ieu pramidang: $1.",
        "show-big-image-other": "Résolusi lianna: $1.",
        "show-big-image-size": "$1 × $2 pixel",
        "exif-orientation-3": "Diputer 180°",
        "exif-orientation-4": "Dibalikkeun vértikal",
        "exif-orientation-5": "Diputer 90° CCW jeung dibalikkeun vértikal",
-       "exif-orientation-6": "Diputer 90° CW",
+       "exif-orientation-6": "Diputer 90° CCW",
        "exif-orientation-7": "Diputer 90° CW jeung dibalikkeun vértikal",
        "exif-orientation-8": "Diputer 90° CCW",
        "exif-planarconfiguration-2": "format datar",
        "version-hook-name": "Ngaran kait",
        "version-hook-subscribedby": "Didaptarkeun ku",
        "version-version": "(Vérsi $1)",
-       "version-license": "Lisénsi",
+       "version-license": "Lisénsi MediaWiki",
        "version-software": "Sopwér nu geus diinstal",
        "version-software-product": "Produk",
        "version-software-version": "Vérsi",
        "fileduplicatesearch-result-1": "Koropak \"$1\" teu boga duplikat idéntik.",
        "fileduplicatesearch-result-n": "Koropak \"$1\" mibanda {{PLURAL:$2|1 duplikat idéntik|$2 duplikat idéntik}}.",
        "specialpages": "Kaca husus",
-       "specialpages-note": "* Kaca husus bisa di buka ku umum.\n* <strong class=\"mw-specialpagerestricted\">Cetak kandel kaca husus nu kawates.</strong>",
+       "specialpages-note": "* Kaca husus normal.\n* <span class=\"mw-specialpagerestricted\">Kaca husus diwates.</span>",
        "specialpages-group-maintenance": "Laporan pigawéeun",
        "specialpages-group-other": "Kaca husus lainna",
-       "specialpages-group-login": "Asup log / Nyieun rekening",
+       "specialpages-group-login": "Asup log / jieun akun",
        "specialpages-group-changes": "Nuanyar robah sarta log",
        "specialpages-group-media": "Laporan sarta muatkeun koropak",
        "specialpages-group-users": "Pamaké sarta hak pamaké",
        "specialpages-group-highuse": "Pamakéan kaca nu badag",
        "specialpages-group-pages": "Daptar kaca",
        "specialpages-group-pagetools": "Parabot kaca",
-       "specialpages-group-wiki": "Data wiki jeung parabot",
+       "specialpages-group-wiki": "Data jeung parabot",
        "specialpages-group-redirects": "Alihan kaca husus",
        "specialpages-group-spam": "Parabot Spam",
        "blankpage": "Kaca kosong",
index a855fc6..6b0bac8 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmar}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})",
        "search-redirect": "(omdirigering $1)",
        "search-section": "(avsnitt $1)",
+       "search-category": "(kategorin $1)",
        "search-file-match": "(överensstämmer filens innehåll)",
        "search-suggest": "Menade du: $1",
        "search-interwiki-caption": "Systerprojekt",
        "ipboptions": "2 timmar:2 hours,1 dygn:1 day,3 dygn:3 days,1 vecka:1 week,2 veckor:2 weeks,1 månad:1 month,3 månader:3 months,6 månader:6 months,1 år:1 year,oändlig:infinite",
        "ipbhidename": "Dölj användarnamnet från redigeringar och listor",
        "ipbwatchuser": "Bevaka användarens användarsida och diskussionssida",
-       "ipb-disableusertalk": "Hindra användaren från att redigera sina egna diskussionssida under blockeringen",
+       "ipb-disableusertalk": "Hindra användaren från att redigera sin egen diskussionssida under blockeringen",
        "ipb-change-block": "Återblockera användaren med de här inställningarna",
        "ipb-confirm": "Bekräfta blockering",
        "badipaddress": "Du har inte skrivit IP-adressen korrekt.",
index 007cc42..9c7d2b9 100644 (file)
        "logentry-newusers-newusers": "பயனர் கணக்கு $1 உருவாக்கப்பட்டது",
        "logentry-newusers-create": "$1 ஒரு புதிய பயனர் கணக்கை உருவாக்கியுள்ளார்.",
        "logentry-newusers-create2": "$3 பயனர் கணக்கினை $1 உருவாக்கினார்",
-       "logentry-newusers-autocreate": "பயணர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
+       "logentry-newusers-autocreate": "பயனர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
        "rightsnone": "(எதுவுமில்லை)",
        "revdelete-summary": "தொகுப்பு சுருக்கத்தை",
        "feedback-bugornote": "நீங்கள் ஒரு தொழில்நுட்பக் கோளாறு குறித்து விரிவாக விளக்க தாயாராக இருந்தால் தயவுசெய்து [ $1  ஒரு bug பற்றி கூறு].\nஇல்லையெனில், நீங்கள் கீழேயுள்ள எளிதான படிவத்தை பயன்படுத்தலாம்.உங்கள் கருத்துரை \"[$3 $2]\" பக்கத்தில் உங்கள் பயனர் பெயர் மற்றும் உங்கள் உலாவியின் பெயருடன் சேர்க்கப்படும்.",
index be4e971..1fa4813 100644 (file)
        "tog-newpageshidepatrolled": "ซ่อนหน้าที่ตรวจสอบแล้วในรายการหน้าใหม่",
        "tog-extendwatchlist": "ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด",
        "tog-usenewrc": "จัดกลุ่มการเปลี่ยนแปลงแบ่งตามหน้าในรายการปรับปรุงล่าสุดและรายการเฝ้าดู",
-       "tog-numberheadings": "à¹\83สà¹\88เลขหัวเรื่องอัตโนมัติ",
+       "tog-numberheadings": "à¸\81ำหà¸\99à¸\94เลขหัวเรื่องอัตโนมัติ",
        "tog-showtoolbar": "แสดงแถบเครื่องมือแก้ไข",
        "tog-editondblclick": "แก้ไขหน้าเมื่อดับเบิลคลิก",
-       "tog-editsectiononrightclick": "à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¹\82à¸\94ยà¸\84ลิà¸\81à¸\82วาà¸\97ีà¹\88à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\82อà¸\87สà¹\88วà¸\99à¸\99ัà¹\89à¸\99",
+       "tog-editsectiononrightclick": "เปิดใช้งานการแก้ไขส่วนโดยคลิกขวาที่ชื่อเรื่องของส่วนนั้น",
        "tog-watchcreations": "เพิ่มหน้าที่ฉันสร้างและไฟล์ที่ฉันอัปโหลดเข้ารายการเฝ้าดู",
        "tog-watchdefault": "เพิ่มหน้าและไฟล์ที่ฉันแก้ไขเข้ารายการเฝ้าดู",
        "tog-watchmoves": "เพิ่มและไฟล์ที่ฉันย้ายเข้ารายการเฝ้าดู",
        "tog-watchdeletion": "เพิ่มหน้าและไฟล์ที่ฉันลบเข้ารายการเฝ้าดู",
        "tog-watchrollback": "เพิ่มหน้าที่ฉันย้อนกลับฉุกเฉินเข้ารายการเฝ้าดู",
        "tog-minordefault": "กำหนดการแก้ไขทุกครั้งเป็นการแก้ไขเล็กน้อยโดยปริยาย",
-       "tog-previewontop": "à¹\83หà¹\89à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\81สà¸\94งก่อนกล่องแก้ไข",
+       "tog-previewontop": "à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88างก่อนกล่องแก้ไข",
        "tog-previewonfirst": "แสดงตัวอย่างในการแก้ไขครั้งแรก",
        "tog-enotifwatchlistpages": "อีเมลหาเมื่อหน้าหรือไฟล์ในรายการเฝ้าดูเปลี่ยนแปลง",
        "tog-enotifusertalkpages": "อีเมลหาเมื่อมีการเปลี่ยนแปลงหน้าคุยกับผู้ใช้ของฉัน",
@@ -55,7 +55,7 @@
        "tog-watchlisthideminor": "ซ่อนการแก้ไขเล็กน้อยจากรายการเฝ้าดู",
        "tog-watchlisthideliu": "ซ่อนการแก้ไขโดยผู้ใช้ล็อกอินจากรายการเฝ้าดู",
        "tog-watchlisthideanons": "ซ่อนการแก้ไขโดยผู้ใช้นิรนามจากรายการเฝ้าดู",
-       "tog-watchlisthidepatrolled": "ซ่อนการแก้ไขที่ตรวจแล้วจากรายการเฝ้าดู",
+       "tog-watchlisthidepatrolled": "à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ีà¹\88à¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วà¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู",
        "tog-ccmeonemails": "ส่งสำเนาอีเมลที่ฉันส่งหาผู้อื่นให้ฉัน",
        "tog-diffonly": "ไม่แสดงเนื้อหาหน้าใต้ผลต่าง",
        "tog-showhiddencats": "แสดงหมวดหมู่ที่ซ่อนอยู่",
        "editcomment": "คำอธิบายการแก้ไขคือ: \"''$1''\"",
        "revertpage": "ย้อนการแก้ไขโดย [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ไปยังรุ่นแก้ไขล่าสุดโดย [[User:$1|$1]]",
        "revertpage-nouser": "ย้อนการแก้ไขโดยผู้ใช้ไม่ระบุชื่อไปยังรุ่นล่าสุดโดย {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "ย้อนการแก้ไขโดย $1; เปลี่ยนกลับไปไปยังรุ่นล่าสุดโดย $2",
+       "rollback-success": "ย้อนการแก้ไขโดย $1; \nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2",
        "sessionfailure-title": "ช่วงเวลาสื่อสารล้มเหลว",
        "sessionfailure": "ดูเหมือนมีปัญหากับช่วงเวลาสื่อสารล็อกอินของคุณ\nการกระทำนี้ถูกยกเลิกเป็นการป้องกันการลักลอบช่วงเวลาสื่อสารไว้ก่อน \nกลับไปหน้าที่แล้ว โหลดหน้าใหม่ แล้วลองอีกครั้ง",
        "protectlogpage": "ปูมการล็อก",
        "tooltip-n-portal": "เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา",
        "tooltip-n-currentevents": "ค้นหาเหตุการณ์ปัจจุบัน",
        "tooltip-n-recentchanges": "รายการปรับปรุงล่าสุดในวิกินี้",
-       "tooltip-n-randompage": "สุà¹\88มหà¸\99à¹\89าà¸\82ึà¹\89à¸\99มา",
+       "tooltip-n-randompage": "à¹\82หลà¸\94หà¸\99à¹\89าสุà¹\88ม",
        "tooltip-n-help": "อธิบายการใช้งาน",
        "tooltip-t-whatlinkshere": "รายการทุกหน้าวิกิที่ลิงก์มาที่นี่",
        "tooltip-t-recentchangeslinked": "รายการปรับปรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้",
        "tooltip-recreate": "สร้างหน้านี้อีกครั้งแม้เคยถูกลบ",
        "tooltip-upload": "เริ่มอัปโหลด",
        "tooltip-rollback": "\"ย้อนกลับฉุกเฉิน\" ใช้ย้อนการแก้ไขในหน้านี้ของผู้เขียนคนล่าสุดในคลิกเดียว",
-       "tooltip-undo": "\"ยà¹\89อà¸\99\" à¹\83à¸\8aà¹\89ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\84รัà¹\89à¸\87à¸\99ีà¹\89à¹\81ละà¹\80à¸\9bิà¸\94à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82 à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9eิà¹\88มà¸\84ำอà¸\98ิà¸\9aายà¹\83à¸\99à¸\95อà¸\99à¸\97à¹\89าย",
+       "tooltip-undo": "\"ยà¹\89อà¸\99\" à¸¢à¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¹\81ละà¹\80à¸\9bิà¸\94à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99ภาวะà¸\95ัวอยà¹\88าà¸\87 à¹\80à¸\9bิà¸\94à¹\83หà¹\89à¹\80à¸\9eิà¹\88มà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99à¸\84ำอà¸\98ิà¸\9aาย",
        "tooltip-preferences-save": "บันทึกการตั้งค่า",
        "tooltip-summary": "ใส่คำอธิบายอย่างย่อสั้น ๆ",
        "common.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */",
index 4690b77..4d3384b 100644 (file)
        "content-model-text": "звичайний текст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "duplicate-args-category": "СÑ\82оÑ\80Ñ\96нки, Ñ\89о Ð²ÐºÐ»Ñ\8eÑ\87аÑ\8eÑ\82Ñ\8c Ñ\88аблони Ð· Ð´Ñ\83блÑ\96каÑ\82ним Ð²Ð¸Ð·Ð½Ð°Ñ\87еннÑ\8fм Ð°Ñ\80гÑ\83менÑ\82Ñ\83",
+       "duplicate-args-category": "СÑ\82оÑ\80Ñ\96нки, Ñ\89о Ð¼Ñ\96Ñ\81Ñ\82Ñ\8fÑ\82Ñ\8c Ñ\88аблон Ñ\96з ÐºÑ\96лÑ\8cкома Ð·Ð½Ð°Ñ\87еннÑ\8fми Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¹ Ñ\82ого Ð¶ Ð¿Ð°Ñ\80амеÑ\82Ñ\80а",
        "duplicate-args-category-desc": "Тут перелічено сторінки, що містять дублікатне визначення аргументу при включенні шаблону, приміром, <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> або <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Увага:''' Ця сторінка містить дуже багато викликів ресурсомістких функцій.\n\nКількість викликів не повинна перевищувати $2, зараз потрібно зробити $1 {{PLURAL:$1|виклик|виклики|викликів}}.",
        "expensive-parserfunction-category": "Сторінки з дуже великою кількістю викликів ресурсомістких функцій",
        "search-result-category-size": "{{PLURAL:$1|$1 елемент|$1 елементи|$1 елементів}} ({{PLURAL:$2|$2 підкатегорія|$2 підкатегорії|$2 підкатегорій}}, {{PLURAL:$3|$3 файл|$3 файли|$3 файлів}})",
        "search-redirect": "(перенаправлення $1)",
        "search-section": "(розділ $1)",
+       "search-category": "(категорія $1)",
        "search-file-match": "(збігається із вмістом файлу)",
        "search-suggest": "Можливо, ви мали на увазі: $1",
        "search-interwiki-caption": "Братні проекти",
        "nolicense": "Відсутнє",
        "licenses-edit": "Редагувати параметри ліцензії",
        "license-nopreview": "(Попередній перегляд недоступний)",
-       "upload_source_url": " (вірна, публічно доступна інтернет-адреса)",
+       "upload_source_url": "(ви вибрали правильну, публічно доступну інтернет-адресу)",
        "upload_source_file": " (файл на вашому комп'ютері)",
        "listfiles-delete": "видалити",
        "listfiles-summary": "Ця спеціальна сторінка показує всі завантажені файли.",
index e9339be..b83706e 100644 (file)
        "search-result-category-size": "$1 trang thành viên ($2 thể loại con, $3 tập tin)",
        "search-redirect": "(đổi hướng $1)",
        "search-section": "(đề mục $1)",
+       "search-category": "(thể loại $1)",
        "search-file-match": "(khớp nội dung tập tin)",
        "search-suggest": "Có phải bạn muốn tìm: $1",
        "search-interwiki-caption": "Các dự án liên quan",
        "api-error-stashfailed": "Lỗi nội bộ: Máy chủ bị thất bại trong việc lưu giữ tập tin tạm.",
        "api-error-publishfailed": "Lỗi nội bộ: Máy chủ bị thất bại trong việc xuất bản tập tin tạm.",
        "api-error-stasherror": "Đã xuất hiện lỗi khi tải tập tin lên hàng đợi.",
+       "api-error-stashedfilenotfound": "Không tìm thấy tập tin khi thử tải nó lên từ hàng đợi.",
+       "api-error-stashpathinvalid": "Đường dẫn mong đợi đến tập tin đợi tải lên là không hợp lệ.",
+       "api-error-stashfilestorage": "Đã xuất hiện lỗi khi tải tập tin lên từ hàng đợi.",
+       "api-error-stashzerolength": "Máy chủ không thể lưu tập tin vào hàng đợi vì nó không có nội dung.",
+       "api-error-stashnotloggedin": "Bạn phải đăng nhập để lưu tập tin vào hàng đợi tải lên.",
+       "api-error-stashwrongowner": "Không thể truy cập một tập tin không phải của bạn trong hàng đợi tải lên.",
+       "api-error-stashnosuchfilekey": "Bạn không thể truy cập chìa khóa tập tin đợi tải lên vì chìa khóa này không tồn tại.",
        "api-error-timeout": "Máy chủ không đáp ứng trong thời gian dự kiến.",
        "api-error-unclassified": "Gặp lỗi không ngờ",
        "api-error-unknown-code": "Lỗi không rõ: “$1”",
index a479713..b68fe15 100644 (file)
        "brokenredirects-edit": "чиклх",
        "brokenredirects-delete": "һарһх",
        "nbytes": "$1 {{PLURAL:$1|байд|байдуд|байдуд}}",
-       "nmembers": "$1 {{PLURAL:$1|мөч|мөчүд|мөчин}}",
+       "nmembers": "$1 {{PLURAL:$1|мөч|мөчин|мөчүд}}",
        "prefixindex": "Цуг халхс эн эклцтә",
        "newpages": "Шин халхс",
        "move": "Көндәх",
index 5179e74..b0c2824 100644 (file)
@@ -11,7 +11,8 @@
                        "ווארצגאנג",
                        "לערי ריינהארט",
                        "פוילישער",
-                       "아라"
+                       "아라",
+                       "Har-wradim"
                ]
        },
        "tog-underline": "שטרייכט אונטער לינקען",
        "go": "גיין",
        "searcharticle": "גיין",
        "history": "בלאט היסטאריע",
-       "history_short": "היסטאריע",
+       "history_short": "היסטאָריע",
        "updatedmarker": "דערהיינטיגט זינט מיין לעצטע וויזיט",
        "printableversion": "דרוק ווערסיע",
        "permalink": "שטענדיגער לינק",
        "subject": "טעמע/קעפל:",
        "minoredit": "דאס איז א מינערדיגע ענדערונג",
        "watchthis": "טוט אױפֿפּאַסן דעם בלאט",
-       "savearticle": "×\90ױפֿהיטן בלאַט",
+       "savearticle": "×\90×\95×\99פהיטן בלאַט",
        "preview": "פֿאראויסקוק",
-       "showpreview": "×\95×\95ײַ×\96×\9f ×¤Ö¿אָרױסקוק",
+       "showpreview": "×\95×\95×\99×\99×\96×\9f ×¤אָרױסקוק",
        "showdiff": "ווײַז די ענדערונגען",
        "blankarticle": "<strong>אזהרה:</strong> דער בלאט איר גייט שאפן איז ליידיק.\nטאמער איר וועט דריקן אויף \"{{int:savearticle}}\" נאכאמאל, וועט דער בלאט ווערן געשאפן אן קיין אינהאלט.",
        "anoneditwarning": "<strong>ווארענונג:</strong> איר זענט נישט אריינלאגירט. אייער איי פי אדרעס וועט ווערן עפנטלעך זעבאר ווען איר פירט דורך  ענדערונגען . אז איר <strong>[$1 לאגירט ארײַן]</strong> אדער <strong>[$2 שאפט א קאנטע]</strong>, וועלן אײַערע רעדאקטירונגען ווערן צוגעשריבן צו אײַער באניצער-נאמען, ווי אויך אנדערע טובות.",
        "userinvalidcssjstitle": "'''ווארענונג:''' סאיז נישטא קיין סקין \"$1\". גדענקט אז קאסטעם .css און .js בלעטער נוצען לאוער קעיס טיטול, e.g. {{ns:user}}:Foo/vector.css ווי אנדערשט צו {{ns:user}}:Foo/Vector.css.",
        "updated": "(דערהיינטיגט)",
        "note": "'''באמערקונג:'''",
-       "previewnote": "'''געדענקט אז דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג.'''\nאייערע ענדערונגען זענען נאָך נישט געהיט!",
+       "previewnote": "'''געדענקט אַז דאָס איז נאָר אַ פאָרויסקוק.'''\nאייערע ענדערונגען זענען נאָך נישט געהיט!",
        "continue-editing": "אריבער צום רעדאקטירן פֿעלד",
        "previewconflict": "די פֿאראויסיגע ווייזונג רעפלעקטירט דעם טעקסט און דער אויבערשטע טעקסט ענדערונג אָפטיילונג וויאזוי דאס וועט אויסזען אויב וועט איר דאס אָפהיטן.",
        "session_fail_preview": "'''אנטשולדיגט! מען האט נישט געקענט פראצעסירן אייער ענדערונג צוליב א פארלוסט פון סעסיע דאטע. ביטע פרובירט נאכאמאל. אויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
        "longpageerror": "'''פעלער: דער טעקסט וואס איר האט ארײַנגעשטעלט איז לאנג {{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}, וואס איז לענגער פון דעם מאקסימום פון {{PLURAL:$2|איין קילאבייט|$2 קילאבייטן}}.\nער קען נישט ווערן אפגעהיטן.'''",
        "readonlywarning": "'''ווארענונג: די דאטנבאזע איז געווארן פארשלאסן פאר אויפהאלטונג, ממילא וועט איר נישט קענען אפהיטן אייערע ענדערונגען אצינד. '''\nאיר קענט קאפירן און ארײַנלייגן דעם טעקסט אריין צו א טעקסט טעקע און דאס דארטן אפהיטן אויף שפעטער.\n\nדער אדמיניסטראטאר וואס האט זי פארשלאסן האט מסביר געווען אזוי: $1",
        "protectedpagewarning": "'''ווארענונג:  דער בלאט איז געווארן פארשפארט אז בלויז באניצערס מיט סיסאפ פריווילעגיעס קענען אים ענדערן.'''\nדי פארגאנגענע לאגבוך באשרײַבונג ווערט געוויזן דא:",
-       "semiprotectedpagewarning": "'''באמערקונג:''' דער דאזיגער בלאַט איז פֿאַרשפאַרט אז בלויז איינגעשריבענע באניצערס קענען אים ענדערן.\nדי פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
+       "semiprotectedpagewarning": "'''באמערקונג:''' דער דאָזיקער בלאַט איז פאַרשפּאַרט, אַזוי אַז בלויז איינגעשריבענע באַניצער קענען אים ענדערן.\nדאָס פאַרגאַנגענע לאָגבוך באַשרייבונג ווערט געוויזן דאָ:",
        "cascadeprotectedwarning": "'''ווארענונג:''' דער בלאט איז פארשפארט אז בלויז סיסאפן קענען אים ענדערן, וויבאלד ער איז איינגעשלאסן אין {{PLURAL:$1| דעם פאלגנדן בלאט, וואס איז|די פאלגנדע בלעטער, וואס זענען}} קאסקאד באשיצט:",
        "titleprotectedwarning": "'''אזהרה: דער בלאט איז פֿארשפאַרט טא דארף מען [[Special:ListGroupRights|ספעציפֿישע רעכטן]] צו שאפֿן אים.'''\nדי פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
        "templatesused": "{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אויף דעם בלאט:",
        "search-result-category-size": "{{PLURAL:$1|1 מיטגליד|$1 מיטגלידער}} ({{PLURAL:$2|1 אונטער־קאַטעגאריע|$2 אונטער־קאַטעגאריעס}}, {{PLURAL:$3|1 טעקע|$3 טעקעס}})",
        "search-redirect": "(ווײַטערפֿירן $1)",
        "search-section": "(אפטיילונג $1)",
+       "search-category": "(קאטעגאריע $1)",
        "search-file-match": "(פאסט צו טעקע אינהאלט)",
        "search-suggest": "צי האט איר געמיינט: $1",
        "search-interwiki-caption": "שוועסטער פראיעקטן",
        "searchall": "אלץ",
        "showingresults": "ווייזן ביז {{PLURAL:$1|רעזולטאט '''איינס'''|'''$1''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
        "showingresultsinrange": "ווײַזן אונטן ביז {{PLURAL:$1|<strong>1</strong> רעזולטאט|<strong>$1</strong> רעזולטאטן}} אין גרייך #<strong>$2</strong> ביז #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|רעזולטאַט <strong>$1</strong> פֿון <strong>$3</strong>|רעזולטאַטן\n<strong>$1 - $2</strong> פֿון <strong>$3</strong>}}",
        "search-nonefound": "נישטא קיין רעזולטאטן פֿאַר דער שאלה.",
        "powersearch-legend": "ווײַטהאלטן זוכן",
        "powersearch-ns": "זוכן אין נאמענטיילן:",
        "prefs-tokenwatchlist": "טאקן",
        "prefs-diffs": "צווישנשיידן",
        "prefs-help-prefershttps": "דער פרעפערענץ וועט ארבעטן ביי אײַער נעקסטער ארײַנלאגירונג.",
+       "prefswarning-warning": "איר האט געמאכט ענדערונגען צו אײַערע פרעפערענצן וואס זענען נאך נישט אויפגעהיטן.\nאז איר פארלאזט דעם בלאט אן קליקן ״$1״ וועלן אײַערע פרעפערענצן נישט ווערן דערהײַנטיקט.",
        "prefs-tabs-navigation-hint": "טיפ: איר קענט ניצן די רעכטס און לינקס פייל־קלאווישן צו נאוויגירן צווישן די צינגלעך אין דער צינגלעך־ליסטע.",
        "email-address-validity-valid": "ע-פּאָסט אַדרעס זעט אויס גילטיק",
        "email-address-validity-invalid": "לייגט אַרײַן א גילטיקן ע־פאסט אַדרעס",
        "newpages": "נייע בלעטער",
        "newpages-username": "באַניצער נאָמען:",
        "ancientpages": "עלטסטע בלעטער",
-       "move": "×\91×\90Ö·×°עגן",
+       "move": "×\91×\90Ö·×\95×\95עגן",
        "movethispage": "באוועג דעם בלאט",
        "unusedimagestext": "די פֿאלגנדע טעקעס עקזיסטירן אבער ווערן נישט גענוצט אין קיין שום בלאַט.\nגיט אַכט אז אנדערע וועבערטער קענען פֿארבינדן צו א טעקע מיט א דירעקטן URL, און קענען דעריבער באווײַזן זיך דאָ כאטש זיי זענען אין אקטיוון באניץ.",
        "unusedcategoriestext": "די פֿאלגנדע קאטעגאריעס עקסיסטירן, אבער קיין בלאט אדער קאטעגאריע ניצט זיי נישט.",
        "pager-older-n": "{{PLURAL:$1|עלטערע|$1 עלטערע}}",
        "suppress": "אויפֿזען",
        "querypage-disabled": "דער באַזונדער־בלאַט איז אומאַקטיווירט צוליב אויספֿירונג סיבות.",
+       "apihelp": "API־הילף",
+       "apihelp-no-such-module": "מאָדול \"$1\" נישט געפונען.",
        "booksources": "דרויסנדיגע ליטעראַטור ISBN",
        "booksources-search-legend": "זוכן פאר דרויסנדע ביכער מקורות",
        "booksources-search": "זוכן",
        "removedwatchtext-short": "מ'האט אראפגענומען בלאט \"$1\" פון אײַער אויפפאסן ליסטע.",
        "watch": "אױפֿפּאַסן",
        "watchthispage": "טוט אױפֿפּאַסן דעם בלאט",
-       "unwatch": "אויפֿהערן אויפֿפּאַסן",
+       "unwatch": "אויפהערן אויפפּאַסן",
        "unwatchthispage": "ענדיגן אויפֿפאַסן",
        "notanarticle": "דאס איז נישט קיין אינהאלט בלאט",
        "notvisiblerev": "די באארבעטונג איז געווארן אויסגעמעקט",
        "protect-othertime": "אנדער צייט:",
        "protect-othertime-op": "אנדער צײַט",
        "protect-existing-expiry": "עקזיסטירנדע אויסלאז צײַט: $3, $2",
+       "protect-existing-expiry-infinity": "עקזיסטירנדיקע אויסגיין צייט: אומענדלעך",
        "protect-otherreason": "אנדער/ווײַטערדיקע סיבה:",
        "protect-otherreason-op": "אַנדער סיבה",
        "protect-dropdown": "* געוויינטלעכע סיבות פאר שיצן\n** אסאך וואנדאליזם\n** אסאך ספאם\n** אומנוציקער רעדאקטירונג קריג\n** שטארק געניצטער בלאט",
        "tooltip-ca-undelete": "צוריק דרייען די ענדערונגען פון דעם בלאט פארן מעקן",
        "tooltip-ca-move": "באַוועגן דעם בלאַט",
        "tooltip-ca-watch": "לייגט צו דעם בלאט אויפצופאסן",
-       "tooltip-ca-unwatch": "נעמט אראפ דעם בלאט פון אויפפאסן",
+       "tooltip-ca-unwatch": "נעמט אַראָפּ דעם בלאַט פון נאָכפאָלג־ליסטע",
        "tooltip-search": "זוכט אינעם סייט",
        "tooltip-search-go": "גייט צו א בלאט מיט אט דעם נאמען, אויב ער עקסיסטירט",
        "tooltip-search-fulltext": "זוכט דעם טעקסט אין די בלעטער",
        "tooltip-feed-atom": "לייג צו אן אטאמאטישער אפדעיט דורך אטאם Atom",
        "tooltip-t-contributions": "אלע בײַשטײַערונגען פון דעם באניצער",
        "tooltip-t-emailuser": "שיקן א בליצבריוו צו דעם בַאניצער",
+       "tooltip-t-info": "נאָך אינפאָרמאַציע וועגן דעם בלאַט",
        "tooltip-t-upload": "ארויפלאדן טעקעס",
        "tooltip-t-specialpages": "אלע ספעציעלע בלעטער",
        "tooltip-t-print": "דרוק ווערסיע פון דעם בלאט",
index a8d6b12..42d4ba1 100644 (file)
        "templatesusedpreview": "Sjabloon'n gebruukt in deêze voevertoônieng:",
        "templatesusedsection": "Sjabloon'n die an gebruukt worn in deêze subkop:",
        "template-protected": "(beveiligd)",
-       "template-semiprotected": "(semi-beveiligd)",
+       "template-semiprotected": "(semibeveiligd)",
        "hiddencategories": "Deêze pagina val in de volhende verborhen {{PLURAL:$1|categorie|categorieën}}:",
        "nocreatetext": "{{SITENAME}} ei de meuhlijkeid om nieuwe pagina's an te maeken beperkt.\nJe kan a bestaende pagina's wiezigen, of je kan [[Special:UserLogin|jen eihen anmelden of een gebruker  anmaeken]].",
        "nocreate-loggedin": "Je kan hin nieuwe pagina's anmaeken.",
index abdcab0..12154de 100644 (file)
        "category_header": "分类“$1”中的页面",
        "subcategories": "子分类",
        "category-media-header": "分类“$1”中的媒体文件",
-       "category-empty": "<em>本分类目前没有包含页面或媒体文件。</em>",
-       "hidden-categories": "{{PLURAL:$1|隐藏分类|$1个隐藏分类}}",
+       "category-empty": "<em>本分类目前没有包含任何页面或媒体文件。</em>",
+       "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
        "hidden-category-category": "隐藏分类",
        "category-subcat-count": "{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}",
        "category-subcat-count-limited": "本分类有以下{{PLURAL:$1|子分类|$1个子分类}}。",
        "listingcontinuesabbrev": "续",
        "index-category": "已索引页面",
        "noindex-category": "不可索引页面",
-       "broken-file-category": "有受损文件链接的页面",
+       "broken-file-category": "有受损文件链接的页面",
        "categoryviewer-pagedlinks": "($1)($2)",
        "about": "关于",
        "article": "内容页面",
        "variants": "变种",
        "navigation-heading": "导航菜单",
        "errorpagetitle": "错误",
-       "returnto": "返回$1。",
+       "returnto": "返回$1。",
        "tagline": "来自{{SITENAME}}",
        "help": "帮助",
        "search": "搜索",
        "jumpto": "跳转至:",
        "jumptonavigation": "导航",
        "jumptosearch": "搜索",
-       "view-pool-error": "对不起,服务器当前正超负荷运转。过多用户正尝试查看本页面。请在再次尝试访问本页面前稍等片刻。\n\n$1",
-       "generic-pool-error": "对不起,服务器目前超负荷运转。太多用户尝试查看本页面。请稍等片刻再重新尝试。",
+       "view-pool-error": "对不起,服务器当前正超负荷运转。正在尝试查看本页面的用户过多。在重新尝试访问本页面之前,请您稍等片刻。\n\n$1",
+       "generic-pool-error": "对不起,服务器当前正超负荷运转。正在尝试查看本资源的用户过多。在重新尝试访问本资源之前,请您稍等片刻。",
        "pool-timeout": "等待锁超时",
        "pool-queuefull": "请求队列已满",
        "pool-errorunknown": "未知错误",
        "aboutsite": "关于{{SITENAME}}",
        "aboutpage": "Project:关于",
        "copyright": "除非另有声明,本网站内容采用$1授权。",
-       "copyrightpage": "{{ns:project}}:著作权",
+       "copyrightpage": "{{ns:project}}:权",
        "currentevents": "新闻动态",
        "currentevents-url": "Project:新闻动态",
        "disclaimers": "免责声明",
        "mainpage": "首页",
        "mainpage-description": "首页",
        "policy-url": "Project:方针",
-       "portal": "社区主页",
-       "portal-url": "Project:社区专页",
+       "portal": "社区门户",
+       "portal-url": "Project:社区门户",
        "privacy": "隐私政策",
        "privacypage": "Project:隐私权政策",
        "badaccess": "权限错误",
-       "badaccess-group0": "你被ç¦\81æ­¢æ\89§è¡\8cä½ å\88\9aæ\89\8d请求的操作。",
-       "badaccess-groups": "您请求的操作仅限属于{{PLURAL:$2|该用户组|这些用户组}}的用户执行:$1",
+       "badaccess-group0": "ä¸\8då\85\81许æ\82¨æ\89§è¡\8cæ\82¨æ\89\80请求的操作。",
+       "badaccess-groups": "您所请求的操作仅限于{{PLURAL:$2|该|这些}}用户组的用户使用:$1",
        "versionrequired": "需要$1版本的MediaWiki",
-       "versionrequiredtext": "使用本页需要$1版本的MediaWiki。请见[[Special:Version|版本页面]]。",
+       "versionrequiredtext": "使用本页需要$1版本的MediaWiki。请见[[Special:Version|版本页面]]。",
        "ok": "确定",
        "backlinksubtitle": "←$1",
        "retrievedfrom": "取自“$1”",
        "viewsourceold": "查看源代码",
        "editlink": "编辑",
        "viewsourcelink": "查看源代码",
-       "editsectionhint": "编辑段落:$1",
+       "editsectionhint": "编辑小节:$1",
        "toc": "目录",
        "showtoc": "显示",
        "hidetoc": "隐藏",
        "sort-descending": "降序",
        "sort-ascending": "升序",
        "nstab-main": "页面",
-       "nstab-user": "用户页",
+       "nstab-user": "用户页",
        "nstab-media": "媒体文件页面",
        "nstab-special": "特殊页面",
        "nstab-project": "项目页面",
        "nstab-image": "文件",
-       "nstab-mediawiki": "息",
+       "nstab-mediawiki": "息",
        "nstab-template": "模板",
        "nstab-help": "帮助页面",
        "nstab-category": "分类",
-       "nosuchaction": "无该命令",
-       "nosuchactiontext": "URLæ\8c\87å®\9aç\9a\84æ\93\8dä½\9cæ\97 æ\95\88ã\80\82ä½ å\8f¯è\83½è¾\93å\85¥äº\86é\94\99误ç\9a\84URLå\9c°å\9d\80ï¼\8cæ\88\96æ\98¯ç\82¹å\87»äº\86é\94\99误ç\9a\84é\93¾æ\8e¥ã\80\82è¿\99ä¹\9få\8f¯è\83½è¡¨æ\98\8e{{SITENAME}}使ç\94¨ç\9a\84软件ç\9a\84å­\98å\9c¨æ¼\8fæ´\9eï¼\88bugï¼\89。",
+       "nosuchaction": "无此操作",
+       "nosuchactiontext": "URLæ\89\80æ\8c\87å®\9aç\9a\84æ\93\8dä½\9cæ\97 æ\95\88ã\80\82ä½ æ\89\80è¾\93å\85¥ç\9a\84URLå\9c°å\9d\80å\8f¯è\83½æ\9c\89误ï¼\8cæ\88\96æ\98¯ä½¿ç\94¨äº\86é\94\99误ç\9a\84é\93¾æ\8e¥ã\80\82è¿\99ä¹\9få\8f¯è\83½è¡¨ç¤º{{SITENAME}}æ\89\80使ç\94¨è½¯ä»¶ä¹\8b中å­\98å\9c¨æ¼\8fæ´\9e。",
        "nosuchspecialpage": "此特殊页面不存在",
-       "nospecialpagetext": "<strong>您请求了一个无效的特殊页面。</strong>\n\n有效的特殊页面的列表可以在[[Special:SpecialPages|{{int:specialpages}}]]找到。",
-       "error": "出错",
+       "nospecialpagetext": "<strong>您请求了一个无效的特殊页面。</strong>\n\n在[[Special:SpecialPages|{{int:specialpages}}]可以]找到有效的特殊页面的列表。",
+       "error": "错误",
        "databaseerror": "数据库错误",
-       "databaseerror-text": "数据库查询出错。这可能表明软件中存在漏洞(bug)。",
-       "databaseerror-textcl": "数据库查询出错。",
+       "databaseerror-text": "出现数据库查询错误。这可能表示软件中存在漏洞。",
+       "databaseerror-textcl": "出现数据库查询错误。",
        "databaseerror-query": "查询:$1",
        "databaseerror-function": "函数:$1",
-       "databaseerror-error": "出错:$1",
-       "laggedslavemode": "'''警告:'''页面可能没有包含最近的更新。",
-       "readonly": "数据库锁定",
-       "enterlockreason": "请输入锁定的原因(包括预计解锁的时间)",
-       "readonlytext": "数据库当前被锁定,不能添加新条目或进行其他修改,锁定可能是因为例行的数据库维护,完成后即可恢复正常。\n\n锁定数据库的管理员提供的解释:$1",
+       "databaseerror-error": "错误:$1",
+       "laggedslavemode": "'''警告:'''页面可能没有包含最近的更新。",
+       "readonly": "数据库锁定",
+       "enterlockreason": "请输入锁定原因,包括预计解锁的时间",
+       "readonlytext": "数据库当前被锁定,不能添加新条目或进行其他修改,锁定可能是因为例行的数据库维护,完成后即可恢复正常。\n\n锁定数据库的管理员提供的解释:$1",
        "missing-article": "数据库找不到预期的页面文字:“$1”$2。\n\n这通常是由于点击了链向旧有差异或历史的链接,而原有版本已被删除导致的。\n\n如果情况不是这样,您可能找到了软件的一个内部错误。请记录下URL地址,并向[[Special:ListUsers/sysop|管理员]]报告。",
        "missingarticle-rev": "(版本#:$1)",
        "missingarticle-diff": "(差异:$1,$2)",
        "content-model-text": "纯文本",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "duplicate-args-category": "调用重复模参数的页面",
+       "duplicate-args-category": "调用重复模参数的页面",
        "duplicate-args-category-desc": "页面包含使用重复参数的模板调用,例如<code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>或<code><nowiki>{{foo|bar|1=baz}}</nowiki></code>。",
        "expensive-parserfunction-warning": "<strong>警告:</strong>这个页面有太多高昂的语法功能调用。\n\n它应该少过$2次呼叫,现在有$1次呼叫。",
        "expensive-parserfunction-category": "页面中有太多耗费的语法功能呼叫",
        "search-result-category-size": "$1个成员($2个子分类,$3个文件)",
        "search-redirect": "(重定向自“$1”)",
        "search-section": "(“$1”段落)",
+       "search-category": "(分类$1)",
        "search-file-match": "(匹配文件内容)",
        "search-suggest": "您是不是要找:$1",
        "search-interwiki-caption": "姊妹项目",
        "action-userrights": "编辑所有用户的权限",
        "action-userrights-interwiki": "编辑其他wiki用户的用户权限",
        "action-siteadmin": "锁定或解锁数据库",
-       "action-sendemail": "电邮联系其他用户",
+       "action-sendemail": "发送电子邮件",
        "action-editmywatchlist": "编辑你的监视列表",
        "action-viewmywatchlist": "查看你的监视列表",
        "action-viewmyprivateinfo": "查看您的私人信息",
        "trackingcategories-msg": "追踪分类",
        "trackingcategories-name": "信息名",
        "trackingcategories-desc": "分类收录标准",
-       "noindex-category-desc": "因为页面上有魔术字<code><nowiki>__NOINDEX__</nowiki></code>并位于允许该标记的名字空间,而不被网络爬虫索引的页面。",
-       "index-category-desc": "页面上有魔术字<code><nowiki>__INDEX__</nowiki></code>(并位于允许该标记的名字空间),并因此被网络爬虫索引(这些页面通常不会被索引)。",
+       "noindex-category-desc": "因为页面上有魔术字<code><nowiki>__NOINDEX__</nowiki></code>并位于允许该标记的名字空间,而不被机器人索引的页面。",
+       "index-category-desc": "页面上有魔术字<code><nowiki>__INDEX__</nowiki></code>(并位于允许该标记的名字空间),并因此被机器人索引,但通常不应被索引。",
        "post-expand-template-inclusion-category-desc": "在展开所有模板后,页面大小大于<code>$wgMaxArticleSize</code>,所以某些模板未展开。",
        "post-expand-template-argument-category-desc": "在展开模板参数(以三对花括号包含的东西,如<code>{{{Foo}}}</code>)后,页面大于<code>$wgMaxArticleSize</code>。",
        "expensive-parserfunction-category-desc": "页面使用过多高开销解析器函数(如<code>#ifexist</code>)。请见[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit MediaWiki官网手册]。",
        "api-error-stashfailed": "内部错误:服务器保存临时文件失败。",
        "api-error-publishfailed": "内部错误:服务器发布临时文件失败。",
        "api-error-stasherror": "上传文件存档时出现错误。",
+       "api-error-stashedfilenotfound": "试图从藏匿处上传时找不到藏匿的文件。",
+       "api-error-stashpathinvalid": "找到的藏匿文件的路径是无效的。",
+       "api-error-stashfilestorage": "存储文件至藏匿处时出错。",
+       "api-error-stashzerolength": "服务器不能藏匿文件,因为它已经没有藏匿空间。",
+       "api-error-stashnotloggedin": "您必须登录以保存文件至上传藏匿处。",
+       "api-error-stashwrongowner": "您试图在藏匿处访问的文件不属于您。",
+       "api-error-stashnosuchfilekey": "您试图在藏匿处访问的文件密钥不存在。",
        "api-error-timeout": "服务器没有在预期内响应。",
        "api-error-unclassified": "出现未知错误。",
        "api-error-unknown-code": "未知错误:$1",
        "log-description-pagelang": "这是页面语言更改的日志。",
        "logentry-pagelang-pagelang": "$1{{GENDER:$2|更改}}$3的页面语言:从$4改为$5。",
        "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
-       "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,希望如此。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
+       "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2(已启用)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2('''已禁用''')",
        "mediastatistics": "媒体统计",
index a241076..68de984 100644 (file)
@@ -86,7 +86,7 @@
        "tog-shownumberswatching": "顯示正在監視的使用者數",
        "tog-oldsig": "現有簽名:",
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
-       "tog-uselivepreview": "使用即時預覽 (測試中)",
+       "tog-uselivepreview": "使用即時預覽 (實驗中)",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
        "tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
        "tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
        "policy-url": "Project:Policy",
        "portal": "社群入口",
        "portal-url": "Project:Community portal",
-       "privacy": "私隱政策",
+       "privacy": "隱私政策",
        "privacypage": "Project:Privacy policy",
        "badaccess": "權限錯誤",
        "badaccess-group0": "系統不允許您執行這項操作。",
        "createacct-another-submit": "建立另一個帳號",
        "createacct-benefit-heading": "{{SITENAME}} 是由像您一樣貢獻的人所建立的。",
        "createacct-benefit-body1": " {{PLURAL:$1|次編輯}}",
-       "createacct-benefit-body2": " $1 頁",
+       "createacct-benefit-body2": "$1 頁",
        "createacct-benefit-body3": " 位最近的{{PLURAL:$1|貢獻者}}",
        "badretype": "兩次輸入的密碼並不相同。",
        "userexists": "您所輸入的使用者名稱已存在,請另選一個名稱。",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
        "search-redirect": "(重新導向 $1)",
        "search-section": "(章節 $1)",
+       "search-category": "(分類 $1)",
        "search-file-match": "(符合檔案內容)",
        "search-suggest": "您指的是不是:$1",
        "search-interwiki-caption": "姐妹專案",
        "right-editmyuserjs": "編輯自己的使用者 JavaScript 檔",
        "right-viewmywatchlist": "檢視自己的監視清單",
        "right-editmywatchlist": "編輯自己的監視清單。注意,即使無此權限,某些操作仍會新增頁面至監視清單。",
-       "right-viewmyprivateinfo": "檢視自己的私隱資料 (如:電子郵件位址及真實姓名)",
-       "right-editmyprivateinfo": "編輯自己的私隱資料 (如:電子郵件位址及真實姓名)",
+       "right-viewmyprivateinfo": "檢視自己的私隱資料(如:電子郵件位址及真實姓名)",
+       "right-editmyprivateinfo": "編輯自己的隱私資料(如:電子郵件位址及真實姓名)",
        "right-editmyoptions": "編輯自己的偏好設定",
        "right-rollback": "快速還原最後一位使用者對某一頁面的編輯",
        "right-markbotedits": "標示還原編輯為機械人編輯",
        "unknown_extension_tag": "不明的擴充標籤 \"$1\"",
        "duplicate-defaultsort": "<strong>警告:</strong>預設的排序鍵 \"$2\" 會覆蓋先前預設的排序鍵 \"$1\"。",
        "duplicate-displaytitle": "<strong>警告:</strong> 顯示標題 \"$2\" 覆蓋之前的顯示標題 \"$1\"。",
+       "invalid-indicator-name": "<strong>錯誤:</strong>頁面狀態指示器的<code>name</code> 屬性不能為空。",
        "version": "版本",
        "version-extensions": "已安裝的擴充套件",
        "version-skins": "已安裝的外觀",
        "revdelete-uname-unhid": "取消隱藏使用者名稱",
        "revdelete-restricted": "已套用對管理員的限制",
        "revdelete-unrestricted": "已移除對管理員的限制",
+       "logentry-merge-merge": "$1將$3{{GENDER:$2|合併}}至$4(修訂版本至$5)",
        "logentry-move-move": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4",
        "logentry-move-move-noredirect": "$1 已移動頁面 $3 至 $4,不留重新導向頁面",
        "logentry-move-move_redir": "$1 已移動頁面 $3 至 $4 並覆蓋原有重新導向",
        "api-error-stashfailed": "內部錯誤:伺服器儲存暫存檔案失敗。",
        "api-error-publishfailed": "內部錯誤:伺服器發佈暫存檔案失敗。",
        "api-error-stasherror": "上傳檔案至儲存庫時發生錯誤。",
+       "api-error-stashedfilenotfound": "嘗試從藏匿處上傳時找不到藏匿的檔案。",
+       "api-error-stashpathinvalid": "找到的藏匿檔案的路徑是無效的。",
+       "api-error-stashfilestorage": "儲存檔案至藏匿處時出錯。",
+       "api-error-stashzerolength": "伺服器不能藏匿檔案,因爲它已經沒有藏匿空間了。",
+       "api-error-stashnotloggedin": "您必須登入以儲存檔案至上傳藏匿處。",
+       "api-error-stashwrongowner": "您嘗試在藏匿處存取的檔案不屬於您。",
+       "api-error-stashnosuchfilekey": "您嘗試在藏匿處存取的檔案金鑰不存在。",
        "api-error-timeout": "伺服器沒有在預期的時間內回應。",
        "api-error-unclassified": "發生不明錯誤。",
        "api-error-unknown-code": "不明錯誤:\"$1\"。",
        "log-description-pagelang": "此頁為頁面語言的變更日誌。",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5。",
        "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下外觀。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
-       "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
+       "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已停用''')",
        "mediastatistics": "媒體統計資訊",
        "mediastatistics-header-text": "純文字",
        "mediastatistics-header-executable": "可執行",
        "mediastatistics-header-archive": "已壓縮格式",
-       "json-warn-trailing-comma": "已移除 $1 個 JSON 結尾的{{PLURAL:$1|逗號|逗號}}",
+       "json-warn-trailing-comma": "已移除 $1 個 JSON 結尾的{{PLURAL:$1|逗號}}",
        "json-error-unknown": "JSON 發生問題。錯誤:$1",
        "json-error-depth": "已超出堆疊深度限制",
        "json-error-state-mismatch": "無效或格式不正確的 JSON",
index aa1d9d1..2f86c78 100644 (file)
 $namespaceNames = array(
        NS_SPECIAL          => 'Syndrig',
        NS_TALK             => 'Mōtung',
-       NS_FILE             => 'Biliþ',
-       NS_FILE_TALK        => 'Biliþmōtung',
+       NS_USER             => 'Brūcend',
+       NS_USER_TALK        => 'Brūcendmōtung',
+       NS_FILE             => 'Ymele',
+       NS_FILE_TALK        => 'Ymelmōtung',
+       NS_MEDIAWIKI_TALK   => 'MediaWikimōtung',
        NS_TEMPLATE         => 'Bysen',
        NS_TEMPLATE_TALK    => 'Bysenmōtung',
        NS_HELP             => 'Help',
@@ -26,8 +29,9 @@ $namespaceAliases = array(
        'Motung'        => NS_TALK,
        'Brucend'       => NS_USER,
        'Brucendmotung' => NS_USER_TALK,
-       'Biliþgesprec'  => NS_FILE_TALK,
+       'Biliþ'         => NS_FILE,
        'Biliþmotung'   => NS_FILE_TALK,
+       'Biliþmōtung'   => NS_FILE_TALK,
        'Bysengesprec'  => NS_TEMPLATE_TALK,
        'Bysenmotung'   => NS_TEMPLATE_TALK,
        'Helpgesprec'   => NS_HELP_TALK,
index 09ae5a6..abba540 100644 (file)
 
 $fallback = 'hi';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'मेडिया',
+       NS_SPECIAL          => 'विशेष',
+       NS_TALK             => 'वार्ता',
+       NS_USER             => 'प्रयोगकर्ता',
+       NS_USER_TALK        => 'प्रयोगकर्ता_वार्ता',
+       NS_PROJECT_TALK     => '$1_वार्ता',
+       NS_FILE             => 'फाइल',
+       NS_FILE_TALK        => 'फाइल_वार्ता',
+       NS_MEDIAWIKI        => 'मेडियाविकि',
+       NS_MEDIAWIKI_TALK   => 'मेडियाविकि_वार्ता',
+       NS_TEMPLATE         => 'आकृति',
+       NS_TEMPLATE_TALK    => 'आकृति_वार्ता',
+       NS_HELP             => 'मद्दत',
+       NS_HELP_TALK        => 'मद्दत_वार्ता',
+       NS_CATEGORY         => 'श्रेणी',
+       NS_CATEGORY_TALK    => 'श्रेणी_वार्ता',
+);
index 655f309..fc6cf98 100644 (file)
--- a/load.php
+++ b/load.php
@@ -23,7 +23,7 @@
  */
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'load.php' );
index 8d30df4..d740f56 100644 (file)
@@ -20,8 +20,8 @@
  * @defgroup Maintenance Maintenance
  */
 
-// Make sure we're on PHP5.3.2 or better
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+// Make sure we're on PHP5.3.3 or better
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require_once dirname( __FILE__ ) . '/../includes/PHPVersionError.php';
        wfPHPVersionError( 'cli' );
diff --git a/maintenance/cleanupBlocks.php b/maintenance/cleanupBlocks.php
new file mode 100644 (file)
index 0000000..1736203
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Cleans up user blocks with user names not matching the 'user' table
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script to clean up user blocks with user names not matching the
+ * 'user' table.
+ *
+ * @ingroup Maintenance
+ */
+class CleanupBlocks extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Cleanup user blocks with user names not matching the 'user' table";
+               $this->setBatchSize( 1000 );
+       }
+
+       public function execute() {
+               $db = wfGetDB( DB_MASTER );
+
+               $max = $db->selectField( 'ipblocks', 'MAX(ipb_user)' );
+
+               // Step 1: Clean up any duplicate user blocks
+               for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
+                       $to = min( $max, $from + $this->mBatchSize - 1 );
+                       $this->output( "Cleaning up duplicate ipb_user ($from-$to of $max)\n" );
+
+                       $delete = array();
+
+                       $res = $db->select(
+                               'ipblocks',
+                               array( 'ipb_user' ),
+                               array(
+                                       "ipb_user >= $from",
+                                       "ipb_user <= $to",
+                               ),
+                               __METHOD__,
+                               array(
+                                       'GROUP BY' => 'ipb_user',
+                                       'HAVING' => 'COUNT(*) > 1',
+                               )
+                       );
+                       foreach ( $res as $row ) {
+                               $bestBlock = null;
+                               $res2 = $db->select(
+                                       'ipblocks',
+                                       '*',
+                                       array(
+                                               'ipb_user' => $row->ipb_user,
+                                       )
+                               );
+                               foreach ( $res2 as $row2 ) {
+                                       $block = Block::newFromRow( $row2 );
+                                       if ( !$bestBlock ) {
+                                               $bestBlock = $block;
+                                               continue;
+                                       }
+
+                                       // Find the most-restrictive block. Can't use
+                                       // Block::chooseBlock because that's for IP blocks, not
+                                       // user blocks.
+                                       $keep = null;
+                                       if ( $keep === null && $block->getExpiry() !== $bestBlock->getExpiry() ) {
+                                               // This works for infinite blocks because 'infinity' > '20141024234513'
+                                               $keep = $block->getExpiry() > $bestBlock->getExpiry();
+                                       }
+                                       if ( $keep === null ) {
+                                               foreach ( array( 'createaccount', 'sendemail', 'editownusertalk' ) as $action ) {
+                                                       if ( $block->prevents( $action ) xor $bestBlock->prevents( $action ) ) {
+                                                               $keep = $block->prevents( $action );
+                                                               break;
+                                                       }
+                                               }
+                                       }
+
+                                       if ( $keep ) {
+                                               $delete[] = $bestBlock->getId();
+                                               $bestBlock = $block;
+                                       } else {
+                                               $delete[] = $block->getId();
+                                       }
+                               }
+                       }
+
+                       if ( $delete ) {
+                               $db->delete(
+                                       'ipblocks',
+                                       array( 'ipb_id' => $delete ),
+                                       __METHOD__
+                               );
+                       }
+               }
+
+               // Step 2: Update the user name in any blocks where it doesn't match
+               for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
+                       $to = min( $max, $from + $this->mBatchSize - 1 );
+                       $this->output( "Cleaning up mismatched user name ($from-$to of $max)\n" );
+
+                       $res = $db->select(
+                               array( 'ipblocks', 'user' ),
+                               array( 'ipb_id', 'user_name' ),
+                               array(
+                                       'ipb_user = user_id',
+                                       "ipb_user >= $from",
+                                       "ipb_user <= $to",
+                                       'ipb_address != user_name',
+                               ),
+                               __METHOD__
+                       );
+                       foreach ( $res as $row ) {
+                               $db->update(
+                                       'ipblocks',
+                                       array( 'ipb_address' => $row->user_name ),
+                                       array( 'ipb_id' => $row->ipb_id ),
+                                       __METHOD__
+                               );
+                       }
+               }
+
+               $this->output( "Done!\n" );
+       }
+}
+
+$maintClass = "CleanupBlocks";
+require_once RUN_MAINTENANCE_IF_MAIN;
index 9e88c13..6234db4 100644 (file)
@@ -37,6 +37,9 @@ require_once __DIR__ . '/cleanupTable.inc';
  * @ingroup Maintenance
  */
 class CapsCleanup extends TableCleanup {
+
+       private $user;
+
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Script to cleanup capitalization";
@@ -44,13 +47,13 @@ class CapsCleanup extends TableCleanup {
        }
 
        public function execute() {
-               global $wgCapitalLinks, $wgUser;
+               global $wgCapitalLinks;
 
                if ( $wgCapitalLinks ) {
                        $this->error( "\$wgCapitalLinks is on -- no need for caps links cleanup.", true );
                }
 
-               $wgUser = User::newFromName( 'Conversion script' );
+               $this->user = User::newFromName( 'Conversion script' );
 
                $this->namespace = intval( $this->getOption( 'namespace', 0 ) );
                $this->dryrun = $this->hasOption( 'dry-run' );
@@ -87,7 +90,9 @@ class CapsCleanup extends TableCleanup {
                        $this->output( "\"$display\" -> \"$targetDisplay\": DRY RUN, NOT MOVED\n" );
                        $ok = true;
                } else {
-                       $ok = $current->moveTo( $target, false, 'Converting page titles to lowercase' );
+                       $mp = new MovePage( $current, $target );
+                       $status = $mp->move( $this->user, 'Converting page titles to lowercase', true );
+                       $ok = $status->isOK() ? 'OK' : $status->getWikiText();
                        $this->output( "\"$display\" -> \"$targetDisplay\": $ok\n" );
                }
                if ( $ok === true ) {
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 4b2ff71..d8bc3a4 100644 (file)
@@ -54,7 +54,7 @@ abstract class DumpIterator extends Maintenance {
                $this->checkOptions();
 
                if ( $this->hasOption( 'file' ) ) {
-                       $revision = new WikiRevision;
+                       $revision = new WikiRevision( $this->getConfig() );
 
                        $revision->setText( file_get_contents( $this->getOption( 'file' ) ) );
                        $revision->setTitle( Title::newFromText(
@@ -73,7 +73,7 @@ abstract class DumpIterator extends Maintenance {
                        $this->error( "Sorry, I don't support dump filenames yet. "
                                . "Use - and provide it on stdin on the meantime.", true );
                }
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, $this->getConfig() );
 
                $importer->setRevisionCallback(
                        array( &$this, 'handleRevision' ) );
index 1930a22..12711ea 100644 (file)
@@ -181,7 +181,14 @@ class GenerateSitemap extends Maintenance {
                $this->setNamespacePriorities();
                $this->url_limit = 50000;
                $this->size_limit = pow( 2, 20 ) * 10;
-               $this->fspath = self::init_path( $this->getOption( 'fspath', getcwd() ) );
+
+               # Create directory if needed
+               $fspath = $this->getOption( 'fspath', getcwd() );
+               if ( !wfMkdirParents( $fspath, null, __METHOD__ ) ) {
+                       $this->error( "Can not create directory $fspath.", 1 );
+               }
+
+               $this->fspath = realpath( $fspath ) . DIRECTORY_SEPARATOR;
                $this->urlpath = $this->getOption( 'urlpath', "" );
                if ( $this->urlpath !== "" && substr( $this->urlpath, -1 ) !== '/' ) {
                        $this->urlpath .= '/';
@@ -238,20 +245,6 @@ class GenerateSitemap extends Maintenance {
                }
        }
 
-       /**
-        * Create directory if it does not exist and return pathname with a trailing slash
-        * @param string $fspath
-        * @return null|string
-        */
-       private static function init_path( $fspath ) {
-               # Create directory if needed
-               if ( $fspath && !is_dir( $fspath ) ) {
-                       wfMkdirParents( $fspath, null, __METHOD__ ) or die( "Can not create directory $fspath.\n" );
-               }
-
-               return realpath( $fspath ) . DIRECTORY_SEPARATOR;
-       }
-
        /**
         * Generate a one-dimensional array of existing namespaces
         */
index 1f75bcc..ea8c84b 100644 (file)
@@ -270,7 +270,7 @@ TEXT;
                $this->startTime = microtime( true );
 
                $source = new ImportStreamSource( $handle );
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, $this->getConfig() );
 
                if ( $this->hasOption( 'debug' ) ) {
                        $importer->setDebug( true );
index d6163bd..145749a 100644 (file)
@@ -13,7 +13,8 @@
                                        "mw.html",
                                        "mw.html.Cdata",
                                        "mw.html.Raw",
-                                       "mw.hook"
+                                       "mw.hook",
+                                       "mw.template"
                                ]
                        },
                        {
index 713753f..a27a772 100644 (file)
@@ -103,10 +103,10 @@ class MoveBatch extends Maintenance {
 
                        $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
                        $dbw->begin( __METHOD__ );
-                       $err = $source->moveTo( $dest, false, $reason, !$noredirects );
-                       if ( $err !== true ) {
-                               $msg = array_shift( $err[0] );
-                               $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
+                       $mp = new MovePage( $source, $dest );
+                       $status = $mp->move( $wgUser, $reason, !$noredirects );
+                       if ( !$status->isOK() ) {
+                               $this->output( "\nFAILED: " . $status->getWikiText() );
                        }
                        $dbw->commit( __METHOD__ );
                        $this->output( "\n" );
old mode 100644 (file)
new mode 100755 (executable)
index 169f512..2218a5e 100644 (file)
@@ -61,7 +61,7 @@ class DumpRenderer extends Maintenance {
                }
 
                $source = new ImportStreamSource( $this->getStdin() );
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, $this->getConfig() );
 
                $importer->setRevisionCallback(
                        array( &$this, 'handleRevision' ) );
index 0f99662..c0f6c7b 100644 (file)
@@ -39,6 +39,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 /**
  * Maintenance script to do various checks on external storage.
  *
+ * @fixme this should extend the base Maintenance class
  * @ingroup Maintenance ExternalStorage
  */
 class CheckStorage {
@@ -466,7 +467,10 @@ class CheckStorage {
                $dbw->ping();
 
                $source = new ImportStreamSource( $file );
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter(
+                       $source,
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+               );
                $importer->setRevisionCallback( array( &$this, 'importRevision' ) );
                $importer->doImport();
        }
old mode 100644 (file)
new mode 100755 (executable)
index 046d73c..657a2fc 100755 (executable)
@@ -26,7 +26,7 @@
  * @ingroup Maintenance
  */
 
-if ( !function_exists( 'version_compare' ) || ( version_compare( PHP_VERSION, '5.3.2' ) < 0 ) ) {
+if ( !function_exists( 'version_compare' ) || ( version_compare( PHP_VERSION, '5.3.3' ) < 0 ) ) {
        require dirname( __FILE__ ) . '/../includes/PHPVersionError.php';
        wfPHPVersionError( 'cli' );
 }
index a6cebc3..ed3e7f4 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( dirname( __FILE__ ) ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'mw-config/index.php' );
index ca90efa..b2dfe1e 100644 (file)
@@ -779,6 +779,10 @@ return array(
                        'mediawiki.hlist',
                ),
        ),
+       'mediawiki.template' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.apipretty' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
                'targets' => array( 'desktop', 'mobile' ),
@@ -851,6 +855,9 @@ return array(
                'position' => 'bottom',
        ),
        'mediawiki.feedback' => array(
+               'templates' => array(
+                       'dialog.html' => 'resources/src/mediawiki/templates/dialog.html',
+               ),
                'scripts' => 'resources/src/mediawiki/mediawiki.feedback.js',
                'styles' => 'resources/src/mediawiki/mediawiki.feedback.css',
                'dependencies' => array(
@@ -1063,6 +1070,9 @@ return array(
                ),
        ),
        'mediawiki.action.view.postEdit' => array(
+               'templates' => array(
+                       'postEdit.html' => 'resources/src/mediawiki.action/templates/postEdit.html',
+               ),
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.js',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.css',
                'dependencies' => array(
@@ -1337,6 +1347,9 @@ return array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.undelete.js',
        ),
        'mediawiki.special.upload' => array(
+               'templates' => array(
+                       'thumbnail.html' => 'resources/src/mediawiki.special/templates/thumbnail.html',
+               ),
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.upload.js',
                'messages' => array(
                        'widthheight',
index b37e9bc..0fdc1a8 100644 (file)
@@ -4,7 +4,6 @@
                        "Si Gam Acèh"
                ]
        },
-       "ooui-dialog-action-close": "Tôp",
        "ooui-outline-control-move-down": "Pinah item u yup",
        "ooui-outline-control-move-up": "Pinah item u ateuëh",
        "ooui-toolbar-more": "Lom"
index c5984af..5ce3666 100644 (file)
@@ -4,7 +4,6 @@
                        "Naudefj"
                ]
        },
-       "ooui-dialog-action-close": "Sluit",
        "ooui-outline-control-move-down": "Skuif item af",
        "ooui-outline-control-move-up": "Skuif item op"
 }
index 0e070c6..bfe9d5c 100644 (file)
@@ -3,6 +3,5 @@
                "authors": [
                        "Elfalem"
                ]
-       },
-       "ooui-dialog-action-close": "ለመዝጋት"
+       }
 }
index 7eb02a7..de5b7af 100644 (file)
@@ -3,6 +3,5 @@
                "authors": [
                        "Basharh"
                ]
-       },
-       "ooui-dialog-action-close": "ܣܟܘܪ"
+       }
 }
index aa835e2..fc12d1b 100644 (file)
@@ -6,7 +6,6 @@
                        "Jduranboger"
                ]
        },
-       "ooui-dialog-action-close": "Bağla",
        "ooui-outline-control-move-down": "Bəndi aşağı apar",
        "ooui-outline-control-move-up": "Bəndi yuxarı apar",
        "ooui-outline-control-remove": "Bəndi sil",
index 0bfa299..ff915b0 100644 (file)
@@ -9,7 +9,6 @@
                        "Рустам Нурыев"
                ]
        },
-       "ooui-dialog-action-close": "Ябырға",
        "ooui-outline-control-move-down": "Аҫҡа күсерергә",
        "ooui-outline-control-move-up": "Өҫкә күсерергә"
 }
index f3db639..bc2251e 100644 (file)
@@ -5,7 +5,6 @@
                        "Sky Harbor"
                ]
        },
-       "ooui-dialog-action-close": "Seraduhon",
        "ooui-outline-control-move-down": "Balyuhon an aytem paibaba",
        "ooui-outline-control-move-up": "Balyuhon an aytem paitaas",
        "ooui-toolbar-more": "Kadugangan"
index c3f1abf..c5475f8 100644 (file)
@@ -7,7 +7,6 @@
                        "Zedlik"
                ]
        },
-       "ooui-dialog-action-close": "Закрыць",
        "ooui-outline-control-move-down": "Перасунуць ніжэй",
        "ooui-outline-control-move-up": "Перасунуць вышэй",
        "ooui-toolbar-more": "Болей"
index 08fbe0b..fb0f688 100644 (file)
@@ -5,9 +5,6 @@
                        "Artificial123"
                ]
        },
-       "ooui-dialog-action-close": "Закрыць",
-       "ooui-dialog-confirm-title": "Пацвердзіць",
-       "ooui-dialog-confirm-default-prompt": "Вы ўпэўненыя?",
-       "ooui-dialog-confirm-default-ok": "ОК",
-       "ooui-dialog-confirm-default-cancel": "Адмяніць"
+       "ooui-dialog-message-accept": "ОК",
+       "ooui-dialog-message-reject": "Адмяніць"
 }
index c283973..02d95b5 100644 (file)
@@ -7,7 +7,6 @@
                        "Mitzev"
                ]
        },
-       "ooui-dialog-action-close": "Затваряне",
        "ooui-outline-control-remove": "Премахване на обекта",
        "ooui-toolbar-more": "Още"
 }
index f7105ce..2696144 100644 (file)
@@ -9,12 +9,10 @@
                        "Sayak Sarkar"
                ]
        },
-       "ooui-dialog-action-close": "বন্ধ",
        "ooui-outline-control-move-down": "আইটেম নিচে স্থানান্তর",
        "ooui-outline-control-move-up": "আইটেম উপরে স্থানান্তর",
        "ooui-outline-control-remove": "আইটেম সরান",
        "ooui-toolbar-more": "আরও",
-       "ooui-dialog-confirm-title": "নিশ্চিত করুন",
-       "ooui-dialog-confirm-default-ok": "ঠিক আছে",
-       "ooui-dialog-confirm-default-cancel": "বাতিল"
+       "ooui-dialog-message-accept": "ঠিক আছে",
+       "ooui-dialog-message-reject": "বাতিল"
 }
index 14280a7..c7afbfa 100644 (file)
@@ -4,13 +4,10 @@
                        "DzWiki"
                ]
        },
-       "ooui-dialog-action-close": "Zatvori",
        "ooui-outline-control-move-down": "Premjesti stavku dole",
        "ooui-outline-control-move-up": "Premjesti stavku gore",
        "ooui-outline-control-remove": "Ukloni stavku",
        "ooui-toolbar-more": "Više",
-       "ooui-dialog-confirm-title": "Potvrdi",
-       "ooui-dialog-confirm-default-prompt": "Da li ste sigurni?",
-       "ooui-dialog-confirm-default-ok": "U redu",
-       "ooui-dialog-confirm-default-cancel": "Otkaži"
+       "ooui-dialog-message-accept": "U redu",
+       "ooui-dialog-message-reject": "Otkaži"
 }
index de86daf..25fb5f5 100644 (file)
@@ -5,13 +5,10 @@
                        "Умар"
                ]
        },
-       "ooui-dialog-action-close": "ДӀачӀагӀа",
        "ooui-outline-control-move-down": "Лаха яккха элемент",
        "ooui-outline-control-move-up": "Лаккха яккха элемент",
        "ooui-outline-control-remove": "ДӀадаха меттиг",
        "ooui-toolbar-more": "Кхин",
-       "ooui-dialog-confirm-title": "Бакъдан",
-       "ooui-dialog-confirm-default-prompt": "Бакъалла лаьий хӀуна?",
-       "ooui-dialog-confirm-default-ok": "ХӀаъ",
-       "ooui-dialog-confirm-default-cancel": "Цаоьшу"
+       "ooui-dialog-message-accept": "ХӀаъ",
+       "ooui-dialog-message-reject": "Цаоьшу"
 }
index eadae99..0c66619 100644 (file)
@@ -6,8 +6,6 @@
                        "Serwan"
                ]
        },
-       "ooui-dialog-action-close": "دایخە",
-       "ooui-dialog-confirm-default-prompt": "ئایا تۆ دڵنیات ؟",
-       "ooui-dialog-confirm-default-ok": "باشە",
-       "ooui-dialog-confirm-default-cancel": "پاشگەزبوونەوە"
+       "ooui-dialog-message-accept": "باشە",
+       "ooui-dialog-message-reject": "پاشگەزبوونەوە"
 }
index 19c2f5c..01d181d 100644 (file)
@@ -4,7 +4,6 @@
                        "Paulu"
                ]
        },
-       "ooui-dialog-action-close": "Chjude",
        "ooui-outline-control-move-down": "Fà falà l'ogettu",
        "ooui-outline-control-move-up": "Fà cullà l'ogettu"
 }
index a75cf0b..2854f0b 100644 (file)
@@ -17,6 +17,8 @@
        "ooui-outline-control-move-up": "Přesunout položku nahoru",
        "ooui-outline-control-remove": "Odstranit položku",
        "ooui-toolbar-more": "Další",
+       "ooui-toolgroup-expand": "Více",
+       "ooui-toolgroup-collapse": "Méně",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Storno",
        "ooui-dialog-process-error": "Něco se pokazilo",
index 45cd201..099b0f3 100644 (file)
@@ -4,6 +4,5 @@
                        "ОйЛ"
                ]
        },
-       "ooui-dialog-action-close": "ꙁакрꙑи",
        "ooui-toolbar-more": "вѧщє"
 }
index ff71251..b74cd06 100644 (file)
@@ -7,7 +7,6 @@
                        "DChan (WMF)"
                ]
        },
-       "ooui-dialog-action-close": "Cau",
        "ooui-outline-control-move-down": "Symud yr eitem i lawr",
        "ooui-outline-control-move-up": "Symud yr eitem i fyny",
        "ooui-outline-control-remove": "Tynnu'r eitem",
index 156a6bc..0b847be 100644 (file)
@@ -10,7 +10,6 @@
                        "Tehnix"
                ]
        },
-       "ooui-dialog-action-close": "Luk",
        "ooui-outline-control-move-down": "Flyt ned",
        "ooui-outline-control-move-up": "Flyt op",
        "ooui-toolbar-more": "Mere"
index 09415fd..881ff67 100644 (file)
@@ -9,7 +9,6 @@
                        "Se4598"
                ]
        },
-       "ooui-dialog-action-close": "Racnê",
        "ooui-outline-control-move-down": "Bendi bere cêr",
        "ooui-outline-control-move-up": "Bendi bere cor",
        "ooui-outline-control-remove": "Obcey wedare",
index d963ac8..7ad3f20 100644 (file)
@@ -4,7 +4,6 @@
                        "Michawiki"
                ]
        },
-       "ooui-dialog-action-close": "Zacyniś",
        "ooui-outline-control-move-down": "Element dołoj pśesunuś",
        "ooui-outline-control-move-up": "Element górjej pśesunuś",
        "ooui-outline-control-remove": "Zapisk wótpóraś",
index d4ef2d5..624ecaa 100644 (file)
@@ -5,13 +5,10 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spôsta in bâs",
        "ooui-outline-control-move-up": "Spôsta in êlt",
        "ooui-outline-control-remove": "Armōv l'elemèint",
        "ooui-toolbar-more": "Êter",
-       "ooui-dialog-confirm-title": "Cunfermèr",
-       "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
-       "ooui-dialog-confirm-default-ok": "'D acòrdi",
-       "ooui-dialog-confirm-default-cancel": "Scanślèr"
+       "ooui-dialog-message-accept": "'D acòrdi",
+       "ooui-dialog-message-reject": "Scanślèr"
 }
index 0b54f41..6d9e8bf 100644 (file)
@@ -5,13 +5,10 @@
                        "Lévi"
                ]
        },
-       "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spôsta in bâs",
        "ooui-outline-control-move-up": "Spôsta in êlta",
        "ooui-outline-control-remove": "Tór vìa 'l elemèint",
        "ooui-toolbar-more": "Êter",
-       "ooui-dialog-confirm-title": "Cunfirmèr",
-       "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
-       "ooui-dialog-confirm-default-ok": "'D acòrdi",
-       "ooui-dialog-confirm-default-cancel": "Scanślèr"
+       "ooui-dialog-message-accept": "'D acòrdi",
+       "ooui-dialog-message-reject": "Scanślèr"
 }
index 101f0af..8d9714c 100644 (file)
@@ -7,7 +7,6 @@
                        "Yekrats"
                ]
        },
-       "ooui-dialog-action-close": "Fermi",
        "ooui-outline-control-move-down": "Movi eron suben",
        "ooui-outline-control-move-up": "Movi eron supren",
        "ooui-toolbar-more": "Pli"
index f1ce0bb..62973d3 100644 (file)
@@ -6,7 +6,6 @@
                        "Xabier Armendaritz"
                ]
        },
-       "ooui-dialog-action-close": "Itxi",
        "ooui-outline-control-move-down": "Mugitu itema beherantz",
        "ooui-outline-control-move-up": "Mugitu itema gorantz",
        "ooui-toolbar-more": "Gehiago"
index 1810080..b84df25 100644 (file)
@@ -4,7 +4,6 @@
                        "EileenSanda"
                ]
        },
-       "ooui-dialog-action-close": "Lat aftur",
        "ooui-outline-control-move-down": "Flyt lutin niður",
        "ooui-outline-control-move-up": "Flyt lutin upp",
        "ooui-toolbar-more": "Meira"
index d98f4ab..54d0fb2 100644 (file)
@@ -5,7 +5,6 @@
                        "Murma174"
                ]
        },
-       "ooui-dialog-action-close": "Slütj",
        "ooui-outline-control-move-down": "Element efter onern sküüw",
        "ooui-outline-control-move-up": "Element efter boowen sküüw",
        "ooui-outline-control-remove": "Element wechnem",
index e1c129b..83c2fd9 100644 (file)
@@ -5,7 +5,6 @@
                        "Tocaibon"
                ]
        },
-       "ooui-dialog-action-close": "Siere",
        "ooui-outline-control-move-down": "sposte sot",
        "ooui-outline-control-move-up": "sposte in su",
        "ooui-toolbar-more": "Altri"
index bbaf4c1..81690ab 100644 (file)
@@ -19,6 +19,8 @@
        "ooui-outline-control-move-up": "להזיז את הפריט מעלה",
        "ooui-outline-control-remove": "להסיר את הפריט",
        "ooui-toolbar-more": "עוד",
+       "ooui-toolgroup-expand": "יותר",
+       "ooui-toolgroup-collapse": "פחות",
        "ooui-dialog-message-accept": "אישור",
        "ooui-dialog-message-reject": "ביטול",
        "ooui-dialog-process-error": "משהו השתבש",
index 5a9bef0..a76d39e 100644 (file)
@@ -8,7 +8,6 @@
                        "Goelujjwal"
                ]
        },
-       "ooui-dialog-action-close": "बंद करें",
        "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
        "ooui-outline-control-move-up": "प्रविष्टि ऊपर ले जाएँ",
        "ooui-outline-control-remove": "आइटम हटाएँ",
index 371b4f3..1581fd8 100644 (file)
@@ -5,7 +5,6 @@
                        "Michawiki"
                ]
        },
-       "ooui-dialog-action-close": "Začinić",
        "ooui-outline-control-move-down": "Zapisk dele přesunyć",
        "ooui-outline-control-move-up": "Zapisk horje přesunyć",
        "ooui-outline-control-remove": "Zapisk wotstronić",
index 1710bc6..7565f4f 100644 (file)
@@ -11,7 +11,6 @@
                        "William Surya Permana"
                ]
        },
-       "ooui-dialog-action-close": "Tutup",
        "ooui-outline-control-move-down": "Pindahkan butir ke bawah",
        "ooui-outline-control-move-up": "Pindahkan butir ke atas",
        "ooui-toolbar-more": "Lainnya"
index 4a9f1c4..241cc33 100644 (file)
@@ -4,7 +4,6 @@
                        "Makuba"
                ]
        },
-       "ooui-dialog-action-close": "Terminar",
        "ooui-outline-control-move-down": "Mover element a infra",
        "ooui-outline-control-move-up": "Mover element a supra",
        "ooui-toolbar-more": "Plu"
index 58fc1b8..2c99bdd 100644 (file)
@@ -5,7 +5,6 @@
                        "Snævar"
                ]
        },
-       "ooui-dialog-action-close": "Loka",
        "ooui-outline-control-move-down": "Færa atriði niður",
        "ooui-outline-control-move-up": "Færa atriði upp",
        "ooui-toolbar-more": "Fleira"
index 3d4e049..2c79fc2 100644 (file)
@@ -19,6 +19,8 @@
        "ooui-outline-control-move-up": "Sposta in alto",
        "ooui-outline-control-remove": "Rimuovi elemento",
        "ooui-toolbar-more": "Altro",
+       "ooui-toolgroup-expand": "Più",
+       "ooui-toolgroup-collapse": "Meno",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Annulla",
        "ooui-dialog-process-error": "Qualcosa è andato storto",
index 38d35f7..8827af3 100644 (file)
@@ -6,6 +6,5 @@
                        "Pras"
                ]
        },
-       "ooui-dialog-action-close": "Tutup",
        "ooui-outline-control-move-down": "Pindhahaken butir mangandhap"
 }
index ef59f1b..b79ab50 100644 (file)
@@ -11,7 +11,6 @@
                        "Tokoko"
                ]
        },
-       "ooui-dialog-action-close": "დახურვა",
        "ooui-outline-control-move-down": "ელემენტის ქვემოთ გადატანა",
        "ooui-outline-control-move-up": "ელემენტის ზემოთ გადატანა",
        "ooui-toolbar-more": "მეტი"
index c1a0f19..9840319 100644 (file)
@@ -4,7 +4,6 @@
                        "Arystanbek"
                ]
        },
-       "ooui-dialog-action-close": "Жабу",
        "ooui-outline-control-move-down": "Элементті төмен жылжыту",
        "ooui-outline-control-move-up": "Элементті жоғары жылжыту",
        "ooui-outline-control-remove": "Элементті алып тастау",
index f7bfca5..c0d72c4 100644 (file)
@@ -4,7 +4,6 @@
                        "Sovichet"
                ]
        },
-       "ooui-dialog-action-close": "បិទ",
        "ooui-outline-control-move-down": "រុញ​ទៅ​ក្រោម",
        "ooui-outline-control-move-up": "រុញ​ទៅ​លើ",
        "ooui-outline-control-remove": "ដក​វត្ថុ​ចេញ",
index 82d91ab..63902f3 100644 (file)
@@ -7,7 +7,8 @@
                        "LFM",
                        "아라",
                        "고기랑",
-                       "Ryuch"
+                       "Ryuch",
+                       "Revi"
                ]
        },
        "ooui-outline-control-move-down": "항목을 아래로 옮기기",
index 18c66e9..1bec097 100644 (file)
@@ -4,7 +4,6 @@
                        "Iltever"
                ]
        },
-       "ooui-dialog-action-close": "Джаб",
        "ooui-outline-control-move-down": "Элементни тюбюне кёчюр",
        "ooui-outline-control-move-up": "Элементни башына кёчюр",
        "ooui-outline-control-remove": "Пунктну кетер",
index c7f2887..a6c6d8a 100644 (file)
@@ -5,6 +5,5 @@
                        "Nrowe",
                        "Purodha"
                ]
-       },
-       "ooui-dialog-action-close": "Degea"
+       }
 }
index 7c6b994..e2b8ab7 100644 (file)
@@ -7,6 +7,5 @@
                        "Tynchtyk Chorotegin",
                        "Викиней"
                ]
-       },
-       "ooui-dialog-action-close": "Жабуу"
+       }
 }
index 3156e84..87309db 100644 (file)
@@ -4,7 +4,6 @@
                        "Ninonino"
                ]
        },
-       "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spòsta 'n zó",
        "ooui-outline-control-move-up": "Spòsta 'n sö",
        "ooui-toolbar-more": "Amò"
index e295704..ecd06a8 100644 (file)
@@ -6,6 +6,5 @@
                        "Mantak111"
                ]
        },
-       "ooui-dialog-action-close": "Uždaryti",
        "ooui-outline-control-remove": "Šalinti elementus"
 }
index f296c3a..2b3ad53 100644 (file)
@@ -4,5 +4,5 @@
                        "Joe young yu"
                ]
        },
-       "ooui-dialog-confirm-default-ok": "可"
+       "ooui-dialog-message-accept": "可"
 }
index 2f27614..af97d17 100644 (file)
@@ -3,6 +3,5 @@
                "authors": [
                        "Jagwar"
                ]
-       },
-       "ooui-dialog-action-close": "Hidiana"
+       }
 }
index 6dfe34a..b8790d3 100644 (file)
@@ -5,13 +5,10 @@
                        "Jagwar"
                ]
        },
-       "ooui-dialog-action-close": "Tutuik",
        "ooui-outline-control-move-down": "Pindahan ko ka bawah",
        "ooui-outline-control-move-up": "Pindahan ko ka ateh",
        "ooui-outline-control-remove": "Hapuih ko",
        "ooui-toolbar-more": "Lainnyo",
-       "ooui-dialog-confirm-title": "Pastian",
-       "ooui-dialog-confirm-default-prompt": "Yakin?",
-       "ooui-dialog-confirm-default-ok": "Yo",
-       "ooui-dialog-confirm-default-cancel": "Batal"
+       "ooui-dialog-message-accept": "Yo",
+       "ooui-dialog-message-reject": "Batal"
 }
index 48b05f5..0ce0c3f 100644 (file)
@@ -7,7 +7,6 @@
                        "Vssun"
                ]
        },
-       "ooui-dialog-action-close": "അടയ്ക്കുക",
        "ooui-outline-control-move-down": "ഇനം താഴേയ്ക്ക് മാറ്റുക",
        "ooui-outline-control-move-up": "ഇനം മുകളിലേയ്ക്ക് മാറ്റുക",
        "ooui-toolbar-more": "കൂടുതൽ"
index 618b5dc..7006190 100644 (file)
@@ -9,7 +9,6 @@
                        "संतोष दहिवळ"
                ]
        },
-       "ooui-dialog-action-close": "बंद करा",
        "ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा",
        "ooui-outline-control-move-up": "घटक (आयटम) वर सरकवा",
        "ooui-toolbar-more": "अधिक"
index 2cee413..9166037 100644 (file)
@@ -6,6 +6,5 @@
                        "PiRSquared17"
                ]
        },
-       "ooui-dialog-action-close": "Chiure",
        "ooui-toolbar-more": "Atro"
 }
index e8f0c83..26171f1 100644 (file)
@@ -4,7 +4,6 @@
                        "Servien"
                ]
        },
-       "ooui-dialog-action-close": "Sluten",
        "ooui-outline-control-move-down": "Onderwarp ummeneer zetten",
        "ooui-outline-control-move-up": "Onderwarp umhoge zetten"
 }
index c5d16ba..1e5b83d 100644 (file)
@@ -4,7 +4,6 @@
                        "Zylbath"
                ]
        },
-       "ooui-dialog-action-close": "Dichtmaken",
        "ooui-outline-control-move-down": "Element na ünnen schuven",
        "ooui-outline-control-move-up": "Element na baven schuven",
        "ooui-toolbar-more": "Mehr"
index da4b829..8b73233 100644 (file)
@@ -6,13 +6,10 @@
                        "Ganesh Paudel"
                ]
        },
-       "ooui-dialog-action-close": "बन्द गर्ने",
        "ooui-outline-control-move-down": "वस्तुलाई तल सार्ने",
        "ooui-outline-control-move-up": "वस्तुलाई माथि सार्ने",
        "ooui-outline-control-remove": "वस्तुलाई हटाउने",
        "ooui-toolbar-more": "थप",
-       "ooui-dialog-confirm-title": "निश्चित गर्ने",
-       "ooui-dialog-confirm-default-prompt": "निश्चित हुनुहुन्छ ?",
-       "ooui-dialog-confirm-default-ok": "हुन्छ",
-       "ooui-dialog-confirm-default-cancel": "रद्द गर्ने"
+       "ooui-dialog-message-accept": "हुन्छ",
+       "ooui-dialog-message-reject": "रद्द गर्ने"
 }
index 07a40b1..943e6ad 100644 (file)
@@ -5,7 +5,6 @@
                        "Njardarlogar"
                ]
        },
-       "ooui-dialog-action-close": "Lat att",
        "ooui-outline-control-move-down": "Flytt element ned",
        "ooui-outline-control-move-up": "Flytt element opp",
        "ooui-toolbar-more": "Fleire"
index a7f43a3..4d35b6c 100644 (file)
@@ -5,12 +5,9 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Tampar",
        "ooui-outline-control-move-down": "Far davalar l’element",
        "ooui-outline-control-move-up": "Far montar l’element",
        "ooui-outline-control-remove": "Suprimir l’element",
        "ooui-toolbar-more": "Mai",
-       "ooui-dialog-confirm-title": "Confirmar",
-       "ooui-dialog-confirm-default-prompt": "Sètz segur ?",
-       "ooui-dialog-confirm-default-cancel": "Anullar"
+       "ooui-dialog-message-reject": "Anullar"
 }
index a7083ae..2a1f95e 100644 (file)
@@ -5,6 +5,5 @@
                        "Psubhashish",
                        "ଶିତିକଣ୍ଠ ଦାଶ"
                ]
-       },
-       "ooui-dialog-action-close": "ବନ୍ଦ କରିବେ"
+       }
 }
index 8f75286..7af5bc9 100644 (file)
@@ -6,6 +6,5 @@
                        "Bouron",
                        "Nasir8891"
                ]
-       },
-       "ooui-dialog-action-close": "বন্ধ"
+       }
 }
index b51f70d..02d0842 100644 (file)
@@ -4,12 +4,10 @@
                        "Manuae"
                ]
        },
-       "ooui-dialog-action-close": "Schließe",
        "ooui-outline-control-move-down": "Bweeschs nunna",
        "ooui-outline-control-move-up": "Bweeschs nuff",
        "ooui-outline-control-remove": "Leschs",
        "ooui-toolbar-more": "Mea",
-       "ooui-dialog-confirm-default-prompt": "Bischda sischa?",
-       "ooui-dialog-confirm-default-ok": "OK",
-       "ooui-dialog-confirm-default-cancel": "Abbresche"
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Abbresche"
 }
index a202a02..b8fd3a5 100644 (file)
@@ -6,7 +6,6 @@
                        "පසිඳු කාවින්ද"
                ]
        },
-       "ooui-dialog-action-close": "Saré",
        "ooui-outline-control-move-down": "Fé calé giù l'element",
        "ooui-outline-control-move-up": "Fé monté l'element",
        "ooui-toolbar-more": "Ëd pi"
index 06d3b87..94bc7df 100644 (file)
@@ -4,7 +4,6 @@
                        "Ahmed-Najib-Biabani-Ibrahimkhel"
                ]
        },
-       "ooui-dialog-action-close": "تړل",
        "ooui-outline-control-move-down": "توکی ښکته راوړل",
        "ooui-outline-control-move-up": "توکی پورته راوړل",
        "ooui-toolbar-more": "نور"
index a8cced8..94ea089 100644 (file)
@@ -12,7 +12,6 @@
                        555
                ]
        },
-       "ooui-dialog-action-close": "Fechar",
        "ooui-outline-control-move-down": "Mover item para baixo",
        "ooui-outline-control-move-up": "Mover item para cima",
        "ooui-toolbar-more": "Mais"
index 5141f34..cb0b2c3 100644 (file)
@@ -5,7 +5,6 @@
                        "Jduranboger"
                ]
        },
-       "ooui-dialog-action-close": "Wichq'ay",
        "ooui-outline-control-move-down": "Qallawata uraykuchiy",
        "ooui-outline-control-move-up": "Qallawata huqariy",
        "ooui-outline-control-remove": "P'anqa sutikunata qichuy",
index 11427ec..cd089af 100644 (file)
@@ -4,7 +4,6 @@
                        "Joetaras"
                ]
        },
-       "ooui-dialog-action-close": "Achiude",
        "ooui-outline-control-move-down": "Spuèste 'a vôsce sotte",
        "ooui-outline-control-move-up": "Spuèste 'a vôsce sus",
        "ooui-toolbar-more": "De cchiù"
index 82d76a6..85a94cd 100644 (file)
@@ -4,6 +4,5 @@
                        "Gazeb",
                        "HalanTul"
                ]
-       },
-       "ooui-dialog-action-close": "Сап"
+       }
 }
index a063cc8..22a212f 100644 (file)
@@ -7,9 +7,7 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Chiùi",
        "ooui-outline-control-move-down": "Sposta di sutta",
        "ooui-outline-control-move-up": "Sposta di supra",
-       "ooui-toolbar-more": "Àutri cosi",
-       "ooui-dialog-confirm-title": "Cunferma"
+       "ooui-toolbar-more": "Àutri cosi"
 }
index 085f908..0a26a5c 100644 (file)
@@ -4,7 +4,6 @@
                        "John Reid"
                ]
        },
-       "ooui-dialog-action-close": "Claise",
        "ooui-outline-control-move-down": "Muiv eetem doon",
        "ooui-outline-control-move-up": "Muiv eetem up",
        "ooui-outline-control-remove": "Remuiv eetem",
index ab9f9fd..b40fa04 100644 (file)
@@ -4,7 +4,6 @@
                        "OC Ripper"
                ]
        },
-       "ooui-dialog-action-close": "Zatvori",
        "ooui-outline-control-move-down": "Pomakni stavku dolje",
        "ooui-outline-control-move-up": "Pomakni stavku gore"
 }
index b5c0b69..5988773 100644 (file)
@@ -6,7 +6,6 @@
                        "ශ්වෙත"
                ]
        },
-       "ooui-dialog-action-close": "නිමවන්න",
        "ooui-outline-control-move-down": "අයිතමය පහලටදමන්න",
        "ooui-outline-control-move-up": "අයිතමය ඉහලටදමන්න"
 }
index dd8294f..0145017 100644 (file)
@@ -6,6 +6,5 @@
                        "Shanmugamp7",
                        "மதனாஹரன்"
                ]
-       },
-       "ooui-dialog-action-close": "மூடுக"
+       }
 }
index f220fa3..d486870 100644 (file)
@@ -9,6 +9,5 @@
                        "Visdaviva",
                        "மதனாஹரன்"
                ]
-       },
-       "ooui-dialog-action-close": "మూయి"
+       }
 }
index 908c894..1429bed 100644 (file)
@@ -4,7 +4,6 @@
                        "Ibrahim"
                ]
        },
-       "ooui-dialog-action-close": "Пӯшиш",
        "ooui-outline-control-move-down": "Ҳаракати мавод ба поён",
        "ooui-outline-control-move-up": "Ҳаракати мавод ба боло",
        "ooui-outline-control-remove": "Ҳазви мавод",
index f36dd6a..9452793 100644 (file)
@@ -5,7 +5,6 @@
                        "Taweetham"
                ]
        },
-       "ooui-dialog-action-close": "ปิด",
        "ooui-outline-control-move-down": "เลื่อนรายการลง",
        "ooui-outline-control-move-up": "ย้ายรายการขึ้น"
 }
index 178384c..b3a9f24 100644 (file)
@@ -5,13 +5,10 @@
                        "Sky Harbor"
                ]
        },
-       "ooui-dialog-action-close": "Isara",
        "ooui-outline-control-move-down": "Ilipat ang aytem pababa",
        "ooui-outline-control-move-up": "Ilipat ang aytem pataas",
        "ooui-outline-control-remove": "Tanggalin ang aytem",
        "ooui-toolbar-more": "Marami pa",
-       "ooui-dialog-confirm-title": "Tiyakin",
-       "ooui-dialog-confirm-default-prompt": "Nakatitiyak ka ba?",
-       "ooui-dialog-confirm-default-ok": "Sige",
-       "ooui-dialog-confirm-default-cancel": "Huwag ituloy"
+       "ooui-dialog-message-accept": "Sige",
+       "ooui-dialog-message-reject": "Huwag ituloy"
 }
index 257e13c..408a1b4 100644 (file)
@@ -4,7 +4,6 @@
                        "Ajdar"
                ]
        },
-       "ooui-dialog-action-close": "Ябу",
        "ooui-outline-control-move-down": "Элементны аска күчерү",
        "ooui-outline-control-move-up": "Элементны өскә күчерү"
 }
index 03b7808..7c6263e 100644 (file)
@@ -7,7 +7,6 @@
                        "පසිඳු කාවින්ද"
                ]
        },
-       "ooui-dialog-action-close": "Yopish",
        "ooui-outline-control-move-down": "Elementni pastga koʻchirish",
        "ooui-outline-control-move-up": "Elementni yuqoriga koʻchirish",
        "ooui-toolbar-more": "Yana"
index 1a91cdb..4de584b 100644 (file)
@@ -6,10 +6,8 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Sara",
        "ooui-outline-control-move-down": "Sposta in baso",
        "ooui-outline-control-move-up": "Sposta in sima",
        "ooui-toolbar-more": "Altro",
-       "ooui-dialog-confirm-title": "Conferma",
-       "ooui-dialog-confirm-default-ok": "Va ben"
+       "ooui-dialog-message-accept": "Va ben"
 }
index 205cbe8..920041b 100644 (file)
@@ -10,6 +10,8 @@
        "ooui-outline-control-move-up": "Chuyển mục lên",
        "ooui-outline-control-remove": "Xóa khoản",
        "ooui-toolbar-more": "Thêm",
+       "ooui-toolgroup-expand": "Mở rộng",
+       "ooui-toolgroup-collapse": "Rút gọn",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Hủy bỏ",
        "ooui-dialog-process-error": "Đã bị trục trặc",
index 7e359a5..3510ca9 100644 (file)
@@ -4,6 +4,5 @@
                        "Malafaya"
                ]
        },
-       "ooui-dialog-action-close": "Färmükön",
        "ooui-toolbar-more": "Pluikos"
 }
index bbb8f30..d979fc1 100644 (file)
@@ -4,7 +4,6 @@
                        "Demmy"
                ]
        },
-       "ooui-dialog-action-close": "Ìpadé",
        "ooui-outline-control-move-down": "Sún onítòún sí sàlẹ̀",
        "ooui-outline-control-move-up": "Sún onítòún s'ókè",
        "ooui-toolbar-more": "Míràn"
index 4b5d065..1110669 100644 (file)
@@ -21,6 +21,7 @@
        "ooui-outline-control-remove": "移除項目",
        "ooui-toolbar-more": "更多",
        "ooui-toolgroup-expand": "更多",
+       "ooui-toolgroup-collapse": "更少",
        "ooui-dialog-message-accept": "確定",
        "ooui-dialog-message-reject": "取消",
        "ooui-dialog-process-error": "發生不明錯誤",
index 3cef441..1056abc 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (40de4dabe6)
+ * OOjs UI v0.1.0-pre (571f26d0ab)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-10-22T23:42:26Z
+ * Date: 2014-11-03T21:02:16Z
  */
 /* @noflip */
 .oo-ui-rtl {
@@ -20,6 +20,7 @@
        cursor: pointer;
        display: inline-block;
        vertical-align: middle;
+       font-family: inherit;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        opacity: 0.5;
+       -webkit-transform: translate3d(0, 0, 0);
        box-shadow: none;
        color: #333333;
        background: #eeeeee;
        box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
 .oo-ui-fieldLayout {
+       display: block;
        margin-bottom: 1em;
 }
 .oo-ui-fieldLayout:before,
        margin-left: 0;
 }
 .oo-ui-progressBarWidget {
-       width: 20em;
-       border: solid 1px #cccccc;
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #a6cee1;
        border-radius: 0.25em;
 }
 .oo-ui-progressBarWidget-bar {
        height: 1em;
-       border-right: solid 1px #cccccc;
+       border-right: solid 1px #a6cee1;
        -webkit-transition: width 200ms;
           -moz-transition: width 200ms;
            -ms-transition: width 200ms;
             -o-transition: width 200ms;
                transition: width 200ms;
-       background: #eeeeee;
-       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
-       background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:    -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+       background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
 }
 .oo-ui-progressBarWidget.oo-ui-widget-disabled {
        opacity: 0.6;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
-       width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
        padding: 0.33em 0.75em;
        color: #888888;
 }
-.oo-ui-inlineMenuWidget {
+.oo-ui-dropdownWidget {
        position: relative;
        display: inline-block;
        margin: 0.25em 0;
-       min-width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        width: 100%;
        display: inline-block;
        cursor: pointer;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        position: absolute;
        background-position: center center;
        background-repeat: no-repeat;
 }
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
+.oo-ui-dropdownWidget .oo-ui-menuWidget {
        z-index: 1;
        width: 100%;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        cursor: default;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        height: 2.5em;
        border: solid 1px rgba(0, 0, 0, 0.1);
        border-radius: 0.25em;
 }
-.oo-ui-inlineMenuWidget-handle:hover {
+.oo-ui-dropdownWidget-handle:hover {
        border-color: rgba(0, 0, 0, 0.2);
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        line-height: 2.5em;
        margin: 0 0.5em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        top: 0;
        width: 2.5em;
        height: 2.5em;
        opacity: 0.8;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-left: 3em;
 }
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-right: 2em;
 }
 .oo-ui-outlineItemWidget {
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
-       min-width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-comboBoxWidget > .oo-ui-selectWidget {
        width: 100%;
        /* @noflip */
        left: 0;
 }
-.oo-ui-window-isolated,
-.oo-ui-window-overlay {
+.oo-ui-window,
+.oo-ui-window-isolated {
        background-color: transparent;
        background-image: none;
        font-family: sans-serif;
index 7efe8fe..fb6b342 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (40de4dabe6)
+ * OOjs UI v0.1.0-pre (571f26d0ab)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-10-22T23:42:16Z
+ * Date: 2014-11-03T21:02:06Z
  */
 /* Instantiation */
 
index b2168e8..5182a5f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (40de4dabe6)
+ * OOjs UI v0.1.0-pre (571f26d0ab)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-10-22T23:42:26Z
+ * Date: 2014-11-03T21:02:16Z
  */
 /* @noflip */
 .oo-ui-rtl {
@@ -20,6 +20,7 @@
        cursor: pointer;
        display: inline-block;
        vertical-align: middle;
+       font-family: inherit;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        opacity: 0.5;
+       -webkit-transform: translate3d(0, 0, 0);
        box-shadow: none;
        color: #333333;
        background: #eeeeee;
        box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
 .oo-ui-fieldLayout {
+       display: block;
        margin-bottom: 1em;
 }
 .oo-ui-fieldLayout:before,
        margin-left: 0;
 }
 .oo-ui-progressBarWidget {
-       width: 20em;
-       border: solid 1px #cccccc;
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #a6cee1;
        border-radius: 0.25em;
 }
 .oo-ui-progressBarWidget-bar {
        height: 1em;
-       border-right: solid 1px #cccccc;
+       border-right: solid 1px #a6cee1;
        -webkit-transition: width 200ms;
           -moz-transition: width 200ms;
            -ms-transition: width 200ms;
             -o-transition: width 200ms;
                transition: width 200ms;
-       background: #eeeeee;
-       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
-       background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:    -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+       background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
 }
 .oo-ui-progressBarWidget.oo-ui-widget-disabled {
        opacity: 0.6;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
-       width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
        padding: 0.33em 0.75em;
        color: #888888;
 }
-.oo-ui-inlineMenuWidget {
+.oo-ui-dropdownWidget {
        position: relative;
        display: inline-block;
        margin: 0.25em 0;
-       min-width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        width: 100%;
        display: inline-block;
        cursor: pointer;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        position: absolute;
        background-position: center center;
        background-repeat: no-repeat;
 }
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
+.oo-ui-dropdownWidget .oo-ui-menuWidget {
        z-index: 1;
        width: 100%;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        cursor: default;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        height: 2.5em;
        border: solid 1px rgba(0, 0, 0, 0.1);
        border-radius: 0.25em;
 }
-.oo-ui-inlineMenuWidget-handle:hover {
+.oo-ui-dropdownWidget-handle:hover {
        border-color: rgba(0, 0, 0, 0.2);
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        line-height: 2.5em;
        margin: 0 0.5em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        top: 0;
        width: 2.5em;
        height: 2.5em;
        opacity: 0.8;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-left: 3em;
 }
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-right: 2em;
 }
 .oo-ui-outlineItemWidget {
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
-       min-width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-comboBoxWidget > .oo-ui-selectWidget {
        width: 100%;
        /* @noflip */
        left: 0;
 }
-.oo-ui-window-isolated,
-.oo-ui-window-overlay {
+.oo-ui-window,
+.oo-ui-window-isolated {
        background-color: transparent;
        background-image: none;
        font-family: sans-serif;
index 476f8c2..5266918 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (40de4dabe6)
+ * OOjs UI v0.1.0-pre (571f26d0ab)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-10-22T23:42:26Z
+ * Date: 2014-11-03T21:02:16Z
  */
 /* @noflip */
 .oo-ui-rtl {
@@ -20,6 +20,7 @@
        cursor: pointer;
        display: inline-block;
        vertical-align: middle;
+       font-family: inherit;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
        box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
 .oo-ui-fieldLayout {
+       display: block;
        margin-bottom: 1em;
 }
 .oo-ui-fieldLayout:before,
        background-color: #ffffff;
 }
 .oo-ui-progressBarWidget {
-       width: 20em;
-       border: solid 1px #cccccc;
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #0274ff;
        border-radius: 0.1em;
 }
 .oo-ui-progressBarWidget-bar {
        height: 1em;
-       border-right: solid 1px #cccccc;
+       border-right: solid 1px #0274ff;
        background: #0274ff;
        -webkit-transition: width 200ms;
           -moz-transition: width 200ms;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
-       width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
        padding: 0.33em 0.75em;
        color: #888888;
 }
-.oo-ui-inlineMenuWidget {
+.oo-ui-dropdownWidget {
        position: relative;
        display: inline-block;
        margin: 0.25em 0;
-       min-width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        width: 100%;
        display: inline-block;
        cursor: pointer;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        position: absolute;
        background-position: center center;
        background-repeat: no-repeat;
 }
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
+.oo-ui-dropdownWidget .oo-ui-menuWidget {
        z-index: 1;
        width: 100%;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        cursor: default;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        height: 2.5em;
        border: solid 1px #cccccc;
        border-radius: 0.1em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        line-height: 2.5em;
        margin: 0 1em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        top: 0;
        width: 2.5em;
        height: 2.5em;
 }
-.oo-ui-inlineMenuWidget:hover .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
        border-color: #aaaaaa;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-left: 3em;
 }
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-right: 2em;
 }
-.oo-ui-inlineMenuWidget .oo-ui-selectWidget {
+.oo-ui-dropdownWidget .oo-ui-selectWidget {
        border-top-color: #ffffff;
 }
 .oo-ui-outlineItemWidget {
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-comboBoxWidget > .oo-ui-selectWidget {
        width: 100%;
        /* @noflip */
        left: 0;
 }
-.oo-ui-window-isolated,
-.oo-ui-window-overlay {
+.oo-ui-window,
+.oo-ui-window-isolated {
        background: transparent;
        font-family: sans-serif;
        font-size: 0.8em;
index 4ad621d..5264487 100644 (file)
@@ -1,16 +1,16 @@
 /*!
- * OOjs UI v0.1.0-pre (40de4dabe6)
+ * OOjs UI v0.1.0-pre (571f26d0ab)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-10-22T23:42:16Z
+ * Date: 2014-11-03T21:02:06Z
  */
 /**
  * @class
- * @extends {OO.ui.Theme}
+ * @extends OO.ui.Theme
  *
  * @constructor
  */
index a12d226..9125945 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (40de4dabe6)
+ * OOjs UI v0.1.0-pre (571f26d0ab)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-10-22T23:42:26Z
+ * Date: 2014-11-03T21:02:16Z
  */
 /* @noflip */
 .oo-ui-rtl {
@@ -20,6 +20,7 @@
        cursor: pointer;
        display: inline-block;
        vertical-align: middle;
+       font-family: inherit;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
        box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
 .oo-ui-fieldLayout {
+       display: block;
        margin-bottom: 1em;
 }
 .oo-ui-fieldLayout:before,
        background-color: #ffffff;
 }
 .oo-ui-progressBarWidget {
-       width: 20em;
-       border: solid 1px #cccccc;
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #0274ff;
        border-radius: 0.1em;
 }
 .oo-ui-progressBarWidget-bar {
        height: 1em;
-       border-right: solid 1px #cccccc;
+       border-right: solid 1px #0274ff;
        background: #0274ff;
        -webkit-transition: width 200ms;
           -moz-transition: width 200ms;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
-       width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
        padding: 0.33em 0.75em;
        color: #888888;
 }
-.oo-ui-inlineMenuWidget {
+.oo-ui-dropdownWidget {
        position: relative;
        display: inline-block;
        margin: 0.25em 0;
-       min-width: 20em;
+       width: 100%;
+       max-width: 50em;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        width: 100%;
        display: inline-block;
        cursor: pointer;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        position: absolute;
        background-position: center center;
        background-repeat: no-repeat;
 }
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
+.oo-ui-dropdownWidget .oo-ui-menuWidget {
        z-index: 1;
        width: 100%;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        cursor: default;
 }
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget-handle {
        height: 2.5em;
        border: solid 1px #cccccc;
        border-radius: 0.1em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        line-height: 2.5em;
        margin: 0 1em;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        top: 0;
        width: 2.5em;
        height: 2.5em;
 }
-.oo-ui-inlineMenuWidget:hover .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
        border-color: #aaaaaa;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-left: 3em;
 }
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-right: 2em;
 }
-.oo-ui-inlineMenuWidget .oo-ui-selectWidget {
+.oo-ui-dropdownWidget .oo-ui-selectWidget {
        border-top-color: #ffffff;
 }
 .oo-ui-outlineItemWidget {
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
+       width: 100%;
+       max-width: 50em;
 }
 .oo-ui-comboBoxWidget > .oo-ui-selectWidget {
        width: 100%;
        /* @noflip */
        left: 0;
 }
-.oo-ui-window-isolated,
-.oo-ui-window-overlay {
+.oo-ui-window,
+.oo-ui-window-isolated {
        background: transparent;
        font-family: sans-serif;
        font-size: 0.8em;
index 6492fe0..9e9aa5b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (40de4dabe6)
+ * OOjs UI v0.1.0-pre (571f26d0ab)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-10-22T23:42:16Z
+ * Date: 2014-11-03T21:02:06Z
  */
 ( function ( OO ) {
 
@@ -693,7 +693,7 @@ OO.ui.ActionSet.prototype.organize = function () {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {Function} [$] jQuery for the frame the widget is in
- * @cfg {string[]} [classes] CSS class names
+ * @cfg {string[]} [classes] CSS class names to add
  * @cfg {string} [text] Text to insert
  * @cfg {jQuery} [$content] Content elements to append (after text)
  */
@@ -800,7 +800,7 @@ OO.ui.Element.getWindow = function ( obj ) {
  *
  * @static
  * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the direction for
- * @return {string} Text direction, either `ltr` or `rtl`
+ * @return {string} Text direction, either 'ltr' or 'rtl'
  */
 OO.ui.Element.getDir = function ( obj ) {
        var isDoc, isWin;
@@ -1011,7 +1011,7 @@ OO.ui.Element.getClosestScrollableContainer = function ( el, dimension ) {
  *
  * @static
  * @param {HTMLElement} el Element to scroll into view
- * @param {Object} [config={}] Configuration config
+ * @param {Object} [config] Configuration options
  * @param {string} [config.duration] jQuery animation duration value
  * @param {string} [config.direction] Scroll in only one direction, e.g. 'x' or 'y', omit
  *  to scroll in both directions
@@ -1112,7 +1112,7 @@ OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
  * Check if element supports one or more methods.
  *
  * @param {string|string[]} methods Method or list of methods to check
- * @return boolean All methods are supported
+ * @return {boolean} All methods are supported
  */
 OO.ui.Element.prototype.supports = function ( methods ) {
        var i, len,
@@ -1217,7 +1217,7 @@ OO.ui.Element.prototype.setElementGroup = function ( group ) {
 /**
  * Scroll element into view.
  *
- * @param {Object} [config={}]
+ * @param {Object} [config] Configuration options
  */
 OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
        return OO.ui.Element.scrollIntoView( this.$element[0], config );
@@ -1329,7 +1329,7 @@ OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
 /**
  * Check if the widget is disabled.
  *
- * @param {boolean} Button is disabled
+ * @return {boolean} Button is disabled
  */
 OO.ui.Widget.prototype.isDisabled = function () {
        return this.disabled;
@@ -3545,8 +3545,8 @@ OO.initClass( OO.ui.Theme );
 /**
  * Get a list of classes to be applied to a widget.
  *
- * @localdoc The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or
- *   removes, otherwise state transitions will not work properly.
+ * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,
+ * otherwise state transitions will not work properly.
  *
  * @param {OO.ui.Element} element Element for which to get classes
  * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
@@ -3560,7 +3560,7 @@ OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) {
  *
  * For elements with theme logic hooks, this should be called anytime there's a state change.
  *
- * @param {OO.ui.Element} Element for which to update classes
+ * @param {OO.ui.Element} element Element for which to update classes
  * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
  */
 OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
@@ -3584,7 +3584,8 @@ OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$button] Button node, assigned to #$button, omit to use a generated `<a>`
  * @cfg {boolean} [framed=true] Render button with a frame
- * @cfg {number} [tabIndex=0] Button's tab index, use null to have no tabIndex
+ * @cfg {number} [tabIndex=0] Button's tab index. Use 0 to use default ordering, use -1 to prevent
+ *   tab focusing.
  * @cfg {string} [accessKey] Button's access key
  */
 OO.ui.ButtonElement = function OoUiButtonElement( config ) {
@@ -3883,7 +3884,7 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
 /**
  * Add items.
  *
- * Adding an existing item (by value) will move it.
+ * Adding an existing item will move it.
  *
  * @param {OO.ui.Element[]} items Items
  * @param {number} [index] Index to insert items at
@@ -4091,7 +4092,7 @@ OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
 };
 
 /**
- * Set icon.
+ * Set icon name.
  *
  * @param {Object|string|null} icon Symbolic icon name, or map of icon names keyed by language ID;
  *  use the 'default' key to specify the icon to be used when there is no icon in the user's
@@ -4147,9 +4148,9 @@ OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
 };
 
 /**
- * Get icon.
+ * Get icon name.
  *
- * @return {string} Icon
+ * @return {string} Icon name
  */
 OO.ui.IconElement.prototype.getIcon = function () {
        return this.icon;
@@ -4199,7 +4200,7 @@ OO.initClass( OO.ui.IndicatorElement );
  *
  * @static
  * @inheritable
- * @property {string|null} Symbolic indicator name or null for no indicator
+ * @property {string|null} Symbolic indicator name
  */
 OO.ui.IndicatorElement.static.indicator = null;
 
@@ -4238,7 +4239,7 @@ OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
 };
 
 /**
- * Set indicator.
+ * Set indicator name.
  *
  * @param {string|null} indicator Symbolic name of indicator to use or null for no indicator
  * @chainable
@@ -4291,9 +4292,9 @@ OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle )
 };
 
 /**
- * Get indicator.
+ * Get indicator name.
  *
- * @return {string} title Symbolic name of indicator
+ * @return {string} Symbolic name of indicator
  */
 OO.ui.IndicatorElement.prototype.getIndicator = function () {
        return this.indicator;
@@ -4372,7 +4373,7 @@ OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
  * Set the label.
  *
  * An empty string will result in the label being hidden. A string containing only whitespace will
- * be converted to a single &nbsp;
+ * be converted to a single `&nbsp;`.
  *
  * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
  *  text; or null for no label
@@ -4397,7 +4398,7 @@ OO.ui.LabelElement.prototype.setLabel = function ( label ) {
 /**
  * Get the label.
  *
- * @return {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * @return {jQuery|string|Function|null} Label nodes; text; a function that returns nodes or
  *  text; or null for no label
  */
 OO.ui.LabelElement.prototype.getLabel = function () {
@@ -4487,7 +4488,7 @@ OO.ui.PopupElement.prototype.getPopup = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string[]} [flags=[]] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
+ * @cfg {string|string[]} [flags] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
  * @cfg {jQuery} [$flagged] Flagged node, assigned to #$flagged, omit to use #$element
  */
 OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
@@ -4545,7 +4546,7 @@ OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
 /**
  * Get the names of all flags set.
  *
- * @return {string[]} flags Flag names
+ * @return {string[]} Flag names
  */
 OO.ui.FlaggedElement.prototype.getFlags = function () {
        return Object.keys( this.flags );
@@ -4658,7 +4659,8 @@ OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$titled] Titled node, assigned to #$titled, omit to use #$element
- * @cfg {string|Function} [title] Title text or a function that returns text
+ * @cfg {string|Function} [title] Title text or a function that returns text. If not provided, the
+ *    static property 'title' is used.
  */
 OO.ui.TitledElement = function OoUiTitledElement( config ) {
        // Config intialization
@@ -5116,7 +5118,7 @@ OO.ui.Tool.prototype.onSelect = function () {
 /**
  * Check if the button is active.
  *
- * @param {boolean} Button is active
+ * @return {boolean} Button is active
  */
 OO.ui.Tool.prototype.isActive = function () {
        return this.active;
@@ -6596,10 +6598,6 @@ OO.ui.BookletLayout.prototype.updateOutlineWidget = function () {
 /**
  * Layout made of a field and optional label.
  *
- * @class
- * @extends OO.ui.Layout
- * @mixins OO.ui.LabelElement
- *
  * Available label alignment modes include:
  *  - left: Label is before the field and aligned away from it, best for when the user will be
  *    scanning for a specific label in a form with many fields
@@ -6610,6 +6608,10 @@ OO.ui.BookletLayout.prototype.updateOutlineWidget = function () {
  *  - inline: Label is after the field and aligned toward it, best for small boolean fields like
  *    checkboxes or radio buttons
  *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.LabelElement
+ *
  * @constructor
  * @param {OO.ui.Widget} fieldWidget Field widget
  * @param {Object} [config] Configuration options
@@ -6668,6 +6670,10 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
 OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
 OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
 
+/* Static Properties */
+
+OO.ui.FieldLayout.static.tagName = 'label';
+
 /* Methods */
 
 /**
@@ -6701,6 +6707,7 @@ OO.ui.FieldLayout.prototype.getField = function () {
 /**
  * Set the field alignment mode.
  *
+ * @private
  * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'
  * @chainable
  */
@@ -6738,8 +6745,8 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
  *
  * @class
  * @extends OO.ui.Layout
- * @mixins OO.ui.LabelElement
  * @mixins OO.ui.IconElement
+ * @mixins OO.ui.LabelElement
  * @mixins OO.ui.GroupElement
  *
  * @constructor
@@ -7855,13 +7862,17 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
  *
  * Subclasses must handle `select` and `choose` events on #lookupMenu to make use of selections.
  *
+ * Subclasses that set the value of #lookupInput from their `choose` or `select` handler should
+ * be aware that this will cause new suggestions to be looked up for the new value. If this is
+ * not desired, disable lookups with #setLookupsDisabled, then set the value, then re-enable lookups.
+ *
  * @class
  * @abstract
  *
  * @constructor
  * @param {OO.ui.TextInputWidget} input Input widget
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$overlay] Overlay layer; defaults to the current window's overlay.
+ * @cfg {jQuery} [$overlay] Overlay for dropdown; defaults to relative positioning
  */
 OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
        // Config intialization
@@ -7869,10 +7880,7 @@ OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
 
        // Properties
        this.lookupInput = input;
-       this.$overlay = config.$overlay || ( this.$.$iframe || this.$element ).closest( '.oo-ui-window' ).children( '.oo-ui-window-overlay' );
-       if ( this.$overlay.length === 0 ) {
-               this.$overlay = this.$( 'body' );
-       }
+       this.$overlay = config.$overlay || this.$element;
        this.lookupMenu = new OO.ui.TextInputMenuWidget( this, {
                $: OO.ui.Element.getJQuery( this.$overlay ),
                input: this.lookupInput,
@@ -7881,21 +7889,22 @@ OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
        this.lookupCache = {};
        this.lookupQuery = null;
        this.lookupRequest = null;
-       this.populating = false;
+       this.lookupsDisabled = false;
+       this.lookupInputFocused = false;
 
        // Events
-       this.$overlay.append( this.lookupMenu.$element );
-
        this.lookupInput.$input.on( {
                focus: this.onLookupInputFocus.bind( this ),
                blur: this.onLookupInputBlur.bind( this ),
                mousedown: this.onLookupInputMouseDown.bind( this )
        } );
        this.lookupInput.connect( this, { change: 'onLookupInputChange' } );
+       this.lookupMenu.connect( this, { toggle: 'onLookupMenuToggle' } );
 
        // Initialization
        this.$element.addClass( 'oo-ui-lookupWidget' );
        this.lookupMenu.$element.addClass( 'oo-ui-lookupWidget-menu' );
+       this.$overlay.append( this.lookupMenu.$element );
 };
 
 /* Methods */
@@ -7906,7 +7915,8 @@ OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
  * @param {jQuery.Event} e Input focus event
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputFocus = function () {
-       this.openLookupMenu();
+       this.lookupInputFocused = true;
+       this.populateLookupMenu();
 };
 
 /**
@@ -7915,7 +7925,8 @@ OO.ui.LookupInputWidget.prototype.onLookupInputFocus = function () {
  * @param {jQuery.Event} e Input blur event
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputBlur = function () {
-       this.lookupMenu.toggle( false );
+       this.closeLookupMenu();
+       this.lookupInputFocused = false;
 };
 
 /**
@@ -7924,7 +7935,13 @@ OO.ui.LookupInputWidget.prototype.onLookupInputBlur = function () {
  * @param {jQuery.Event} e Input mouse down event
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputMouseDown = function () {
-       this.openLookupMenu();
+       // Only open the menu if the input was already focused.
+       // This way we allow the user to open the menu again after closing it with Esc
+       // by clicking in the input. Opening (and populating) the menu when initially
+       // clicking into the input is handled by the focus handler.
+       if ( this.lookupInputFocused ) {
+               this.openLookupMenu();
+       }
 };
 
 /**
@@ -7933,7 +7950,23 @@ OO.ui.LookupInputWidget.prototype.onLookupInputMouseDown = function () {
  * @param {string} value New input value
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputChange = function () {
-       this.openLookupMenu();
+       if ( this.lookupInputFocused ) {
+               this.populateLookupMenu();
+       }
+};
+
+/**
+ * Handle the lookup menu being shown/hidden.
+ * @param {boolean} visible Whether the lookup menu is now visible.
+ */
+OO.ui.LookupInputWidget.prototype.onLookupMenuToggle = function ( visible ) {
+       if ( !visible ) {
+               // When the menu is hidden, abort any active request and clear the menu.
+               // This has to be done here in addition to closeLookupMenu(), because
+               // MenuWidget will close itself when the user presses Esc.
+               this.abortLookupRequest();
+               this.lookupMenu.clearItems();
+       }
 };
 
 /**
@@ -7946,35 +7979,61 @@ OO.ui.LookupInputWidget.prototype.getLookupMenu = function () {
 };
 
 /**
- * Open the menu.
+ * Disable or re-enable lookups.
+ *
+ * When lookups are disabled, calls to #populateLookupMenu will be ignored.
+ *
+ * @param {boolean} disabled Disable lookups
+ */
+OO.ui.LookupInputWidget.prototype.setLookupsDisabled = function ( disabled ) {
+       this.lookupsDisabled = !!disabled;
+};
+
+/**
+ * Open the menu. If there are no entries in the menu, this does nothing.
  *
  * @chainable
  */
 OO.ui.LookupInputWidget.prototype.openLookupMenu = function () {
-       var value = this.lookupInput.getValue();
-
-       if ( this.lookupMenu.$input.is( ':focus' ) && $.trim( value ) !== '' ) {
-               this.populateLookupMenu();
+       if ( !this.lookupMenu.isEmpty() ) {
                this.lookupMenu.toggle( true );
-       } else {
-               this.lookupMenu
-                       .clearItems()
-                       .toggle( false );
        }
+       return this;
+};
 
+/**
+ * Close the menu, empty it, and abort any pending request.
+ *
+ * @chainable
+ */
+OO.ui.LookupInputWidget.prototype.closeLookupMenu = function () {
+       this.lookupMenu.toggle( false );
+       this.abortLookupRequest();
+       this.lookupMenu.clearItems();
        return this;
 };
 
 /**
- * Populate lookup menu with current information.
+ * Request menu items based on the input's current value, and when they arrive,
+ * populate the menu with these items and show the menu.
+ *
+ * If lookups have been disabled with #setLookupsDisabled, this function does nothing.
  *
  * @chainable
  */
 OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
-       var widget = this;
+       var widget = this,
+               value = this.lookupInput.getValue();
 
-       if ( !this.populating ) {
-               this.populating = true;
+       if ( this.lookupsDisabled ) {
+               return;
+       }
+
+       // If the input is empty, clear the menu
+       if ( value === '' ) {
+               this.closeLookupMenu();
+       // Skip population if there is already a request pending for the current value
+       } else if ( value !== this.lookupQuery ) {
                this.getLookupMenuItems()
                        .done( function ( items ) {
                                widget.lookupMenu.clearItems();
@@ -7983,15 +8042,12 @@ OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
                                                .addItems( items )
                                                .toggle( true );
                                        widget.initializeLookupMenuSelection();
-                                       widget.openLookupMenu();
                                } else {
-                                       widget.lookupMenu.toggle( true );
+                                       widget.lookupMenu.toggle( false );
                                }
-                               widget.populating = false;
                        } )
                        .fail( function () {
                                widget.lookupMenu.clearItems();
-                               widget.populating = false;
                        } );
        }
 
@@ -7999,7 +8055,7 @@ OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
 };
 
 /**
- * Set selection in the lookup menu with current information.
+ * Select and highlight the first selectable item in the menu.
  *
  * @chainable
  */
@@ -8014,50 +8070,74 @@ OO.ui.LookupInputWidget.prototype.initializeLookupMenuSelection = function () {
  * Get lookup menu items for the current query.
  *
  * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument
- * of the done event
+ * of the done event. If the request was aborted to make way for a subsequent request,
+ * this promise will not be rejected: it will remain pending forever.
  */
 OO.ui.LookupInputWidget.prototype.getLookupMenuItems = function () {
        var widget = this,
                value = this.lookupInput.getValue(),
-               deferred = $.Deferred();
+               deferred = $.Deferred(),
+               ourRequest;
 
-       if ( value && value !== this.lookupQuery ) {
-               // Abort current request if query has changed
-               if ( this.lookupRequest ) {
-                       this.lookupRequest.abort();
-                       this.lookupQuery = null;
-                       this.lookupRequest = null;
-               }
-               if ( value in this.lookupCache ) {
-                       deferred.resolve( this.getLookupMenuItemsFromData( this.lookupCache[value] ) );
-               } else {
-                       this.lookupQuery = value;
-                       this.lookupRequest = this.getLookupRequest()
-                               .always( function () {
+       this.abortLookupRequest();
+       if ( value in this.lookupCache ) {
+               deferred.resolve( this.getLookupMenuItemsFromData( this.lookupCache[value] ) );
+       } else {
+               this.lookupInput.pushPending();
+               this.lookupQuery = value;
+               ourRequest = this.lookupRequest = this.getLookupRequest();
+               ourRequest
+                       .always( function () {
+                               // We need to pop pending even if this is an old request, otherwise
+                               // the widget will remain pending forever.
+                               // TODO: this assumes that an aborted request will fail or succeed soon after
+                               // being aborted, or at least eventually. It would be nice if we could popPending()
+                               // at abort time, but only if we knew that we hadn't already called popPending()
+                               // for that request.
+                               widget.lookupInput.popPending();
+                       } )
+                       .done( function ( data ) {
+                               // If this is an old request (and aborting it somehow caused it to still succeed),
+                               // ignore its success completely
+                               if ( ourRequest === widget.lookupRequest ) {
                                        widget.lookupQuery = null;
                                        widget.lookupRequest = null;
-                               } )
-                               .done( function ( data ) {
                                        widget.lookupCache[value] = widget.getLookupCacheItemFromData( data );
                                        deferred.resolve( widget.getLookupMenuItemsFromData( widget.lookupCache[value] ) );
-                               } )
-                               .fail( function () {
+                               }
+                       } )
+                       .fail( function () {
+                               // If this is an old request (or a request failing because it's being aborted),
+                               // ignore its failure completely
+                               if ( ourRequest === widget.lookupRequest ) {
+                                       widget.lookupQuery = null;
+                                       widget.lookupRequest = null;
                                        deferred.reject();
-                               } );
-                       this.pushPending();
-                       this.lookupRequest.always( function () {
-                               widget.popPending();
+                               }
                        } );
-               }
        }
        return deferred.promise();
 };
 
+/**
+ * Abort the currently pending lookup request, if any.
+ */
+OO.ui.LookupInputWidget.prototype.abortLookupRequest = function () {
+       var oldRequest = this.lookupRequest;
+       if ( oldRequest ) {
+               // First unset this.lookupRequest to the fail handler will notice
+               // that the request is no longer current
+               this.lookupRequest = null;
+               this.lookupQuery = null;
+               oldRequest.abort();
+       }
+};
+
 /**
  * Get a new request object of the current lookup query value.
  *
  * @abstract
- * @return {jqXHR} jQuery AJAX object, or promise object with an .abort() method
+ * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
  */
 OO.ui.LookupInputWidget.prototype.getLookupRequest = function () {
        // Stub, implemented in subclass
@@ -8065,26 +8145,25 @@ OO.ui.LookupInputWidget.prototype.getLookupRequest = function () {
 };
 
 /**
- * Handle successful lookup request.
- *
- * Overriding methods should call #populateLookupMenu when results are available and cache results
- * for future lookups in #lookupCache as an array of #OO.ui.MenuItemWidget objects.
+ * Get a list of menu item widgets from the data stored by the lookup request's done handler.
  *
  * @abstract
- * @param {Mixed} data Response from server
+ * @param {Mixed} data Cached result data, usually an array
+ * @return {OO.ui.MenuItemWidget[]} Menu items
  */
-OO.ui.LookupInputWidget.prototype.onLookupRequestDone = function () {
+OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
        // Stub, implemented in subclass
+       return [];
 };
 
 /**
- * Get a list of menu item widgets from the data stored by the lookup request's done handler.
+ * Get lookup cache item from server response data.
  *
  * @abstract
- * @param {Mixed} data Cached result data, usually an array
- * @return {OO.ui.MenuItemWidget[]} Menu items
+ * @param {Mixed} data Response from server
+ * @return {Mixed} Cached result data
  */
-OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
+OO.ui.LookupInputWidget.prototype.getLookupCacheItemFromData = function () {
        // Stub, implemented in subclass
        return [];
 };
@@ -8275,7 +8354,7 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {OO.ui.ButtonWidget} [items] Buttons to add
+ * @cfg {OO.ui.ButtonWidget[]} [items] Buttons to add
  */
 OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
        // Parent constructor
@@ -8721,85 +8800,9 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
 };
 
 /**
- * Icon widget.
- *
- * See OO.ui.IconElement for more information.
- *
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.TitledElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-OO.ui.IconWidget = function OoUiIconWidget( config ) {
-       // Config intialization
-       config = config || {};
-
-       // Parent constructor
-       OO.ui.IconWidget.super.call( this, config );
-
-       // Mixin constructors
-       OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
-
-       // Initialization
-       this.$element.addClass( 'oo-ui-iconWidget' );
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
-
-/* Static Properties */
-
-OO.ui.IconWidget.static.tagName = 'span';
-
-/**
- * Indicator widget.
- *
- * See OO.ui.IndicatorElement for more information.
- *
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.TitledElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
-       // Config intialization
-       config = config || {};
-
-       // Parent constructor
-       OO.ui.IndicatorWidget.super.call( this, config );
-
-       // Mixin constructors
-       OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
-
-       // Initialization
-       this.$element.addClass( 'oo-ui-indicatorWidget' );
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
-
-/* Static Properties */
-
-OO.ui.IndicatorWidget.static.tagName = 'span';
-
-/**
- * Inline menu of options.
+ * Dropdown menu of options.
  *
- * Inline menus provide a control for accessing a menu and compose a menu within the widget, which
+ * Dropdown menus provide a control for accessing a menu and compose a menu within the widget, which
  * can be accessed using the #getMenu method.
  *
  * Use with OO.ui.MenuItemWidget.
@@ -8815,12 +8818,12 @@ OO.ui.IndicatorWidget.static.tagName = 'span';
  * @param {Object} [config] Configuration options
  * @cfg {Object} [menu] Configuration options to pass to menu widget
  */
-OO.ui.InlineMenuWidget = function OoUiInlineMenuWidget( config ) {
+OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
        // Configuration initialization
        config = $.extend( { indicator: 'down' }, config );
 
        // Parent constructor
-       OO.ui.InlineMenuWidget.super.call( this, config );
+       OO.ui.DropdownWidget.super.call( this, config );
 
        // Mixin constructors
        OO.ui.IconElement.call( this, config );
@@ -8838,20 +8841,20 @@ OO.ui.InlineMenuWidget = function OoUiInlineMenuWidget( config ) {
 
        // Initialization
        this.$handle
-               .addClass( 'oo-ui-inlineMenuWidget-handle' )
+               .addClass( 'oo-ui-dropdownWidget-handle' )
                .append( this.$icon, this.$label, this.$indicator );
        this.$element
-               .addClass( 'oo-ui-inlineMenuWidget' )
+               .addClass( 'oo-ui-dropdownWidget' )
                .append( this.$handle, this.menu.$element );
 };
 
 /* Setup */
 
-OO.inheritClass( OO.ui.InlineMenuWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.TitledElement );
+OO.inheritClass( OO.ui.DropdownWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TitledElement );
 
 /* Methods */
 
@@ -8860,7 +8863,7 @@ OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.TitledElement );
  *
  * @return {OO.ui.MenuWidget} Menu of widget
  */
-OO.ui.InlineMenuWidget.prototype.getMenu = function () {
+OO.ui.DropdownWidget.prototype.getMenu = function () {
        return this.menu;
 };
 
@@ -8869,7 +8872,7 @@ OO.ui.InlineMenuWidget.prototype.getMenu = function () {
  *
  * @param {OO.ui.MenuItemWidget} item Selected menu item
  */
-OO.ui.InlineMenuWidget.prototype.onMenuSelect = function ( item ) {
+OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
        var selectedLabel;
 
        if ( !item ) {
@@ -8891,7 +8894,7 @@ OO.ui.InlineMenuWidget.prototype.onMenuSelect = function ( item ) {
  *
  * @param {jQuery.Event} e Mouse click event
  */
-OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
+OO.ui.DropdownWidget.prototype.onClick = function ( e ) {
        // Skip clicks within the menu
        if ( $.contains( this.menu.$element[0], e.target ) ) {
                return;
@@ -8907,6 +8910,82 @@ OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
        return false;
 };
 
+/**
+ * Icon widget.
+ *
+ * See OO.ui.IconElement for more information.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IconWidget = function OoUiIconWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IconWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-iconWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IconWidget.static.tagName = 'span';
+
+/**
+ * Indicator widget.
+ *
+ * See OO.ui.IndicatorElement for more information.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IndicatorWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-indicatorWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IndicatorWidget.static.tagName = 'span';
+
 /**
  * Base class for input widgets.
  *
@@ -8919,12 +8998,11 @@ OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
  * @param {Object} [config] Configuration options
  * @cfg {string} [name=''] HTML input name
  * @cfg {string} [value=''] Input value
- * @cfg {boolean} [readOnly=false] Prevent changes
  * @cfg {Function} [inputFilter] Filter function to apply to the input. Takes a string argument and returns a string.
  */
 OO.ui.InputWidget = function OoUiInputWidget( config ) {
-       // Config intialization
-       config = $.extend( { readOnly: false }, config );
+       // Configuration initialization
+       config = config || {};
 
        // Parent constructor
        OO.ui.InputWidget.super.call( this, config );
@@ -8935,7 +9013,6 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
        // Properties
        this.$input = this.getInputElement( config );
        this.value = '';
-       this.readOnly = false;
        this.inputFilter = config.inputFilter;
 
        // Events
@@ -8945,7 +9022,6 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
        this.$input
                .attr( 'name', config.name )
                .prop( 'disabled', this.isDisabled() );
-       this.setReadOnly( config.readOnly );
        this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input );
        this.setValue( config.value );
 };
@@ -8959,7 +9035,7 @@ OO.mixinClass( OO.ui.InputWidget, OO.ui.FlaggedElement );
 
 /**
  * @event change
- * @param value
+ * @param {string} value
  */
 
 /* Methods */
@@ -8967,6 +9043,7 @@ OO.mixinClass( OO.ui.InputWidget, OO.ui.FlaggedElement );
 /**
  * Get input element.
  *
+ * @private
  * @param {Object} [config] Configuration options
  * @return {jQuery} Input element
  */
@@ -9037,8 +9114,9 @@ OO.ui.InputWidget.prototype.setValue = function ( value ) {
 /**
  * Sanitize incoming value.
  *
- * Ensures value is a string, and converts undefined and null to empty strings.
+ * Ensures value is a string, and converts undefined and null to empty string.
  *
+ * @private
  * @param {string} value Original value
  * @return {string} Sanitized value
  */
@@ -9065,29 +9143,6 @@ OO.ui.InputWidget.prototype.simulateLabelClick = function () {
        }
 };
 
-/**
- * Check if the widget is read-only.
- *
- * @return {boolean}
- */
-OO.ui.InputWidget.prototype.isReadOnly = function () {
-       return this.readOnly;
-};
-
-/**
- * Set the read-only state of the widget.
- *
- * This should probably change the widgets's appearance and prevent it from being used.
- *
- * @param {boolean} state Make input read-only
- * @chainable
- */
-OO.ui.InputWidget.prototype.setReadOnly = function ( state ) {
-       this.readOnly = !!state;
-       this.$input.prop( 'readOnly', this.readOnly );
-       return this;
-};
-
 /**
  * @inheritdoc
  */
@@ -9120,7 +9175,7 @@ OO.ui.InputWidget.prototype.blur = function () {
 };
 
 /**
- * A button that is an input widget. Intended to be used within FormLayouts.
+ * A button that is an input widget. Intended to be used within a OO.ui.FormLayout.
  *
  * @class
  * @extends OO.ui.InputWidget
@@ -9135,14 +9190,17 @@ OO.ui.InputWidget.prototype.blur = function () {
  * @param {Object} [config] Configuration options
  * @cfg {string} [type='button'] HTML tag `type` attribute, may be 'button', 'submit' or 'reset'
  * @cfg {boolean} [useInputTag=false] Whether to use `<input/>` rather than `<button/>`. Only useful
- *  if you need IE 6 support in a form with multiple buttons. By using this option, you sacrifice
- *  icons and indicators, as well as the ability to have non-plaintext label or a label different
- *  from the value.
+ *  if you need IE 6 support in a form with multiple buttons. If you use this option, icons and
+ *  indicators will not be displayed, it won't be possible to have a non-plaintext label, and it
+ *  won't be possible to set a value (which will internally become identical to the label).
  */
 OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
        // Configuration initialization
        config = $.extend( { type: 'button', useInputTag: false }, config );
 
+       // Properties (must be set before parent constructor, which calls #setValue)
+       this.useInputTag = config.useInputTag;
+
        // Parent constructor
        OO.ui.ButtonInputWidget.super.call( this, config );
 
@@ -9154,9 +9212,6 @@ OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
        OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
        OO.ui.FlaggedElement.call( this, config );
 
-       // Properties
-       this.useInputTag = config.useInputTag;
-
        // Events
        this.$input.on( {
                click: this.onClick.bind( this ),
@@ -9191,6 +9246,7 @@ OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.FlaggedElement );
 /**
  * Get input element.
  *
+ * @private
  * @param {Object} [config] Configuration options
  * @return {jQuery} Input element
  */
@@ -9200,7 +9256,7 @@ OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
 };
 
 /**
- * Set the label.
+ * Set label value.
  *
  * Overridden to support setting the 'value' of `<input/>` elements.
  *
@@ -9227,6 +9283,21 @@ OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
        return this;
 };
 
+/**
+ * Set the value of the input.
+ *
+ * Overridden to disable for `<input/>` elements, which have value identical to the label.
+ *
+ * @param {string} value New value
+ * @chainable
+ */
+OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
+       if ( !this.useInputTag ) {
+               OO.ui.ButtonInputWidget.super.prototype.setValue.call( this, value );
+       }
+       return this;
+};
+
 /**
  * Handles mouse click events.
  *
@@ -9279,6 +9350,7 @@ OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
 /**
  * Get input element.
  *
+ * @private
  * @return {jQuery} Input element
  */
 OO.ui.CheckboxInputWidget.prototype.getInputElement = function () {
@@ -9334,6 +9406,7 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
  * @param {Object} [config] Configuration options
  * @cfg {string} [type='text'] HTML tag `type` attribute
  * @cfg {string} [placeholder] Placeholder text
+ * @cfg {boolean} [readOnly=false] Prevent changes
  * @cfg {boolean} [multiline=false] Allow multiple lines of text
  * @cfg {boolean} [autosize=false] Automatically resize to fit content
  * @cfg {boolean} [maxRows=10] Maximum number of rows to make visible when autosizing
@@ -9342,7 +9415,7 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
  */
 OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Configuration initialization
-       config = config || {};
+       config = $.extend( { readOnly: false }, config );
 
        // Parent constructor
        OO.ui.TextInputWidget.super.call( this, config );
@@ -9353,6 +9426,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        OO.ui.PendingElement.call( this, config );
 
        // Properties
+       this.readOnly = false;
        this.multiline = !!config.multiline;
        this.autosize = !!config.autosize;
        this.maxRows = config.maxRows !== undefined ? config.maxRows : 10;
@@ -9373,6 +9447,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        this.$element
                .addClass( 'oo-ui-textInputWidget' )
                .append( this.$icon, this.$indicator );
+       this.setReadOnly( config.readOnly );
        if ( config.placeholder ) {
                this.$input.attr( 'placeholder', config.placeholder );
        }
@@ -9488,6 +9563,29 @@ OO.ui.TextInputWidget.prototype.setValue = function ( value ) {
        return this;
 };
 
+/**
+ * Check if the widget is read-only.
+ *
+ * @return {boolean}
+ */
+OO.ui.TextInputWidget.prototype.isReadOnly = function () {
+       return this.readOnly;
+};
+
+/**
+ * Set the read-only state of the widget.
+ *
+ * This should probably change the widgets's appearance and prevent it from being used.
+ *
+ * @param {boolean} state Make input read-only
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
+       this.readOnly = !!state;
+       this.$input.prop( 'readOnly', this.readOnly );
+       return this;
+};
+
 /**
  * Automatically adjust the size of the text input.
  *
@@ -9531,6 +9629,7 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
 /**
  * Get input element.
  *
+ * @private
  * @param {Object} [config] Configuration options
  * @return {jQuery} Input element
  */
@@ -9569,7 +9668,7 @@ OO.ui.TextInputWidget.prototype.select = function () {
 
 /**
  * Sets the validation pattern to use.
- * @param validate {RegExp|string|null} Regular expression (or symbolic name referencing
+ * @param {RegExp|string|null} validate Regular expression (or symbolic name referencing
  *  one, see #static-validationPatterns)
  */
 OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
@@ -9610,7 +9709,7 @@ OO.ui.TextInputWidget.prototype.isValid = function () {
  * @param {Object} [config] Configuration options
  * @cfg {Object} [menu] Configuration options to pass to menu widget
  * @cfg {Object} [input] Configuration options to pass to input widget
- * @cfg {jQuery} [$overlay] Overlay layer; defaults to the current window's overlay.
+ * @cfg {jQuery} [$overlay] Overlay layer; defaults to relative positioning
  */
 OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
        // Configuration initialization
@@ -9620,16 +9719,18 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
        OO.ui.ComboBoxWidget.super.call( this, config );
 
        // Properties
-       this.$overlay = config.$overlay || ( this.$.$iframe || this.$element ).closest( '.oo-ui-window' ).children( '.oo-ui-window-overlay' );
-       if ( this.$overlay.length === 0 ) {
-               this.$overlay = this.$( 'body' );
-       }
+       this.$overlay = config.$overlay || this.$element;
        this.input = new OO.ui.TextInputWidget( $.extend(
                { $: this.$, indicator: 'down', disabled: this.isDisabled() },
                config.input
        ) );
        this.menu = new OO.ui.TextInputMenuWidget( this.input, $.extend(
-               { $: this.$, widget: this, input: this.input, disabled: this.isDisabled() },
+               {
+                       $: OO.ui.Element.getJQuery( this.$overlay ),
+                       widget: this,
+                       input: this.input,
+                       disabled: this.isDisabled()
+               },
                config.menu
        ) );
 
@@ -9705,6 +9806,8 @@ OO.ui.ComboBoxWidget.prototype.onMenuChoose = function ( item ) {
  * Handle menu item change events.
  */
 OO.ui.ComboBoxWidget.prototype.onMenuItemsChange = function () {
+       var match = this.menu.getItemFromData( this.input.getValue() );
+       this.menu.selectItem( match );
        this.$element.toggleClass( 'oo-ui-comboBoxWidget-empty', this.menu.isEmpty() );
 };
 
index 4d2c47a..95ef62c 100644 (file)
                        data.message = $.parseHTML( mw.message( 'postedit-confirmation-saved', data.user || mw.user ).escaped() );
                }
 
-               $div = $(
-                       '<div class="postedit-container">' +
-                               '<div class="postedit">' +
-                                       '<div class="postedit-icon postedit-icon-checkmark postedit-content"></div>' +
-                                       '<a href="#" class="postedit-close">&times;</a>' +
-                               '</div>' +
-                       '</div>'
-               );
+               $div = mw.template.get( 'mediawiki.action.view.postEdit', 'postEdit.html' ).render();
 
                if ( typeof data.message === 'string' ) {
                        $div.find( '.postedit-content' ).text( data.message );
diff --git a/resources/src/mediawiki.action/templates/postEdit.html b/resources/src/mediawiki.action/templates/postEdit.html
new file mode 100644 (file)
index 0000000..dbb482a
--- /dev/null
@@ -0,0 +1,6 @@
+<div class="postedit-container">
+       <div class="postedit">
+               <div class="postedit-icon postedit-icon-checkmark postedit-content"></div>
+               <a href="#" class="postedit-close">&times;</a>
+       </div>
+</div>
index bb0642e..3a19e02 100644 (file)
         *         console.log( data );
         *     } );
         *
+        * Multiple values for a parameter can be specified using an array (since MW 1.25):
+        *
+        *     var api = new mw.Api();
+        *     api.get( {
+        *         action: 'query',
+        *         meta: [ 'userinfo', 'siteinfo' ] // same effect as 'userinfo|siteinfo'
+        *     } ).done ( function ( data ) {
+        *         console.log( data );
+        *     } );
+        *
         * @class
         *
         * @constructor
                                delete parameters.token;
                        }
 
+                       for ( key in parameters ) {
+                               if ( $.isArray( parameters[key] ) ) {
+                                       parameters[key] = parameters[key].join( '|' );
+                               }
+                       }
+
                        // If multipart/form-data has been requested and emulation is possible, emulate it
                        if (
                                ajaxOptions.type === 'POST' &&
                'nomodule',
                'mustbeposted',
                'badaccess-groups',
-               'stashfailed',
                'missingresult',
                'missingparam',
                'invalid-file-key',
                'fetchfileerror',
                'fileexists-shared-forbidden',
                'invalidtitle',
-               'notloggedin'
+               'notloggedin',
+
+               // Stash-specific errors - expanded
+               'stashfailed',
+               'stasherror',
+               'stashedfilenotfound',
+               'stashpathinvalid',
+               'stashfilestorage',
+               'stashzerolength',
+               'stashnotloggedin',
+               'stashwrongowner',
+               'stashnosuchfilekey'
        ];
 
        /**
old mode 100755 (executable)
new mode 100644 (file)
index ef95507..4b6c14e 100644 (file)
@@ -106,9 +106,10 @@ fieldset#mw-searchoptions div#mw-search-togglebox input {
 fieldset#mw-searchoptions table {
        float: left;
        margin-right: 3em;
+       border-collapse: collapse;
 }
 fieldset#mw-searchoptions table td {
-       padding-right: 1em;
+       padding: 0 1em 0 0;
        white-space: nowrap;
 }
 fieldset#mw-searchoptions div.divider {
index 04bc978..87de646 100644 (file)
                                ctx,
                                meta,
                                previewSize = 180,
-                               thumb = $( '<div id="mw-upload-thumbnail" class="thumb tright">' +
-                                                       '<div class="thumbinner">' +
-                                                               '<div class="mw-small-spinner" style="width: 180px; height: 180px"></div>' +
-                                                               '<div class="thumbcaption"><div class="filename"></div><div class="fileinfo"></div></div>' +
-                                                       '</div>' +
-                                               '</div>' );
+                               thumb = mw.template.get( 'mediawiki.special.upload', 'thumbnail.html' ).render();
 
                        thumb.find( '.filename' ).text( file.name ).end()
                                .find( '.fileinfo' ).text( prettySize( file.size ) ).end();
diff --git a/resources/src/mediawiki.special/templates/thumbnail.html b/resources/src/mediawiki.special/templates/thumbnail.html
new file mode 100644 (file)
index 0000000..73042f2
--- /dev/null
@@ -0,0 +1,9 @@
+<div id="mw-upload-thumbnail" class="thumb tright">
+       <div class="thumbinner">
+               <div class="mw-small-spinner" style="width: 180px; height: 180px"></div>
+               <div class="thumbcaption">
+                       <div class="filename"></div>
+                       <div class="fileinfo"></div>
+               </div>
+       </div>
+</div>
index 177367d..7fc5c42 100644 (file)
                                }, 1 );
 
                                // show an alert with this message
-                               return options.message;
+                               if ( $.isFunction( options.message ) ) {
+                                       return options.message();
+                               } else {
+                                       return options.message;
+                               }
                        }
                } ).on( showEventName, function () {
                        // Re-add onbeforeunload handler
index 1c0d833..6bcb87f 100644 (file)
                                target: '_blank'
                        } );
 
-                       // TODO: Use a stylesheet instead of these inline styles
-                       this.$dialog =
-                               $( '<div style="position: relative;"></div>' ).append(
-                                       $( '<div class="feedback-mode feedback-form"></div>' ).append(
-                                               $( '<small>' ).append(
-                                                       $( '<p>' ).msg(
-                                                               'feedback-bugornote',
-                                                               $bugNoteLink,
-                                                               fb.title.getNameText(),
-                                                               $feedbackPageLink.clone()
-                                                       )
-                                               ),
-                                               $( '<div style="margin-top: 1em;"></div>' )
-                                               .msg( 'feedback-subject' )
-                                               .append(
-                                                       $( '<br>' ),
-                                                       $( '<input type="text" class="feedback-subject" name="subject" maxlength="60" style="width: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;"/>' )
-                                               ),
-                                               $( '<div style="margin-top: 0.4em;"></div>' )
-                                               .msg( 'feedback-message' )
-                                               .append(
-                                                       $( '<br>' ),
-                                                       $( '<textarea name="message" class="feedback-message" rows="5" cols="60"></textarea>' )
-                                               )
-                                       ),
-                                       $( '<div class="feedback-mode feedback-bugs"></div>' ).append(
-                                               $( '<p>' ).msg( 'feedback-bugcheck', $bugsListLink )
-                                       ),
-                                       $( '<div class="feedback-mode feedback-submitting" style="text-align: center; margin: 3em 0;"></div>' )
-                                       .msg( 'feedback-adding' )
-                                       .append(
-                                               $( '<br>' ),
-                                               $( '<span class="feedback-spinner"></span>' )
-                                       ),
-                                       $( '<div class="feedback-mode feedback-thanks" style="text-align: center; margin:1em"></div>' ).msg(
-                                               'feedback-thanks', fb.title.getNameText(), $feedbackPageLink.clone()
-                                       ),
-                                       $( '<div class="feedback-mode feedback-error" style="position: relative;"></div>' ).append(
-                                               $( '<div class="feedback-error-msg style="color: #990000; margin-top: 0.4em;"></div>' )
-                                       )
-                               );
+                       // TODO: Use a stylesheet instead of these inline styles in the template
+                       this.$dialog = mw.template.get( 'mediawiki.feedback', 'dialog.html' ).render();
+                       this.$dialog.find( '.feedback-mode small p' ).msg(
+                               'feedback-bugornote',
+                               $bugNoteLink,
+                               fb.title.getNameText(),
+                               $feedbackPageLink.clone()
+                       );
+                       this.$dialog.find( '.feedback-form .subject span' ).msg( 'feedback-subject' );
+                       this.$dialog.find( '.feedback-form .message span' ).msg( 'feedback-message' );
+                       this.$dialog.find( '.feedback-bugs p' ).msg( 'feedback-bugcheck', $bugsListLink );
+                       this.$dialog.find( '.feedback-submitting span' ).msg( 'feedback-adding' );
+                       this.$dialog.find( '.feedback-thanks' ).msg( 'feedback-thanks', fb.title.getNameText(),
+                               $feedbackPageLink.clone() );
 
                        this.$dialog.dialog( {
                                width: 500,
index 594800e..fd76c80 100644 (file)
                }
 
                // Add/remove cloner clones without having to resubmit the form
-               $root.find( '.mw-htmlform-cloner-delete-button' ).click( function ( ev ) {
+               $root.find( '.mw-htmlform-cloner-delete-button' ).filter( ':input' ).click( function ( ev ) {
                        ev.preventDefault();
                        $( this ).closest( 'li.mw-htmlform-cloner-li' ).remove();
                } );
 
-               $root.find( '.mw-htmlform-cloner-create-button' ).click( function ( ev ) {
+               $root.find( '.mw-htmlform-cloner-create-button' ).filter( ':input' ).click( function ( ev ) {
                        var $ul, $li, html;
 
                        ev.preventDefault();
index e29c734..cfdb5a7 100644 (file)
                 */
                messages: new Map(),
 
+               /**
+                * Templates associated with a module
+                * @property {mw.Map}
+                */
+               templates: new Map(),
+
                /* Public Methods */
 
                /**
                                        mw.messages.set( registry[module].messages );
                                }
 
+                               // Initialise templates
+                               if ( registry[module].templates ) {
+                                       mw.templates.set( module, registry[module].templates );
+                               }
+
                                if ( $.isReady || registry[module].async ) {
                                        // Make sure we don't run the scripts until all (potentially asynchronous)
                                        // stylesheet insertions have completed.
                                 * whether it's safe to extend the stylesheet (see #canExpandStylesheetWith).
                                 *
                                 * @param {Object} msgs List of key/value pairs to be added to mw#messages.
+                                * @param {Object} [templates] List of key/value pairs to be added to mw#templates.
                                 */
-                               implement: function ( module, script, style, msgs ) {
+                               implement: function ( module, script, style, msgs, templates ) {
                                        // Validate input
                                        if ( typeof module !== 'string' ) {
                                                throw new Error( 'module must be a string, not a ' + typeof module );
                                        if ( !$.isPlainObject( msgs ) ) {
                                                throw new Error( 'msgs must be an object, not a ' + typeof msgs );
                                        }
+                                       if ( templates !== undefined && !$.isPlainObject( templates ) ) {
+                                               throw new Error( 'templates must be an object, not a ' + typeof templates );
+                                       }
                                        // Automatically register module
                                        if ( registry[module] === undefined ) {
                                                mw.loader.register( module );
                                        registry[module].script = script;
                                        registry[module].style = style;
                                        registry[module].messages = msgs;
+                                       // Templates are optional (for back-compat)
+                                       registry[module].templates = templates || {};
                                        // The module may already have been marked as erroneous
                                        if ( $.inArray( registry[module].state, ['error', 'missing'] ) === -1 ) {
                                                registry[module].state = 'loaded';
                                 * @param {Function} [ready] Callback to execute when all dependencies are ready
                                 * @param {Function} [error] Callback to execute if one or more dependencies failed
                                 * @return {jQuery.Promise}
+                                * @since 1.23 this returns a promise
                                 */
                                using: function ( dependencies, ready, error ) {
                                        var deferred = $.Deferred();
                                                        // Unversioned, private, or site-/user-specific
                                                        ( !descriptor.version || $.inArray( descriptor.group, [ 'private', 'user', 'site' ] ) !== -1 ) ||
                                                        // Partial descriptor
-                                                       $.inArray( undefined, [ descriptor.script, descriptor.style, descriptor.messages ] ) !== -1
+                                                       $.inArray( undefined, [ descriptor.script, descriptor.style,
+                                                                       descriptor.messages, descriptor.templates ] ) !== -1
                                                ) {
                                                        // Decline to store
                                                        return false;
                                                                        String( descriptor.script ) :
                                                                        JSON.stringify( descriptor.script ),
                                                                JSON.stringify( descriptor.style ),
-                                                               JSON.stringify( descriptor.messages )
+                                                               JSON.stringify( descriptor.messages ),
+                                                               JSON.stringify( descriptor.templates )
                                                        ];
                                                        // Attempted workaround for a possible Opera bug (bug 57567).
                                                        // This regex should never match under sane conditions.
diff --git a/resources/src/mediawiki/mediawiki.template.js b/resources/src/mediawiki/mediawiki.template.js
new file mode 100644 (file)
index 0000000..79f43d1
--- /dev/null
@@ -0,0 +1,123 @@
+/**
+ * @class mw.template
+ * @singleton
+ */
+( function ( mw, $ ) {
+       var compiledTemplates = {},
+               compilers = {};
+
+       mw.template = {
+               /**
+                * Register a new compiler and template.
+                *
+                * @param {string} name of compiler. Should also match with any file extensions of templates that want to use it.
+                * @param {Function} compiler which must implement a compile function
+                */
+               registerCompiler: function ( name, compiler ) {
+                       if ( !compiler.compile ) {
+                               throw new Error( 'Compiler must implement compile method.' );
+                       }
+                       compilers[name] = compiler;
+               },
+
+               /**
+                * Get the name of the compiler associated with a template based on its name.
+                *
+                * @param {string} templateName Name of template (including file suffix)
+                * @return {String} Name of compiler
+                */
+               getCompilerName: function ( templateName ) {
+                       var templateParts = templateName.split( '.' );
+
+                       if ( templateParts.length < 2 ) {
+                               throw new Error( 'Unable to identify compiler. Template name must have a suffix.' );
+                       }
+                       return templateParts[ templateParts.length - 1 ];
+               },
+
+               /**
+                * Get the compiler for a given compiler name.
+                *
+                * @param {string} compilerName Name of the compiler
+                * @return {Object} The compiler associated with that name
+                */
+               getCompiler: function ( compilerName ) {
+                       var compiler = compilers[ compilerName ];
+                       if ( !compiler ) {
+                               throw new Error( 'Unknown compiler ' + compilerName );
+                       }
+                       return compiler;
+               },
+
+               /**
+                * Register a template associated with a module.
+                *
+                * Compiles the newly added template based on the suffix in its name.
+                *
+                * @param {string} moduleName Name of ResourceLoader module to get the template from
+                * @param {string} templateName Name of template to add including file extension
+                * @param {string} templateBody Contents of a template (e.g. html markup)
+                * @return {Function} Compiled template
+                */
+               add: function ( moduleName, templateName, templateBody ) {
+                       var compiledTemplate,
+                               compilerName = this.getCompilerName( templateName );
+
+                       if (!compiledTemplates[moduleName]) {
+                               compiledTemplates[moduleName] = {};
+                       }
+
+                       compiledTemplate = this.compile( templateBody, compilerName );
+                       compiledTemplates[moduleName][ templateName ] = compiledTemplate;
+                       return compiledTemplate;
+               },
+
+               /**
+                * Retrieve a template by module and template name.
+                *
+                * @param {string} moduleName Name of the module to retrieve the template from
+                * @param {string} templateName Name of template to be retrieved
+                * @return {Object} Compiled template
+                */
+               get: function ( moduleName, templateName ) {
+                       var moduleTemplates, compiledTemplate;
+
+                       // Check if the template has already been compiled, compile it if not
+                       if ( !compiledTemplates[ moduleName ] || !compiledTemplates[ moduleName ][ templateName ] ) {
+                               moduleTemplates = mw.templates.get( moduleName );
+                               if ( !moduleTemplates || !moduleTemplates[ templateName ] ) {
+                                       throw new Error( 'Template ' + templateName + ' not found in module ' + moduleName );
+                               }
+
+                               // Add compiled version
+                               compiledTemplate = this.add( moduleName, templateName, moduleTemplates[ templateName ] );
+                       } else {
+                               compiledTemplate = compiledTemplates[ moduleName ][ templateName ];
+                       }
+                       return compiledTemplate;
+               },
+
+               /**
+                * Wrap our template engine of choice.
+                *
+                * @param {string} templateBody Template body
+                * @param {string} compilerName The name of a registered compiler
+                * @return {Object} Template interface
+                */
+               compile: function ( templateBody, compilerName ) {
+                       return this.getCompiler( compilerName ).compile( templateBody );
+               }
+       };
+
+       // Register basic html compiler
+       mw.template.registerCompiler( 'html', {
+               compile: function ( src ) {
+                       return {
+                               render: function () {
+                                       return $( $.parseHTML( $.trim( src ) ) );
+                               }
+                       };
+               }
+       } );
+
+}( mediaWiki, jQuery ) );
index 3a06a02..a53cbcb 100644 (file)
                addPortletLink: function ( portlet, href, text, id, tooltip, accesskey, nextnode ) {
                        var $item, $link, $portlet, $ul;
 
-                       // Check if there's atleast 3 arguments to prevent a TypeError
+                       // Check if there's at least 3 arguments to prevent a TypeError
                        if ( arguments.length < 3 ) {
                                return null;
                        }
diff --git a/resources/src/mediawiki/templates/dialog.html b/resources/src/mediawiki/templates/dialog.html
new file mode 100644 (file)
index 0000000..e116f3e
--- /dev/null
@@ -0,0 +1,25 @@
+<div style="position: relative; display: block;" class="ui-dialog-content ui-widget-content">
+       <div class="feedback-mode feedback-form">
+               <small><p></p></small>
+               <div class="subject" style="margin-top: 1em;">
+                       <span></span><br>
+                       <input type="text" class="feedback-subject" name="subject" maxlength="60"
+                               style="width: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;">
+               </div>
+               <div class="message" style="margin-top: 0.4em;">
+                       <span></span><br>
+                       <textarea name="message" class="feedback-message" rows="5" cols="60"></textarea>
+               </div>
+       </div>
+       <div class="feedback-mode feedback-bugs">
+               <p></p>
+       </div>
+       <div class="feedback-mode feedback-submitting" style="text-align: center; margin: 3em 0;">
+               <span></span><br>
+               <span class="feedback-spinner"></span>
+       </div>
+       <div class="feedback-mode feedback-thanks" style="text-align: center; margin:1em"></div>
+       <div class="feedback-mode feedback-error" style="position: relative;">
+               <div class="feedback-error-msg" style=" color:#990000; margin-top:0.4em;"></div>
+       </div>
+</div>
index 2e8fed4..7391afd 100644 (file)
@@ -112,4 +112,7 @@ $wgAutoloadClasses += array(
        # tests/phpunit/includes/site
        'SiteTest' => "$testDir/phpunit/includes/site/SiteTest.php",
        'TestSites' => "$testDir/phpunit/includes/site/TestSites.php",
+
+       # tests/phpunit/includes/specialpage
+       'SpecialPageTestHelper' => "$testDir/phpunit/includes/specialpage/SpecialPageTestHelper.php",
 );
index 8630f5d..c011a68 100644 (file)
@@ -50,6 +50,7 @@ module.exports = function ( grunt ) {
                },
                banana: {
                        core: 'languages/i18n/',
+                       api: 'includes/api/i18n/',
                        installer: 'includes/installer/i18n/'
                },
                watch: {
index 3acc48e..2bfabe4 100644 (file)
@@ -322,16 +322,16 @@ class GlobalTest extends MediaWikiTestCase {
                $wgDebugTimestamps = false;
 
                wfDebug( "This is a normal string" );
-               $this->assertEquals( "This is a normal string", file_get_contents( $wgDebugLogFile ) );
+               $this->assertEquals( "This is a normal string\n", file_get_contents( $wgDebugLogFile ) );
                unlink( $wgDebugLogFile );
 
                wfDebug( "This is nöt an ASCII string" );
-               $this->assertEquals( "This is nöt an ASCII string", file_get_contents( $wgDebugLogFile ) );
+               $this->assertEquals( "This is nöt an ASCII string\n", file_get_contents( $wgDebugLogFile ) );
                unlink( $wgDebugLogFile );
 
                wfDebug( "\00305This has böth UTF and control chars\003" );
                $this->assertEquals(
-                       " 05This has böth UTF and control chars ",
+                       " 05This has böth UTF and control chars \n",
                        file_get_contents( $wgDebugLogFile )
                );
                unlink( $wgDebugLogFile );
index 2fce6bf..678c89b 100644 (file)
@@ -34,7 +34,7 @@ class ImportTest extends MediaWikiLangTestCase {
                        }
                };
 
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
                $importer->setPageOutCallback( $callback );
                $importer->doImport();
 
@@ -45,7 +45,7 @@ class ImportTest extends MediaWikiLangTestCase {
                return array(
                        array(
                                <<< EOF
-<mediawiki>
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
        <page>
                <title>Test</title>
                <ns>0</ns>
@@ -59,10 +59,10 @@ class ImportTest extends MediaWikiLangTestCase {
                                <id>10</id>
                        </contributor>
                        <comment>Admin moved page [[Test]] to [[Test22]]</comment>
-                       <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
-                       <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
                        <model>wikitext</model>
                        <format>text/x-wiki</format>
+                       <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
+                       <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
                </revision>
        </page>
 </mediawiki>
@@ -72,7 +72,7 @@ EOF
                        ),
                        array(
                                <<< EOF
-<mediawiki>
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
        <page>
                <title>Test</title>
                <ns>0</ns>
index d7e8cd3..89d1de7 100644 (file)
@@ -172,7 +172,7 @@ mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
                                '<script>if(window.mw){
-mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{});
+mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{},{});
 
 }</script>
 '
index 39822dc..754568d 100644 (file)
@@ -28,7 +28,7 @@ class TestUser {
 
        private function assertNotReal() {
                global $wgDBprefix;
-               if( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX && $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX ) {
+               if ( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX && $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX ) {
                        throw new MWException( "Can't create user on real database" );
                }
        }
@@ -114,9 +114,9 @@ class TestUser {
                $passwordFactory = $this->user->getPasswordFactory();
                $oldDefaultType = $passwordFactory->getDefaultType();
 
-                // B is salted MD5 (thus fast) ... we don't care about security here, this is test only
-               $passwordFactory->setDefaultType( 'B' ); // @TODO: Change this to A once that is fixed: https://gerrit.wikimedia.org/r/167523
-               $newPassword = $passwordFactory->newFromPlaintext( $password , $this->user->getPassword() );
+               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
+               $passwordFactory->setDefaultType( 'A' );
+               $newPassword = $passwordFactory->newFromPlaintext( $password, $this->user->getPassword() );
 
                $change = false;
                if ( !$this->user->getPassword()->equals( $newPassword ) ) {
index 49c0108..6af1862 100644 (file)
@@ -650,10 +650,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
        public function testActionPermissions() {
                $this->setUserPerm( array( "createpage" ) );
                $this->setTitle( NS_MAIN, "test page" );
-               $this->title->mTitleProtection['pt_create_perm'] = '';
-               $this->title->mTitleProtection['pt_user'] = $this->user->getID();
-               $this->title->mTitleProtection['pt_expiry'] = wfGetDB( DB_SLAVE )->getInfinity();
-               $this->title->mTitleProtection['pt_reason'] = 'test';
+               $this->title->mTitleProtection['permission'] = '';
+               $this->title->mTitleProtection['user'] = $this->user->getID();
+               $this->title->mTitleProtection['expiry'] = wfGetDB( DB_SLAVE )->getInfinity();
+               $this->title->mTitleProtection['reason'] = 'test';
                $this->title->mCascadeRestriction = false;
 
                $this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
@@ -661,7 +661,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $this->assertEquals( false,
                        $this->title->userCan( 'create', $this->user ) );
 
-               $this->title->mTitleProtection['pt_create_perm'] = 'sysop';
+               $this->title->mTitleProtection['permission'] = 'editprotected';
                $this->setUserPerm( array( 'createpage', 'protect' ) );
                $this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
                        $this->title->getUserPermissionsErrors( 'create', $this->user ) );
index 7f7945b..c011e9a 100644 (file)
@@ -55,8 +55,8 @@ class WikiPageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @param Title $title
-        * @param string $model
+        * @param Title|string $title
+        * @param string|null $model
         * @return WikiPage
         */
        protected function newPage( $title, $model = null ) {
index 328d839..56130f1 100644 (file)
@@ -148,7 +148,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // generator + 2 props
                $data = $this->query( $mk( 99, 99, 99 ), 1, 'G2P', false ) +
-                       array( 'batchcomplete' => '' );;
+                       array( 'batchcomplete' => '' );
                $this->checkC( $data, $mk( 1, 1, 1 ), 16, 'G2P-111' );
                $this->checkC( $data, $mk( 2, 2, 2 ), 9, 'G2P-222' );
                $this->checkC( $data, $mk( 3, 3, 3 ), 6, 'G2P-333' );
index 456266f..7657633 100644 (file)
@@ -169,12 +169,28 @@ class FormatJsonTest extends MediaWikiTestCase {
                $this->assertEquals( $value, $st->getValue() );
        }
 
+       /**
+        * Test data for testParseTryFixing.
+        *
+        * HHVM has a lenient json parser (yeah great idea right?) which allows
+        * trailing commas for array and object delarations among other things, so
+        * our JSON_ERROR_SYNTAX rescue block is not always triggered. It however
+        * isn't lenient in exactly the same ways as our TRY_FIXING mode, so the
+        * assertions in this test are a bit more complicated than they ideally
+        * would be:
+        *
+        * Optional third argument: true if hhvm parses the value without
+        * intervention, false otherwise. Defaults to true.
+        *
+        * Optional fourth argument: expected cannonical JSON serialization of HHVM
+        * parsed result. Defaults to the second argument's value.
+        */
        public static function provideParseTryFixing() {
                return array(
-                       array( "[,]", '[]' ),
-                       array( "[ , ]", '[]' ),
+                       array( "[,]", '[]', false ),
+                       array( "[ , ]", '[]', false ),
                        array( "[ , }", false ),
-                       array( '[1],', false ),
+                       array( '[1],', false, true, '[1]' ),
                        array( "[1,]", '[1]' ),
                        array( "[1\n,]", '[1]' ),
                        array( "[1,\n]", '[1]' ),
@@ -182,24 +198,43 @@ class FormatJsonTest extends MediaWikiTestCase {
                        array( "[1\n,\n]\n", '[1]' ),
                        array( '["a,",]', '["a,"]' ),
                        array( "[[1,]\n,[2,\n],[3\n,]]", '[[1],[2],[3]]' ),
-                       array( '[[1,],[2,],[3,]]', false ), // I wish we could parse this, but would need quote parsing
-                       array( '[1,,]', false ),
+                       // I wish we could parse this, but would need quote parsing
+                       array( '[[1,],[2,],[3,]]', false, true, '[[1],[2],[3]]' ),
+                       array( '[1,,]', false, false, '[1]' ),
                );
        }
 
        /**
         * @dataProvider provideParseTryFixing
         * @param string $value
-        * @param string|bool $expected
+        * @param string|bool $expected Expected result with Zend PHP
+        * @param bool $hhvmParses Will HHVM parse this value without TRY_FIXING?
+        * @param string|bool $expectedHHVM Expected result with HHVM if different
+        * from the PHP5 expectation
         */
-       public function testParseTryFixing( $value, $expected ) {
+       public function testParseTryFixing(
+               $value, $expected,
+               $hhvmParses = true, $expectedHHVM = null
+       ) {
+               // PHP5 results are always expected to have isGood() === false
+               $expectedGoodStatus = false;
+
+               if ( wfIsHHVM() ) {
+                       // Use HHVM specific expected result if provided
+                       $expected = ( $expectedHHVM === null ) ? $expected : $expectedHHVM;
+                       // If HHVM parses the value natively, expect isGood() === true
+                       $expectedGoodStatus = $hhvmParses;
+               }
+
                $st = FormatJson::parse( $value, FormatJson::TRY_FIXING );
                $this->assertType( 'Status', $st );
                if ( $expected === false ) {
-                       $this->assertFalse( $st->isOK() );
+                       $this->assertFalse( $st->isOK(), 'Expected isOK() == false' );
                } else {
-                       $this->assertFalse( $st->isGood() );
-                       $this->assertTrue( $st->isOK() );
+                       $this->assertSame( $expectedGoodStatus, $st->isGood(),
+                               'Expected isGood() == ' . ( $expectedGoodStatus ? 'true' : 'false' )
+                       );
+                       $this->assertTrue( $st->isOK(), 'Expected isOK == true' );
                        $val = FormatJson::encode( $st->getValue(), false, FormatJson::ALL_OK );
                        $this->assertEquals( $expected, $val );
                }
index fb436ee..95da847 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+/**
+ * @group ResourceLoader
+ */
 class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
 
        protected function setUp() {
@@ -15,6 +18,76 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
                );
        }
 
+       public static function getModules() {
+               $base = array(
+                       'localBasePath' => realpath( dirname( __FILE__ ) ),
+               );
+
+               return array(
+                       'noTemplateModule' => array(),
+
+                       'htmlTemplateModule' => $base + array(
+                               'templates' => array(
+                                       'templates/template.html',
+                                       'templates/template2.html',
+                               )
+                       ),
+
+                       'aliasedHtmlTemplateModule' => $base + array(
+                               'templates' => array(
+                                       'foo.html' => 'templates/template.html',
+                                       'bar.html' => 'templates/template2.html',
+                               )
+                       ),
+
+                       'templateModuleHandlebars' => $base + array(
+                               'templates' => array(
+                                       'templates/template_awesome.handlebars',
+                               ),
+                       ),
+               );
+       }
+
+       public static function providerGetTemplates() {
+               $modules = self::getModules();
+
+               return array(
+                       array(
+                               $modules['noTemplateModule'],
+                               array(),
+                       ),
+                       array(
+                               $modules['templateModuleHandlebars'],
+                               array(
+                                       'templates/template_awesome.handlebars' => "wow\n",
+                               ),
+                       ),
+                       array(
+                               $modules['htmlTemplateModule'],
+                               array(
+                                       'templates/template.html' => "<strong>hello</strong>\n",
+                                       'templates/template2.html' => "<div>goodbye</div>\n",
+                               ),
+                       ),
+                       array(
+                               $modules['aliasedHtmlTemplateModule'],
+                               array(
+                                       'foo.html' => "<strong>hello</strong>\n",
+                                       'bar.html' => "<div>goodbye</div>\n",
+                               ),
+                       ),
+               );
+       }
+
+       public static function providerGetModifiedTime() {
+               $modules = self::getModules();
+
+               return array(
+                       // Check the default value when no templates present in module is 1
+                       array( $modules['noTemplateModule'], 1 ),
+               );
+       }
+
        /**
         * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
         */
@@ -58,4 +131,25 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
                        array_map( 'basename', $module->getAllStyleFiles() )
                );
        }
+
+       /**
+        * @dataProvider providerGetTemplates
+        * @covers ResourceLoaderFileModule::getTemplates
+        */
+       public function testGetTemplates( $module, $expected ) {
+               $rl = new ResourceLoaderFileModule( $module );
+
+               $this->assertEquals( $rl->getTemplates(), $expected );
+       }
+
+       /**
+        * @dataProvider providerGetModifiedTime
+        * @covers ResourceLoaderFileModule::getModifiedTime
+        */
+       public function testGetModifiedTime( $module, $expected ) {
+               $rl = new ResourceLoaderFileModule( $module );
+               $ts = $rl->getModifiedTime( new ResourceLoaderContext(
+                       new ResourceLoader, new FauxRequest() ) );
+               $this->assertEquals( $ts, $expected );
+       }
 }
diff --git a/tests/phpunit/includes/resourceloader/templates/template.html b/tests/phpunit/includes/resourceloader/templates/template.html
new file mode 100644 (file)
index 0000000..1f6a7d2
--- /dev/null
@@ -0,0 +1 @@
+<strong>hello</strong>
diff --git a/tests/phpunit/includes/resourceloader/templates/template2.html b/tests/phpunit/includes/resourceloader/templates/template2.html
new file mode 100644 (file)
index 0000000..a322f67
--- /dev/null
@@ -0,0 +1 @@
+<div>goodbye</div>
diff --git a/tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars b/tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars
new file mode 100644 (file)
index 0000000..5f5c07d
--- /dev/null
@@ -0,0 +1 @@
+wow
index cb12273..fd6911f 100644 (file)
@@ -52,12 +52,23 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
        }
 
        public function specialPageProvider() {
+               $specialPageTestHelper = new SpecialPageTestHelper();
+
                return array(
                        'class name' => array( 'SpecialAllPages', false ),
                        'closure' => array( function () {
                                return new SpecialAllPages();
                        }, false ),
                        'function' => array( array( $this, 'newSpecialAllPages' ), false ),
+                       'callback string' => array( 'SpecialPageTestHelper::newSpecialAllPages', false ),
+                       'callback with object' => array(
+                               array( $specialPageTestHelper, 'newSpecialAllPages' ),
+                               false
+                       ),
+                       'callback array' => array(
+                               array( 'SpecialPageTestHelper', 'newSpecialAllPages' ),
+                               false
+                       )
                );
        }
 
diff --git a/tests/phpunit/includes/specialpage/SpecialPageTestHelper.php b/tests/phpunit/includes/specialpage/SpecialPageTestHelper.php
new file mode 100644 (file)
index 0000000..37e29dc
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+class SpecialPageTestHelper {
+
+       public static function newSpecialAllPages() {
+               return new SpecialAllPages();
+       }
+
+}
index fc58022..e6a0cf0 100644 (file)
@@ -37,7 +37,7 @@ class LanguageGvTest extends LanguageClassesTestCase {
                        array( 'other', 23 ),
                        array( 'other', 50 ),
                        array( 'few', 60 ),
-                       array( 'other', 80 ),
+                       array( 'few', 80 ),
                        array( 'few', 100 )
                );
        }
index f64fc72..1381afb 100644 (file)
@@ -13,7 +13,7 @@ class LanguageRuTest extends LanguageClassesTestCase {
         * @covers Language::convertPlural
         */
        public function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many', 'other' );
+               $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
@@ -22,9 +22,9 @@ class LanguageRuTest extends LanguageClassesTestCase {
         * @covers Language::convertPlural
         */
        public function testExplicitPlural() {
-               $forms = array( 'one', 'many', 'other', '12=dozen' );
+               $forms = array( 'one', 'few', 'many', 'other', '12=dozen' );
                $this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) );
-               $forms = array( 'one', 'many', '100=hundred', 'other', '12=dozen' );
+               $forms = array( 'one', 'few', 'many', '100=hundred', 'other', '12=dozen' );
                $this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) );
        }
 
@@ -42,10 +42,10 @@ class LanguageRuTest extends LanguageClassesTestCase {
                        array( 'many', 11 ),
                        array( 'one', 91 ),
                        array( 'one', 121 ),
-                       array( 'other', 2 ),
-                       array( 'other', 3 ),
-                       array( 'other', 4 ),
-                       array( 'other', 334 ),
+                       array( 'few', 2 ),
+                       array( 'few', 3 ),
+                       array( 'few', 4 ),
+                       array( 'few', 334 ),
                        array( 'many', 5 ),
                        array( 'many', 15 ),
                        array( 'many', 120 ),
index 7ac51c6..20f5bd7 100644 (file)
@@ -28,7 +28,9 @@ class LanguageTlTest extends LanguageClassesTestCase {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
-                       array( 'other', 2 ),
+                       array( 'one', 2 ),
+                       array( 'other', 4 ),
+                       array( 'other', 6 ),
                );
        }
 }
index 8b6aef5..415e11b 100644 (file)
@@ -330,6 +330,12 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                $this->assertTextNode( "comment", $summary );
                $this->skipWhitespace();
 
+               $this->assertTextNode( "model", $model );
+               $this->skipWhitespace();
+
+               $this->assertTextNode( "format", $format );
+               $this->skipWhitespace();
+
                if ( $this->xml->name == "text" ) {
                        // note: <text> tag may occur here or at the very end.
                        $text_found = true;
@@ -340,12 +346,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
 
                $this->assertTextNode( "sha1", $text_sha1 );
 
-               $this->assertTextNode( "model", $model );
-               $this->skipWhitespace();
-
-               $this->assertTextNode( "format", $format );
-               $this->skipWhitespace();
-
                if ( !$text_found ) {
                        $this->assertText( $id, $text_id, $text_bytes, $text );
                }
index a37a97c..e620b08 100644 (file)
@@ -440,10 +440,10 @@ class TextPassDumperTest extends DumpTestCase {
                if ( $fname === null ) {
                        $fname = $this->getNewTempFile();
                }
-               $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.7/" '
+               $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" '
                        . 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
-                       . 'xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.7/ '
-                       . 'http://www.mediawiki.org/xml/export-0.7.xsd" version="0.7" xml:lang="en">
+                       . 'xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ '
+                       . 'http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
   <siteinfo>
     <sitename>wikisvn</sitename>
     <base>http://localhost/wiki-svn/index.php/Main_Page</base>
@@ -489,10 +489,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP1Summary1</comment>
-      <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId1_1 . '" bytes="23" />
+      <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
     </revision>
   </page>
 ';
@@ -507,10 +507,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary1</comment>
-      <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_1 . '" bytes="23" />
+      <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
     </revision>
     <revision>
       <id>' . ( $this->revId2_2 + $i * self::$numOfRevs ) . '</id>
@@ -520,10 +520,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary2</comment>
-      <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_2 . '" bytes="23" />
+      <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
     </revision>
     <revision>
       <id>' . ( $this->revId2_3 + $i * self::$numOfRevs ) . '</id>
@@ -533,10 +533,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary3</comment>
-      <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_3 . '" bytes="23" />
+      <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
     </revision>
     <revision>
       <id>' . ( $this->revId2_4 + $i * self::$numOfRevs ) . '</id>
@@ -546,10 +546,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary4 extra</comment>
-      <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_4 . '" bytes="44" />
+      <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
     </revision>
   </page>
 ';
@@ -566,10 +566,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>Talk BackupDumperTestP1 Summary1</comment>
-      <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId4_1 . '" bytes="35" />
+      <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
     </revision>
   </page>
 ';
index 34007ed..a6fbfac 100644 (file)
@@ -66,6 +66,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
@@ -106,6 +107,7 @@ return array(
                        'mediawiki.toc',
                        'mediawiki.Uri',
                        'mediawiki.user',
+                       'mediawiki.template',
                        'mediawiki.util',
                        'mediawiki.special.recentchanges',
                        'mediawiki.language',
index 1d5656e..b89526f 100644 (file)
 
                this.server.respond( function ( request ) {
                        if ( window.FormData ) {
-                               assert.ok( !request.url.match( /action=/), 'Request has no query string' );
+                               assert.ok( !request.url.match( /action=/ ), 'Request has no query string' );
                                assert.ok( request.requestBody instanceof FormData, 'Request uses FormData body' );
                        } else {
-                               assert.ok( !request.url.match( /action=test/), 'Request has no query string' );
+                               assert.ok( !request.url.match( /action=test/ ), 'Request has no query string' );
                                assert.equal( request.requestBody, 'action=test&format=json', 'Request uses query string body' );
                        }
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
        } );
 
+       QUnit.test( 'Converting arrays to pipe-separated', function ( assert ) {
+               QUnit.expect( 1 );
+
+               var api = new mw.Api();
+               api.get( { test: [ 'foo', 'bar', 'baz' ] } );
+
+               this.server.respond( function ( request ) {
+                       assert.ok( request.url.match( /test=foo%7Cbar%7Cbaz/ ), 'Pipe-separated value was submitted' );
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
+               } );
+       } );
+
        QUnit.test( 'getToken( pre-populated )', function ( assert ) {
                QUnit.expect( 2 );
 
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js
new file mode 100644 (file)
index 0000000..86fd828
--- /dev/null
@@ -0,0 +1,63 @@
+( function ( mw ) {
+
+       QUnit.module( 'mediawiki.template', {
+               setup: function () {
+                       var abcCompiler = {
+                               compile: function () {
+                                       return 'abc default compiler';
+                               }
+                       };
+
+                       // Register some template compiler languages
+                       mw.template.registerCompiler( 'abc', abcCompiler );
+                       mw.template.registerCompiler( 'xyz', {
+                               compile: function () {
+                                       return 'xyz compiler';
+                               }
+                       } );
+
+                       // Stub register some templates
+                       this.sandbox.stub( mw.templates, 'get' ).returns( {
+                               'test_templates_foo.xyz': 'goodbye',
+                               'test_templates_foo.abc': 'thankyou'
+                       } );
+               }
+       } );
+
+       QUnit.test( 'add', 1, function ( assert ) {
+               assert.throws(
+                       function () {
+                               mw.template.add( 'module', 'test_templates_foo', 'hello' );
+                       },
+                       'When no prefix throw exception'
+               );
+       } );
+
+       QUnit.test( 'compile', 1, function ( assert ) {
+               assert.throws(
+                       function () {
+                               mw.template.compile( '{{foo}}', 'rainbow' );
+                       },
+                       'Unknown compiler names throw exceptions'
+               );
+       } );
+
+       QUnit.test( 'get', 4, function ( assert ) {
+               assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.xyz' ), 'xyz compiler' );
+               assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.abc' ), 'abc default compiler' );
+               assert.throws(
+                       function () {
+                               mw.template.get( 'this.should.not.exist', 'hello' );
+                       },
+                       'When bad module name given throw error.'
+               );
+
+               assert.throws(
+                       function () {
+                               mw.template.get( 'mediawiki.template', 'hello' );
+                       },
+                       'The template hello should not exist in the mediawiki.templates module and should throw an exception.'
+               );
+       } );
+
+}( mediaWiki ) );