Merge "Fixing grammar, capitalization and spelling in comments"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 26 Jan 2017 03:33:37 +0000 (03:33 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 26 Jan 2017 03:33:37 +0000 (03:33 +0000)
215 files changed:
README
RELEASE-NOTES-1.29
autoload.php
docs/hooks.txt
includes/CategoryViewer.php
includes/DefaultSettings.php
includes/EditPage.php
includes/FileDeleteForm.php
includes/MWGrants.php
includes/OutputPage.php
includes/Preferences.php
includes/ProtectionForm.php
includes/Revision.php
includes/RevisionList.php
includes/Sanitizer.php
includes/Setup.php
includes/TrackingCategories.php [new file with mode: 0644]
includes/api/ApiErrorFormatter.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiUpload.php
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/lt.json
includes/api/i18n/nl.json
includes/api/i18n/pl.json
includes/api/i18n/zh-hans.json
includes/cache/MessageCache.php
includes/htmlform/fields/HTMLTextField.php
includes/installer/Installer.php
includes/installer/i18n/en.json
includes/installer/i18n/nl.json
includes/installer/i18n/qqq.json
includes/installer/i18n/war.json
includes/installer/i18n/zh-hans.json
includes/libs/StringUtils.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/libs/xmp/XMP.php
includes/logging/BlockLogFormatter.php
includes/logging/LogFormatter.php
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/DateFormatter.php
includes/parser/Parser.php
includes/parser/ParserOutput.php
includes/skins/SkinTemplate.php
includes/specials/SpecialBlock.php
includes/specials/SpecialContributions.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialTrackingCategories.php
includes/specials/SpecialUnusedimages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserrights.php
includes/specials/pagers/CategoryPager.php
includes/specials/pagers/MergeHistoryPager.php
includes/tidy/Balancer.php
includes/upload/UploadBase.php
includes/widget/search/FullSearchResultWidget.php
languages/Language.php
languages/classes/LanguageFi.php
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/ba.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dty.json
languages/i18n/el.json
languages/i18n/en-gb.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/glk.json
languages/i18n/gor.json
languages/i18n/he.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/io.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ka.json
languages/i18n/ko.json
languages/i18n/ku-latn.json
languages/i18n/lb.json
languages/i18n/lfn.json
languages/i18n/lki.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/mr.json
languages/i18n/my.json
languages/i18n/nah.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ru.json
languages/i18n/sah.json
languages/i18n/sh.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/th.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/udm.json
languages/i18n/uk.json
languages/i18n/war.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCy.php
languages/messages/MessagesDe.php
languages/messages/MessagesEn.php
languages/messages/MessagesEt.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesHe.php
languages/messages/MessagesHy.php
languages/messages/MessagesId.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNn.php
languages/messages/MessagesOc.php
languages/messages/MessagesRu.php
languages/messages/MessagesSh.php
languages/messages/MessagesSk.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUk.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh_hans.php
maintenance/generateJsonI18n.php
maintenance/manageJobs.php [new file with mode: 0644]
maintenance/rebuildtextindex.php
maintenance/refreshLinks.php
resources/Resources.php
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-core-apex.css
resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
resources/lib/oojs-ui/oojs-ui-core.js
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
resources/lib/oojs-ui/oojs-ui-toolbars.js
resources/lib/oojs-ui/oojs-ui-widgets-apex.css
resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css
resources/lib/oojs-ui/oojs-ui-widgets.js
resources/lib/oojs-ui/oojs-ui-windows-apex.css
resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css
resources/lib/oojs-ui/oojs-ui-windows.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterItem.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less [deleted file]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterGroupWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
resources/src/mediawiki.skinning/content.css
resources/src/mediawiki.special/mediawiki.special.apisandbox.css
resources/src/mediawiki.special/mediawiki.special.apisandbox.js
resources/src/mediawiki/api/options.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.reasonSuggest.js [deleted file]
tests/browser/features/login.feature
tests/browser/features/step_definitions/login_steps.rb
tests/browser/features/support/pages/create_account_page.rb
tests/browser/features/support/pages/login_page.rb
tests/parser/ParserTestRunner.php
tests/parser/parserTests.txt
tests/phan/config.php
tests/phan/stubs/mail.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/api/ApiErrorFormatterTest.php
tests/phpunit/includes/cache/MessageCacheTest.php
tests/phpunit/includes/page/WikiPageTest.php
tests/phpunit/includes/tidy/BalancerTest.php
tests/phpunit/includes/tidy/html5lib-tests.json
tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js

diff --git a/README b/README
index 6d3ab80..ad9b9d9 100644 (file)
--- a/README
+++ b/README
@@ -19,7 +19,7 @@ RELEASE-NOTES, INSTALL, and UPGRADE.
 * Ready to get started?
 ** https://www.mediawiki.org/wiki/Special:MyLanguage/Download
 * Looking for the technical manual?
-** https://www.mediawiki.org/wiki/Special:MyLangyage/Manual:Contents
+** https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents
 * Seeking help from a person?
 ** https://www.mediawiki.org/wiki/Special:MyLanguage/Communication
 * Looking to file a bug report or a feature request?
index e404940..3bf50ac 100644 (file)
@@ -44,8 +44,6 @@ production.
   from certain IP ranges (e.g. private IPs).
 * (T59603) Added new magic word {{PAGELANGUAGE}} which returns the language code
   of the page being parsed.
-* Added JavaScript that provides as-you-type suggestions for reason
-  on the block, delete and protect forms.
 * HTML5 form validation attributes will no longer be suppressed. Originally
   browsers had poor support for them, but modern browsers handle them fine.
   This might affect some forms that used them and only worked because the
@@ -201,6 +199,15 @@ changes to languages because of Phabricator reports.
   Use ContentHandlerDefaultModelFor instead.
 * Hook TitleIsWikitextPage (deprecated in 1.21) was removed.
   Use ContentHandlerDefaultModelFor instead.
+* Article::getContent() (deprecated in 1.21) was removed.
+* Revision::getText() (deprecated in 1.21) was removed.
+* Article::doEdit() and WikiPage::doEdit() (deprecated in 1.21) were removed.
+* Parser::replaceUnusualEscapes() (deprecated in 1.24) was removed.
+* Article::doEditContent() was marked as deprecated, to be removed in 1.30
+  or later.
+* ContentHandler::runLegacyHooks() was removed.
+* refreshLinks.php now can be limited to a particular category with --category=...
+  or a tracking category with --tracking-category=...
 
 == Compatibility ==
 
index 5d0ca0d..e7c97ad 100644 (file)
@@ -810,6 +810,7 @@ $wgAutoloadLocalClasses = [
        'MaintenanceFormatInstallDoc' => __DIR__ . '/maintenance/formatInstallDoc.php',
        'MakeTestEdits' => __DIR__ . '/maintenance/makeTestEdits.php',
        'MalformedTitleException' => __DIR__ . '/includes/title/MalformedTitleException.php',
+       'ManageJobs' => __DIR__ . '/maintenance/manageJobs.php',
        'ManualLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
        'MapCacheLRU' => __DIR__ . '/includes/libs/MapCacheLRU.php',
        'MappedIterator' => __DIR__ . '/includes/libs/MappedIterator.php',
@@ -1458,6 +1459,7 @@ $wgAutoloadLocalClasses = [
        'TitlePrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
        'TitleValue' => __DIR__ . '/includes/title/TitleValue.php',
        'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php',
+       'TrackingCategories' => __DIR__ . '/includes/TrackingCategories.php',
        'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
        'TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
        'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
index c5b112d..803c20d 100644 (file)
@@ -2823,11 +2823,11 @@ $terms: Search terms, for highlighting
 
 'ShowSearchHitTitle': Customise display of search hit title/link.
 &$title: Title to link to
-&$text: Text to use for the link
-$result: The search result
-$terms: The search terms entered
-$page: The SpecialSearch object
-&$query: Query string to be appended to the link
+&$titleSnippet: Label for the link representing the search result. Typically the article title.
+$result: The SearchResult object
+$terms: String of the search terms entered
+$specialSearch: The SpecialSearch object
+&$query: Array of query string parameters for the link representing the search result.
 
 'SidebarBeforeOutput': Allows to edit sidebar just before it is output by skins.
 Warning: This hook is run on each display. You should consider to use
index facf847..31369b0 100644 (file)
@@ -632,11 +632,12 @@ class CategoryViewer extends ContextSource {
        private function pagingLinks( $first, $last, $type = '' ) {
                $prevLink = $this->msg( 'prev-page' )->text();
 
+               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $first != '' ) {
                        $prevQuery = $this->query;
                        $prevQuery["{$type}until"] = $first;
                        unset( $prevQuery["{$type}from"] );
-                       $prevLink = Linker::linkKnown(
+                       $prevLink = $linkRenderer->makeKnownLink(
                                $this->addFragmentToTitle( $this->title, $type ),
                                $prevLink,
                                [],
@@ -650,7 +651,7 @@ class CategoryViewer extends ContextSource {
                        $lastQuery = $this->query;
                        $lastQuery["{$type}from"] = $last;
                        unset( $lastQuery["{$type}until"] );
-                       $nextLink = Linker::linkKnown(
+                       $nextLink = $linkRenderer->makeKnownLink(
                                $this->addFragmentToTitle( $this->title, $type ),
                                $nextLink,
                                [],
index 566d4aa..086b615 100644 (file)
@@ -8231,7 +8231,19 @@ $wgRedirectOnLogin = null;
  * The remaining elements are passed through to the class as constructor
  * parameters.
  *
- * @par Example:
+ * @par Example using local redis instance:
+ * @code
+ *   $wgPoolCounterConf = [ 'ArticleView' => [
+ *     'class' => 'PoolCounterRedis',
+ *     'timeout' => 15, // wait timeout in seconds
+ *     'workers' => 1, // maximum number of active threads in each pool
+ *     'maxqueue' => 5, // maximum number of total threads in each pool
+ *     'servers' => [ '127.0.0.1' ],
+ *     'redisConfig' => []
+ *   ] ];
+ * @endcode
+ *
+ * @par Example using C daemon from https://www.mediawiki.org/wiki/Extension:PoolCounter:
  * @code
  *   $wgPoolCounterConf = [ 'ArticleView' => [
  *     'class' => 'PoolCounter_Client',
@@ -8239,7 +8251,7 @@ $wgRedirectOnLogin = null;
  *     'workers' => 5, // maximum number of active threads in each pool
  *     'maxqueue' => 50, // maximum number of total threads in each pool
  *     ... any extension-specific options...
- *   ];
+ *   ] ];
  * @endcode
  */
 $wgPoolCounterConf = null;
index de08880..e070ca3 100644 (file)
@@ -498,6 +498,9 @@ class EditPage {
                $this->enableApiEditOverride = $enableOverride;
        }
 
+       /**
+        * @deprecated since 1.29, call edit directly
+        */
        function submit() {
                $this->edit();
        }
@@ -3573,6 +3576,7 @@ HTML
         */
        public function getCancelLink() {
                $cancelParams = [];
+               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
                if ( !$this->isConflict && $this->oldid > 0 ) {
                        $cancelParams['oldid'] = $this->oldid;
                } elseif ( $this->getContextTitle()->isRedirect() ) {
@@ -3580,9 +3584,9 @@ HTML
                }
                $attrs = [ 'id' => 'mw-editform-cancel' ];
 
-               return Linker::linkKnown(
+               return $linkRenderer->makeKnownLink(
                        $this->getContextTitle(),
-                       $this->context->msg( 'cancel' )->parse(),
+                       new HtmlArmor( $this->context->msg( 'cancel' )->parse() ),
                        Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ),
                        $cancelParams
                );
index f850152..82af081 100644 (file)
@@ -21,6 +21,7 @@
  * @author Rob Church <robchur@gmail.com>
  * @ingroup Media
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * File deletion user interface
@@ -301,9 +302,10 @@ class FileDeleteForm {
 
                        if ( $wgUser->isAllowed( 'editinterface' ) ) {
                                $title = wfMessage( 'filedelete-reason-dropdown' )->inContentLanguage()->getTitle();
-                               $link = Linker::linkKnown(
+                               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+                               $link = $linkRenderer->makeKnownLink(
                                        $title,
-                                       wfMessage( 'filedelete-edit-reasonlist' )->escaped(),
+                                       wfMessage( 'filedelete-edit-reasonlist' )->text(),
                                        [],
                                        [ 'action' => 'edit' ]
                                );
index 58efdc7..c7c54fd 100644 (file)
@@ -17,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * A collection of public static functions to deal with grants.
@@ -178,9 +179,10 @@ class MWGrants {
         * @return string (proto-relative) HTML link
         */
        public static function getGrantsLink( $grant, $lang = null ) {
-               return \Linker::linkKnown(
+               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+               return $linkRenderer->makeKnownLink(
                        \SpecialPage::getTitleFor( 'Listgrants', false, $grant ),
-                       htmlspecialchars( self::grantName( $grant, $lang ) )
+                       self::grantName( $grant, $lang )
                );
        }
 
index 8fe1285..fd28f4a 100644 (file)
@@ -2515,9 +2515,10 @@ class OutputPage extends ContextSource {
                                        $query['returntoquery'] = wfArrayToCgi( $returntoquery );
                                }
                        }
-                       $loginLink = Linker::linkKnown(
+                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+                       $loginLink = $linkRenderer->makeKnownLink(
                                SpecialPage::getTitleFor( 'Userlogin' ),
-                               $this->msg( 'loginreqlink' )->escaped(),
+                               $this->msg( 'loginreqlink' )->text(),
                                [],
                                $query
                        );
@@ -3562,7 +3563,6 @@ class OutputPage extends ContextSource {
        protected function buildExemptModules() {
                global $wgContLang;
 
-               $resourceLoader = $this->getResourceLoader();
                $chunks = [];
                // Things that go after the ResourceLoaderDynamicStyles marker
                $append = [];
index 89982a6..a5e9d77 100644 (file)
@@ -493,9 +493,9 @@ class Preferences {
                                        } else {
                                                $disableEmailPrefs = true;
                                                $emailauthenticated = $context->msg( 'emailnotauthenticated' )->parse() . '<br />' .
-                                                       Linker::linkKnown(
+                                                       $linkRenderer->makeKnownLink(
                                                                SpecialPage::getTitleFor( 'Confirmemail' ),
-                                                               $context->msg( 'emailconfirmlink' )->escaped()
+                                                               $context->msg( 'emailconfirmlink' )->text()
                                                        ) . '<br />';
                                                $emailauthenticationclass = "mw-email-not-authenticated";
                                        }
@@ -942,11 +942,12 @@ class Preferences {
                                'raw' => [ 'EditWatchlist', 'raw' ],
                                'clear' => [ 'EditWatchlist', 'clear' ],
                        ];
+                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
                        foreach ( $editWatchlistModes as $editWatchlistMode => $mode ) {
                                // Messages: prefs-editwatchlist-edit, prefs-editwatchlist-raw, prefs-editwatchlist-clear
-                               $editWatchlistLinks[] = Linker::linkKnown(
+                               $editWatchlistLinks[] = $linkRenderer->makeKnownLink(
                                        SpecialPage::getTitleFor( $mode[0], $mode[1] ),
-                                       $context->msg( "prefs-editwatchlist-{$editWatchlistMode}" )->parse()
+                                       new HtmlArmor( $context->msg( "prefs-editwatchlist-{$editWatchlistMode}" )->parse() )
                                );
                        }
 
index bcf4dda..a68c36f 100644 (file)
@@ -22,6 +22,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Handles the page protection UI and backend
@@ -182,21 +183,10 @@ class ProtectionForm {
                        throw new ErrorPageError( 'protect-badnamespace-title', 'protect-badnamespace-text' );
                }
 
-               $out = $this->mContext->getOutput();
-               if ( !wfMessage( 'protect-dropdown' )->inContentLanguage()->isDisabled() ) {
-                       $reasonsList = Xml::getArrayFromWikiTextList(
-                               wfMessage( 'protect-dropdown' )->inContentLanguage()->text()
-                       );
-                       $out->addModules( 'mediawiki.reasonSuggest' );
-                       $out->addJsConfigVars( [
-                               'reasons' => $reasonsList
-                       ] );
-               }
-
                if ( $this->mContext->getRequest()->wasPosted() ) {
                        if ( $this->save() ) {
                                $q = $this->mArticle->isRedirect() ? 'redirect=no' : '';
-                               $out->redirect( $this->mTitle->getFullURL( $q ) );
+                               $this->mContext->getOutput()->redirect( $this->mTitle->getFullURL( $q ) );
                        }
                } else {
                        $this->show();
@@ -554,9 +544,10 @@ class ProtectionForm {
                $out .= Xml::closeElement( 'fieldset' );
 
                if ( $user->isAllowed( 'editinterface' ) ) {
-                       $link = Linker::linkKnown(
+                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+                       $link = $linkRenderer->makeKnownLink(
                                $context->msg( 'protect-dropdown' )->inContentLanguage()->getTitle(),
-                               $context->msg( 'protect-edit-reasonlist' )->escaped(),
+                               $context->msg( 'protect-edit-reasonlist' )->text(),
                                [],
                                [ 'action' => 'edit' ]
                        );
index 8721ef9..d9e42ff 100644 (file)
@@ -1035,28 +1035,6 @@ class Revision implements IDBAccessObject {
                return (int)$this->mDeleted;
        }
 
-       /**
-        * Fetch revision text if it's available to the specified audience.
-        * If the specified audience does not have the ability to view this
-        * revision, an empty string will be returned.
-        *
-        * @param int $audience One of:
-        *   Revision::FOR_PUBLIC       to be displayed to all users
-        *   Revision::FOR_THIS_USER    to be displayed to the given user
-        *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
-        *   to the $audience parameter
-        *
-        * @deprecated since 1.21, use getContent() instead
-        * @return string
-        */
-       public function getText( $audience = self::FOR_PUBLIC, User $user = null ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               $content = $this->getContent( $audience, $user );
-               return ContentHandler::getContentText( $content ); # returns the raw content text, if applicable
-       }
-
        /**
         * Fetch revision content if it's available to the specified audience.
         * If the specified audience does not have the ability to view this
index 052fd16..53cf699 100644 (file)
@@ -363,13 +363,14 @@ class RevisionItem extends RevisionItemBase {
         * @return string
         */
        protected function getRevisionLink() {
-               $date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
-                       $this->revision->getTimestamp(), $this->list->getUser() ) );
+               $date = $this->list->getLanguage()->userTimeAndDate(
+                       $this->revision->getTimestamp(), $this->list->getUser() );
 
                if ( $this->isDeleted() && !$this->canViewContent() ) {
-                       return $date;
+                       return htmlspecialchars( $date );
                }
-               return Linker::linkKnown(
+               $linkRenderer = $this->getLinkRenderer();
+               return $linkRenderer->makeKnownLink(
                        $this->list->title,
                        $date,
                        [],
@@ -391,9 +392,10 @@ class RevisionItem extends RevisionItemBase {
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $this->context->msg( 'diff' )->escaped();
                } else {
-                       return Linker::linkKnown(
+                       $linkRenderer = $this->getLinkRenderer();
+                       return $linkRenderer->makeKnownLink(
                                        $this->list->title,
-                                       $this->list->msg( 'diff' )->escaped(),
+                                       $this->list->msg( 'diff' )->text(),
                                        [],
                                        [
                                                'diff' => $this->revision->getId(),
index 6779189..42b166d 100644 (file)
@@ -1119,6 +1119,7 @@ class Sanitizer {
                        '>'    => '&gt;',   // we've received invalid input
                        '"'    => '&quot;', // which should have been escaped.
                        '{'    => '&#123;',
+                       '}'    => '&#125;', // prevent unpaired language conversion syntax
                        '['    => '&#91;',
                        "''"   => '&#39;&#39;',
                        'ISBN' => '&#73;SBN',
index ecd164d..01ba1e8 100644 (file)
@@ -244,7 +244,7 @@ if ( $wgUseInstantCommons ) {
                'transformVia404' => true,
                'fetchDescription' => true,
                'descriptionCacheExpiry' => 43200,
-               'apiThumbCacheExpiry' => 86400,
+               'apiThumbCacheExpiry' => 0,
        ];
 }
 /*
diff --git a/includes/TrackingCategories.php b/includes/TrackingCategories.php
new file mode 100644 (file)
index 0000000..825860a
--- /dev/null
@@ -0,0 +1,130 @@
+<?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
+ *
+ * @file
+ * @ingroup Categories
+ */
+
+/**
+ * This class performs some operations related to tracking categories, such as creating
+ * a list of all such categories.
+ */
+class TrackingCategories {
+       /** @var Config */
+       private $config;
+
+       /**
+        * Tracking categories that exist in core
+        *
+        * @var array
+        */
+       private static $coreTrackingCategories = [
+               'index-category',
+               'noindex-category',
+               'duplicate-args-category',
+               'expensive-parserfunction-category',
+               'post-expand-template-argument-category',
+               'post-expand-template-inclusion-category',
+               'hidden-category-category',
+               'broken-file-category',
+               'node-count-exceeded-category',
+               'expansion-depth-exceeded-category',
+               'restricted-displaytitle-ignored',
+               'deprecated-self-close-category',
+       ];
+
+       /**
+        * @param Config $config
+        */
+       public function __construct( Config $config ) {
+               $this->config = $config;
+       }
+
+       /**
+        * Read the global and extract title objects from the corresponding messages
+        * @return array Array( 'msg' => Title, 'cats' => Title[] )
+        */
+       public function getTrackingCategories() {
+               $categories = array_merge(
+                       self::$coreTrackingCategories,
+                       ExtensionRegistry::getInstance()->getAttribute( 'TrackingCategories' ),
+                       $this->config->get( 'TrackingCategories' ) // deprecated
+               );
+
+               // Only show magic link tracking categories if they are enabled
+               $enableMagicLinks = $this->config->get( 'EnableMagicLinks' );
+               if ( $enableMagicLinks['ISBN'] ) {
+                       $categories[] = 'magiclink-tracking-isbn';
+               }
+               if ( $enableMagicLinks['RFC'] ) {
+                       $categories[] = 'magiclink-tracking-rfc';
+               }
+               if ( $enableMagicLinks['PMID'] ) {
+                       $categories[] = 'magiclink-tracking-pmid';
+               }
+
+               $trackingCategories = [];
+               foreach ( $categories as $catMsg ) {
+                       /*
+                        * Check if the tracking category varies by namespace
+                        * Otherwise only pages in the current namespace will be displayed
+                        * If it does vary, show pages considering all namespaces
+                        */
+                       $msgObj = wfMessage( $catMsg )->inContentLanguage();
+                       $allCats = [];
+                       $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg );
+                       if ( !$catMsgTitle ) {
+                               continue;
+                       }
+
+                       // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}.
+                       // False positives are ok, this is just an efficiency shortcut
+                       if ( strpos( $msgObj->plain(), '{{' ) !== false ) {
+                               $ns = MWNamespace::getValidNamespaces();
+                               foreach ( $ns as $namesp ) {
+                                       $tempTitle = Title::makeTitleSafe( $namesp, $catMsg );
+                                       if ( !$tempTitle ) {
+                                               continue;
+                                       }
+                                       $catName = $msgObj->title( $tempTitle )->text();
+                                       # Allow tracking categories to be disabled by setting them to "-"
+                                       if ( $catName !== '-' ) {
+                                               $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
+                                               if ( $catTitle ) {
+                                                       $allCats[] = $catTitle;
+                                               }
+                                       }
+                               }
+                       } else {
+                               $catName = $msgObj->text();
+                               # Allow tracking categories to be disabled by setting them to "-"
+                               if ( $catName !== '-' ) {
+                                       $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
+                                       if ( $catTitle ) {
+                                               $allCats[] = $catTitle;
+                                       }
+                               }
+                       }
+                       $trackingCategories[$catMsg] = [
+                               'cats' => $allCats,
+                               'msg' => $catMsgTitle,
+                       ];
+               }
+
+               return $trackingCategories;
+       }
+}
index 814004a..c52b731 100644 (file)
@@ -414,12 +414,17 @@ class ApiErrorFormatter_BackCompat extends ApiErrorFormatter {
 
                if ( $tag === 'error' ) {
                        // In BC mode, only one error
-                       $value = [
-                               'code' => $msg->getApiCode(),
-                               'info' => $value,
-                       ] + $msg->getApiData();
-                       $this->result->addValue( null, 'error', $value,
-                               ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+                       $existingError = $this->result->getResultData( [ 'error' ] );
+                       if ( !is_array( $existingError ) ||
+                               !isset( $existingError['code'] ) || !isset( $existingError['info'] )
+                       ) {
+                               $value = [
+                                       'code' => $msg->getApiCode(),
+                                       'info' => $value,
+                               ] + $msg->getApiData();
+                               $this->result->addValue( null, 'error', $value,
+                                       ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+                       }
                } else {
                        if ( $modulePath === null ) {
                                $moduleName = 'unknown';
index b9bb761..7f349bc 100644 (file)
@@ -52,6 +52,7 @@ class ApiFeedWatchlist extends ApiBase {
        public function execute() {
                $config = $this->getConfig();
                $feedClasses = $config->get( 'FeedClasses' );
+               $params = [];
                try {
                        $params = $this->extractRequestParams();
 
index f821374..6b38302 100644 (file)
@@ -637,7 +637,8 @@ class ApiUpload extends ApiBase {
                                break;
 
                        case UploadBase::HOOK_ABORTED:
-                               $this->dieWithError( $params, 'hookaborted', [ 'details' => $verification['error'] ] );
+                               $msg = $verification['error'] === '' ? 'hookaborted' : $verification['error'];
+                               $this->dieWithError( $msg, 'hookaborted', [ 'details' => $verification['error'] ] );
                                break;
                        default:
                                $this->dieWithError( 'apierror-unknownerror-nocode', 'unknown-error',
index 67c5be5..534c359 100644 (file)
        "apihelp-paraminfo-param-formatmodules": "Lista de los nombres del formato de los módulos (valor del parámetro <var>format</var>). Utiliza <var>$1modules</var> en su lugar.",
        "apihelp-paraminfo-example-1": "Mostrar información para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> y <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-paraminfo-example-2": "Mostrar información para todos los submódulos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+       "apihelp-parse-description": "Analiza el contenido y devuelve la salida del analizador sintáctico.\n\nVéanse los distintos módulos prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obtener información de la versión actual de una página.\n\nHay varias maneras de especificar el texto que analizar:\n# Especificar una página o revisión, mediante <var>$1page</var>, <var>$1pageid</var> o <var>$1oldid</var>.\n# Especificar explícitamente el contenido, mediante <var>$1text</var>, <var>$1title</var> y <var>$1contentmodel</var>.\n# Especificar solamente un resumen que analizar. Se debería asignar a <var>$1prop</var> un valor vacío.",
        "apihelp-parse-param-title": "Título de la página a la que pertenece el texto. Si se omite se debe especificar <var>$1contentmodel</var> y se debe utilizar el [[API]] como título.",
        "apihelp-parse-param-text": "Texto a analizar. Utiliza <var>$1title</var> or <var>$1contentmodel</var> para controlar el modelo del contenido.",
        "apihelp-parse-param-summary": "Resumen a analizar.",
        "apihelp-parse-param-sectionpreview": "Analizar sección en modo de vista previa (también activa el modo de vista previa).",
        "apihelp-parse-param-disabletoc": "Omitir la tabla de contenidos en la salida.",
        "apihelp-parse-param-contentformat": "Formato de serialización de contenido utilizado para la introducción de texto. Sólo es válido cuando se utiliza con $1text.",
+       "apihelp-parse-param-contentmodel": "Modelo de contenido del texto de entrada. Si se omite, se debe especificar $1title, y el valor por defecto será el modelo del título especificado. Solo es válido cuando se use junto con $1text.",
        "apihelp-parse-example-page": "Analizar una página.",
        "apihelp-parse-example-text": "Analizar wikitexto.",
        "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando el título de la página.",
        "apihelp-query+allmessages-param-prop": "Qué propiedades se obtendrán.",
        "apihelp-query+allmessages-param-enableparser": "Establecer para habilitar el analizador, se preprocesará el wikitexto del mensaje (sustitución de palabras mágicas, uso de plantillas, etc.).",
        "apihelp-query+allmessages-param-nocontent": "Si se establece, no incluya el contenido de los mensajes en la salida.",
+       "apihelp-query+allmessages-param-includelocal": "Incluir también los mensajes locales, es decir, aquellos que no existen en el propio software pero sí en el espacio de nombres {{ns:MediaWiki}}.\nEsto muestra todas las páginas del espacio de nombres {{ns:MediaWiki}}, así que también mostrará las que no son propiamente mensajes, como, por ejemplo, [[MediaWiki:Common.js|Common.js]].",
        "apihelp-query+allmessages-param-args": "Los argumentos que se sustituyen en el mensaje.",
        "apihelp-query+allmessages-param-filter": "Devolver solo mensajes con nombres que contengan esta cadena.",
        "apihelp-query+allmessages-param-customised": "Devolver solo mensajes en este estado de personalización.",
        "apihelp-query+allredirects-param-prefix": "Buscar todas las páginas de destino que empiecen con este valor.",
        "apihelp-query+allredirects-param-unique": "Mostrar solo títulos únicos de páginas de destino. No se puede usar junto con $1prop=ids|fragment|interwiki. Cuando se use como generador, devuelve páginas de destino en vez de páginas de origen.",
        "apihelp-query+allredirects-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "Añade el identificador de la página de redirección (no se puede usar junto con <var>$1unique</var>).",
        "apihelp-query+allredirects-paramvalue-prop-title": "Añade el título de la redirección.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "Añade el fragmento de la redirección, si existe (no se puede usar junto con <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "Añade el prefijo interwiki de la redirección, si existe (no se puede usar junto con <var>$1unique</var>).",
        "apihelp-query+allredirects-param-namespace": "El espacio de nombres a enumerar.",
        "apihelp-query+allredirects-param-limit": "Cuántos elementos se devolverán.",
        "apihelp-query+allredirects-param-dir": "La dirección en la que se listará.",
+       "apihelp-query+allredirects-example-B": "Enumera las páginas de destino, incluyendo las páginas desaparecidas, con los identificadores de las páginas de las que provienen, empezando por <kbd>B</kbd>.",
        "apihelp-query+allredirects-example-unique": "La lista de páginas de destino.",
        "apihelp-query+allredirects-example-unique-generator": "Obtiene todas las páginas de destino, marcando los que faltan.",
        "apihelp-query+allredirects-example-generator": "Obtiene páginas que contienen las redirecciones.",
        "apihelp-query+alltransclusions-param-namespace": "El espacio de nombres que enumerar.",
        "apihelp-query+alltransclusions-param-limit": "Número de elementos que se desea obtener.",
        "apihelp-query+alltransclusions-param-dir": "La dirección en que ordenar la lista.",
+       "apihelp-query+alltransclusions-example-B": "Enumerar los títulos transcluidos, incluyendo los faltantes, junto con los identificadores de las páginas de las que provienen, empezando por <kbd>B</kbd>.",
        "apihelp-query+alltransclusions-example-unique": "Listar títulos transcluidos de forma única.",
        "apihelp-query+alltransclusions-example-unique-generator": "Obtiene todos los títulos transcluidos, marcando los que faltan.",
        "apihelp-query+alltransclusions-example-generator": "Obtiene las páginas que contienen las transclusiones.",
        "apihelp-query+allusers-param-attachedwiki": "Con <kbd>$1prop=centralids</kbd>, indicar también si el usuario está conectado con el wiki identificado por el ID.",
        "apihelp-query+allusers-example-Y": "Listar usuarios que empiecen por <kbd>Y</kbd>.",
        "apihelp-query+authmanagerinfo-description": "Recuperar información sobre el estado de autenticación actual.",
+       "apihelp-query+authmanagerinfo-param-requestsfor": "Obtener información sobre las peticiones de autentificación requeridas para la acción de autentificación especificada.",
        "apihelp-query+authmanagerinfo-example-login": "Captura de las solicitudes que puede ser utilizadas al comienzo de inicio de sesión.",
+       "apihelp-query+authmanagerinfo-example-login-merged": "Obtener las peticiones que podrían utilizarse al empezar un inicio de sesión, con los campos de formulario integrados.",
        "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Comprueba si la autentificación es suficiente para realizar la acción <kbd>foo</kbd>.",
        "apihelp-query+backlinks-description": "Encuentra todas las páginas que enlazan a la página dada.",
        "apihelp-query+backlinks-param-title": "Título que buscar. No se puede usar junto con <var>$1pageid</var>.",
        "apihelp-query+blocks-paramvalue-prop-flags": "Etiquetas la prohibición con (autoblock, anononly, etc.).",
        "apihelp-query+blocks-param-show": "Muestra solamente los elementos que cumplen estos criterios.\nPor ejemplo, para mostrar solamente los bloqueos indefinidos a direcciones IP, introduce <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Listar bloques.",
+       "apihelp-query+blocks-example-users": "Muestra los bloqueos de los usuarios <kbd>Alice</kbd> y <kbd>Bob</kbd>.",
        "apihelp-query+categories-description": "Enumera todas las categorías a las que pertenecen las páginas.",
        "apihelp-query+categories-param-prop": "Qué propiedades adicionales obtener para cada categoría:",
        "apihelp-query+categories-paramvalue-prop-sortkey": "Añade la clave de ordenación (cadena hexadecimal) y el prefijo de la clave de ordenación (la parte legible) de la categoría.",
        "apihelp-query+categorymembers-param-endsortkey": "Utilizar $1endhexsortkey en su lugar.",
        "apihelp-query+categorymembers-example-simple": "Obtener las primeras 10 páginas en <kbd>Category:Physics</kbd>.",
        "apihelp-query+categorymembers-example-generator": "Obtener información sobre las primeras 10 páginas de la <kbd>Category:Physics</kbd>.",
+       "apihelp-query+contributors-description": "Obtener la lista de contribuidores conectados y el número de contribuidores anónimos de una página.",
+       "apihelp-query+contributors-param-group": "Solo incluir usuarios de los grupos especificados. No incluye grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
+       "apihelp-query+contributors-param-excludegroup": "Excluir usuarios de los grupos especificados. No incluye grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
+       "apihelp-query+contributors-param-rights": "Solo incluir usuarios con los derechos especificados. No incluye derechos concedidos a grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
+       "apihelp-query+contributors-param-excluderights": "Excluir usuarios con los derechos especificados. No incluye derechos concedidos a grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
        "apihelp-query+contributors-param-limit": "Cuántos contribuyentes se devolverán.",
        "apihelp-query+contributors-example-simple": "Mostrar los contribuyentes de la página <kbd>Main Page</kbd>.",
        "apihelp-query+deletedrevisions-param-start": "Marca de tiempo por la que empezar la enumeración. Se ignora cuando se esté procesando una lista de ID de revisión.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "Comentarios sobre la versión.",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analizar el comentario de la versión.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Agrega el título canónico del archivo.",
+       "apihelp-query+imageinfo-paramvalue-prop-url": "Devuelve la URL para el archivo y la página de descripción.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias para el tamaño.",
        "apihelp-query+imageinfo-paramvalue-prop-sha1": "Añade el hash SHA-1 para la imagen.",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "Añade el tipo MIME del archivo.",
        "apihelp-query+imageinfo-example-dated": "Obtener información sobre las versiones de [[:File:Test.jpg]] a partir de 2008.",
        "apihelp-query+images-description": "Devuelve todos los archivos contenidos en las páginas dadas.",
        "apihelp-query+images-param-limit": "Cuántos archivos se devolverán.",
+       "apihelp-query+images-param-images": "Mostrar solo estos archivos. Útil para comprobar si una determinada página tiene un determinado archivo.",
        "apihelp-query+images-param-dir": "La dirección en que ordenar la lista.",
        "apihelp-query+images-example-simple": "Obtener una lista de los archivos usados en la [[Main Page|Portada]].",
        "apihelp-query+images-example-generator": "Obtener información sobre todos los archivos empleados en [[Main Page]].",
+       "apihelp-query+imageusage-description": "Encontrar todas las páginas que usen el título de imagen dado.",
        "apihelp-query+imageusage-param-title": "Título a buscar. No puede usarse en conjunto con $1pageid.",
        "apihelp-query+imageusage-param-pageid": "ID de página a buscar. No puede usarse con $1title.",
        "apihelp-query+imageusage-param-namespace": "El espacio de nombres que enumerar.",
        "apihelp-query+imageusage-param-dir": "La dirección en que ordenar la lista.",
+       "apihelp-query+imageusage-param-filterredir": "Cómo filtrar las redirecciones. Si se establece a no redirecciones cuando está habilitado $1redirect, esto solo se aplica al segundo nivel.",
+       "apihelp-query+imageusage-param-limit": "Número de páginas que devolver. Si está habilitado <var>$1redirect</var>, el límite se aplica a cada nivel de forma separada (es decir, se pueden devolver hasta 2 * <var>$1limit</var>).",
        "apihelp-query+imageusage-example-simple": "Mostrar las páginas que usan [[:File:Albert Einstein Head.jpg]].",
        "apihelp-query+imageusage-example-generator": "Obtener información sobre las páginas que empleen [[:File:Albert Einstein Head.jpg]].",
        "apihelp-query+info-description": "Obtener información básica de la página.",
        "apihelp-query+info-paramvalue-prop-readable": "Si el usuario puede leer esta página.",
        "apihelp-query+info-paramvalue-prop-preload": "Muestra el texto devuelto por EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Proporciona la manera en que se muestra realmente el título de la página",
+       "apihelp-query+info-param-testactions": "Comprobar su el usuario actual puede realizar determinadas acciones en la página.",
        "apihelp-query+info-param-token": "Usa [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] en su lugar.",
        "apihelp-query+info-example-simple": "Obtener información acerca de la página <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Obtén información general y protección acerca de la página <kbd>Main Page</kbd>.",
+       "apihelp-query+iwbacklinks-description": "Encontrar todas las páginas que enlazan al enlace interwiki dado.\n\nPuede utilizarse para encontrar todos los enlaces con un prefijo, o todos los enlaces a un título (con un determinado prefijo). Si no se introduce ninguno de los parámetros, se entiende como «todos los enlaces interwiki».",
        "apihelp-query+iwbacklinks-param-prefix": "Prefijo para el interwiki.",
        "apihelp-query+iwbacklinks-param-title": "Enlace interlingüístico que buscar. Se debe usar junto con <var>$1blprefix</var>.",
        "apihelp-query+iwbacklinks-param-limit": "Cuántas páginas se devolverán.",
        "apihelp-query+langbacklinks-param-dir": "La dirección en que ordenar la lista.",
        "apihelp-query+langbacklinks-example-simple": "Obtener las páginas enlazadas a [[:fr:Test]]",
        "apihelp-query+langbacklinks-example-generator": "Obtener información acerca de las páginas enlazadas a [[:fr:Test]].",
+       "apihelp-query+langlinks-description": "Devuelve todos los enlaces interlingüísticos de las páginas dadas.",
        "apihelp-query+langlinks-param-limit": "Número de enlaces interlingüísticos que devolver.",
        "apihelp-query+langlinks-param-url": "Obtener la URL completa o no (no se puede usar con <var>$1prop</var>).",
        "apihelp-query+langlinks-param-prop": "Qué propiedades adicionales obtener para cada enlace interlingüe:",
        "apihelp-query+links-description": "Devuelve todos los enlaces de las páginas dadas.",
        "apihelp-query+links-param-namespace": "Mostrar solo los enlaces en estos espacios de nombres.",
        "apihelp-query+links-param-limit": "Cuántos enlaces se devolverán.",
+       "apihelp-query+links-param-titles": "Devolver solo los enlaces a estos títulos. Útil para comprobar si una determinada página enlaza a un determinado título.",
        "apihelp-query+links-param-dir": "La dirección en que ordenar la lista.",
        "apihelp-query+links-example-simple": "Obtener los enlaces de la página <kbd>Main Page</kbd>",
+       "apihelp-query+links-example-namespaces": "Obtener enlaces de la página <kbd>Main Page</kbd> de los espacios de nombres {{ns:user}} and {{ns:template}}.",
        "apihelp-query+linkshere-description": "Buscar todas las páginas que enlazan a las páginas dadas.",
        "apihelp-query+linkshere-param-prop": "Qué propiedades se obtendrán:",
        "apihelp-query+linkshere-paramvalue-prop-pageid": "Identificador de cada página.",
        "apihelp-query+logevents-param-type": "Filtrar las entradas del registro solo a este tipo.",
        "apihelp-query+logevents-param-start": "Marca de tiempo por la que empezar la enumeración.",
        "apihelp-query+logevents-param-end": "Marca de tiempo por la que terminar la enumeración.",
+       "apihelp-query+logevents-param-user": "Filtrar entradas a aquellas realizadas por el usuario dado.",
+       "apihelp-query+logevents-param-title": "Filtrar entradas a aquellas relacionadas con una página.",
+       "apihelp-query+logevents-param-namespace": "Filtrar entradas a aquellas en el espacio de nombres dado.",
+       "apihelp-query+logevents-param-prefix": "Filtrar entradas que empiezan por este prefijo.",
+       "apihelp-query+logevents-param-tag": "Solo mostrar las entradas de eventos con esta etiqueta.",
+       "apihelp-query+logevents-param-limit": "Número total de entradas de eventos que devolver.",
        "apihelp-query+logevents-example-simple": "Mostrar los eventos recientes del registro.",
        "apihelp-query+pagepropnames-description": "Mostrar todos los nombres de propiedades de página utilizados en el wiki.",
        "apihelp-query+pagepropnames-param-limit": "Número máximo de nombres que devolver.",
        "apihelp-query+recentchanges-param-excludeuser": "No listar cambios de este usuario.",
        "apihelp-query+recentchanges-param-tag": "Listar solo los cambios con esta etiqueta.",
        "apihelp-query+recentchanges-param-prop": "Incluir piezas adicionales de información:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "Añade el usuario responsable de la edición y añade una etiqueta si se trata de una IP.",
        "apihelp-query+recentchanges-paramvalue-prop-userid": "Añade el identificador del usuario responsable de la edición.",
        "apihelp-query+recentchanges-paramvalue-prop-comment": "Añade el comentario de la edición.",
        "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Añade el comentario analizado para la edición.",
        "apihelp-query+recentchanges-param-token": "Usa <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> en su lugar.",
        "apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.",
        "apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
+       "apihelp-query+recentchanges-param-toponly": "Enumerar solo las modificaciones que sean las últimas revisiones.",
        "apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.",
        "apihelp-query+redirects-description": "Devuelve todas las redirecciones a las páginas dadas.",
        "apihelp-query+redirects-param-prop": "Qué propiedades se obtendrán:",
        "apihelp-query+transcludedin-paramvalue-prop-title": "Título de cada página.",
        "apihelp-query+transcludedin-param-namespace": "Incluir solo las páginas en estos espacios de nombres.",
        "apihelp-query+transcludedin-param-limit": "Cuántos se devolverán.",
+       "apihelp-query+transcludedin-param-show": "Muestra solo los elementos que cumplen estos criterios:\n;redirect: Muestra solamente redirecciones.\n;!redirect: Muestra solamente páginas que no son redirecciones.",
        "apihelp-query+transcludedin-example-simple": "Obtener una lista de páginas transcluyendo <kbd>Main Page</kbd>.",
        "apihelp-query+transcludedin-example-generator": "Obtener información sobre las páginas que transcluyen <kbd>Main Page</kbd>.",
        "apihelp-query+usercontribs-description": "Obtener todas las ediciones realizadas por un usuario.",
        "apihelp-query+usercontribs-param-limit": "Número máximo de contribuciones que se devolverán.",
+       "apihelp-query+usercontribs-param-namespace": "Enumerar solo las contribuciones en estos espacios de nombres.",
        "apihelp-query+usercontribs-param-prop": "Incluir piezas adicionales de información:",
        "apihelp-query+usercontribs-paramvalue-prop-ids": "Añade el identificador de página y el de revisión.",
        "apihelp-query+usercontribs-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta ediciones verificadas.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista las etiquetas para la edición.",
        "apihelp-query+usercontribs-param-show": "Mostrar solo los elementos que coinciden con estos criterios. Por ejemplo, solo ediciones no menores: <kbd>$2show=!minor</kbd>.\n\nSi se establece <kbd>$2show=patrolled</kbd> o <kbd>$2show=!patrolled</kbd>, las revisiones más antiguas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) no se mostrarán.",
+       "apihelp-query+usercontribs-param-tag": "Enumerar solo las revisiones con esta etiqueta.",
+       "apihelp-query+usercontribs-param-toponly": "Enumerar solo las modificaciones que sean las últimas revisiones.",
        "apihelp-query+usercontribs-example-user": "Mostrar contribuciones del usuario <kbd>Example</kbd>.",
        "apihelp-query+usercontribs-example-ipprefix": "Mostrar las contribuciones de todas las direcciones IP con el prefijo <kbd>192.0.2.</kbd>.",
        "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
        "apihelp-query+userinfo-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Etiqueta si el usuario está bloqueado, por quién y por qué motivo.",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Añade una etiqueta <samp>messages</samp> si el usuario actual tiene mensajes pendientes.",
        "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos los grupos al que pertenece el usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Enumera todos los grupos a los que pertenece automáticamente el usuario actual.",
        "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todos los permisos que tiene el usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Enumera los grupos a los que el usuario actual se puede unir o retirar.",
        "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas las preferencias que haya establecido el usuario actual.",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "Añade el número de ediciones del usuario actual.",
        "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todos los límites de velocidad aplicados al usuario actual.",
        "apihelp-query+userinfo-paramvalue-prop-email": "Añade la dirección de correo electrónico del usuario y la fecha de autenticación por correo.",
        "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Reenvía la cabecera <code>Accept-Language</code> enviada por el cliente en un formato estructurado.",
        "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Añade la fecha de registro del usuario.",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Añade el recuento de páginas no leídas de la lista de seguimiento del usuario (máximo $1, devuelve <samp>$2</samp> si el número es mayor).",
        "apihelp-query+userinfo-example-simple": "Obtener información sobre el usuario actual.",
        "apihelp-query+userinfo-example-data": "Obtener información adicional sobre el usuario actual.",
        "apihelp-query+users-description": "Obtener información sobre una lista de usuarios.",
        "apihelp-query+users-paramvalue-prop-registration": "Añade la marca de tiempo del registro del usuario.",
        "apihelp-query+users-paramvalue-prop-gender": "Etiqueta el género del usuario. Devuelve \"masculino\", \"femenino\" o \"desconocido\".",
        "apihelp-query+users-example-simple": "Devolver información del usuario <kbd>Example</kbd>.",
+       "apihelp-query+watchlist-description": "Obtener los cambios recientes de las páginas de la lista de seguimiento del usuario actual.",
        "apihelp-query+watchlist-param-start": "El sello de tiempo para comenzar la enumeración",
        "apihelp-query+watchlist-param-end": "El sello de tiempo para finalizar la enumeración.",
        "apihelp-query+watchlist-param-namespace": "Filtrar cambios solamente a los espacios de nombres dados.",
        "apihelp-query+watchlist-paramvalue-prop-sizes": "Añade la longitud vieja y la nueva de la página.",
        "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Añade fecha y hora de cuando el usuario fue notificado por última vez acerca de la edición.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Añade información del registro cuando corresponda.",
+       "apihelp-query+watchlist-param-show": "Muestra solo los elementos que cumplan estos criterios. Por ejemplo, para ver solo ediciones menores realizadas por usuarios conectados, introduce $1show=minor|!anon.",
        "apihelp-query+watchlist-param-type": "Qué tipos de cambios mostrar:",
        "apihelp-query+watchlist-paramvalue-type-edit": "Ediciones comunes a páginas",
        "apihelp-query+watchlist-paramvalue-type-external": "Cambios externos.",
        "apihelp-query+watchlist-paramvalue-type-new": "Creaciones de páginas.",
        "apihelp-query+watchlist-paramvalue-type-log": "Entradas del registro.",
+       "apihelp-query+watchlist-paramvalue-type-categorize": "Cambios de pertenencia a categorías.",
        "apihelp-query+watchlist-param-owner": "Utilizado junto con $1token para acceder a la lista de seguimiento de otro usuario.",
+       "apihelp-query+watchlist-example-props": "Obtener información adicional sobre la última revisión de páginas con cambios recientes en la lista de seguimiento del usuario actual.",
+       "apihelp-query+watchlist-example-allrev": "Obtener información sobre todos los cambios recientes de páginas de la lista de seguimiento del usuario actual.",
+       "apihelp-query+watchlist-example-generator": "Obtener información de página de las páginas con cambios recientes de la lista de seguimiento del usuario actual.",
+       "apihelp-query+watchlist-example-generator-rev": "Obtener información de revisión de los cambios recientes de páginas de la lista de seguimiento del usuario actual.",
+       "apihelp-query+watchlist-example-wlowner": "Enumerar la última revisión de páginas con cambios recientes de la lista de seguimiento del usuario <kbd>Example</kbd>.",
        "apihelp-query+watchlistraw-description": "Obtener todas las páginas de la lista de seguimiento del usuario actual.",
        "apihelp-query+watchlistraw-param-namespace": "Mostrar solamente las páginas de los espacios de nombres dados.",
        "apihelp-query+watchlistraw-param-limit": "Número de resultados que devolver en cada petición.",
        "apihelp-query+watchlistraw-param-prop": "Qué propiedades adicionales se obtendrán:",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "Añade la marca de tiempo de la última notificación al usuario sobre la edición.",
        "apihelp-query+watchlistraw-param-show": "Sólo listar los elementos que cumplen estos criterios.",
        "apihelp-query+watchlistraw-param-owner": "Utilizado junto con $1token para acceder a la lista de seguimiento de otro usuario.",
        "apihelp-query+watchlistraw-param-dir": "La dirección en la que se listará.",
        "apihelp-revisiondelete-param-hide": "Qué ocultar en cada revisión.",
        "apihelp-revisiondelete-param-show": "Qué mostrar en cada revisión.",
        "apihelp-revisiondelete-param-reason": "Motivo de la eliminación o restauración.",
+       "apihelp-revisiondelete-param-tags": "Etiquetas que aplicar a la entrada en el registro de borrados.",
        "apihelp-revisiondelete-example-revision": "Ocultar el contenido de la revisión <kbd>12345</kbd> de la página <kbd>Main Page</kbd>.",
        "apihelp-revisiondelete-example-log": "Ocultar todos los datos de la entrada de registro <kbd>67890</kbd> con el motivo <kbd>BLP violation</kbd>.",
        "apihelp-rollback-description": "Deshacer la última edición de la página.\n\nSi el último usuario que editó la página hizo varias ediciones consecutivas, todas ellas serán revertidas.",
        "apihelp-rollback-param-summary": "Resumen de edición personalizado. Si se deja vacío se utilizará el predeterminado.",
+       "apihelp-rollback-param-markbot": "Marcar las acciones revertidas y la reversión como ediciones por bots.",
+       "apihelp-rollback-param-watchlist": "Añadir o borrar incondicionalmente la página de la lista de seguimiento del usuario actual, usar preferencias o no cambiar seguimiento.",
        "apihelp-rsd-description": "Exportar un esquema RSD (Really Simple Discovery; Descubrimiento Muy Simple).",
        "apihelp-rsd-example-simple": "Exportar el esquema RSD.",
+       "apihelp-setnotificationtimestamp-example-all": "Restablecer el estado de notificación para la totalidad de la lista de seguimiento.",
+       "apihelp-setnotificationtimestamp-example-page": "Restablecer el estado de notificación de <kbd>Main page</kbd>.",
+       "apihelp-setnotificationtimestamp-example-allpages": "Restablecer el estado de notificación de las páginas del espacio de nombres <kbd>{{ns:user}}</kbd>.",
        "apihelp-setpagelanguage-description": "Cambiar el idioma de una página.",
        "apihelp-setpagelanguage-description-disabled": "En este wiki no se permite modificar el idioma de las páginas.\n\nActiva <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> para utilizar esta acción.",
        "apihelp-setpagelanguage-param-title": "Título de la página cuyo idioma deseas cambiar. No se puede usar junto con <var>$1pageid</var>.",
        "apihelp-setpagelanguage-param-pageid": "Identificador de la página cuyo idioma deseas cambiar. No se puede usar junto con <var>$1title</var>.",
        "apihelp-setpagelanguage-param-lang": "Código del idioma al que se desea cambiar la página. Usa <kbd>default</kbd> para restablecer la página al idioma predeterminado para el contenido del wiki.",
        "apihelp-setpagelanguage-param-reason": "Motivo del cambio.",
+       "apihelp-setpagelanguage-param-tags": "Cambiar las etiquetas que aplicar a la entrada de registro resultante de esta acción.",
        "apihelp-setpagelanguage-example-language": "Cambiar el idioma de <kbd>Main Page</kbd> al euskera.",
        "apihelp-setpagelanguage-example-default": "Cambiar el idioma de la página con identificador 123 al idioma predeterminado para el contenido del wiki.",
        "apihelp-stashedit-param-title": "Título de la página que se está editando.",
        "apihelp-stashedit-param-contentformat": "Formato de serialización de contenido utilizado para el texto de entrada.",
        "apihelp-stashedit-param-baserevid": "Identificador de la revisión de base.",
        "apihelp-stashedit-param-summary": "Resumen de cambios.",
+       "apihelp-tag-description": "Añadir o borrar etiquetas de modificación de revisiones individuales o entradas de registro.",
        "apihelp-tag-param-logid": "Uno o más identificadores de entradas del registro a los que agregar o eliminar la etiqueta.",
        "apihelp-tag-param-reason": "Motivo del cambio.",
        "apihelp-tag-example-rev": "Añadir la etiqueta <kbd>vandalism</kbd> al identificador de revisión 123 sin especificar un motivo",
        "apihelp-undelete-param-title": "Título de la página que restaurar.",
        "apihelp-undelete-param-reason": "Motivo de la restauración.",
        "apihelp-undelete-param-tags": "Cambiar las etiquetas para aplicar a la entrada en el registro de borrados.",
+       "apihelp-undelete-example-page": "Restaurar la página <kbd>Main page</kbd>.",
        "apihelp-undelete-example-revisions": "Restaurar dos revisiones de la página <kbd>Main Page</kbd>.",
        "apihelp-upload-param-filename": "Nombre del archivo de destino.",
        "apihelp-upload-param-tags": "Cambiar etiquetas para aplicar a la entrada del registro de subidas y a la revisión de página de archivo.",
+       "apihelp-upload-param-text": "Texto de página inicial para archivos nuevos.",
        "apihelp-upload-param-watch": "Vigilar la página.",
+       "apihelp-upload-param-watchlist": "Añadir o borrar incondicionalmente la página de la lista de seguimiento del usuario actual, utilizar las preferencias o no cambiar el estado de seguimiento.",
        "apihelp-upload-param-ignorewarnings": "Ignorar las advertencias.",
        "apihelp-upload-param-file": "Contenido del archivo.",
        "apihelp-upload-param-url": "URL de la que obtener el archivo.",
+       "apihelp-upload-param-sessionkey": "Idéntico a $1filekey, mantenido por razones de retrocompatibilidad.",
        "apihelp-upload-param-filesize": "Tamaño de archivo total de la carga.",
        "apihelp-upload-param-offset": "Posición del fragmento en bytes.",
        "apihelp-upload-param-chunk": "Contenido del fragmento.",
        "apihelp-upload-param-async": "Realizar de forma asíncrona las operaciones de archivo potencialmente grandes cuando sea posible.",
        "apihelp-upload-example-url": "Subir desde una URL.",
+       "apihelp-userrights-description": "Cambiar la pertenencia a grupos de un usuario.",
        "apihelp-userrights-param-user": "Nombre de usuario.",
        "apihelp-userrights-param-userid": "ID de usuario.",
        "apihelp-userrights-param-add": "Agregar el usuario a estos grupos.",
        "apihelp-userrights-param-reason": "Motivo del cambio.",
        "apihelp-userrights-param-tags": "Cambia las etiquetas que aplicar a la entrada del registro de derechos del usuario.",
        "apihelp-userrights-example-user": "Agregar al usuario <kbd>FooBot</kbd> al grupo <kbd>bot</kbd> y eliminarlo de los grupos <kbd>sysop</kbd> y <kbd>bureaucrat</kbd>.",
+       "apihelp-userrights-example-userid": "Añade el usuario con identificador <kbd>123</kbd> al grupo <kbd>bot</kbd>, y lo borra de los grupos <kbd>sysop</kbd> y <kbd>bureaucrat</kbd>.",
+       "apihelp-validatepassword-description": "Valida una contraseña contra las políticas de contraseñas del wiki.\n\nLa validez es <samp>Good</samp> si la contraseña es aceptable, <samp>Change</samp> y la contraseña se puede usar para iniciar sesión pero debe cambiarse o <samp>Invalid</samp> si la contraseña no se puede usar.",
        "apihelp-validatepassword-param-password": "Contraseña para validar.",
+       "apihelp-validatepassword-param-user": "Nombre de usuario, para pruebas de creación de cuentas. El usuario nombrado no debe existir.",
+       "apihelp-validatepassword-param-email": "Dirección de correo electrónico, para pruebas de creación de cuentas.",
+       "apihelp-validatepassword-param-realname": "Nombre real, para pruebas de creación de cuentas.",
        "apihelp-validatepassword-example-1": "Validar la contraseña <kbd>foobar</kbd> para el usuario actual.",
        "apihelp-validatepassword-example-2": "Validar la contraseña <kbd>qwerty</kbd> para la creación del usuario <kbd>Example</kbd>.",
        "apihelp-watch-description": "Añadir o borrar páginas de la lista de seguimiento del usuario actual.",
+       "apihelp-watch-param-title": "La página que seguir o dejar de seguir. Usa <var>$1titles</var> en su lugar.",
+       "apihelp-watch-param-unwatch": "Si se define, en vez de seguir la página, se dejará de seguir.",
        "apihelp-watch-example-watch": "Vigilar la página <kbd>Main Page</kbd>.",
        "apihelp-watch-example-unwatch": "Dejar de vigilar la <kbd>Main Page</kbd>.",
+       "apihelp-watch-example-generator": "Seguir las primeras páginas del espacio de nombres principal.",
        "apihelp-format-example-generic": "Devolver el resultado de la consulta en formato $1.",
        "apihelp-json-description": "Extraer los datos de salida en formato JSON.",
        "apihelp-json-param-callback": "Si se especifica, envuelve la salida dentro de una llamada a una función dada. Por motivos de seguridad, cualquier dato específico del usuario estará restringido.",
        "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:",
        "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Concedido a|Concedidos a}}: $2",
+       "api-help-open-in-apisandbox": "<small>[abrir en la zona de pruebas]</small>",
        "api-help-authmanagerhelper-messageformat": "Formato utilizado para los mensajes devueltos.",
        "api-help-authmanagerhelper-preservestate": "Preservar el estado de un intento fallido anterior de inicio de sesión, si es posible.",
+       "apierror-articleexists": "El artículo que intentaste crear ya estaba creado.",
        "apierror-assertbotfailed": "La aserción de que el usuario tiene el derecho <code>bot</code> falló.",
        "apierror-assertnameduserfailed": "La aserción de que el usuario es «$1» falló.",
        "apierror-assertuserfailed": "La aserción de que el usuario está conectado falló.",
        "apierror-autoblocked": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por un usuario bloqueado.",
        "apierror-badconfig-resulttoosmall": "El valor de <code>$wgAPIMaxResultSize</code> en este wiki es demasiado pequeño como para contener información básica de resultados.",
        "apierror-baddiff": "La comparación no puede recuperarse. Una o ambas revisiones no existen o no tienes permiso para verlas.",
+       "apierror-badformat-generic": "El formato solicitado $1 no es compatible con el modelo de contenido $2.",
+       "apierror-badformat": "El formato solicitado $1 no es compatible con el modelo de contenido $2 utilizado por $3.",
        "apierror-badgenerator-notgenerator": "El módulo <kbd>$1</kbd> no puede utilizarse como un generador.",
        "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> desconocido.",
        "apierror-badip": "El parámetro IP no es válido.",
        "apierror-baduser": "Valor no válido \"$2\" para el parámetro de usuario <var>$1</var>.",
        "apierror-blockedfrommail": "Se te ha bloqueado de enviar email.",
        "apierror-blocked": "Se te ha bloqueado de editar.",
+       "apierror-cannotreauthenticate": "Esta acción no está disponible, ya que tu identidad no se puede verificar.",
        "apierror-cannotviewtitle": "No tienes permiso para ver $1.",
        "apierror-cantblock-email": "No tienes permiso para bloquear a los usuarios el envío de correo electrónico a través de la wiki.",
        "apierror-cantblock": "No tienes permiso para bloquear usuarios.",
        "apierror-canthide": "No tienes permiso para ocultar nombres de usuario del registro de bloqueos.",
        "apierror-cantimport-upload": "No tienes permiso para importar páginas subidas.",
        "apierror-cantimport": "No tienes permiso para importar páginas.",
+       "apierror-cantoverwrite-sharedfile": "El fichero objetivo existe en un repositorio compartido y no tienes permiso para reemplazarlo.",
+       "apierror-cantsend": "No estás conectado, no tienes una dirección de correo electrónico confirmada o no tienes permiso para enviar correo electrónico a otros usuarios, así que no puedes enviar correo electrónico.",
+       "apierror-cantundelete": "No se ha podido restaurar: puede que las revisiones solicitadas no existan o que ya se hayan restaurado.",
+       "apierror-changeauth-norequest": "No se ha podido crear la petición de modificación.",
        "apierror-contentserializationexception": "La serialización de contenido falló: $1",
+       "apierror-create-titleexists": "Los títulos existentes no se pueden proteger con <kbd>create</kbd>.",
        "apierror-databaseerror": "[$1] Error en la consulta de la base de datos.",
        "apierror-deletedrevs-param-not-1-2": "El parámetro <var>$1</var> no se puede utilizar en los modos 1 o 2.",
+       "apierror-deletedrevs-param-not-3": "El parámetro <var>$1</var> no se puede usar en modo 3.",
+       "apierror-emptynewsection": "Crear secciones vacías no es posible.",
+       "apierror-emptypage": "Crear páginas vacías no está permitido.",
        "apierror-exceptioncaught": "[$1] Excepción capturada: $2",
        "apierror-filedoesnotexist": "El archivo no existe.",
+       "apierror-fileexists-sharedrepo-perm": "El archivo objetivo existe en un repositorio compartido. Usa el parámetro <var>ignorewarnings</var> para reemplazarlo.",
        "apierror-filenopath": "No se pudo obtener la ruta local del archivo.",
        "apierror-filetypecannotberotated": "El tipo de archivo no se puede girar.",
+       "apierror-formatphp": "Esta respuesta no se puede representar con <kbd>format=php</kbd>. Véase https://phabricator.wikimedia.org/T68776.",
        "apierror-imageusage-badtitle": "El título de <kbd>$1</kbd> debe ser un archivo.",
        "apierror-import-unknownerror": "Error desconocido en la importación: $1.",
+       "apierror-integeroutofrange-abovebotmax": "<var>$1</var> no puede ser mayor que $2 (fijado a $3) para bots o administradores de sistema.",
+       "apierror-integeroutofrange-abovemax": "<var>$1</var> no puede ser mayor que $2 (fijado a $3) para usuarios.",
+       "apierror-integeroutofrange-belowminimum": "<var>$1</var> no puede ser menor que $2 (fijado a $3).",
        "apierror-invalidcategory": "El nombre de la categoría que has introducido no es válida.",
        "apierror-invalidexpiry": "Tiempo de expiración \"$1\" no válido.",
+       "apierror-invalidlang": "Código de idioma no válido para el parámetro <var>$1</var>.",
        "apierror-invalidparammix-cannotusewith": "El parámetro <kbd>$1</kbd> no se puede utilizar junto con <kbd>$2</kbd>.",
        "apierror-invalidparammix-mustusewith": "El parámetro <kbd>$1</kbd> solo se puede utilizar junto con <kbd>$2</kbd>.",
        "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> no se puede combinar con los parámetros <var>oldid</var>, <var>pageid</var> y <var>page</var>. Por favor, utiliza <var>title</var> y <var>text</var>.",
        "apierror-invalidsha1base36hash": "El hash SHA1Base36 proporcionado no es válido.",
        "apierror-invalidsha1hash": "El hash SHA1 proporcionado no es válido.",
        "apierror-invalidtitle": "Título incorrecto \"$1\".",
+       "apierror-invalidurlparam": "Valor no válido para <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
        "apierror-invaliduser": "Nombre de usuario «$1» no válido.",
        "apierror-invaliduserid": "El identificador de usuario <var>$1</var> no es válido.",
        "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|El parámetro|Al menos uno de los parámetros}} $1 es necesario.",
        "apierror-missingparam-one-of": "{{PLURAL:$2|El parámetro|Uno de los parámetros}} $1 es necesario.",
        "apierror-missingparam": "Se debe establecer el parámetro <var>$1</var>.",
        "apierror-missingrev-pageid": "No hay ninguna revisión actual de la página con ID $1.",
+       "apierror-missingtitle-createonly": "Los títulos faltantes solo se pueden proteger con <kbd>create</kbd>.",
        "apierror-missingtitle": "El título especificado no existe.",
        "apierror-missingtitle-byname": "La página $1 no existe.",
        "apierror-moduledisabled": "El módulo <kbd>$1</kbd> ha sido deshabilitado.",
        "apierror-multival-only-one-of": "Solo {{PLURAL:$3|se permite el valor|se permiten los valores}} $2 para el parámetro <var>$1</var>.",
        "apierror-multival-only-one": "Solo se permite un valor para el parámetro <var>$1</var>.",
        "apierror-multpages": "<var>$1</var> no se puede utilizar más que con una sola página.",
+       "apierror-mustbeloggedin-changeauth": "Debes estar conectado para poder cambiar los datos de autentificación.",
+       "apierror-mustbeloggedin-generic": "Debes estar conectado.",
+       "apierror-mustbeloggedin-linkaccounts": "Debes estar conectado para enlazar cuentas.",
+       "apierror-mustbeloggedin-removeauth": "Debes estar conectado para borrar datos de autentificación.",
+       "apierror-mustbeloggedin": "Debes estar conectado para $1.",
+       "apierror-mustbeposted": "El módulo <kbd>$1</kbd> requiere una petición POST.",
+       "apierror-nochanges": "No se solicitó ningún cambio.",
        "apierror-noedit-anon": "Los usuarios anónimos no pueden editar páginas.",
        "apierror-noedit": "No tienes permiso para editar páginas.",
+       "apierror-noimageredirect-anon": "Los usuarios anónimos no pueden crear redirecciones de imágenes.",
+       "apierror-noimageredirect": "No tienes permiso para crear redirecciones de imágenes.",
+       "apierror-nosuchlogid": "No hay ninguna entrada de registro con identificador $1.",
+       "apierror-nosuchpageid": "No hay ninguna página con identificador $1.",
+       "apierror-nosuchrcid": "No hay ningún cambio reciente con identificador $1.",
+       "apierror-nosuchrevid": "No hay ninguna revisión con identificador $1.",
+       "apierror-nosuchsection": "No hay ninguna sección $1.",
+       "apierror-nosuchsection-what": "No hay ninguna sección $1 en $2.",
        "apierror-nosuchuserid": "No hay ningún usuario con ID $1.",
+       "apierror-notarget": "No has especificado un destino válido para esta acción.",
+       "apierror-opensearch-json-warnings": "No se pueden representar los avisos en formato JSON de OpenSearch.",
+       "apierror-pagecannotexist": "En este espacio de nombres no se permiten páginas reales.",
        "apierror-pagelang-disabled": "En este wiki no se puede cambiar el idioma de una página.",
        "apierror-paramempty": "El parámetro <var>$1</var> no puede estar vacío.",
        "apierror-permissiondenied": "No tienes permiso para $1.",
        "apierror-permissiondenied-generic": "Permiso denegado.",
        "apierror-permissiondenied-unblock": "No tienes permiso para desbloquear usuarios.",
+       "apierror-promised-nonwrite-api": "La cabecera HTTP <code>Promise-Non-Write-API-Action</code> no se puede enviar a módulos de la API en modo escritura.",
        "apierror-protect-invalidaction": "Tipo de protección «$1» no válido.",
        "apierror-protect-invalidlevel": "Nivel de protección «$1» no válido.",
        "apierror-readapidenied": "Necesitas permiso de lectura para utilizar este módulo.",
        "apierror-readonly": "El wiki está actualmente en modo de solo lectura.",
+       "apierror-reauthenticate": "No te has autentificado recientemente en esta sesión. Por favor, vuelve a autentificarte.",
+       "apierror-revdel-paramneeded": "Se requiere al menos un valor para <var>hide</var> y/o <var>show</var>.",
        "apierror-revwrongpage": "r$1 no es una revisión de $2.",
+       "apierror-sectionsnotsupported": "Las secciones no son compatibles con el modelo de contenido $1.",
+       "apierror-sectionsnotsupported-what": "Las secciones no son compatibles con $1.",
        "apierror-show": "Parámetro incorrecto: no se pueden proporcionar valores mutuamente excluyentes.",
+       "apierror-spamdetected": "Tu edición fue rechazada por contener un fragmento de spam: <code>$1</code>.",
        "apierror-specialpage-cantexecute": "No tienes permiso para ver los resultados de esta página especial.",
        "apierror-stashwrongowner": "Propietario incorrecto: $1",
        "apierror-systemblocked": "Has sido bloqueado automáticamente por el software MediaWiki.",
+       "apierror-templateexpansion-notwikitext": "La expansión de plantillas solo es compatible con el contenido en wikitexto. $1 usa el modelo de contenido $2.",
        "apierror-unknownaction": "La acción especificada, <kbd>$1</kbd>, no está reconocida.",
        "apierror-unknownerror-nocode": "Error desconocido.",
        "apierror-unknownerror": "Error desconocido: «$1»",
        "apierror-unknownformat": "Formato no reconocido «$1».",
        "apierror-unrecognizedparams": "{{PLURAL:$2|Parámetro no reconocido|Parámetros no reconocidos}}: $1.",
        "apierror-unrecognizedvalue": "Valor no reconocido para el parámetro <var>$1</var>: $2.",
+       "apierror-urlparamnormal": "No se pudieron normalizar los parámetros de imagen de $1.",
        "apierror-writeapidenied": "No tienes permiso para editar este wiki a través de la API.",
+       "apiwarn-alldeletedrevisions-performance": "Para conseguir un mejor rendimiento a la hora de generar títulos, establece <kbd>$1dir=newer</kbd>.",
+       "apiwarn-badurlparam": "No se pudo analizar <var>$1urlparam</var> para $2. Se utilizarán solamente la anchura y altura.",
+       "apiwarn-badutf8": "El valor pasado para <var>$1</var> contiene datos no válidos o no normalizados. Los datos textuales deberían estar en Unicode válido, normalizado en NFC y sin caracteres de control C0 excepto HT (\\t), LF (\\n) y CR (\\r).",
+       "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> ha quedado obsoleto. En su lugar, utiliza <kbd>prop=deletedrevisions</kbd> o <kbd>list=alldeletedrevisions</kbd>.",
        "apiwarn-deprecation-httpsexpected": "Se ha utilizado HTTP cuando se esperaba HTTPS.",
+       "apiwarn-deprecation-parameter": "El parámetro <var>$1</var> ha quedado obsoleto.",
+       "apiwarn-deprecation-purge-get": "El uso de <kbd>action=purge</kbd> mediante GET está obsoleto. Usa POST en su lugar.",
+       "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> ha quedado obsoleto. En su lugar, utiliza <kbd>$2</kbd>.",
        "apiwarn-invalidcategory": "\"$1\" no es una categoría.",
        "apiwarn-invalidtitle": "«$1» no es un título válido.",
        "apiwarn-invalidxmlstylesheetext": "Las hojas de estilo deben tener la extensión <code>.xsl</code>.",
        "apiwarn-invalidxmlstylesheet": "La hoja de estilos especificada no es válida o no existe.",
        "apiwarn-invalidxmlstylesheetns": "La hoja de estilos debería estar en el espacio de nombres {{ns:MediaWiki}}.",
        "apiwarn-notfile": "\"$1\" no es un archivo.",
+       "apiwarn-parse-nocontentmodel": "No se proporcionó <var>title</var> ni <var>contentmodel</var>. Se asume $1.",
+       "apiwarn-tokennotallowed": "La acción «$1» no está permitida para el usuario actual.",
+       "apiwarn-truncatedresult": "Se ha truncado este resultado porque de otra manera sobrepasaría el límite de $1 bytes.",
        "apiwarn-unclearnowtimestamp": "El paso de «$2» para el parámetro <var>$1</var> de la marca de tiempo ha quedado obsoleto. Si por alguna razón necesitas especificar de forma explícita la hora actual sin calcularla desde el lado del cliente, utiliza <kbd>now</kbd> («ahora»).",
        "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor no reconocido|Valores no reconocidos}} para el parámetro <var>$1</var>: $2.",
        "apiwarn-validationfailed-badchars": "caracteres no válidos en la clave (solamente se admiten los caracteres <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> y <code>-</code>).",
index e3a70f5..52a526d 100644 (file)
        "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-invert": "Tous les espaces de noms sauf celui 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.",
index 79c3e63..0935c59 100644 (file)
        "apihelp-query+watchlist-paramvalue-type-log": "Žurnalo įrašai.",
        "apihelp-resetpassword-param-user": "Iš naujo nustatomas vartotojas.",
        "apihelp-resetpassword-param-email": "Iš naujo nustatomo vartotojo el. pašto adresas.",
+       "apihelp-setpagelanguage-description": "Keisti puslapio kalbą.",
+       "apihelp-setpagelanguage-param-reason": "Keitimo priežastis.",
        "apihelp-stashedit-param-title": "Puslapio pavadinimas buvo redaguotas.",
        "apihelp-stashedit-param-sectiontitle": "Naujo skyriaus pavadinimas.",
        "apihelp-stashedit-param-text": "Puslapio turinys.",
        "apierror-invalidparammix": "{{PLURAL:$2|parametrai}} $1 negali būti naudojami kartu.",
        "apierror-invalidtitle": "Blogas pavadinimas „$1“.",
        "apierror-invaliduser": "Negalimas vartotojo vardas „$1“.",
+       "apierror-invaliduserid": "Vartotojo ID <var>$1</var> nėra galimas.",
        "apierror-missingtitle": "Puslapis, kurį nurodėte, neegzistuoja.",
        "apierror-missingtitle-byname": "Puslapis $1 neegzistuoja",
        "apierror-multpages": "<var>$1</var> gali būti naudojamas tik su vienu puslapiu.",
        "apierror-nosuchsection": "Nėra skyriaus $1.",
        "apierror-nosuchsection-what": "$2 nėra sekcijos $1.",
        "apierror-nosuchuserid": "Nėra vartotojo su ID $1.",
+       "apierror-pagelang-disabled": "Puslapio kalbos keitimas nėra leidžiamas šioje viki.",
        "apierror-paramempty": "Parametras <var>$1</var> negali būti tusčiau.",
        "apierror-permissiondenied": "Neturite leidimo $1.",
        "apierror-permissiondenied-generic": "Teisė nesuteikta.",
index 750a233..fc3fe7b 100644 (file)
@@ -28,6 +28,7 @@
        "apihelp-main-param-requestid": "Elke waarde die hier gegeven wordt, wordt aan het antwoord toegevoegd. Dit kan gebruikt worden om verzoeken te onderscheiden.",
        "apihelp-main-param-servedby": "Voeg de hostnaam van de server die de aanvraag heeft afgehandeld toe aan het antwoord.",
        "apihelp-main-param-curtimestamp": "Huidige tijd aan het antwoord toevoegen.",
+       "apihelp-main-param-responselanginfo": "Toon de talen gebruikt voor <var>uselang</var> en <var>errorlang</var> in het resultaat.",
        "apihelp-block-description": "Gebruiker blokkeren.",
        "apihelp-block-param-user": "Gebruikersnaam, IP-adres of IP-range om te blokkeren. Kan niet samen worden gebruikt me <var>$1userid</var>",
        "apihelp-block-param-userid": "Gebruikers-ID om te blokkeren. Kan niet worden gebruikt in combinatie met <var>$1user</var>.",
        "apihelp-block-param-hidename": "Verberg de gebruikersnaam uit het blokkeerlogboek. (Vereist het <code>hideuser</code> recht).",
        "apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.",
        "apihelp-block-param-watchuser": "De gebruikerspagina en overlegpagina van de gebruiker of het IP-adres volgen.",
+       "apihelp-block-param-tags": "Wijzigingslabels om toe te passen op de regel in het blokkeerlogboek.",
        "apihelp-block-example-ip-simple": "Het IP-adres <kbd>192.0.2.5</kbd> voor drie dagen blokkeren met <kbd>First strike</kbd> als opgegeven reden.",
+       "apihelp-block-example-user-complex": "Blokkeer gebruiker<kbd>Vandal</kbd> voor altijd met reden <kbd>Vandalism</kbd> en voorkom het aanmaken van nieuwe accounts en het versturen van email",
+       "apihelp-changeauthenticationdata-example-password": "Poging tot het wachtwoord van de huidige gebruiker te veranderen naar <kbd>ExamplePassword</kbd>.",
+       "apihelp-checktoken-description": "Controleer de geldigheid van een token van <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
        "apihelp-checktoken-param-type": "Tokentype wordt getest.",
+       "apihelp-checktoken-param-token": "Token om te controleren.",
+       "apihelp-checktoken-param-maxtokenage": "Maximum levensduur van de token, in seconden.",
+       "apihelp-checktoken-example-simple": "Test de geldigheid van een <kbd>csrf</kbd> token.",
+       "apihelp-clearhasmsg-description": "Wist de <code>hasmsg</code> vlag voor de huidige gebruiker.",
+       "apihelp-clearhasmsg-example-1": "Wis de <code>hasmsg</code> vlag voor de huidige gebruiker.",
+       "apihelp-clientlogin-description": "Log in op de wiki met behulp van de interactieve flow.",
+       "apihelp-clientlogin-example-login": "Start het inlogproces op de wiki als gebruiker <kbd>Example</kbd> met wachtwoord <kbd>ExamplePassword</kbd>.",
        "apihelp-compare-param-fromtitle": "Eerste paginanaam om te vergelijken.",
        "apihelp-compare-param-fromid": "Eerste pagina-ID om te vergelijken.",
        "apihelp-compare-param-fromrev": "Eerste versie om te vergelijken.",
        "apihelp-compare-param-torev": "Tweede versie om te vergelijken.",
        "apihelp-createaccount-description": "Nieuwe gebruikersaccount aanmaken.",
        "apihelp-createaccount-param-name": "Gebruikersnaam.",
+       "apihelp-createaccount-param-password": "Wachtwoord (genegeerd als <var>$1mailpassword</var> is ingesteld).",
+       "apihelp-createaccount-param-domain": "Domein voor externe authentificatie (optioneel).",
        "apihelp-createaccount-param-email": "E-mailadres van de gebruiker (optioneel).",
        "apihelp-createaccount-param-realname": "Echte naam van de gebruiker (optioneel).",
+       "apihelp-createaccount-param-reason": "Optionele reden voor het aanmaken van het account voor in het logboek.",
        "apihelp-createaccount-param-language": "Taalcode om als standaard in te stellen voor de gebruiker (optioneel, standaard de inhoudstaal).",
        "apihelp-createaccount-example-pass": "Maak gebruiker <kbd>testuser</kbd> aan met wachtwoord <kbd>test123</kbd>.",
        "apihelp-createaccount-example-mail": "Maak gebruiker <kbd>testmailuser</kbd> aan en e-mail een willekeurig gegenereerd wachtwoord.",
        "apihelp-edit-param-nocreate": "Een foutmelding geven als de pagina niet bestaat.",
        "apihelp-edit-param-watch": "Voeg de pagina toe aan de volglijst van de huidige gebruiker.",
        "apihelp-edit-param-unwatch": "Verwijder de pagina van de volglijst van de huidige gebruiker.",
+       "apihelp-edit-param-md5": "De MD5-hash van de $1text parameter, of de $1prependtext en $1appendtext parameters samengevoegd. Indien ingesteld, wordt de bewerking niet gemaakt, tenzij de hash juist is.",
+       "apihelp-edit-param-prependtext": "Voeg deze tekst toe aan het begin van de pagina. Overschrijft $1text.",
+       "apihelp-edit-param-appendtext": "Voeg deze tekst toe aan het begin van de pagina. Overschrijft $1text.\n\nGebruik $1section=new in plaats van deze parameter om een nieuw kopje toe te voegen.",
+       "apihelp-edit-param-undo": "Maak deze versie ongedaan. Overschrijft $1text, $1prependtext en $1appendtext.",
        "apihelp-edit-param-redirect": "Doorverwijzingen automatisch oplossen.",
+       "apihelp-edit-param-contentmodel": "Inhoudsmodel van de nieuwe inhoud.",
+       "apihelp-edit-param-token": "Het token moet altijd worden verzonden als de laatste parameter, of tenminste na de $1text parameter.",
        "apihelp-edit-example-edit": "Een pagina bewerken.",
+       "apihelp-edit-example-prepend": "Voeg <kbd>__NOTOC__</kbd> toe aan het begin van een pagina.",
        "apihelp-edit-example-undo": "Versies 13579 tot 13585 ongedaan maken met automatische beschrijving.",
        "apihelp-emailuser-description": "Gebruiker e-mailen.",
        "apihelp-emailuser-param-target": "Gebruiker naar wie de e-mail moet worden gestuurd.",
        "apihelp-emailuser-param-subject": "Onderwerpkoptekst.",
        "apihelp-emailuser-param-text": "E-mailtekst.",
        "apihelp-emailuser-param-ccme": "Mij een kopie sturen van deze e-mail.",
+       "apihelp-emailuser-example-email": "Stuur een e-mail naar de gebruiker <kbd>WikiSysop</kbd> met de tekst <kbd>Inhoud</kbd>.",
        "apihelp-expandtemplates-param-title": "Paginanaam.",
        "apihelp-expandtemplates-param-text": "Wikitekst om om te zetten.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "De uitgevulde wikitekst.",
        "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
        "apihelp-feedcontributions-param-deletedonly": "Alleen verwijderde bijdragen weergeven.",
        "apihelp-feedcontributions-param-hideminor": "Verberg kleine bewerkingen.",
+       "apihelp-feedrecentchanges-param-feedformat": "De indeling van de feed.",
+       "apihelp-feedrecentchanges-param-namespace": "Naamruimte om de resultaten tot te beperken.",
        "apihelp-feedrecentchanges-param-invert": "Alle naamruimten behalve de geselecteerde.",
        "apihelp-feedrecentchanges-param-limit": "Het maximaal aantal weer te geven resultaten.",
        "apihelp-feedrecentchanges-param-hideminor": "Kleine wijzigingen verbergen.",
        "apihelp-feedrecentchanges-param-tagfilter": "Filteren op label.",
        "apihelp-feedrecentchanges-example-simple": "Recente wijzigingen weergeven.",
        "apihelp-feedrecentchanges-example-30days": "Recente wijzigingen van de afgelopen 30 dagen weergeven.",
+       "apihelp-feedwatchlist-param-feedformat": "De indeling van de feed.",
        "apihelp-filerevert-description": "Een oude versie van een bestand terugplaatsen.",
+       "apihelp-filerevert-param-filename": "Doel bestandsnaam, zonder het Bestand: voorvoegsel.",
+       "apihelp-filerevert-param-comment": "Opmerking voor het uploaden.",
+       "apihelp-help-param-helpformat": "Indeling van de help uitvoer.",
+       "apihelp-help-example-main": "Hulp voor de hoofdmodule.",
+       "apihelp-help-example-submodules": "Hulp voor <kbd>action=query</kbd> en alle submodules.",
        "apihelp-help-example-recursive": "Alle hulp op een pagina.",
        "apihelp-help-example-help": "Help voor de help-module zelf.",
        "apihelp-imagerotate-description": "Een of meerdere afbeeldingen draaien.",
+       "apihelp-imagerotate-example-simple": "Roteer <kbd>File:Example.png</kbd> met <kbd>90</kbd> graden.",
+       "apihelp-imagerotate-example-generator": "Roteer alle afbeeldingen in <kbd>Category:Flip</kbd> met <kbd>180</kbd> graden.",
+       "apihelp-import-description": "Importeer een pagina van een andere wiki, of van een XML bestand.\n\nMerk op dat de HTTP POST moet worden uitgevoerd als bestandsupload (bijv. door middel van multipart/form-data) wanneer een bestand wordt verstuurd voor de <var>xml</var> parameter.",
+       "apihelp-import-param-summary": "Importsamenvatting voor het logboek.",
        "apihelp-import-param-xml": "Geüpload XML-bestand.",
+       "apihelp-import-param-interwikisource": "Voor interwiki imports: wiki om van te importeren.",
        "apihelp-import-param-namespace": "Importeren in deze naamruimte. Can niet samen gebruikt worden met <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "Importeren als subpagina van deze pagina. Kan niet samen met <var>$1namespace</var> gebruikt worden.",
        "apihelp-login-param-name": "Gebruikersnaam.",
        "apihelp-patrol-example-revid": "Een versie markeren als gecontroleerd.",
        "apihelp-protect-param-reason": "Reden voor opheffen van de beveiliging.",
        "apihelp-protect-example-protect": "Een pagina beveiligen",
+       "apihelp-query+allcategories-param-dir": "Richting om in te sorteren.",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Voegt het aantal pagina's in de categorie toe.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Markeert categorieën die verborgen zijn met <code>_&#95;HIDDENCAT_&#95;</code>",
        "apihelp-query+alldeletedrevisions-param-tag": "Alleen versies weergeven met dit label.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Toon geen versies door deze gebruiker.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Toon alleen pagina's in deze naamruimte.",
+       "apihelp-query+alllinks-param-namespace": "De naamruimte om door te lopen.",
+       "apihelp-query+alllinks-param-limit": "Hoeveel items er in totaal moeten worden getoond.",
        "apihelp-query+allmessages-param-enableparser": "Stel in om de parser in te schakelen, zorgt voor het voorverwerken van de wikitekst van een bericht (vervangen van magische woorden, de afhandeling van sjablonen, enzovoort).",
+       "apihelp-query+allredirects-description": "Toon alle doorverwijzingen naar een naamruimte.",
        "apihelp-query+mystashedfiles-paramvalue-prop-type": "Vraag het MIME- en mediatype van het bestand op.",
+       "apihelp-query+mystashedfiles-param-limit": "Hoeveel bestanden te tonen.",
+       "apihelp-query+allusers-param-excludegroup": "Sluit gebruikers in de gegeven groepen uit.",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "Voegt informatie over een actuale blokkade van de gebruiker toe.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "Toont de groepen waar de gebruiker in zit. Dit gebruikt meer serverbronnen en kan minder resultaten teruggeven dat de opgegeven limiet.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Toon alle groepen de gebruiker automatisch in zit.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "Toon de rechten die de gebruiker heeft.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "Voegt het aantal bewerkingen van de gebruiker toe.",
+       "apihelp-query+allusers-paramvalue-prop-registration": "Voegt de registratiedatum van de gebruiker toe, indien beschikbaar (kan leeg zijn).",
+       "apihelp-query+allusers-param-witheditsonly": "Toon alleen gebruikers die bewerkingen hebben gemaakt.",
+       "apihelp-query+allusers-param-activeusers": "Toon alleen gebruikers die actief zijn geweest in de laatste $1 {{PLURAL:$1|dag|dagen}}.",
+       "apihelp-query+allusers-example-Y": "Toon gebruikers vanaf <kbd>Y</kbd>.",
+       "apihelp-query+authmanagerinfo-description": "Haal informatie op over de huidige authentificatie status.",
+       "apihelp-query+backlinks-description": "Vind alle pagina's die verwijzen naar de gegeven pagina.",
+       "apihelp-query+backlinks-param-title": "Titel om op te zoeken. Kan niet worden gebruikt in combinatie met<var>$1pageid</var>.",
+       "apihelp-query+backlinks-param-pageid": "Pagina ID om op te zoeken. Kan niet worden gebruikt in combinatie met <var>$1title</var>.",
+       "apihelp-query+backlinks-param-namespace": "De naamruimte om door te lopen.",
+       "apihelp-query+backlinks-example-simple": "Toon verwijzingen naar de <kbd>Hoofdpagina</kbd>.",
+       "apihelp-query+blocks-description": "Toon alle geblokkeerde gebruikers en IP-adressen.",
+       "apihelp-query+blocks-param-limit": "Het maximum aantal blokkades te tonen.",
+       "apihelp-query+blocks-paramvalue-prop-id": "Voegt de blokkade ID toe.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Voegt de gebruikernaam van de geblokeerde gebruiker toe.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Voegt de gebruiker-ID van de geblokkeerde gebruiker toe.",
        "apihelp-query+blocks-paramvalue-prop-flags": "Labelt de blokkade met (automatische blokkade, alleen anoniem, enzovoort).",
+       "apihelp-query+blocks-example-simple": "Toon blokkades.",
+       "apihelp-query+blocks-example-users": "Toon blokkades van gebruikers <kbd>Alice</kbd> en <kbd>Bob</kbd>.",
+       "apihelp-query+categories-description": "Toon alle categorieën waar de pagina in zit.",
+       "apihelp-query+categories-paramvalue-prop-hidden": "Markeert categorieën die verborgen zijn met <code>_&#95;HIDDENCAT_&#95;</code>",
+       "apihelp-query+categories-param-show": "Welke soort categorieën te tonen.",
+       "apihelp-query+categories-param-limit": "Hoeveel categorieën te tonen.",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Voegt de pagina-ID toe.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Voegt de titel en de naamruimte-ID van de pagina toe.",
+       "apihelp-query+categorymembers-param-dir": "Richting om in te sorteren.",
        "apihelp-query+deletedrevisions-param-tag": "Alleen versies weergeven met dit label.",
        "apihelp-query+deletedrevs-param-tag": "Alleen versies weergeven met dit label.",
+       "apihelp-query+embeddedin-param-namespace": "De naamruimte om door te lopen.",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "Pagina ID van elke pagina.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Titel van elke pagina.",
+       "apihelp-query+imageusage-param-namespace": "De naamruimte om door te lopen.",
+       "apihelp-query+imageusage-example-simple": "Toon pagina's die gebruik maken van [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageusage-example-generator": "Toon informatie over pagina's die gebruik maken van [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+iwbacklinks-param-prefix": "Voorvoegsel voor de interwiki.",
        "apihelp-query+logevents-param-type": "Logboekregels alleen voor dit type filteren.",
        "apihelp-query+logevents-param-tag": "Alleen logboekregels weergeven met dit label.",
        "apihelp-query+logevents-example-simple": "Recente logboekregels weergeven.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "Voegt het beveiligingsniveau toe.",
+       "apihelp-query+protectedtitles-example-simple": "Toon beveiligde titels.",
+       "apihelp-query+querypage-param-limit": "Aantal resultaten om te tonen.",
+       "apihelp-query+querypage-example-ancientpages": "Toon resultaten van [[Special:Ancientpages]].",
+       "apihelp-query+random-param-namespace": "Toon alleen pagina's in deze naamruimten.",
+       "apihelp-query+random-param-limit": "Beperk het aantal aan willekeurige pagina's dat wordt getoond.",
+       "apihelp-query+random-example-simple": "Toon twee willekeurige pagina's uit de hoofdnaamruimte.",
+       "apihelp-query+random-example-generator": "Toon pagina informatie over twee willekeurige pagina's uit de hoofdnaamruimte.",
+       "apihelp-query+recentchanges-param-user": "Toon alleen wijzigingen door deze gebruiker.",
+       "apihelp-query+recentchanges-param-excludeuser": "Toon geen wijzigingen door deze gebruiker",
        "apihelp-query+recentchanges-param-tag": "Alleen versies weergeven met dit label.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Voegt de bewerkingssamenvatting voor de bewerking toe.",
        "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Voegt logboekgegevens toe aan logboekregels (logboek-ID, logboektype, enzovoort).",
+       "apihelp-query+recentchanges-example-simple": "Toon recente wijzigingen.",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "Pagina ID van elke doorverwijzing.",
+       "apihelp-query+redirects-paramvalue-prop-title": "Titel van elke doorverwijzing.",
+       "apihelp-query+redirects-param-namespace": "Toon alleen pagina's in deze naamruimten.",
+       "apihelp-query+redirects-param-limit": "Hoeveel doorverwijzingen te tonen.",
+       "apihelp-query+redirects-example-simple": "Toon een lijst van doorverwijzingen naar [[Main Page]].",
+       "apihelp-query+redirects-example-generator": "Toon informatie over alle doorverwijzingen naar [[Main Page]].",
        "apihelp-query+revisions-param-tag": "Alleen versies weergeven met dit label.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Versietekst.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Labels voor de versie.",
        "apihelp-query+revisions+base-param-difftotextpst": "\"pre-save\"-transformatie uitvoeren op de tekst alvorens de verschillen te bepalen. Alleen geldig als dit wordt gebruikt met <var>$1difftotext</var>.",
+       "apihelp-query+search-description": "Voer een volledige tekst zoekopdracht uit.",
+       "apihelp-query+search-param-limit": "Hoeveel pagina's te tonen.",
+       "apihelp-query+search-example-simple": "Zoeken naar <kbd>betekenis</kbd>.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Toon geregistreerde naamruimte aliassen.",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Toon speciale pagina aliassen.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Toon magische woorden en hun aliassen.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "Toon site statistieken.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "Toont bibliotheken die op de wiki zijn geïnstalleerd.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "Toont uitbreidingen die op de wiki zijn geïnstalleerd.",
        "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Geeft een lijst met bestandsextensies (bestandstypen) die geüpload mogen worden.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Toont wiki rechten (licentie) informatie als deze beschikbaar is.",
        "apihelp-query+tags-description": "Wijzigingslabels weergeven.",
        "apihelp-query+tags-paramvalue-prop-name": "Voegt de naam van het label toe.",
        "apihelp-query+tags-paramvalue-prop-displayname": "Voegt het systeembericht toe voor het label.",
        "apihelp-query+tags-paramvalue-prop-description": "Voegt beschrijving van het label toe.",
        "apihelp-query+tags-paramvalue-prop-defined": "Geeft aan of het label is gedefinieerd.",
        "apihelp-query+tags-paramvalue-prop-active": "Of het label nog steeds wordt toegepast.",
+       "apihelp-query+tags-example-simple": "Toon beschikbare labels.",
+       "apihelp-query+templates-description": "Toon alle pagina's ingesloten op de gegeven pagina's.",
+       "apihelp-query+templates-param-limit": "Het aantal sjablonen om te tonen.",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "Pagina ID van elke pagina.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Titel van elke pagina.",
+       "apihelp-query+usercontribs-description": "Toon alle bewerkingen door een gebruiker.",
+       "apihelp-query+usercontribs-param-limit": "Het maximum aantal bewerkingen om te tonen.",
+       "apihelp-query+usercontribs-param-namespace": "Toon alleen bijdragen in deze naamruimten.",
        "apihelp-query+usercontribs-param-tag": "Alleen versies weergeven met dit label.",
+       "apihelp-query+usercontribs-example-ipprefix": "Toon bijdragen van alle IP-adressen met het voorvoegsel <kbd>192.0.2.</kbd>.",
+       "apihelp-query+userinfo-description": "Toon informatie over de huidige gebruiker.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Toon de gebruikers echte naam.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Voegt logboekgegevens toe waar van toepassing.",
        "apihelp-query+watchlist-param-type": "Welke typen wijzigingen weer te geven:",
        "apihelp-query+watchlist-paramvalue-type-edit": "Gewone paginabewerkingen.",
index 4d56466..1dfbcba 100644 (file)
        "apierror-missingtitle-byname": "Strona $1 nie istnieje.",
        "apierror-moduledisabled": "Moduł <kbd>$1</kbd> został wyłączony.",
        "apierror-mustbeloggedin-generic": "Musisz być zalogowany.",
+       "apierror-mustbeloggedin": "Musisz się zalogować, aby mieć możliwość $1.",
        "apierror-noedit-anon": "Niezarejestrowani użytkownicy nie mogą edytować stron.",
        "apierror-noedit": "Nie masz uprawnień do edytowania stron.",
        "apierror-permissiondenied": "Nie masz uprawnień do $1.",
index ffcb0c9..b88e72f 100644 (file)
        "apierror-show": "不正确的参数——不可提供互斥值。",
        "apierror-siteinfo-includealldenied": "除非<var>$wgShowHostNames</var>为真,否则不能查看所有服务器的信息。",
        "apierror-sizediffdisabled": "大小差异在Miser模式中被禁用。",
-       "apierror-spamdetected": "您的编辑被拒绝,因为它包含破坏性碎片:<code>$1</code>。",
+       "apierror-spamdetected": "您的编辑被拒绝,因为它包含垃圾部分:<code>$1</code>。",
        "apierror-specialpage-cantexecute": "您没有权限查看此特殊页面的结果。",
        "apierror-stashedfilenotfound": "无法在暂存处找到文件:$1。",
+       "apierror-stashedit-missingtext": "提供的哈希中找不到暂存文本。",
        "apierror-stashfailed-complete": "大块上传已经完成,检查状态以获取详情。",
        "apierror-stashfailed-nosession": "没有带此关键词的大块上传会话。",
        "apierror-stashfilestorage": "不能在暂存处存储上传:$1",
index 352a94c..9bf0840 100644 (file)
@@ -89,10 +89,12 @@ class MessageCache {
         */
        protected $mInParser = false;
 
-       /** @var BagOStuff */
-       protected $mMemc;
        /** @var WANObjectCache */
        protected $wanCache;
+       /** @var BagOStuff */
+       protected $clusterCache;
+       /** @var BagOStuff */
+       protected $srvCache;
 
        /**
         * Singleton instance
@@ -109,9 +111,13 @@ class MessageCache {
         */
        public static function singleton() {
                if ( self::$instance === null ) {
-                       global $wgUseDatabaseMessages, $wgMsgCacheExpiry;
+                       global $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgUseLocalMessageCache;
                        self::$instance = new self(
+                               MediaWikiServices::getInstance()->getMainWANObjectCache(),
                                wfGetMessageCacheStorage(),
+                               $wgUseLocalMessageCache
+                                       ? MediaWikiServices::getInstance()->getLocalServerObjectCache()
+                                       : new EmptyBagOStuff(),
                                $wgUseDatabaseMessages,
                                $wgMsgCacheExpiry
                        );
@@ -149,24 +155,25 @@ class MessageCache {
        }
 
        /**
-        * @param BagOStuff $memCached A cache instance. If none, fall back to CACHE_NONE.
-        * @param bool $useDB
+        * @param WANObjectCache $wanCache WAN cache instance
+        * @param BagOStuff $clusterCache Cluster cache instance
+        * @param BagOStuff $srvCache Server cache instance
+        * @param bool $useDB Whether to look for message overrides (e.g. MediaWiki: pages)
         * @param int $expiry Lifetime for cache. @see $mExpiry.
         */
-       function __construct( BagOStuff $memCached, $useDB, $expiry ) {
-               global $wgUseLocalMessageCache;
+       public function __construct(
+               WANObjectCache $wanCache,
+               BagOStuff $clusterCache,
+               BagOStuff $srvCache,
+               $useDB,
+               $expiry
+       ) {
+               $this->wanCache = $wanCache;
+               $this->clusterCache = $clusterCache;
+               $this->srvCache = $srvCache;
 
-               $this->mMemc = $memCached;
                $this->mDisable = !$useDB;
                $this->mExpiry = $expiry;
-
-               if ( $wgUseLocalMessageCache ) {
-                       $this->localCache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
-               } else {
-                       $this->localCache = new EmptyBagOStuff();
-               }
-
-               $this->wanCache = ObjectCache::getMainWANInstance();
        }
 
        /**
@@ -203,7 +210,7 @@ class MessageCache {
        protected function getLocalCache( $code ) {
                $cacheKey = wfMemcKey( __CLASS__, $code );
 
-               return $this->localCache->get( $cacheKey );
+               return $this->srvCache->get( $cacheKey );
        }
 
        /**
@@ -214,7 +221,7 @@ class MessageCache {
         */
        protected function saveToLocalCache( $code, $cache ) {
                $cacheKey = wfMemcKey( __CLASS__, $code );
-               $this->localCache->set( $cacheKey, $cache );
+               $this->srvCache->set( $cacheKey, $cache );
        }
 
        /**
@@ -300,7 +307,7 @@ class MessageCache {
                                        # below, and use the local stale value if it was not acquired.
                                        $where[] = 'global cache is presumed expired';
                                } else {
-                                       $cache = $this->mMemc->get( $cacheKey );
+                                       $cache = $this->clusterCache->get( $cacheKey );
                                        if ( !$cache ) {
                                                $where[] = 'global cache is empty';
                                        } elseif ( $this->isCacheExpired( $cache ) ) {
@@ -381,12 +388,10 @@ class MessageCache {
         * @return bool|string True on success or one of ("cantacquire", "disabled")
         */
        protected function loadFromDBWithLock( $code, array &$where, $mode = null ) {
-               global $wgUseLocalMessageCache;
-
                # If cache updates on all levels fail, give up on message overrides.
                # This is to avoid easy site outages; see $saveSuccess comments below.
                $statusKey = wfMemcKey( 'messages', $code, 'status' );
-               $status = $this->mMemc->get( $statusKey );
+               $status = $this->clusterCache->get( $statusKey );
                if ( $status === 'error' ) {
                        $where[] = "could not load; method is still globally disabled";
                        return 'disabled';
@@ -424,8 +429,8 @@ class MessageCache {
                         * incurring a loadFromDB() overhead on every request, and thus saves the
                         * wiki from complete downtime under moderate traffic conditions.
                         */
-                       if ( !$wgUseLocalMessageCache ) {
-                               $this->mMemc->set( $statusKey, 'error', 60 * 5 );
+                       if ( $this->srvCache instanceof EmptyBagOStuff ) {
+                               $this->clusterCache->set( $statusKey, 'error', 60 * 5 );
                                $where[] = 'could not save cache, disabled globally for 5 minutes';
                        } else {
                                $where[] = "could not save global cache";
@@ -444,7 +449,7 @@ class MessageCache {
         * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache
         * @return array Loaded messages for storing in caches
         */
-       function loadFromDB( $code, $mode = null ) {
+       protected function loadFromDB( $code, $mode = null ) {
                global $wgMaxMsgCacheEntrySize, $wgLanguageCode, $wgAdaptiveMessageCache;
 
                $dbr = wfGetDB( ( $mode == self::FOR_UPDATE ) ? DB_MASTER : DB_REPLICA );
@@ -518,7 +523,7 @@ class MessageCache {
                                wfDebugLog(
                                        'MessageCache',
                                        __METHOD__
-                                               . ": failed to load message page text for {$row->page_title} ($code)"
+                                       . ": failed to load message page text for {$row->page_title} ($code)"
                                );
                        } else {
                                $entry = ' ' . $text;
@@ -541,11 +546,11 @@ class MessageCache {
        /**
         * Updates cache as necessary when message page is changed
         *
-        * @param string|bool $title Name of the page changed (false if deleted)
+        * @param string $title Message cache key with initial uppercase letter.
         * @param string|bool $text New contents of the page (false if deleted)
         */
        public function replace( $title, $text ) {
-               global $wgMaxMsgCacheEntrySize, $wgContLang, $wgLanguageCode;
+               global $wgLanguageCode;
 
                if ( $this->mDisable ) {
                        return;
@@ -557,63 +562,75 @@ class MessageCache {
                        return;
                }
 
-               // Note that if the cache is volatile, load() may trigger a DB fetch.
-               // In that case we reenter/reuse the existing cache key lock to avoid
-               // a self-deadlock. This is safe as no reads happen *directly* in this
-               // method between getReentrantScopedLock() and load() below. There is
-               // no risk of data "changing under our feet" for replace().
-               $scopedLock = $this->getReentrantScopedLock( wfMemcKey( 'messages', $code ) );
-               // Load the messages from the master DB to avoid race conditions
-               $this->load( $code, self::FOR_UPDATE );
-
-               // Load the new value into the process cache...
+               // (a) Update the process cache with the new message text
                if ( $text === false ) {
+                       // Page deleted
                        $this->mCache[$code][$title] = '!NONEXISTENT';
-               } elseif ( strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
-                       $this->mCache[$code][$title] = '!TOO BIG';
-                       // Pre-fill the individual key cache with the known latest message text
-                       $key = $this->wanCache->makeKey( 'messages-big', $this->mCache[$code]['HASH'], $title );
-                       $this->wanCache->set( $key, " $text", $this->mExpiry );
                } else {
+                       // Ignore $wgMaxMsgCacheEntrySize so the process cache is up to date
                        $this->mCache[$code][$title] = ' ' . $text;
                }
-               // Mark this cache as definitely being "latest" (non-volatile) so
-               // load() calls do not try to refresh the cache with replica DB data
-               $this->mCache[$code]['LATEST'] = time();
 
-               // Update caches if the lock was acquired
-               if ( $scopedLock ) {
-                       $this->saveToCaches( $this->mCache[$code], 'all', $code );
-               } else {
-                       LoggerFactory::getInstance( 'MessageCache' )->error(
-                               __METHOD__ . ': could not acquire lock to update {title} ({code})',
-                               [ 'title' => $title, 'code' => $code ] );
-               }
-
-               ScopedCallback::consume( $scopedLock );
-               // Relay the purge. Touching this check key expires cache contents
-               // and local cache (APC) validation hash across all datacenters.
-               $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
-
-               // Also delete cached sidebar... just in case it is affected
-               $codes = [ $code ];
-               if ( $code === 'en' ) {
-                       // Delete all sidebars, like for example on action=purge on the
-                       // sidebar messages
-                       $codes = array_keys( Language::fetchLanguageNames() );
-               }
-
-               foreach ( $codes as $code ) {
-                       $sidebarKey = wfMemcKey( 'sidebar', $code );
-                       $this->wanCache->delete( $sidebarKey );
-               }
+               // (b) Update the shared caches in a deferred update with a fresh DB snapshot
+               DeferredUpdates::addCallableUpdate(
+                       function () use ( $title, $msg, $code ) {
+                               global $wgContLang, $wgMaxMsgCacheEntrySize;
+                               // Allow one caller at a time to avoid race conditions
+                               $scopedLock = $this->getReentrantScopedLock( wfMemcKey( 'messages', $code ) );
+                               if ( !$scopedLock ) {
+                                       LoggerFactory::getInstance( 'MessageCache' )->error(
+                                               __METHOD__ . ': could not acquire lock to update {title} ({code})',
+                                               [ 'title' => $title, 'code' => $code ] );
+                                       return;
+                               }
+                               // Load the messages from the master DB to avoid race conditions
+                               $this->loadFromDB( $code, self::FOR_UPDATE );
+                               // Load the process cache values and set the per-title cache keys
+                               $page = WikiPage::factory( Title::makeTitle( NS_MEDIAWIKI, $title ) );
+                               $page->loadPageData( $page::READ_LATEST );
+                               $text = $this->getMessageTextFromContent( $page->getContent() );
+                               // Check if an individual cache key should exist and update cache accordingly
+                               $titleKey = $this->wanCache->makeKey(
+                                       'messages-big', $this->mCache[$code]['HASH'], $title );
+                               if ( is_string( $text ) && strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
+                                       $this->wanCache->set( $titleKey, ' ' . $text, $this->mExpiry );
+                               }
+                               // Mark this cache as definitely being "latest" (non-volatile) so
+                               // load() calls do try to refresh the cache with replica DB data
+                               $this->mCache[$code]['LATEST'] = time();
+                               // Pre-emptively update the local datacenter cache so things like edit filter and
+                               // blacklist changes are reflect immediately, as these often use MediaWiki: pages.
+                               // The datacenter handling replace() calls should be the same one handling edits
+                               // as they require HTTP POST.
+                               $this->saveToCaches( $this->mCache[$code], 'all', $code );
+                               // Release the lock now that the cache is saved
+                               ScopedCallback::consume( $scopedLock );
+
+                               // Relay the purge. Touching this check key expires cache contents
+                               // and local cache (APC) validation hash across all datacenters.
+                               $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
+                               // Also delete cached sidebar... just in case it is affected
+                               // @TODO: shouldn't this be $code === $wgLanguageCode?
+                               if ( $code === 'en' ) {
+                                       // Purge all language sidebars, e.g. on ?action=purge to the sidebar messages
+                                       $codes = array_keys( Language::fetchLanguageNames() );
+                               } else {
+                                       // Purge only the sidebar for this language
+                                       $codes = [ $code ];
+                               }
+                               foreach ( $codes as $code ) {
+                                       $this->wanCache->delete( wfMemcKey( 'sidebar', $code ) );
+                               }
 
-               // Update the message in the message blob store
-               $resourceloader = RequestContext::getMain()->getOutput()->getResourceLoader();
-               $blobStore = $resourceloader->getMessageBlobStore();
-               $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) );
+                               // Purge the message in the message blob store
+                               $resourceloader = RequestContext::getMain()->getOutput()->getResourceLoader();
+                               $blobStore = $resourceloader->getMessageBlobStore();
+                               $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) );
 
-               Hooks::run( 'MessageCacheReplace', [ $title, $text ] );
+                               Hooks::run( 'MessageCacheReplace', [ $title, $text ] );
+                       },
+                       DeferredUpdates::PRESEND
+               );
        }
 
        /**
@@ -648,7 +665,7 @@ class MessageCache {
        protected function saveToCaches( array $cache, $dest, $code = false ) {
                if ( $dest === 'all' ) {
                        $cacheKey = wfMemcKey( 'messages', $code );
-                       $success = $this->mMemc->set( $cacheKey, $cache );
+                       $success = $this->clusterCache->set( $cacheKey, $cache );
                        $this->setValidationHash( $code, $cache );
                } else {
                        $success = true;
@@ -720,7 +737,7 @@ class MessageCache {
         * @return null|ScopedCallback
         */
        protected function getReentrantScopedLock( $key, $timeout = self::WAIT_SEC ) {
-               return $this->mMemc->getScopedLock( $key, $timeout, self::LOCK_TTL, __METHOD__ );
+               return $this->clusterCache->getScopedLock( $key, $timeout, self::LOCK_TTL, __METHOD__ );
        }
 
        /**
@@ -845,7 +862,7 @@ class MessageCache {
 
                $alreadyTried = [];
 
-                // First try the requested language.
+               // First try the requested language.
                $message = $this->getMessageForLang( $lang, $lckey, $useDB, $alreadyTried );
                if ( $message !== false ) {
                        return $message;
@@ -950,6 +967,7 @@ class MessageCache {
         */
        public function getMsgFromNamespace( $title, $code ) {
                $this->load( $code );
+
                if ( isset( $this->mCache[$code][$title] ) ) {
                        $entry = $this->mCache[$code][$title];
                        if ( substr( $entry, 0, 1 ) === ' ' ) {
index c3da746..b0b66ca 100644 (file)
@@ -187,6 +187,7 @@ class HTMLTextField extends HTMLFormField {
                        'name' => $this->mName,
                        'value' => $value,
                        'type' => $type,
+                       'dir' => $this->mDir,
                ] + $attribs );
        }
 
index 9dc8032..9c87cf0 100644 (file)
@@ -1421,6 +1421,7 @@ abstract class Installer {
                $wgAutoloadClasses += $data['autoload'];
 
                $hooksWeWant = isset( $wgHooks['LoadExtensionSchemaUpdates'] ) ?
+                       /** @suppress PhanUndeclaredVariable $wgHooks is set by DefaultSettings */
                        $wgHooks['LoadExtensionSchemaUpdates'] : [];
 
                if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
@@ -1655,8 +1656,13 @@ abstract class Installer {
         */
        protected function createMainpage( DatabaseInstaller $installer ) {
                $status = Status::newGood();
+               $title = Title::newMainPage();
+               if ( $title->exists() ) {
+                       $status->warning( 'config-install-mainpage-exists' );
+                       return $status;
+               }
                try {
-                       $page = WikiPage::factory( Title::newMainPage() );
+                       $page = WikiPage::factory( $title );
                        $content = new WikitextContent(
                                wfMessage( 'mainpagetext' )->inContentLanguage()->text() . "\n\n" .
                                wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text()
index 95d2ba3..db92652 100644 (file)
        "config-install-subscribe-fail": "Unable to subscribe to mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL is not installed and <code>allow_url_fopen</code> is not available.",
        "config-install-mainpage": "Creating main page with default content",
+       "config-install-mainpage-exists": "Main page already exists, skipping",
        "config-install-extension-tables": "Creating tables for enabled extensions",
        "config-install-mainpage-failed": "Could not insert main page: $1",
        "config-install-done": "<strong>Congratulations!</strong>\nYou have installed MediaWiki.\n\nThe installer has generated a <code>LocalSettings.php</code> file.\nIt contains all your configuration.\n\nYou will need to download it and put it in the base of your wiki installation (the same directory as index.php). The download should have started automatically.\n\nIf the download was not offered, or if you cancelled it, you can restart the download by clicking the link below:\n\n$3\n\n<strong>Note:</strong> If you do not do this now, this generated configuration file will not be available to you later if you exit the installation without downloading it.\n\nWhen that has been done, you can <strong>[$2 enter your wiki]</strong>.",
index 24c3e3b..ac05471 100644 (file)
@@ -71,7 +71,7 @@
        "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
        "config-no-fts3": "<strong>Waarschuwing:</strong> SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
        "config-pcre-old": "'''Onherstelbare fout:''' PCRE $1 of een latere versie is vereist.\nUw uitvoerbare versie van PHP is gekoppeld met PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Meer informatie].",
-       "config-pcre-no-utf8": "'''Fataal:''' de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.\nMediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.",
+       "config-pcre-no-utf8": "<strong>Onherstelbare fout:</strong> de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.\nMediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.",
        "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-xcache": "[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd",
@@ -79,7 +79,7 @@
        "config-apcu": "[http://www.php.net/apcu APCu] is geïnstalleerd",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd",
        "config-no-cache-apcu": "<strong>Waarschuwing:</strong> [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] of [http://www.iis.net/download/WinCacheForPhp WinCache] is niet aangetroffen.\nHet cachen van objecten is niet ingeschakeld.",
-       "config-mod-security": "'''Waarschuwing:''' uw webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nLees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.",
+       "config-mod-security": "<strong>Waarschuwing:</strong> Uw webserver heeft de module [http://modsecurity.org/ mod_security]/mod_security2 ingeschakeld. Veel standaard instellingen hiervan zorgen voor problemen in combinatie met MediaWiki en andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nIndien mogelijk, zou deze moeten worden uitgeschakeld. Lees anders de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.",
        "config-diff3-bad": "GNU diff3 niet aangetroffen.",
        "config-git": "Versiecontrolesoftware git is aangetroffen: <code>$1</code>",
        "config-git-bad": "Geen git versiecontrolesoftware aangetroffen.",
index 7b60ed0..8d10b51 100644 (file)
        "config-install-subscribe-fail": "{{doc-important|\"[[m:mail:mediawiki-announce|mediawiki-announce]]\" is the name of a mailing list and should not be translated.}}\nA message displayed if the MediaWiki installer encounters an error making a request to lists.wikimedia.org which hosts the mailing list.\n* $1 - the HTTP error encountered, reproduced as is (English string)",
        "config-install-subscribe-notpossible": "Error shown when automatically subscribing to the MediaWiki announcements mailing list fails.",
        "config-install-mainpage": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+       "config-install-mainpage-exists": "Warning shown when installer attempts to create main page but it already exists.",
        "config-install-extension-tables": "Notice shown to the user during the install about progress.",
        "config-install-mainpage-failed": "Used as error message. Parameters:\n* $1 - detailed error message",
        "config-install-done": "Parameters:\n* $1 is the URL to LocalSettings download\n* $2 is a link to the wiki.\n* $3 is a download link with attached download icon. The config-download-localsettings message will be used as the link text.",
index a3c3d24..ef7694a 100644 (file)
        "config-information": "Impormasyon",
        "config-localsettings-upgrade": "Mayda <code>LocalSettings.php</code> nga paypay nga nabilngan.  Basi ma-upgrade ini nga pag-installar, alayon pagbutáng han value han <code>$wgUpgradeKey</code> ha kahon ha ubós. Mabibilngan mo ini ha <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Mayda <code>LocalSettings.php</code> nga paypay nga nabilngan. Basi ma-upgrade ini nga pag-installar, alayon pagpadalagan lugod han <code>update.php</code>",
-       "config-localsettings-badkey": "An key nga imo ginhatag in diri asya.",
+       "config-localsettings-key": "Upgrade nga yabi:",
+       "config-localsettings-badkey": "Sayop an upgrade nga yabi nga imo ginhátag",
        "config-upgrade-key-missing": "Mayda daan na ng gin-installar nga MediaWiki nga nabilngan.\nBasi ma-upgrade ini nga pag-instalar, alayon pagbutang han nahasunod nga linya ha ubós han imo <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "An yana nga <code>LocalSettings.php</code> in baga diri kompleto.\nAn $1 variable in diri naka-set.\nAlayon igsaliwan an <code>LocalSettings.php</code> para ini nga variable in mai-set, ngan pidlita an \"{{int:Config-continue}}\".",
        "config-localsettings-connection-error": "May-ada pagsayop an nahitabo han pagpapakabit ngada ha database nga gingagamitan hin mga kamumutangan nga dapat unta ginpapatuman han <code>LocalSettings.php</code>. Alayon ayda ini nga mga kamumutangan ngan utrohon nala.\n\n$1",
        "config-session-error": "Pakyas an pagtikang han session: $1",
+       "config-session-expired": "An imo sesyon nga data baga na hin naglahós na hin panahón\nIt mga sesyon gin-configure hin pagkaiha nga $1\nPuyde mo ini paiha-on ha pagset hit <code>session.gc_maxlifetime</code> ha php.ini.\nIgtikang hin utro an pag-instalar nga proseso.",
+       "config-no-session": "¡Nawarâ an imo sesyon nga data!\nKitaa an imo php.ini ngan siguroa nga an  <code>session.save_path</code> ginkadâ hin naangay nga direktory.",
        "config-your-language": "Imo pinulongán",
+       "config-your-language-help": "Pili-a in yinaknan nga gagamiton dida han proseso han pag-instalar.",
        "config-wiki-language": "Pinulongán han wiki",
        "config-wiki-language-help": "Pilía an pinulongán nga kauróg igsúsurat hit wiki",
        "config-back": "Bálik",
        "config-page-language": "Pinulongán",
        "config-page-welcome": "Maupay nga pag-abot ha MediaWiki!",
        "config-page-dbconnect": "Igsumpay ha database",
+       "config-page-upgrade": "Ig-upgrade it aada nga na-instalar",
+       "config-page-dbsettings": "Mga setting ha database",
        "config-page-name": "Ngaran",
+       "config-page-options": "Mga pagpipilian",
+       "config-page-install": "Ig-instalar",
        "config-page-complete": "Nakompleto!",
+       "config-page-restart": "Igbalik hin utro in pag-instalar",
        "config-page-readme": "Basaha ako",
+       "config-page-releasenotes": "Mga nota han ginpagawás",
        "config-page-copying": "Nagkokopya",
+       "config-page-upgradedoc": "Pag-upgrade",
+       "config-page-existingwiki": "Aada nga wiki",
+       "config-help-restart": "¿Karúyag mo ba ighawan an tanan nga gin-save nga data nga imo gin-enter ngan igbalik hin utro an proseso hin pag-instalar?",
        "config-restart": "Oo, utroha patikanga",
        "config-welcome": "=== Mga pagpanginano panlibong ===\nMagkakamay-ada yano nga panginano para masabtan kun ini nga libong in naaangay para hiton pagtataod hiton MediaWiki. Hinumdomi iton paglakip hinin nga impormasyon kun karuyag mo mangaro hin suporta kun paunan-on humanon an pagtataod.",
        "config-env-php": "Gin-install an PHP $1.",
index d2d5d3c..b6afa04 100644 (file)
@@ -80,7 +80,7 @@
        "config-memory-bad": "<strong>警告:</strong>PHP的内存使用上限<code>memory_limit</code>为$1。\n该设定可能过低,并导致安装失败!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache]已安装",
        "config-apc": "[http://www.php.net/apc APC]已安装",
-       "config-apcu": "[http://www.php.net/apcu APCu]已安装",
+       "config-apcu": "已安装[http://www.php.net/apcu APCu]",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]已安装",
        "config-no-cache-apcu": "<strong>警告:</strong>找不到[http://www.php.net/apcu APCu]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache]。\n对象缓存未启用。",
        "config-mod-security": "<strong>警告:</strong>您的web服务器已启用[http://modsecurity.org/ mod_security]/mod_security2。它的很多常见配置可能导致MediaWiki及其他软件允许用户发布任意内容的问题。如果可能,这应当被禁用。否则,当您遭遇随机错误时,请参考[http://modsecurity.org/documentation/ mod_security 文档]或联络您的主机支持。",
index 26f3c4a..cffb5a3 100644 (file)
@@ -168,6 +168,7 @@ class StringUtils {
        ) {
                $inputPos = 0;
                $outputPos = 0;
+               $contentPos = 0;
                $output = '';
                $foundStart = false;
                $encStart = preg_quote( $startDelim, '!' );
index 15a5c0d..77d4aa9 100644 (file)
@@ -100,7 +100,7 @@ abstract class LBFactory implements ILBFactory {
                                trigger_error( E_USER_WARNING, get_class( $e ) . ': ' . $e->getMessage() );
                        };
 
-               $this->profiler = isset( $params['profiler'] ) ? $params['profiler'] : null;
+               $this->profiler = isset( $conf['profiler'] ) ? $conf['profiler'] : null;
                $this->trxProfiler = isset( $conf['trxProfiler'] )
                        ? $conf['trxProfiler']
                        : new TransactionProfiler();
@@ -111,9 +111,9 @@ abstract class LBFactory implements ILBFactory {
                        'ChronologyProtection' => 'true'
                ];
 
-               $this->cliMode = isset( $params['cliMode'] ) ? $params['cliMode'] : PHP_SAPI === 'cli';
+               $this->cliMode = isset( $conf['cliMode'] ) ? $conf['cliMode'] : PHP_SAPI === 'cli';
                $this->hostname = isset( $conf['hostname'] ) ? $conf['hostname'] : gethostname();
-               $this->agent = isset( $params['agent'] ) ? $params['agent'] : '';
+               $this->agent = isset( $conf['agent'] ) ? $conf['agent'] : '';
 
                $this->ticket = mt_rand();
        }
index a657a33..0d171f5 100644 (file)
@@ -1086,7 +1086,7 @@ class XMPReader implements LoggerAwareInterface {
                                }
                        } else {
                                array_unshift( $this->mode, self::MODE_IGNORE );
-                               array_unshift( $this->curItem, $elm );
+                               array_unshift( $this->curItem, $ns . ' ' . $tag );
 
                                return;
                        }
index c390232..a0bfb59 100644 (file)
@@ -59,9 +59,15 @@ class BlockLogFormatter extends LogFormatter {
                        // The lrm is needed to make sure that the number
                        // is shown on the correct side of the tooltip text.
                        $durationTooltip = '&lrm;' . htmlspecialchars( $params[4] );
-                       $params[4] = Message::rawParam( "<span class='blockExpiry' title='$durationTooltip'>" .
-                               $this->context->getLanguage()->translateBlockExpiry( $params[4],
-                                       $this->context->getUser() ) . '</span>' );
+                       $params[4] = Message::rawParam(
+                               "<span class='blockExpiry' title='$durationTooltip'>" .
+                               $this->context->getLanguage()->translateBlockExpiry(
+                                       $params[4],
+                                       $this->context->getUser(),
+                                       wfTimestamp( TS_UNIX, $this->entry->getTimestamp() )
+                               ) .
+                               '</span>'
+                       );
                        $params[5] = isset( $params[5] ) ?
                                self::formatBlockFlags( $params[5], $this->context->getLanguage() ) : '';
                }
index a64fee1..b5af783 100644 (file)
@@ -353,7 +353,11 @@ class LogFormatter {
                                                        $rawDuration = $parameters['5::duration'];
                                                        $rawFlags = $parameters['6::flags'];
                                                }
-                                               $duration = $wgContLang->translateBlockExpiry( $rawDuration );
+                                               $duration = $wgContLang->translateBlockExpiry(
+                                                       $rawDuration,
+                                                       null,
+                                                       wfTimestamp( TS_UNIX, $entry->getTimestamp() )
+                                               );
                                                $flags = BlockLogFormatter::formatBlockFlags( $rawFlags, $wgContLang );
                                                $text = wfMessage( 'blocklogentry' )
                                                        ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
@@ -363,7 +367,11 @@ class LogFormatter {
                                                        ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                        case 'reblock':
-                                               $duration = $wgContLang->translateBlockExpiry( $parameters['5::duration'] );
+                                               $duration = $wgContLang->translateBlockExpiry(
+                                                       $parameters['5::duration'],
+                                                       null,
+                                                       wfTimestamp( TS_UNIX, $entry->getTimestamp() )
+                                               );
                                                $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
                                                $text = wfMessage( 'reblock-logentry' )
                                                        ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
index a33c84f..34ff63c 100644 (file)
@@ -197,24 +197,6 @@ class Article implements Page {
                $this->mPage->clear();
        }
 
-       /**
-        * Note that getContent does not follow redirects anymore.
-        * If you need to fetch redirectable content easily, try
-        * the shortcut in WikiPage::getRedirectTarget()
-        *
-        * This function has side effects! Do not use this function if you
-        * only want the real revision text if any.
-        *
-        * @deprecated since 1.21; use WikiPage::getContent() instead
-        *
-        * @return string Return the text of this revision
-        */
-       public function getContent() {
-               wfDeprecated( __METHOD__, '1.21' );
-               $content = $this->getContentObject();
-               return ContentHandler::getContentText( $content );
-       }
-
        /**
         * Returns a Content object representing the pages effective display content,
         * not necessarily the revision's content!
@@ -1672,15 +1654,6 @@ class Article implements Page {
                $title = $this->getTitle();
                $ctx = $this->getContext();
                $outputPage = $ctx->getOutput();
-               if ( !wfMessage( 'deletereason-dropdown' )->inContentLanguage()->isDisabled() ) {
-                       $reasonsList = Xml::getArrayFromWikiTextList(
-                               wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text()
-                       );
-                       $outputPage->addModules( 'mediawiki.reasonSuggest' );
-                       $outputPage->addJsConfigVars( [
-                               'reasons' => $reasonsList
-                       ] );
-               }
                $useMediaWikiUIEverywhere = $ctx->getConfig()->get( 'UseMediaWikiUIEverywhere' );
                $outputPage->setPageTitle( wfMessage( 'delete-confirm', $title->getPrefixedText() ) );
                $outputPage->addBacklinkSubtitle( $title );
@@ -2043,22 +2016,13 @@ class Article implements Page {
 
        /**
         * Call to WikiPage function for backwards compatibility.
-        * @see WikiPage::doEdit
-        *
-        * @deprecated since 1.21: use doEditContent() instead.
-        */
-       public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
-               wfDeprecated( __METHOD__, '1.21' );
-               return $this->mPage->doEdit( $text, $summary, $flags, $baseRevId, $user );
-       }
-
-       /**
-        * Call to WikiPage function for backwards compatibility.
+        * @deprecated since 1.29. Use WikiPage::doEditContent() directly instead
         * @see WikiPage::doEditContent
         */
        public function doEditContent( Content $content, $summary, $flags = 0, $baseRevId = false,
                User $user = null, $serialFormat = null
        ) {
+               wfDeprecated( __METHOD__, '1.29' );
                return $this->mPage->doEditContent( $content, $summary, $flags, $baseRevId,
                        $user, $serialFormat
                );
index 920ba87..f760cd1 100644 (file)
@@ -1504,68 +1504,6 @@ class WikiPage implements Page, IDBAccessObject {
                return $flags;
        }
 
-       /**
-        * Change an existing article or create a new article. Updates RC and all necessary caches,
-        * optionally via the deferred update array.
-        *
-        * @param string $text New text
-        * @param string $summary Edit summary
-        * @param int $flags Bitfield:
-        *      EDIT_NEW
-        *          Article is known or assumed to be non-existent, create a new one
-        *      EDIT_UPDATE
-        *          Article is known or assumed to be pre-existing, update it
-        *      EDIT_MINOR
-        *          Mark this edit minor, if the user is allowed to do so
-        *      EDIT_SUPPRESS_RC
-        *          Do not log the change in recentchanges
-        *      EDIT_FORCE_BOT
-        *          Mark the edit a "bot" edit regardless of user rights
-        *      EDIT_AUTOSUMMARY
-        *          Fill in blank summaries with generated text where possible
-        *      EDIT_INTERNAL
-        *          Signal that the page retrieve/save cycle happened entirely in this request.
-        *
-        * If neither EDIT_NEW nor EDIT_UPDATE is specified, the status of the
-        * article will be detected. If EDIT_UPDATE is specified and the article
-        * doesn't exist, the function will return an edit-gone-missing error. If
-        * EDIT_NEW is specified and the article does exist, an edit-already-exists
-        * error will be returned. These two conditions are also possible with
-        * auto-detection due to MediaWiki's performance-optimised locking strategy.
-        *
-        * @param bool|int $baseRevId The revision ID this edit was based off, if any.
-        *   This is not the parent revision ID, rather the revision ID for older
-        *   content used as the source for a rollback, for example.
-        * @param User $user The user doing the edit
-        *
-        * @throws MWException
-        * @return Status Possible errors:
-        *   edit-hook-aborted: The ArticleSave hook aborted the edit but didn't
-        *     set the fatal flag of $status
-        *   edit-gone-missing: In update mode, but the article didn't exist.
-        *   edit-conflict: In update mode, the article changed unexpectedly.
-        *   edit-no-change: Warning that the text was the same as before.
-        *   edit-already-exists: In creation mode, but the article already exists.
-        *
-        * Extensions may define additional errors.
-        *
-        * $return->value will contain an associative array with members as follows:
-        *     new: Boolean indicating if the function attempted to create a new article.
-        *     revision: The revision object for the inserted revision, or null.
-        *
-        * Compatibility note: this function previously returned a boolean value
-        * indicating success/failure
-        *
-        * @deprecated since 1.21: use doEditContent() instead.
-        */
-       public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               $content = ContentHandler::makeContent( $text, $this->getTitle() );
-
-               return $this->doEditContent( $content, $summary, $flags, $baseRevId, $user );
-       }
-
        /**
         * Change an existing article or create a new article. Updates RC and all necessary caches,
         * optionally via the deferred update array.
index 40da368..08e3c77 100644 (file)
  * @ingroup Parser
  */
 class DateFormatter {
-       public $mSource, $mTarget;
-       public $monthNames = '', $rxDM, $rxMD, $rxDMY, $rxYDM, $rxMDY, $rxYMD;
+       private $mSource, $mTarget;
+       private $monthNames = '';
 
-       public $regexes, $pDays, $pMonths, $pYears;
-       public $rules, $xMonths, $preferences;
+       private $regexes;
+       private $rules, $xMonths, $preferences;
 
-       protected $lang, $mLinked;
+       private $lang, $mLinked;
+
+       /** @var string[] */
+       private $keys;
+
+       /** @var string[] */
+       private $targets;
 
        const ALL = -1;
        const NONE = 0;
@@ -198,10 +204,12 @@ class DateFormatter {
        }
 
        /**
+        * Regexp replacement callback
+        *
         * @param array $matches
         * @return string
         */
-       public function replace( $matches ) {
+       private function replace( $matches ) {
                # Extract information from $matches
                $linked = true;
                if ( isset( $this->mLinked ) ) {
@@ -217,15 +225,17 @@ class DateFormatter {
                        }
                }
 
-               return $this->formatDate( $bits, $linked );
+               return $this->formatDate( $bits, $matches[0], $linked );
        }
 
        /**
         * @param array $bits
+        * @param string $orig Original input string, to be returned
+        *  on formatting failure.
         * @param bool $link
         * @return string
         */
-       public function formatDate( $bits, $link = true ) {
+       private function formatDate( $bits, $orig, $link = true ) {
                $format = $this->targets[$this->mTarget];
 
                if ( !$link ) {
@@ -300,8 +310,9 @@ class DateFormatter {
                        }
                }
                if ( $fail ) {
-                       /** @todo FIXME: $matches doesn't exist here, what's expected? */
-                       $text = $matches[0];
+                       // This occurs when parsing a date with day or month outside the bounds
+                       // of possibilities.
+                       $text = $orig;
                }
 
                $isoBits = [];
@@ -323,7 +334,7 @@ class DateFormatter {
         * Return a regex that can be used to find month names in string
         * @return string regex to find the months with
         */
-       public function getMonthRegex() {
+       private function getMonthRegex() {
                $names = [];
                for ( $i = 1; $i <= 12; $i++ ) {
                        $names[] = $this->lang->getMonthName( $i );
@@ -337,7 +348,7 @@ class DateFormatter {
         * @param string $monthName Month name
         * @return string ISO month name
         */
-       public function makeIsoMonth( $monthName ) {
+       private function makeIsoMonth( $monthName ) {
                $n = $this->xMonths[$this->lang->lc( $monthName )];
                return sprintf( '%02d', $n );
        }
@@ -347,7 +358,7 @@ class DateFormatter {
         * @param string $year Year name
         * @return string ISO year name
         */
-       public function makeIsoYear( $year ) {
+       private function makeIsoYear( $year ) {
                # Assumes the year is in a nice format, as enforced by the regex
                if ( substr( $year, -2 ) == 'BC' ) {
                        $num = intval( substr( $year, 0, -3 ) ) - 1;
@@ -366,7 +377,7 @@ class DateFormatter {
         * @return int|string int representing year number in case of AD dates, or string containing
         *   year number and 'BC' at the end otherwise.
         */
-       public function makeNormalYear( $iso ) {
+       private function makeNormalYear( $iso ) {
                if ( $iso[0] == '-' ) {
                        $text = ( intval( substr( $iso, 1 ) ) + 1 ) . ' BC';
                } else {
index 79fc172..3ec0596 100644 (file)
@@ -1947,18 +1947,6 @@ class Parser {
                return $attribs;
        }
 
-       /**
-        * Replace unusual escape codes in a URL with their equivalent characters
-        *
-        * @deprecated since 1.24, use normalizeLinkUrl
-        * @param string $url
-        * @return string
-        */
-       public static function replaceUnusualEscapes( $url ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return self::normalizeLinkUrl( $url );
-       }
-
        /**
         * Replace unusual escape codes in a URL with their equivalent characters
         *
@@ -2213,7 +2201,7 @@ class Parser {
                                continue;
                        }
 
-                       $origLink = $m[1];
+                       $origLink = ltrim( $m[1], ' ' );
 
                        # Don't allow internal links to pages containing
                        # PROTO: where PROTO is a valid URL protocol; these
index 7bf848f..0c162b4 100644 (file)
@@ -696,6 +696,8 @@ class ParserOutput extends CacheTime {
         * to SpecialTrackingCategories::$coreTrackingCategories, and extensions
         * should add to "TrackingCategories" in their extension.json.
         *
+        * @todo Migrate some code to TrackingCategories
+        *
         * @param string $msg Message key
         * @param Title $title title of the page which is being tracked
         * @return bool Whether the addition was successful
index 575a9ac..bf260aa 100644 (file)
@@ -1322,11 +1322,11 @@ class SkinTemplate extends Skin {
                        if ( !$user->isAnon() ) {
                                $sur = new UserrightsPage;
                                $sur->setContext( $this->getContext() );
-                               $canChange = $sur->userCanChangeRights( $this->getUser(), false );
+                               $canChange = $sur->userCanChangeRights( $user );
                                $nav_urls['userrights'] = [
                                        'text' => $this->msg(
                                                $canChange ? 'tool-link-userrights' : 'tool-link-userrights-readonly',
-                                               $this->getUser()->getName()
+                                               $rootUser
                                        )->text(),
                                        'href' => self::makeSpecialUrlSubpage( 'Userrights', $rootUser )
                                ];
index 82f7d08..93cb377 100644 (file)
@@ -127,15 +127,7 @@ class SpecialBlock extends FormSpecialPage {
         */
        protected function getFormFields() {
                global $wgBlockAllowsUTEdit;
-               if ( !wfMessage( 'ipbreason-dropdown' )->inContentLanguage()->isDisabled() ) {
-                       $reasonsList = Xml::getArrayFromWikiTextList(
-                               wfMessage( 'ipbreason-dropdown' )->inContentLanguage()->text()
-                       );
-                       $this->getOutput()->addModules( 'mediawiki.reasonSuggest' );
-                       $this->getOutput()->addJsConfigVars( [
-                               'reasons' => $reasonsList
-                       ] );
-               }
+
                $user = $this->getUser();
 
                $suggestedDurations = self::getSuggestedDurations();
index 40277ca..766de1b 100644 (file)
@@ -529,7 +529,6 @@ class SpecialContributions extends IncludableSpecialPage {
                        'text',
                        [
                                'size' => '40',
-                               'required' => '',
                                'class' => [
                                        'mw-input',
                                        'mw-ui-input-inline',
index 15696bc..52cb30a 100644 (file)
@@ -111,7 +111,8 @@ class MIMEsearchPage extends QueryPage {
        function getPageHeader() {
                $formDescriptor = [
                        'mime' => [
-                               'type' => 'text',
+                               'type' => 'combobox',
+                               'options' => $this->getSuggestionsForTypes(),
                                'name' => 'mime',
                                'label-message' => 'mimetype',
                                'required' => true,
@@ -127,6 +128,33 @@ class MIMEsearchPage extends QueryPage {
                        ->displayForm( false );
        }
 
+       protected function getSuggestionsForTypes() {
+               $dbr = wfGetDB( DB_REPLICA );
+               $lastMajor = null;
+               $suggestions = [];
+               $result = $dbr->select(
+                       [ 'image' ],
+                       // We ignore img_media_type, but using it in the query is needed for MySQL to choose a
+                       // sensible execution plan
+                       [ 'img_media_type', 'img_major_mime', 'img_minor_mime' ],
+                       [],
+                       __METHOD__,
+                       [ 'GROUP BY' => [ 'img_media_type', 'img_major_mime', 'img_minor_mime' ] ]
+               );
+               foreach ( $result as $row ) {
+                       $major = $row->img_major_mime;
+                       $minor = $row->img_minor_mime;
+                       $suggestions[ "$major/$minor" ] = "$major/$minor";
+                       if ( $lastMajor === $major ) {
+                               // If there are at least two with the same major mime type, also include the wildcard
+                               $suggestions[ "$major/*" ] = "$major/*";
+                       }
+                       $lastMajor = $major;
+               }
+               ksort( $suggestions );
+               return $suggestions;
+       }
+
        public function execute( $par ) {
                $this->mime = $par ? $par : $this->getRequest()->getText( 'mime' );
                $this->mime = trim( $this->mime );
index 8ff0527..e503d92 100644 (file)
@@ -36,26 +36,6 @@ class SpecialTrackingCategories extends SpecialPage {
                parent::__construct( 'TrackingCategories' );
        }
 
-       /**
-        * Tracking categories that exist in core
-        *
-        * @var array
-        */
-       private static $coreTrackingCategories = [
-               'index-category',
-               'noindex-category',
-               'duplicate-args-category',
-               'expensive-parserfunction-category',
-               'post-expand-template-argument-category',
-               'post-expand-template-inclusion-category',
-               'hidden-category-category',
-               'broken-file-category',
-               'node-count-exceeded-category',
-               'expansion-depth-exceeded-category',
-               'restricted-displaytitle-ignored',
-               'deprecated-self-close-category',
-       ];
-
        function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
@@ -76,10 +56,11 @@ class SpecialTrackingCategories extends SpecialPage {
                        </tr></thead>"
                );
 
-               $trackingCategories = $this->prepareTrackingCategoriesData();
+               $trackingCategories = new TrackingCategories( $this->getConfig() );
+               $categoryList = $trackingCategories->getTrackingCategories();
 
                $batch = new LinkBatch();
-               foreach ( $trackingCategories as $catMsg => $data ) {
+               foreach ( $categoryList as $catMsg => $data ) {
                        $batch->addObj( $data['msg'] );
                        foreach ( $data['cats'] as $catTitle ) {
                                $batch->addObj( $catTitle );
@@ -87,11 +68,11 @@ class SpecialTrackingCategories extends SpecialPage {
                }
                $batch->execute();
 
-               Hooks::run( 'SpecialTrackingCategories::preprocess', [ $this, $trackingCategories ] );
+               Hooks::run( 'SpecialTrackingCategories::preprocess', [ $this, $categoryList ] );
 
                $linkRenderer = $this->getLinkRenderer();
 
-               foreach ( $trackingCategories as $catMsg => $data ) {
+               foreach ( $categoryList as $catMsg => $data ) {
                        $allMsgs = [];
                        $catDesc = $catMsg . '-desc';
 
@@ -143,80 +124,6 @@ class SpecialTrackingCategories extends SpecialPage {
                $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
        }
 
-       /**
-        * Read the global and extract title objects from the corresponding messages
-        * @return array Array( 'msg' => Title, 'cats' => Title[] )
-        */
-       private function prepareTrackingCategoriesData() {
-               $categories = array_merge(
-                       self::$coreTrackingCategories,
-                       ExtensionRegistry::getInstance()->getAttribute( 'TrackingCategories' ),
-                       $this->getConfig()->get( 'TrackingCategories' ) // deprecated
-               );
-
-               // Only show magic link tracking categories if they are enabled
-               $enableMagicLinks = $this->getConfig()->get( 'EnableMagicLinks' );
-               if ( $enableMagicLinks['ISBN'] ) {
-                       $categories[] = 'magiclink-tracking-isbn';
-               }
-               if ( $enableMagicLinks['RFC'] ) {
-                       $categories[] = 'magiclink-tracking-rfc';
-               }
-               if ( $enableMagicLinks['PMID'] ) {
-                       $categories[] = 'magiclink-tracking-pmid';
-               }
-
-               $trackingCategories = [];
-               foreach ( $categories as $catMsg ) {
-                       /*
-                        * Check if the tracking category varies by namespace
-                        * Otherwise only pages in the current namespace will be displayed
-                        * If it does vary, show pages considering all namespaces
-                        */
-                       $msgObj = $this->msg( $catMsg )->inContentLanguage();
-                       $allCats = [];
-                       $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg );
-                       if ( !$catMsgTitle ) {
-                               continue;
-                       }
-
-                       // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}.
-                       // False positives are ok, this is just an efficiency shortcut
-                       if ( strpos( $msgObj->plain(), '{{' ) !== false ) {
-                               $ns = MWNamespace::getValidNamespaces();
-                               foreach ( $ns as $namesp ) {
-                                       $tempTitle = Title::makeTitleSafe( $namesp, $catMsg );
-                                       if ( !$tempTitle ) {
-                                               continue;
-                                       }
-                                       $catName = $msgObj->title( $tempTitle )->text();
-                                       # Allow tracking categories to be disabled by setting them to "-"
-                                       if ( $catName !== '-' ) {
-                                               $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
-                                               if ( $catTitle ) {
-                                                       $allCats[] = $catTitle;
-                                               }
-                                       }
-                               }
-                       } else {
-                               $catName = $msgObj->text();
-                               # Allow tracking categories to be disabled by setting them to "-"
-                               if ( $catName !== '-' ) {
-                                       $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
-                                       if ( $catTitle ) {
-                                               $allCats[] = $catTitle;
-                                       }
-                               }
-                       }
-                       $trackingCategories[$catMsg] = [
-                               'cats' => $allCats,
-                               'msg' => $catMsgTitle,
-                       ];
-               }
-
-               return $trackingCategories;
-       }
-
        protected function getGroupName() {
                return 'pages';
        }
index 2cc1a7b..9fcbf15 100644 (file)
@@ -50,8 +50,6 @@ class UnusedimagesPage extends ImageQueryPage {
                                'namespace' => NS_FILE,
                                'title' => 'img_name',
                                'value' => 'img_timestamp',
-                               'img_user', 'img_user_text',
-                               'img_description'
                        ],
                        'conds' => [ 'il_to IS NULL' ],
                        'join_conds' => [ 'imagelinks' => [ 'LEFT JOIN', 'il_to = img_name' ] ]
index 8b8e514..c5a1f27 100644 (file)
@@ -1090,12 +1090,14 @@ class UploadForm extends HTMLForm {
                                global $wgContLang;
 
                                $mto = $file->transform( [ 'width' => 120 ] );
-                               $this->addHeaderText(
-                                       '<div class="thumb t' . $wgContLang->alignEnd() . '">' .
-                                       Html::element( 'img', [
-                                               'src' => $mto->getUrl(),
-                                               'class' => 'thumbimage',
-                                       ] ) . '</div>', 'description' );
+                               if ( $mto ) {
+                                       $this->addHeaderText(
+                                               '<div class="thumb t' . $wgContLang->alignEnd() . '">' .
+                                               Html::element( 'img', [
+                                                       'src' => $mto->getUrl(),
+                                                       'class' => 'thumbimage',
+                                               ] ) . '</div>', 'description' );
+                               }
                        }
                }
 
index 4db2198..b1f8a17 100644 (file)
@@ -49,19 +49,25 @@ class UserrightsPage extends SpecialPage {
        }
 
        /**
-        * @param User $user
-        * @param bool $checkIfSelf
+        * Check whether the current user (from context) can change the target user's rights.
+        *
+        * @param User $targetUser User whose rights are being changed
+        * @param bool $checkIfSelf If false, assume that the current user can add/remove groups defined
+        *   in $wgGroupsAddToSelf / $wgGroupsRemoveFromSelf, without checking if it's the same as target
+        *   user
         * @return bool
         */
-       public function userCanChangeRights( $user, $checkIfSelf = true ) {
+       public function userCanChangeRights( $targetUser, $checkIfSelf = true ) {
+               $isself = $this->getUser()->equals( $targetUser );
+
                $available = $this->changeableGroups();
-               if ( $user->getId() == 0 ) {
+               if ( $targetUser->getId() == 0 ) {
                        return false;
                }
 
                return !empty( $available['add'] )
                        || !empty( $available['remove'] )
-                       || ( ( $this->isself || !$checkIfSelf ) &&
+                       || ( ( $isself || !$checkIfSelf ) &&
                                ( !empty( $available['add-self'] )
                                        || !empty( $available['remove-self'] ) ) );
        }
@@ -465,29 +471,6 @@ class UserrightsPage extends SpecialPage {
                );
        }
 
-       /**
-        * Go through used and available groups and return the ones that this
-        * form will be able to manipulate based on the current user's system
-        * permissions.
-        *
-        * @param array $groups List of groups the given user is in
-        * @return array Tuple of addable, then removable groups
-        */
-       protected function splitGroups( $groups ) {
-               list( $addable, $removable, $addself, $removeself ) = array_values( $this->changeableGroups() );
-
-               $removable = array_intersect(
-                       array_merge( $this->isself ? $removeself : [], $removable ),
-                       $groups
-               ); // Can't remove groups the user doesn't have
-               $addable = array_diff(
-                       array_merge( $this->isself ? $addself : [], $addable ),
-                       $groups
-               ); // Can't add groups the user does have
-
-               return [ $addable, $removable ];
-       }
-
        /**
         * Show the form to edit group memberships.
         *
index 345577d..7db90c1 100644 (file)
@@ -92,21 +92,24 @@ class CategoryPager extends AlphabeticPager {
        }
 
        public function getStartForm( $from ) {
-               return Xml::tags(
-                       'form',
-                       [ 'method' => 'get', 'action' => wfScript() ],
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
-                       Xml::fieldset(
-                               $this->msg( 'categories' )->text(),
-                               Xml::inputLabel(
-                                       $this->msg( 'categoriesfrom' )->text(),
-                                       'from', 'from', 20, $from, [ 'class' => 'mw-ui-input-inline' ] ) .
-                               ' ' .
-                               Html::submitButton(
-                                       $this->msg( 'categories-submit' )->text(),
-                                       [], [ 'mw-ui-progressive' ]
-                               )
-                       )
-               );
+               $formDescriptor = [
+                       'from' => [
+                               'type' => 'title',
+                               'namespace' => NS_CATEGORY,
+                               'relative' => true,
+                               'label-message' => 'categoriesfrom',
+                               'name' => 'from',
+                               'id' => 'from',
+                               'size' => 20,
+                               'default' => $from,
+                       ],
+               ];
+
+               $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() )
+                       ->setSubmitTextMsg( 'categories-submit' )
+                       ->setWrapperLegendMsg( 'categories' )
+                       ->setMethod( 'get' );
+               return $htmlForm->prepareForm()->getHTML( false );
        }
+
 }
index 56229b3..bbf97e1 100644 (file)
@@ -54,15 +54,17 @@ class MergeHistoryPager extends ReverseChronologicalPager {
                $batch = new LinkBatch();
                # Give some pointers to make (last) links
                $this->mForm->prevId = [];
+               $rev_id = null;
                foreach ( $this->mResult as $row ) {
                        $batch->addObj( Title::makeTitleSafe( NS_USER, $row->user_name ) );
                        $batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->user_name ) );
 
-                       $rev_id = isset( $rev_id ) ? $rev_id : $row->rev_id;
-                       if ( $rev_id > $row->rev_id ) {
-                               $this->mForm->prevId[$rev_id] = $row->rev_id;
-                       } elseif ( $rev_id < $row->rev_id ) {
-                               $this->mForm->prevId[$row->rev_id] = $rev_id;
+                       if ( isset( $rev_id ) ) {
+                               if ( $rev_id > $row->rev_id ) {
+                                       $this->mForm->prevId[$rev_id] = $row->rev_id;
+                               } elseif ( $rev_id < $row->rev_id ) {
+                                       $this->mForm->prevId[$row->rev_id] = $rev_id;
+                               }
                        }
 
                        $rev_id = $row->rev_id;
index 1346e1c..8da1553 100644 (file)
@@ -75,7 +75,7 @@ class BalanceSets {
                self::HTML_NAMESPACE => [
                        'html' => true, 'head' => true, 'body' => true, 'frameset' => true,
                        'frame' => true,
-                       'plaintext' => true, 'isindex' => true,
+                       'plaintext' => true,
                        'xmp' => true, 'iframe' => true, 'noembed' => true,
                        'noscript' => true, 'script' => true,
                        'title' => true
@@ -119,9 +119,9 @@ class BalanceSets {
                        'h2' => true, 'h3' => true, 'h4' => true, 'h5' => true,
                        'h6' => true, 'head' => true, 'header' => true, 'hgroup' => true,
                        'hr' => true, 'html' => true, 'iframe' => true, 'img' => true,
-                       'input' => true, 'isindex' => true, 'li' => true, 'link' => true,
+                       'input' => true, 'li' => true, 'link' => true,
                        'listing' => true, 'main' => true, 'marquee' => true,
-                       'menu' => true, 'menuitem' => true, 'meta' => true, 'nav' => true,
+                       'menu' => true, 'meta' => true, 'nav' => true,
                        'noembed' => true, 'noframes' => true, 'noscript' => true,
                        'object' => true, 'ol' => true, 'p' => true, 'param' => true,
                        'plaintext' => true, 'pre' => true, 'script' => true,
@@ -156,7 +156,8 @@ class BalanceSets {
 
        public static $impliedEndTagsSet = [
                self::HTML_NAMESPACE => [
-                       'dd' => true, 'dt' => true, 'li' => true, 'optgroup' => true,
+                       'dd' => true, 'dt' => true, 'li' => true,
+                       'menuitem' => true, 'optgroup' => true,
                        'option' => true, 'p' => true, 'rb' => true, 'rp' => true,
                        'rt' => true, 'rtc' => true
                ]
@@ -498,6 +499,16 @@ class BalanceElement {
                                        $this->attribs = [ 'class' => "mw-empty-elt" ];
                                }
                                $blank = false;
+                       } elseif (
+                               $this->isA( BalanceSets::$extraLinefeedSet ) &&
+                               count( $this->children ) > 0 &&
+                               substr( $this->children[0], 0, 1 ) == "\n"
+                       ) {
+                               // Double the linefeed after pre/listing/textarea
+                               // according to the (old) HTML5 fragment serialization
+                               // algorithm (see https://github.com/whatwg/html/issues/944)
+                               // to ensure this will round-trip.
+                               array_unshift( $this->children, "\n" );
                        }
                        $flat = $blank ? '' : "{$this}";
                } else {
@@ -529,15 +540,6 @@ class BalanceElement {
                                $out .= "{$elt}";
                        }
                        $out .= "</{$this->localName}>";
-                       if (
-                               $this->isA( BalanceSets::$extraLinefeedSet ) &&
-                               $out[$len] === "\n"
-                       ) {
-                               // Double the linefeed after pre/listing/textarea
-                               // according to the HTML5 fragment serialization algorithm.
-                               $out = substr( $out, 0, $len + 1 ) .
-                                       substr( $out, $len );
-                       }
                } else {
                        $out = "<{$this->localName}{$encAttribs} />";
                        Assert::invariant(
@@ -1410,6 +1412,7 @@ class BalanceActiveFormattingElements {
        private $noahTableStack = [ [] ];
 
        public function __destruct() {
+               $next = null;
                for ( $node = $this->head; $node; $node = $next ) {
                        $next = $node->nextAFE;
                        $node->prevAFE = $node->nextAFE = $node->nextNoah = null;
@@ -1769,7 +1772,7 @@ class BalanceActiveFormattingElements {
  *   and escaped.
  * - All null characters are assumed to have been removed.
  * - The following elements are disallowed: <html>, <head>, <body>, <frameset>,
- *   <frame>, <plaintext>, <isindex>, <xmp>, <iframe>,
+ *   <frame>, <plaintext>, <xmp>, <iframe>,
  *   <noembed>, <noscript>, <script>, <title>.  As a result,
  *   further simplifications can be made:
  *   - `frameset-ok` is not tracked.
@@ -1864,7 +1867,9 @@ class Balancer {
         *         provide historical compatibility with the old "tidy"
         *         program: <p>-wrapping is done to the children of
         *         <body> and <blockquote> elements, and empty elements
-        *         are removed.
+        *         are removed.  The <pre>/<listing>/<textarea> serialization
+        *         is also tweaked to allow lossless round trips.
+        *         (See: https://github.com/whatwg/html/issues/944)
         *     'allowComments': boolean, defaults to true.
         *         When true, allows HTML comments in the input.
         *         The Sanitizer generally strips all comments, so if you
@@ -1996,6 +2001,7 @@ class Balancer {
                // Some hoops we have to jump through
                $adjusted = $this->stack->adjustedCurrentNode( $this->fragmentContext );
 
+               // The spec calls this the "tree construction dispatcher".
                $isForeign = true;
                if (
                        $this->stack->length() === 0 ||
@@ -2036,6 +2042,9 @@ class Balancer {
                if ( $token === 'text' ) {
                        $this->stack->insertText( $value );
                        return true;
+               } elseif ( $token === 'comment' ) {
+                       $this->stack->insertComment( $value );
+                       return true;
                } elseif ( $token === 'tag' ) {
                        switch ( $value ) {
                        case 'font':
@@ -2467,7 +2476,6 @@ class Balancer {
                        case 'header':
                        case 'hgroup':
                        case 'main':
-                       case 'menu':
                        case 'nav':
                        case 'ol':
                        case 'p':
@@ -2480,6 +2488,16 @@ class Balancer {
                                $this->stack->insertHTMLElement( $value, $attribs );
                                return true;
 
+                       case 'menu':
+                               if ( $this->stack->inButtonScope( "p" ) ) {
+                                       $this->inBodyMode( 'endtag', 'p' );
+                               }
+                               if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+                                       $this->stack->pop();
+                               }
+                               $this->stack->insertHTMLElement( $value, $attribs );
+                               return true;
+
                        case 'h1':
                        case 'h2':
                        case 'h3':
@@ -2655,7 +2673,6 @@ class Balancer {
                                // (hence we don't need to examine the tag's "type" attribute)
                                return true;
 
-                       case 'menuitem':
                        case 'param':
                        case 'source':
                        case 'track':
@@ -2667,6 +2684,9 @@ class Balancer {
                                if ( $this->stack->inButtonScope( 'p' ) ) {
                                        $this->inBodyMode( 'endtag', 'p' );
                                }
+                               if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+                                       $this->stack->pop();
+                               }
                                $this->stack->insertHTMLElement( $value, $attribs );
                                $this->stack->pop();
                                return true;
@@ -2675,8 +2695,6 @@ class Balancer {
                                // warts!
                                return $this->inBodyMode( $token, 'img', $attribs, $selfClose );
 
-                       // OMITTED: <isindex>
-
                        case 'textarea':
                                $this->stack->insertHTMLElement( $value, $attribs );
                                $this->ignoreLinefeed = true;
@@ -2714,6 +2732,14 @@ class Balancer {
                                $this->stack->insertHTMLElement( $value, $attribs );
                                return true;
 
+                       case 'menuitem':
+                               if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+                                       $this->stack->pop();
+                               }
+                               $this->afe->reconstruct( $this->stack );
+                               $this->stack->insertHTMLElement( $value, $attribs );
+                               return true;
+
                        case 'rb':
                        case 'rtc':
                                if ( $this->stack->inScope( 'ruby' ) ) {
index 96f8638..79166ef 100644 (file)
@@ -1440,6 +1440,7 @@ abstract class UploadBase {
                        'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
                        'http://www.w3.org/2000/svg',
                        'http://www.w3.org/tr/rec-rdf-syntax/',
+                       'http://www.w3.org/2000/01/rdf-schema#',
                ];
 
                // Inkscape mangles namespace definitions created by Adobe Illustrator.
index 69bfa6d..0d0fa12 100644 (file)
@@ -131,16 +131,16 @@ class FullSearchResultWidget implements SearchResultWidget {
 
                // clone to prevent hook from changing the title stored inside $result
                $title = clone $result->getTitle();
-               $queryString = [];
+               $query = [];
 
                Hooks::run( 'ShowSearchHitTitle',
-                       [ &$title, &$snippet, $result, $terms, $this->specialPage, &$queryString ] );
+                       [ &$title, &$snippet, $result, $terms, $this->specialPage, &$query ] );
 
                $link = $this->linkRenderer->makeLink(
                        $title,
                        $snippet,
                        [ 'data-serp-pos' => $position ],
-                       $queryString
+                       $query
                );
 
                return $link;
index 5bce76b..8c7ce31 100644 (file)
@@ -3975,10 +3975,11 @@ class Language {
         *
         * @param string $str The validated block duration in English
         * @param User $user User object to use timezone from or null for $wgUser
+        * @param int $now Current timestamp, for formatting relative block durations
         * @return string Somehow translated block duration
         * @see LanguageFi.php for example implementation
         */
-       function translateBlockExpiry( $str, User $user = null ) {
+       function translateBlockExpiry( $str, User $user = null, $now = 0 ) {
                $duration = SpecialBlock::getSuggestedDurations( $this );
                foreach ( $duration as $show => $value ) {
                        if ( strcmp( $str, $value ) == 0 ) {
@@ -3995,11 +3996,11 @@ class Language {
                }
 
                // If all else fails, return a standard duration or timestamp description.
-               $time = strtotime( $str, 0 );
+               $time = strtotime( $str, $now );
                if ( $time === false ) { // Unknown format. Return it as-is in case.
                        return $str;
-               } elseif ( $time !== strtotime( $str, 1 ) ) { // It's a relative timestamp.
-                       // $time is relative to 0 so it's a duration length.
+               } elseif ( $time !== strtotime( $str, $now + 1 ) ) { // It's a relative timestamp.
+                       // The result differs based on current time, so it's a duration length.
                        return $this->formatDuration( $time );
                } else { // It's an absolute timestamp.
                        if ( $time === 0 ) {
index 3388536..54ff421 100644 (file)
@@ -85,9 +85,10 @@ class LanguageFi extends Language {
        /**
         * @param string $str
         * @param User $user User object to use timezone from or null for $wgUser
+        * @param int $now Current timestamp, for formatting relative block durations
         * @return string
         */
-       function translateBlockExpiry( $str, User $user = null ) {
+       function translateBlockExpiry( $str, User $user = null, $now = 0 ) {
                /*
                        'ago', 'now', 'today', 'this', 'next',
                        'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth',
index 45c42e4..156efdb 100644 (file)
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (راجع أيضا [[Special:NewPages|قائمة الصفحات الجديدة]])",
        "recentchanges-submit": "أظهر",
        "rcfilters-activefilters": "المرشحات النشطة",
+       "rcfilters-restore-default-filters": "استرجاع المرشحات الافتراضية",
+       "rcfilters-clear-all-filters": "مسح كل المرشحات",
        "rcfilters-search-placeholder": "رشح أحدث التغييرات (تصفح أو ابدأ الكتابة)",
        "rcfilters-invalid-filter": "مرشح غير صحيح",
+       "rcfilters-empty-filter": "لا مرشحات فعالة. كل المساهمات معروضة.",
        "rcfilters-filterlist-title": "مرشحات",
        "rcfilters-filterlist-noresults": "لم يتم العثور على مرشحات",
+       "rcfilters-filtergroup-registration": "تسجيل المستخدم",
+       "rcfilters-filter-registered-label": "مسجل",
+       "rcfilters-filter-registered-description": "المحررون مسجلو الدخول.",
+       "rcfilters-filter-unregistered-label": "غير مسجل",
+       "rcfilters-filter-unregistered-description": "المحررون غير مسجلي الدخول.",
        "rcfilters-filtergroup-authorship": "ملكية التعديلات",
        "rcfilters-filter-editsbyself-label": "تعديلاتك الشخصية",
        "rcfilters-filter-editsbyself-description": "التعديلات بواسطتك.",
        "rcfilters-filter-editsbyother-label": "التعديلات بواسطة الآخرين",
-       "rcfilters-filter-editsbyother-description": "التعديلات المنشأة بواسطة المستخدمين الآخرين (ليس أنت.)",
-       "rcfilters-filtergroup-userExpLevel": "Ù\85ستÙ\88Ù\89 Ø®Ø¨Ø±Ø© Ø§Ù\84Ù\85ستخدÙ\85",
+       "rcfilters-filter-editsbyother-description": "التعديلات المنشأة بواسطة المستخدمين الآخرين (ليس أنت).",
+       "rcfilters-filtergroup-userExpLevel": "Ù\85ستÙ\88Ù\89 Ø§Ù\84خبرة (Ù\84Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\85سجÙ\84Ù\8aÙ\86 Ù\81Ù\82Ø·)",
        "rcfilters-filter-userExpLevel-newcomer-label": "القادمون الجدد",
-       "rcfilters-filter-userExpLevel-newcomer-description": "اÙ\84Ù\85ستخدÙ\85Ù\88Ù\86 Ø§Ù\84جدد Ø¬Ø¯Ø§: Ø£Ù\82Ù\84 Ù\85Ù\86 10 ØªØ¹Ø¯Ù\8aÙ\84ات Ù\884 Ø£Ù\8aاÙ\85 Ù\85Ù\86 Ø§Ù\84Ù\86شاط.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "أقل من 10 تعديلات و4 أيام من النشاط.",
        "rcfilters-filter-userExpLevel-learner-label": "المتعلمون",
-       "rcfilters-filter-userExpLevel-learner-description": "المزيد من أيام النشاط والتعديلات أكثر من 'القادمين الجدد' ولكن أقل من 'المستخدمين ذوي الخبرة.'",
+       "rcfilters-filter-userExpLevel-learner-description": "المزيد من أيام النشاط والتعديلات أكثر من \"القادمين الجدد\" ولكن أقل من \"المستخدمين ذوي الخبرة\".",
        "rcfilters-filter-userExpLevel-experienced-label": "المستخدمون ذوو الخبرة",
        "rcfilters-filter-userExpLevel-experienced-description": "أكثر من 30 يوما من النشاط و500 تعديل.",
+       "rcfilters-filtergroup-automated": "المساهمات الأوتوماتيكية",
+       "rcfilters-filter-bots-label": "بوت",
+       "rcfilters-filter-bots-description": "التعديلات بواسطة الأدوات الأوتوماتيكية.",
+       "rcfilters-filter-humans-label": "بشري (ليس بوت)",
+       "rcfilters-filter-humans-description": "التعديلات بواسطة المحررين البشريين.",
+       "rcfilters-filtergroup-significance": "الأهمية",
+       "rcfilters-filter-minor-label": "تعديلات طفيفة",
+       "rcfilters-filter-minor-description": "التعديلات التي علم عليها المستخدم كطفيفة.",
+       "rcfilters-filter-major-label": "التعديلات غير الطفيفة",
+       "rcfilters-filter-major-description": "التعديلات غير المعلم عليها كطفيفة.",
+       "rcfilters-filtergroup-changetype": "نوع التغيير",
+       "rcfilters-filter-pageedits-label": "تعديلات الصفحة",
+       "rcfilters-filter-pageedits-description": "التعديلات لمحتوى الويكي، النقاشات، وصوفات التصنيفات....",
+       "rcfilters-filter-newpages-label": "إنشاء الصفحات",
+       "rcfilters-filter-newpages-description": "التعديلات التي تصنع صفحات جديدة.",
+       "rcfilters-filter-categorization-label": "تغييرات التصنيفات",
+       "rcfilters-filter-categorization-description": "سجلات إضافة أو إزالة الصفحات من التصنيفات.",
+       "rcfilters-filter-logactions-label": "الأفعال المسجلة",
+       "rcfilters-filter-logactions-description": "الأفعال الإدارية، إنشاء الحسابات، حذف الصفحات، عمليات الرفع....",
        "rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "rclistfrom": "أظهر التغييرات بدء من $3 $2",
        "rcshowhideminor": "$1 التعديلات الطفيفة",
        "apisandbox-sending-request": "إرسال طلب API ...",
        "apisandbox-loading-results": "استقبال طلبات API ...",
        "apisandbox-results-error": "حدث خطأ أثناء تحميل رد استعدلام الAPI: $1.",
-       "apisandbox-request-params-json": "معاملات JSON:",
        "apisandbox-request-url-label": "مسار الطلب:",
        "apisandbox-request-time": "وقت الطلب: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "رمز الصحيح وإعادة الموافقة",
        "feedback-useragent": "وكيل المستخدم:",
        "searchsuggest-search": "ابحث في {{SITENAME}}",
        "searchsuggest-containing": "يحتوي...",
-       "api-error-autoblocked": "عنوان الأيبي الخاص بك تم منعه تلقائيا، لأنه تم استخدامه بواسطة مستخدم ممنوع",
-       "api-error-badaccess-groups": "لا يسمح لك بتحميل الملفات إلى هذه الويكي.",
        "api-error-badtoken": "خطأ داخلي: رمز مميز غير صحيح.",
-       "api-error-blocked": "لقد منعت من التحرير.",
-       "api-error-copyuploaddisabled": "تم تعطيل تحميل من رابط على هذا الخادم.",
-       "api-error-duplicate": "هناك {{PLURAL:$1|ملف آخر|بعض الملفات الأخرى}} مسبقا على الموقع بنفس المحتوى.",
-       "api-error-duplicate-archive": "هناك {{PLURAL:$1|كان ملف آخر |كذلك بعض الملفات الأخرى}} مسبقاً على الموقع بنفس المضمون، ولكن {{PLURAL:$1|تم}} حذفها.",
-       "api-error-empty-file": "كان ملف الذي قمت بإرسال فارغة.",
        "api-error-emptypage": "إنشاء صفحات فارغة جديدة، غير مسموح به.",
-       "api-error-fetchfileerror": "خطأ داخلي: قد حدث خطأ أثناء إحضار الملف.",
-       "api-error-fileexists-forbidden": "يوجد مسبقا ملف باسم \"$1\"، ولا يمكن استبداله.",
-       "api-error-fileexists-shared-forbidden": "يوجد مسبقا ملف باسم \"$1\" في مستودع الملفات المشتركة، ولا يمكن استبداله.",
-       "api-error-file-too-large": "الملف الذي أرسلته كان كبيرا جدا.",
-       "api-error-filename-tooshort": "اسم الملف قصير جدا.",
-       "api-error-filetype-banned": "نوع الملف هذا ممنوع.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|ليس نوع ملف مسموح به|ليست أنواع ملفات مسموح بها}}. {{PLURAL:$3|نوع الملف المسموح به هو|أنواع الملفات المسموح بها هي}} $2.",
-       "api-error-filetype-missing": "يفتقد الملفّ ملحق نوعيّته.",
-       "api-error-hookaborted": "التعديل الذي تحاول أن تقوم به تم إحباطه",
-       "api-error-http": "خطأ داخلي: تعذر الاتصال بالخادم.",
-       "api-error-illegal-filename": "اسم الملف غير مسموح به.",
-       "api-error-internal-error": "خطأ داخلي: حدث خطأ عند معالجة التحميل الخاص بك على الويكي.",
-       "api-error-invalid-file-key": "خطأ داخلي: لم يتم العثور على الملف في التخزين المؤقت.",
-       "api-error-missingparam": "خطأ داخلي : متغيرات مفقودة ضمن الطلب.",
-       "api-error-missingresult": "خطأ داخلي : لا يمكن التحديد ما إذا كان النسخ ناجحاً.",
-       "api-error-mustbeloggedin": "يجب أن تكون مسجلا في لتحميل الملفات.",
-       "api-error-mustbeposted": "خطأ داخلي: الطلب يتطلب HTTP POST.",
-       "api-error-noimageinfo": "نجح الرفع، ولكن الخادم لم يقدم لنا أي معلومات حول الملف.",
-       "api-error-nomodule": "خطأ داخلي: لم يتم تعيين تحميل الوحدة النمطية.",
-       "api-error-ok-but-empty": "خطأ داخلي : لم يكن هناك استجابة من الملقم.",
-       "api-error-overwrite": "لا يسمح بالكتابة فوق ملف موجود.",
-       "api-error-ratelimited": "أنت تحاول رفع الكثير من الملفات في فترة زمنية قصيرة أقصر مما تسمح به هذه الويكي.\nمن فضلك حاول مرة ثانية خلال عدة دقائق.",
-       "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\"",
-       "api-error-unknown-error": "خطأ داخلي: قد حدث خطأ عند محاولة تحميل الملف الخاص بك.",
+       "api-error-stashfailed": "خطأ داخلي: فشل الملقم في تخزين الملفات المؤقتة.",
        "api-error-unknown-warning": "تحذير غير معروف: \"$1\".",
        "api-error-unknownerror": "خطأ غير معروف: \"$1\"",
-       "api-error-uploaddisabled": "تم تعطيل الرفع على هذه الويكي.",
-       "api-error-verification-error": "هذا الملف قد يكون معطوباً أو يحتوي على امتداد غير صحيح.",
-       "api-error-was-deleted": "تم رفع ملف بهذا الاسم سابقا ثم تم حذفه بعد هذا.",
        "duration-seconds": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوانٍ|$1 ثانية}}",
        "duration-minutes": "{{PLURAL:$1|أقل من دقيقة|دقيقة واحدة|دقيقتان|$1 دقائق|$1 دقيقة}}",
        "duration-hours": "({{PLURAL:$1||ساعة واحدة|ساعتان|$1 ساعات|$1 ساعة}})",
        "usercssispublic": "من فضل لاحظ: صفحات الCSS الفرعية لا ينبغي أن تحتوي على بيانات سرية بما أنها يمكن رؤيتها بواسطة المستخدمين الآخرين.",
        "restrictionsfield-badip": "عنوان أيبي أو نطاق غير صحيح: $1",
        "restrictionsfield-label": "نطاقات الأيبي المسموح بها:",
-       "restrictionsfield-help": "عنوان أيبي أو نطاق CIDR واحد لكل سطر. لتفعيل كل شيء، استخدم<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "عنوان أيبي أو نطاق CIDR واحد لكل سطر. لتفعيل كل شيء، استخدم:\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "المراجعة $1",
        "pageid": "معرف الصفحة $1"
 }
index 85c121a..d8c3adf 100644 (file)
        "rcfilters-invalid-filter": "Filtru inválidu",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-noresults": "Nun s'alcontraron filtros",
+       "rcfilters-filtergroup-registration": "Rexistru del usuariu",
+       "rcfilters-filter-registered-label": "Rexistraos",
+       "rcfilters-filter-registered-description": "Editores coneutaos.",
+       "rcfilters-filter-unregistered-label": "Non rexistraos",
+       "rcfilters-filter-unregistered-description": "Editores ensin coneutar.",
        "rcfilters-filtergroup-authorship": "Editar autoría",
        "rcfilters-filter-editsbyself-label": "Les tos propies ediciones",
        "rcfilters-filter-editsbyself-description": "Ediciones de to",
        "rcfilters-filter-editsbyother-label": "Ediciones d'otros",
        "rcfilters-filter-editsbyother-description": "Ediciones creaes por otros usuarios (non por ti).",
-       "rcfilters-filtergroup-userExpLevel": "Nivel d'esperiencia del usuariu",
+       "rcfilters-filtergroup-userExpLevel": "Nivel d'esperiencia (solo pa usuarios rexistraos)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Recién llegaos",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Editores mui nuevos: menos de 10 ediciones y 4 díes d'actividá.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Menos de 10 ediciones y 4 díes d'actividá.",
        "rcfilters-filter-userExpLevel-learner-label": "Aprendices",
-       "rcfilters-filter-userExpLevel-learner-description": "Más díes d'actividá y ediciones que los «recién llegaos», pero menos que los usuarios espertos».",
+       "rcfilters-filter-userExpLevel-learner-description": "Más díes d'actividá y ediciones que los «Recién llegaos», pero menos que los «Usuarios espertos».",
        "rcfilters-filter-userExpLevel-experienced-label": "Usuarios espertos",
        "rcfilters-filter-userExpLevel-experienced-description": "Más de 30 díes d'actividá y 500 ediciones.",
+       "rcfilters-filtergroup-automated": "Contribuciones automátiques",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Ediciones feches con ferramientes automátiques.",
+       "rcfilters-filter-humans-label": "Ser humanu (non bot)",
+       "rcfilters-filter-humans-description": "Ediciones feches por editores humanos.",
+       "rcfilters-filtergroup-significance": "Significación",
+       "rcfilters-filter-minor-label": "Ediciones menores",
+       "rcfilters-filter-minor-description": "Ediciones que l'autor etiquetó como menores.",
+       "rcfilters-filter-major-label": "Ediciones non menores",
+       "rcfilters-filter-major-description": "Ediciones ensin etiquetar como menores.",
+       "rcfilters-filtergroup-changetype": "Tipu de cambéu",
+       "rcfilters-filter-pageedits-label": "Ediciones de páxines",
+       "rcfilters-filter-pageedits-description": "Ediciones del conteníu wiki, alderiques, descripciones de categoríes...",
+       "rcfilters-filter-newpages-label": "Creaciones de páxines",
+       "rcfilters-filter-newpages-description": "Ediciones nes que se creen páxines nueves.",
+       "rcfilters-filter-categorization-label": "Cambeos de categoríes",
+       "rcfilters-filter-categorization-description": "Rexistros de les páxines que s'añaden o borren de categoríes.",
+       "rcfilters-filter-logactions-label": "Aiciones rexistraes",
+       "rcfilters-filter-logactions-description": "Aiciones alministratives, creación de cuentes, desanicios de páxines, xubíes de ficheros...",
        "rcnotefrom": "Abaxo {{PLURAL:$5|tá'l cambiu|tan los cambios}} dende'l <strong>$3</strong>, a les <strong>$4</strong> (s'amuesen un máximu de <strong>$1</strong>).",
        "rclistfrom": "Amosar los nuevos cambios dende'l $3 a les $2",
        "rcshowhideminor": "$1 ediciones menores",
        "apisandbox-sending-request": "Unviando solicitú a la API...",
        "apisandbox-loading-results": "Recibiendo los resultaos de la API...",
        "apisandbox-results-error": "Asocedió un error al cargar la respuesta de la consulta API: $1.",
-       "apisandbox-request-params-json": "Parámetros JSON:",
        "apisandbox-request-url-label": "URL de la solicitú:",
        "apisandbox-request-time": "Duración de la solicitú: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Igua'l token y vuelve a unviar",
        "feedback-useragent": "Axente d'usuariu:",
        "searchsuggest-search": "Buscar en {{SITENAME}}",
        "searchsuggest-containing": "que contien...",
-       "api-error-autoblocked": "La to dirección IP bloquióse automáticamente porque la usó un usuariu bloquiáu.",
-       "api-error-badaccess-groups": "Nun tienes permisu pa xubir ficheros a esta wiki.",
        "api-error-badtoken": "Fallu internu: token incorreutu.",
-       "api-error-blocked": "Tas bloquiáu pa editar.",
-       "api-error-copyuploaddisabled": "Xubir d'una URL ta desactivao nesti sirvidor.",
-       "api-error-duplicate": "Yá hai {{PLURAL:$1|otru ficheru|otros ficheros}} nesti sitiu col mesmu conteníu.",
-       "api-error-duplicate-archive": "Yá había {{PLURAL:$1|otru ficheru|otros ficheros}} nesti sitiu col mesmu conteníu, pero se {{PLURAL:$1|desanició|desaniciaron}}.",
-       "api-error-empty-file": "El ficheru qu'unviasti taba baleru.",
        "api-error-emptypage": "Nun se permite la creación de páxines nueves baleres.",
-       "api-error-fetchfileerror": "Fallu internu: daqué nun funcionó al buscar el ficheru.",
-       "api-error-fileexists-forbidden": "Yá esiste un ficheru col nome «$1» y nun se pue sobrescribir.",
-       "api-error-fileexists-shared-forbidden": "Yá esiste un ficheru col nome «$1» nel repositoriu de ficheros compartíos, y nun se pue sobrescribir.",
-       "api-error-file-too-large": "El ficheru qu'unviasti yera demasiao grande.",
-       "api-error-filename-tooshort": "El nome de ficheru ye demasiao curtiu.",
-       "api-error-filetype-banned": "Esta triba de ficheru ta torgada.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nun ye una triba de ficheru permitida|nun son tribes de ficheru permitíes}}. {{PLURAL:$3|La triba de ficheru permitida ye|Les tribes de ficheru permitíes son}} $2.",
-       "api-error-filetype-missing": "Al ficheru falta-y una estensión.",
-       "api-error-hookaborted": "La conexón con una estensión encaboxó el cambéu que tentasti facer.",
-       "api-error-http": "Fallu internu: Nun se pudo coneutar col sirvidor.",
-       "api-error-illegal-filename": "El nome de ficheru nun ta permitíu.",
-       "api-error-internal-error": "Fallu internu: daqué nun funcionó al procesar la xubida na wiki.",
-       "api-error-invalid-file-key": "Fallu internu: nun s'atopó el ficheru nel depósitu temporal.",
-       "api-error-missingparam": "Fallu internu: falten parámetros na solicitú.",
-       "api-error-missingresult": "Fallu internu: nun se pudo determinar si la copia foi bien.",
-       "api-error-mustbeloggedin": "Tienes de tar autenticáu pa xubir ficheros.",
-       "api-error-mustbeposted": "Fallu internu: la solicitú necesita HTTP POST.",
-       "api-error-noimageinfo": "La xubida foi correuta, pero'l sirvidor nun dio información dala del ficheru.",
-       "api-error-nomodule": "Fallu internu: nun se configuró dengún módulu de xubíes.",
-       "api-error-ok-but-empty": "Fallu internu: nun hai respuesta del sirvidor.",
-       "api-error-overwrite": "Nun ta permitío sobroscribir un ficheru esistente.",
-       "api-error-ratelimited": "Tas tentando xubir más ficheros nun espaciu de tiempu más pequeñu del que permite esta wiki.\nTéntalo otra vuelta en dellos minutos.",
-       "api-error-stashfailed": "Fallu internu: el sirvidor nun pudo guardar el ficheru temporal.",
        "api-error-publishfailed": "Fallu internu: el sirvidor nun pudo espublizar el ficheru temporal.",
-       "api-error-stasherror": "Hebo un error al xubir el ficheru al almacén.",
-       "api-error-stashedfilenotfound": "Nun s'alcontró'l ficheru na reserva al intentar cargalu dende allí.",
-       "api-error-stashpathinvalid": "El camín onde tenía qu'alcontrase'l ficheru de la reserva ye inválidu.",
-       "api-error-stashfilestorage": "Hebo un error al atroxar el ficheru nel depósitu.",
-       "api-error-stashzerolength": "El sirvidor nun pudo atroxar el ficheru nel depósitu porque tien tamañu cero.",
-       "api-error-stashnotloggedin": "Tienes d'aniciar sesión p'atroxar ficheros nel depósitu de carga.",
-       "api-error-stashwrongowner": "El ficheru al qu'intentabes acceder nel depósitu nun te pertenez.",
-       "api-error-stashnosuchfilekey": "La clave de ficheru a la qu'intentabes acceder nel depósitu nun esiste.",
-       "api-error-timeout": "El sirvidor nun respondió nel tiempu esperáu.",
-       "api-error-unclassified": "Hebo un fallu desconocíu",
-       "api-error-unknown-code": "Fallu desconocíu: «$1»",
-       "api-error-unknown-error": "Fallu internu: daqué nun funcionó al tentar xubir el ficheru.",
+       "api-error-stashfailed": "Fallu internu: el sirvidor nun pudo guardar el ficheru temporal.",
        "api-error-unknown-warning": "Avisu desconocíu: «$1».",
        "api-error-unknownerror": "Fallu desconocíu: «$1».",
-       "api-error-uploaddisabled": "Les xubíes tan desactivaes nesta wiki.",
-       "api-error-verification-error": "Esti ficheru pudiera tar corrompíu, o tien una estensión incorreuta.",
-       "api-error-was-deleted": "Anteriormente xubióse y desanicióse dempués un ficheru con esti nome.",
        "duration-seconds": "$1 {{PLURAL:$1|segundu|segundos}}",
        "duration-minutes": "$1 {{PLURAL:$1|minutu|minutos}}",
        "duration-hours": "$1 {{PLURAL:$1|hora|hores}}",
        "usercssispublic": "Atención: les subpáxines CSS nun tendríen de contener datos acutaos porque son visibles pa otros usuarios.",
        "restrictionsfield-badip": "Direición o rangu IP inválidu: $1",
        "restrictionsfield-label": "Rangos d'IP permitíos:",
-       "restrictionsfield-help": "Una única direición IP o rangu CIDR per llinia. P'activar toos, utiliza<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Una única direición IP o rangu CIDR per llinia. P'activar toos, utiliza:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisión $1",
        "pageid": "ID de páxina $1"
 }
index e0ef977..03531a6 100644 (file)
        "about": "Тасуирлау",
        "article": "Мәҡәлә",
        "newwindow": "(яңы биттә)",
-       "cancel": "Ð\91Ó©Ñ\82Ó©Ñ\80Ó©Ñ\80гÓ\99",
+       "cancel": "Ð\9aиÑ\80е Ð°Ð»Ñ\8bÑ\80Ò\93а",
        "moredotdotdot": "Дауамы...",
        "morenotlisted": "Был исемлек тулы түгел",
        "mypage": "Бит",
        "views": "Ҡарауҙар",
        "toolbox": "Ҡоралдар",
        "tool-link-userrights": "{{GENDER:$1|Ҡатнашыусы}} төркөмдәрен үҙгәртергә",
-       "tool-link-userrights-readonly": "{{GENDER:$1|ҡаÑ\82наÑ\88Ñ\8bÑ\83Ñ\81Ñ\8bлаÑ\80}} Ñ\82Ó©Ñ\80көмөн ҡарарға",
+       "tool-link-userrights-readonly": "{{GENDER:$1|ҠаÑ\82наÑ\88Ñ\8bÑ\83Ñ\81Ñ\8b|ҠаÑ\82наÑ\88Ñ\8bÑ\83лаÑ\80}} Ñ\82Ó©Ñ\80көмдÓ\99Ñ\80ен ҡарарға",
        "tool-link-emailuser": "{{GENDER:$1|Ҡатнашыусыға}} хат яҙырға",
        "userpage": "Ҡулланыусы битен ҡарарға",
        "projectpage": "Проект битен ҡарарға",
        "title-invalid-too-long": "Һоралған бит исеме бик оҙон. $1 {{PLURAL:$1|байттан}} артмаҫҡа тейеш.",
        "title-invalid-leading-colon": "Һораған бит башында ярамаған ике нөктә бар.",
        "perfcached": "Был мәғлүмәттәр кэштан алынған, уларҙа һуңғы үҙгәртеүҙәр булмаҫҡа мөмкин. Кэшта иң күбе {{PLURAL:$1|язма}} һаҡлана.",
-       "perfcachedts": "Был мәғлүмәттәр кэштан алынған, ул һуңғы тапҡыр $1 яңыртылды.  Кэшта иң күбе  {{PLURAL:$4|язма}} һаҡлана",
+       "perfcachedts": "Был мәғлүмәттәр кэштан алынған, ул һуңғы тапҡыр $1 яңыртылды.  Кэшта иң күбе $4 {{PLURAL:$4|яҙма}} һаҡлана.",
        "querypage-no-updates": "Был битте яңыртыу хәҙер тыйылған.\nБында күрһәтелгән мәғлүмәттәр яңыртылмаясаҡ.",
        "viewsource": "Сығанаҡты ҡарау",
        "viewsource-title": "$1 битенең сығанаҡ текстын ҡарарға",
        "resetpass_submit": "Серһүҙ ҡуйырға һәм танышырға",
        "changepassword-success": "Серһүҙегеҙ уңышлы үҙгәртелде!",
        "changepassword-throttled": "Һеҙ системаға ҡат-ҡат танылырға тырыштығыҙ.\nТағы бер танылырҙан алда, зинһар, $1 көтөгөҙ.",
-       "botpasswords": "Роботтар серһүҙе.",
+       "botpasswords": "Роботтар серһүҙе",
        "botpasswords-summary": "<em>ПРобот пароле</em> API иҫәп яҙмаһына логин һәм паролһыҙ инергә мөмкинлек бирә. Робот пароле менән ингәндә ҡулланыусы хоҡуғы сикләнгән булыуы мөмкин.\n\nНи өсөн икәнен белмәһәгеҙ, быны эшләмәүегеҙ яҡшыраҡ.",
        "botpasswords-disabled": "Роботтар серһүҙе һүндерелгән.",
        "botpasswords-no-central-id": "Робот серһүҙен ҡулланыу өсөн үҙәк иҫәп яҙмаһына инергә кәрәк.",
        "resetpass_forbidden-reason": "Серһүҙҙәр үҙгәртелә алмай: $1",
        "resetpass-no-info": "Был битте туранан ҡарау өсөн һеҙгә системала танылырға кәрәк.",
        "resetpass-submit-loggedin": "Серһүҙҙе үҙгәртергә",
-       "resetpass-submit-cancel": "Ð\91Ó©Ñ\82Ó©Ñ\80Ó©Ñ\80гÓ\99",
+       "resetpass-submit-cancel": "Ð\9aиÑ\80е Ð°Ð»Ñ\8bÑ\80Ò\93а",
        "resetpass-wrong-oldpass": "Хаталы ваҡытлыса йәки ағымдағы серһүҙ.\nҺеҙ, бәлки, серһүҙегеҙҙе алмаштырғанһығыҙ йәки яңы серһүҙ һоратҡанһығыҙ.",
        "resetpass-recycled": "Үҙегеҙҙекенән айырмалы серһүҙ һайлағыҙ.",
        "resetpass-temp-emailed": "Һеҙ электорон почта аша ебәрелгән ваҡытлыса серһүҙ менән индегеҙ. Инеүҙе башҡарыу өсөн яңы серһүҙ яҙығыҙ.",
        "feedback-useragent": "Браузер:",
        "searchsuggest-search": "{{SITENAME}} эсендә эҙләү",
        "searchsuggest-containing": "эстәлегендә...",
-       "api-error-badaccess-groups": "Һеҙгә был викиға файлдар күсереү рөхсәт ителмәй",
        "api-error-badtoken": "Эске хата: дөрөҫ булмаған токен",
-       "api-error-blocked": "Мөхәррирләү һеҙҙең өсөн бикләнде.",
-       "api-error-copyuploaddisabled": "Был серверҙа URL адрес буйынса йөкләү өҙөлгән",
-       "api-error-duplicate": "Бындай эстәлекле {{PLURAL:$1|файл}}  бар.",
-       "api-error-duplicate-archive": "Сайтта бындай эстәлекле {{PLURAL:$1|башҡа файл}} бар ине инде, ләкин {{PLURAL:$1|1=ул юйылды|улар юйылды}}",
-       "api-error-empty-file": "Һеҙ ебәргән файл буш.",
        "api-error-emptypage": "Яңы буш биттәр яһау тыйыла.",
-       "api-error-fetchfileerror": "Эске хата: файлды күсергән ваҡытта хата китте",
-       "api-error-fileexists-forbidden": "«$1» исемле файл бар һәм өҫтөнә яҙып булмай.",
-       "api-error-fileexists-shared-forbidden": "«$1» исемле файл уртаҡ файлдар һаҡлағысында бар һәм өҫтөнә яҙып булмай.",
-       "api-error-file-too-large": "Һеҙ ебәргән файл үтә ҙур.",
-       "api-error-filename-tooshort": "Файл исеме бик ҡыҫҡа.",
-       "api-error-filetype-banned": "Был файл төрө тыйылған.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|1=тыйылған файл төрө|тыйылған файл төрҙәре}}. Рөхсәт ителгән {{PLURAL:$3|1=файл төрө|файл төрҙәре}} $2.",
-       "api-error-filetype-missing": "Был файлдың ҡушымтаһы юҡ",
-       "api-error-hookaborted": "Һеҙ эшләргә теләгән үҙгәртеүҙәр ҡушымтаны тикшереүсе тарафынан өҙөлдө",
-       "api-error-http": "Эске хата: серверға бәйләнеп булмай.",
-       "api-error-illegal-filename": "Рөхсәт ителмәгән файл исеме.",
-       "api-error-internal-error": "Эске хата: һеҙ викиға йөкләгәнде тикшергән ваҡытта хата китте",
-       "api-error-invalid-file-key": "Эске хата: ваҡытлыса һаҡлағыста файл табылманы",
-       "api-error-missingparam": "Эске хата: мөрәжәғеттең параматрҙары юҡ.",
-       "api-error-missingresult": "Эске хата: күсереү уңышлы булыуын билдәләп булманы.",
-       "api-error-mustbeloggedin": "Файлдарҙы йөкмәтеү өсөн һеҙ сисемаға танышырға тейешһегеҙ.",
-       "api-error-mustbeposted": "Эске хата: мөрәжәғәт HTTP POST адресын талап итә.",
-       "api-error-noimageinfo": "Йөкләү уңышлы тамамланды, әммә сервер файл тураһында бер ниндәйҙә мәғлүмәт бирмәне.",
-       "api-error-nomodule": "Эске хата: тейәү модуле көйләнмәгән.",
-       "api-error-ok-but-empty": "Эске хата: серверҙан яуап юҡ.",
-       "api-error-overwrite": "Булған файлды алыштырыу рөхсәт ителмәй.",
-       "api-error-stashfailed": "Эске хата: сервер ваҡытлыса файлды һаҡлай алманы.",
        "api-error-publishfailed": "Эске хата: сервер ваҡытлыса файлды һаҡлай алманы.",
-       "api-error-stasherror": "Файлы һаҡлағысҡа тейәгән ваҡытта хата китте.",
-       "api-error-stashedfilenotfound": "Ваҡытлыса һаҡлағыстан файлы тейәгән ваҡытта сығанаҡ файл табылманы.",
-       "api-error-stashpathinvalid": "Ваҡытлыса һаҡлағыста урынлашҡан файл юлы дөрөҫ түгел.",
-       "api-error-stashfilestorage": "Файлды һаҡлағысҡа тейәгән ваҡытта хата китте.",
-       "api-error-stashzerolength": "Сервер файлды ваҡытлыса һаҡлағыста һаҡлау алмай, сөнкт оҙонлоғо 0.",
-       "api-error-stashnotloggedin": "Файлды ваҡытлыса һаҡлағысҡа урынлаштырыу өсөн һеҙ системаҡа инергә тейешһегеҙ.",
-       "api-error-stashwrongowner": "Ваҡытлыса һаҡлағыстағы файлда асырға теләнегеҙ, был файл һеҙҙеке түгел",
-       "api-error-stashnosuchfilekey": "Ваҡытлыса һаҡлағыста һеҙ асырға теләгән файлдың асҡысы юҡ.",
-       "api-error-timeout": "Көтөлгән ваҡыт эсендә сервер яуып бирмәне.",
-       "api-error-unclassified": "Билдәһеҙ хата барлыҡҡа килде.",
-       "api-error-unknown-code": "Билдәһеҙ хата: «$1»",
-       "api-error-unknown-error": "Эске хата: файлды йөкләгәндә ниндәйҙер хата китте.",
+       "api-error-stashfailed": "Эске хата: сервер ваҡытлыса файлды һаҡлай алманы.",
        "api-error-unknown-warning": "Билдәһеҙ белдереү: \"$1\".",
        "api-error-unknownerror": "Билдәһеҙ хата: «$1»",
-       "api-error-uploaddisabled": "Был викила файл тейәү мөмкинлеге ябылған.",
-       "api-error-verification-error": "Был файл боҙолған, йәки дөрөҫ булмаған ҡушымтаһы бар.",
        "duration-seconds": "$1 {{PLURAL:$1|1=секунд|секунд}}",
        "duration-minutes": "$1 {{PLURAL:$1|1=минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|1=сәғәт|сәғәт}}",
index c4b4b5c..1aa6e36 100644 (file)
        "expansion-depth-exceeded-warning": "Старонка перавысіла дазволеную глыбіню разгортваньня",
        "parser-unstrip-loop-warning": "Вызначаная пятля unstrip",
        "parser-unstrip-recursion-limit": "Перавышаны ліміт рэкурсіі unstrip ($1)",
-       "converter-manual-rule-error": "Знойдзеная памылка ў ручным правіле моўнага канвэртара",
+       "converter-manual-rule-error": "Знойдзеная памылка ў ручным правіле моўнага канвэртару",
        "undo-success": "Рэдагаваньне можа быць адмененае. Калі ласка, параўнайце адрозьненьні паміж вэрсіямі, каб упэўніцца, што гэта адпаведныя зьмены, а потым запішыце зьмены для сканчэньня рэдагаваньня.",
        "undo-failure": "Рэдагаваньне ня можа быць скасаванае праз канфлікт паміж папярэднімі рэдагаваньнямі.",
        "undo-norev": "Рэдагаваньне ня можа быць адмененае, таму што яно не існуе альбо было выдаленае.",
        "undo-nochange": "Выглядае, што праўка ўжо была адмененая.",
        "undo-summary": "Скасаваньне праўкі $1 {{GENDER:$2|удзельніка|удзельніцы}} [[Special:Contributions/$2|$2]] ([[User talk:$2|гутаркі]])",
-       "undo-summary-username-hidden": "Ð\92Ñ\8dÑ\80Ñ\81Ñ\96Ñ\8f $1 Ñ\81каÑ\81аванаÑ\8f Ñ\81Ñ\85аванÑ\8bм Ñ\83дзелÑ\8cнÑ\96кам",
+       "undo-summary-username-hidden": "СкаÑ\81аванÑ\8cне Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96 $1 Ñ\81Ñ\85аванага Ñ\9eдзелÑ\8cнÑ\96ка",
        "cantcreateaccount-text": "Стварэньне рахункаў з гэтага IP-адрасу ('''$1''') было заблякаванае [[User:$3|$3]].\n\nПрычына блякаваньня пададзеная $3: ''$2''",
        "cantcreateaccount-range-text": "Стварэньне рахункаў з IP-адрасоў у дыяпазоне <strong>$1</strong>, у які ўваходзіць ваш IP-адрас (<strong>$4</strong>), было забароненае {{GENDER:$3|ўдзельнікам|ўдзельніцай}} [[User:$3|$3]].\n\n{{GENDER:$3|Удзельнікам|Удзельніцай}} $3 была пададзеная наступная прычына: <em>$2</em>.",
        "viewpagelogs": "Паказаць журналы падзеяў для гэтай старонкі",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (глядзіце таксама [[Special:NewPages|сьпіс новых старонак]])",
        "recentchanges-submit": "Паказаць",
        "rcfilters-activefilters": "Актыўныя фільтры",
+       "rcfilters-restore-default-filters": "Аднавіць фільтры па змоўчаньні",
        "rcfilters-search-placeholder": "Фільтар апошніх зьменаў (праглядзець або пачніце друкаваць)",
        "rcfilters-invalid-filter": "Няслушны фільтар",
        "rcfilters-filterlist-title": "Фільтры",
        "rcfilters-filterlist-noresults": "Фільтры ня знойдзеныя",
+       "rcfilters-filtergroup-registration": "Рэгістрацыя ўдзельнікаў",
+       "rcfilters-filter-registered-label": "Зарэгістраваныя",
+       "rcfilters-filter-registered-description": "Рэдактары, якія ўвайшлі ў сыстэму.",
+       "rcfilters-filter-unregistered-label": "Незарэгістраваныя",
+       "rcfilters-filter-unregistered-description": "Рэдактары, якія не ўвайшлі ў сыстэму",
        "rcfilters-filtergroup-authorship": "Рэдагаваць аўтарства",
        "rcfilters-filter-editsbyself-label": "Вашыя праўкі",
        "rcfilters-filter-editsbyself-description": "Праўкі, зробленыя вамі",
        "rcfilters-filter-editsbyother-label": "Праўкі іншых удзельнікаў",
-       "rcfilters-filter-editsbyother-description": "Праўкі, зробленыя іншымі ўдзельнікамі (ня вамі)",
-       "rcfilters-filtergroup-userExpLevel": "Узровень досьведу ўдзельнікаў",
+       "rcfilters-filter-editsbyother-description": "Праўкі, зробленыя іншымі ўдзельнікамі (ня вамі).",
+       "rcfilters-filtergroup-userExpLevel": "Узровень досьведу (толькі для зарэгістраваных удзельнікаў)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Навічкі",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Ð\97Ñ\83Ñ\81Ñ\96м Ð½Ð¾Ð²Ñ\8bÑ\8f Ñ\80Ñ\8dдакÑ\82аÑ\80Ñ\8b: Ð¼енш за 10 правак і 4 дні актыўнасьці.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Ð\9cенш за 10 правак і 4 дні актыўнасьці.",
        "rcfilters-filter-userExpLevel-learner-label": "Вучні",
        "rcfilters-filter-userExpLevel-learner-description": "Болей дзён актыўнасьці і правак, чым у «навічкоў», але меней чым у «дасьведчаных удзельнікаў».",
        "rcfilters-filter-userExpLevel-experienced-label": "Дасьведчаныя ўдзельнікі",
        "rcfilters-filter-userExpLevel-experienced-description": "Больш за 30 дзён актыўнасьці і 500 правак.",
+       "rcfilters-filtergroup-automated": "Аўтаматычны ўнёсак",
+       "rcfilters-filter-bots-label": "Робат",
+       "rcfilters-filter-bots-description": "Праўкі, зробленыя з дапамогай аўтаматызаваных інструмэнтаў.",
+       "rcfilters-filter-humans-label": "Чалавек (ня робат)",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з <strong>$4 $3</strong> (да <strong>$1</strong> на старонку).",
        "rclistfrom": "Паказаць зьмены з $2 $3",
        "rcshowhideminor": "$1 дробныя праўкі",
        "apisandbox-sending-request": "Адпраўка API-запыту…",
        "apisandbox-loading-results": "Атрымліваем API-вынікі…",
        "apisandbox-results-error": "Адбылася памылка пры загрузцы адказу на API-запыт: $1.",
-       "apisandbox-request-params-json": "JSON-парамэтры:",
        "apisandbox-request-url-label": "URL-адрас запыту:",
        "apisandbox-request-time": "Час запыту: {{PLURAL:$1|$1 мс}}",
        "apisandbox-results-fixtoken": "Выпраўце токен і паўтарыце адпраўку",
        "feedback-useragent": "Агент удзельніка:",
        "searchsuggest-search": "Пошук у {{GRAMMAR:месны|{{SITENAME}}}}",
        "searchsuggest-containing": "утрымлівае...",
-       "api-error-autoblocked": "Ваш IP-адрас быў аўтаматычна заблякаваны, бо ён быў выкарыстаны заблякаваным удзельнікам.",
-       "api-error-badaccess-groups": "У Вас няма дазволу загружаць файлы ў гэтую вікі.",
        "api-error-badtoken": "Унутраная памылка: няслушны ключ.",
-       "api-error-blocked": "Рэдагаваньне было для вас заблякаванае.",
-       "api-error-copyuploaddisabled": "Загрузка з URL-адрасу забароненая на гэтым сэрвэры.",
-       "api-error-duplicate": "На сайце ўжо {{PLURAL:$1|1=існуе іншы файл|існуюць іншыя файлы}} з такім жа зьместам.",
-       "api-error-duplicate-archive": "Раней на сайце {{PLURAL:$1|1=быў файл|былі файлы}} з дакладна такім жа зьместам, але {{PLURAL:$1|1=ён быў выдалены|яны былі выдаленыя}}.",
-       "api-error-empty-file": "Дасланы Вамі файл быў пусты.",
        "api-error-emptypage": "Стварэньне новых пустых старонак забаронена.",
-       "api-error-fetchfileerror": "Унутраная памылка: падчас атрыманьня файла штосьці здарылася.",
-       "api-error-fileexists-forbidden": "Файл з назвай «$1» ужо існуе і ня можа быць перазапісаны.",
-       "api-error-fileexists-shared-forbidden": "Файл з назвай «$1» ужо існуе ў супольным сховішчы файлаў і ня можа быць перазапісаны.",
-       "api-error-file-too-large": "Дасланы Вамі файл занадта вялікі.",
-       "api-error-filename-tooshort": "Назва файла занадта кароткая.",
-       "api-error-filetype-banned": "Гэты тып файла забаронены.",
-       "api-error-filetype-banned-type": "$1 — {{PLURAL:$4|1=забаронены тып файлаў|забароненыя тыпы файлаў}}. {{PLURAL:$3|1=Дазволены тып файлаў|Дазволеныя тыпы файлаў}}: $2.",
-       "api-error-filetype-missing": "У файла няма пашырэньня.",
-       "api-error-hookaborted": "Прапанаваная Вамі зьмена была адхіленая апрацоўшчыкам пашырэньня.",
-       "api-error-http": "Унутраная памылка: немагчыма далучыцца да сэрвэра.",
-       "api-error-illegal-filename": "Недазволеная назва файла.",
-       "api-error-internal-error": "Унутраная памылка: падчас апрацоўкі Вашага файла штосьці здарылася.",
-       "api-error-invalid-file-key": "Унутраная памылка: ня быў знойдзены часовы файл.",
-       "api-error-missingparam": "Унутраная памылка: запыт бракуе парамэтраў.",
-       "api-error-missingresult": "Унутраная памылка: немагчыма вызначыць, ці пасьпяхова зробленае капіяваньне.",
-       "api-error-mustbeloggedin": "Для загрузкі файлаў неабходна ўвайсьці ў сыстэму.",
-       "api-error-mustbeposted": "Памылка гэтага праграмнага забесьпячэньня; яно не выкарыстоўвае слушны HTTP-мэтад.",
-       "api-error-noimageinfo": "Файл загружаны, але сэрвэр ня даў пра яго ніякай інфармацыі.",
-       "api-error-nomodule": "Унутраная памылка: ня выбраны модуль загрузкі.",
-       "api-error-ok-but-empty": "Унутраная памылка: няма адказу ад сэрвэра.",
-       "api-error-overwrite": "Замена існуючага файла забароненая.",
-       "api-error-ratelimited": "Вы спрабуеце загрузіць за кароткі час болей файлаў, чым дазваляе вікі.\nКалі ласка, паспрабуйце яшчэ раз празь некалькі хвілінаў.",
-       "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».",
-       "api-error-unknown-error": "Унутраная памылка: падчас загрузкі файла здарылася штосьці невядомае.",
+       "api-error-stashfailed": "Унутраная памылка: сэрвэр ня змог захаваць часовы файл.",
        "api-error-unknown-warning": "Невядомае папярэджаньне: «$1».",
        "api-error-unknownerror": "Невядомая памылка: «$1».",
-       "api-error-uploaddisabled": "Загрузка ў гэтую вікі адключаная.",
-       "api-error-verification-error": "Гэты файл можа быць пашкоджаны, ці мае няслушнае пашырэньне.",
-       "api-error-was-deleted": "Файл з такой назвай ужо загружаўся раней і быў потым выдалены.",
        "duration-seconds": "$1 {{PLURAL:$1|сэкунда|сэкунды|сэкундаў}}",
        "duration-minutes": "$1 {{PLURAL:$1|хвіліна|хвіліны|хвілінаў}}",
        "duration-hours": "$1 {{PLURAL:$1|гадзіна|гадзіны|гадзінаў}}",
index 0657486..e9301d8 100644 (file)
        "feedback-thanks-title": "Дзякуем!",
        "searchsuggest-search": "Шукаць у {{GRAMMAR:месны|{{SITENAME}}}}",
        "searchsuggest-containing": "змяшчае...",
-       "api-error-badaccess-groups": "У Вас няма дазволу загружаць файлы ў гэтую вікі.",
        "api-error-badtoken": "Унутраная памылка: няслушны ключ.",
-       "api-error-copyuploaddisabled": "Загрузка з URL-адраса забаронена на гэтым серверы.",
-       "api-error-duplicate": "Ужо {{PLURAL:$1|існуе іншы файл|існуюць іншыя файлы}} з такім жа зместам.",
-       "api-error-duplicate-archive": "Раней на сайце {{PLURAL:$1|ўжо быў файл|былі файлы}} з дакладна такім жа зместам, але {{PLURAL:$1|ён быў выдалены|яны былі выдаленыя}}.",
-       "api-error-empty-file": "Дасланы Вамі файл быў пусты.",
        "api-error-emptypage": "Стварэнне новых пустых старонак забаронена.",
-       "api-error-fetchfileerror": "Унутраная памылка: падчас атрымання файла штосьці здарылася.",
-       "api-error-fileexists-forbidden": "Файл з назвай \"$1\" ужо ёсць і не можа быць перапісаны.",
-       "api-error-fileexists-shared-forbidden": "Файл з назвай \"$1\" ужо ёсць у супольным сховішчы файлаў, ён не можа быць перапісаны.",
-       "api-error-file-too-large": "Дасланы Вамі файл занадта вялікі.",
-       "api-error-filename-tooshort": "Імя файла занадта кароткае.",
-       "api-error-filetype-banned": "Гэты тып файлаў забаронены.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|належыць да недазволенага тыпу файлаў|належаць да недазволеных тыпаў файлаў}}. Пералік дазволеных тыпаў складаецца з {{PLURAL:$3|тыпу|тыпаў}}: $2.",
-       "api-error-filetype-missing": "У файла няма пашырэння.",
-       "api-error-hookaborted": "Прапанаванае вамі змяненне было адменена ў апрацоўшчыку пашырэння.",
-       "api-error-http": "Унутраная памылка: немагчыма далучыцца да сервера.",
-       "api-error-illegal-filename": "Імя файла не дапускаецца.",
-       "api-error-internal-error": "Унутраная памылка: падчас апрацоўкі Вашага файла штосьці здарылася.",
-       "api-error-invalid-file-key": "Унутраная памылка: не быў знойдзены часовы файл.",
-       "api-error-missingparam": "Унутраная памылка: запыт бракуе параметраў.",
-       "api-error-missingresult": "Унутраная памылка: немагчыма вызначыць, ці паспяхова зробленае капіяванне.",
-       "api-error-mustbeloggedin": "Для загрузкі файлаў неабходна ўвайсці ў сістэму.",
-       "api-error-mustbeposted": "Памылка гэтага праграмнага забеспячэння; яно не выкарыстоўвае слушны HTTP-метад.",
-       "api-error-noimageinfo": "Файл загружаны, але сервер не даў пра яго ніякай інфармацыі.",
-       "api-error-nomodule": "Унутраная памылка: не выбраны модуль загрузкі.",
-       "api-error-ok-but-empty": "Унутраная памылка: няма адказу ад сервера.",
-       "api-error-overwrite": "Замена існуючага файла не дапускаецца.",
-       "api-error-stashfailed": "Унутраная памылка: сервер не змог захаваць часовы файл.",
        "api-error-publishfailed": "Унутраная памылка: сервер не змог апублікаваць тымчасовы файл.",
-       "api-error-stasherror": "У час укладання файла ў сховішча здарылася памылка.",
-       "api-error-timeout": "Сервер не адказаў у чаканы тэрмін.",
-       "api-error-unclassified": "Узнікла невядомая памылка",
-       "api-error-unknown-code": "Невядомая памылка: «$1».",
-       "api-error-unknown-error": "Унутраная памылка: падчас загрузкі файла здарылася штосьці невядомае.",
+       "api-error-stashfailed": "Унутраная памылка: сервер не змог захаваць часовы файл.",
        "api-error-unknown-warning": "Невядомае папярэджанне: $1",
        "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|гадзіна|гадзіны|гадзін}}",
index 2f21fd5..25ac402 100644 (file)
        "feedback-useragent": "ব্যবহারকারী এজেন্ট:",
        "searchsuggest-search": "{{SITENAME}} অনুসন্ধান",
        "searchsuggest-containing": "যা আছে...",
-       "api-error-autoblocked": "আপনার আইপি ঠিকানাকে স্বয়ংক্রিয়ভাবে বাধা দেয়া হয়েছে কারণ এটি একজন অবরুদ্ধ ব্যবহারকারী দ্বারা ব্যবহৃত হয়েছিল।",
-       "api-error-badaccess-groups": "আপনার এই উইকিতে ফাইল আপলোডের অনুমতি নেই।",
        "api-error-badtoken": "অভ্যন্তরীণ ত্রুটি: খারাপ টোকেন।",
-       "api-error-blocked": "আপনাকে সম্পাদনা করা থেকে বাধা দেয়া হয়েছে।",
-       "api-error-copyuploaddisabled": "এই সার্ভারে ইউআরএল-এর মাধ্যমে আপলোড করার সুবিধা নিস্ক্রিয় রয়েছে।",
-       "api-error-duplicate": "ইতোমধ্যে এই সাইটে একই রকমের বিষয় সমৃদ্ধ {{PLURAL:$1|অন্য ফাইল|কিছু অন্য ফাইল}} রয়েছে।",
-       "api-error-duplicate-archive": "একই নাম ও বিষয়বস্তু বিশিষ্ট {{PLURAL:$1|অপর একটি ফাইল|কয়েকটি ফাইল}} পূর্বে এই উইকিতে ছিলো, এবং {{PLURAL:$1|সেটিকে|সেগুলোকে}} অপসারণ করা হয়েছে।",
-       "api-error-empty-file": "আপনার জমাকৃত ফাইলটি খালি।",
        "api-error-emptypage": "নতুন পাতা তৈরি হচ্ছে, খালি পাতা গ্রহণযোগ্য নয়।",
-       "api-error-fetchfileerror": "অভ্যন্তরীণ ত্রুটি: ফাইল নিয়ে আসার সময় কোনো সমস্যা হয়েছিলো।",
-       "api-error-fileexists-forbidden": "\"$1\" নামের একটি ফাইল রয়েছে, প্রতিস্থাপন সম্ভব নয়।",
-       "api-error-fileexists-shared-forbidden": "\"$1\" নামে শেয়ার্ড রিপোজিরীতে একটি ফাইল রয়েছে, প্রতিস্থাপন সম্ভব নয়।",
-       "api-error-file-too-large": "আপনার জমাকৃত ফাইলটি অনেক বড়।",
-       "api-error-filename-tooshort": "এই ফাইল নামটি খুবই ছোট।",
-       "api-error-filetype-banned": "এই ধরনের ফাইল নিষিদ্ধ।",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|ফাইল ধরনটি অনুমোদিত নয়|ফাইল ধরনগুলো অনুমোদিত নয়}}। অনুমোদিত {{PLURAL:$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হল $2।",
-       "api-error-filetype-missing": "এই ফাইলটির কোনো এক্সটেনশন নেই।",
-       "api-error-hookaborted": "যে পরিবর্তনটি আপনি করার চেষ্টা করেছিলেন তা এক্সটেনশন হুক দ্বারা বাতিলকৃত হয়েছে।",
-       "api-error-http": "অভ্যন্তরীণ ত্রুটি: সার্ভারে সংযোগ প্রদান করা সম্ভব হচ্ছে না।",
-       "api-error-illegal-filename": "ফাইলের এই নামটি গ্রহণযোগ্য নয়।",
-       "api-error-internal-error": "অভ্যন্তরীণ ত্রুটি: এই উইকিতে আপনার আপলোড প্রক্রিয়াকরণ করার সময় কোনো ত্রুটি দেখা দিয়েছে।",
-       "api-error-invalid-file-key": "অভ্যন্তরীণ ত্রুটি: অস্থায়ী সংরক্ষণশালায় ফাইলটি খুঁজে পাওয়া যায়নি।",
-       "api-error-missingparam": "অভ্যন্তরীণ ত্রুটি: অনুরোধে কিছু প্যারামিটারের ঘাটতি রয়েছে।",
-       "api-error-missingresult": "অভ্যন্তরীণ ত্রুটি: সফলভাবে অনুলিপি করা হয়েছে কিনা তা নিশ্চিত করা সম্ভব হয়নি।",
-       "api-error-mustbeloggedin": "ফাইল আপলোড করার জন্য আপনাকে অবশ্যই এই উইকিতে প্রবেশ করতে হবে।",
-       "api-error-mustbeposted": "অভ্যন্তরীণ ত্রুটি: এই অনুরোধের জন্য এইচটিটিপি পোস্ট প্রয়োজন।",
-       "api-error-noimageinfo": "আপলোড সফল হয়েছে, কিন্তু ফাইলটি সম্পর্কে সার্ভার কোন তথ্য প্রদান করে নি।",
-       "api-error-nomodule": "অভ্যন্তরীণ ত্রুটি: কোন আপলোড মডিউল সেট করা হয়নি।",
-       "api-error-ok-but-empty": "অভ্যন্তরীণ ত্রুটি: সার্ভার হতে কোন সাড়া পাওয়া যাচ্ছে না।",
-       "api-error-overwrite": "ইতিমধ্যেই রয়েছে এমন কোনো ফাইলের প্রতিস্থাপন গ্রহণযোগ্য নয়।",
-       "api-error-stashfailed": "অভ্যন্তরীণ ত্রুটি: সার্ভার অস্থায়ী ফাইলটি সংরক্ষণ করতে ব্যর্থ হয়েছে।",
        "api-error-publishfailed": "অভ্যন্তরীন ত্রুটি: সার্ভার অস্থায়ী ফাইলটি প্রকাশ করতে ব্যর্থ হয়েছে।",
-       "api-error-stasherror": "স্ট্যাশে আপলোডের সময় চিত্র আপলোডের সময় একটি সমস্যা দেখা দিয়েছে।",
-       "api-error-stashfilestorage": "স্ট্যাশে ফাইল সংরক্ষণের সময় একটি ত্রুটি হয়েছে।",
-       "api-error-timeout": "কাঙ্খিত সময়ের মধ্যে সার্ভারের কোন সাড়া পাওয়া যায়নি।",
-       "api-error-unclassified": "একটি অজানা ত্রুটি দেখা দিয়েছে",
-       "api-error-unknown-code": "অজানা ত্রুটি: \"$1\"",
-       "api-error-unknown-error": "অভ্যন্তরীণ ত্রুটি: আপনার ফাইলটি আপলোড করার সময় কিছু সমস্যা হয়েছে।",
+       "api-error-stashfailed": "অভ্যন্তরীণ ত্রুটি: সার্ভার অস্থায়ী ফাইলটি সংরক্ষণ করতে ব্যর্থ হয়েছে।",
        "api-error-unknown-warning": "অজানা সতর্কীকরণ: $1",
        "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|ঘণ্টা}}",
index 139091a..5e61cbc 100644 (file)
        "searcharticle": "Mont",
        "history": "Istor ar bajenn",
        "history_short": "Istor",
+       "history_small": "istor",
        "updatedmarker": "kemmet abaoe ma zaol-sell diwezhañ",
        "printableversion": "Stumm da voullañ",
        "permalink": "Chomlec'h ar stumm-mañ",
        "pool-timeout": "Aet eur dreist d'an termen gortoz evit ar stankadenn",
        "pool-queuefull": "Soulgarget eo ar servijerioù",
        "pool-errorunknown": "Fazi dianav",
+       "pool-servererror": "N'eo ket hegerz ar servij kontañ ($1).",
        "poolcounter-usage-error": "Fazi implij : $1",
        "aboutsite": "Diwar-benn {{SITENAME}}",
        "aboutpage": "Project:Diwar-benn",
        "content-model-css": "CSS",
        "content-json-empty-object": "Elfenn goullo",
        "content-json-empty-array": "Taolenn c'houllo",
+       "deprecated-self-close-category": "Pajennoù a ra gant tikedennoù HTML emserriñ direizh",
        "expensive-parserfunction-warning": "Diwallit : Re a c'halvoù koustus e-keñver an arc'hwelioù parser zo gant ar bajenn-mañ.\n\nDleout a rafe bezañ nebeutoc'h eget $2 {{PLURAL:$2|galv|galv}}, ha {{PLURAL:$1|$1 galv|$1 galv}} zo.",
        "expensive-parserfunction-category": "Pagjennoù enno re a c'halvoù koustus e-keñver an arc'hwelioù parser.",
        "post-expand-template-inclusion-warning": "Diwallit : re a batromoù zo war ar bajenn-mañ.\nLod anezho a vo lakaet a-gostez.",
        "mergehistory-empty": "N'haller ket kendeuziñ stumm ebet.",
        "mergehistory-done": "Kendeuzet ez eus bet $3 {{PLURAL:$3|stumm|stumm}} eus $1 e [[:$2]].",
        "mergehistory-fail": "Dibosupl kendeuziñ an istorioù. Gwiriit ar bajenn hag arventennoù an deiziadoù.",
+       "mergehistory-fail-bad-timestamp": "Merk amzer direizh.",
+       "mergehistory-fail-invalid-source": "Pajenn darzh direizh.",
+       "mergehistory-fail-invalid-dest": "Pajenn vuket direizh.",
        "mergehistory-fail-toobig": "Ne c'haller ket kendeuziñ an istorioù o vezañ ma vefe mont en tu all d'ar harzh a $1 reizhadenn da zilec'hiañ.",
        "mergehistory-no-source": "N'eus ket eus ar bajenn orin $1.",
        "mergehistory-no-destination": "N'eus ket eus ar bajenn dal $1.",
        "prefs-rc": "Kemmoù diwezhañ",
        "prefs-watchlist": "Roll evezhiañ",
        "prefs-editwatchlist": "Kemmañ ar roll evezhiañ",
+       "prefs-editwatchlist-edit": "Gwelet ha lemel titloù a-ziwar ho roll evezhiañ",
        "prefs-editwatchlist-raw": "Kemmañ ar roll evezhiañ (mod diginkl)",
        "prefs-editwatchlist-clear": "Diverkañ ho roll evezhiañ",
        "prefs-watchlist-days": "Niver a zevezhioù da ziskouez er rollad evezhiañ :",
        "grouppage-bot": "{{ns:project}}:Botoù",
        "grouppage-sysop": "{{ns:project}}:Merourien",
        "grouppage-bureaucrat": "{{ns:project}}: Burevidi",
-       "grouppage-suppress": "{{ns:project}}: Dindan evezh",
+       "grouppage-suppress": "{{ns:project}}: Diverkerien",
        "right-read": "Lenn ar pajennoù",
        "right-edit": "Kemmañ ar pajennoù",
        "right-createpage": "Krouiñ pajennoù (estreget pajennoù kaozeal)",
        "right-createtalk": "Krouiñ pajennoù kaozeal",
        "right-createaccount": "Krouiñ kontoù implijer nevez",
+       "right-autocreateaccount": "Kevreañ ent emgefre gant ur gont implijer diavaez",
        "right-minoredit": "Merkañ ar c'hemmoù evel kemmoù dister",
        "right-move": "Adenvel pajennoù",
        "right-move-subpages": "Dilec'hiañ ar pajennoù gant o ispajennoù",
        "rcfilters-invalid-filter": "Sil direizh",
        "rcfilters-filterlist-title": "Siloù",
        "rcfilters-filterlist-noresults": "N'eus bet kavet sil ebet",
+       "rcfilters-filter-registered-label": "Marilhet",
+       "rcfilters-filter-unregistered-label": "Divarilh",
+       "rcfilters-filter-unregistered-description": "Aozerien n'int ket kevreet.",
        "rcfilters-filter-editsbyself-label": "Kemmet ganeoc'h",
        "rcfilters-filter-editsbyself-description": "Kemmet ganeoc'h",
        "rcfilters-filter-editsbyother-label": "Kemmet gant tud all",
        "rcfilters-filter-userExpLevel-learner-label": "Deskarded",
        "rcfilters-filter-userExpLevel-experienced-label": "Implijerien arroutet",
        "rcfilters-filter-userExpLevel-experienced-description": "Ouzhpenn 30 devezh oberiantiz ha 500 kemm.",
+       "rcfilters-filter-bots-label": "Robot",
+       "rcfilters-filter-bots-description": "Kemmoù graet gant ostilhoù emgefre.",
+       "rcfilters-filter-humans-label": "Den (ket ur robot)",
+       "rcfilters-filter-minor-label": "Kemmoù dister",
+       "rcfilters-filtergroup-changetype": "Seurt kemm",
+       "rcfilters-filter-categorization-label": "Kemmoù rummad",
        "rcnotefrom": "Setu aze {{PLURAL:$5|ar c'hemm|ar c'hemmoù}} c'hoarvezet abaoe an <strong>$3, $4</strong> (<strong>$1</strong> d'ar muiañ).",
        "rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an/ar $3 $2",
        "rcshowhideminor": "$1 ar c'hemmoù dister",
        "apisandbox-dynamic-parameters-add-label": "Ouzhpennañ un arventenn:",
        "apisandbox-dynamic-parameters-add-placeholder": "Anv an arventenn",
        "apisandbox-results": "Disoc'hoù",
-       "apisandbox-request-params-json": "Arventennoù JSON :",
        "apisandbox-request-url-label": "Goulenn URL :",
        "apisandbox-request-time": "Pad ar goulenn: $1",
        "apisandbox-continue": "Kenderc'hel",
        "feedback-thanks-title": "Trugarez !",
        "searchsuggest-search": "Klask e {{SITENAME}}",
        "searchsuggest-containing": "ennañ...",
-       "api-error-badaccess-groups": "N'oc'h ket aotreet da enporzhiañ restroù war ar wiki-mañ.",
        "api-error-badtoken": "Fazi diabarzh : \"jedouer\" fall.",
-       "api-error-copyuploaddisabled": "Diweredekaet eo an enporzhioù dre URL war ar servijer-mañ.",
-       "api-error-duplicate": "Bez' {{PLURAL:$1|ez eus restr all|restr all}} gant an hevelep danvez war al lec'hienn-mañ c'hoazh",
-       "api-error-duplicate-archive": "Bez' e oa {{PLURAL:$1|ur restr all|restroù all}} c'hoazh enno an hevelep danvez, nemet {{PLURAL:$1|eo bet diverket|int bet diverket}}.",
-       "api-error-empty-file": "Ar restr hoc'h eus roet a oa goullo.",
        "api-error-emptypage": "N'eo ket aotreet krouiñ pajennoù goullo.",
-       "api-error-fetchfileerror": "Fazi diabarzh : aet ez eus un dra bennak a-dreuz en ur glask adtapout ar restr.",
-       "api-error-fileexists-forbidden": "Bez' ez eus c'hoazh eus ur restr anvet \"$1\" ha n'hall ket bezañ friket.",
-       "api-error-fileexists-shared-forbidden": "Bez' ez eus c'hoazh eus ur restr anvet \"$1\" er c'havlec'h kenrannañ restroù ha n'hall ket bezañ friket anezhi.",
-       "api-error-file-too-large": "Ar restr hoc'h eus roet a oa re vras.",
-       "api-error-filename-tooshort": "Re verr eo anv ar restr.",
-       "api-error-filetype-banned": "Difennet eo ar seurt restroù",
-       "api-error-filetype-banned-type": "N'eo ket $1{{PLURAL:$4|ur seurt restr aotreet | seurtoù restroù aotreet}}. $2 zo {{PLURAL:$3|ar seurt restroù|ar seurtoù restroù}} degemeret.?",
-       "api-error-filetype-missing": "Un astenn a vank d'ar restr.",
-       "api-error-hookaborted": "Ar c'hemm hoc'h eus klasket degas zo bet harzet gant ur c'hrog astenn.",
-       "api-error-http": "Fazi diabarzh : dibosupl kevreañ d'ar servijer.",
-       "api-error-illegal-filename": "N'eo ket aotreet anv ar restr.",
-       "api-error-internal-error": "Fazi diabarzh : aet ez eus un dra bennak a dreuz en ur dretiñ hoc'h enporzhiadenn war ar wiki.",
-       "api-error-invalid-file-key": "Fazi diabarzh : n'eo ket bet kavet ar restr er stokañ da c'hortoz.",
-       "api-error-missingparam": "Fazi diabarzh : Arventennoù a vank er reked.",
-       "api-error-missingresult": "Fazi diabarzh : dibosupl termeniñ hag eilet eo bet an traoù ervat.",
-       "api-error-mustbeloggedin": "Ret eo deoc'h bezañ kevreet evit pellgargañ restroù.",
-       "api-error-mustbeposted": "Un draen a zo er poellad-mañ ; ne implij ket an hentenn HTTP ret.",
-       "api-error-noimageinfo": "Kaset eo bet ar pellgargañ ervat met n'eus ket bet roet tamm titour ebet deomp diwar-benn ar restr gant ar servijer",
-       "api-error-nomodule": "Fazi diabarzh : tamm modulenn enporzhiañ ebet.",
-       "api-error-ok-but-empty": "Fazi diabarzh : respont ebet a-berzh ar servijer.",
-       "api-error-overwrite": "N'eo ket aotreet frikañ ur restr zo anezhi c'hoazh.",
-       "api-error-stashfailed": "Fazi diabarzh : dibosupl d'ar servijer enrollañ ar restr padennek.",
        "api-error-publishfailed": "Fazi diabarzh : dibosupl d'ar servijer embann ar restr padennek.",
-       "api-error-timeout": "N'eo ket bet ar servijer evit respont en termen lakaet.",
-       "api-error-unclassified": "C'hoarvezet ez eus ur gudenn dianav.",
-       "api-error-unknown-code": "Fazi dianav : \"$1\"",
-       "api-error-unknown-error": "Fazi diabarzh : aet ez eus un dra bennak a-dreuz en ur glask enporzhiañ ho restr.",
+       "api-error-stashfailed": "Fazi diabarzh : dibosupl d'ar servijer enrollañ ar restr padennek.",
        "api-error-unknown-warning": "Kemenn diwall dianav : $1",
        "api-error-unknownerror": "Fazi dianav : \"$1\".",
-       "api-error-uploaddisabled": "Diweredekaat eo an enporzh war ar wiki-mañ.",
-       "api-error-verification-error": "Pe eo brein ar restr pe eo fall an astenn anezhi.",
        "duration-seconds": "$1 {{PLURAL:$1|eilenn|eilenn}}",
        "duration-minutes": "$1 {{PLURAL:$1|munut|munut}}",
        "duration-hours": "($1 {{PLURAL:$1|eurvezh|eurvezh}})",
index a29d90a..2a17f15 100644 (file)
        "badsig": "Loš sirovi potpis.\nProvjerite HTML tagove.",
        "badsiglength": "Vaš potpis je predug.\nMora biti manji od $1 {{PLURAL:$1|znaka|znaka|znakova}}.",
        "yourgender": "Kako želite da se predstavite?",
-       "gender-unknown": "Kad vas spominje, softver će pokušati koristiti srednji rod kad god je to moguće",
+       "gender-unknown": "Kad Vas spominje, softver će pokušati izbjegavati rod kad god je to moguće",
        "gender-male": "On uređuje wiki stranice",
        "gender-female": "Ona uređuje wiki stranice",
        "prefs-help-gender": "Postavljanje ovih podešavanja nije obavezno.\nSoftver koristi ove vrijednosti za vaše naslovljanje i ispravke gramatičkog roda u porukama softvera. Ova će informacija biti javna.",
        "ntransclusions": "koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "specialpage-empty": "Nema rezultata za ovaj izvještaj.",
        "lonelypages": "Siročad",
-       "lonelypagestext": "Slijedeće stranice nemaju linkove na ostalim stranicama na ovoj {{SITENAME}}.",
+       "lonelypagestext": "Sljedeće stranice nisu povezane niti su uključene transkluzijom u druge stranice na {{GRAMMAR:dativ|{{SITENAME}}}}.",
        "uncategorizedpages": "Nekategorisane stranice",
        "uncategorizedcategories": "Nekategorisane kategorije",
        "uncategorizedimages": "Slike bez kategorije",
        "pageinfo-category-files": "Broj datoteka",
        "markaspatrolleddiff": "Označi kao patrolirano",
        "markaspatrolledtext": "Označi stranicu kao patroliranu",
+       "markaspatrolledtext-file": "Označi ovu verziju datoteke kao patroliranu",
        "markedaspatrolled": "Označeno kao patrolirano",
        "markedaspatrolledtext": "Izabrana revizija [[:$1]] je bila označena kao patrolirana.",
        "rcpatroldisabled": "Patroliranje nedavnih izmjena onemogućeno",
        "autoredircomment": "Preusmjereno na [[$1]]",
        "autosumm-new": "Nova stranica: $1",
        "autosumm-newblank": "Napravljena prazna stranica",
-       "size-bytes": "$1 B",
+       "size-bytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
        "size-kilobytes": "$1 KB",
        "size-megabytes": "$1 MB",
        "size-gigabytes": "$1 GB",
        "feedback-useragent": "Korisnički agent:",
        "searchsuggest-search": "Pretraži {{GRAMMAR:akuzativ|{{SITENAME}}}}",
        "searchsuggest-containing": "sadrži...",
-       "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
        "api-error-badtoken": "Unutrašnja greška: token nije ispravan.",
-       "api-error-copyuploaddisabled": "Postavljanja putem URL-a su onemogućena na ovom serveru.",
-       "api-error-duplicate": "Već postoji {{PLURAL:$1|druga datoteka|druge datoteke}} na ovoj stranici s istim sadržajem.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Postojala je druga datoteka|Postojale su neke druge datoteke}} na sajtu sa istim sadržajem, ali {{PLURAL:$1|je obrisana|su obrisane}}.",
-       "api-error-empty-file": "Datoteka koju ste poslali je bila prazna.",
        "api-error-emptypage": "Stvaranje novih praznih stranica nije dozvoljeno.",
-       "api-error-fetchfileerror": "Unutrašnja greška: pojavio se neki problem pri dobijanju podataka o datoteci.",
-       "api-error-fileexists-forbidden": "Datoteka s imenom \"$1\" već postoji i ne može biti zamijenjena.",
-       "api-error-fileexists-shared-forbidden": "Datoteka s imenom \"$1\" već postoji u zajedničkom spremištu i ne može biti prepisana.",
-       "api-error-file-too-large": "Datoteka koju ste poslali je bila prevelika.",
-       "api-error-filename-tooshort": "Ime datoteke je prekratko.",
-       "api-error-filetype-banned": "Ova vrsta datoteke je zabranjena.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nije dopušteni vrsta datoteke|su nedopušteni vrste datoteke|su nedopušteni vrste datoteka}}. {{PLURAL:$3|Dopuštena vrsta datoteke je|Dopuštene vrste datoteka su}} $2.",
-       "api-error-filetype-missing": "Datoteci nedostaje nastavak.",
-       "api-error-hookaborted": "Izmjena koji ste pokušali načiniti je obustavljena preko kuke proširenja.",
-       "api-error-http": "Unutrašnja greška: ne može se spojiti na server.",
-       "api-error-illegal-filename": "Ime datoteke nije dopušteno.",
-       "api-error-internal-error": "Unutrašnja greška: pojavio se neki problem sa obradom vašeg postavljanja na wiki.",
-       "api-error-invalid-file-key": "Unutrašnja greška: datoteka nije pronađena u privremenom skladištu.",
-       "api-error-missingparam": "Unutrašnja greška: nedostaju parametri u zahtjevu.",
-       "api-error-missingresult": "Unutrašnja greška: ne može se otkriti da li je kopiranje uspjelo.",
-       "api-error-mustbeloggedin": "Morate biti prijavljeni da biste postavljali datoteke.",
-       "api-error-mustbeposted": "Postoji greška u ovom softveru; ne koristi pravilan HTTP metod.",
-       "api-error-noimageinfo": "Postavljanje je uspjelo, ali server nam nije dao nikakvu informaciju o datoteci.",
-       "api-error-nomodule": "Unutrašnja greška: nije postavljen modul za postavljanje.",
-       "api-error-ok-but-empty": "Unutrašnja greška: nema odgovora od servera.",
-       "api-error-overwrite": "Pisanje preko postojeće datoteke nije dopušteno.",
-       "api-error-stashfailed": "Unutrašnja greška: server nije mogao da spremi privremenu datoteku.",
        "api-error-publishfailed": "Unutrašnja greška: Server nije uspio objaviti privremenu datoteku.",
-       "api-error-stasherror": "Dogodila se greška pri postavljaju datoteke u skladište.",
-       "api-error-stashedfilenotfound": "Skladištena datoteka nije pronađena pri pokušaju postavljanja iste iz skladišta.",
-       "api-error-stashpathinvalid": "Putanja na kojoj je trebala biti skladištena datoteka je neispravna.",
-       "api-error-stashfilestorage": "Dogodila se greška pri postavljaju datoteke u skladište.",
-       "api-error-stashzerolength": "Server nije mogao skladištiti datoteku jer joj je veličina iznosila 0.",
-       "api-error-stashnotloggedin": "Morate biti prijavljeni kako biste sačuvali datoteke u skladište postavljanja.",
-       "api-error-stashwrongowner": "Datoteka kojoj ste pokušali pristupiti u skladištu ne pripada vama.",
-       "api-error-stashnosuchfilekey": "Datotečni ključ kome ste pokušali pristupiti u skladištu ne pripada vama.",
-       "api-error-timeout": "Server nije odgovorio unutar očekivanog vremena.",
-       "api-error-unclassified": "Desila se nepoznata greška",
-       "api-error-unknown-code": "Nepoznata greška: \"$1\"",
-       "api-error-unknown-error": "Unutrašnja greška: desila se neka greška pri pokušaju postavljanja vaše datoteke.",
+       "api-error-stashfailed": "Unutrašnja greška: server nije mogao da spremi privremenu datoteku.",
        "api-error-unknown-warning": "Nepoznato upozorenje: $1",
        "api-error-unknownerror": "Nepoznata greška: \"$1\"",
-       "api-error-uploaddisabled": "Postavljanje je onemogućeno na ovoj wiki.",
-       "api-error-verification-error": "Ova datoteka je možda oštećenja ili ima pogrešan nastavak.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekunde}}",
        "duration-minutes": "$1 {{PLURAL:$1|minut|minute|minuta}}",
        "duration-hours": "$1 {{PLURAL:$1|sat|sata|sati}}",
index b3e4718..d39368c 100644 (file)
        "apisandbox-sending-request": "S'està enviant una sol·licitud API...",
        "apisandbox-loading-results": "S'estan reben els resultats de l'API...",
        "apisandbox-results-error": "S'ha produït un error en carregar la resposta de la consulta de l'API: $1.",
-       "apisandbox-request-params-json": "Paràmetres JSON:",
        "apisandbox-request-url-label": "Sol·licita URL:",
        "apisandbox-request-time": "Temps de sol·licitud: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corregeix el testimoni i torna-ho a enviar",
        "feedback-useragent": "Agent d'usuari:",
        "searchsuggest-search": "Cerca a {{SITENAME}}",
        "searchsuggest-containing": "que conté ...",
-       "api-error-autoblocked": "S'ha blocat la vostra IP automàticament perquè la va utilitzar un usuari blocat.",
-       "api-error-badaccess-groups": "No teniu permís per a carregar fitxers en aquest wiki.",
        "api-error-badtoken": "Error intern: argument incorrecte.",
-       "api-error-blocked": "Heu estat blocat per poder editar.",
-       "api-error-copyuploaddisabled": "Les càrregues via URL estan desactivades en aquest servidor.",
-       "api-error-duplicate": "Ja hi ha {{PLURAL:$1|un altre fitxer|altres fitxers}} en aquest lloc web amb el mateix contingut.",
-       "api-error-duplicate-archive": "Aquí ja hi ha hagut {{PLURAL:$1|un altre fitxer|altres fitxers}} amb el mateix contingut, i {{PLURAL:$1|va ser esborrat|varen ser esborrats}}.",
-       "api-error-empty-file": "El fitxer que heu tramès està buit.",
        "api-error-emptypage": "No es permet la creació de pàgines noves en blanc.",
-       "api-error-fetchfileerror": "Error intern: quelcom no ha funcionat en accedir al fitxer.",
-       "api-error-fileexists-forbidden": "Ja existeix un fitxer amb el nom «$1» i no pot sobreescriure's.",
-       "api-error-fileexists-shared-forbidden": "Ja existeix un fitxer amb el nom «$1» al repositori de fitxers compartits i no pot sobreescriure's.",
-       "api-error-file-too-large": "El fitxer que heu tramès és massa gran.",
-       "api-error-filename-tooshort": "El nom del fitxer és massa curt.",
-       "api-error-filetype-banned": "Aquest tipus de fitxer està prohibit.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|no és un tipus de fitxer permès|no són tipus de fitxer permesos}}. {{PLURAL:$3|El tipus de fitxer permès és|Els tipus de fitxer permesos són}} $2.",
-       "api-error-filetype-missing": "El nom de fitxer no té extensió.",
-       "api-error-hookaborted": "Un mòdul d'extensió ha cancel·lat la modificació que heu intentat fer.",
-       "api-error-http": "Error intern: no es pot connectar al servidor.",
-       "api-error-illegal-filename": "El nom del fitxer no està permès.",
-       "api-error-internal-error": "Error intern: el procés de càrrega en el wiki no ha funcionat.",
-       "api-error-invalid-file-key": "Error intern: no s'ha trobat el fitxer al dipòsit temporal.",
-       "api-error-missingparam": "Error intern: falten paràmetres a la petició.",
-       "api-error-missingresult": "Error intern: no s'ha pogut determinar si la còpia ha reeixit.",
-       "api-error-mustbeloggedin": "Cal que estigueu autenticats en un compte d'usuari per a poder carregar fitxers.",
-       "api-error-mustbeposted": "Error intern: la sol·licitud necessita HTTP POST.",
-       "api-error-noimageinfo": "La pujada s'ha realitzat amb èxit, però el servidor no ha proporcionat cap informació del fitxer.",
-       "api-error-nomodule": "Error intern: no està definit el mòdul de càrregues.",
-       "api-error-ok-but-empty": "Error intern: no hi ha resposta del servidor.",
-       "api-error-overwrite": "No està permès sobreescriure un fitxer existent.",
-       "api-error-stashfailed": "Error intern: el servidor no ha pogut emmagatzemar fitxers temporals.",
        "api-error-publishfailed": "Error intern: el servidor no ha pogut publicar el fitxer temporal.",
-       "api-error-stasherror": "S'ha produït un error en carregar el fitxer al dipòsit.",
-       "api-error-stashedfilenotfound": "No s'ha trobat el fitxer de l'espai temporal quan es provava de carregar-lo d'allà.",
-       "api-error-stashpathinvalid": "El camí on s'havia de trobar el fitxer de l'espai temporal no és vàlid.",
-       "api-error-stashfilestorage": "S'ha produït un error en emmagatzemar el fitxer en l'espai temporal.",
-       "api-error-stashzerolength": "El servidor no ha pogut desar el fitxer a l'espai temporal perquè tenia longitud zero.",
-       "api-error-stashnotloggedin": "Cal haver iniciat una sessió per desar fitxers en l'espai temporal de càrrega.",
-       "api-error-stashwrongowner": "El fitxer que provàveu d'accedir en l'espai temporal no us pertany.",
-       "api-error-stashnosuchfilekey": "La clau de fitxer que provàveu d'accedir en l'espai temporal no existeix.",
-       "api-error-timeout": "El servidor no ha respost en el temps esperat.",
-       "api-error-unclassified": "S'ha produït un error desconegut",
-       "api-error-unknown-code": "Error desconegut: «$1»",
-       "api-error-unknown-error": "Error intern: quelcom no ha funcionat en intentar carregar el fitxer.",
+       "api-error-stashfailed": "Error intern: el servidor no ha pogut emmagatzemar fitxers temporals.",
        "api-error-unknown-warning": "Avís desconegut: $1",
        "api-error-unknownerror": "Error desconegut: «$1».",
-       "api-error-uploaddisabled": "Estan desactivades les càrregues en aquest wiki",
-       "api-error-verification-error": "Aquest fitxer pot estar danyat, o tenir una extensió incorrecta.",
        "duration-seconds": "$1 {{PLURAL:$1|segon|segons}}",
        "duration-minutes": "$1 {{PLURAL:$1|minut|minuts}}",
        "duration-hours": "$1 {{PLURAL:$1|hora|hores}}",
index 97b55e6..8771631 100644 (file)
        "feedback-useragent": "Uživatelský agent:",
        "searchsuggest-search": "Hledat na {{GRAMMAR:6sg|{{SITENAME}}}}",
        "searchsuggest-containing": "obsahující…",
-       "api-error-autoblocked": "Vaše IP adresa byla automaticky zablokována, protože ji používal zablokovaný uživatel.",
-       "api-error-badaccess-groups": "Nemáte povoleno nahrávat soubory na tuto wiki.",
        "api-error-badtoken": "Vnitřní chyba: špatný token.",
-       "api-error-blocked": "Byla vám zablokována možnost editace.",
-       "api-error-copyuploaddisabled": "Načítání z URL je na tomto severu zakázáno.",
-       "api-error-duplicate": "Na této wiki již {{PLURAL:$1|existuje jiný soubor|existují jiné soubory}} se shodným obsahem.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Soubor|Soubory}} se stejným obsahem již zde dříve {{PLURAL:$1|byl|byly}}, ale {{PLURAL:$1|byl smazán|byly smazány}}.",
-       "api-error-empty-file": "Načtený soubor je prázdný.",
        "api-error-emptypage": "Zakládání prázdných stránek není dovoleno.",
-       "api-error-fetchfileerror": "Vnitřní chyba: došlo k chybě při stahování souboru.",
-       "api-error-fileexists-forbidden": "Soubor s názvem „$1“ už existuje a nelze ho přepsat.",
-       "api-error-fileexists-shared-forbidden": "Soubor s názvem „$1“ už existuje ve sdíleném úložišti a nelze ho přepsat.",
-       "api-error-file-too-large": "Načtený soubor je příliš velký.",
-       "api-error-filename-tooshort": "Název souboru je příliš krátký.",
-       "api-error-filetype-banned": "Tento typ souboru je zakázán.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|je nedovolený formát souborů|jsou nedovolené formáty souborů}}. {{PLURAL:$3|Povolený formát souborů je|Povolené formáty souborů jsou}} $2.",
-       "api-error-filetype-missing": "Tento soubor nemá příponu.",
-       "api-error-hookaborted": "Zamýšlená úprava byla zakázána rozšiřujícím modulem.",
-       "api-error-http": "Vnitřní chyba: nepodařilo se připojit k serveru.",
-       "api-error-illegal-filename": "Tento název souboru není dovolen.",
-       "api-error-internal-error": "Vnitřní chyba: došlo k chybě při zpracování vašeho načteného souboru.",
-       "api-error-invalid-file-key": "Vnitřní chyba: soubor nebyl nalezen v dočasném úložišti.",
-       "api-error-missingparam": "Vnitřní chyba: chybí parametry požadavku.",
-       "api-error-missingresult": "Vnitřní chyba: nelze určit, zda kopírování bylo úspěšné.",
-       "api-error-mustbeloggedin": "K načtení souborů musíte být přihlášen.",
-       "api-error-mustbeposted": "Vnitřní chyba: požadavek musí být prostřednictvím HTTP POST.",
-       "api-error-noimageinfo": "Načtení bylo úspěšné, ale server neposkytl o souboru žádné informace.",
-       "api-error-nomodule": "Interní chyba: není nastaven načítací modul.",
-       "api-error-ok-but-empty": "Interní chyba: ze serveru nepřišla odpověď.",
-       "api-error-overwrite": "Není dovoleno přepsat existující soubor.",
-       "api-error-ratelimited": "Pokoušíte se načíst v krátkém časovém rozmezí načíst více souborů, než je na této wiki dovoleno.\nZkuste to znovu za několik minut.",
-       "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ému 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“.",
-       "api-error-unknown-error": "Vnitřní chyba: došlo k chybě při pokusu o načtení souboru.",
+       "api-error-stashfailed": "Vnitřní chyba: Serveru se nepodařilo uložit dočasný soubor.",
        "api-error-unknown-warning": "Neznámé varování: „$1“.",
        "api-error-unknownerror": "Neznámá chyba: „$1“.",
-       "api-error-uploaddisabled": "Načítání souborů je na této wiki vypnuto.",
-       "api-error-verification-error": "Soubor je možná poškozen nebo má špatnou příponu.",
-       "api-error-was-deleted": "Soubor s tímto názvem byl již dříve načten a později smazán.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekundy|sekund}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuta|minuty|minut}}",
        "duration-hours": "$1 {{PLURAL:$1|hodina|hodiny|hodin}}",
index 0af0cc8..c72b598 100644 (file)
        "patrol-log-header": "Patruljerede versioner.",
        "log-show-hide-patrol": "$1 patruljeringslog",
        "confirm-markpatrolled-button": "OK",
+       "confirm-markpatrolled-top": "Marker version $3 af $2 som patruljeret?",
        "deletedrevision": "Slettede gammel version $1",
        "filedeleteerror-short": "Fejl under sletning af fil: $1",
        "filedeleteerror-long": "Der opstod en fejl under sletningen af filen:\n\n$1",
        "feedback-thanks-title": "Tak!",
        "searchsuggest-search": "Søg på {{SITENAME}}",
        "searchsuggest-containing": "indeholder...",
-       "api-error-badaccess-groups": "Du har ikke tilladelse til at overføre filer til denne wiki.",
        "api-error-badtoken": "Intern fejl: ugyldigt mærke.",
-       "api-error-blocked": "Du er blevet blokeret fra at redigere.",
-       "api-error-copyuploaddisabled": "At lægge filer op via hjemmesideadresser er slået fra på denne server.",
-       "api-error-duplicate": "Der er allerede {{PLURAL:$1|en anden fil|nogle andre filer}} med samme indhold på webstedet.",
-       "api-error-duplicate-archive": "Der var allerede {{PLURAL:$1|en anden fil|nogle andre filer}} med samme indhold på webstedet, men {{PLURAL:$1|den|de}} blev slettet.",
-       "api-error-empty-file": "Den fil du indsendte var tom.",
        "api-error-emptypage": "Det er ikke tilladt at oprette nye, tomme sider.",
-       "api-error-fetchfileerror": "Intern fejl: noget gik galt under hentningen af filen.",
-       "api-error-fileexists-forbidden": "En fil med navnet \"$1\" findes allerede, og den kan ikke overskrives.",
-       "api-error-fileexists-shared-forbidden": "En fil med navnet \"$1\" eksisterer allerede i det delte filsystem og kan ikke overskrives.",
-       "api-error-file-too-large": "Den fil du indsendte var for stor.",
-       "api-error-filename-tooshort": "Filnavnet er for kort.",
-       "api-error-filetype-banned": "Denne type fil er ikke tilladt.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|er ikke en tilladt filtype|er ikke tilladte filtyper}}. Tilladt {{PLURAL:$3|filtype er|filtyper er}} $2.",
-       "api-error-filetype-missing": "Filen mangler en filendelse.",
-       "api-error-hookaborted": "Ændringen, du forsøgte at gøre, blev afbrudt af en udvidelsestilkobling.",
-       "api-error-http": "Intern fejl: Kan ikke forbinde til serveren.",
-       "api-error-illegal-filename": "Filnavnet er ikke tilladt.",
-       "api-error-internal-error": "Intern fejl: noget gik galt med behandlingen af din filoplægning på wikien.",
-       "api-error-invalid-file-key": "Intern fejl: filen blev ikke fundet på den midlertidige lagerplads.",
-       "api-error-missingparam": "Intern fejl: manglende parametre i anmodning.",
-       "api-error-missingresult": "Intern fejl: kunne ikke afgøre om kopieringen lykkedes.",
-       "api-error-mustbeloggedin": "Du skal være logget på for at kunne lægge filer op.",
-       "api-error-mustbeposted": "Intern fejl: anmodningen kræver brug af HTTP POST.",
-       "api-error-noimageinfo": "Oplægningen lykkedes, men serveren gav os ikke nogen oplysninger om filen.",
-       "api-error-nomodule": "Intern fejl: intet modul til oplægning indstillet.",
-       "api-error-ok-but-empty": "Intern fejl: intet svar fra serveren.",
-       "api-error-overwrite": "Det er ikke tilladt at overskrive en eksisterende fil.",
-       "api-error-stashfailed": "Intern fejl: serveren kunne ikke gemme midlertidig fil.",
        "api-error-publishfailed": "Intern fejl: serveren kunne ikke udgive midlertidig fil.",
-       "api-error-timeout": "Serveren svarede ikke tilbage inden for den forventede tid.",
-       "api-error-unclassified": "En ukendt fejl opstod.",
-       "api-error-unknown-code": "Ukendt fejl: \"$1\"",
-       "api-error-unknown-error": "Intern fejl: noget gik galt under forsøget på at lægge din fil op.",
+       "api-error-stashfailed": "Intern fejl: serveren kunne ikke gemme midlertidig fil.",
        "api-error-unknown-warning": "Ukendt advarsel: \"$1\".",
        "api-error-unknownerror": "Ukendt fejl: \"$1\".",
-       "api-error-uploaddisabled": "Oplægning af filer er slået fra på denne wiki.",
-       "api-error-verification-error": "Denne fil kan være beskadiget, eller den har måske en forkert filendelse.",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunder}}",
        "duration-minutes": "$1 {{PLURAL:$1|minut|minutter}}",
        "duration-hours": "$1 {{PLURAL:$1|time|timer}}",
index fe8c922..ec0313e 100644 (file)
        "recentchanges-legend-plusminus": "''(±123)''",
        "recentchanges-submit": "Anzeigen",
        "rcfilters-activefilters": "Aktive Filter",
+       "rcfilters-restore-default-filters": "Standardfilter wiederherstellen",
+       "rcfilters-clear-all-filters": "Alle Filter löschen",
        "rcfilters-search-placeholder": "Letzte Änderungen filtern (durchsuchen oder beginne mit der Eingabe)",
        "rcfilters-invalid-filter": "Ungültiger Filter",
+       "rcfilters-empty-filter": "Keine aktiven Filter. Es werden alle Beiträge angezeigt.",
        "rcfilters-filterlist-title": "Filter",
        "rcfilters-filterlist-noresults": "Keine Filter gefunden",
+       "rcfilters-filtergroup-registration": "Benutzerregistrierung",
+       "rcfilters-filter-registered-label": "Angemeldet",
+       "rcfilters-filter-registered-description": "Angemeldete Autoren.",
+       "rcfilters-filter-unregistered-label": "Unangemeldet",
+       "rcfilters-filter-unregistered-description": "Autoren, die nicht angemeldet sind.",
        "rcfilters-filtergroup-authorship": "Bearbeitungs-Autorenschaft",
        "rcfilters-filter-editsbyself-label": "Deine eigenen Bearbeitungen",
        "rcfilters-filter-editsbyself-description": "Bearbeitungen von dir.",
        "rcfilters-filter-editsbyother-label": "Bearbeitungen von anderen",
-       "rcfilters-filter-editsbyother-description": "Bearbeitungen von anderen Benutzern (nicht von dir)",
-       "rcfilters-filtergroup-userExpLevel": "Niveau der Benutzererfahrung",
+       "rcfilters-filter-editsbyother-description": "Bearbeitungen von anderen Benutzern (nicht von dir).",
+       "rcfilters-filtergroup-userExpLevel": "Erfahrungsniveau (nur für angemeldete Benutzer)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Neulinge",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Sehr neue Autoren: Weniger als 10 Bearbeitungen und eine Aktivität von weniger als 4 Tagen.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Weniger als 10 Bearbeitungen und eine Aktivität von weniger als 4 Tagen.",
        "rcfilters-filter-userExpLevel-learner-label": "Anfänger",
        "rcfilters-filter-userExpLevel-learner-description": "Eine Aktivität von mehreren Tagen und mehr Bearbeitungen als „Neulinge“, aber weniger als „Erfahrene Benutzer“.",
        "rcfilters-filter-userExpLevel-experienced-label": "Erfahrene Benutzer",
        "rcfilters-filter-userExpLevel-experienced-description": "Eine Aktivität von mehr als 30 Tagen und mehr als 500 Bearbeitungen.",
+       "rcfilters-filtergroup-automated": "Automatisierte Beiträge",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Bearbeitungen, die von automatisierten Werkzeugen durchgeführt wurden.",
+       "rcfilters-filter-humans-label": "Mensch (kein Bot)",
+       "rcfilters-filter-humans-description": "Bearbeitungen, die von menschlichen Autoren durchgeführt wurden.",
+       "rcfilters-filtergroup-significance": "Bedeutung",
+       "rcfilters-filter-minor-label": "Kleine Änderungen",
+       "rcfilters-filter-minor-description": "Bearbeitungen, die der Autor als geringfügig markiert hat.",
+       "rcfilters-filter-major-label": "Nicht-kleine Änderungen",
+       "rcfilters-filter-major-description": "Bearbeitungen, die nicht als geringfügig markiert wurden.",
+       "rcfilters-filtergroup-changetype": "Typ der Änderung",
+       "rcfilters-filter-pageedits-label": "Seitenbearbeitungen",
+       "rcfilters-filter-pageedits-description": "Änderungen am Wikiinhalt oder an Diskussionen, Kategoriebeschreibungen …",
+       "rcfilters-filter-newpages-label": "Seitenerstellungen",
+       "rcfilters-filter-newpages-description": "Bearbeitungen, die zu neuen Seiten führen.",
+       "rcfilters-filter-categorization-label": "Kategorieänderungen",
+       "rcfilters-filter-categorization-description": "Einträge von Seiten, die zu Kategorien hinzugefügt oder aus ihnen entfernt wurden.",
+       "rcfilters-filter-logactions-label": "Protokollierte Aktionen",
+       "rcfilters-filter-logactions-description": "Administrative Aktionen, Benutzerkontenerstellungen, Seitenlöschungen, hochgeladene Dateien …",
        "rcnotefrom": "Angezeigt {{PLURAL:$5|wird die Änderung|werden die Änderungen}} seit <strong>$3, $4</strong> (max. <strong>$1</strong> Einträge).",
        "rclistfrom": "Nur Änderungen seit $3, $2 Uhr zeigen.",
        "rcshowhideminor": "Kleine Änderungen $1",
        "apisandbox-sending-request": "Sende API-Anfrage …",
        "apisandbox-loading-results": "Rufe API-Ergebnisse ab …",
        "apisandbox-results-error": "Beim Laden der API-Anfragenantwort ist ein Fehler aufgetreten: $1.",
-       "apisandbox-request-params-json": "JSON-Parameter:",
        "apisandbox-request-url-label": "Anforderungs-URL:",
        "apisandbox-request-time": "Dauer der Anfrage: {{PLURAL:$1|Eine Millisekunde|$1 Millisekunden}}",
        "apisandbox-results-fixtoken": "Token korrigieren und erneut übertragen",
        "feedback-useragent": "User Agent:",
        "searchsuggest-search": "{{SITENAME}} durchsuchen",
        "searchsuggest-containing": "enthält …",
-       "api-error-autoblocked": "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem gesperrten Benutzer verwendet wurde.",
-       "api-error-badaccess-groups": "Du hast nicht die Berechtigung Dateien in dieses Wiki hochzuladen.",
        "api-error-badtoken": "Interner Fehler: Der Token ist fehlerhaft.",
-       "api-error-blocked": "Du wurdest für das Bearbeiten gesperrt.",
-       "api-error-copyuploaddisabled": "Das Hochladen via URL wurde auf diesem Server deaktiviert.",
-       "api-error-duplicate": "Es gibt im Wiki bereits {{PLURAL:$1|eine andere Datei|mehrere andere Dateien}} gleichen Inhalts.",
-       "api-error-duplicate-archive": "Es {{PLURAL:$1|war bereits eine andere Datei|waren bereits andere Dateien}} gleichen Inhalts vorhanden. Sie {{PLURAL:$1|wurde|wurden}} allerdings gelöscht.",
-       "api-error-empty-file": "Die hochgeladene Datei war leer.",
        "api-error-emptypage": "Es ist nicht erlaubt, neue leere Seiten zu erstellen.",
-       "api-error-fetchfileerror": "Interner Fehler: Beim Abrufen der Datei ist ein Fehler aufgetreten.",
-       "api-error-fileexists-forbidden": "Eine Datei namens „$1“ ist bereits vorhanden und kann nicht überschrieben werden.",
-       "api-error-fileexists-shared-forbidden": "Eine Datei namens „$1“ ist bereits im gemeinsamen Dateirepositorium vorhanden und kann daher nicht überschrieben werden.",
-       "api-error-file-too-large": "Die hochgeladene Datei war zu groß.",
-       "api-error-filename-tooshort": "Der Dateiname ist zu kurz.",
-       "api-error-filetype-banned": "Diese Dateiendung ist gesperrt.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|ist ein nicht zulässiger Dateityp|sind nicht zulässige Dateitypen}}. {{PLURAL:$3|Ein zulässiger Dateityp ist|Zulässige Dateitypen sind}} $2.",
-       "api-error-filetype-missing": "Die hochzuladende Datei hat keine Dateiendung.",
-       "api-error-hookaborted": "Der Versuch, die Änderung durchzuführen, wurde von einer Parsererweiterung (API) abgebrochen.",
-       "api-error-http": "Interner Fehler: Es konnte keine Verbindung zum Server hergestellt werden.",
-       "api-error-illegal-filename": "Der Dateiname ist nicht erlaubt.",
-       "api-error-internal-error": "Interner Fehler: Ein unbekannter Fehler ist beim Hochladen der Datei ins Wiki aufgetreten.",
-       "api-error-invalid-file-key": "Interner Fehler: Die Datei wurde nicht im temporären Speicher gefunden.",
-       "api-error-missingparam": "Interner Fehler: Der Anfrage fehlen Parameter.",
-       "api-error-missingresult": "Interner Fehler: Es konnte nicht festgestellt werden, ob das Kopieren erfolgreich war.",
-       "api-error-mustbeloggedin": "Um Dateien hochladen zu können, musst du angemeldet sein.",
-       "api-error-mustbeposted": "Es liegt ein Programmfehler vor (es wird die falsche HTTP-Methode verwendet).",
-       "api-error-noimageinfo": "Das Hochladen war erfolgreich, aber der Server kann keine Informationen zur Datei anzeigen.",
-       "api-error-nomodule": "Interner Fehler: Es wurde kein Modul zum Hochladen festgelegt.",
-       "api-error-ok-but-empty": "Interner Fehler: Der Server reagiert nicht.",
-       "api-error-overwrite": "Das Überschreiben einer vorhandenen Datei ist nicht erlaubt.",
-       "api-error-ratelimited": "Du versuchst, mehr Dateien in kurzer Zeit hochzuladen, als dieses Wiki erlaubt.\nBitte versuche es in einigen Minuten erneut.",
-       "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“",
-       "api-error-unknown-error": "Interner Fehler: Ein unbekannter Fehler ist beim Hochladen der Datei aufgetreten.",
+       "api-error-stashfailed": "Interner Fehler: Der Server konnte keine temporäre Datei speichern.",
        "api-error-unknown-warning": "Unbekannte Warnung: „$1“.",
        "api-error-unknownerror": "Unbekannter Fehler: „$1“",
-       "api-error-uploaddisabled": "Das Hochladen ist in diesem Wiki deaktiviert.",
-       "api-error-verification-error": "Die hochzuladende Datei ist entweder fehlerhaft oder hat keine Dateinamenserweiterung.",
-       "api-error-was-deleted": "Eine Datei mit diesem Namen wurde kürzlich hochgeladen und anschließend gelöscht.",
        "duration-seconds": "$1 {{PLURAL:$1|Sekunde|Sekunden}}",
        "duration-minutes": "$1 {{PLURAL:$1|Minute|Minuten}}",
        "duration-hours": "$1 {{PLURAL:$1|Stunde|Stunden}}",
        "usercssispublic": "Bitte beachten: CSS-Unterseiten sollten keine vertraulichen Daten enthalten, da sie von anderen Benutzern eingesehen werden können.",
        "restrictionsfield-badip": "Ungültige IP-Adresse oder ungültiger IP-Adressbereich: $1",
        "restrictionsfield-label": "Erlaubte IP-Adressbereiche:",
-       "restrictionsfield-help": "Eine IP-Adresse oder ein CIDR-Bereich pro Zeile. Um alles zu aktivieren, verwende<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Eine IP-Adresse oder ein CIDR-Bereich pro Zeile. Um alles zu aktivieren, verwende:\n<pre>\n0.0.0.0/0\n::/0\n</pre>",
        "revid": "Version $1",
        "pageid": "Seitenkennung $1"
 }
index 09aef78..096bbaf 100644 (file)
        "mycustomjsprotected": "Desturê şıma çıniyo ke na pela JavaScripti bıvurnê.",
        "myprivateinfoprotected": "Ğısusi malumatana ğo timar kerdışire icazeta şıma çıniya.",
        "mypreferencesprotected": "Terciha timar kerdışire icazeta şıam çıniya.",
-       "ns-specialprotected": "Pelê xısusiyi nênê vurnayış.",
+       "ns-specialprotected": "Perrê xısusiy nêvırniyenê.",
        "titleprotected": "No sername terefê [[User:$1|$1]] ra, afernayene ra şevekiyayo.\nSebebê xo <em>$2</em> dero.",
        "filereadonlyerror": "Dosyay vurnayışê \"$1\" nê abêno lakin depoy dosya da \"$2\" mod dê  salt wendi de yo.\n\nXızmetkarê  kılit kerdışi wa bewniro enay wa çım ra ravyarn o: \"$3\".",
        "invalidtitle-knownnamespace": "Canemey \"$2\" u metnê \"$3\" xırabo",
        "tooltip-preferences-save": "Terciha qeyd ke",
        "tooltip-summary": "Xulasa kılmek bınuse",
        "interlanguage-link-title": "$1 - $2",
-       "common.css": "/************************************************\n * COMMON CSS\n *\n * Any CSS placed in this page will be used on \n * all skins, please think carefully about if it\n * belongs here (and not in one of the skin CSS\n * pages) before adding it. Thanks.\n ************************************************/\n\n/* <table class=\"highlighthovertable\"> */\ntable.highlighthovertable tr:hover,\ntable.highlighthovertable tr:hover td,\ntable.mw-ext-translate-groupstatistics tr:hover,\ntable.mw-ext-translate-groupstatistics tr:hover td {\n background-color: white;\n}\n\n\n/* Babel wrapper layout. */\n/* XXX: This is either redundant or should be in-core */\n/* @noflip */table.mw-babel-wrapper {\n\twidth:        238px;\n\tfloat:        right;\n\tclear:        right;\n\tmargin:       1em;\n\tborder-style: solid;\n\tborder-width: 1px;\n\tborder-color: #99B3FF;\n}\n\n/* Babel box layout. */\n/* @noflip */div.mw-babel-box {\n\tfloat:  left;\n\tclear:  left;\n\tmargin: 1px;\n}\n\ndiv.mw-babel-box table {\n\twidth: 238px;\n}\n\ndiv.mw-babel-box table th {\n\twidth:       238px;\n\twidth:       45px;\n\theight:      45px;\n\tfont-size:   14pt;\n\tfont-family: monospace;\n}\n\ndiv.mw-babel-box table td {\n\tfont-size:   8pt;\n\tpadding:     4pt;\n\tline-height: 1.25em;\n}\n\n/* Babel box colours. */\ndiv.mw-babel-box-0 {\n\tborder: solid #B7B7B7 1px;\n}\n\ndiv.mw-babel-box-1 {\n\tborder: solid #C0C8FF 1px;\n}\n\ndiv.mw-babel-box-2 {\n\tborder: solid #77E0E8 1px;\n}\n\ndiv.mw-babel-box-3 {\n\tborder: solid #99B3FF 1px;\n}\n\ndiv.mw-babel-box-4 {\n\tborder: solid #CCCC00 1px;\n}\n\ndiv.mw-babel-box-5 {\n\tborder: solid #F99C99 1px;\n}\n\ndiv.mw-babel-box-N {\n\tborder: solid #6EF7A7 1px;\n}\n\ndiv.mw-babel-box-0 table th {\n\tbackground-color: #B7B7B7;\n}\n\ndiv.mw-babel-box-1 table th {\n\tbackground-color: #C0C8FF;\n}\n\ndiv.mw-babel-box-2 table th {\n\tbackground-color: #77E0E8;\n}\n\ndiv.mw-babel-box-3 table th {\n\tbackground-color: #99B3FF;\n}\n\ndiv.mw-babel-box-4 table th {\n\tbackground-color: #CCCC00;\n}\n\ndiv.mw-babel-box-5 table th {\n\tbackground-color: #F99C99;\n}\n\ndiv.mw-babel-box-N table th{\n\tbackground-color: #6EF7A7;\n}\n\ndiv.mw-babel-box-0 table {\n\tbackground-color: #E8E8E8;\n}\n\ndiv.mw-babel-box-1 table {\n\tbackground-color: #F0F8FF;\n}\n\ndiv.mw-babel-box-2 table {\n\tbackground-color: #D0F8FF;\n}\n\ndiv.mw-babel-box-3 table {\n\tbackground-color: #E0E8FF;\n}\n\ndiv.mw-babel-box-4 table {\n\tbackground-color: #FFFF99;\n}\n\ndiv.mw-babel-box-5 table {\n\tbackground-color: #F9CBC9;\n}\n\ndiv.mw-babel-box-N table {\n\tbackground-color: #C5FCDC;\n}\n\n.babel-box td.babel-footer {\n\ttext-align: center;\n}\n\n/* Styling for portals. */\ndiv.table {\n    display:        table;\n    vertical-align: top;\n    width:          100%;\n}\n\ndiv.table-row {\n    display:        table-row;\n    vertical-align: top;\n}\n\ndiv.table-cell {\n    display:        table-cell;\n    vertical-align: top;\n}\n\nbody.ns-100 table.mw-babel-wrapper {\n    border:           solid 1px #bbbbbb;\n    background-color: #f0f0f0;\n    margin-left:      1em;\n}\n\n.graytext {\n    color: #aaa;\n}\n\n/* On [[Special:RecentChanges]] and [[Special:Watchlist]] make the new pages symbol bold green and the minor edit symbol gray. */\n.newpage {\n    color:       green;\n    font-weight: bold\n}\n\n.minoredit,\n.minor {\n    color: gray;\n}\n\n/* Monospace diffs, this makes more sense since diffs show what would be seen in the edit box. */\n/* Note: Anno 2012 many browsers don't use monospace in the textarea anymore by default, notably Chrome and Safari don't (unless the user overrides this in the preferences) */\n.diff-context,\n.diff-deletedline,\n.diff-addedline {\n    font-family: monospace, \"Courier New\";\n/* Just guess does the stupid wikidiff2 extensions add extra whitespace around..... */\n    white-space: -moz-pre-wrap;\n    white-space: pre-wrap;\n}\n \n.diffchange {\n    border: 1px dotted rgb( 170, 170, 170 );\n}\n\n/* It is unclear what the following CSS does, please add comments if you can clarify. */\n/* The box which is 400px high and if its content is longer, it gets the scrollbar */\n.scrollme {\n    overflow: scroll;\n    width:    100%;\n    height:   400px;\n}\n\n/* Standard Navigationsleisten, aka box hiding thingy from .de.  Documentation at [[Wikipedia:NavFrame]]. */\ndiv.Boxmerge, div.NavFrame { margin: 0; padding: 4px; border-collapse: collapse;}\ndiv.Boxmerge div.NavFrame { border-style: none; border-style: hidden; }\ndiv.NavFrame + div.NavFrame { border-top-style: none; border-top-style: hidden; }\ndiv.NavFrame div.NavHead { height: 1.6em; position:relative; }\ndiv.NavEnd { margin: 0; padding: 0; line-height: 1px; clear: both; }\na.NavToggle { position: absolute; top: 0; right: 5px; }\n.note-flaggedrevs * a.NavToggle { right: 12px; } /* For [[Template:Flagged Revs]] */\n\n/* Template:Languages */\n.bw-languages {\n    border:          1px solid #aaaaaa;\n    padding:         0.2em;\n    border-collapse: collapse;\n    line-height:     1.2;\n    font-size:       95%;\n    margin:          1px 1px;\n}\n.bw-languages-title {\n    width:        180px;\n    border:       1px solid #aaaaaa;\n    background:   #EEF3E2;\n    padding:      0.5em;\n    font-weight:  bold;\n}\n.bw-languages-links { padding:0.5em; background:#F6F9ED; }\n\n/* Senseless in this project */\n#editpage-copywarn { display: none; }\n\n/* Hide warnings about bad links on MediaWiki:Common.css */\n.page-MediaWiki_Common_css .mw-translate-messagechecks { display: none; }\n\n/*******************\n** Faciliate RTL translation\n*******************/\n/* @noflip */\n#bodyContent .arabic a {\n\tpadding-right:0;\n\tbackground:none;\n}\n\n.vatop tr, tr.vatop, .vatop td, .vatop th {\n vertical-align: top;\n}\n\n.bw-languages {\n direction: ltr;\n}\n\n/* prevent wrapping of lines in LQT TOC if not necessary */\ntable.lqt_toc {\n\twidth: auto;\n}\n\n/* [[m:MediaZilla:35337]] */\n@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx) {\n        #p-logo a {\n                background-image: url(\"//translatewiki.net/images/thumb/7/7c/Translatewiki-logo-bare.svg/152px-Translatewiki-logo-bare.svg.png\") !important;\n                background-size: auto 135px;\n        }\n}\n@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) {\n        #p-logo a {\n                background-image: url(\"//translatewiki.net/images/thumb/7/7c/Translatewiki-logo-bare.svg/202px-Translatewiki-logo-bare.svg.png\") !important;\n                background-size: auto 135px;\n        }\n}\n\n/* qqq visibility, [[Thread:Support/Suggestion: Add this CSS to MediaWiki:Common.css]] */\n \n.mw-sp-translate-edit-info .mw-content-ltr {\n  background-position:left center;\n  padding-left:45px;\n}\nfieldset.mw-sp-translate-edit-info .mw-centent-rtl {\n  background-position:right center;\n  padding-right:45px;\n}\n\n/* Semantic MediaWiki - make special properties easier to identify */\n\n.smwbuiltin a,\n.smwbuiltin a.new {\n\tcolor: #FF8000;\n}\n\n/* Recentchangestext toggle link */\n.white-link a {\n    color: #fff;\n}",
-       "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
        "anonymous": "{{PLURAL:$1|karberê|karberê}} anonimi yê keyepelê {{SITENAME}}i",
        "siteuser": "karberê {{SITENAME}}i $1",
        "anonuser": "karberê anonim o {{SITENAME}}i $1",
        "feedback-thanks": "Teşekkur kemê! Vatışê şıma pela da \"[$2 $1]\" esta.",
        "searchsuggest-search": "{{SITENAME}} de cı geyre",
        "searchsuggest-containing": "estebiyaye...",
-       "api-error-badaccess-groups": "Ena wiki de dosya barkerdışi rê mısade nêdeyêno.",
        "api-error-badtoken": "Xetay zerreki: Antışo xırabın.",
-       "api-error-copyuploaddisabled": "URL barkerdış ena waster dı qefılyayo.",
-       "api-error-duplicate": "Pele de xora be nê zerreki ra {{PLURAL:$1|dosyaya bine esta|dosyeyê bini estê}}.",
-       "api-error-duplicate-archive": "Ena {{PLURAL:$1|vurneyaya zey na dosya|zerrey cı zey dosya}} aseno,feqet {{PLURAL:$1|ena dosya|tewr veri}} besterneyaya.",
-       "api-error-empty-file": "Dosyaya ke şıma rışta venga.",
        "api-error-emptypage": "Newi, pelaya veng vıraştışi rê mısade nêdeyêno.",
-       "api-error-fetchfileerror": "Xırabiya zerrek:Dosya grotış dı tay çi raşt nêşı.",
-       "api-error-fileexists-forbidden": "Jû dosya be nê nameyê \"$1\" ra xora esta, u naye sero nêşeno ke bınuşiyo.",
-       "api-error-fileexists-shared-forbidden": "Jû dosya be nameyê \"$1\" ra depoyê doyeyanê barekerdeyan de xora esta, u naye sero nêşeno ke bınuşiyo.",
-       "api-error-file-too-large": "Dosyaye ke şıma rışta zaf gırda.",
-       "api-error-filename-tooshort": "Namayê dosyayi zaf kilm a.",
-       "api-error-filetype-banned": "Tipê ena dosya qedexe biya.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|babetê dosyayo destûrın niyo|babetên dosyeyanê destûrınan niyê}}. {{PLURAL:$3|Babetê dosyayo destûrın|Babetên dosyeyanê destûrınan}}   $2.",
-       "api-error-filetype-missing": "Derganiya dosya kemiya",
-       "api-error-hookaborted": "Vurnayişê tu ke to cerbna pê yew çengal ra terkneya.",
-       "api-error-http": "Xırabiya zerreki:Wasteriya irtabet bırya.",
-       "api-error-illegal-filename": "Ena nameyê dosyayi kebul nibena.",
-       "api-error-internal-error": "Xırabiye zerrek:Na wikide barkerdış de şıma dı çıyê raşt nêşı.",
-       "api-error-invalid-file-key": "Xırabiye zerrek:İdari  depokerdışê dosya nêvineya.",
-       "api-error-missingparam": "Xırabiye zerrek:Parametre waştış dı xırabin",
-       "api-error-missingresult": "Xırabiya zerrek:Kopya kerdışê cı nêbı.",
-       "api-error-mustbeloggedin": "Dosya barkerdışi re cıkewtış icab keno.",
-       "api-error-mustbeposted": "Zırabiya zerrek:HTTP POST waştış icab keno",
-       "api-error-noimageinfo": "Barkerdışê dosya temamya lakin wasterira marê malumat nêdeyayo.",
-       "api-error-nomodule": "Xırabiya zerrek:Sazkerdışê modul dê barkerdışi nêvıraziyayo.",
-       "api-error-ok-but-empty": "Xırabiya zerrek:Wastero cıwan nêdano.",
-       "api-error-overwrite": "Ser yew dosyayê ke hama esta, ser ey qeyd nibena.",
-       "api-error-stashfailed": "Xırabiya zerrek:Wasteri idari dosyey kerdi vıni.",
        "api-error-publishfailed": "Xetay zerrey: Cıgeyrayoği nêşiya dosya rocane akero.",
-       "api-error-stasherror": "Dosya embari rê ke bar biye xeta veciye.",
-       "api-error-timeout": "Cıwab dayışê wasteri peyra mend.",
-       "api-error-unclassified": "Yew xeteyê nizanyeni biya.",
-       "api-error-unknown-code": "$1'dı jew xeta vıciye",
-       "api-error-unknown-error": "Zerre xırabin:Dasoya barkerdış de tay çi raşt nêşı.",
+       "api-error-stashfailed": "Xırabiya zerrek:Wasteri idari dosyey kerdi vıni.",
        "api-error-unknown-warning": "İqazo nêzanaye: \"$1\".",
        "api-error-unknownerror": "$1'dı jew xeta vıciye",
-       "api-error-uploaddisabled": "BArkerdış ena wikide qefılneyayo",
-       "api-error-verification-error": "Dosya xırabiya yana derganiya cı xıraba.",
        "duration-seconds": "$1 {{PLURAL:$1|saniya|saniyey}}",
        "duration-minutes": "$1 {{PLURAL:$1|deqa|deqey}}",
        "duration-hours": "($1 {{PLURAL:$1|seate|seati}})",
index 05516e9..49818cc 100644 (file)
        "rev-suppressed-text-unhide": "यै पानाको पुनरावलोकन '''दमन''' गरियाको छ ।\nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/delete|पानो={{FULLPAGENAMEE}}}} दमन लग] पाउन सकिन्छ ।\nयदि तम अगाडि बढ्ड चाहन्छौ भण्या पनि तमीले  [$1 यि संशोधनहरू हेद्द] पाउन्या हौ ।",
        "rev-delundel": "दधेखाउने/लुकाउन्या",
        "rev-showdeleted": "धेकाउन्या",
-       "revisiondelete": "मà¥\87à¤\9fाà¤\89नà¥\8dया/मà¥\87à¤\9fाà¤\88या à¤°à¤¦à¥\8dदà¤\97रà¥\8dनà¥\87  à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81",
+       "revisiondelete": "मà¥\87à¤\9fाà¤\89नà¥\8dया/मà¥\87à¤\9fाà¤\88या à¤°à¤¦à¥\8dदà¤\97रà¥\8dनà¥\87  à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82",
        "revdelete-nooldid-title": "अमान्य पुनरावलोकन लक्ष",
        "revdelete-no-file": "खुलाइएको पाना अस्तित्वमी छैन",
        "revdelete-show-file-submit": "हो",
        "logentry-upload-upload": "$1 ले $3 {{GENDER:$2|अपलोड अरेका छन्}}",
        "feedback-bugornote": "यदि तमी कुनै प्राविधिक समस्यालाई विस्तारले सम्झाउन तयार छौ भण्या कृपया [$1 बग राख]।\nयदि हैन, भण्या तमी तल दियाको सरल फारमको प्रयोग गद्दसक्द्याहौ । तमरो टिप्पणी, तमरो प्रयोगकर्ता नाम र तमरो ब्राउजरको नाम सहित \"[$3 $2]\" पानामी जोडिन्याछ ।",
        "searchsuggest-search": "{{SITENAME}} खोजऽ",
-       "api-error-duplicate": "यै साइटमी पहिलीबठे यस्तै सामग्री {{PLURAL:$1|भयाको अर्को फाइल छ|भयाका  केहि अरु फाइलहरू छन्}} ।",
-       "api-error-duplicate-archive": "यै साइटमी पहिलेबाट यस्तै सामग्री {{PLURAL:$1|भयाको अर्को फाइल थियो|भयाका केहि अरु फाइलहरू थिए}} ।\nतर {{PLURAL:$1|यो मेट्याको थियो|यी मेटायाका थिए}} ।",
        "expand_templates_preview_fail_html": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तमीले लग इन गर्या छैनौ, पूर्वावलोकन लुकाइयाको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्द सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्ववावलोकन प्रयास हो भण्या पुन प्रयास गर ।</strong>\nयदि यसले कार्य पूर्ण भएन भण्या [[Special:UserLogout|लग आउट गरिबर]] फेरी लग इन गर्या ।",
        "expand_templates_preview_fail_html_anon": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तमीले लग इन गर्या छैनौ, पूर्वावलोकन लुकाइयाको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्द सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्वावलोकन प्रयास हो भण्या कृपया [[Special:UserLogin|लग इन गरिबर]] पुनः प्रयास गर्या ।</strong>",
        "default-skin-not-found": "ओह! तमरो विकिको पूर्व निर्धारित खोल जस्तो कि <code dir=\"ltr\">$wgDefaultSkin</code> मी बताइयाको<code>$1</code>, उपलब्ध नाईथिन् ।\n\nतमरो इन्स्टलेसन यी खोलहरूलाई सम्मिलित गर्दछ {{PLURAL:$4|खोल|खोलहरू}}। हेर [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: खोललाई सम्मिलित गर्नु] ताकि तमीलाई जानकारी होस् कि कसरि {{PLURAL:$4|उसलाई|उसलाई सम्मिलित गर्न सकियोस् र निर्धारितलाई तय गद्दे}}।\n\n$2\n\n; यदि तमीले अहिले मीडियाविकि इन्स्टाल गर्याका छौ:\n: तमीले सम्भवत गिटबठे इन्स्टाल गर्याका छौ, वा सिधै स्रोत कोडबठे गर्याका छौ जैको लागि कुनै अर्कै तारिका प्रयोग गरियाको छ । यो आशा अनुरूप छ । कोशिश गर केहि खोलहरू\n[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडियाविकिको खोल डाइरेक्ट्रीबाट डाउनलोड गद्या], जैको लागि तमी:\n:* डाउनलोड गर [https://www.mediawiki.org/wiki/Download टरबल इन्स्टालर], जुन कयौं खोलहरू र विस्तारमी उपलब्ध छन्। तमी खोलहरूको कोड <code>skins/</code> त्यसको डाइरेक्ट्रीबाट कपी-पेस्ट गद्द सक्द्या हौ। \n:* व्यक्तिगत खोलहरू टरबलबठे डाउनलोड गर\n[https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] बठे।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिटको प्रयोग गरेर डाउनलोड गद्द सकन्छौ]।\n: यदि तमी विकासकर्ता हौ भण्या यसो गद्दा तमरो गिट-रिपजिटरीमी केहि हुनुहुँदैन । \n; यदि तमीले अहिले मीडियाविकिलाई अपग्रेड गर्याका छौ:\n: मीडियाविकि १.२४ र यैको नवीन रूप स्वतः रूपले खोलहरूलाई सक्षम गद्दैनन् (हेर [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:खोलहरूको स्वतः खोज])। तमी निम्नलिखितलाई पेस्ट गद्द सकन्छौ: {{PLURAL:$5|लाइन|लाइनहरू}}  <code>LocalSettings.php</code> मी ताकि {{PLURAL:$5|उसले|सबै}} सक्षम होस् जस्तो कि तमीले इन्स्टाल गर्याको {{PLURAL:$5|खोल|खोलहरू}}को मामिलामी:\n\n<pre dir=\"ltr\">$3</pre>\n\n; यदि तमीले अहिले परिवर्तन गर्याका छौ<code>LocalSettings.php</code>:\n: खोल नामहरूको अगाडी डबल-क्लिक गर जसले तमलाई विभिन्न प्रकारहरूको विकल्प दिन्छ।"
index fd35f60..b30ba0e 100644 (file)
        "nospecialpagetext": "<strong>Ζητήσατε μια μη έγκυρη ειδική σελίδα.</strong>\n\nΈνας κατάλογος έγκυρων ειδικών σελίδων μπορεί να βρεθεί στη σελίδα [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Σφάλμα",
        "databaseerror": "Σφάλμα στη βάση δεδομένων",
-       "databaseerror-text": "Παρουσιάστηκε ένα σφάλμα ερωτήματος βάσης δεδομένων.\nΑυτό μπορεί να υποδεικνύει ένα σφάλμα στο λογισμικό.",
+       "databaseerror-text": "Παρουσιάστηκε σφάλμα ερωτήματος βάσης δεδομένων.\nΑυτό μπορεί να είναι ένδειξη προγραμματιστικού σφάλματος στο λογισμικό.",
        "databaseerror-textcl": "Παρουσιάστηκε ένα σφάλμα ερωτήματος βάσης δεδομένων.",
        "databaseerror-query": "Ερώτημα: $1",
        "databaseerror-function": "Λειτουργία: $1",
        "pageinfo-toolboxlink": "Πληροφορίες σελίδας",
        "pageinfo-redirectsto": "Ανακατευθύνει σε",
        "pageinfo-redirectsto-info": "πληροφορίες",
-       "pageinfo-contentpage": "Î\9aαÏ\84αμετράται ως σελίδα περιεχομένου",
+       "pageinfo-contentpage": "ΠÏ\81οÏ\83μετράται ως σελίδα περιεχομένου",
        "pageinfo-contentpage-yes": "Ναι",
        "pageinfo-protect-cascading": "Οι προστασίες ξεκινούν τη διαδοχή τους από εδώ",
        "pageinfo-protect-cascading-yes": "Ναι",
        "feedback-useragent": "User agent:",
        "searchsuggest-search": "Αναζήτηση σε {{SITENAME}}",
        "searchsuggest-containing": "περιέχει...",
-       "api-error-badaccess-groups": "Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.",
        "api-error-badtoken": "Εσωτερικό σφάλμα: εσφαλμένο διακριτικό.",
-       "api-error-copyuploaddisabled": "Το ανέβασμα από URL είναι απενεργοποιημένο σε αυτόν το διακομιστή.",
-       "api-error-duplicate": "Υπάρχει το{{PLURAL:$1|είναι ένα άλλο αρχείο|είναι κάποια άλλα αρχεία}} ήδη στο site με το ίδιο περιεχόμενο.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Υπήρχε ήδη άλλο αρχείο|Υπήρχαν ήδη άλλα αρχεία}} στον ιστότοπο με το ίδιο περιεχόμενο, αλλά {{PLURAL:$1|διαγράφηκε|διαγράφηκαν}}.",
-       "api-error-empty-file": "Το αρχείο που υποβάλλατε ήταν κενό.",
        "api-error-emptypage": "Η δημιουργία νέων, κενών σελιδών δεν επιτρέπετε.",
-       "api-error-fetchfileerror": "Εσωτερικό σφάλμα: κάτι πήγε στραβά κατά την ανάκτηση του αρχείου.",
-       "api-error-fileexists-forbidden": "Ένα αρχείο με το όνομα \"$1\" υπάρχει ήδη, και δεν είναι δυνατό να αντικατασταθεί.",
-       "api-error-fileexists-shared-forbidden": "Ένα αρχείο με όνομα \"$1\" υπάρχει ήδη στο χώρο φύλαξης κοινόχρηστων αρχείων και δεν είναι δυνατό να αντικατασταθεί.",
-       "api-error-file-too-large": "Το αρχείο που υποβάλλατε ήταν πολύ μεγάλο.",
-       "api-error-filename-tooshort": "Το όνομα αρχείου είναι πολύ μικρό.",
-       "api-error-filetype-banned": "Αυτός ο τύπος αρχείου έχει απαγορευτεί.",
-       "api-error-filetype-banned-type": "$1 δεν είναι {{PLURAL:$4|επιτρεπόμενος τύπος αρχείου|επιτρεπόμενοι τύποι αρχείων}}.  {{PLURAL:$3|Επιτρεπόμενος τύπος αρχείων|Επιτρεπόμενοι τύποι αρχείων}} είναι το $2.",
-       "api-error-filetype-missing": "Το αρχείο δεν έχει επέκταση.",
-       "api-error-hookaborted": "Η τροποποίηση που επιχειρήσατε να κάνετε ματαιώθηκε από ένα άγκιστρο της επέκτασης.",
-       "api-error-http": "Εσωτερικό σφάλμα: δεν είναι δυνατή η σύνδεση με το διακομιστή.",
-       "api-error-illegal-filename": "Αυτό το όνομα αρχείου δεν επιτρέπεται.",
-       "api-error-internal-error": "Εσωτερικό σφάλμα: κάτι πήγε στραβά με την επεξεργασία της επιφόρτωσής σας στο wiki.",
-       "api-error-invalid-file-key": "Εσωτερικό σφάλμα: το αρχείο δεν βρέθηκε στην προσωρινή αποθήκευση.",
-       "api-error-missingparam": "Εσωτερικό σφάλμα: λείπουν παράμετροι από το αίτημα.",
-       "api-error-missingresult": "Εσωτερικό σφάλμα: δεν ήταν δυνατό να προσδιοριστεί εάν η αντίγραφή ολοκληρώθηκε με επιτυχία.",
-       "api-error-mustbeloggedin": "Θα πρέπει να συνδεθείτε για να φορτώσετε τα αρχεία.",
-       "api-error-mustbeposted": "Εσωτερικό σφάλμα: το αίτημα απαιτεί HTTP POST.",
-       "api-error-noimageinfo": "Η αποστολή πέτυχε, αλλά ο διακομιστής δεν μας παρείχε πληροφορίες σχετικά με το αρχείο.",
-       "api-error-nomodule": "Εσωτερικό σφάλμα: δεν υπάρχει σετ επιφόρτωσης.",
-       "api-error-ok-but-empty": "Εσωτερικό σφάλμα: δεν υπάρχει απάντηση από το διακομιστή.",
-       "api-error-overwrite": "Αντικατάσταση ενός υπάρχοντος αρχείου δεν επιτρέπεται.",
-       "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-stashnosuchfilekey": "Το κλειδί αρχείου στο οποίο προσπαθούσατε να αποκτήσετε πρόσβαση στο αποθετήριο δεν υπάρχει.",
-       "api-error-timeout": "Ο διακομιστής δεν αποκρίθηκε εντός του αναμενόμενου χρόνου.",
-       "api-error-unclassified": "Προέκυψε ένα άγνωστο σφάλμα.",
-       "api-error-unknown-code": "Άγνωστο σφάλμα: \"$1\"",
-       "api-error-unknown-error": "Εσωτερικό σφάλμα: κάτι πήγε στραβά, όταν προσπαθείσατε να φορτώσετε το αρχείο σας.",
+       "api-error-stashfailed": "Εσωτερικό σφάλμα: ο διακομιστής απέτυχε να αποθηκεύσει το προσωρινό αρχείο.",
        "api-error-unknown-warning": "Άγνωστη προειδοποίηση: «$1».",
        "api-error-unknownerror": "Άγνωστο σφάλμα: «$1».",
-       "api-error-uploaddisabled": "Το ανέβασμα αρχείων είναι απενεργοποιημένο σε αυτό το wiki.",
-       "api-error-verification-error": "Αυτό το αρχείο μπορεί να είναι κατεστραμμένο, ή να έχει λανθασμένη επέκταση.",
        "duration-seconds": "$1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}}",
        "duration-minutes": "$1 {{PLURAL:$1|λεπτό|λεπτά}}",
        "duration-hours": "$1 {{PLURAL:$1|ώρα|ώρες}}",
        "limitreport-templateargumentsize-value": "$1 από $2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-expansiondepth": "Μεγαλύτερο βάθος ανάπτυξης",
        "limitreport-expensivefunctioncount": "Πλήθος ακριβών συναρτήσεων συντακτικού αναλυτή",
-       "expandtemplates": "Î\95Ï\80έκÏ\84εινε Ï\84α Ï\80Ï\81Ï\8cÏ\84Ï\85Ï\80α",
+       "expandtemplates": "Î\95Ï\80έκÏ\84αÏ\83η Ï\80Ï\81οÏ\84Ï\8dÏ\80Ï\89ν",
        "expand_templates_intro": "Αυτή η ειδική σελίδα παίρνει κείμενο και αναπτύσσει όλα τα πρότυπα σε αυτό αναδρομικά. \nΕπίσης αναπτύσσει συναρτήσεις συντακτικού αναλυτή όπως η\n<nowiki>{{</nowiki>#language:…}}, και μεταβλητές όπως η\n<nowiki>{{</nowiki>CURRENTDAY}}.\nΟυσιαστικά επεκτείνει οτιδήποτε βρίσκεται σε διπλές αγκύλες.",
        "expand_templates_title": "Τίτλων συμφραζόμενων, για την {{FULLPAGENAME}} κ.τ.λ.:",
        "expand_templates_input": "Κείμενο εισόδου:",
index 1a206aa..31bc41a 100644 (file)
                        "Reedy",
                        "Shirayuki",
                        "The Evil IP address",
-                       "Vogone"
+                       "Vogone",
+                       "Alluk.",
+                       "Andibing",
+                       "Aursani",
+                       "Caliburn",
+                       "Chase me ladies, I'm the Cavalry",
+                       "Codynguyen1116",
+                       "Don Alessandro",
+                       "Ed g2s",
+                       "EpochFail",
+                       "Esketti",
+                       "Issyl0",
+                       "Lemondoge",
+                       "Paladox",
+                       "SamanthaNguyen",
+                       "Usandaru555"
                ]
        },
+       "tog-underline": "Link underlining:",
+       "tog-hideminor": "Hide minor edits from recent changes",
+       "tog-hidepatrolled": "Hide patrolled edits from recent changes",
+       "tog-newpageshidepatrolled": "Hide patrolled pages from new page list",
+       "tog-hidecategorization": "Hide categorisation of pages",
+       "tog-extendwatchlist": "Expand watchlist to show all changes, not just the most recent",
+       "tog-usenewrc": "Group changes by page in recent changes and watchlist",
+       "tog-numberheadings": "Auto-number headings",
+       "tog-showtoolbar": "Show edit toolbar",
+       "tog-editondblclick": "Edit pages on double click",
+       "tog-editsectiononrightclick": "Enable section editing by right clicking on section titles",
        "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
        "tog-watchdefault": "Add pages and files I edit to my watchlist",
        "tog-watchmoves": "Add pages and files I move to my watchlist",
        "tog-watchdeletion": "Add pages and files I delete to my watchlist",
+       "tog-watchrollback": "Add pages where I have performed a rollback to my watchlist",
+       "tog-minordefault": "Mark all edits minor by default",
+       "tog-previewontop": "Show preview before edit box",
+       "tog-previewonfirst": "Show preview on first edit",
+       "tog-enotifwatchlistpages": "Email me when a page or a file on my watchlist has changed",
+       "tog-enotifusertalkpages": "Email me when my user talk page has changed",
+       "tog-enotifminoredits": "Email me also for minor edits of pages and files",
+       "tog-enotifrevealaddr": "Reveal my email address in notification emails",
+       "tog-shownumberswatching": "Show the number of watching users",
+       "tog-oldsig": "Your existing signature:",
+       "tog-fancysig": "Treat signature as wikitext (without an automatic link)",
+       "tog-uselivepreview": "ක්‍රියාත්මකව අති පෙරහුරුවක් පෙන්වන්න",
+       "tog-forceeditsummary": "Prompt me when entering a blank edit summary",
+       "tog-watchlisthideown": "Hide my edits from the watchlist",
+       "tog-watchlisthidebots": "Hide bot edits from the watchlist",
+       "tog-watchlisthideminor": "Hide minor edits from the watchlist",
+       "tog-watchlisthideliu": "Hide edits by logged in users from the watchlist",
+       "tog-watchlisthideanons": "Hide edits by anonymous users from the watchlist",
+       "tog-watchlisthidepatrolled": "Hide patrolled edits from the watchlist",
+       "tog-ccmeonemails": "Send me copies of emails I send to other users",
+       "tog-diffonly": "Do not show page content below diffs",
+       "tog-showhiddencats": "Show hidden categories",
+       "tog-norollbackdiff": "Don't show diff after performing a rollback",
+       "tog-useeditwarning": "Warn me when I leave an edit page with unsaved changes",
+       "tog-prefershttps": "Always use a secure connection when logged in",
+       "underline-always": "Always",
+       "underline-never": "Never",
+       "underline-default": "Skin or browser default",
+       "editfont-style": "Edit area font style:",
+       "editfont-default": "Browser default",
+       "editfont-monospace": "Monospaced font",
+       "editfont-sansserif": "Sans-serif font",
+       "editfont-serif": "Serif font",
+       "sunday": "Sunday",
+       "monday": "Monday",
+       "tuesday": "Tuesday",
+       "wednesday": "Wednesday",
+       "thursday": "Thursday",
+       "friday": "Friday",
+       "saturday": "Saturday",
+       "sun": "Sun",
+       "mon": "Mon",
+       "tue": "Tue",
+       "wed": "Wed",
+       "thu": "Thu",
+       "fri": "Fri",
+       "sat": "Sat",
+       "january": "January",
+       "february": "February",
+       "march": "March",
+       "april": "April",
+       "may_long": "May",
+       "june": "June",
+       "july": "July",
+       "august": "August",
+       "september": "September",
+       "october": "October",
+       "november": "November",
+       "december": "December",
+       "january-gen": "January",
+       "february-gen": "February",
+       "march-gen": "March",
+       "april-gen": "April",
+       "may-gen": "May",
+       "june-gen": "June",
+       "july-gen": "July",
+       "august-gen": "August",
+       "september-gen": "September",
+       "october-gen": "October",
+       "november-gen": "November",
+       "december-gen": "December",
+       "jan": "Jan",
+       "feb": "Feb",
+       "mar": "Mar",
+       "apr": "Apr",
+       "may": "May",
+       "jun": "Jun",
+       "jul": "Jul",
+       "aug": "Aug",
+       "sep": "Sep",
+       "oct": "Oct",
+       "nov": "Nov",
+       "dec": "Dec",
+       "january-date": "January $1",
+       "february-date": "February $1",
+       "march-date": "March $1",
+       "april-date": "April $1",
+       "may-date": "May $1",
+       "june-date": "June $1",
+       "july-date": "July $1",
+       "august-date": "August $1",
+       "september-date": "September $1",
+       "october-date": "October $1",
+       "november-date": "November $1",
+       "december-date": "December $1",
+       "pagecategories": "{{PLURAL:$1|Category|Categories}}",
        "category_header": "Pages in category ‘$1’",
+       "subcategories": "Subcategories",
        "category-media-header": "Media in category ‘$1’",
+       "category-empty": "<em>This category currently contains no pages or media.</em>",
+       "hidden-categories": "{{PLURAL:$1|Hidden category|Hidden categories}}",
+       "hidden-category-category": "Hidden categories",
+       "category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
+       "category-subcat-count-limited": "This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}.",
+       "category-article-count": "{{PLURAL:$2|This category contains only the following page.|The following {{PLURAL:$1|page is|$1 pages are}} in this category, out of $2 total.}}",
+       "category-article-count-limited": "The following {{PLURAL:$1|page is|$1 pages are}} in the current category.",
+       "category-file-count": "{{PLURAL:$2|This category contains only the following file.|The following {{PLURAL:$1|file is|$1 files are}} in this category, out of $2 total.}}",
+       "category-file-count-limited": "The following {{PLURAL:$1|file is|$1 files are}} in the current category.",
+       "listingcontinuesabbrev": "cont.",
+       "index-category": "Indexed pages",
+       "noindex-category": "Noindexed pages",
+       "broken-file-category": "Pages with broken file links",
+       "about": "About",
+       "article": "Content page",
+       "newwindow": "(opens in new window)",
+       "cancel": "Cancel",
+       "moredotdotdot": "More...",
+       "morenotlisted": "This list may be complete.",
+       "mypage": "Page",
+       "mytalk": "Talk",
+       "anontalk": "Talk",
+       "navigation": "Navigation",
+       "and": "&#32;and",
+       "qbfind": "Find",
+       "qbbrowse": "Browse",
+       "qbedit": "Edit",
+       "qbpageoptions": "This page",
+       "qbmyoptions": "My pages",
+       "faq": "FAQ",
+       "faqpage": "Project:FAQ",
+       "actions": "Actions",
+       "namespaces": "Namespaces",
+       "variants": "Variants",
+       "navigation-heading": "Navigation menu",
+       "errorpagetitle": "Error",
+       "returnto": "Return to $1.",
+       "tagline": "From {{SITENAME}}",
+       "help": "Help",
+       "search": "Search",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
+       "searchbutton": "Search",
+       "go": "Go",
+       "searcharticle": "Go",
+       "history": "Page history",
+       "history_short": "History",
+       "updatedmarker": "updated since my last visit",
+       "printableversion": "Printable version",
+       "permalink": "Permanent link",
+       "print": "Print",
+       "view": "View",
+       "view-foreign": "View on $1",
+       "edit": "Edit",
+       "edit-local": "Edit local description",
+       "create": "Create",
+       "create-local": "Add local description",
+       "editthispage": "Edit this page",
+       "create-this-page": "Create this page",
+       "delete": "Delete",
+       "deletethispage": "Delete this page",
+       "undeletethispage": "Undelete this page",
+       "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
+       "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "protect": "Protect",
+       "protect_change": "ترميميو",
+       "protectthispage": "Protect this page",
+       "unprotect": "تحفظ جي سطح بدلايو",
+       "unprotectthispage": "Change protection of this page",
+       "newpage": "New page",
+       "talkpage": "Discuss this page",
+       "talkpagelinktext": "Talk",
+       "specialpage": "Special page",
+       "personaltools": "Personal tools",
+       "articlepage": "View content page",
+       "talk": "Discussion",
+       "views": "Views",
+       "toolbox": "Tools",
+       "userpage": "View user page",
+       "projectpage": "View project page",
+       "imagepage": "View file page",
+       "mediawikipage": "View message page",
+       "templatepage": "View template page",
+       "viewhelppage": "View help page",
+       "categorypage": "View category page",
+       "viewtalkpage": "View discussion",
+       "otherlanguages": "Muilla kielillä",
+       "redirectedfrom": "(Redirected from $1)",
+       "redirectpagesub": "Redirect page",
+       "redirectto": "Redirect to:",
+       "lastmodifiedat": "This page was last modified on $1, at $2.",
+       "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}.",
+       "protectedpage": "Protected page",
+       "jumpto": "Jump to:",
+       "jumptonavigation": "navigation",
+       "jumptosearch": "search",
+       "view-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this page.\nPlease wait a while before you try to access this page again.\n\n$1",
+       "generic-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this resource.\nPlease wait a while before you try to access this resource again.",
+       "pool-timeout": "Timeout waiting for the lock",
+       "pool-queuefull": "Pool queue is full",
+       "pool-errorunknown": "Unknown error",
+       "pool-servererror": "The pool counter service is not available ($1).",
+       "poolcounter-usage-error": "Usage error: $1",
+       "aboutsite": "About {{SITENAME}}",
+       "aboutpage": "Project:About",
+       "copyright": "Content is available under $1 unless otherwise noted.",
+       "copyrightpage": "{{ns:project}}:Copyrights",
+       "currentevents": "Current events",
+       "currentevents-url": "Project:Current events",
+       "disclaimers": "Disclaimers",
+       "disclaimerpage": "Project:General disclaimer",
+       "edithelp": "Editing help",
+       "helppage-top-gethelp": "Help",
+       "mainpage": "Main Page",
+       "mainpage-description": "Main page",
+       "policy-url": "Project:Policy",
+       "portal": "Community portal",
+       "portal-url": "Project:Community portal",
+       "privacy": "Privacy policy",
+       "privacypage": "Project:Privacy policy",
+       "badaccess": "Permission error",
+       "badaccess-group0": "You are not allowed to execute the action you have requested.",
+       "badaccess-groups": "The action you have requested is limited to users in {{PLURAL:$2|the group|one of the groups}}: $1.",
+       "versionrequired": "Version $1 of MediaWiki required",
+       "versionrequiredtext": "Version $1 of MediaWiki is required to use this page.\nSee [[Special:Version|version page]].",
+       "ok": "OK",
        "retrievedfrom": "Retrieved from ‘$1’",
+       "youhavenewmessages": "{{PLURAL:$3|You have}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|You have}} $1 from {{PLURAL:$3|another user|$3 users}} ($2).",
+       "youhavenewmessagesmanyusers": "You have $1 from many users ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|a new message|999=new messages}}",
+       "newmessagesdifflinkplural": "last {{PLURAL:$1|change|999=changes}}",
+       "youhavenewmessagesmulti": "You have new messages on $1",
+       "editsection": "edit",
+       "editold": "edit",
+       "viewsourceold": "view source",
+       "editlink": "edit",
+       "viewsourcelink": "view source",
+       "editsectionhint": "Edit section: $1",
+       "toc": "Contents",
+       "showtoc": "show",
+       "hidetoc": "hide",
+       "collapsible-collapse": "Collapse",
+       "collapsible-expand": "Expand",
+       "confirmable-confirm": "Are {{GENDER:$1|you}} sure?",
+       "confirmable-yes": "Yes",
+       "confirmable-no": "No",
+       "thisisdeleted": "View or restore $1?",
+       "viewdeleted": "View $1?",
+       "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "feedlinks": "Feed:",
+       "feed-invalid": "Invalid subscription feed type.",
+       "feed-unavailable": "Syndication feeds are not available",
+       "site-rss-feed": "$1 RSS feed",
+       "site-atom-feed": "$1 Atom feed",
        "page-rss-feed": "‘$1’ RSS feed",
        "page-atom-feed": "‘$1’ Atom feed",
+       "red-link-title": "$1 (page does not exist)",
+       "sort-descending": "Sort descending",
+       "sort-ascending": "Sort ascending",
+       "nstab-main": "Page",
+       "nstab-user": "User page",
+       "nstab-media": "Media page",
+       "nstab-special": "Special page",
+       "nstab-project": "Project page",
+       "nstab-image": "File",
+       "nstab-mediawiki": "Message",
+       "nstab-template": "Template",
+       "nstab-help": "Help page",
+       "nstab-category": "Category",
+       "mainpage-nstab": "Main page",
+       "nosuchaction": "No such action",
+       "nosuchactiontext": "The action specified by the URL is invalid.\nYou might have mistyped the URL, or followed an incorrect link.\nThis might also indicate a bug in the software used by {{SITENAME}}.",
+       "nosuchspecialpage": "No such special page",
+       "nospecialpagetext": "<strong>You have requested an invalid special page.</strong>\n\nA list of valid special pages can be found at [[Special:SpecialPages|{{int:specialpages}}]].",
+       "error": "Error",
        "missing-article": "The database did not find the text of a page that it should have found, named ‘$1’ $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
        "filecopyerror": "Could not copy file ‘$1’ to ‘$2’.",
        "filerenameerror": "Could not rename file ‘$1’ to ‘$2.’",
        "cannotdelete": "The page or file ‘$1’ could not be deleted.\nIt may have already been deleted by someone else.",
        "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [https://translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
        "editinginterface": "'''Warning:''' You are editing a page which is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [https://translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-       "cascadeprotected": "This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the ‘cascading’ option turned on:\n$2",
+       "cascadeprotected": "This page has been protected from editing because it is transcluded in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
+       "pt-login": "Log in",
+       "pt-createaccount": "Create account",
+       "botpasswords-no-central-id": "To use bot passwords, you must be logged in to a centralised account.",
+       "savearticle": "Save page",
+       "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
+       "autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
+       "loginreqlink": "log in",
+       "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} create this page]</span>.",
+       "template-protected": "(protected)",
+       "revisionasof": "Revision as of $1",
+       "previousrevision": "← Older revision",
+       "cur": "cur",
+       "lineno": "Line $1:",
+       "editundo": "undo",
+       "searchresults": "Search results",
+       "searchresults-title": "Search results for \"$1\"",
+       "prevn": "previous {{PLURAL:$1|$1}}",
+       "nextn": "next {{PLURAL:$1|$1}}",
+       "shown-title": "Show $1 {{PLURAL:$1|result|results}} per page",
+       "searchprofile-articles": "Content pages",
+       "searchprofile-images": "Multimedia",
+       "searchprofile-everything": "Everything",
+       "searchprofile-advanced": "Advanced",
+       "searchprofile-articles-tooltip": "Search in $1",
+       "searchprofile-images-tooltip": "Search for files",
+       "searchprofile-everything-tooltip": "Search all of content (including talk pages)",
+       "searchprofile-advanced-tooltip": "Search in custom namespaces",
+       "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
        "prefs-i18n": "Internationalisation",
+       "right-writeapi": "Use of the write API",
+       "grant-group-customization": "Customisation and preferences",
+       "newuserlogpage": "User creation log",
+       "recentchanges": "Recent changes",
+       "recentchanges-legend": "Recent changes options",
+       "recentchanges-label-newpage": "This edit created a new page",
+       "recentchanges-label-minor": "This is a minor edit",
+       "recentchanges-label-bot": "This edit was performed by a bot",
+       "rclistfrom": "Show new changes starting from $2, $3",
+       "rcshowhidebots": "$1 bots",
+       "rcshowhideliu": "$1 registered users",
+       "rclinks": "Show last $1 changes in last $2 days<br />$3",
+       "diff": "diff",
+       "hist": "hist",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} after change",
+       "recentchangeslinked-toolbox": "Related changes",
+       "recentchangeslinked-summary": "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).\nPages on [[Special:Watchlist|your watchlist]] are <strong>bold</strong>.",
+       "upload": "Upload file",
        "license": "Licencing:",
        "license-header": "Licencing",
        "licenses-edit": "Edit licence options",
+       "file-anchor-link": "File",
+       "filehist": "File history",
+       "filehist-help": "Click on a date/time to view the file as it appeared at that time.",
+       "filehist-current": "current",
+       "filehist-datetime": "Date/Time",
+       "filehist-thumb": "Thumbnail",
+       "filehist-thumbtext": "Thumbnail for version as of $1",
+       "filehist-user": "User",
+       "filehist-dimensions": "Dimensions",
+       "filehist-comment": "Comment",
+       "imagelinks": "File usage",
+       "linkstoimage": "The following {{PLURAL:$1|page links|$1 pages link}} to this file:",
+       "sharedupload-desc-here": "This file is from $1 and may be used by other projects.\nThe description on its [$2 file description page] there is shown below.",
+       "randompage": "Random page",
+       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "uncategorizedpages": "Uncategorised pages",
        "uncategorizedcategories": "Uncategorised categories",
        "uncategorizedimages": "Uncategorised files",
        "uncategorizedtemplates": "Uncategorised templates",
+       "newpages": "New pages",
+       "allpagessubmit": "Go",
+       "listgrants-summary": "The following is a list of grants with their associated access to user rights. Users can authorise applications to use their account, but with limited permissions based on the grants the user gave to the application. An application acting on behalf of a user cannot actually use rights that the user does not have however.\nThere may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] about individual rights.",
+       "wlshowhidecategorization": "page categorisation",
+       "rollbacklink": "rollback",
        "sessionfailure": "There seems to be a problem with your login session;\nthis action has been cancelled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
-       "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalised).",
-       "blocklogentry": "blocked [[$1]] with an expiry time of $2 $3",
-       "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
-       "autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
-       "reblock-logentry": "changed block settings for [[$1]] with an expiry time of $2 $3",
+       "protect_expiry_invalid": "Expiry time is invalid.",
+       "protect_expiry_old": "Expiry time is in the past.",
+       "protect-existing-expiry": "Existing expiry time: $3, $2",
+       "protect-existing-expiry-infinity": "Existing expiry time: infinite",
+       "namespace": "Namespace:",
+       "invert": "Invert selection",
+       "tooltip-invert": "Check this box to hide changes to pages within the selected namespace (and the associated namespace if checked)",
+       "namespace_association": "Associated namespace",
+       "tooltip-namespace_association": "Check this box to also include the talk or subject namespace associated with the selected namespace",
+       "blanknamespace": "(Main)",
+       "whatlinkshere": "What links here",
+       "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalised).\nYou can block IP address ranges using the [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax; the largest allowed range is /$1 for IPv4 and /$2 for IPv6.",
        "ipbexpiry": "Expiry:",
        "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behaviour/harassment\n** Abusing multiple accounts\n** Unacceptable username",
+       "blocklink": "block",
+       "contribslink": "contribs",
+       "blocklogentry": "blocked [[$1]] with an expiry time of $2 $3",
+       "reblock-logentry": "changed block settings for [[$1]] with an expiry time of $2 $3",
        "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organisation and inform them of this serious security problem.",
-       "movecategorypage-warning": "<strong>Warning:</strong> You are about to move a category page. Please note that only the page will be moved and any pages in the old category will <em>not</em> be recategorised into the new one.",
+       "databaselocked": "The database is already locked.",
+       "movecategorypage-warning": "<strong>Warning:</strong> You are about to move a category page. Please note that only the page will be moved and any pages in the old category will <em>not</em> be recategorized into the new one.",
        "allmessagestext": "This is a list of system messages available in the MediaWiki namespace.\nPlease visit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] and [https://translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
        "allmessages-filter": "Filter by customisation state:",
+       "thumbnail-more": "Enlarge",
        "import-error-unserialize": "Revision $2 of page \"$1\" could not be unserialised. The revision was reported to use content model $3 serialised as $4.",
+       "tooltip-pt-login": "You are encouraged to log in; however, it is not mandatory",
+       "tooltip-pt-createaccount": "You are encouraged to create an account and log in; however, it is not mandatory",
+       "tooltip-ca-talk": "Discussion about the content page",
+       "tooltip-ca-edit": "Edit this page",
+       "tooltip-ca-addsection": "Start a new section",
+       "tooltip-ca-history": "Past revisions of this page",
+       "tooltip-ca-watch": "Add this page to your watchlist",
+       "tooltip-search": "Search {{SITENAME}}",
+       "tooltip-search-go": "Go to a page with this exact name if it exists",
+       "tooltip-search-fulltext": "Search pages for this text",
+       "tooltip-p-logo": "Visit the main page",
+       "tooltip-n-mainpage": "Visit the main page",
+       "tooltip-n-mainpage-description": "Visit the main page",
+       "tooltip-n-portal": "About the project, what you can do, and where to find things",
+       "tooltip-n-currentevents": "Find background information on current events",
+       "tooltip-n-recentchanges": "A list of recent changes in the wiki",
+       "tooltip-n-randompage": "Load a random page",
+       "tooltip-n-help": "The place to find out",
+       "tooltip-t-whatlinkshere": "A list of all wiki pages that link here",
+       "tooltip-t-recentchangeslinked": "Recent changes in pages linked from this page",
+       "tooltip-feed-atom": "Atom feed for this page",
+       "tooltip-t-upload": "Upload files",
+       "tooltip-t-specialpages": "A list of all special pages",
+       "tooltip-t-print": "Printable version of this page",
+       "tooltip-t-permalink": "Permanent link to this revision of the page",
+       "tooltip-ca-nstab-main": "View the content page",
+       "tooltip-ca-nstab-special": "This is a special page, and it cannot be edited",
+       "tooltip-ca-nstab-image": "View the file page",
+       "tooltip-ca-nstab-category": "View the category page",
+       "tooltip-rollback": "\"Rollback\" reverts edit(s) to this page of the last contributor in one click",
+       "pageinfo-toolboxlink": "Page information",
+       "file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
+       "show-big-image": "Original file",
+       "show-big-image-preview": "Size of this preview: $1.",
+       "show-big-image-other": "Other {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-size": "$1 × $2 pixels",
+       "metadata": "Metadata",
        "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitise it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
+       "metadata-fields": "Image metadata fields listed in this message will be included on the image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-ycbcrcoefficients": "Colour space transformation matrix coefficients",
        "exif-colorspace": "Colour space",
        "exif-datetimedigitized": "Date and time of digitising",
        "exif-gpsdestdistance-k": "Kilometres",
        "exif-ycbcrpositioning-1": "Centred",
        "exif-iimcategory-lab": "Labour",
+       "namespacesall": "all",
        "confirmemail_invalidated": "Email address confirmation cancelled",
        "version-license": "MediaWiki Licence",
        "version-ext-license": "Licence",
        "version-license-not-found": "No detailed licence information was found for this extension.",
        "version-credits-summary": "We would like to recognise the following persons for their contribution to [[Special:Version|MediaWiki]].",
        "version-license-info": "MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.\n\nMediaWiki 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 Licence for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public Licence] along with this programme; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
-       "feedback-error1": "Error: Unrecognised result from API",
+       "specialpages": "Special pages",
+       "tag-filter": "[[Special:Tags|Tag]] filter:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "logentry-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
        "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
-       "protect_expiry_invalid": "Expiry time is invalid.",
-       "protect_expiry_old": "Expiry time is in the past.",
-       "protect-existing-expiry": "Existing expiry time: $3, $2",
-       "protect-existing-expiry-infinity": "Existing expiry time: infinite",
-       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->"
+       "logentry-newusers-create": "User account $1 was {{GENDER:$2|created}}",
+       "feedback-error1": "Error: Unrecognised result from API",
+       "searchsuggest-search": "Search {{SITENAME}}"
 }
index 2653689..9f03ce9 100644 (file)
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Show",
        "rcfilters-activefilters": "Active filters",
+       "rcfilters-restore-default-filters": "Restore default filters",
+       "rcfilters-clear-all-filters": "Clear all filters",
        "rcfilters-search-placeholder": "Filter recent changes (browse or start typing)",
        "rcfilters-invalid-filter": "Invalid filter",
+       "rcfilters-empty-filter": "No active filters. All contributions are shown.",
        "rcfilters-filterlist-title": "Filters",
        "rcfilters-filterlist-noresults": "No filters found",
        "rcfilters-filtergroup-registration": "User registration",
        "apisandbox-sending-request": "Sending API request...",
        "apisandbox-loading-results": "Receiving API results...",
        "apisandbox-results-error": "An error occurred while loading the API query response: $1.",
-       "apisandbox-request-params-json": "JSON parameters:",
        "apisandbox-request-url-label": "Request URL:",
        "apisandbox-request-time": "Request time: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Correct token and resubmit",
        "feedback-useragent": "User agent:",
        "searchsuggest-search": "Search {{SITENAME}}",
        "searchsuggest-containing": "containing...",
-       "api-error-autoblocked": "Your IP address has been blocked automatically, because it was used by a blocked user.",
-       "api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
        "api-error-badtoken": "Internal error: Bad token.",
-       "api-error-blocked": "You have been blocked from editing.",
-       "api-error-copyuploaddisabled": "Uploading by URL is disabled on this server.",
-       "api-error-duplicate": "There {{PLURAL:$1|is another file|are some other files}} already on the site with the same content.",
-       "api-error-duplicate-archive": "There {{PLURAL:$1|was another file|were some other files}} already on the site with the same content, but {{PLURAL:$1|it was|they were}} deleted.",
-       "api-error-empty-file": "The file you submitted was empty.",
        "api-error-emptypage": "Creating new, empty pages is not allowed.",
-       "api-error-fetchfileerror": "Internal error: Something went wrong while fetching the file.",
-       "api-error-fileexists-forbidden": "A file with name \"$1\" already exists, and cannot be overwritten.",
-       "api-error-fileexists-shared-forbidden": "A file with name \"$1\" already exists in the shared file repository, and cannot be overwritten.",
-       "api-error-file-too-large": "The file you submitted was too large.",
-       "api-error-filename-tooshort": "The filename is too short.",
-       "api-error-filetype-banned": "This type of file is banned.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|is not a permitted file type|are not permitted file types}}. Permitted {{PLURAL:$3|file type is|file types are}} $2.",
-       "api-error-filetype-missing": "The filename is missing an extension.",
-       "api-error-hookaborted": "The modification you tried to make was aborted by an extension.",
-       "api-error-http": "Internal error: Unable to connect to server.",
-       "api-error-illegal-filename": "The filename is not allowed.",
-       "api-error-internal-error": "Internal error: Something went wrong with processing your upload on the wiki.",
-       "api-error-invalid-file-key": "Internal error: File was not found in temporary storage.",
-       "api-error-missingparam": "Internal error: Missing parameters on request.",
-       "api-error-missingresult": "Internal error: Could not determine if the copy succeeded.",
-       "api-error-mustbeloggedin": "You must be logged in to upload files.",
-       "api-error-mustbeposted": "Internal error: Request requires HTTP POST.",
-       "api-error-noimageinfo": "The upload succeeded, but the server did not give us any information about the file.",
-       "api-error-nomodule": "Internal error: No upload module set.",
-       "api-error-ok-but-empty": "Internal error: No response from server.",
-       "api-error-overwrite": "Overwriting an existing file is not allowed.",
-       "api-error-ratelimited": "You're trying to upload more files in a short space of time than this wiki allows.\nPlease try again in a few minutes.",
-       "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\".",
-       "api-error-unknown-error": "Internal error: Something went wrong when trying to upload your file.",
+       "api-error-stashfailed": "Internal error: Server failed to store temporary file.",
        "api-error-unknown-warning": "Unknown warning: \"$1\".",
        "api-error-unknownerror": "Unknown error: \"$1\".",
-       "api-error-uploaddisabled": "Uploading is disabled on this wiki.",
-       "api-error-verification-error": "This file might be corrupt, or have the wrong extension.",
-       "api-error-was-deleted": "A file of this name has been previously uploaded and subsequently deleted.",
        "duration-seconds": "$1 {{PLURAL:$1|second|seconds}}",
        "duration-minutes": "$1 {{PLURAL:$1|minute|minutes}}",
        "duration-hours": "$1 {{PLURAL:$1|hour|hours}}",
index 8ebf9bd..5eb0d21 100644 (file)
        "searcharticle": "Ek",
        "history": "Historio de paĝo",
        "history_short": "Historio",
+       "history_small": "historio",
        "updatedmarker": "ĝisdatigita de post mia lasta vizito",
        "printableversion": "Presebla versio",
        "permalink": "Konstanta ligilo",
        "botpasswords-label-delete": "Forigi",
        "botpasswords-label-resetpassword": "Rekomencigi la pasvorton",
        "botpasswords-label-grants": "Uzeblaj permesdonoj:",
-       "botpasswords-help-grants": "Rajtigiloj permesas aliron al rajtoj jam provizita al via uzantkonto. Ebligi rajtigilojn ĉi tie ne provizas aliron al ajnaj rajtoj ke via uzantkonto ne alie havus. Vidu la [[Special:MyLanguage/Special:ListGrants|tablo de gratifikoj]] por pli da informo.",
+       "botpasswords-help-grants": "Rajtigiloj permesas aliron al rajtoj jam provizita al via uzantkonto. Ebligi rajtigilojn ĉi tie ne provizas aliron al ajnaj rajtoj ke via uzantkonto ne alie havus. Vidu la [[Special:MyLanguage/Special:ListGrants|tablo de rajtigiloj]] por pli da informo.",
        "botpasswords-label-grants-column": "Permeso donita",
        "botpasswords-bad-appid": "La robota nomo \"$1\" estas malvalida.",
        "botpasswords-insert-failed": "Aldono de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi jam estis aldonita?",
        "rcfilters-invalid-filter": "Nevalida filtrilo",
        "rcfilters-filterlist-title": "Filtriloj",
        "rcfilters-filterlist-noresults": "Neniuj filtriloj troviĝis",
+       "rcfilters-filtergroup-registration": "Registrado de uzanto",
+       "rcfilters-filter-registered-label": "Registrita",
+       "rcfilters-filter-registered-description": "Ensalutitaj redaktantoj.",
+       "rcfilters-filter-unregistered-label": "Neregistrita",
+       "rcfilters-filter-unregistered-description": "Redaktantoj kiuj ne estas ensalutita.",
        "rcfilters-filtergroup-authorship": "Redakta aŭtoreco",
        "rcfilters-filter-editsbyself-label": "Viaj redaktoj",
        "rcfilters-filter-editsbyself-description": "Viaj redaktoj.",
        "rcfilters-filter-editsbyother-label": "Redaktoj de aliuloj",
-       "rcfilters-filter-editsbyother-description": "Redaktoj de la aliaj uzantoj (krom vi)",
-       "rcfilters-filtergroup-userExpLevel": "Uzanta spertonivelo",
+       "rcfilters-filter-editsbyother-description": "Redaktoj kreitaj far aliaj uzantoj (krom vi).",
+       "rcfilters-filtergroup-userExpLevel": "Spertonivelo (nur por registritaj uzantoj)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Novuloj",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Tre novaj redaktantoj: malpli ol 10 redaktoj kaj 4 tagoj da aktiveco",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Malpli ol 10 redaktoj kaj 4 tagoj de aktiveco.",
        "rcfilters-filter-userExpLevel-learner-label": "Lernantoj",
-       "rcfilters-filter-userExpLevel-learner-description": "Pliaj tagoj da aktiveco kaj redaktoj ol 'Novuloj' sed malpli ol 'Spertaj uzantoj.'",
+       "rcfilters-filter-userExpLevel-learner-description": "Pliaj tagoj da aktiveco kaj redaktoj ol \"Novuloj\" sed malpli ol \"Spertaj uzantoj\".",
        "rcfilters-filter-userExpLevel-experienced-label": "Spertaj uzantoj",
        "rcfilters-filter-userExpLevel-experienced-description": "Pli ol 30 tagoj da aktiveco kaj 500 redaktoj.",
+       "rcfilters-filtergroup-automated": "Aŭtomatigitaj kontribuoj",
+       "rcfilters-filter-bots-label": "Roboto",
+       "rcfilters-filter-bots-description": "Redaktoj farita de aŭtomatigitaj iloj.",
+       "rcfilters-filter-humans-label": "Homa (ne robota)",
+       "rcfilters-filter-humans-description": "Redaktoj farita de homaj redaktantoj.",
        "rcnotefrom": "Malsupre estas la {{PLURAL:$5|ŝanĝo|ŝanĝoj}} ekde <strong>$3, $4</strong> (montrante ĝis <strong>$1</strong>).",
        "rclistfrom": "Montri novajn ŝanĝojn ekde \"$3 $2\"",
        "rcshowhideminor": "$1 etajn redaktojn",
        "apisandbox-sending-request": "Sendanta aplikprograminterfacan peton…",
        "apisandbox-loading-results": "Ricevas APIajn rezultojn…",
        "apisandbox-results-error": "Eraro okazis dum ŝutis la APIan petan respondon: $1.",
-       "apisandbox-request-params-json": "JSON-parametroj:",
        "apisandbox-request-url-label": "Mendi URL-on.",
        "apisandbox-request-time": "Tempo de peto:{{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Korekti ĵetonon kaj resendi",
        "booksources-search": "Serĉi",
        "booksources-text": "Jen ligilaro al aliaj TTT-ejoj, kiuj vendas librojn,\nkaj/aŭ informumos pri la libro ligita.\nLa {{SITENAME}} ne estas komerce ligita al tiuj vendejoj, kaj la listo ne estu\nkomprenata kiel rekomendo aŭ reklamo.",
        "booksources-invalid-isbn": "La donata ISBN verŝajne estas nevalida; kontrolu pri erara kopiado el la originala fonto.",
-       "magiclink-tracking-rfc": "Paĝoj kiuj uzas [https://en.wikipedia.org/wiki/Help:Magic_links#RFC magiajn ligojn] por [https://eo.wikipedia.org/wiki/Request_for_Comments peto pri komentoj]",
-       "magiclink-tracking-rfc-desc": "Ĉi tiu paĝo uzas magiajn ligojn por [https://eo.wikipedia.org/wiki/Request_for_Comments peto pri komentoj]. Vidi [https://www.mediawiki.org/wiki/special:MyLanguage/Helpo:Magiaj_ligoj mediawiki.org] pri kiel migri.",
-       "magiclink-tracking-pmid": "Paĝoj kiuj uzas magiajn ligojn por PubMed",
+       "magiclink-tracking-rfc": "Paĝoj kiuj uzas [https://en.wikipedia.org/wiki/Help:Magic_links#RFC magiajn ligilojn] por [https://eo.wikipedia.org/wiki/Request_for_Comments peto pri komentoj]",
+       "magiclink-tracking-rfc-desc": "Ĉi tiu paĝo uzas magiajn ligilojn por [https://eo.wikipedia.org/wiki/Request_for_Comments peto pri komentoj]. Vidi [https://www.mediawiki.org/wiki/special:MyLanguage/Helpo:Magiaj_ligoj mediawiki.org] pri kiel migri.",
+       "magiclink-tracking-pmid": "Paĝoj kiuj uzas magiajn ligilojn por PubMed",
        "magiclink-tracking-pmid-desc": "Ĉi tiu paĝo uzas PubMed-aj magiaj ligoj. Vidi [https://www.mediawiki.org/wiki/special:MyLanguage/Helpo:Magiaj_ligoj mediawiki.org] pri kiel migri.",
-       "magiclink-tracking-isbn": "Paĝoj kiuj uzas ISBNajn magiajn ligojn",
-       "magiclink-tracking-isbn-desc": "Ĉi tiu paĝo uzas ISBNajn magiajn ligojn. Vidi [https://www.mediawiki.org/wiki/special:MyLanguage/Helpo:Magiaj_ligoj mediawiki.org] pri kiel migri.",
+       "magiclink-tracking-isbn": "Paĝoj kiuj uzas ISBNajn magiajn ligilojn",
+       "magiclink-tracking-isbn-desc": "Ĉi tiu paĝo uzas ISBNajn magiajn ligilojn. Vidi [https://www.mediawiki.org/wiki/special:MyLanguage/Helpo:Magiaj_ligoj mediawiki.org] pri kiel migri.",
        "specialloguserlabel": "Faranto:",
        "speciallogtitlelabel": "Celo (titolo aŭ  {{ns:user}}:salutnomo por uzanto):",
        "log": "Protokoloj",
        "whatlinkshere-hideredirs": "$1 alidirektilojn",
        "whatlinkshere-hidetrans": "$1 inkludojn",
        "whatlinkshere-hidelinks": "$1 ligilojn",
-       "whatlinkshere-hideimages": "$1 dosieraj ligoj",
+       "whatlinkshere-hideimages": "$1 dosier{{PLURAL:$1|a ligilo|aj ligiloj}}",
        "whatlinkshere-filters": "Filtriloj",
        "whatlinkshere-submit": "Ek",
        "autoblockid": "Aŭtomata forbaro #$1",
        "exporttext": "Vi povas elporti la tekston kaj la redaktohistorion de aparta paĝo aŭ de paĝaro kolektita en ia XML.\nĈi tio povas esti enportita en alian programon funkciantan per MediaWiki per la [[Special:Import|enportpaĝo]].\n\nPor elporti paĝojn, enigu la titolojn en la jena tekst-skatolo, po unu por linio, kaj elektu ĉu vi volas kaj la nunan version kaj ĉiujn antaŭajn versiojn, kun la paĝaj historiaj linioj, aŭ la nunan version kun la informo pri la lasta redakto.\n\nEn la lasta okazo, vi ankaŭ povas uzi ligilon, ekz-e [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] por la paĝo \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Elporti ĉiujn paĝojn",
        "exportcuronly": "Entenas nur la aktualan version, ne la malnovajn.",
-       "exportnohistory": "----\n'''Notu:''' Eksportado de la plena historio de paĝoj per ĉi paĝo estis malebligita pro funkciigaj kialoj.",
+       "exportnohistory": "----\n'''Notu:''' Elportado de la plena historio de paĝoj per ĉi paĝo estis malebligita pro funkciigaj kialoj.",
        "exportlistauthors": "Inkluzivi plenan liston de kontribuantoj por ĉiu paĝo.",
        "export-submit": "Elporti",
        "export-addcattext": "Aldoni paĝojn el kategorio:",
        "feedback-useragent": "Klienta aplikaĵo:",
        "searchsuggest-search": "Serĉi tra {{SITENAME}}",
        "searchsuggest-containing": "enhavas...",
-       "api-error-autoblocked": "Via IPa adreso estis blokita aŭtomate, ĉar ĝi estis uzita far forbara uzanto.",
-       "api-error-badaccess-groups": "Vi ne havas permeson alŝuti dosierojn al tiu ĉi vikio.",
        "api-error-badtoken": "Interna eraro: fuŝaĵo.",
-       "api-error-blocked": "Vi estis blokita pri redakto.",
-       "api-error-copyuploaddisabled": "Alŝuto per URL-adreso estas malebligata en tiu ĉi servilo.",
-       "api-error-duplicate": "Jam estas {{PLURAL:$1|alia dosiero|pluraj aliaj dosieroj}} en la retejo kun la sama enhavo.",
-       "api-error-duplicate-archive": "Jam estis {{PLURAL:$1|alia dosiero|pluraj aliaj dosieroj}} de sama enhavo en la retejo, sed {{PLURAL:$1|ĝi estis forigita|ili estis forigitaj}}.",
-       "api-error-empty-file": "La dosiero kiun vi sendis estis malplena.",
        "api-error-emptypage": "Kreo de novaj malplenaj paĝoj ne estas permesita.",
-       "api-error-fetchfileerror": "Interna eraro: io misfunkciis dum la dosiera prenado.",
-       "api-error-fileexists-forbidden": "Dosiero nomata \"$1\" jam existas kaj ne estas surskribebla.",
-       "api-error-fileexists-shared-forbidden": "Dosiero nomata \"$1\" jam existas en la kunhavata dosier-datumbazo kaj ne estas surskribebla.",
-       "api-error-file-too-large": "La dosiero kiun vi alŝutis estis tro granda.",
-       "api-error-filename-tooshort": "La dosiernomo estas tro mallonga.",
-       "api-error-filetype-banned": "Ĉi tiu tipo de dosiero estas malpermesita.",
-       "api-error-filetype-banned-type": "$1 ne estas {{PLURAL:$4|permesita dosiero-tipo|permesitaj dosiero-tipoj}}. {{PLURAL:$3|Permesita dosiero-tipo|Permesitaj dosiero-tipoj}} estas $2.",
-       "api-error-filetype-missing": "Mankas sufikso de la dosiero.",
-       "api-error-hookaborted": "La ŝanĝo kiun vi provis fari estis haltigita de etendaĵa hoko.",
-       "api-error-http": "Interna eraro: ne eblas konektiĝi al la servilo.",
-       "api-error-illegal-filename": "La dosiernomo ne estas permesata.",
-       "api-error-internal-error": "Interna eraro: io misokazis en la prilaboro de via alŝuto en la vikio.",
-       "api-error-invalid-file-key": "Interna eraro: la dosiero ne troveblis en la dumtempa stokejo.",
-       "api-error-missingparam": "Interna eraro: mankantaj parametroj en la alŝutopeto.",
-       "api-error-missingresult": "Interna eraro: ne eblis eltrovi ĉu la kopiado sukcesis.",
-       "api-error-mustbeloggedin": "Vi devas esti ensalutinta por rajti alŝuti dosierojn.",
-       "api-error-mustbeposted": "Interna eraro: la peto necesigas alŝuton en formato HTTP.",
-       "api-error-noimageinfo": "La alŝuto sukcesis, sed la servilo ne donis ajnan informon pri la dosiero.",
-       "api-error-nomodule": "Interna eraro: ne troveblas alŝuta helpilaro.",
-       "api-error-ok-but-empty": "Interna eraro: nenia respondo de la servilo.",
-       "api-error-overwrite": "Anstataŭigo de ekzistanta dosiero ne permesatas.",
-       "api-error-ratelimited": "Vi provas alŝuti pli da dosieroj dum mallonga periodo ol ĉi tiu vikio permesas.\nBonvolu provi denove en kelkaj minutoj.",
-       "api-error-stashfailed": "Interna eraro: la servilo malsukcesis stoki provizoran dosieron.",
        "api-error-publishfailed": "Interna eraro: Servilo malsukcesis eldoni provizoran dosieron.",
-       "api-error-stasherror": "Eraro okazis dum alŝutado de la dosiero al dosierujo.",
-       "api-error-stashedfilenotfound": "Dum provo alŝuti dosieron de rezervujo ne estis la dosiero trovita.",
-       "api-error-stashpathinvalid": "La vojo en rezervujo, kie devus esti la dosiero trovita, estas malvalida.",
-       "api-error-stashfilestorage": "Okazis eraro dum konservado de dosiero al rezervujo.",
-       "api-error-stashzerolength": "La servilo ne povis konservi dosieron en rezervujon, ĉar ĝi havis nulan longecon.",
-       "api-error-stashnotloggedin": "Vi devas esti ensalutinta por konservi dosieron en alŝutan rezervujon.",
-       "api-error-stashwrongowner": "La rezervuja dosiero, kiun vi provis aliri, ne apartenas al vi.",
-       "api-error-stashnosuchfilekey": "La dosiera ŝlosilo, kiun vi provis aliri en rezervujo, ne ekzistas.",
-       "api-error-timeout": "La servilo ne respondis ene de la atendita tempo.",
-       "api-error-unclassified": "Okazis nekonata eraro",
-       "api-error-unknown-code": "Nekonata eraro: \"$1\"",
-       "api-error-unknown-error": "Interna eraro: io misokazis en la alŝuto de via dosiero.",
+       "api-error-stashfailed": "Interna eraro: la servilo malsukcesis stoki provizoran dosieron.",
        "api-error-unknown-warning": "Nekonata averto: \"$1\".",
        "api-error-unknownerror": "Nekonata eraro: \"$1\"",
-       "api-error-uploaddisabled": "Alŝutato estas malebligata en tiu ĉi vikio.",
-       "api-error-verification-error": "Tiu ĉi dosiero eble estas difektita, aŭ havas la malĝustan dosieran finaĵon.",
-       "api-error-was-deleted": "Dosiero kun ĉi tiu nomo estis antaŭe alŝutita kaj sekvente forigita.",
        "duration-seconds": "$1 {{PLURAL:$1|sekundo|sekundoj}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minutoj}}",
        "duration-hours": "$1 {{PLURAL:$1|horo|horoj}}",
index 9ae18d0..7b76946 100644 (file)
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
        "recentchanges-submit": "Mostrar",
        "rcfilters-activefilters": "Filtros activos",
+       "rcfilters-restore-default-filters": "Restaurar filtros predeterminados",
+       "rcfilters-clear-all-filters": "Borrar todos los filtros",
        "rcfilters-search-placeholder": "Filtrar cambios recientes (navega o empieza a escribir)",
        "rcfilters-invalid-filter": "Filtro no válido",
+       "rcfilters-empty-filter": "No hay filtros activos. Se muestran todas las contribuciones.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-noresults": "No se encontraron filtros",
+       "rcfilters-filtergroup-registration": "Registro de usuario",
+       "rcfilters-filter-registered-label": "Registrados",
+       "rcfilters-filter-registered-description": "Editores conectados.",
+       "rcfilters-filter-unregistered-label": "No registrados",
+       "rcfilters-filter-unregistered-description": "Editores no conectados.",
        "rcfilters-filtergroup-authorship": "Editar autoría",
        "rcfilters-filter-editsbyself-label": "Tus propias ediciones",
        "rcfilters-filter-editsbyself-description": "Ediciones tuyas",
        "rcfilters-filter-editsbyother-label": "Ediciones de otros",
        "rcfilters-filter-editsbyother-description": "Ediciones creadas por otros usuarios (no por ti).",
-       "rcfilters-filtergroup-userExpLevel": "Nivel de experiencia del usuario",
+       "rcfilters-filtergroup-userExpLevel": "Nivel de experiencia (solo para usuarios registrados)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Recién llegados",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Editores recién llegados: menos de 10 ediciones y 4 días de actividad.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Menos de 10 ediciones y 4 días de actividad.",
        "rcfilters-filter-userExpLevel-learner-label": "Aprendices",
        "rcfilters-filter-userExpLevel-learner-description": "Más días de actividad y ediciones que los «recién llegados», pero menos que los «usuarios experimentados».",
        "rcfilters-filter-userExpLevel-experienced-label": "Usuarios experimentados",
        "rcfilters-filter-userExpLevel-experienced-description": "Más de 30 días de actividad y 500 ediciones.",
+       "rcfilters-filtergroup-automated": "Contribuciones automatizadas",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Ediciones realizadas por herramientas automatizadas.",
+       "rcfilters-filter-humans-label": "Ser humano (no bot)",
+       "rcfilters-filter-humans-description": "Ediciones realizadas por editores humanos.",
+       "rcfilters-filtergroup-significance": "Significación",
+       "rcfilters-filter-minor-label": "Ediciones menores",
+       "rcfilters-filter-minor-description": "Ediciones etiquetadas por el autor como menores.",
+       "rcfilters-filter-major-label": "Ediciones no menores",
+       "rcfilters-filter-major-description": "Ediciones no etiquetadas como menores.",
+       "rcfilters-filtergroup-changetype": "Tipo de cambio",
+       "rcfilters-filter-pageedits-label": "Ediciones de páginas",
+       "rcfilters-filter-pageedits-description": "Modificaciones del contenido wiki, discusiones, descripción de categorías...",
+       "rcfilters-filter-newpages-label": "Creaciones de páginas",
+       "rcfilters-filter-newpages-description": "Ediciones en las que se crean páginas nuevas.",
+       "rcfilters-filter-categorization-label": "Cambios de categorías",
+       "rcfilters-filter-categorization-description": "Registros de páginas añadidas o borradas de categorías.",
+       "rcfilters-filter-logactions-label": "Acciones registradas",
+       "rcfilters-filter-logactions-description": "Acciones administrativas, creación de cuentas, borrados de páginas, subidas de archivos...",
        "rcnotefrom": "Debajo aparece{{PLURAL:$5| el cambio|n los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
        "rclistfrom": "Mostrar cambios nuevos desde las $2 del $3",
        "rcshowhideminor": "$1 ediciones menores",
        "apisandbox-sending-request": "Enviando pedido a la API...",
        "apisandbox-loading-results": "Recibiendo resultados de la API...",
        "apisandbox-results-error": "Ocurrió un error durante la carga de la respuesta a la consulta API: $1",
-       "apisandbox-request-params-json": "Parámetros JSON:",
        "apisandbox-request-url-label": "URL solicitante:",
        "apisandbox-request-time": "Tiempo de solicitud: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrige el token y vuelve a enviar",
        "exif-compression-6": "JPEG (antiguo)",
        "exif-copyrighted-true": "Con derechos de autor",
        "exif-copyrighted-false": "No se ha definido el estado del copyright",
+       "exif-photometricinterpretation-0": "Blanco y negro (blanco es 0)",
        "exif-photometricinterpretation-1": "Blanco y negro (el negro es 0)",
        "exif-photometricinterpretation-4": "Máscara de transparencia",
        "exif-photometricinterpretation-5": "Separados (Probablemente CMYK)",
        "feedback-useragent": "Agente de usuario:",
        "searchsuggest-search": "Buscar en {{SITENAME}}",
        "searchsuggest-containing": "que contiene...",
-       "api-error-autoblocked": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por un usuario bloqueado.",
-       "api-error-badaccess-groups": "No puedes cargar archivos en este wiki.",
        "api-error-badtoken": "Error interno: Símbolo incorrecto.",
-       "api-error-blocked": "Has sido bloqueado de editar.",
-       "api-error-copyuploaddisabled": "La subida por URL está desactivada en este servidor.",
-       "api-error-duplicate": "Ya {{PLURAL:$1|existe otro archivo|existen otros archivos}} en el sitio con el mismo contenido.",
-       "api-error-duplicate-archive": "Ya {{PLURAL:$1|existía otro archivo|existían otros archivos}} en el sitio con el mismo contenido, pero {{PLURAL:$1|fue eliminado|fueron eliminados}}.",
-       "api-error-empty-file": "El archivo que enviaste estaba vacío.",
        "api-error-emptypage": "No se pueden crear páginas nuevas que estén vacías.",
-       "api-error-fetchfileerror": "Error interno: Algo salió mal mientras se obtenía el archivo.",
-       "api-error-fileexists-forbidden": "Ya existe un archivo con el nombre «$1» y no se puede sobrescribir.",
-       "api-error-fileexists-shared-forbidden": "Ya existe un archivo con el nombre «$1» en el repositorio de archivos compartido y no se puede sobrescribir.",
-       "api-error-file-too-large": "El archivo que enviaste era demasiado grande.",
-       "api-error-filename-tooshort": "El nombre de archivo es demasiado corto.",
-       "api-error-filetype-banned": "Este tipo de archivo está prohibido.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|no es un tipo de archivo permitido|no son tipos de archivos permitidos}}. {{PLURAL:$3|El tipo de archivo permitido es|Los tipos de archivos permitidos son}} $2.",
-       "api-error-filetype-missing": "El archivo no tiene extensión de archivo.",
-       "api-error-hookaborted": "La modificación que intentaste hacer fue cancelada por una extensión.",
-       "api-error-http": "Error interno: No se puede conectar al servidor.",
-       "api-error-illegal-filename": "El nombre de archivo no está permitido.",
-       "api-error-internal-error": "Error interno: Algo salió mal al procesar tu subida en el wiki.",
-       "api-error-invalid-file-key": "Error interno: No se encontró el archivo en el almacenamiento temporal.",
-       "api-error-missingparam": "Error interno: Faltan parámetros en la solicitud.",
-       "api-error-missingresult": "Error interno: No se pudo determinar si la copia tuvo éxito.",
-       "api-error-mustbeloggedin": "Debes iniciar sesión para subir archivos.",
-       "api-error-mustbeposted": "Error interno: La solicitud requiere HTTP POST.",
-       "api-error-noimageinfo": "La carga se realizó correctamente, pero el servidor no nos dio ninguna información sobre el archivo.",
-       "api-error-nomodule": "Error interno: No hay un módulo de carga configurado.",
-       "api-error-ok-but-empty": "Error interno: No hay respuesta del servidor.",
-       "api-error-overwrite": "No se permite sobrescribir un archivo existente.",
-       "api-error-ratelimited": "Estás tratando de subir, en un corto periodo de tiempo, más archivos de los que este wiki permite.\nPor favor, inténtalo de nuevo dentro de algunos minutos.",
-       "api-error-stashfailed": "Error interno: El servidor no pudo almacenar el archivo temporal.",
        "api-error-publishfailed": "Error interno: el servidor no pudo publicar el archivo temporal.",
-       "api-error-stasherror": "Ha ocurrido un error al subir el archivo al depósito.",
-       "api-error-stashedfilenotfound": "No se encontró el archivo del espacio temporal al intentar cargarlo.",
-       "api-error-stashpathinvalid": "La ruta donde debería encontrarse el archivo del espacio temporal no es válida.",
-       "api-error-stashfilestorage": "Ocurrió un error al almacenar el archivo en el espacio temporal.",
-       "api-error-stashzerolength": "El servidor no pudo almacenar el archivo en el espacio temporal porque este no contiene datos.",
-       "api-error-stashnotloggedin": "Debes acceder para guardar archivos en el espacio temporal de carga.",
-       "api-error-stashwrongowner": "El archivo del espacio temporal al que quieres acceder no te pertenece.",
-       "api-error-stashnosuchfilekey": "La clave de archivo del espacio temporal al que quieres acceder no existe.",
-       "api-error-timeout": "El servidor no respondió en el plazo previsto.",
-       "api-error-unclassified": "Ocurrió un error desconocido.",
-       "api-error-unknown-code": "Error desconocido: «$1»",
-       "api-error-unknown-error": "Error interno: Algo salió mal al intentar cargar el archivo.",
+       "api-error-stashfailed": "Error interno: El servidor no pudo almacenar el archivo temporal.",
        "api-error-unknown-warning": "Advertencia desconocida: «$1».",
        "api-error-unknownerror": "Error desconocido: «$1».",
-       "api-error-uploaddisabled": "Las subidas están desactivadas en este wiki.",
-       "api-error-verification-error": "Este archivo puede estar dañado, o tiene una extensión incorrecta.",
-       "api-error-was-deleted": "Un archivo de este nombre se ha subido previamente y eliminado posteriormente.",
        "duration-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}",
        "duration-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "usercssispublic": "Recuerda: las subpáginas CSS no deberían contener datos confidenciales, pues otros usuarios los pueden ver.",
        "restrictionsfield-badip": "Dirección o intervalo IP no válidos: $1",
        "restrictionsfield-label": "Intervalos de IP permitidos:",
-       "restrictionsfield-help": "Una dirección IP o intervalo de CIDR por renglón. Para activar todo, utiliza<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Una dirección IP o intervalo de CIDR por renglón. Para activarlo todo, utiliza <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisión $1",
        "pageid": "ID de página $1"
 }
index af3d0bf..0765249 100644 (file)
        "searcharticle": "Mine",
        "history": "Ajalugu",
        "history_short": "Ajalugu",
+       "history_small": "ajalugu",
        "updatedmarker": "uuendatud pärast viimast külastust",
        "printableversion": "Prinditav versioon",
        "permalink": "Püsilink",
        "createacct-another-realname-tip": "Tegelik nimi on valikuline.\nKui otsustad selle sisestada, kasutatakse seda kasutaja töö temale omistamiseks.",
        "pt-login": "Logi sisse",
        "pt-login-button": "Logi sisse",
+       "pt-login-continue-button": "Jätka sisselogimist",
        "pt-createaccount": "Loo konto",
        "pt-userlogout": "Logi välja",
        "php-mail-error-unknown": "Tundmatu tõrge PHP funktsioonis mail().",
        "blockedtitle": "Kasutaja on blokeeritud",
        "blockedtext": "'''Sinu kasutajanimi või IP-aadress on blokeeritud.'''\n\nBlokeeris $1.\nTema põhjendus on järgmine: ''$2''.\n\n* Blokeeringu algus: $8\n* Blokeeringu lõpp: $6\n* Sooviti blokeerida: $7\n\nKüsimuse arutamiseks võid pöörduda kasutaja $1 või mõne teise [[{{MediaWiki:Grouppage-sysop}}|administraatori]] poole.\n\nPane tähele, et sa ei saa kasutajale teadet saata, kui sa pole kinnitanud oma [[Special:Preferences|eelistuste lehel]] kehtivat e-posti aadressi.\n\nSinu praegune IP-aadress on $3 ning blokeeringu number on #$5. Lisa need andmed kõigile järelepärimistele, mida kavatsed teha.",
        "autoblockedtext": "Sinu IP-aadress blokeeriti automaatselt, sest seda kasutas teine kasutaja, kelle $1 blokeeris.\nPõhjendus on järgmine:\n\n:''$2''\n\n* Blokeeringu algus: $8\n* Blokeeringu lõpp: $6\n* Sooviti blokeerida: $7\n\nKüsimuse arutamiseks võid pöörduda kasutaja $1 või mõne teise [[{{MediaWiki:Grouppage-sysop}}|administraatori]] poole.\n\nPane tähele, et sa ei saa teisele kasutajale teadet saata, kui sa pole kinnitanud oma [[Special:Preferences|eelistuste lehel]] kehtivat e-posti aadressi ega ole selle kasutamisest blokeeritud.\n\nSinu praegune IP-aadress on $3 ja blokeeringu number #$5. Lisa need andmed kõigile järelpärimistele, mida kavatsed teha.",
+       "systemblockedtext": "MediaWiki tarkvara on sinu kasutajanime või IP-aadressi automaatselt blokeerinud.\nToodud on järgmine põhjus:\n\n:<em>$2</em>\n\n* Blokeerimisaeg: $8\n* Blokeeringu aegumistähtaeg: $6\n* Sooviti blokeerida: $7\n\nSinu praegune IP-aadress on $3.\nLisa need andmed kõigile järelepärimistele, mida kavatsed teha.",
        "blockednoreason": "põhjendust ei ole kirja pandud",
        "whitelistedittext": "Lehekülgede toimetamiseks pead $1.",
        "confirmedittext": "Lehekülgi ei saa toimetada enne e-posti aadressi kinnitamist.\nPalun määra ja kinnita e-posti aadress [[Special:Preferences|eelistuste leheküljel]].",
        "invalid-content-data": "Vigased sisuandmed",
        "content-not-allowed-here": "Lehekülg [[$2]] ei tohi sisaldada $1i.",
        "editwarning-warning": "Sellelt leheküljelt lahkumise tõttu võivad tehtud muudatused kaotsi minna.\nKui oled sisse loginud, saad selle hoiatuse eelistuste alaosas \"{{int:prefs-editing}}\" keelata.",
+       "editpage-invalidcontentmodel-title": "Toetamata sisumudel",
+       "editpage-invalidcontentmodel-text": "Sisumudelit \"$1\" ei toetata.",
        "editpage-notsupportedcontentformat-title": "Sisuvormingu tugi puudub",
        "editpage-notsupportedcontentformat-text": "Sisumudelil $2 puudub sisuvormingu $1 tugi.",
        "content-model-wikitext": "vikitekst",
        "mergehistory-empty": "Ühtegi redaktsiooni ei saa liita.",
        "mergehistory-done": "Lehekülje $1 {{PLURAL:$3|üks redaktsioon|$3 redaktsiooni}} liideti lehega [[:$2]].",
        "mergehistory-fail": "Muudatuste ajaloo liitmine ebaõnnestus. Palun kontrolli lehekülje ja aja parameetreid.",
+       "mergehistory-fail-bad-timestamp": "Ajatempel on vigane.",
+       "mergehistory-fail-invalid-source": "Alliklehekülg on vigane.",
+       "mergehistory-fail-invalid-dest": "Sihtlehekülg on vigane.",
+       "mergehistory-fail-no-change": "Ajalugude liitmisel ei liidetud ühtegi redaktsiooni. Palun kontrolli lehekülgede ja aja parameetrid veelkord üle.",
+       "mergehistory-fail-permission": "Ajalugude liitmiseks vajalikud õigused puuduvad.",
+       "mergehistory-fail-self-merge": "Allik- ja sihtlehekülg on üks ja sama lehekülg.",
+       "mergehistory-fail-timestamps-overlap": "Alliklehekülje redaktsioonid kattuvad ajaliselt sihtlehekülje redaktsioonidega või on neist uuemad.",
        "mergehistory-fail-toobig": "Ajalugusid ei õnnestu liita, sest teisaldada tuleks rohkem kui {{PLURAL:$1|üks redaktsioon|$1 redaktsiooni}}, mis on piirmäär.",
        "mergehistory-no-source": "Alliklehekülge $1 pole olemas.",
        "mergehistory-no-destination": "Sihtlehekülge $1 pole olemas.",
        "search-external": "Välisotsing",
        "searchdisabled": "Otsimine on preagu keelatud.\nVahepeal saad otsimiseks Google'it kasutada.\nPane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võib olla iganenud.",
        "search-error": "Otsimise ajal ilmnes tõrge: $1",
+       "search-warning": "Otsimisel esines hoiatus: $1",
        "preferences": "Eelistused",
        "mypreferences": "Eelistused",
        "prefs-edits": "Redigeerimiste arv:",
        "userrights-user-editname": "Sisesta kasutajanimi:",
        "editusergroup": "Laadi kasutajarühmad",
        "editinguser": "Kasutaja '''[[User:$1|$1]]''' $2 õiguste muutmine",
+       "viewinguserrights": "{{GENDER:$1|Kasutaja}} <strong>[[User:$1|$1]]</strong> $2 õiguste vaatamine",
        "userrights-editusergroup": "Kasutajarühmade muutmine",
+       "userrights-viewusergroup": "Kasutajarühmade vaatamine",
        "saveusergroups": "Salvesta {{GENDER:$1|kasutajarühmad}}",
        "userrights-groupsmember": "Kuulub rühmadesse:",
        "userrights-groupsmember-auto": "Kuulub vaikimisi rühmadesse:",
        "feedback-useragent": "Kasutajaagent:",
        "searchsuggest-search": "Otsi {{GRAMMAR:elative|{{SITENAME}}}}",
        "searchsuggest-containing": "sisalduv...",
-       "api-error-badaccess-groups": "Sul pole selles vikis üleslaadimisõigust.",
        "api-error-badtoken": "Sisemine tõrge: Sobimatu nimi.",
-       "api-error-copyuploaddisabled": "URLi kaudu üleslaadimine on selles serveris keelatud.",
-       "api-error-duplicate": "Siin on {{PLURAL:$1|teine samasisuline fail|mõned teised samasisulised failid}} juba olemas.",
-       "api-error-duplicate-archive": "Siin {{PLURAL:$1|on teine samasisuline fail|olid mõned teised samasisulised failid}} juba olemas, aga {{PLURAL:$1|see|need}} kustutati.",
-       "api-error-empty-file": "Üleslaaditav fail on tühi.",
        "api-error-emptypage": "Uute tühjade lehekülgede loomine pole lubatud.",
-       "api-error-fetchfileerror": "Sisemine tõrge: Midagi läks faili kättesaamisel valesti.",
-       "api-error-fileexists-forbidden": "Fail nimega \"$1\" on juba olemas ja seda ei saa üle kirjutada.",
-       "api-error-fileexists-shared-forbidden": "Fail nimega \"$1\" on jagatud failivaramus juba olemas ja seda ei saa üle kirjutada.",
-       "api-error-file-too-large": "Üleslaaditav fail on liiga suur.",
-       "api-error-filename-tooshort": "Failinimi on liiga lühike.",
-       "api-error-filetype-banned": "Antud failitüüp on keelatud.",
-       "api-error-filetype-banned-type": "$1 pole lubatud {{PLURAL:$4|failitüüp|failitüübid}}.  Lubatud {{PLURAL:$3|failitüüp|failitüübid}} on  $2.",
-       "api-error-filetype-missing": "Failinime tagant puudub laiend.",
-       "api-error-hookaborted": "Tarkvaralisa katkestas muudatuse tegemise.",
-       "api-error-http": "Sisetõrge: Serveriga pole võimalik ühendust luua.",
-       "api-error-illegal-filename": "Failinimi pole lubatud.",
-       "api-error-internal-error": "Sisetõrge: Sinu faili vikisse üleslaadimise juures läks midagi valesti.",
-       "api-error-invalid-file-key": "Sisetõrge: Faili ei leitud ajutisest mälust.",
-       "api-error-missingparam": "Sisetõrge: Päringust puudub mõni parameeter.",
-       "api-error-missingresult": "Sisetõrge: Ei õnnestu kindlaks teha, kas kopeerimine õnnestus.",
-       "api-error-mustbeloggedin": "Failide üleslaadimiseks pead sisse logima.",
-       "api-error-mustbeposted": "Sisetõrge: Päring tuleb sooritada, kasutades HTTP POST-meetodit.",
-       "api-error-noimageinfo": "Üleslaadimine õnnestus, aga server ei andnud faili kohta mingit teavet.",
-       "api-error-nomodule": "Sisetõrge: Üleslaadimismoodul on määramata.",
-       "api-error-ok-but-empty": "Sisetõrge: Server ei vasta.",
-       "api-error-overwrite": "Olemasolevate failide ülekirjutamine pole lubatud.",
-       "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\"",
-       "api-error-unknown-error": "Sisetõrge: Sellal kui sinu faili üritati üles laadida, läks midagi valesti.",
+       "api-error-stashfailed": "Sisetõrge: Serveril ei õnnestunud ajutist faili talletada.",
        "api-error-unknown-warning": "Teadmata hoiatus: $1",
        "api-error-unknownerror": "Tundmatu tõrge: \"$1\".",
-       "api-error-uploaddisabled": "Üleslaadimine on selles vikis keelatud.",
-       "api-error-verification-error": "See fail võib olla rikutud või vale laiendiga.",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekundit}}",
        "duration-minutes": "$1 {{PLURAL:$1|minut|minutit}}",
        "duration-hours": "$1 {{PLURAL:$1|tund|tundi}}",
        "userjsispublic": "Pea silmas, et JavaScripti alamleheküljed ei tohiks sisaldada konfidentsiaalseid andmeid, kuna neid näevad teised kasutajad.",
        "restrictionsfield-badip": "Vigane IP-aadress või -aadressivahemik: $1",
        "restrictionsfield-label": "Lubatud IP-aadressivahemikud:",
-       "restrictionsfield-help": "Üks IP-aadress või CIDR-vahemik rea kohta. Et lubada kõik, kasuta süntaksit <br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Üks IP-aadress või CIDR-vahemik rea kohta. Et lubada kõik, kasuta järgmist süntaksit:<pre>0.0.0.0/0\n::/0</pre>"
 }
index c687b6c..aba144a 100644 (file)
@@ -47,7 +47,7 @@
        "tog-watchdeletion": "Ezabatzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu",
        "tog-watchuploads": "Gehitu igotzen ditudan fitxategiak nire jarraipen zerrendara",
        "tog-watchrollback": "Nire jarraipen zerrendan rollbacka egin dudan orrialdeak erakutsi",
-       "tog-minordefault": "Lehenetsi bezala aldaketa txiki bezala markatu guztiak",
+       "tog-minordefault": "Aukera lehenetsitzat, markatu aldaketa guztiak txikitzat",
        "tog-previewontop": "Aurrebista aldaketa koadroaren aurretik erakutsi",
        "tog-previewonfirst": "Lehen aldaketan aurrebista erakutsi",
        "tog-enotifwatchlistpages": "Bidal iezadazue e-posta bat, jarraitzen ari naizen orrialde edo fitxategi bat aldatzen denean",
        "subcategories": "Azpikategoriak",
        "category-media-header": "Media \"$1\" kategorian",
        "category-empty": "''Kategoria honek ez dauka artikulurik uneotan.''",
-       "hidden-categories": "{{PLURAL:$1|Izkutuko kategoria|Izkutuko kategoriak}}",
+       "hidden-categories": "{{PLURAL:$1|Ezkutuko kategoria|Ezkutuko kategoriak}}",
        "hidden-category-category": "Kategoria ezkutuak",
        "category-subcat-count": "{{PLURAL:$2|Kategoria honek beste honako azpikategoria baino ez du.|Kategoria honek honako {{PLURAL:$1|azpikategoria du|$1 azpikategoriak ditu}}, guztira dauden $2tik.}}",
        "category-subcat-count-limited": "Kategoria honek {{PLURAL:$1|azpikategoria hau du|$1 azpikategoria hauek ditu}}.",
        "previousdiff": "← Aldaketa zaharragoa",
        "nextdiff": "Aldaketa berriagoa →",
        "mediawarning": "'''Oharra''': Fitxategi honek kode mingarria izan lezake.\nZure sisteman exekutatzea arriskutsua izan liteke.",
-       "imagemaxsize": "Irudiaren tamainaren muga:<br />''(fitxategi deskribapen-orrietarako)''",
+       "imagemaxsize": "Irudiaren tamainaren muga:<br />''(fitxategia deskribatzen duten orrietarako)''",
        "thumbsize": "Irudi txikiaren tamaina:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|orri|orri}}",
        "file-info": "fitxategiaren tamaina: $1, MIME mota: $2",
        "feedback-thanks-title": "Eskerrik asko!",
        "searchsuggest-search": "{{SITENAME}} wikian bilatu",
        "searchsuggest-containing": "edukian...",
-       "api-error-badaccess-groups": "Ez duzu baimendik fitxategi hauek wiki honetara igotzeko.",
        "api-error-badtoken": "Barne akatsa: token okerra.",
-       "api-error-empty-file": "Bidali duzun fitxategia hutsik dago.",
        "api-error-emptypage": "Berria sortzerako garaian orrialde hutsak ezin dira erabili.",
-       "api-error-fetchfileerror": "Barne akatsa: zerbait gaizki joan da fitxategia eskuratzerakoan.",
-       "api-error-file-too-large": "Bidali duzun fitxategia handiegia zen.",
-       "api-error-filename-tooshort": "Fitxategiaren izena laburregia da.",
-       "api-error-filetype-banned": "Mota horretako fitxategiak debekatuta daude.",
-       "api-error-filetype-missing": "Fitxategiak ez zuen luzapenik.",
-       "api-error-http": "Barne-errorea: Ezin da zerbitzariarekin konektatu.",
-       "api-error-illegal-filename": "Fitxategiaren izena ez da onartzen.",
-       "api-error-internal-error": "Barne-errorea: Zerbaitek huts egin du zuk wikira igotakoa prozesatzean.",
-       "api-error-invalid-file-key": "Barne-errorea: Ez da fitxategia aurkitu aldi baterako biltegian.",
-       "api-error-missingparam": "Barne-errorea: Parametroak falta dira eskaeran.",
-       "api-error-missingresult": "Barne-errorea: Ezin da zehaztu kopia ondo burutu den ala ez.",
-       "api-error-mustbeloggedin": "Fitxategiak igotzeko izena emanda eduki behar duzu.",
-       "api-error-mustbeposted": "Barne arazoa: HTTP POST beharrezkoa da.",
-       "api-error-noimageinfo": "Igoera ondo egin da, baina zerbitzariak ez digu informaziorik eman zerbitzariaren inguruan.",
-       "api-error-nomodule": "Barne arazoa: igoera modulurik ez dago.",
-       "api-error-ok-but-empty": "Barne arazoa: zerbitzariaren erantzunik ez.",
-       "api-error-overwrite": "Existitzen den fitxategi bat gain-idaztea ez da posible.",
-       "api-error-stashfailed": "Barne arazoa: Zerbitzariak ezin izan du behin-behineko fitxategia gorde",
        "api-error-publishfailed": "Barne-errorea: Zerbitzariak ezin izan du aldi baterako fitxategia gorde.",
-       "api-error-timeout": "Zerbitzariak ez du erantzun espero zitekeen denboran.",
-       "api-error-unclassified": "Ezezaguna den errorea gertatu da.",
-       "api-error-unknown-code": "Akats ezezaguna: \"$1\".",
-       "api-error-unknown-error": "Barne arazoa: fitxategia igotzen saiatzerakoan zerbait gaizki egon da.",
+       "api-error-stashfailed": "Barne arazoa: Zerbitzariak ezin izan du behin-behineko fitxategia gorde",
        "api-error-unknown-warning": "Ohartarazpen ezezaguna: \"$1\".",
        "api-error-unknownerror": "Akats ezezaguna: \"$1\".",
-       "api-error-uploaddisabled": "Wiki honetan ezin dira igoerak egin.",
-       "api-error-verification-error": "Fitxategia ustela izan daiteke, edo fitxategi luzapen ez egokia du.",
        "duration-seconds": "{{PLURAL:$1|Segundu $1|$1 segundu}}",
        "duration-minutes": "{{PLURAL:$1|Minutu $1|$1 minutu}}",
        "duration-hours": "{{PLURAL:$1|Ordu $1|$1 ordu}}",
index 54f5134..1953747 100644 (file)
        "tooltip-pt-login": "Te recomendamus que te rustris, inque nu es mestel.",
        "tooltip-pt-logout": "Salil",
        "tooltip-ca-talk": "Caraba al tentu el artículu",
-       "tooltip-ca-edit": "Pueis eital esta página.\nPol favol, gasta el botón \"previsoreal\" enantis d'emburacal.",
+       "tooltip-ca-edit": "Eital esta páhina",
        "tooltip-ca-addsection": "Prencipial una nueva seción",
        "tooltip-ca-viewsource": "Esta páhina está protehia (nu pueis hazel chambus).",
        "tooltip-ca-history": "Velsionis anterioris d'esta página.",
index 0862c21..c4f30c9 100644 (file)
        "feedback-useragent": "رابط کاربر:",
        "searchsuggest-search": "جستجو در {{SITENAME}}",
        "searchsuggest-containing": "صفحه‌های دربردارنده...",
-       "api-error-autoblocked": "نشانی آی‌پی شما به صورت خودکار بسته شده‌است، چون توسط یک کاربر بسته‌شده استفاده می‌شد.",
-       "api-error-badaccess-groups": "شما اجازهٔ بارگذاری پرونده‌ها را در این ویکی ندارید.",
        "api-error-badtoken": "خطای داخلی: کد امنیتی اشتباه (Bad token).",
-       "api-error-blocked": "شما از ویرایش بسته شده‌اید.",
-       "api-error-copyuploaddisabled": "بارگذاری با استفاده از نشانی اینترنتی در این کارساز غیرفعال است.",
-       "api-error-duplicate": "{{PLURAL:$1|پروندهٔ دیگری|چند پروندهٔ دیگر}} در تارنما با محتوای یکسان وجود داشت.",
-       "api-error-duplicate-archive": "{{PLURAL:$1| پروندهٔ دیگری|چند پروندهٔ دیگر}} در تارنما با محتوای یکسان وجود داشت، ولی حذف {{PLURAL:$1|شده است|شده‌اند}}.",
-       "api-error-empty-file": "پرونده‌ای که شما ارسال کردید خالی بود.",
        "api-error-emptypage": "ایجاد صفحه‌های خالی مجاز نیست.",
-       "api-error-fetchfileerror": "خطای داخلی: در هنگام گرفتن پرونده، یک چیزی درست پیش نرفت.",
-       "api-error-fileexists-forbidden": "یک پرونده با نام \"$1\" موجود است و امکان بازنویسی نیست.",
-       "api-error-fileexists-shared-forbidden": "یک پرونده با نام \"$1\" در انبار اشتراک پرونده موجود است و امکان بازنویسی نیست.",
-       "api-error-file-too-large": "پرونده‌ای که شما ارسال کردید بیش از اندازه بزرگ بود.",
-       "api-error-filename-tooshort": "نام پرونده بیش از اندازه کوتاه است.",
-       "api-error-filetype-banned": "این نوع پرونده ممنوع است.",
-       "api-error-filetype-banned-type": "&lrm;$1 {{PLURAL:$4|یک نوع پروندهٔ نامجاز است|انواع پروندهٔ نامجاز هستند}}. {{PLURAL:$3|نوع پروندهٔ مجاز|انواع پروندهٔ مجاز}} از این قرار است: $2.",
-       "api-error-filetype-missing": "پرونده فرمت ندارد.",
-       "api-error-hookaborted": "اصلاحیه‌ای که شما سعی در ایجاد آن بودید توسط افزونه‌ای به دام افتاد.",
-       "api-error-http": "خطای داخلی: قادر به اتصال به سرور نیست.",
-       "api-error-illegal-filename": "نام پرونده مجاز نیست.",
-       "api-error-internal-error": "خطای داخلی: با پردازش بارگذاری شما در ویکی، یک چیز اشتباه پیش رفت.",
-       "api-error-invalid-file-key": "خطای داخلی: پرونده در حافظهٔ موقت موجود نیست.",
-       "api-error-missingparam": "خطای داخلی: پارامترهای ناموجود در درخواست.",
-       "api-error-missingresult": "خطای داخلی: نمی‌توان فهمید کپی‌برداری موفق بوده‌است یا نه.",
-       "api-error-mustbeloggedin": "برای بارگذاری پرونده‌ها شما باید به سامانه وارد شوید.",
-       "api-error-mustbeposted": "خطای داخلی: درخواست باید از روش POST HTTP ارسال گردد.",
-       "api-error-noimageinfo": "بارگذاری موفق بود، ولی کارساز هیچ اطلاعاتی دربارهٔ پرونده به ما نداد.",
-       "api-error-nomodule": "خطای داخلی: پودمان بارگذاری تنظیم نشده‌است.",
-       "api-error-ok-but-empty": "خطای داخلی : پاسخی از سرور دریافت نشد.",
-       "api-error-overwrite": "جای نوشتن یک پرونده موجود مجاز نیست.",
-       "api-error-ratelimited": "شما سعی داريد، در بازه زمانی کوتاهی، بيشتر از تعدادی که اين ويکی اجازه داده‌است پرونده بارگذاری کنيد.\nلطفاً چند دقيقه بعد مجدداً تلاش نماييد.",
-       "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 \"",
-       "api-error-unknown-error": "خطای داخلی: در زمانی که شما در حال تلاش برای بارگذاری پروندهٔ‌تان بودید، یک چیز اشتباه پیش رفت.",
+       "api-error-stashfailed": "خطای داخلی: کارساز نمی‌تواند پرونده موقت را ذخیره کند.",
        "api-error-unknown-warning": "اخطار ناشناخته: $1",
        "api-error-unknownerror": "خطای ناشناخته: «$1».",
-       "api-error-uploaddisabled": "بارگذاری در این ویکی غیرفعال است.",
-       "api-error-verification-error": "ممکن است پرونده آسیب دیده باشد، یا دارای پسوند نادرست باشد.",
-       "api-error-was-deleted": "پرونده‌ای با همين نام قبلاً بارگذاری و متعاقباً حذف شده است.",
        "duration-seconds": "$1 ثانیه",
        "duration-minutes": "$1 دقیقه",
        "duration-hours": "$1 ساعت",
index c2638ad..730bcc3 100644 (file)
        "searcharticle": "Siirry",
        "history": "Sivun historia",
        "history_short": "Historia",
+       "history_small": "historia",
        "updatedmarker": "päivitetty viimeisimmän käyntisi jälkeen",
        "printableversion": "Tulostettava versio",
        "permalink": "Ikilinkki",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (katso myös [[Special:NewPages|lista uusista sivuista]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Näytä",
+       "rcfilters-activefilters": "Aktiiviset suodattimet",
+       "rcfilters-invalid-filter": "Suodatin on epäkelpo",
+       "rcfilters-filterlist-title": "Suodattimet",
+       "rcfilters-filterlist-noresults": "Ei löytynyt suodattimia",
        "rcnotefrom": "Alla ovat muutokset <strong>$3, $4</strong> lähtien. (Enintään <strong>$1</strong> näytetään.)",
        "rclistfrom": "Näytä uudet muutokset $3 kello $2 alkaen",
        "rcshowhideminor": "$1 pienet muutokset",
        "pageinfo-length": "Sivun pituus (tavuina)",
        "pageinfo-article-id": "Sivun tunnistenumero",
        "pageinfo-language": "Sivun sisällön kieli",
+       "pageinfo-language-change": "vaihda",
        "pageinfo-content-model": "Sivun sisältömalli",
        "pageinfo-content-model-change": "muuta",
        "pageinfo-robot-policy": "Hakukonemerkinnät",
        "feedback-useragent": "User agent:",
        "searchsuggest-search": "Hae {{GRAMMAR:elative|{{SITENAME}}}}",
        "searchsuggest-containing": "sisältää...",
-       "api-error-autoblocked": "Sinun IP-osoitteesi on estetty automaattisesti, koska sitä on käyttänyt estetty käyttäjätunnus.",
-       "api-error-badaccess-groups": "Sinulla ei ole oikeutta tallentaa tiedostoja tähän wikiin.",
        "api-error-badtoken": "Sisäinen virhe: virheellinen tarkistussumma.",
-       "api-error-blocked": "Sinut on estetty muokkaamasta.",
-       "api-error-copyuploaddisabled": "Tallentaminen URL-osoitteesta ei ole käytössä.",
-       "api-error-duplicate": "Samansisältöisiä tiedostoja löytyi {{PLURAL:$1|yksi kappale|useampia kappaleita}}.",
-       "api-error-duplicate-archive": "Sivustolla oli aiemmin {{PLURAL:$1|toinen samansisältöinen tiedosto|toisia samansisältöisiä tiedostoja}}, mutta {{PLURAL:$1|se|ne}} poistettiin.",
-       "api-error-empty-file": "Määrittämäsi tiedosto on tyhjä.",
        "api-error-emptypage": "Ei ole sallittua luoda uutta, tyhjää sivua.",
-       "api-error-fetchfileerror": "Sisäinen virhe: Jotakin meni pieleen kun tiedostoa haettiin.",
-       "api-error-fileexists-forbidden": "Tiedosto nimellä \"$1\" on jo olemassa eikä sitä voi korvata.",
-       "api-error-fileexists-shared-forbidden": "Tiedosto nimeltä \"$1\" on jo olemassa yhteisessä tietovarastossa eikä sitä voi korvata.",
-       "api-error-file-too-large": "Määrittämäsi tiedosto on liian iso.",
-       "api-error-filename-tooshort": "Tiedoston nimi on liian lyhyt.",
-       "api-error-filetype-banned": "Tämän tyyppisten tiedostojen tallentaminen on kielletty.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|ei ole sallittu tiedostomuoto|eivät ole sallittuja tiedostomuotoja}}. {{PLURAL:$3|Sallittu tiedostomuoto on|Sallittuja tiedostomuotoja ovat}} $2.",
-       "api-error-filetype-missing": "Tiedostolta puuttuu tiedostopääte.",
-       "api-error-hookaborted": "Laajennuskoodi esti yrittämäsi muutoksen.",
-       "api-error-http": "Sisäinen virhe: palvelimeen ei saatu yhteyttä.",
-       "api-error-illegal-filename": "Tiedoston nimi ei kelpaa.",
-       "api-error-internal-error": "Sisäinen virhe: jotain meni vikaan tallennuksesi käsittelyssä.",
-       "api-error-invalid-file-key": "Sisäinen virhe: tiedostoa ei löytynyt välikaisvarastosta.",
-       "api-error-missingparam": "Sisäinen virhe: pyynnöstä puutuu parametreja.",
-       "api-error-missingresult": "Sisäinen virhe: ei voitu varmistaa, että tallennus onnistui.",
-       "api-error-mustbeloggedin": "Sinun pitää olla kirjautunut sisään, jotta voisit tallentaa tiedostoja.",
-       "api-error-mustbeposted": "Sisäinen virhe: HTTP POST-pyyntö edellytetty.",
-       "api-error-noimageinfo": "Tallennus onnistui, mutta palvelin ei antanut meille tietoja tiedostosta.",
-       "api-error-nomodule": "Sisäinen virhe: tallennusmoduulia ei ole asetettu.",
-       "api-error-ok-but-empty": "Sisäinen virhe: palvelimelta ei saatu vastausta.",
-       "api-error-overwrite": "Olemassa olevan tiedoston korvaaminen toisella ei ole sallittua.",
-       "api-error-ratelimited": "Yrität tallentaa lyhyessä ajassa enemmän tiedostoja kuin tämä wiki sallii.\nYritä uudelleen muutaman minuutin kuluttua.",
-       "api-error-stashfailed": "Sisäinen virhe: Väliaikaisen tiedoston tallentaminen epäonnistui.",
        "api-error-publishfailed": "Sisäinen virhe: Väliaikaisen tiedoston julkaiseminen epäonnistui.",
-       "api-error-stasherror": "Tiedostoa ladattaessa tapahtui virhe.",
-       "api-error-stashedfilenotfound": "Tallennettavaa tiedostoa ei löytynyt säilöstä.",
-       "api-error-stashpathinvalid": "Hakupolku, jossa säilötyn tiedoston olisi pitänyt olla, oli virheellinen.",
-       "api-error-stashfilestorage": "Tiedoston tallentaminen säilöön epäonnistui.",
-       "api-error-stashzerolength": "Palvelin ei voinut säilöä tiedostoa, koska sen pituus oli nolla.",
-       "api-error-stashnotloggedin": "Sinun täytyy kirjautua sisään, jotta voit tallentaa tiedostoja lataussäilöön.",
-       "api-error-stashwrongowner": "Tiedosto, jota yritit käyttää säilössä, ei ole sinun omasi.",
-       "api-error-stashnosuchfilekey": "Tiedoston avainta, jota yritit käyttää säilössä, ei ole olemassa.",
-       "api-error-timeout": "Palvelin ei vastannut odotetun ajan kuluessa.",
-       "api-error-unclassified": "Tapahtui tuntematon virhe.",
-       "api-error-unknown-code": "Tuntematon virhe: $1.",
-       "api-error-unknown-error": "Sisäinen virhe: Jotain meni vikaan kun tiedostoasi yritettiin tallentaa.",
+       "api-error-stashfailed": "Sisäinen virhe: Väliaikaisen tiedoston tallentaminen epäonnistui.",
        "api-error-unknown-warning": "Tuntematon varoitus: $1.",
        "api-error-unknownerror": "Tuntematon virhe: $1.",
-       "api-error-uploaddisabled": "Tiedostojen tallentaminen ei ole käytössä.",
-       "api-error-verification-error": "Tiedosto voi olla vioittunut, tai sillä saattaa olla väärä tiedostopääte.",
-       "api-error-was-deleted": "Tämänniminen tiedosto on aikaisemmin tallennettu ja sittemmin poistettu.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunti|sekuntia}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuutti|minuuttia}}",
        "duration-hours": "$1 {{PLURAL:$1|tunti|tuntia}}",
index 9f26ba0..df0c8a7 100644 (file)
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Lister",
        "rcfilters-activefilters": "Filtres actifs",
+       "rcfilters-restore-default-filters": "Rétablir les filtres par défaut",
+       "rcfilters-clear-all-filters": "Effacer tous les filtres",
        "rcfilters-search-placeholder": "Modifications récentes de filtres (naviguer ou commencer à saisir)",
        "rcfilters-invalid-filter": "Filtre non valide",
+       "rcfilters-empty-filter": "Aucun filtre actif. Toutes les contributions sont affichées.",
        "rcfilters-filterlist-title": "Filtres",
        "rcfilters-filterlist-noresults": "Aucun filtre trouvé",
+       "rcfilters-filtergroup-registration": "Inscription de l’utilisateur",
+       "rcfilters-filter-registered-label": "Enregistré",
+       "rcfilters-filter-registered-description": "Éditeurs connectés.",
+       "rcfilters-filter-unregistered-label": "Désinscrit",
+       "rcfilters-filter-unregistered-description": "Éditeurs qui ne sont pas connectés.",
        "rcfilters-filtergroup-authorship": "Modifier la paternité",
        "rcfilters-filter-editsbyself-label": "Vos propres modifications",
        "rcfilters-filter-editsbyself-description": "Vos modifications.",
        "rcfilters-filter-editsbyother-label": "Modifications par d’autres.",
        "rcfilters-filter-editsbyother-description": "Modifications créées par d’autres utilisateurs (pas vous).",
-       "rcfilters-filtergroup-userExpLevel": "Niveau d’expérience utilisateur",
+       "rcfilters-filtergroup-userExpLevel": "Niveau d’expérience (uniquement pour les utilisateurs enregistrés)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Nouveaux arrivants",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Tout nouveaux éditeurs : moins de 10 modifications et 4 jours d’activité.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Moins de 10 modifications et 4 jours d’activité.",
        "rcfilters-filter-userExpLevel-learner-label": "Apprentis",
-       "rcfilters-filter-userExpLevel-learner-description": "Davantage de jours d’activité et de modifications que les 'Nouveaux arrivants' mais moins que les 'Utilisateurs expérimentés'.",
+       "rcfilters-filter-userExpLevel-learner-description": "Davantage de jours d’activité et de modifications que les « Nouveaux arrivants » mais moins que les « Utilisateurs expérimentés ».",
        "rcfilters-filter-userExpLevel-experienced-label": "Utilisateurs expérimentés",
        "rcfilters-filter-userExpLevel-experienced-description": "Plus de 30 jours d’activité et 500 modifications",
+       "rcfilters-filtergroup-automated": "Contributions automatisées",
+       "rcfilters-filter-bots-label": "Robot",
+       "rcfilters-filter-bots-description": "Modifications faites par des outils automatisés.",
+       "rcfilters-filter-humans-label": "Humain (non robot)",
+       "rcfilters-filter-humans-description": "Modifications faites par des éditeurs humains.",
+       "rcfilters-filtergroup-significance": "Signification",
+       "rcfilters-filter-minor-label": "Modifications mineures",
+       "rcfilters-filter-minor-description": "Modifications que l’auteur a marquées comme mineures.",
+       "rcfilters-filter-major-label": "Modifications non mineures",
+       "rcfilters-filter-major-description": "Modifications non marquées comme mineures.",
+       "rcfilters-filtergroup-changetype": "Type de modification",
+       "rcfilters-filter-pageedits-label": "Modifications de page",
+       "rcfilters-filter-pageedits-description": "Modifications du contenu du wiki, des discussions, des descriptions des catégories…",
+       "rcfilters-filter-newpages-label": "Créations de page",
+       "rcfilters-filter-newpages-description": "Modifications créant de nouvelles pages.",
+       "rcfilters-filter-categorization-label": "Modifications de catégorie",
+       "rcfilters-filter-categorization-description": "Enregistrements de pages ajoutées ou supprimées des catégories.",
+       "rcfilters-filter-logactions-label": "Actions tracées",
+       "rcfilters-filter-logactions-description": "Actions d’administration, créations de compte, suppression de pages, téléchargements…",
        "rcnotefrom": "Ci-dessous {{PLURAL:$5|la modification effectuée|les modifications effectuées}} depuis le <strong>$3, $4</strong> (affichées jusqu’à <strong>$1</strong>).",
        "rclistfrom": "Afficher les nouvelles modifications depuis le $3 à $2",
        "rcshowhideminor": "$1 les modifications mineures",
        "upload_directory_read_only": "Le serveur web n’a pas accès en écriture au répertoire d’import de fichier ($1).",
        "uploaderror": "Erreur lors de l’import",
        "upload-recreate-warning": "<strong>Attention : Un fichier portant ce nom a été supprimé ou déplacé.</strong>\n\nLe journal des suppressions et celui des déplacements de cette page sont affichés ici pour informations :",
-       "uploadtext": "Utilisez ce formulaire pour importer des fichiers sur le serveur.\nPour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. L’import est aussi enregistré dans le [[Special:Log/upload|journal d’import des fichiers]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].\n\nPour inclure un fichier dans une page, utilisez un lien de la forme :\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code>''', pour afficher le fichier en pleine résolution (dans le cas d’une image) ;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.png|200px|thumb|left|texte descriptif]]</nowiki></code>''' pour utiliser une miniature de 200 pixels de large dans une boîte à gauche avec « texte descriptif » comme description ;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fichier.ogg]]</nowiki></code>''' pour lier directement vers le fichier sans l’afficher.",
+       "uploadtext": "Utilisez ce formulaire pour téléverser des fichiers sur le serveur.\nPour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des fichiers téléversés]]. Les envois multiples sont également tracés dans le [[Special:Log/upload|journal des téléversements]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].\n\nPour inclure un fichier dans une page, utilisez un lien ayant l'un des formats suivants :\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code></strong>, pour afficher le fichier en pleine résolution (dans le cas d’une image) ;\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.png|200px|thumb|left|texte descriptif]]</nowiki></code></strong> pour utiliser une miniature de 200 pixels de large dans une boîte à gauche avec « texte descriptif » comme description ;\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fichier.ogg]]</nowiki></code></strong> pour relier directement le fichier sans l’afficher.",
        "upload-permitted": "{{PLURAL:$2|Format|Formats}} de fichiers {{PLURAL:$2|autorisé|autorisés}} : $1.",
        "upload-preferred": "{{PLURAL:$2|Format|Formats}} de fichiers {{PLURAL:$2|préféré|préférés}} : $1.",
        "upload-prohibited": "‎{{PLURAL:$2|Format|Formats}} de fichiers {{PLURAL:$2|interdit|interdits}} : $1.",
        "apisandbox-sending-request": "Envoi de la requête à l'API...",
        "apisandbox-loading-results": "Réception des résultats de l'API...",
        "apisandbox-results-error": "Une erreur s'est produite lors du chargement de la réponse à la requête de l'API: $1.",
-       "apisandbox-request-params-json": "Paramètres JSON :",
        "apisandbox-request-url-label": "Requête URL :",
        "apisandbox-request-time": "Durée de la demande: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrigez le jeton et renvoyez",
        "tooltip-invert": "Cochez cette case pour cacher les modifications des pages dans l'espace de noms sélectionné (et l'espace de noms associé si coché)",
        "tooltip-whatlinkshere-invert": "Cochez cette case pour cacher les liens des pages dans l'espace de nom sélectionné.",
        "namespace_association": "Espace de noms associé",
-       "tooltip-namespace_association": "Cochez cette case pour inclure également l'espace de noms de discussion associé à l'espace de noms sélectionné",
+       "tooltip-namespace_association": "Cochez cette case pour inclure également l'espace de noms de discussion ou du sujet, associé à l'espace de noms sélectionné",
        "blanknamespace": "(Principal)",
        "contributions": "Contributions de l’{{GENDER:$1|utilisateur|utilisatrice}}",
        "contributions-title": "Liste des contributions de l’utilisat{{GENDER:$1|eur|rice|eur}} $1",
        "exporttext": "Vous pouvez exporter en XML le texte et l’historique d’une page ou d’un ensemble de pages.\nLe résultat peut alors être importé dans un autre wiki utilisant le logiciel MediaWiki via la [[Special:Import|page d’importation]].\n\nPour exporter des pages, entrez leurs titres dans la boîte de texte ci-dessous, à raison d’un titre par ligne. Sélectionnez si vous désirez la version actuelle avec toutes les anciennes versions, avec les lignes de l’historique de la page, ou simplement la page actuelle avec des informations sur la dernière modification.\n\nDans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pour la page [[{{MediaWiki:Mainpage}}]].",
        "exportall": "Exporter toutes les pages",
        "exportcuronly": "Exporter uniquement la version courante, sans l’historique complet",
-       "exportnohistory": "----\n'''Note :''' l’exportation de l’historique complet des pages à l’aide de ce formulaire a été désactivée pour des raisons de performance.",
+       "exportnohistory": "----\n<strong>Note :</strong> l’exportation de l’historique complet des pages à l’aide de ce formulaire a été désactivée pour des raisons de performance.",
        "exportlistauthors": "Inclure une liste complète des contributeurs pour chaque page",
        "export-submit": "Exporter",
        "export-addcattext": "Ajouter les pages de la catégorie :",
        "feedback-useragent": "Agent utilisateur :",
        "searchsuggest-search": "Rechercher sur {{SITENAME}}",
        "searchsuggest-containing": "contenant...",
-       "api-error-autoblocked": "Votre adresse IP a été bloquée automatiquement, parce qu’elle a été utilisée par un utilisateur bloqué.",
-       "api-error-badaccess-groups": "Vous n'êtes pas autorisé à téléverser des fichiers sur ce wiki.",
        "api-error-badtoken": "Erreur interne : mauvais « jeton ».",
-       "api-error-blocked": "Vous avez été bloqué en édition.",
-       "api-error-copyuploaddisabled": "Les versements via URL sont désactivés sur ce serveur.",
-       "api-error-duplicate": "Il y a déjà {{PLURAL:$1|un autre fichier présent|d’autres fichiers présents}} sur le site avec le même contenu.",
-       "api-error-duplicate-archive": "Il y avait déjà {{PLURAL:$1|un autre fichier présent|d’autres fichiers présents}} sur le site avec le même contenu, mais {{PLURAL:$1|il a été supprimé|ils ont été supprimés}}.",
-       "api-error-empty-file": "Le fichier que vous avez soumis était vide.",
        "api-error-emptypage": "Création de pages vide n'est pas autorisée.",
-       "api-error-fetchfileerror": "Erreur interne : Quelque chose s'est mal passé lors de la récupération du fichier.",
-       "api-error-fileexists-forbidden": "Un fichier nommé \"$1\" existe déjà, et ne peut pas être écrasé.",
-       "api-error-fileexists-shared-forbidden": "Un fichier nommé \"$1\" existe déjà dans le répertoire des fichiers partagés, et ne peut pas être écrasé.",
-       "api-error-file-too-large": "Le fichier que vous avez soumis était trop grand.",
-       "api-error-filename-tooshort": "Le nom du fichier est trop court.",
-       "api-error-filetype-banned": "Ce type de fichier est interdit.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|n'est pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. {{PLURAL:$3|Le type de fichier autorisé est |Les types de fichiers autorisés sont}} $2.",
-       "api-error-filetype-missing": "L'extension du fichier est manquante.",
-       "api-error-hookaborted": "La modification que vous avez essayé de faire a été annulée par une extension.",
-       "api-error-http": "Erreur interne : ne peut se connecter au serveur.",
-       "api-error-illegal-filename": "Le nom du fichier n'est pas autorisé.",
-       "api-error-internal-error": "Erreur interne : quelque chose s'est mal passé lors du traitement de votre import sur le wiki.",
-       "api-error-invalid-file-key": "Erreur interne : fichier non trouvé dans l'espace de stockage temporaire.",
-       "api-error-missingparam": "Erreur interne : Il manque des paramètres dans la requête.",
-       "api-error-missingresult": "Erreur interne : Nous n'avons pas pu déterminer si la copie avait réussi.",
-       "api-error-mustbeloggedin": "Vous devez être connecté pour télécharger des fichiers.",
-       "api-error-mustbeposted": "Erreur interne : cette requête nécessite la méthode HTTP POST.",
-       "api-error-noimageinfo": "Le téléchargement a réussi, mais le serveur n’a pas fourni d’information sur le fichier.",
-       "api-error-nomodule": "Erreur interne : aucun module de versement défini.",
-       "api-error-ok-but-empty": "Erreur interne : Le serveur n'a pas répondu.",
-       "api-error-overwrite": "Écraser un fichier existant n'est pas autorisé.",
-       "api-error-ratelimited": "Vous essayez de téléverser plus de fichiers dans un court espace de temps que ce que ce wiki peut accepter.\nVeuillez réessayer dans quelques minutes.",
-       "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 »",
-       "api-error-unknown-error": "Erreur interne : quelque chose s'est mal passé lors du téléversement de votre fichier.",
+       "api-error-stashfailed": "Erreur interne : le serveur n'a pas pu enregistrer le fichier temporaire.",
        "api-error-unknown-warning": "Avertissement inconnu : « $1 ».",
        "api-error-unknownerror": "Erreur inconnue : « $1 ».",
-       "api-error-uploaddisabled": "Le téléversement est désactivé sur ce wiki.",
-       "api-error-verification-error": "Ce fichier est peut-être corrompu, ou son extension est incorrecte.",
-       "api-error-was-deleted": "Un fichier portant ce nom a déjà été importé puis supprimé.",
        "duration-seconds": "$1 seconde{{PLURAL:$1||s}}",
        "duration-minutes": "$1 minute{{PLURAL:$1||s}}",
        "duration-hours": "$1 heure{{PLURAL:$1||s}}",
        "usercssispublic": "Veuillez noter: les sous-pages CSS ne doivent pas contenir de données confidentielles parce qu'elles sont visibles des autres utilisateurs.",
        "restrictionsfield-badip": "Adresse IP ou plage non valide : $1",
        "restrictionsfield-label": "Plages IP autorisées :",
-       "restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "version $1",
        "pageid": "ID de page $1"
 }
index 93fb479..65859a8 100644 (file)
        "passwordreset-emaildisabled": "Chaidh feartan a' phuist-d a chur à comas san uicidh seo.",
        "passwordreset-username": "Ainm-cleachdaiche:",
        "passwordreset-domain": "Àrainn-lìn:",
-       "passwordreset-capture": "A bheil thu airson coimhead air a' phost-d?",
-       "passwordreset-capture-help": "Ma chuireas tu cromag sa bhogsa seo, chì thusa am post-d (leis an fhacal-fhaire sealach) agus gheibh an cleachdaiche e cuideachd.",
        "passwordreset-email": "Seòladh puist-d:",
        "passwordreset-emailtitle": "Dàta a' chunntais air {{SITENAME}}",
        "passwordreset-emailtext-ip": "Dh'iarr cuideigin (thu fhèin, 's mathaid, on t-seòladh IP $1) am facal-faire airson {{SITENAME}} ($4) ath-shuidheachadh. Tha {{PLURAL:$3|an cunntas|na cunntasan}} a leanas co-cheangailte ris a' phost-d seo:\n\n$2\n\nFalbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire shealach|na faclan-faire sealach}} seo an ceann $5 {{PLURAL:$5|latha|latha|làithean|latha}}.\nBu chòir dhut logadh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
        "saveprefs": "Sàbhail",
        "restoreprefs": "Aisig na roghainnean bunaiteach uile (anns gach earrann)",
        "prefs-editing": "Deasachadh",
-       "rows": "Sreathan",
-       "columns": "Colbhan",
        "searchresultshead": "Lorg",
        "stub-threshold": "An stairsneach airson fòrmatadh cheanglaichean nam bun ($1):",
        "stub-threshold-disabled": "À comas",
        "userrights-reason": "Adhbhar:",
        "userrights-no-interwiki": "Chan eil cead agad ceadan chleachdaichean a dheasachadh air uicidhean eile.",
        "userrights-nodatabase": "Chan eil an stòr-dàta $1 ann no chan e fear ionadail a tha ann.",
-       "userrights-nologin": "Feumaidh tu [[Special:UserLogin|logadh a-steach]] le cunntas rianaire ach an toir thu ceadan nam ball seachad.",
-       "userrights-notallowed": "Chan eil cead agad gus ceadan nam ball a chur ris no a thoirt air falbh.",
        "userrights-changeable-col": "Buidhnean as urrainn dhut atharrachadh",
        "userrights-unchangeable-col": "Buidhnean nach urrainn dhut atharrachadh",
        "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "Tha còmhstri le atharraichean air ceadan nam ball! Thoir sùil air a-rithist 's dearbhaich na h-atharraichean agad.",
-       "userrights-removed-self": "Tha thu air na ceadan agad fhèin a thoirt air falbh. Mar sin, chan eil cead agad tuilleadh gus an duilleag seo inntrigeadh.",
        "group": "Buidheann:",
        "group-user": "Cleachdaichean",
        "group-autoconfirmed": "Cleachdaichean fèin-dearbhte",
        "right-siteadmin": "Cead gus an stòr-dàta a glasadh 's a' ghlas a thoirt fo bharr",
        "right-override-export-depth": "Cead gus duilleagan às-phortadh, a' gabhail a-seach duilleagan ceangailte suas ri doimhneachd de 5",
        "right-sendemail": "Cead gus puist-d a chur gu cleachdaichean eile",
-       "right-passwordreset": "Cead gus puist-d ath-shuidheachadh nam facal-faire a shealltainn",
        "right-managechangetags": "Cruthaich is gnìomhaich no neo-ghnìomhaich [[Special:Tags|tagaichean]]",
        "newuserlogpage": "Loga cruthachadh nan cleachdaichean",
        "newuserlogpagetext": "Seo loga nan cleachdaichean a chaidh a chruthachadh.",
        "feedback-subject": "Cuspair:",
        "feedback-submit": "Cuir a-null",
        "feedback-thanks": "Mòran taing! Chaidh do bheachd a phostadh air an duilleag \"[$2 $1]\".",
+       "feedback-thanks-title": "Ceud taing!",
        "searchsuggest-search": "Lorg",
        "searchsuggest-containing": "anns a bheil...",
-       "api-error-badaccess-groups": "Chan eil cead agad gus faidhlichean a luchdadh suas dhan uicidh seo.",
        "api-error-badtoken": "Mearachd taobh a-staigh: Droch thòcan.",
-       "api-error-copyuploaddisabled": "Tha luchdadh suas le URL à comas air an fhrithealaiche seo.",
-       "api-error-duplicate": "Tha {{PLURAL:$1|faidhle eile|faidhlichean eile}} air an làrach seo mar-thà sa bheil an aon susbaint.",
-       "api-error-duplicate-archive": "Tha {{PLURAL:$1|faidhle eile|faidhlichean eile}} air an làrach seo mar-thà sa bheil an aon susbaint ach chaidh {{PLURAL:$1|a sguabadh|an sguabadh}} às.",
-       "api-error-empty-file": "Tha am faidhle a chuir thu a-null falamh.",
        "api-error-emptypage": "Chan fhaodar duilleagan falamh ùra a chruthachadh.",
-       "api-error-fetchfileerror": "Mearachd taobh a-staigh: Chaidh rudeigin cearr le faighinn an fhaidhle.",
-       "api-error-fileexists-forbidden": "Tha faidhle air a bheil \"$1\" ann mar-thà 's cha ghabh sgrìobhadh thairis air.",
-       "api-error-fileexists-shared-forbidden": "Tha faidhle air a bheil \"$1\" san ionad-tasgaich cho-roinnte mar-thà 's cha ghabh sgrìobhadh thairis air.",
-       "api-error-file-too-large": "Tha am faidhle a chuir thu a-null ro mhòr.",
-       "api-error-filename-tooshort": "Tha ainm an fhaidhle ro ghoirid.",
-       "api-error-filetype-banned": "Tha an seòrsa faidhle seo toirmisgte.",
-       "api-error-filetype-banned-type": "Chan eil $1 {{PLURAL:$4|'na seòrsa faidhle|'nan seòrsaichean faidhle}} ceadaichte. Is $2 {{PLURAL:$3|an seòrsa faidhle|na seòrsaichean faidhle}} ceadaichte.",
-       "api-error-filetype-missing": "Tha leudachan a dhìth air an fhaidhle.",
-       "api-error-hookaborted": "Chaidh sgur dhen atharrachadh a dh'fheuch thu ri dèanamh le leudachan.",
-       "api-error-http": "Mearachd taobh a-staigh: Cha b' urrainn dhuinn ceangal ris an fhrithealaiche.",
-       "api-error-illegal-filename": "Chan eil ainm an fhaidhle ceadaichte.",
-       "api-error-internal-error": "Mearachd tabh a-staigh: chaidh rudeigin cearr rè an luchdaidh suas agad dhan uicidh.",
-       "api-error-invalid-file-key": "Mearachd taobh a-staigh: Cha deach am faidhle a lorg san stòras shealach.",
-       "api-error-missingparam": "Mearachd taobh a-staigh: Tha paramadair a dhìth air an iarrtas.",
-       "api-error-missingresult": "Mearachd taobh a-staigh: Cha d' fhuair sinn a-mach co-dhiù an do shoirbhich leis an lethbhreac gus nach do shoirbhich.",
-       "api-error-mustbeloggedin": "Feumaidh tu logadh a-steach mus luchdaich thu suas faidhle.",
-       "api-error-mustbeposted": "Mearachd taobh a-staigh: Tha an t-iarrtas ag iarraidh HTTP POST.",
-       "api-error-noimageinfo": "Shoirbhich leis an luchdadh suas, ach cha dug am frithealaiche fiosrachadh sam bith dhuinn mun fhaidhle.",
-       "api-error-nomodule": "Mearachd taobh a-staigh: cha deach mòideal luchdaidh suas a shuidheachadh.",
-       "api-error-ok-but-empty": "Mearachd taobh a-staigh: Cha d' fhuair sinn freagairt on fhrithealaiche.",
-       "api-error-overwrite": "Chan fhaodar sgrìobhadh thairis air faidhle a tha ann mar-thà.",
-       "api-error-stashfailed": "Mearachd taobh a-staigh: Cha deach leis an fhrithealaiche faidhle sealach a stòradh.",
        "api-error-publishfailed": "Mearachd taobh a-staigh: Cha deach leis an fhrithealaiche faidhle sealach fhoillseachadh.",
-       "api-error-stasherror": "Thachair mearachd le luchdadh suas an fhaidhle dhan tasgadan.",
-       "api-error-timeout": "Cha d' fhuair sinn freagairt on fhrithealaiche ri àm.",
-       "api-error-unclassified": "Thachair mearachd neo-aithnichte.",
-       "api-error-unknown-code": "Mearachd neo-aithnichte: \"$1\".",
-       "api-error-unknown-error": "Mearachd tabh a-staigh: Chaidh rudeigin cearr rè luchdadh suas an fhaidhle agad.",
+       "api-error-stashfailed": "Mearachd taobh a-staigh: Cha deach leis an fhrithealaiche faidhle sealach a stòradh.",
        "api-error-unknown-warning": "Rabhadh neo-aithnichte: \"$1\".",
        "api-error-unknownerror": "Mearachd neo-aithnichte: \"$1\".",
-       "api-error-uploaddisabled": "Tha luchdadh suas à comas air an uicidh seo.",
-       "api-error-verification-error": "Dh'fhaoidte gu bheil am faidhle seo coirbte no gu bheil an leudachan cearr air.",
        "duration-seconds": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
        "duration-minutes": "$1 {{PLURAL:$1|mhionaid|mhionaid|mionaidean|mionaid}}",
        "duration-hours": "$1 {{PLURAL:$1|uair|uair|uairean|uair}}",
index e18eaa8..17ecd13 100644 (file)
        "rcfilters-invalid-filter": "Filtro no válido",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-noresults": "Non se atoparon filtros",
+       "rcfilters-filter-registered-label": "Rexistrado",
+       "rcfilters-filter-unregistered-label": "Non rexistrado",
        "rcfilters-filtergroup-authorship": "Editar autoría",
        "rcfilters-filter-editsbyself-label": "As súas propias edicións",
        "rcfilters-filter-editsbyself-description": "Edicións súas.",
        "rcfilters-filter-userExpLevel-learner-description": "Máis días de actividade e edicións que 'novatos' pero menos que 'usuarios experimentados'.",
        "rcfilters-filter-userExpLevel-experienced-label": "Usuarios experimentados",
        "rcfilters-filter-userExpLevel-experienced-description": "Máis de 30 días de actividade e 500 edicións.",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Humano (non bot)",
+       "rcfilters-filter-minor-label": "Edicións menores",
+       "rcfilters-filter-minor-description": "Edicións que o autor etiquetou como menores.",
+       "rcfilters-filtergroup-changetype": "Tipo de cambio",
        "rcnotefrom": "A continuación {{PLURAL:$5|móstrase o cambio feito|móstranse os cambios feitos}} desde o <strong>$3</strong> ás <strong>$4</strong> (móstranse <strong>$1</strong> como máximo).",
        "rclistfrom": "Mostrar os cambios novos desde o $3 ás $2",
        "rcshowhideminor": "$1 as edicións pequenas",
        "uncategorizedcategories": "Categorías sen categorías",
        "uncategorizedimages": "Ficheiros sen categorías",
        "uncategorizedtemplates": "Modelos sen categorías",
+       "uncategorized-categories-exceptionlist": "# Contén unha lista de categorías que non van aparecer en Especial:UncategorizedCategories. Unha por liña, comezando con \"*\". As liñas que comecen con outro carácter (incluíndo espazos en branco) ignóranse. Use \"#\" para  engadir comentarios.",
        "unusedcategories": "Categorías sen uso",
        "unusedimages": "Imaxes sen uso",
        "wantedcategories": "Categorías requiridas",
        "apisandbox-sending-request": "Enviando a petición á API...",
        "apisandbox-loading-results": "Recibindo os resultados da API...",
        "apisandbox-results-error": "Produciuse un erro mentres se cargaba a resposta da petición á API: $1.",
-       "apisandbox-request-params-json": "Parámetros JSON:",
        "apisandbox-request-url-label": "URL da solicitude:",
        "apisandbox-request-time": "Duración da solicitude: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrixir o identificador e reenviar",
        "feedback-useragent": "Axente de usuario:",
        "searchsuggest-search": "Procurar en {{SITENAME}}",
        "searchsuggest-containing": "que conteña...",
-       "api-error-autoblocked": "A súa dirección IP foi bloqueada automaticamente porque foi usada por un usuario bloqueado.",
-       "api-error-badaccess-groups": "Non ten os permisos necesarios para cargar ficheiros neste wiki.",
        "api-error-badtoken": "Erro interno: Pase incorrecto.",
-       "api-error-blocked": "Foi bloqueado fronte á edición.",
-       "api-error-copyuploaddisabled": "As cargas mediante URL están desactivadas neste servidor.",
-       "api-error-duplicate": "Xa hai {{PLURAL:$1|outro ficheiro| outros ficheiros}} no sitio co mesmo contido.",
-       "api-error-duplicate-archive": "Xa había {{PLURAL:$1|outro ficheiro|outros ficheiros}} no sitio co mesmo contido, pero {{PLURAL:$1|foi borrado|foron borrados}}.",
-       "api-error-empty-file": "O ficheiro que enviou estaba baleiro.",
        "api-error-emptypage": "Non está permitida a creación de páxinas novas que estean baleiras.",
-       "api-error-fetchfileerror": "Erro interno: Houbo un problema ao buscar o ficheiro.",
-       "api-error-fileexists-forbidden": "Xa existe un ficheiro co nome \"$1\". Non se pode sobrescribir.",
-       "api-error-fileexists-shared-forbidden": "Xa existe un ficheiro co nome \"$1\" no repositorio de ficheiros compartidos. Non se pode sobrescribir.",
-       "api-error-file-too-large": "O ficheiro que enviou era grande de máis.",
-       "api-error-filename-tooshort": "O nome do ficheiro é curto de máis.",
-       "api-error-filetype-banned": "Este tipo de ficheiro está prohibido.",
-       "api-error-filetype-banned-type": "$1 non {{PLURAL:$4|é un tipo de ficheiro permitido|son tipos de ficheiro permitidos}}. {{PLURAL:$3|O tipo de ficheiro permitido é|Os tipos de ficheiro permitidos son}} $2.",
-       "api-error-filetype-missing": "Fáltalle a extensión ao ficheiro.",
-       "api-error-hookaborted": "O asociador da extensión cancelou a modificación que intentou realizar.",
-       "api-error-http": "Erro interno: Non se puido conectar co servidor.",
-       "api-error-illegal-filename": "O nome do ficheiro non está permitido.",
-       "api-error-internal-error": "Erro interno: Houbo un problema ao procesar a súa carga no wiki.",
-       "api-error-invalid-file-key": "Erro interno: Non se atopou o ficheiro no depósito temporal.",
-       "api-error-missingparam": "Erro interno: Faltan parámetros na solicitude.",
-       "api-error-missingresult": "Erro interno: Non se puido determinar se a copia saíu ben.",
-       "api-error-mustbeloggedin": "Debe acceder ao sistema para cargar ficheiros.",
-       "api-error-mustbeposted": "Erro interno: A solicitude necesita HTTP POST.",
-       "api-error-noimageinfo": "A carga realizouse correctamente, pero o servidor non nos deu ningunha información sobre o ficheiro.",
-       "api-error-nomodule": "Erro interno: Non hai ningún módulo de cargas.",
-       "api-error-ok-but-empty": "Erro interno: Non hai resposta do servidor.",
-       "api-error-overwrite": "Non está permitido sobrescribir un ficheiro existente.",
-       "api-error-ratelimited": "Está intentando subir máis ficheiros nun pequeno espazo de tempo do que permite este wiki.\nPor favor, inténteo de novo nuns minutos.",
-       "api-error-stashfailed": "Erro interno: O servidor non puido almacenar o ficheiro temporal.",
        "api-error-publishfailed": "Erro interno: O servidor non puido publicar o ficheiro temporal.",
-       "api-error-stasherror": "Houbo un erro ao subir o ficheiro ao depósito.",
-       "api-error-stashedfilenotfound": "O ficheiro apartado non se atopou ao intentar envialo.",
-       "api-error-stashpathinvalid": "A ruta na que se apartara o ficheiro non era correcta.",
-       "api-error-stashfilestorage": "Produciuse un erro ao apartar o ficheiro.",
-       "api-error-stashzerolength": "O servidor non puido apartar o ficheiro porque o ficheiro está baleiro.",
-       "api-error-stashnotloggedin": "Debe identificarse para gardar ficheiros no apartado de envío.",
-       "api-error-stashwrongowner": "O ficheiro apartado ao que intentaba acceder non lle pertence a vostede.",
-       "api-error-stashnosuchfilekey": "A clave de ficheiro apartado á que intentaba acceder non existe.",
-       "api-error-timeout": "O servidor non respondeu no tempo esperado.",
-       "api-error-unclassified": "Houbo un erro descoñecido.",
-       "api-error-unknown-code": "Erro descoñecido: \"$1\"",
-       "api-error-unknown-error": "Erro interno: Houbo un problema ao intentar cargar o ficheiro.",
+       "api-error-stashfailed": "Erro interno: O servidor non puido almacenar o ficheiro temporal.",
        "api-error-unknown-warning": "Advertencia descoñecida: \"$1\".",
        "api-error-unknownerror": "Erro descoñecido: \"$1\".",
-       "api-error-uploaddisabled": "As cargas están desactivadas neste wiki.",
-       "api-error-verification-error": "Este ficheiro podería estar corrupto ou ter unha extensión incorrecta.",
-       "api-error-was-deleted": "Un ficheiro con este mesmo nome xa foi cargado con anterioridade e posteriormente eliminado.",
        "duration-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}",
        "duration-hours": "$1 {{PLURAL:$1|hora|horas}}",
index 1648e9e..46af76a 100644 (file)
        "jumptonavigation": "گردسن",
        "jumptosearch": "وامج",
        "view-pool-error": "سرورؤنˇ سر پۊر بار هننأ. پۊر پۊرˇ کارگيرؤن حقسأى کأدرن که اي ولگه فأندرن. \nلؤطف بۊکۊنين ىيسکالى صبر بدأرين.\n\n$1",
-       "aboutsite": "راجه به {{SITENAME}}",
+       "aboutsite": "راجع به {{SITENAME}}",
        "aboutpage": "Project:راجه به",
        "copyrightpage": "{{ns:project}}:چاکۊدنحق",
        "currentevents": "هسأىي تفاقؤن",
        "newpageletter": "نؤ",
        "boteditletter": "ر",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کارگير}} پىگير]",
-       "rc-change-size-new": "$1 {{PLURAL:$1|باÙ\89ت}} ØªØºÙ\89يرˇ پسي",
+       "rc-change-size-new": "$1 {{PLURAL:$1|باÙ\89ت}} ØªØºÙ\8aيرˇ پسي",
        "recentchangeslinked": "مۊرتبطˇ تغىيرؤن",
        "recentchangeslinked-toolbox": "مۊرتبطˇ تغىيرؤن",
        "recentchangeslinked-summary": "اي جير، ىکته ليسته تينين بىنين آخري تغييرؤن أجي اۊ ولگؤنˇ مئن کي اي ولگˇ جي خال ببؤن (ىا جرگهٔ مؤردˇ نظرˇ جي). اۊ ولگؤني که [[Special:Watchlist|شيمئه پىگيري ليست]]۱ميئن دبۊن پۊررنگ نۊشؤن بدأبۊنن.",
        "tooltip-pt-login": "بئتره ديرين بشين؛ بسچی گه ايجباری نیه.",
        "tooltip-pt-logout": "بيرين شؤن",
        "tooltip-pt-createaccount": "بئتره کارگیري حساب چاکۊنين ؤ ديرين بشين؛ بسچي که حساب چاؤدن ايجباری نیه.",
-       "tooltip-ca-talk": "گب راجه به ولگˇ مؤحتوا",
+       "tooltip-ca-talk": "گب راجع به ولگˇ مؤحتوا",
        "tooltip-ca-edit": "اي ولگه دچينواچين بۊکۊنين",
        "tooltip-ca-addsection": "ىکته تازه وابين چاکۊن",
        "tooltip-ca-viewsource": "اي ولگ بپاسأکه.\nتؤنين اينˇ سربسه بينين",
index 1006cc8..2f79206 100644 (file)
        "nov": "Nop",
        "dec": "Des",
        "january-date": "$1 Yanuari",
-       "february-date": "$1 Peburuari",
+       "february-date": "$1 Pebruari",
        "march-date": "$1 Maret",
        "april-date": "$1 April",
        "may-date": "$1 Mei",
-       "june-date": "$1 Yuni",
-       "july-date": "$1 Yuli",
+       "june-date": "$1 Juni",
+       "july-date": "$1 Juli",
        "august-date": "$1 Agustus",
        "september-date": "$1 September",
        "october-date": "$1 Oktober",
        "edit-local": "Ubawa deskripsi lokal",
        "create": "Mohutu",
        "create-local": "Duhengi deskripsi lokal",
-       "editthispage": "Ubawa halaamani boti",
-       "create-this-page": "Pohutuwa halaamani boti",
+       "editthispage": "Boli'a halaman botiye",
+       "create-this-page": "Pohutuwa halamani botiye",
        "delete": "Luluta",
-       "deletethispage": "Luluta halaamani boti",
+       "deletethispage": "Luluta halaman botiye",
        "undeletethispage": "Bataliya moluluto",
        "undelete_short": "Batali moluluto {{PLURAL:$1|tuwawu uba|$1 ubawa}}",
        "viewdeleted_short": "Bilohi {{PLURAL:$1|tuwawu yiluluto uba|$1 yiluluto ubawa}}",
        "protect": "Dahawa",
-       "protect_change": "gantiyi",
+       "protect_change": "boli'a",
        "protectthispage": "Dahawa halaman boti",
        "unprotect": "dudaha ubaalo",
        "unprotectthispage": "ubawa dudaha halaman botiye",
        "talk": "Biisalawa",
        "views": "Bibilohu",
        "toolbox": "Pilaakasi",
+       "tool-link-userrights-readonly": "Bilohi lembo'a {{GENDER:$1|pengguna}}",
+       "tool-link-emailuser": "Lawola email ode {{GENDER:$1|user}}",
        "userpage": "Bilohi halaman pengguna",
        "projectpage": "Bilohi halaman proyek",
        "imagepage": "Bilohi halaman berkas",
        "disclaimers": "Momaahu",
        "disclaimerpage": "Project:Momaahu umum",
        "edithelp": "Wubodu momoli'o",
-       "helppage-top-gethelp": "Tuulungi",
+       "helppage-top-gethelp": "Wubodu",
        "mainpage": "Halaman Bungaliyo",
        "mainpage-description": "Halaman bungaliyo",
        "policy-url": "Project:Kebijakan",
        "toc": "Tuwango",
        "showtoc": "popobilehe",
        "hidetoc": "wanto'a",
-       "collapsible-collapse": "Lolohubu",
-       "collapsible-expand": "Duhengi",
+       "collapsible-collapse": "Wanto'a",
+       "collapsible-expand": "Bu'ade",
        "confirmable-confirm": "Delo {{GENDER:$1|yi'o}} yakini?",
        "confirmable-yes": "Jo",
        "confirmable-no": "De'e",
        "logentry-move-move": "$1 {{GENDER:$2|moheyi}} halaman $3 ode $4",
        "logentry-newusers-create": "Ta ohu'uwo akun $1 {{GENDER:$2|mohutu}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|mengunggah}} $3",
-       "searchsuggest-search": "Lolohe"
+       "searchsuggest-search": "Lolohe {{SITENAME}}"
 }
index 28bbe2a..b471859 100644 (file)
        "rcfilters-invalid-filter": "מסנן בלתי־תקין",
        "rcfilters-filterlist-title": "מסננים",
        "rcfilters-filterlist-noresults": "לא נמצאו מסננים",
+       "rcfilters-filtergroup-registration": "רישום העורכים",
+       "rcfilters-filter-registered-label": "רשומים",
+       "rcfilters-filter-registered-description": "עורכים שנכנסו לחשבון.",
+       "rcfilters-filter-unregistered-label": "לא רשומים",
+       "rcfilters-filter-unregistered-description": "עורכים שלא נכנסו לחשבון.",
        "rcfilters-filtergroup-authorship": "מבצעי העריכה",
        "rcfilters-filter-editsbyself-label": "עריכות שלך",
        "rcfilters-filter-editsbyself-description": "עריכות שביצעת בעצמך.",
        "rcfilters-filter-editsbyother-label": "עריכות של אחרים",
        "rcfilters-filter-editsbyother-description": "עריכות שבוצעו על־ידי משתמשים אחרים (מלבדך).",
-       "rcfilters-filtergroup-userExpLevel": "הניסיון והוותק של העורכים",
+       "rcfilters-filtergroup-userExpLevel": "הניסיון והוותק (למשתמשים רשומים בלבד)",
        "rcfilters-filter-userExpLevel-newcomer-label": "חדשים",
-       "rcfilters-filter-userExpLevel-newcomer-description": "×¢×\95ר×\9b×\99×\9d ×\97×\93ש×\99×\9d ×\9e×\90×\95×\93: ×¤×\97×\95ת ×\9eÖ¾10 ×¢×¨×\99×\9b×\95ת ×\95־4 ימים של פעילות.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "פ×\97×\95ת ×\9eÖ¾10 ×¢×¨×\99×\9b×\95ת ×\95×\9e־4 ימים של פעילות.",
        "rcfilters-filter-userExpLevel-learner-label": "לומדים",
        "rcfilters-filter-userExpLevel-learner-description": "יותר ימי פעילות ועריכות מ\"חדשים\", אבל פחות מ\"משתמשים מנוסים\".",
        "rcfilters-filter-userExpLevel-experienced-label": "משתמשים מנוסים",
        "rcfilters-filter-userExpLevel-experienced-description": "יותר מ־30 ימים של פעילות ו־500 עריכות.",
+       "rcfilters-filtergroup-automated": "תרומות אוטומטיות",
+       "rcfilters-filter-bots-label": "בוטים",
+       "rcfilters-filter-bots-description": "עריכות שבוצעו על־ידי כלים אוטומטיים.",
+       "rcfilters-filter-humans-label": "בני אדם (לא בוטים)",
+       "rcfilters-filter-humans-description": "עריכות שבוצעו על־ידי עורכים אנושיים.",
+       "rcfilters-filtergroup-significance": "חשיבות",
+       "rcfilters-filter-minor-label": "עריכות משניות",
+       "rcfilters-filter-minor-description": "עריכות שהוגדרו על־ידי העורכים כמשניות.",
+       "rcfilters-filter-major-label": "עריכות שאינן משניות",
+       "rcfilters-filter-major-description": "עריכות שלא הוגדרו כמשניות.",
+       "rcfilters-filtergroup-changetype": "סוג השינויים",
+       "rcfilters-filter-pageedits-label": "עריכות דפים",
+       "rcfilters-filter-pageedits-description": "עריכות של תוכן ויקי, של דיונים, של תיאורי קטגוריות...",
+       "rcfilters-filter-newpages-label": "יצירות דפים",
+       "rcfilters-filter-newpages-description": "עריכות שיוצרות דפים חדשים.",
+       "rcfilters-filter-categorization-label": "שינויים בקטגוריות",
+       "rcfilters-filter-categorization-description": "רישומים על דפים שנוספו לקטגוריות או הוסרו מהן.",
+       "rcfilters-filter-logactions-label": "פעולות יומן",
+       "rcfilters-filter-logactions-description": "פעולות מנהליות, יצירת חשבונות, מחיקת דפים, העלאות...",
        "rcnotefrom": "להלן {{PLURAL:$5|השינוי שבוצע|השינויים שבוצעו}} מאז <strong>$3, $4</strong> (מוצגים עד <strong>$1</strong>).",
        "rclistfrom": "הצגת שינויים חדשים החל מ־$2, $3",
        "rcshowhideminor": "$1 עריכות משניות",
        "apisandbox-sending-request": "בקשת ה־API בשליחה...",
        "apisandbox-loading-results": "תוצאות ה־API בתהליך קבלה...",
        "apisandbox-results-error": "אירעה שגיאה בעת טעינת תשובת ה־API לבקשה: $1.",
-       "apisandbox-request-params-json": "הפרמטרים בפורמט JSON:",
        "apisandbox-request-url-label": "כתובת ה־URL של הבקשה:",
        "apisandbox-request-time": "זמן הבקשה: {{PLURAL:$1|מילישנייה אחת|$1 מילישניות}}",
        "apisandbox-results-fixtoken": "אנא תקנו את האסימון ושלחו שוב",
        "feedback-useragent": "User agent:",
        "searchsuggest-search": "חיפוש ב{{grammar:תחילית|{{SITENAME}}}}",
        "searchsuggest-containing": "כולל...",
-       "api-error-autoblocked": "כתובת ה־IP שלך נחסמה אוטומטית, כי היא הייתה בשימוש על־ידי משתמש חסום.",
-       "api-error-badaccess-groups": "אינך מורשה להעלות קבצים לאתר הוויקי הזה.",
        "api-error-badtoken": "שגיאה פנימית: אסימון שבור.",
-       "api-error-blocked": "נחסמת מעריכה.",
-       "api-error-copyuploaddisabled": "העלאה לפי כתובת כובתה בשרת זה.",
-       "api-error-duplicate": "כבר יש באתר הזה {{PLURAL:$1|קובץ אחר|קבצים אחרים}} עם אותו תוכן.",
-       "api-error-duplicate-archive": "כבר {{PLURAL:$1|היה|היו}} באתר הזה {{PLURAL:$1|קובץ|קבצים}} עם אותו תוכן, אבל {{PLURAL:$1|הוא נמחק|הם נמחקו}}.",
-       "api-error-empty-file": "הקובץ ששלחת היה ריק.",
        "api-error-emptypage": "יצירת דפים חדשים ריקים אינה אפשרית.",
-       "api-error-fetchfileerror": "שגיאה פנימית: משהו השתבש בזמן אחזור הקובץ.",
-       "api-error-fileexists-forbidden": "קובץ בשם \"$1\" כבר קיים ואי־אפשר לדרוס אותו.",
-       "api-error-fileexists-shared-forbidden": "קובץ בשם \"$1\" כבר קיים במאגר הקבצים המשותף ואי־אפשר לדרוס אותו.",
-       "api-error-file-too-large": "הקובץ ששלחת היה גדול מדי.",
-       "api-error-filename-tooshort": "שם הקובץ קצר מדי.",
-       "api-error-filetype-banned": "סוג קובץ זה חסום.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|הוא סוג קובץ אסור להעלאה|הם סוגי קבצים אסורים להעלאה}}. {{PLURAL:$3|סוג הקובץ המותר הוא|סוגי הקבצים המותרים הם}} $2.",
-       "api-error-filetype-missing": "חסרה סיומת לשם הקובץ.",
-       "api-error-hookaborted": "השינוי שניסית לעשות נחסם על־ידי הרחבה.",
-       "api-error-http": "שגיאה פנימית: לא ניתן להתחבר לשרת.",
-       "api-error-illegal-filename": "שם הקובץ הזה אינו מורשה.",
-       "api-error-internal-error": "שגיאה פנימית: משהו השתבש בעת עיבוד ההעלאה שלך באתר הוויקי.",
-       "api-error-invalid-file-key": "שגיאה פנימית: הקובץ לא נמצא במאגר הזמני.",
-       "api-error-missingparam": "שגיאה פנימית: פרמטרים חסרים בבקשה שנשלחה.",
-       "api-error-missingresult": "שגיאה פנימית: לא ניתן לקבוע אם ההעתקה הצליחה.",
-       "api-error-mustbeloggedin": "יש להיכנס לחשבון כדי להעלות קבצים.",
-       "api-error-mustbeposted": "שגיאה פנימית: הבקשה דורשת שימוש בשיטת POST של HTTP.",
-       "api-error-noimageinfo": "ההעלאה עבדה, אבל השרת לא נתן לנו שום מידע על הקובץ.",
-       "api-error-nomodule": "שגיאה פנימית: מודול ההעלאה אינו מוגדר.",
-       "api-error-ok-but-empty": "שגיאה פנימית: אין תשובה מהשרת.",
-       "api-error-overwrite": "לא מותרת החלפת קובץ קיים.",
-       "api-error-ratelimited": "ניסית להעלות בזמן קצר יותר קבצים מהכמות המירבית המותרת באתר הוויקי הזה.\nנא לנסות שוב בעוד מספר דקות.",
-       "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\".",
-       "api-error-unknown-error": "שגיאה פנימית: משהו השתבש בעת ניסיון להעלות את הקובץ שלך.",
+       "api-error-stashfailed": "שגיאה פנימית: השרת נכשל באחסון הקובץ הזמני.",
        "api-error-unknown-warning": "אזהרה בלתי־ידועה: \"$1\".",
        "api-error-unknownerror": "שגיאה בלתי ידועה: \"$1\".",
-       "api-error-uploaddisabled": "ההעלאה מבוטלת באתר הוויקי הזה.",
-       "api-error-verification-error": "קובץ זה עשוי להיות פגום או בעל סיומת שגויה.",
-       "api-error-was-deleted": "קובץ בשם הזה הועלה מוקדם יותר ונמחק לאחר מכן.",
        "duration-seconds": "{{PLURAL:$1|שנייה|$1 שניות}}",
        "duration-minutes": "{{PLURAL:$1|דקה|$1 דקות}}",
        "duration-hours": "{{PLURAL:$1|שעה|שעתיים|$1 שעות}}",
index 6138b82..ade5f1b 100644 (file)
        "apisandbox-sending-request": "Sending API request...",
        "apisandbox-loading-results": "Receiving API results...",
        "apisandbox-results-error": "An error occurred while loading the API query response: $1.",
-       "apisandbox-request-params-json": "JSON parameters:",
        "apisandbox-request-url-label": "Request ke URL:",
        "apisandbox-request-time": "Request time: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Token ke sudhaar ke resubmit karo",
        "feedback-useragent": "User agent:",
        "searchsuggest-search": "{{SITENAME}} me khojo",
        "searchsuggest-containing": "isme hae.....",
-       "api-error-autoblocked": "Aap ke IP address ke automatically block kar dewa gais hai, kaaheki iske ek blocked user kaam me laais hai.",
-       "api-error-badaccess-groups": "Aap ke ii wiki me file upload kare ke ijajat nai hae.",
        "api-error-badtoken": "Internal error: Bad token.",
-       "api-error-blocked": "Aap ke editing se block kar dewa gais hai.",
-       "api-error-copyuploaddisabled": "Uploading by URL ke ii server me disable kar dewa gais hae.",
-       "api-error-duplicate": "There {{PLURAL:$1|is another file|are some other files}} already on the site with the same content.",
-       "api-error-duplicate-archive": "There {{PLURAL:$1|was another file|were some other files}} already on the site with the same content, but {{PLURAL:$1|it was|they were}} deleted.",
-       "api-error-empty-file": "Jon file ke aap submit karaa rahaa, khaali hae.",
        "api-error-emptypage": "Nawaa, khaali panna ke banae ke ijajat nai hae.",
-       "api-error-fetchfileerror": "Internal error: File khoje ke time kuch wrong hoe gais hae.",
-       "api-error-fileexists-forbidden": "Ek file, jiske naam \"$1\" hae abhi hae, aur iske overwrite nai karaa jaae sake hae.",
-       "api-error-fileexists-shared-forbidden": "Ek file, jiske naam \"$1\" hae abhi hae aur file repository me shared hae, aur iske overwrite nai karaa jaae sake hae.",
-       "api-error-file-too-large": "Jon file ke aap submit karaa hae bahut barraa hae.",
-       "api-error-filename-tooshort": "Filename bahut chhota hae.",
-       "api-error-filetype-banned": "Ii rakam ke file banned hae.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|is not a permitted file type|are not permitted file types}}. Permitted {{PLURAL:$3|file type is|file types are}} $2.",
-       "api-error-filetype-missing": "Filename se ek extension miss hoe hai.",
-       "api-error-hookaborted": "Jon modification aap kare ke kosis karaahai, was aborted by an extension.",
-       "api-error-http": "Internal error: Server se connect nai kare sakaa hai.",
-       "api-error-illegal-filename": "Ii naam ke file ke banae ke ijajat nai hae.",
-       "api-error-internal-error": "Internal error: Aap ke wiki me upload ke processing kare ke time kuchh karrbarri hoe gais hai.",
-       "api-error-invalid-file-key": "Internal error: Temporary storage me file nai milaa.",
-       "api-error-missingparam": "Internal error: Missing parameters on request.",
-       "api-error-missingresult": "Internal error: Ii nai determine kare sakaa ki copy bhae ki nai.",
-       "api-error-mustbeloggedin": "File ke upload kare ke khaatir app ke logged in rahe ke chaahi.",
-       "api-error-mustbeposted": "Internal error: Request requires HTTP POST.",
-       "api-error-noimageinfo": "Upload hoe gais, lekin server file ke baare me koi jaankari nai diis.",
-       "api-error-nomodule": "Internal error: No upload module set.",
-       "api-error-ok-but-empty": "Internal error: Server se koi response nai milaa.",
-       "api-error-overwrite": "Abhi ke file ke uppar fir se likhe ke ijajat nai hai.",
-       "api-error-ratelimited": "Aap kuch deri me bahut jaada file ke upload kare ke kosis kartaa hai.\nKuchh deri me fir se try karnaa.",
-       "api-error-stashfailed": "Internal error: Server temporary file ke store nai kare sakis hai.",
        "api-error-publishfailed": "Internal error: Server temporary file ke publish nai kare sakis hai.",
-       "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": "Upload stash me file ke save kare ke khaatir, aap ke logged in hoe ke chaahi.",
-       "api-error-stashwrongowner": "Aap jon file ke stash me access kare ke kosis kartaa hai, aap ke nai hai.",
-       "api-error-stashnosuchfilekey": "Aap jon file ke stash me access kare ke kosis kartaa hai, exist nai hoe hai.",
-       "api-error-timeout": "Server, expected time, me nai respond karis.",
-       "api-error-unclassified": "Ek anjaan galti hoe gais hai.",
-       "api-error-unknown-code": "Unknown error: \"$1\".",
-       "api-error-unknown-error": "Internal error: Aap ke file ke uplad kre ke time kuchh garrbarri hoe gais hai.",
+       "api-error-stashfailed": "Internal error: Server temporary file ke store nai kare sakis hai.",
        "api-error-unknown-warning": "Unknown warning: \"$1\".",
        "api-error-unknownerror": "Unknown error: \"$1\".",
-       "api-error-uploaddisabled": "Ii wiki me upload disabled hai.",
-       "api-error-verification-error": "Ii file saait corrupt hoi, nai to, isme wrong extension hoi.",
-       "api-error-was-deleted": "Ii naam ke file ke pahile upload karaa gais rahaa aur fir delete karaa gais rahaa.",
        "duration-seconds": "$1 {{PLURAL:$1|second|seconds}}",
        "duration-minutes": "$1 {{PLURAL:$1|minute|minutes}}",
        "duration-hours": "$1 {{PLURAL:$1|ghantaa}}",
index 62ecc04..1d22515 100644 (file)
        "prefs-help-signature": "Komentari na stranicama za razgovor trebali bi biti potpisani s \"<nowiki>~~~~</nowiki>\" što će biti pretvoreno u Vaš potpis i datum.",
        "badsig": "Kôd Vašeg potpisa nije valjan; provjerite HTML tagove.",
        "badsiglength": "Vaš potpis je predugačak.\nNe smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.",
-       "yourgender": "Spol:",
-       "gender-unknown": "Neodređeni",
-       "gender-male": "Muški",
-       "gender-female": "Ženski",
+       "yourgender": "Na koji način želite da Vam se ostali suradnici obraćaju?",
+       "gender-unknown": "Kad Vas se spominje, programska će oprema pokušati upotrijebiti srednji rod kad god je to moguće.",
+       "gender-male": "Uređivač sam wikistranica.",
+       "gender-female": "Uređivačica sam wikistranica.",
        "prefs-help-gender": "Mogućnost softvera da ispravno oslovljava razlikujući spol. Ovaj će podatak biti javan.",
        "email": "Adresa elektroničke pošte *",
        "prefs-help-realname": "Pravo ime nije obvezno. Ako ga navedete, može biti rabljeno za pripisivanje Vaših doprinosa.",
        "statistics-users": "Prijavljeni [[Special:ListUsers|suradnici]]",
        "statistics-users-active": "Aktivni suradnici",
        "statistics-users-active-desc": "Suradnici koji su napravili neku od radnji u posljednjih {{PLURAL:$1|dan|$1 dana}}",
-       "pageswithprop": "Stranice sa osobinom stranice",
-       "pageswithprop-legend": "Stranice sa osobinom stranice",
+       "pageswithprop": "Stranice s određenim osobinama",
+       "pageswithprop-legend": "Stranice s određenim osobinama",
+       "pageswithprop-text": "Ovo je popis stranica koje koriste određene osobine stranica.",
        "pageswithprop-prop": "Ime osobine:",
        "pageswithprop-submit": "Idi",
        "doubleredirects": "Dvostruka preusmjeravanja",
        "booksources-search": "Traži",
        "booksources-text": "Ovdje je popis vanjskih poveznica na internetskim stranicama koje prodaju nove i rabljene knjige, ali mogu sadržavati i ostale podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Čini se da dani ISBN nije valjan; provjerite greške kopirajući iz izvornika.",
+       "magiclink-tracking-rfc": "Stranice s čarobnim RFC poveznicama",
+       "magiclink-tracking-rfc-desc": "Ova stranica rabi čarobne RFC poveznice. Za njihovu migraciju vidi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
+       "magiclink-tracking-pmid": "Stranice s čarobnim PMID poveznicama",
+       "magiclink-tracking-pmid-desc": "Ova stranica rabi čarobne PMID poveznice. Za njihovu migraciju vidi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
        "magiclink-tracking-isbn": "Stranice s čarobnim ISBN poveznicama",
        "magiclink-tracking-isbn-desc": "Ova stranica rabi čarobne ISBN poveznice. Za njihovu migraciju vidi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
        "specialloguserlabel": "Suradnik:",
        "listgrants-summary": "Slijedi popis dozvola s pridruženim pristupom suradničkim pravima. Suradnici mogu omogućiti aplikacijama uporabu svojih računa, ali s ograničenim ovlastima na temelju dozvola koje je suradnik dodijelio aplikaciji. Aplikacija koja djeluje u ime suradnika međutim ne može rabiti prava koje suradnik nema.\nMoguće su [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]] o pojedinim pravima.",
        "listgrants-grant": "Dozvola",
        "listgrants-rights": "Prava",
+       "trackingcategories": "Kategorije za praćenje",
+       "trackingcategories-msg": "Praćene kategorije",
+       "trackingcategories-name": "Naziv poruke",
+       "trackingcategories-desc": "Kriteriji za uključenje u kategoriju",
        "restricted-displaytitle-ignored": "Stranice sa zanemarenim naslovima za prikaz",
+       "restricted-displaytitle-ignored-desc": "Na stranici je zanemaren <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> jer ne odgovara trenutačnom naslovu stranice.",
        "trackingcategories-nodesc": "Opis nije dostupan.",
+       "trackingcategories-disabled": "Kategorija onemogućena",
        "mailnologin": "Nema adrese pošiljatelja",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]]\nda bi mogli slati poštu drugim suradnicima.",
        "emailuser": "Pošalji mu e-poruku",
        "watchlistanontext": "Molimo Vas prijavite se kako biste mogli vidjeti ili uređivati Vaš popis praćenih stranica.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj u popis praćenja",
-       "addedwatchtext": "Stranica \"[[:$1]]\" je dodana na Vaš [[Special:Watchlist|popis praćenja]].\nPromjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popisu praćenja.",
+       "addedwatchtext": "Stranica »[[:$1]]« dodana je na Vaš [[Special:Watchlist|popis praćenja]]; ujedno i njoj pripadajuća razgovorna stranica.",
+       "addedwatchtext-talk": "Stranica »[[:$1]]« i njoj pripadajuća razgovorna stranica dodane su na Vaš [[Special:Watchlist|popis praćenih stranica]].",
        "addedwatchtext-short": "Stranica \"$1\" dodana je Vašem popisu praćenja.",
        "removewatch": "Ukloni s popisa praćenja",
-       "removedwatchtext": "Stranica \"[[:$1]]\" je uklonjena s [[Special:Watchlist|Vašeg popisa praćenja]].",
+       "removedwatchtext": "Stranica »[[:$1]]« i pripadajuća razgovorna stranica uklonjene su s Vašega [[Special:Watchlist|popisa praćenih stranica]].",
+       "removedwatchtext-talk": "Stranica »[[:$1]]« i njoj pripadajuća razgovorna stranica uklonjene su s Vašega [[Special:Watchlist|popis praćenih stranica]].",
        "removedwatchtext-short": "Stranica \"$1\" uklonjena je s Vašeg popisa praćenja.",
        "watch": "Prati",
        "watchthispage": "Prati ovu stranicu",
        "autoredircomment": "preusmjeravanje na [[$1]]",
        "autosumm-new": "nova stranica: $1",
        "autosumm-newblank": "stvorena prazna stranica",
+       "size-bytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
        "lag-warn-normal": "Moguće je da izmjene nastale posljednjih $1 {{PLURAL:$1|sekundu|sekundi}} neće biti vidljive na ovom popisu.",
        "lag-warn-high": "Zbog kašnjenja baze podataka, moguće je da promjene napravljene u posljednjih $1 {{PLURAL:$1|sekundu|sekunde|sekundi}} nisu prikazane u popisu.",
        "watchlistedit-normal-title": "Uredi popis praćenja",
        "feedback-thanks-title": "Hvala!",
        "searchsuggest-search": "Pretraži projekt {{SITENAME}}",
        "searchsuggest-containing": "sadrži....",
-       "api-error-badaccess-groups": "Nemate ovlasti za postavljanje datoteka na ovu wiki.",
        "api-error-badtoken": "Interna pogrješka: Token nije ispravan.",
-       "api-error-copyuploaddisabled": "Postavljanje datoteka putem URL-a nije omogućeno na ovom projektu.",
-       "api-error-duplicate": "{{PLURAL:$1|Postoji druga datoteka|Postoje $1 druge datoteke|Postoji $1 drugih datoteka}} istog sadržaja.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Postojala je druga datoteka|Postojale su neke druge datoteke|Postojalo je nekih drugih datoteka}} na projektu s istim sadržajem, ali {{PLURAL:$1|je obrisana|su obrisane}}.",
-       "api-error-empty-file": "Datoteka koju ste poslali je prazna.",
        "api-error-emptypage": "Stvaranje praznih novih stranica nije dopušteno.",
-       "api-error-fetchfileerror": "Interna pogrješka: Pojavio se neki problem pri dobivanju podataka o datoteci.",
-       "api-error-fileexists-forbidden": "Datoteka s imenom \"$1\" već postoji i ne može biti prepisana.",
-       "api-error-fileexists-shared-forbidden": "Datoteka s imenom \"$1\" već postoji u zajedničkom spremištu i ne može biti prepisana.",
-       "api-error-file-too-large": "Datoteka koju ste poslali bila je prevelika.",
-       "api-error-filename-tooshort": "Ime datoteke je prekratko.",
-       "api-error-filetype-banned": "Ova vrsta datoteke je zabranjena.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nije dopušteni tip datoteke|su nedopušteni tipovi datoteke|su nedopušteni tipovi datoteka}}. Dopušteni {{PLURAL:$3|tip datoteke je|tipovi datoteke su|tipovi datoteka su}} $2.",
-       "api-error-filetype-missing": "Datoteci nedostaje nastavak.",
-       "api-error-hookaborted": "Izmjena koji ste pokušali načiniti je otkazana preko \"kuke\" proširenja mediawiki softvera.",
-       "api-error-http": "Interna pogrješka: Ne može se povezati na poslužitelj.",
-       "api-error-illegal-filename": "Ime datoteke nije dopušteno.",
-       "api-error-internal-error": "Interna pogrješka: Pojavio se neki problem s obradom postavljanja datoteke na wiki.",
-       "api-error-invalid-file-key": "Poslužitelj nije mogao naći tu datoteku u vašim postavljenim datotekama.",
-       "api-error-missingparam": "Interna pogrješka: Nedostaju parametri HTTP(S) zahtjeva.",
-       "api-error-missingresult": "Interna pogrješka: Nismo mogli utvrditi je li kopiranje uspjelo.",
-       "api-error-mustbeloggedin": "Morate biti prijavljeni da bi mogli postavljati datoteke.",
-       "api-error-mustbeposted": "Postoji pogreška u ovom softveru; ne rabi ispravnu HTTP metodu.",
-       "api-error-noimageinfo": "Postavljanje je uspjelo, ali poslužitelj nije vratio nikakvu informaciju o datoteci.",
-       "api-error-nomodule": "Interna pogrješka: nije postavljen modul za postavljanje.",
-       "api-error-ok-but-empty": "Interna pogrješka: nema odgovora od poslužitelja.",
-       "api-error-overwrite": "Postavljanje preko postojeće datoteke nije dopušteno.",
-       "api-error-stashfailed": "Interna pogrješka: Poslužitelj nije uspio spremiti privremenu datoteku.",
        "api-error-publishfailed": "Interna pogrješka: poslužitelj nije uspio objaviti privremenu datoteku.",
-       "api-error-timeout": "Poslužitelj nije odgovorio unutar očekivanog vrjemena.",
-       "api-error-unclassified": "Dogodila se nepoznata pogrješka.",
-       "api-error-unknown-code": "Nepoznata pogrješka: \"$1\"",
-       "api-error-unknown-error": "Interna pogrješka: dogodila se pogrješka pri pokušaju postavljanja vaše datoteke.",
+       "api-error-stashfailed": "Interna pogrješka: Poslužitelj nije uspio spremiti privremenu datoteku.",
        "api-error-unknown-warning": "Nepoznato upozorenje: $1",
        "api-error-unknownerror": "Nepoznata pogrješka: \"$1\"",
-       "api-error-uploaddisabled": "Postavljanje datoteka je onemogućeno na ovom wikiprojektu.",
-       "api-error-verification-error": "Ova datoteka je možda oštećena ili ima pogrešan nastavak.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuta|minute|minuta}}",
        "duration-hours": "$1 {{PLURAL:$1|sat|sata|sati}}",
index b810df6..c639828 100644 (file)
        "searcharticle": "Menj",
        "history": "Laptörténet",
        "history_short": "Laptörténet",
+       "history_small": "laptörténet",
        "updatedmarker": "az utolsó látogatásom óta frissítették",
        "printableversion": "Nyomtatható változat",
        "permalink": "Hivatkozás erre a változatra",
        "recentchanges-legend-heading": "<strong>Jelmagyarázat:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lásd még: [[Special:NewPages|új lapok listája]])",
        "recentchanges-submit": "Megjelenítés",
+       "rcfilters-filter-registered-label": "Regisztrált",
+       "rcfilters-filter-registered-description": "Bejelentkezett szerkesztők.",
+       "rcfilters-filter-unregistered-description": "Nem bejelentkezett szerkesztők.",
+       "rcfilters-filter-editsbyself-label": "Saját szerkesztéseid",
+       "rcfilters-filter-userExpLevel-learner-label": "Tanulók",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Automatizált eszközök szerkesztései.",
+       "rcfilters-filter-humans-label": "Ember (nem bot)",
+       "rcfilters-filter-humans-description": "Emberi szerkesztők szerkesztései",
+       "rcfilters-filter-minor-label": "Apró szerkesztések",
+       "rcfilters-filter-minor-description": "Szerző által aprónak jelölt szerkesztések",
+       "rcfilters-filter-major-label": "Nem apró szerkesztések",
+       "rcfilters-filter-major-description": "Nem aprónak jelölt szerkesztések.",
+       "rcfilters-filtergroup-changetype": "Változtatás típusa",
+       "rcfilters-filter-pageedits-label": "Lapszerkesztések",
+       "rcfilters-filter-newpages-description": "Új oldalt létrehozó szerkesztések.",
+       "rcfilters-filter-categorization-label": "Kategóriaváltoztatások",
        "rcnotefrom": "Alább a <strong>$3 $4</strong> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
        "rclistfrom": "$3, $2 után történt változtatások megtekintése",
        "rcshowhideminor": "apró szerkesztések $1",
        "patrol-log-header": "Ez az ellenőrzött változatok naplója.",
        "log-show-hide-patrol": "járőrnapló $1",
        "log-show-hide-tag": "címkenapló $1",
+       "confirm-markpatrolled-button": "OK",
        "deletedrevision": "Régebbi változat törölve: $1",
        "filedeleteerror-short": "Hiba a fájl törlésekor: $1",
        "filedeleteerror-long": "Hibák merültek föl a következő fájl törlésekor:\n\n$1",
        "feedback-useragent": "User agent:",
        "searchsuggest-search": "Keresés a wikin",
        "searchsuggest-containing": "tartalmazza…",
-       "api-error-autoblocked": "Az IP-címed automatikusan blokkolva lett, mert korábban egy blokkolt szerkesztő használta.",
-       "api-error-badaccess-groups": "Nincs jogod fájlokat feltölteni erre a wikire.",
        "api-error-badtoken": "Belső hiba: hibás token.",
-       "api-error-blocked": "Letiltották a szerkesztési jogosultságodat.",
-       "api-error-copyuploaddisabled": "Az URL-címes feltöltés nem engedélyezett ezen a kiszolgálón.",
-       "api-error-duplicate": "Már van {{PLURAL:$1|egy|néhány}} másik fájl az oldalon ugyanilyen tartalommal.",
-       "api-error-duplicate-archive": "Az oldalon {{PLURAL:$1|szerepelt|szerepeltek}} más {{PLURAL:$1|fájl|fájlok}} is ugyanezzel a tartalommal, de törölve {{PLURAL:$1|lett|lettek}}.",
-       "api-error-empty-file": "Az általad elküldött fájl üres volt.",
        "api-error-emptypage": "Új, üres lap létrehozása nem engedélyezett.",
-       "api-error-fetchfileerror": "Belső hiba: valami baj történt a fájl beolvasása közben.",
-       "api-error-fileexists-forbidden": "Már létezik „$1” nevű fájl, és nem lehet felülírni.",
-       "api-error-fileexists-shared-forbidden": "Már létezik „$1” nevű fájl a megosztott fájlok között, és nem lehet felülírni.",
-       "api-error-file-too-large": "Az általad elküldött fájl túl nagy.",
-       "api-error-filename-tooshort": "A fájlnév túl rövid.",
-       "api-error-filetype-banned": "Tiltott fájltípus.",
-       "api-error-filetype-banned-type": "!A következő {{PLURAL:$4|fájltípus nem engedélyezett|fájltípusok nem engedélyezettek}}: $1. Engedélyezett {{PLURAL:$3|típus|típusok}}: $2.",
-       "api-error-filetype-missing": "Hiányzik a fájl kiterjesztése.",
-       "api-error-hookaborted": "Az általad kezdeményezett módosítást nem lehet végrehajtani. (Egy bővítmény megakadályozta.)",
-       "api-error-http": "Belső hiba: nem sikerült kapcsolódni a kiszolgálóhoz.",
-       "api-error-illegal-filename": "Nem megengedett fájlnév.",
-       "api-error-internal-error": "Belső hiba: valami baj történt a feltöltésed feldolgozása közben.",
-       "api-error-invalid-file-key": "Belső hiba: a fájl nem található az ideiglenes tárhelyen.",
-       "api-error-missingparam": "Belső hiba: paraméterek hiányoznak a kérésből.",
-       "api-error-missingresult": "Belső hiba: nem sikerült megállapítani, hogy a másolás sikeres volt-e.",
-       "api-error-mustbeloggedin": "Be kell jelentkezned fájlok feltöltéséhez.",
-       "api-error-mustbeposted": "Belső hiba: a kérésnek HTTP POST-nak kell lennie.",
-       "api-error-noimageinfo": "A feltöltés sikerült, de a szerver nem szolgáltatott semmilyen információt a fájlról.",
-       "api-error-nomodule": "Belső hiba: nincs feltöltőmodul beállítva.",
-       "api-error-ok-but-empty": "Belső hiba: nem érkezett válasz a kiszolgálótól.",
-       "api-error-overwrite": "Létező fájlok felülírására nem engedélyezett.",
-       "api-error-ratelimited": "A megengedettnél több fájlt próbálsz feltölteni rövid időn belül.\nPróbálkozz újra néhány perc múlva.",
-       "api-error-stashfailed": "Belső hiba: a kiszolgálünak nem sikerült eltárolni az ideiglenes fájlt.",
        "api-error-publishfailed": "Belső hiba: a kiszolgálónak nem sikerült közzétennie az ideiglenes fájlt.",
-       "api-error-stasherror": "Hiba történt a fájl feltöltése közben.",
-       "api-error-stashedfilenotfound": "Az félretett fájl nem található a feltöltés során.",
-       "api-error-stashpathinvalid": "Az félretett fájlhoz tartozó útvonal érvénytelen.",
-       "api-error-stashfilestorage": "Hiba történt a tartalék helyre történő mentés során.",
-       "api-error-stashzerolength": "A szerver nem tudta tartalékba tenni a fájlt, mert nulla a mérete.",
-       "api-error-stashnotloggedin": "Be kell jelentkezned a fájl feltöltéséhez.",
-       "api-error-stashwrongowner": "A elérni kívánt tartalék fájl nem a tied.",
-       "api-error-stashnosuchfilekey": "Az elérni kívánt tartalék fájl kulcs nem létezik.",
-       "api-error-timeout": "A kiszolgáló nem adott választ a várt időn belül.",
-       "api-error-unclassified": "Ismeretlen hiba történt",
-       "api-error-unknown-code": "Ismeretlen hiba: „$1”",
-       "api-error-unknown-error": "Belső hiba: valami baj történt a fájl feltöltése közben.",
+       "api-error-stashfailed": "Belső hiba: a kiszolgálünak nem sikerült eltárolni az ideiglenes fájlt.",
        "api-error-unknown-warning": "Ismeretlen figyelmeztetés: „$1”.",
        "api-error-unknownerror": "Ismeretlen hiba: „$1”.",
-       "api-error-uploaddisabled": "A feltöltés le van tiltva ezen a wikin.",
-       "api-error-verification-error": "A fájl feltehetőleg sérült, vagy hibás a kiterjesztése.",
-       "api-error-was-deleted": "Ilyen nevű fájlt már töltöttek fel, majd törölték.",
        "duration-seconds": "{{PLURAL:$1|másodperc|másodperc}}",
        "duration-minutes": "$1 {{PLURAL:$1|perc|perc}}",
        "duration-hours": "{{PLURAL:$1|egy|$1}} óra",
        "pagelang-use-default": "Alapértelmezett nyelv használata",
        "pagelang-select-lang": "Nyelv kiválasztása",
        "pagelang-submit": "Küldés",
+       "pagelang-nonexistent-page": "A(z) $1 lap nem létezik.",
        "right-pagelang": "oldal nyelvének megváltoztatása",
        "action-pagelang": "oldal nyelvének módosítása",
        "log-name-pagelang": "Nyelvváltoztatások naplója",
        "mw-widgets-dateinput-no-date": "Nincs kiválasztott dátum",
        "mw-widgets-dateinput-placeholder-day": "ÉÉÉÉ-HH-NN",
        "mw-widgets-dateinput-placeholder-month": "ÉÉÉÉ-HH",
+       "mw-widgets-mediasearch-noresults": "Nincs találat.",
        "mw-widgets-titleinput-description-new-page": "a lap még nem létezik",
        "mw-widgets-titleinput-description-redirect": "átirányítás ide: $1",
+       "mw-widgets-categoryselector-add-category-placeholder": "Kategória hozzáadása…",
        "sessionmanager-tie": "Nem kombinálható többféle hitelesítési típus: $1.",
        "sessionprovider-generic": "$1-munkamenetek",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sütialapú munkamenetek",
index 415de57..cf3c23b 100644 (file)
        "rcfilters-invalid-filter": "Filtro non valide",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-noresults": "Nulle filtro trovate",
+       "rcfilters-filtergroup-registration": "Registration del usator",
+       "rcfilters-filter-registered-label": "Registrate",
+       "rcfilters-filter-registered-description": "Redactores que ha aperite session.",
+       "rcfilters-filter-unregistered-label": "Non registrate",
+       "rcfilters-filter-unregistered-description": "Redactores que non ha aperite session.",
        "rcfilters-filtergroup-authorship": "Autor del modificationes",
        "rcfilters-filter-editsbyself-label": "Tu proprie modificationes",
        "rcfilters-filter-editsbyself-description": "Modificationes per te.",
        "rcfilters-filter-editsbyother-label": "Modificationes per alteres",
        "rcfilters-filter-editsbyother-description": "Modificationes create per altere usatores (non te).",
-       "rcfilters-filtergroup-userExpLevel": "Nivello de experientia del usator",
+       "rcfilters-filtergroup-userExpLevel": "Nivello de experientia (solmente pro usatores registrate)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Novicios",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Autores multo nove: minus de 10 modificationes e 4 dies de activitate.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Minus de 10 modificationes e 4 dies de activitate.",
        "rcfilters-filter-userExpLevel-learner-label": "Apprentisses",
-       "rcfilters-filter-userExpLevel-learner-description": "Plus dies de activitate e modificationes que 'Novicios' ma minus que \"Usatores con experientia'.",
+       "rcfilters-filter-userExpLevel-learner-description": "Plus dies de activitate e modificationes que \"Novicios\" ma minus que \"Usatores con experientia\".",
        "rcfilters-filter-userExpLevel-experienced-label": "Usatores con experientia",
        "rcfilters-filter-userExpLevel-experienced-description": "Plus de 30 dies de activitate e 500 modificationes.",
+       "rcfilters-filtergroup-automated": "Contributiones automatisate",
+       "rcfilters-filter-bots-label": "Robot",
+       "rcfilters-filter-bots-description": "Modificationes facite per instrumentos automatisate.",
+       "rcfilters-filter-humans-label": "Persona (non robot)",
+       "rcfilters-filter-humans-description": "Modificationes facite per esseres human.",
+       "rcfilters-filtergroup-significance": "Importantia",
+       "rcfilters-filter-minor-label": "Modificationes minor",
+       "rcfilters-filter-minor-description": "Modificationes que le autor ha marcate como minor.",
+       "rcfilters-filter-major-label": "Modificationes non minor",
+       "rcfilters-filter-major-description": "Modificationes non marcate como minor.",
+       "rcfilters-filtergroup-changetype": "Typo de cambiamento",
+       "rcfilters-filter-pageedits-label": "Modificationes de paginas",
+       "rcfilters-filter-pageedits-description": "Modificationes de contento wiki, discussiones, descriptiones de categorias…",
+       "rcfilters-filter-newpages-label": "Creationes de paginas",
+       "rcfilters-filter-newpages-description": "Modificationes que face nove paginas.",
+       "rcfilters-filter-categorization-label": "Cambios de categoria",
+       "rcfilters-filter-categorization-description": "Registros del addition o remotion de paginas a/de categorias.",
+       "rcfilters-filter-logactions-label": "Actiones traciate",
+       "rcfilters-filter-logactions-description": "Actiones administrative, creation de contos, deletion de paginas, incargamentos…",
        "rcnotefrom": "Ecce le {{PLURAL:$5|modification|modificationes}} a partir del <strong>$3 a $4</strong> (usque a <strong>$1</strong> entratas monstrate).",
        "rclistfrom": "Monstrar nove modificationes a partir del $3 a $2",
        "rcshowhideminor": "$1 modificationes minor",
        "apisandbox-sending-request": "Invia requesta API...",
        "apisandbox-loading-results": "Recipe resultatos API...",
        "apisandbox-results-error": "Un error ha occurrite durante le cargamento del responsa al consulta API: $1.",
-       "apisandbox-request-params-json": "Parametros JSON:",
        "apisandbox-request-url-label": "URL de requesta:",
        "apisandbox-request-time": "Duration del requesta: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrige le indicio e reinvia",
        "feedback-useragent": "Agente usator:",
        "searchsuggest-search": "Cercar in {{SITENAME}}",
        "searchsuggest-containing": "continente...",
-       "api-error-autoblocked": "Tu adresse IP ha essite blocate automaticamente, perque illo ha essite usate per un usator blocate.",
-       "api-error-badaccess-groups": "Tu non ha le permission de incargar files in iste wiki.",
        "api-error-badtoken": "Error interne: indicio invalide.",
-       "api-error-blocked": "Le modification ha essite blocate pro te.",
-       "api-error-copyuploaddisabled": "Le incargamentos per URL es disactivate in iste servitor.",
-       "api-error-duplicate": "Existe jam {{PLURAL:$1|un altere file|altere files}} in le sito con le mesme contento.",
-       "api-error-duplicate-archive": "Il habeva jam {{PLURAL:$1|un altere file|altere files}} in le sito con le mesme contento, ma {{PLURAL:$1|illo|illos}} ha essite delite.",
-       "api-error-empty-file": "Le file que tu submitteva es vacue.",
        "api-error-emptypage": "Le creation de nove paginas vacue non es permittite.",
-       "api-error-fetchfileerror": "Error interne: qualcosa errava durante le obtention del file.",
-       "api-error-fileexists-forbidden": "Un file con le nomine \"$1\" jam existe, e non pote esser superscribite.",
-       "api-error-fileexists-shared-forbidden": "Un file con le nomine \"$1\" jam existe in le repositorio commun de files, e non pote esser superscribite.",
-       "api-error-file-too-large": "Le file que tu submitteva es troppo grande.",
-       "api-error-filename-tooshort": "Le nomine del file es troppo curte.",
-       "api-error-filetype-banned": "Iste typo de file es prohibite.",
-       "api-error-filetype-banned-type": "$1 non es {{PLURAL:$4|un typo|typos}} de file permittite. Le {{PLURAL:$3|typo|typos}} de file permittite es $2.",
-       "api-error-filetype-missing": "Le nomine del file non ha un extension.",
-       "api-error-hookaborted": "Le modification que tu ha tentate facer ha essite abortate per un extension.",
-       "api-error-http": "Error interne: impossibile connecter al servitor.",
-       "api-error-illegal-filename": "Iste nomine de file non es permittite.",
-       "api-error-internal-error": "Error interne: qualcosa errava durante le processamento de tu file incargate in le wiki.",
-       "api-error-invalid-file-key": "Error interne: file non trovate in le spatio de immagazinage temporari.",
-       "api-error-missingparam": "Error interne: certe parametros mancava al requesta.",
-       "api-error-missingresult": "Error interne: non poteva determinar si le copia succedeva.",
-       "api-error-mustbeloggedin": "Es necessari aperir session pro incargar files.",
-       "api-error-mustbeposted": "Error interne: le requesta require HTTP POST.",
-       "api-error-noimageinfo": "Le incargamento ha succedite, ma le servitor non ha fornite alcun information sur le file.",
-       "api-error-nomodule": "Error interne: nulle modulo de incargamento definite.",
-       "api-error-ok-but-empty": "Error interne: nulle responsa del servitor.",
-       "api-error-overwrite": "Superscriber un file existente non es permittite.",
-       "api-error-ratelimited": "Tu tenta incargar plus files in curte tempore que iste wiki permitte.\nPer favor, reproba in alcun minutas.",
-       "api-error-stashfailed": "Error interne: le servitor non poteva immagazinar le file temporari.",
        "api-error-publishfailed": "Error interne: le servitor non poteva publicar le file temporari.",
-       "api-error-stasherror": "Un error ha occurrite durante le incargamento del file in \"stash\".",
-       "api-error-stashedfilenotfound": "Le file in reserva non ha essite trovate durante le tentativa de incargar lo ab le reserva.",
-       "api-error-stashpathinvalid": "Le cammino ubi le file in reserva deberea haber essite trovate non es valide.",
-       "api-error-stashfilestorage": "Un error ha occurrite durante le immagazinage del file in reserva.",
-       "api-error-stashzerolength": "Le servitor non ha potite mitter le file in reserva perque illo ha un longitude de zero.",
-       "api-error-stashnotloggedin": "Tu debe aperir session pro poter salveguardar files in le reserva de incargamento.",
-       "api-error-stashwrongowner": "Le file al qual tu tentava acceder in le reserva non pertine a te.",
-       "api-error-stashnosuchfilekey": "Le clave de file al qual tu tentava acceder in le reserva non existe.",
-       "api-error-timeout": "Le servitor non ha respondite intra le tempore expectate.",
-       "api-error-unclassified": "Un error incognite ha occurrite.",
-       "api-error-unknown-code": "Error incognite: \"$1\"",
-       "api-error-unknown-error": "Error interne: qualcosa errava durante le tentativa de incargar le file.",
+       "api-error-stashfailed": "Error interne: le servitor non poteva immagazinar le file temporari.",
        "api-error-unknown-warning": "Advertimento incognite: \"$1\".",
        "api-error-unknownerror": "Error incognite: \"$1\".",
-       "api-error-uploaddisabled": "Le incargamento es disactivate in iste wiki.",
-       "api-error-verification-error": "Le file pote esser corrumpite o su nomine pote haber un extension errate.",
-       "api-error-was-deleted": "Un file con iste nomine ha jam essite incargate e postea delite.",
        "duration-seconds": "$1 {{PLURAL:$1|secunda|secundas}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuta|minutas}}",
        "duration-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "usercssispublic": "Nota ben: Subpaginas CSS non debe continer datos confidential perque altere usatores pote vider los.",
        "restrictionsfield-badip": "Adresse o intervallo IP non valide: $1",
        "restrictionsfield-label": "Intervallos IP permittite:",
-       "restrictionsfield-help": "Un adresse IP o intervallo CIDR per linea. Pro activar toto, usa<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Un adresse IP o intervallo CIDR per linea. Pro activar toto, usa:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "version $1",
        "pageid": "ID de pagina $1"
 }
index 1da92ba..c9fc595 100644 (file)
        "formerror": "Eroro: Onu ne povis sendar la kontenajo di la formularo",
        "badarticleerror": "Ica ago ne povas facesar en ca pagino.",
        "cannotdelete": "Ne es posibla efacar la pagino od arkivo \"$1\".\nForsan, ulu ja efacis ol.",
+       "cannotdelete-title": "Ne povas efacar pagino \"$1\"",
+       "no-null-revision": "Ne povis krear nova nula-revizo por pagino \"$1\"",
        "badtitle": "Nekorekta titulo",
        "badtitletext": "La solicitita pagino esas nevalida, vakua od esas\nnekorekta interlinguale od interwikale ligilo.",
+       "title-invalid-empty": "La demandita pagino-titulo es vakua o kontenas nur la nome di \"namespace\".",
+       "title-invalid-utf8": "La demandita pagino-titulo kontenas ne-valida sequo UTF-8.",
+       "title-invalid-interwiki": "La demandita pagino-titulo kontenas inter-wiki-ala ligilo, olqua ne povas uzesar en tituli.",
+       "title-invalid-talk-namespace": "La demandita pagino-titulo referas a diskuto-pagino, qua ne existas.",
+       "title-invalid-characters": "La demandita pagino-titulo kontenas ne-valida literi: \"$1\".",
        "perfcached": "La sequanta datumi esas kashizita* e li povus ne aktualigesar nuntempe. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "viewsource": "Vidar font-kodo",
        "protectedpagetext": "Ta pagino protektesis por preventar redaktadi od altra agi.",
        "emailnotauthenticated": "Vua e-postal adreso ne ja autentikigesas.\nNula mesaji sendesos por irga di la sequanta funcioni.",
        "noemailprefs": "Prizentez e-postal adreso en vua preferaji por disponar ita funcioni.",
        "emailconfirmlink": "Konfirmez vua adreso di e-posto",
+       "cannotchangeemail": "E-posto-adreso dil konto ne povas chanjesar ye ta wikio.",
+       "emaildisabled": "Ita ret-sito ne povas sendar e-mesaji.",
        "accountcreated": "Konto kreesis",
-       "accountcreatedtext": "La uzantokonto por $1 kreatesis.",
+       "accountcreatedtext": "La uzerokonto por [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskuto]]) kreesis.",
        "createaccount-title": "Kreo di konto en {{SITENAME}}",
+       "createaccount-text": "Ulu kreis konto por vua e-posto adreso ye {{SITENAME}} ($4) nomita \"$2\", kun pasovorto \"$3\".\nVu devas enirar la konto e chanjar vua pasovorto nun.\n\nVu darfas ignorar ita mesajo, se ita konto kreesis en eroro.",
+       "login-throttled": "Vu probis enirar tro multafoye.\nVoluntez vartar $1 ante riprobar.",
+       "login-abort-generic": "Vua eniro-probo faliis - Cesigita",
+       "login-migrated-generic": "Vua konto esas migrata, e vua uzeronomo ne plus existas che ita wikio.",
        "loginlanguagelabel": "Linguo: $1",
        "pt-login": "Enirar",
        "pt-login-button": "Enirar",
        "resetpass-recycled": "Voluntez chanjar vua pasovorto ad ulo diferanta de vua aktuala pasovorto.",
        "resetpass-temp-emailed": "Vu eniris uzante provizora pasovorto.\nPor parkompletigar enirado, vu mustas krear nova pasovorto hike:",
        "resetpass-temp-password": "Provizora pasovorto:",
+       "passwordreset": "Sendez nova pasovorto per e-posto",
        "passwordreset-username": "Uzantonomo:",
+       "passwordreset-invalidemail": "Ne-valida e-posto-adreso",
+       "passwordreset-nodata": "Nek uzeronomo nek e-posto-adreso esis provizita",
        "changeemail": "Chanjar od efacar e-postal adreso",
+       "changeemail-header": "Plenigez ita formulario por chanjar vua e-posto-adreso. Se vu volas forigar irga e-posto-adreso de vua konto, lasez la nova e-posto-adreso vakua en la formulario.",
+       "changeemail-no-info": "Vu mustas enirar la konto por acesar ita pagino direte.",
+       "changeemail-oldemail": "Aktuala e-posto-adreso:",
+       "changeemail-newemail": "Nova e-posto-adreso:",
+       "changeemail-none": "(nula)",
+       "changeemail-password": "Vua {{SITENAME}} pasovorto:",
+       "changeemail-submit": "Chanjar e-posto-adreso",
+       "changeemail-throttled": "Vu probis enirar tro multafoye.\nVoluntez vartar $1 ante riprobar.",
+       "changeemail-nochange": "Voluntez skribar diferanta nova e-posto-adreso.",
+       "resettokens": "Rinovigar klefi",
+       "resettokens-no-tokens": "Esas nula klefi rinovigebla.",
+       "resettokens-tokens": "Klefi:",
+       "resettokens-token-label": "$1 (nuna valoro: $2)",
+       "resettokens-done": "Klefi rinovigita.",
+       "resettokens-resetbutton": "Rinovigar selektita klefi",
        "bold_sample": "Dika literi",
        "bold_tip": "Dika literi",
        "italic_sample": "Kursiva literi",
        "accmailtext": "Hazarde genitita pasovorto por [[User talk:$1|$1]] sendesis ad $2.\n\nLa pasovorto por ica nova konto povas chanjesar che la ''[[Special:ChangePassword|chanjar pasovorto]]'' pagino pos on eniras.",
        "newarticle": "(nova)",
        "newarticletext": "Vu sequis ligilo a pagino qua ne existas ankore.\nPor krear ica pagino, voluntez startar skribar en la infra buxo.\n(regardez la [$1 helpo] por plusa informo).\nSe vu esas hike erore, kliktez sur la butono por retrovenar en vua navigilo.",
-       "noarticletext": "Prezente, ne esas texto en ica pagino.\nVu povas [[Special:Search/{{PAGENAME}}|serchar ica titulo]] en altra pagini,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchar en la relata registri],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktar ica pagino]</span>.",
+       "noarticletext": "Til nun ne existas texto en ica pagino.\nVu povas [[Specala:Search/{{PAGENAME}}|serchar ica titulo]] en altra pagini,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchar en la relata registri],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktar ica pagino]</span>.",
        "userpage-userdoesnotexist": "Uzeronomo \"$1\" no registragesis.\nVoluntez konfirmez se vu volas krear/redaktar ica pagino.",
        "userpage-userdoesnotexist-view": "Uzeronomo \"$1\" no registragesis.",
        "clearyourcache": "'''Atencez: Pos registragar, vu probable mustas renovigar la tempala-magazino di vua navigilo por vidar la chanji.'''\n'''Mozilla / Firefox / Safari:''' tenez ''Shift'' kliktante ''Reload'', o presez sive  ''Ctrl-F5'' sive ''Ctrl-R'' (''Command-R'' ye Mac);\n'''Konqueror''': kliktez ''Reload'' o presez ''F5'';\n'''Opera:''' vakuigez la tempala-magazino en ''Tools → Preferences'';\n'''Internet Explorer:''' tenez ''Ctrl'' kliktante ''Refresh,'' o presez ''Ctrl-F5''.",
        "rev-showdeleted": "montrar",
        "revdelete-show-file-submit": "Yes",
        "revdelete-hide-image": "Celar kontenajo dil arkivo",
-       "revdelete-hide-comment": "Celar komento pri redakto",
-       "revdelete-hide-user": "Celar uzantonomo od IP di redaktanto",
+       "revdelete-hide-comment": "Rezumo di redakto",
+       "revdelete-hide-user": "uzeronomo di redaktanto/IP-adreso",
        "revdelete-radio-set": "Celita",
        "revdelete-radio-unset": "Videbla",
        "revdelete-log": "Motivo:",
        "revdelete-reasonotherlist": "Altra motivo",
        "mergehistory-reason": "Motivo:",
        "revertmerge": "Desmixar",
-       "history-title": "Versionaro di \"$1\"",
+       "history-title": "Version-historio di \"$1\"",
+       "difference-title": "Diferi inter la revizi di $1",
        "lineno": "Lineo $1:",
        "compareselectedversions": "Komparar selektita versioni",
        "editundo": "des-facez",
+       "diff-multi-sameuser": "(ne montresas {{PLURAL:$1|1 meza revizo|$1 meza revizi}} facita da la sama uzero)",
        "searchresults": "Rezultaji dil sercho",
        "searchresults-title": "Sercho-rezultaji por \"$1\"",
        "titlematches": "Koincidi de titulo di artiklo",
        "searchprofile-articles-tooltip": "Serchez en $1",
        "searchprofile-images-tooltip": "Serchez arkivi",
        "search-result-size": "$1 ({{PLURAL:$2|1 vorto|$2 vorti}})",
-       "search-redirect": "(ridirektilo $1)",
+       "search-redirect": "(Ridirektita de $1)",
        "search-section": "(seciono $1)",
        "search-suggest": "Ka vu volis dicar: $1",
        "search-interwiki-caption": "Altra projekti",
-       "search-interwiki-default": "Rezultaji di $1:",
+       "search-interwiki-default": "Rezultaji de $1:",
        "search-interwiki-more": "(plusa)",
        "searchall": "omna",
        "showingresults": "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.",
+       "search-nonefound": "Nula rezulto trovesis por lua serchado.",
        "powersearch-legend": "Avancita sercho",
        "powersearch-ns": "Serchez en nomari:",
        "powersearch-toggleall": "Omna",
        "prefs-rc": "Recenta chanji",
        "prefs-watchlist": "Surveyo-listo",
        "prefs-watchlist-days": "Dii montrata en surveyaji:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "Maxime $1 {{PLURAL:$1|dio|dii}}",
        "prefs-watchlist-edits-max": "Maxima nombro: 1000",
        "prefs-misc": "Mixaji",
        "prefs-resetpass": "Chanjar pasovorto",
        "prefs-namespaces": "Nomari",
        "prefs-files": "Arkivi",
        "youremail": "Vua e-adreso:",
-       "username": "Uzantonomo:",
-       "prefs-memberingroups": "Membro di la {{PLURAL:$1|grupo|grupi}}:",
+       "username": "{{GENDER:$1|Uzeronomo}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Membro}} di {{PLURAL:$1|grupo|grupi}}:",
        "yourrealname": "Reala nomo:",
        "yourlanguage": "Linguo:",
        "yournick": "Signaturo:",
        "group-sysop": "Administranti",
        "group-bureaucrat": "Burokrati",
        "group-all": "(omna)",
-       "group-user-member": "Uzanto",
-       "group-bot-member": "Roboto",
-       "group-sysop-member": "Administranto",
-       "group-bureaucrat-member": "Burokrato",
+       "group-user-member": "{{GENDER:$1|uzero}}",
+       "group-bot-member": "{{GENDER:$1|roboto}}",
+       "group-sysop-member": "{{GENDER:$1|administrero}}",
+       "group-bureaucrat-member": "{{GENDER:$1|burokrato}}",
        "grouppage-user": "{{ns:project}}:Uzanti",
        "grouppage-bot": "{{ns:project}}:Roboti",
        "grouppage-sysop": "{{ns:project}}:Administranti",
        "rightslog": "Uzero-yuri-registraro",
        "action-read": "lektar ca pagino",
        "action-edit": "redaktar ca pagino",
-       "action-createpage": "krear pagini",
+       "action-createpage": "kreez ita pagino",
        "action-move": "movar ca pagino",
        "action-movefile": "movar ca arkivo",
        "action-upload": "adkargar ca arkivo",
        "action-browsearchive": "serchar pagini efacita",
        "nchanges": "$1 {{PLURAL:$1|chanjo|chanji}}",
+       "enhancedrc-history": "Versionaro",
        "recentchanges": "Recenta chanji",
        "recentchanges-legend": "Recenta chanji preferaji",
        "recentchanges-summary": "Regardez la maxim recenta chanji en Wiki per ica pagino.",
        "recentchanges-label-newpage": "Ca redaktajo kreis nova pagino",
        "recentchanges-label-minor": "Ica es mikra redaktajo",
        "recentchanges-label-bot": "Ta chanjo facita da bot",
+       "recentchanges-label-unpatrolled": "Ica modifiko ne patroliesas ankore.",
+       "recentchanges-label-plusminus": "La pagino modifikesis segun ica quanto di *bicoki",
        "recentchanges-legend-newpage": "$1 - nova pagino",
        "rcfilters-filter-userExpLevel-experienced-description": "Plu kam 30 dii di agemeso e 500 redakti.",
        "rcnotefrom": "Infre esas la lasta chanji depos '''$2''' (montrita til '''$1''').",
        "rclistfrom": "Montrar nova chanji startante de $3 $2",
        "rcshowhideminor": "$1 mikra redakti",
+       "rcshowhideminor-show": "Montrar",
+       "rcshowhideminor-hide": "Celar",
        "rcshowhidebots": "$1 roboti",
-       "rcshowhideliu": "$1 enirinta uzanti",
+       "rcshowhidebots-show": "Montrar",
+       "rcshowhidebots-hide": "Celar",
+       "rcshowhideliu": "$1 enrejistrita uzeri",
+       "rcshowhideliu-hide": "Celar",
        "rcshowhideanons": "$1 anonima uzanti",
+       "rcshowhideanons-show": "Montrar",
+       "rcshowhideanons-hide": "Celar",
        "rcshowhidemine": "$1 mea redakti",
+       "rcshowhidemine-show": "Montrar",
+       "rcshowhidemine-hide": "Celar",
        "rclinks": "Montrar la lasta $1 chanji dum la lasta $2 dii<br />$3",
        "diff": "dif",
        "hist": "vers",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "r",
-       "rc_categories_any": "Ula",
+       "rc_categories_any": "Irga selektita",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bicoko|bicoki}} pos la modifiki",
        "newsectionsummary": "/* $1 */ nova seciono",
-       "rc-enhanced-expand": "Montrar detali (JavaScript bezonesas)",
+       "rc-enhanced-expand": "Montrez detali",
        "rc-enhanced-hide": "Celar detali",
        "recentchangeslinked": "Relatanta chanji",
        "recentchangeslinked-feed": "Relatanta chanji",
        "uploadbtn": "Adkargar arkivo",
        "reuploaddesc": "Retrovenar al adkargo-formularo.",
        "uploadnologin": "Vu ne eniris",
-       "uploadnologintext": "Vu mustas [[Special:UserLogin|enirir]] por adkargar arkivi.",
+       "uploadnologintext": "Voluntez $1 por adkargar arkivi.",
        "uploaderror": "Eroro dum adkargo",
        "uploadlogpage": "Adkargo-registraro",
        "uploadlogpagetext": "Infre esas listo di la plu recenta adkargaji.\nVidez rezumo plu vidala en la [[Special:NewFiles|galerio di nova arkivi]].",
        "filesource": "Fonto:",
        "ignorewarning": "Ignorar la averto e gardar la arkivo irgakaze.",
        "badfilename": "La imajo-nomo chanjesis a \"$1\".",
-       "fileexists": "Arkivo kun ica nomo ja existas.\nVolutez kontrolar <strong>[[:$1]]</strong> se vu ne esas certa pri chanjar olu.\n[[$1|thumb]]",
+       "fileexists": "Arkivo kun ta nomo ja existas.\nVolutez kontrolar <strong>[[:$1]]</strong> se {{GENDER:|vu}} ne esas certa pri chanjar olu.\n[[$1|thumb]]",
        "uploadwarning": "Averto pri la adkargo di arkivo",
        "savefile": "Registragar arkivo",
        "uploaddisabled": "Pardonez, la adkargo esas desaktiva.",
        "linkstoimage": "La {{PLURAL:$1|pagino|$1 pagini}} infre ligas a ca arkivo:",
        "nolinkstoimage": "Nula pagino ligas a ca pagino.",
        "sharedupload": "Ca arkivo esas de $1 e posible esas uzata da altra projekti.",
+       "sharedupload-desc-here": "Ca arkivo jacas en $1, e povas uzesar en altra projeti.\nLa deskriptado en lua [$2 pagino di deskriptado] montresas infre.",
        "uploadnewversion-linktext": "Adkargez nova versiono dil arkivo",
        "shared-repo-from": "ek $1",
+       "upload-disallowed-here": "Vu ne povas modifikar ica arkivo.",
        "filerevert-comment": "Motivo:",
        "filedelete": "Efacar $1",
        "filedelete-legend": "Efacar arkivo",
        "ancientpages": "Maxim anciena artikli",
        "move": "Movar",
        "movethispage": "Rinomizar ica pagino",
-       "unusedimagestext": "Voluntez egardez ke altra ret-situi povus ligar a arkivo per direta URL, e do ol povus esar enlistizita hike malgre olu havas aktiva uzo.",
+       "unusedimagestext": "La sequanta arkivi existas ma ne enterigita en irga pagino.\nVoluntez remarkar ke altra ret-siti povus ligar ad arkivo per direta URL, e do ol povus esar listizita hike malgre ke on aktive uzas lo.",
        "notargettitle": "Ne esas vakua pagino",
        "notargettext": "Vu ne definis en qua pagino agar ica funciono.",
        "pager-newer-n": "{{PLURAL:$1|plu nova 1|plu nova $1}}",
        "apisandbox-loading": "Charjas informo pri modulo « $1 » di API...",
        "booksources": "Fonti di libri",
        "booksources-search-legend": "Serchez librala fonti",
-       "specialloguserlabel": "Uzanto:",
-       "speciallogtitlelabel": "Titulo:",
+       "booksources-search": "Serchar",
+       "specialloguserlabel": "Agero:",
+       "speciallogtitlelabel": "Skopo (titulo od {{ns:user}}:uzernomo por uzero):",
        "log": "Registrari",
        "all-logs-page": "Omna publika registrari",
        "allpages": "Omna pagini",
        "categories": "Kategorii",
        "deletedcontributions": "Efacita uzero-kontributadi",
        "deletedcontributions-title": "Efacita uzero-kontributadi",
-       "linksearch": "Extera ligili",
+       "linksearch": "Sercho di extera ligili",
        "linksearch-ns": "Nomaro:",
        "linksearch-ok": "Serchez",
        "listusers-submit": "Montrez",
        "mailnologin": "Ne sendar adreso",
        "mailnologintext": "Vu mustas [[Special:UserLogin|enirir]] e havar valida e-adreso en vua [[Special:Preferences|preferaji]] por sendar e-posto ad altra uzanti.",
        "emailuser": "Sendar e-posto a ca uzero",
-       "defemailsubject": "E-posto di {{SITENAME}}",
+       "defemailsubject": "{{SITENAME}} e-mesaji de uzero \"$1\"",
        "noemailtitle": "Ne esas e-adreso",
        "emailfrom": "De:",
        "emailto": "Ad:",
        "mywatchlist": "Surveyaji",
        "nowatchlist": "Vu ne havas objekti en vua listo di surveyaji.",
        "watchnologin": "Vu ne startis sesiono",
-       "addedwatchtext": "La pagino \"<nowiki>$1</nowiki>\" atachesis a vua [[Special:Watchlist|listo de surveyaji]]. Futura chanji di ica pagino ed olua relatanta debato-pagini montresos ibe, ed la pagino aparos per '''dika literi''' en la [[Special:RecentChanges|listo de recenta chanji]] por faciligar sua trovebleso.\n\n<p> Se vu volas efacar la pagino de vua listo de surveyaji pose, presez \"Ne plus surveyar\" en la selektaro.",
-       "removedwatchtext": "La pagino \"[[:$1]]\" forigesis de [[Special:Watchlist|vua surveyado]].",
+       "addedwatchtext": "\"[[:$1]]\" atachesis a vua [[Special:Watchlist|listo di surveyaji]].",
+       "removedwatchtext": "\"[[:$1]]\" ed relatanta diskutado forigesis de [[Special:Watchlist|vua surveyado]].",
        "watch": "Surveyar",
        "watchthispage": "Surveyar ica pagino",
        "unwatch": "Ne plus surveyar",
        "unwatchthispage": "Ne plus surveyar",
        "notanarticle": "Ne esas artiklo",
-       "wlnote": "Infre esas la lasta {{PLURAL:$1|chanjo|'''$1''' chanji}} dum la lasta {{PLURAL:$2|horo|'''$2''' hori}}.",
-       "wlshowlast": "Montrar la lasta $1 hori $2 dii",
+       "wlnote": "Yen la maxim recenta {{PLURAL:$1|chanjo|<strong>$1</strong> chanji}} dum la lasta {{PLURAL:$2|horo|<strong>$2</strong> hori}}, desde $3,$4.",
+       "wlshowlast": "Montrez la lasta $1 hori $2 dii",
        "watchlist-options": "Surveryo-listo selekti",
        "watching": "Surveyanta…",
        "unwatching": "Cesanta surveyar…",
        "exbeforeblank": "La kontenajo ante efaco esis: '$1'",
        "delete-confirm": "Efacar \"$1\"",
        "delete-legend": "Efacar",
-       "historywarning": "Egardez: La pagino, quan vu efaceskas, havas versionaro:",
+       "historywarning": "<strong>Averto:</strong> La pagino quan vu efaceskas havas historio kun $1 {{PLURAL:$1|revizo|revizi}}:",
        "actioncomplete": "Ago kompletigita",
        "deletedtext": "\"$1\" efacesis.\nVidez $2 por obtenar registro di recenta efaci.",
        "dellogpage": "Efaco-registraro",
        "deletecomment": "Motivo:",
        "deleteotherreason": "Altra/suplementala motivo:",
        "deletereasonotherlist": "Altra motivo",
-       "deletereason-dropdown": "*Ordinara motivi por efaco\n** Demandita da autoro\n** Kopiyuro Violaco\n** Korupto",
+       "deletereason-dropdown": "*Ordinara motivi por efacado\n** \"Spam\" nedezirata mesaji\n** Vandalismo\n** Kopiyuro Violaco\n** Demandita da autoro\n** Nefuncionanta ligilo",
        "rollback": "Retrorulez redakti",
        "rollbacklink": "retrorulez",
+       "rollbacklinkcount": "nuligar $1 {{PLURAL:$1|modifiko|modifiki}}",
        "rollbackfailed": "Retrorular ne sucesis",
        "cantrollback": "Ne esas posibla retrorular. La lasta kontributanto esas la nura autoro di ica pagino.",
        "alreadyrolled": "Vu ne povas retrorular la lasta chanjo di [[:$1]] da [[User:$2|$2]] ([[User talk:$2|Diskutez]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nulu pluse ja redaktis o retrorulis ica pagino.\n\nLa lasta chanjo a la pagino esis da [[User:$3|$3]] ([[User talk:$3|Diskutez]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "rollback-success": "Desfacis redakti da $1;\nrestauris ad lasta versiono da $2.",
        "protectlogpage": "Protekto-registraro",
        "protectedarticle": "protektita \"[[$1]]\"",
-       "unprotectedarticle": "desprotektita [[$1]]",
+       "unprotectedarticle": "desprotektita de \"[[$1]]\"",
        "protect-title": "Protektante \"$1\"",
        "prot_1movedto2": "[[$1]] movita a [[$2]]",
        "protect-legend": "Konfirmar protekto",
        "protect_expiry_invalid": "Expirotempo es ne-valida.",
        "protect_expiry_old": "Expirotempo es in pasinta.",
        "protect-default": "Permisar omna uzanti",
-       "protect-fallback": "Bezonar permiso \"$1\"",
-       "protect-level-sysop": "Nur administranti",
+       "protect-fallback": "Permisez nur uzeri kun permiso \"$1\"",
+       "protect-level-sysop": "Permisez nur administreri",
        "protect-summary-cascade": "kaskade",
        "protect-expiring": "expiras ye $1 (UTC)",
        "protect-expiry-indefinite": "nefinita",
        "undelete": "Vidar efacita pagini",
        "undeletepage": "Vidar e restaurar efacita pagini",
        "undeletepagetext": "La sequanta {{PLURAL:$1|pagino|pagini}} efacesis ma {{PLURAL:$1|ol|li}} ankore esas en la arkivo ed esas restaurebla. La arkivo povas netigesar periodale.",
-       "undeleterevisions": "$1 {{PLURAL:$1|revizo|revizi}} konservita",
+       "undeleterevisions": "$1 {{PLURAL:$1|revizo|revizi}} efacita",
        "undeletebtn": "Restaurar",
        "undeletelink": "vidar/restaurar",
        "undeleteviewlink": "videz",
-       "undeletecomment": "Komento:",
+       "undeletecomment": "Motivo:",
        "undelete-search-box": "Serchez efacita pagini",
        "undelete-search-submit": "Serchar",
        "undelete-show-file-submit": "Yes",
        "contributions": "Kontributadi dil {{GENDER:$1|uzero}}",
        "contributions-title": "Uzero-kontributadi di $1",
        "mycontris": "Kontributadi",
+       "anoncontribs": "Kontributadi",
        "contribsub2": "Pro $1 ($2)",
        "nocontribs": "Ne trovesis chanji qui fitez ita kriterii.",
        "uctop": "(aktuala)",
        "importtext": "Voluntez exportacar l' arkivo de la fonto-wiki uzante la utensilo \"Special:Export\", registragar ol a vua disko ed adkargar ol hike.",
        "importfailed": "La importaco faliis: $1",
        "importsuccess": "Importaco sucesoza!",
-       "tooltip-pt-userpage": "Vua uzanto-pagino",
-       "tooltip-pt-mytalk": "Vua diskuto-pagino",
-       "tooltip-pt-preferences": "Mea preferaji",
+       "tooltip-pt-userpage": "{{GENDER:|Vua uzero}} pagino",
+       "tooltip-pt-mytalk": "{{GENDER:|Vua}} diskuto-pagino",
+       "tooltip-pt-preferences": "{{GENDER:|Vua}} preferaji",
        "tooltip-pt-watchlist": "Listo di pagini quin vu kontrolas",
-       "tooltip-pt-mycontris": "Listo di vua kontributaji",
+       "tooltip-pt-mycontris": "Listo di {{GENDER:|vua}} kontributaji",
        "tooltip-pt-login": "Vu darfas enirar uzante vua pas-vorto, ma lo ne esas preskriptata.",
        "tooltip-pt-logout": "Ekirar",
+       "tooltip-pt-createaccount": "Vu stimulesas a krear konto e facar \"log in\". Tamen, to ne esas obliganta",
        "tooltip-ca-talk": "Diskuto pri la pagino di kontenajo",
-       "tooltip-ca-edit": "Vu darfas chanjar ta pagino. Voluntez pre-vidar chanji ante registragar oli.",
+       "tooltip-ca-edit": "Redaktar ita pagino",
        "tooltip-ca-addsection": "Komencar nova seciono",
        "tooltip-ca-viewsource": "Ca pagino esas protektita. Vu povas vidar olua fonto-kodo",
        "tooltip-ca-history": "Pasinta versioni di ca pagino",
        "tooltip-t-recentchangeslinked": "Recenta chanji di pagini ligita de ca pagino",
        "tooltip-feed-rss": "RSS provizero por ica pagino",
        "tooltip-feed-atom": "Atom provizero por ica pagino",
-       "tooltip-t-contributions": "Videz kontributaji di ta uzanto",
-       "tooltip-t-emailuser": "Sendez mesajo al uzanto",
+       "tooltip-t-contributions": "Videz kontributaji di {{GENDER:$1|ta uzanto}}",
+       "tooltip-t-emailuser": "Sendez mesajo al {{GENDER:$1|uzanto}}",
        "tooltip-t-info": "Plua informo pri ca pagino",
        "tooltip-t-upload": "Adkargez arkivi",
        "tooltip-t-specialpages": "Montrez listo di omna specala pagini",
        "tooltip-t-permalink": "Permananta ligilo vers ita versiono di ta pagino",
        "tooltip-ca-nstab-main": "Vidar la kontenajo di ca pagino",
        "tooltip-ca-nstab-user": "Vidar la pagino dil uzero",
-       "tooltip-ca-nstab-special": "Ito esas specala pagino, vu ne povas redaktar la pagino ipsa",
+       "tooltip-ca-nstab-special": "Ito esas specala pagino, ed es ne-redaktebla",
        "tooltip-ca-nstab-project": "Vidar la projekto-pagino",
        "tooltip-ca-nstab-image": "Videz la pagino dil arkivo",
        "tooltip-ca-nstab-template": "Vidar la shablono",
        "lastmodifiedatby": "Ica pagino modifikesis ye $2, $1 da $3.",
        "othercontribs": "Bazizita en la laboro da $1.",
        "others": "altra",
-       "siteusers": "{{PLURAL:$2|Uzanto|Uzanti}} che {{SITENAME}} $1",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|uzero}}|uzeri}} $1 di {{SITENAME}}",
        "spamprotectiontitle": "Filtrilo kontre spamo",
+       "simpleantispam-label": "Surveyo kontre \"spam\".\n<strong>NE SKRIBEZ</strong> hike!",
        "pageinfo-toolboxlink": "Informo di ca pagino",
        "previousdiff": "← Plu anciena versiono",
        "nextdiff": "Plu recenta versiono →",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pagino|pagini}}",
        "file-nohires": "Ne existas grandeso plu granda.",
-       "show-big-image": "Grandeso kompleta",
+       "svg-long-desc": "arkivo SVG, nominale $1 x $2 \"pixels\", kun $3",
+       "show-big-image": "Arkivo originala",
+       "show-big-image-size": "$1 x $2 pixels",
        "newimages": "Galerio di nova arkivi",
        "imagelisttext": "Infre esas listo di '''$1''' {{PLURAL:$1|arkivo|arkivi}} rangizita $2.",
        "newimages-legend": "Filtrilo",
        "ilsubmit": "Serchar",
        "bydate": "per dato",
        "metadata": "Metadonaji",
+       "metadata-help": "Ca arkivo kontenas plusa informo, probable furnisita per la kamero elektronikala o per la \"scanner\" uzata por krear o kopiar l'imajo.\nSe l'arkivo modifikesos de lua originala stando, kelka detali povos ne reprezentar exakte l'arkivo modifikata.",
+       "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Larjeso",
        "exif-imagelength": "Alteso",
+       "exif-orientation": "Orientizo",
+       "exif-xresolution": "Horizontala distingivo",
+       "exif-yresolution": "Vertikala distingivo",
+       "exif-datetime": "Dio e horo di la modifiko dil arkivo",
+       "exif-make": "Fabrikanto di la fotografilo",
+       "exif-model": "Fotografilo uzita",
+       "exif-software": "*Komputeroprogramo uzata",
        "exif-artist": "Autoro",
+       "exif-exifversion": "versiono Exif",
+       "exif-datetimeoriginal": "Dio e horo di produktado di la datumaro",
+       "exif-datetimedigitized": "Dio e horo di la kopio kun \"scanner\"",
        "exif-exposuretime-format": "$1 sek ($2)",
        "exif-gpslatitude": "Latitudo",
        "exif-gpslongitude": "Longitudo",
        "watchlisttools-view": "Vidar relatanta chanji",
        "watchlisttools-edit": "Vidar e redaktar surveyo-listo",
        "watchlisttools-raw": "Redaktar texto di surveyo-listo",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskuto]])",
        "version": "Versiono",
        "version-specialpages": "Specala pagini",
        "version-other": "Altra",
        "version-version": "($1)",
-       "version-license": "Licenco",
+       "version-license": "MediaWiki Licenco",
        "version-software-product": "Produkturo",
        "version-software-version": "Versiono",
        "fileduplicatesearch-submit": "Serchar",
        "specialpages-group-redirects": "Specala pagini di ridirektili",
        "blankpage": "Pagino sen-skribura",
        "tag-filter-submit": "Filtrez",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etikedo|Etikedi}}]]: $2)",
        "tags-edit": "redaktar",
        "tags-hitcount": "$1 {{PLURAL:$1|chanjo|chanji}}",
        "htmlform-reset": "Desfacar chanji",
        "htmlform-selectorother-other": "Altra",
        "htmlform-cloner-create": "Adjuntar plue",
+       "logentry-move-move": "$1 {{GENDER:$2|movis}} la pagino $3 a $4",
+       "logentry-newusers-create": "La konto dil uzero $1 kreesis.",
+       "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
        "rightsnone": "(nula)",
        "revdelete-summary": "redakto-rezumo",
-       "searchsuggest-search": "Serchez",
+       "searchsuggest-search": "Serchez en {{SITENAME}}",
        "searchsuggest-containing": "quan kontenas...",
        "expand_templates_output": "Rezulto",
        "expand_templates_ok": "O.K.",
index 6975bcc..d4666ed 100644 (file)
        "feedback-useragent": "Aðgangsforrit:",
        "searchsuggest-search": "Leita á {{SITENAME}}",
        "searchsuggest-containing": "sem innihalda ...",
-       "api-error-badaccess-groups": "Þú hefur ekki leyfi til að hlaða inn skrám.",
        "api-error-badtoken": "Innri villa: Skemmdur tóki.",
-       "api-error-copyuploaddisabled": "Ekki er hægt að hlaða inn með vefslóð á þessum vefþjóni.",
-       "api-error-duplicate": "Það {{PLURAL:$1|er önnur skrá|eru aðrar skrár}} þegar til á vefsvæðinu sem hafa sama innihald.",
-       "api-error-duplicate-archive": "Það {{PLURAL:$1|var önnur skrá|voru aðrar skrár}} þegar á síðunni með sama innihald, en {{PLURAL:$1|henni|þeim}} var eytt.",
-       "api-error-empty-file": "Skráin sem þú valdir er tóm.",
        "api-error-emptypage": "Stofnun nýrra, tómra síðna er óheimil.",
-       "api-error-fetchfileerror": "Innri villa: Mistókst að sækja skrána.",
-       "api-error-fileexists-forbidden": "Skrá með nafninu \"$1\" er þegar til og ekki er hægt að yfirskrifa hana.",
-       "api-error-fileexists-shared-forbidden": "Skrá með nafninu \"$1\" er þegar til á miðlæga gagnaþjóninum og ekki er hægt að yfirskrifa hana.",
-       "api-error-file-too-large": "Skráin sem þú valdir er of stór.",
-       "api-error-filename-tooshort": "Skráarheitið er of stutt",
-       "api-error-filetype-banned": "Þessi gerð skráar er bönnuð.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|er óleyfileg skráargerð|eru óleyfilegar skráargerðir}}. {{PLURAL:$3|Leyfð skráargerð er|Leyfðar skráargerðir eru}} $2.",
-       "api-error-filetype-missing": "Skráin hefur enga skráarendingu.",
-       "api-error-hookaborted": "Hætt var við breytinguna sem þú reyndir að gera með viðbót.",
-       "api-error-http": "Innri villa: Get ekki tengst vefþjón.",
-       "api-error-illegal-filename": "Þetta skráarheiti er ekki leyft.",
-       "api-error-internal-error": "Innri villa: Mistókst að vinna úr innsendingunni þinni.",
-       "api-error-invalid-file-key": "Innri villa: Skrá fannst ekki í bráðabirgðageymslu.",
-       "api-error-missingparam": "Innri villa: Breytur vantar í beiðni.",
-       "api-error-missingresult": "Innri villa: Gat ekki ákvarðað hvort tókst að afrita.",
-       "api-error-mustbeloggedin": "Þú verður að vera skráður inn til að hlaða inn skrám.",
-       "api-error-mustbeposted": "Innri villa: Beiðnin þarfnast HTTP POST.",
-       "api-error-noimageinfo": "Innsending skrárinnar tókst, en vefþjónninn gaf okkur engar upplýsingar um skrána.",
-       "api-error-nomodule": "Innri villa: Engin innsendingareining valin.",
-       "api-error-ok-but-empty": "Innri villa: ekkert svar frá vefþjón.",
-       "api-error-overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.",
-       "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt bráðabirgðaskrá.",
        "api-error-publishfailed": "Innri villa: Vefþjónninn gat ekki gefið út bráðabirgðaskrá.",
-       "api-error-timeout": "Vefþjónninn svaraði ekki á tilætluðum tíma.",
-       "api-error-unclassified": "Óþekkt villa kom upp.",
-       "api-error-unknown-code": "Óþekkt villa: \"$1\"",
-       "api-error-unknown-error": "Innri villa: Eitthvað fór úrskeiðis þegar að skráinni þinni var hlaðið inn.",
+       "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt bráðabirgðaskrá.",
        "api-error-unknown-warning": "Óþekkt viðvörun: $1",
        "api-error-unknownerror": "Óþekkt villa: \"$1\".",
-       "api-error-uploaddisabled": "Ekki er leyft að hlaða inn á þessum wiki.",
-       "api-error-verification-error": "Þessi skrá gæti verið skemmd, eða með vitlausa skráarendingu.",
        "duration-seconds": "$1 {{PLURAL:$1|sekúnda|sekúndur}}",
        "duration-minutes": "$1 {{PLURAL:$1|mínúta|mínútur}}",
        "duration-hours": "$1 {{PLURAL:$1|klukkustund|klukkustundir}}",
index 127550d..ce3d5e7 100644 (file)
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Mostra",
        "rcfilters-activefilters": "Filtri attivi",
+       "rcfilters-restore-default-filters": "Ripristina i filtri predefiniti",
+       "rcfilters-clear-all-filters": "Pulisci tutti i filtri",
        "rcfilters-search-placeholder": "Filtra le ultime modifiche (naviga o inizia a digitare)",
        "rcfilters-invalid-filter": "Filtro non valido",
+       "rcfilters-empty-filter": "Nessun filtro attivo. Sono mostrati tutti i contributi.",
        "rcfilters-filterlist-title": "Filtri",
        "rcfilters-filterlist-noresults": "Nessun filtro trovato",
+       "rcfilters-filtergroup-registration": "Registrazione utente",
+       "rcfilters-filter-registered-label": "Registrato",
        "rcfilters-filtergroup-authorship": "Modifica paternità",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filtergroup-significance": "Significato",
+       "rcfilters-filter-minor-label": "Modifiche minori",
+       "rcfilters-filter-major-label": "Modifiche non minori",
+       "rcfilters-filtergroup-changetype": "Tipo di modifica",
+       "rcfilters-filter-pageedits-label": "Modifiche alle pagine",
+       "rcfilters-filter-newpages-label": "Creazioni pagine",
+       "rcfilters-filter-logactions-description": "Azioni amministrative, creazione utenze, cancellazioni pagine, caricamenti....",
        "rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da <strong>$3, $4</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfrom": "Mostra le modifiche apportate a partire da $3 $2",
        "rcshowhideminor": "$1 le modifiche minori",
        "apisandbox-sending-request": "Invio richiesta di API...",
        "apisandbox-loading-results": "Ricezione dei risultati di API in corso...",
        "apisandbox-results-error": "Si è verificato un errore durante il caricamento della risposta all'interrogazione API: $1",
-       "apisandbox-request-params-json": "Parametri JSON:",
        "apisandbox-request-url-label": "URL di richiesta:",
        "apisandbox-request-time": "Tempo richiesto: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Correggi token e reinvia",
        "feedback-useragent": "Agente utente:",
        "searchsuggest-search": "Cerca all'interno di {{SITENAME}}",
        "searchsuggest-containing": "contenente...",
-       "api-error-autoblocked": "Il tuo indirizzo IP è stato bloccato automaticamente, perché è stato utilizzato da un utente bloccato.",
-       "api-error-badaccess-groups": "Non sei autorizzato a caricare documenti su questa wiki.",
        "api-error-badtoken": "Errore interno: token errato.",
-       "api-error-blocked": "Sei stato bloccato, non puoi fare modifiche.",
-       "api-error-copyuploaddisabled": "Il caricamento tramite URL è disabilitato su questo server.",
-       "api-error-duplicate": "{{PLURAL:$1|Esiste già un altro file|Esistono già altri file}} sul sito con lo stesso contenuto.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Esiste già un altro file|Esistono già altri file}} sul sito con lo stesso contenuto, ma {{PLURAL:$1|è stato cancellato|sono stati cancellati}}.",
-       "api-error-empty-file": "Il file selezionato era vuoto.",
        "api-error-emptypage": "La creazione di nuove pagine vuote non è consentita.",
-       "api-error-fetchfileerror": "Errore interno: si è verificato un problema durante il recupero del file.",
-       "api-error-fileexists-forbidden": "Un file di nome \"$1\" già esiste e non può essere sovrascritto.",
-       "api-error-fileexists-shared-forbidden": "Un file di nome \"$1\" già esiste nel repository condiviso e non può essere sovrascritto.",
-       "api-error-file-too-large": "Il file selezionato era troppo grande.",
-       "api-error-filename-tooshort": "Il nome del file è troppo breve.",
-       "api-error-filetype-banned": "Questo tipo di file non è accettato.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|non è un tipo di file consentito|non sono tipi di file consentiti}}. {{PLURAL:$3|Il tipo di file consentito è|I tipi di file consentiti sono}} $2.",
-       "api-error-filetype-missing": "Al file manca l'estensione.",
-       "api-error-hookaborted": "La modifica hai tentato di fare è stata interrotta da un passaggio dell'estensione.",
-       "api-error-http": "Errore interno: impossibile connettersi al server.",
-       "api-error-illegal-filename": "Il nome del file non è ammesso.",
-       "api-error-internal-error": "Errore interno: qualcosa è andato storto con l'elaborazione del tuo caricamento sulla wiki.",
-       "api-error-invalid-file-key": "Errore interno: file non presente nella cartella dei file temporanei.",
-       "api-error-missingparam": "Errore interno: parametri della richiesta mancanti.",
-       "api-error-missingresult": "Errore interno: impossibile determinare se la copia è riuscita.",
-       "api-error-mustbeloggedin": "Devi aver effettuato l'accesso per caricare i file.",
-       "api-error-mustbeposted": "Errore interno: la richiesta richiede HTTP POST.",
-       "api-error-noimageinfo": "Il caricamento è riuscito, ma il server non ci ha restituito alcuna informazione sul file.",
-       "api-error-nomodule": "Errore interno: non è stato impostato il modulo di caricamento.",
-       "api-error-ok-but-empty": "Errore interno: nessuna risposta dal server.",
-       "api-error-overwrite": "Sovrascrivere un file esistente non è consentito.",
-       "api-error-ratelimited": "Stai cercando di caricare più file in meno tempo di quanto questo wiki permette.\nRiprova tra pochi minuti.",
-       "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\"",
-       "api-error-unknown-error": "Errore interno: qualcosa è andato storto provando a caricare il file.",
+       "api-error-stashfailed": "Errore interno: il server non è riuscito a memorizzare il documento temporaneo.",
        "api-error-unknown-warning": "Avvertimento sconosciuto: \"$1\".",
        "api-error-unknownerror": "Errore sconosciuto: \"$1\".",
-       "api-error-uploaddisabled": "Il caricamento è disabilitato su questa wiki.",
-       "api-error-verification-error": "Questo file potrebbe essere danneggiato, o avere l'estensione sbagliata.",
-       "api-error-was-deleted": "Un file con lo stesso nome è stato precedentemente caricato e successivamente eliminato.",
        "duration-seconds": "$1 {{PLURAL:$1|secondo|secondi}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minuti}}",
        "duration-hours": "$1 {{PLURAL:$1|ora|ore}}",
        "usercssispublic": "Ricorda: le sottopagine CSS non devono contenere dati riservati poichè sono visualizzabili da altri utenti.",
        "restrictionsfield-badip": "Indirizzo IP o intervallo non valido: $1",
        "restrictionsfield-label": "Intervalli IP consentiti:",
-       "restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "versione $1",
        "pageid": "ID della pagina $1"
 }
index 96d3ddf..f5066c9 100644 (file)
        "feedback-useragent": "მომხმარებლის აგენტი:",
        "searchsuggest-search": "ძიება",
        "searchsuggest-containing": "შეიცავს...",
-       "api-error-autoblocked": "თქვენი IP მისამართი ავტომატურად დაიბლოკა, რადგან ის გამოიყენა დაბლოკილმა მომხმარებელმა.",
-       "api-error-badaccess-groups": "თქვენ არ გაქვთ ამ ვიკიში ფაილების ატვირთვის უფლება.",
        "api-error-badtoken": "შიდა შეცდომა: ცუდი ტოკენი.",
-       "api-error-blocked": "თქვენთვის რედაქტირება დაბლოკილია.",
-       "api-error-copyuploaddisabled": "ამ სერვერზე URL-მისამართის საშუალებით ატვირთვა გამორთულია.",
-       "api-error-duplicate": "საიტზე უკვე {{PLURAL:$1|არსებობს სხვა ფაილი|არსებობს სხვა ფაილები}} ანალოგიური შინაარსით.",
-       "api-error-duplicate-archive": "საიტზე ადრე {{PLURAL:$1|უკვე იყო ფაილი}} ანალოგიური შინაარსით, მაგრამ {{PLURAL:$1|ის წაიშალა|ისინი წაიშალა}}.",
-       "api-error-empty-file": "არჩეული ფაილი ცარიელია.",
        "api-error-emptypage": "ახალი, ცარიელი გვერდების შექმნა აკრძალულია.",
-       "api-error-fetchfileerror": "შიდა შეცდომა: ფაილის მიღებისას მოხდა რაღაც შეცდომა.",
-       "api-error-fileexists-forbidden": "ფაილი სახელით „$1“ უკვე არსებობს და მისი გადაწერა შეუძლებელია.",
-       "api-error-fileexists-shared-forbidden": "ფაილი სახელით „$1“ უკვე არსებობს საერთო ფაილების საცავში და გადაწერა შეუძლებელია.",
-       "api-error-file-too-large": "არჩეული ფაილი ძალიან დიდია.",
-       "api-error-filename-tooshort": "ფაილის სახელი ზედმეტად მოკლეა",
-       "api-error-filetype-banned": "ფაილის ეს ტიპი აკრძალულია",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|მიუღებელი ფაილის ტიპია|მიუღებელი ფაილის ტიპებია}}. მისაღებიი ფაილის {{PLURAL:$3|ტიპია|ტიპებია}} $2.",
-       "api-error-filetype-missing": "ფაილს აკლია გაფართოვება.",
-       "api-error-hookaborted": "თქვენ მიერ შემოთავაზებული ცვლილება მოინიშნა გაფართოების დოკუმენტაციაში.",
-       "api-error-http": "აღმოჩენილია შეცდომა სერვერთან დაკავშირებისას.",
-       "api-error-illegal-filename": "ფაილის ეს სახელი აკრძალულია.",
-       "api-error-internal-error": "შიდა შეცდომა: ვიკიში თქვენი ატვირთვის დამუშავებისას მოხდა შეცდომა.",
-       "api-error-invalid-file-key": "სერვერმა ვერ იპოვა თქვენ მიერ მითითებული ფაილი",
-       "api-error-missingparam": "შიდა შეცდომა: მოთხოვნილი პარამეტრები დაიკარგა.",
-       "api-error-missingresult": "შიდა შეცდომა. ვერ მოხერხდა იმის დადგენა, იყო თუ არა კოპირება წარმატებული.",
-       "api-error-mustbeloggedin": "ფაილების ასატვირთად თქვენ უნდა შეხვიდეთ სისტემაში.",
-       "api-error-mustbeposted": "პროგრამული შეცდომა; გამოყენებულია არასწორი HTTP-მეთოდი.",
-       "api-error-noimageinfo": "ატვირთვა წარმატებით განხორციელდა, მაგრამ სერვერმა არ აჩვენა ფაილის შესახებ არანაირი ინფორმაცია.",
-       "api-error-nomodule": "შიდა შეცდომა. ატვირთვის მოდული არ არის კონფიგურირებული.",
-       "api-error-ok-but-empty": "შიდა შეცდომა. სერვერს არ დაუბრუნებია ინფორმაცია ატვირთვადი ფაილის შესახებ.",
-       "api-error-overwrite": "არსებული ფაილის შეცვლა მიუღებელია.",
-       "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“",
-       "api-error-unknown-error": "შიდა შეცდომა: ფაილის ატვირთვისას აღმოჩენილია უცნობი შეცდომა.",
+       "api-error-stashfailed": "შიდა შეცდომა: სერვერმა ვერ შეძლო დროებითი ფაილის შენახვა.",
        "api-error-unknown-warning": "უცნობი გაფრთხილება: „$1“.",
        "api-error-unknownerror": "უცნობი შეცდომა: „$1“.",
-       "api-error-uploaddisabled": "ატვირთვის მექანიზმი ამ ვიკიზე გამორთულია",
-       "api-error-verification-error": "ეს ფაილი ან რაიმე შეცდომას შეიცავს, ან არ აქვს სახელის გაფართოება.",
-       "api-error-was-deleted": "ფაილი ამ სახელწოდებით ადრე აიტვირთა და შემდეგ წაიშალა.",
        "duration-seconds": "$1 {{PLURAL:$1|წამი|წამი}}",
        "duration-minutes": "$1 {{PLURAL:$1|წუთი|წუთი}}",
        "duration-hours": "$1 {{PLURAL:$1|საათი|საათი}}",
index 45bb825..3f45d64 100644 (file)
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "보기",
        "rcfilters-activefilters": "사용 중인 필터",
+       "rcfilters-restore-default-filters": "기본 필터 복구",
+       "rcfilters-clear-all-filters": "필터 모두 지우기",
        "rcfilters-search-placeholder": "필터 최근 바뀜 (찾아보거나 입력을 시작하십시오)",
        "rcfilters-invalid-filter": "유효하지 않은 필터",
+       "rcfilters-empty-filter": "활발한 필터 없음. 모든 기여 내역을 보여줍니다.",
        "rcfilters-filterlist-title": "필터",
        "rcfilters-filterlist-noresults": "필터를 찾을 수 없습니다",
+       "rcfilters-filtergroup-registration": "사용자 등록",
+       "rcfilters-filter-registered-label": "등록됨",
+       "rcfilters-filter-registered-description": "로그인된 편집자.",
+       "rcfilters-filter-unregistered-label": "등록 안됨",
+       "rcfilters-filter-unregistered-description": "로그인 하지 않은 편집자.",
        "rcfilters-filtergroup-authorship": "원작자 편집",
        "rcfilters-filter-editsbyself-label": "자신의 편집",
        "rcfilters-filter-editsbyself-description": "당신의 편집.",
        "rcfilters-filter-editsbyother-label": "다른 사용자의 편집",
-       "rcfilters-filter-editsbyother-description": "다른 사용자에 의한 편집. (당신의 편집이 아님)",
-       "rcfilters-filtergroup-userExpLevel": "사용자 경험 수준",
+       "rcfilters-filter-editsbyother-description": "다른 사용자에 의한 편집 (당신의 편집이 아님).",
+       "rcfilters-filtergroup-userExpLevel": "경험 수준 (등록된 사용자 전용)",
        "rcfilters-filter-userExpLevel-newcomer-label": "신규 사용자",
-       "rcfilters-filter-userExpLevel-newcomer-description": "신규 편집자: 10개 미만의 편집 및 4일 미만의 활동.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "편집 10회 미만의 편집 및 4일 미만의 활동.",
        "rcfilters-filter-userExpLevel-learner-label": "학습자",
-       "rcfilters-filter-userExpLevel-learner-description": "'신규 사용자' 보다 활동일 및 편집 수가 더 많지만 '능숙한 사용자' 보다는 적습니다.",
+       "rcfilters-filter-userExpLevel-learner-description": "\"신규 사용자\" 보다 활동일 및 편집 수가 더 많지만 \"능숙한 사용자\" 보다는 적습니다.",
        "rcfilters-filter-userExpLevel-experienced-label": "능숙한 사용자",
        "rcfilters-filter-userExpLevel-experienced-description": "30일 이상의 활동 및 500개 이상의 편집.",
+       "rcfilters-filtergroup-automated": "자동으로 된 기여",
+       "rcfilters-filter-bots-label": "봇",
+       "rcfilters-filter-bots-description": "자동 도구를 이용한 편집.",
+       "rcfilters-filter-humans-label": "사람 (봇이 아님)",
+       "rcfilters-filter-humans-description": "수동으로 한 편집.",
+       "rcfilters-filter-minor-label": "사소한 편집",
+       "rcfilters-filter-major-label": "사소하지 않은 편집",
+       "rcfilters-filter-major-description": "사소한 편집으로 표시되지 않은 편집.",
+       "rcfilters-filtergroup-changetype": "차이 종류",
+       "rcfilters-filter-pageedits-label": "문서 편집",
+       "rcfilters-filter-newpages-label": "문서 생성",
+       "rcfilters-filter-newpages-description": "새 문서를 만드는 편집.",
+       "rcfilters-filter-categorization-label": "분류 차이",
        "rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 표시됨)",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
        "rcshowhideminor": "사소한 편집 $1",
        "apisandbox-sending-request": "API 요청을 보내는 중...",
        "apisandbox-loading-results": "API 결과를 받는 중...",
        "apisandbox-results-error": "API 질의 응답을 불러오는 도중 오류 발생: $1.",
-       "apisandbox-request-params-json": "JSON 변수:",
        "apisandbox-request-url-label": "요청 URL:",
        "apisandbox-request-time": "요청 처리 시간: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "토큰 수정 후 다시 제출",
        "feedback-useragent": "사용자 에이전트:",
        "searchsuggest-search": "{{SITENAME}} 검색",
        "searchsuggest-containing": "다음 문자열 포함...",
-       "api-error-autoblocked": "사용자의 IP 주소는 차단된 사용자에 의해 사용되었으므로 자동으로 차단된 상태입니다.",
-       "api-error-badaccess-groups": "이 위키에 파일을 올릴 권한이 없습니다.",
        "api-error-badtoken": "내부 오류: 토큰이 잘못되었습니다.",
-       "api-error-blocked": "편집에서 차단되어 있습니다.",
-       "api-error-copyuploaddisabled": "이 서버에서 URL을 통해 파일 올리기가 비활성화되어 있습니다.",
-       "api-error-duplicate": "이 위키에 내용이 똑같은 {{PLURAL:$1|다른 파일}}이 있습니다.",
-       "api-error-duplicate-archive": "같은 내용을 담고 있던 {{PLURAL:$1|다른 파일}}이 있었지만 이 {{PLURAL:$1|파일}}은 삭제되었습니다.",
-       "api-error-empty-file": "올리려는 파일이 비어 있습니다.",
        "api-error-emptypage": "새 문서로 빈 문서를 만들 수 없습니다.",
-       "api-error-fetchfileerror": "내부 오류: 파일을 불러오는 중 문제가 발생했습니다.",
-       "api-error-fileexists-forbidden": "\"$1\" 이름으로 된 파일은 이미 존재하고 덮어쓸 수 없습니다.",
-       "api-error-fileexists-shared-forbidden": "\"$1\" 이름으로 된 파일이 이미 공용 저장소에 존재하며 덮어쓸 수 없습니다.",
-       "api-error-file-too-large": "올리려는 파일이 너무 큽니다.",
-       "api-error-filename-tooshort": "파일 이름이 너무 짧습니다.",
-       "api-error-filetype-banned": "이 파일의 형식은 금지되어 있습니다.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|파일 형식은 올릴 수 없습니다}}. $2 {{PLURAL:$3|파일 형식만 사용할 수 있습니다}}.",
-       "api-error-filetype-missing": "파일 이름에 확장자가 없습니다.",
-       "api-error-hookaborted": "수정하려고 한 것이 확장 기능에 의해 중지되었습니다.",
-       "api-error-http": "내부 오류: 서버에 연결할 수 없습니다.",
-       "api-error-illegal-filename": "이 파일 이름을 사용할 수 없습니다.",
-       "api-error-internal-error": "내부 오류: 올린 파일을 위키에서 처리하는 중 어떤 문제가 발생했습니다.",
-       "api-error-invalid-file-key": "내부 오류: 임시 저장소에서 파일을 찾지 못했습니다.",
-       "api-error-missingparam": "내부 오류: 요청에 변수가 없습니다.",
-       "api-error-missingresult": "내부 오류: 파일의 복제가 성공했는지 판단할 수 없습니다.",
-       "api-error-mustbeloggedin": "파일을 올리려면 로그인해야 합니다.",
-       "api-error-mustbeposted": "내부 오류: HTTP POST에 요청이 필요합니다.",
-       "api-error-noimageinfo": "업로드는 성공했지만 서버가 파일에 대해 어떠한 정보도 제공하지 않았습니다.",
-       "api-error-nomodule": "내부 오류: 올리기 모듈이 설정되지 않았습니다.",
-       "api-error-ok-but-empty": "내부 오류: 서버에서 응답이 없습니다.",
-       "api-error-overwrite": "이미 있는 파일을 덮어쓸 수 없습니다.",
-       "api-error-ratelimited": "짧은 시간 안에 위키가 허용하는 것 보다 더 많은 파일을 업로드하려고 합니다.\n몇 분 뒤에 다시 시도해 주십시오.",
-       "api-error-stashfailed": "내부 오류: 서버가 임시 파일을 저장하지 못했습니다.",
        "api-error-publishfailed": "내부 오류: 서버가 임시 파일을 게시하지 못했습니다.",
-       "api-error-stasherror": "파일을 미공개 위치로 업로드하는 동안 오류가 발생했습니다.",
-       "api-error-stashedfilenotfound": "임시 저장된 파일이 임시 저장소에서 올리려고 했을 때 찾을 수 없었습니다.",
-       "api-error-stashpathinvalid": "임시 저장된 파일이 존재해야 할 경로에 유효한 파일이 없습니다.",
-       "api-error-stashfilestorage": "파일을 임시 저장하는 동안 오류가 발생했습니다.",
-       "api-error-stashzerolength": "서버는 파일을 저장하지 못했는데, 파일의 용량이 0이기 때문입니다.",
-       "api-error-stashnotloggedin": "파일을 업로드하기 위해 로그인이 필요합니다.",
-       "api-error-stashwrongowner": "저장된 임시 저장소에 존재하는 파일에 접근할 권한이 없습니다.",
-       "api-error-stashnosuchfilekey": "미공개 위치에 접근을 시도한 파일 키는 존재하지 않습니다.",
-       "api-error-timeout": "서버가 예측된 시간 내에 응답하지 않았습니다.",
-       "api-error-unclassified": "알 수 없는 오류가 발생했습니다.",
-       "api-error-unknown-code": "알 수 없는 오류: \"$1\"",
-       "api-error-unknown-error": "내부 오류: 파일을 올리려 하는 도중에 무엇인가가 잘못되었습니다.",
+       "api-error-stashfailed": "내부 오류: 서버가 임시 파일을 저장하지 못했습니다.",
        "api-error-unknown-warning": "알 수 없는 경고: \"$1\".",
        "api-error-unknownerror": "알 수 없는 오류: \"$1\"",
-       "api-error-uploaddisabled": "이 위키에서 파일 올리기가 비활성화되어 있습니다.",
-       "api-error-verification-error": "파일이 손상되었거나 잘못된 확장자를 사용하고 있습니다.",
-       "api-error-was-deleted": "이 이름으로 된 파일은 과거에 업로드된 이후 삭제된 적이 있습니다.",
        "duration-seconds": "$1{{PLURAL:$1|초}}",
        "duration-minutes": "$1{{PLURAL:$1|분}}",
        "duration-hours": "$1{{PLURAL:$1|시간}}",
index 2cb08af..16ddbcd 100644 (file)
        "feedback-thanks-title": "Spas!",
        "searchsuggest-search": "Li ser {{SITENAME}} bigere",
        "searchsuggest-containing": "dihundirîne...",
-       "api-error-filename-tooshort": "Navê dosyeyê pir kurt e.",
-       "api-error-unclassified": "Çewtiyeke nenas pêk hat.",
-       "api-error-unknown-code": "Çewtiya nenas: \"$1\".",
        "api-error-unknownerror": "Çewtiya nenas: \"$1\".",
        "duration-years": "$1 {{PLURAL:$1|sal}}",
        "expand_templates_output": "Encam",
index 5a77cc0..70ba002 100644 (file)
        "rcfilters-filter-editsbyself-description": "Ännerunge vun Iech.",
        "rcfilters-filter-editsbyother-label": "Ännerunge vun Aneren",
        "rcfilters-filter-editsbyother-description": "Ännerunge vun anere Benotzer (net vun Iech).",
-       "rcfilters-filtergroup-userExpLevel": "Niveau vun der Erfahrung vum Benotzer",
+       "rcfilters-filtergroup-userExpLevel": "Niveau vun der Erfahrung (just fir registréiert Benotzer)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Neier",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Ganz nei Auteuren: manner wéi 10 Ännerungen a manner wéi 4 Deeg Aktivitéit.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Manner wéi 10 Ännerungen a manner wéi 4 Deeg Aktivitéit.",
        "rcfilters-filter-userExpLevel-learner-label": "Ufänger",
-       "rcfilters-filter-userExpLevel-learner-description": "Aktivitéit vu méi Deeg a méi Ännerunge wéi 'Nei Benotzer' awer manner wéi 'Erfuere Benotzer'.",
+       "rcfilters-filter-userExpLevel-learner-description": "Aktivitéit vu méi Deeg a méi Ännerunge wéi ''Nei Benotzer'' awer manner wéi ''Erfuere Benotzer''.",
        "rcfilters-filter-userExpLevel-experienced-label": "Erfuere Benotzer.",
        "rcfilters-filter-userExpLevel-experienced-description": "Méi wéi 30 Deeg Aktivitéit a méi wéi 500 Ännerungen.",
+       "rcfilters-filter-minor-label": "Kleng Ännerungen",
+       "rcfilters-filter-major-label": "Keng kleng Ännerungen",
+       "rcfilters-filter-pageedits-label": "Säitenännerungen",
        "rcnotefrom": "Hei drënner {{PLURAL:$5|gëtt d'Ännerung|ginn d'Ännerungen}} zanter <strong>$3, $4</strong> (maximal <strong>$1</strong> Ännerunge gi gewisen).",
        "rclistfrom": "Nei Ännerunge vum $3 $2 u weisen",
        "rcshowhideminor": "Kleng Ännerunge $1",
        "apisandbox-results": "Resultater",
        "apisandbox-sending-request": "Schécke vun der API-Ufro...",
        "apisandbox-loading-results": "Ofruffe vun den API-Resultater...",
-       "apisandbox-request-params-json": "JSON-Parameteren:",
        "apisandbox-request-url-label": "URL fir Ufroen:",
        "apisandbox-request-time": "Dauer vun der Ufro: {{PLURAL:$1|$1 ms}}",
        "apisandbox-alert-page": "Felder op dëser Säit sinn net valabel.",
        "feedback-useragent": "User Agent:",
        "searchsuggest-search": "Op {{SITENAME}} sichen",
        "searchsuggest-containing": "mat ...",
-       "api-error-autoblocked": "Är IP-Adress gouf automatesch gespaart wëll se vun engem gespaarte Benotzer  benotzt gouf",
-       "api-error-badaccess-groups": "Et ass Iech net erlaabt fir Fichieren op dës Wiki eropzelueden.",
        "api-error-badtoken": "Interne Feeler: falschen Token.",
-       "api-error-blocked": "Dir gouft gespaart a  kënnt dofir keng Ännerunge maachen.",
-       "api-error-copyuploaddisabled": "D'Eroplueden iwwer eng URL ass op dësem Server desaktivéiert.",
-       "api-error-duplicate": "Et gëtt schonn {{PLURAL:$1|een anere Fichier|e puer aner Fichiere}} mam selwechten Inhalt um Site",
-       "api-error-duplicate-archive": "Et gouf schonn {{PLURAL:$1|een anere Fichier|e puer aner Fichieren}} um Site mam selwechten Inhalt, {{PLURAL:$1|e gouf|se goufen}} awer geläscht.",
-       "api-error-empty-file": "De Fichier deen Dir geschéckt hutt war eidel.",
        "api-error-emptypage": "Et ass net erlaabt nei, eidel Säiten unzeleeën.",
-       "api-error-fetchfileerror": "Interne Feeler: beim Opruffe vum Fichier huet eppes net funktionéiert.",
-       "api-error-fileexists-forbidden": "E Fichier mam Numm \"$1\" gëtt et schonn an e kann net iwwerschriwwe ginn.",
-       "api-error-fileexists-shared-forbidden": "E Fichier mam Numm \"$1\" gëtt et schonn am gedeelte Repertoire an e kann net iwwerschriwwe ginn.",
-       "api-error-file-too-large": "De Fichier deen Dir geschéckt hutt war ze grouss.",
-       "api-error-filename-tooshort": "Den Numm vum Fichier ass ze kuerz.",
-       "api-error-filetype-banned": "Dësen Typ vu Fichier ass net zougelooss.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|ass e Fichiersformat deen net erlaabt ass|si Fichiersformater déi net erlaabt sinn}}. Erlaabt {{PLURAL:$3|ass de Fichiersformat|sinn d'Fichiersformater}}: $2.",
-       "api-error-filetype-missing": "D'Erweiderung vum Fichier feelt.",
-       "api-error-hookaborted": "D'Ännerung déi Dir versicht hutt ze maachen ass duerch en 'extension-hook' ofgebrach ginn.",
-       "api-error-http": "Interne Feeler: net méiglech sech op de Server ze connectéieren.",
-       "api-error-illegal-filename": "Den Numm vum Fichier ass net erlaabt.",
-       "api-error-internal-error": "Interne Feeler: Et ass eppes schif gaang beim Verschaffe vum eropgeluedene Fichier op der Wiki.",
-       "api-error-invalid-file-key": "Interne Feeler: de Fichier gouf op der temporärer Späicherplaz net fonnt.",
-       "api-error-missingparam": "Interne Feeler: E vun de Parameter feelt an der Ufro.",
-       "api-error-missingresult": "Interne Feeler: et konnt net festgestallt ginn ob d'Kopie eppes ginn ass.",
-       "api-error-mustbeloggedin": "Dir musst ageloggt si fir Fichieren eropzelueden.",
-       "api-error-mustbeposted": "An dëser Software ass e Feeler; se benotzt net déi richteg HTTP-Method.",
-       "api-error-noimageinfo": "D'Eroplueden huet funktionéiert, awer de Server huet eis keng Informatiounen iwwer de Fichier ginn.",
-       "api-error-nomodule": "Interne Feeler: de Modul fir d'Eroplueden ass net agestallt.",
-       "api-error-ok-but-empty": "Interne Feeler: keng Äntwert vum Server.",
-       "api-error-overwrite": "D'Iwwerschreiwe vun engem Fichier ass net erlaabt.",
-       "api-error-ratelimited": "Dir probéiert fir méi ££Fichieren a kuerzer Zäit eropzeluede wéi der op dëser Wiki erlaabt sinn. Probéiert w.e.g. an e puer Minutten nach eng Kéier.",
-       "api-error-stashfailed": "Interne Feeler: de Server konnt den temporäre Fichier net späicheren.",
        "api-error-publishfailed": "Interne Feeler: de Server konnt den temporäre Fichier net publizéieren.",
-       "api-error-stasherror": "Beim Eropluede vum Fichier ass e Feeler geschitt.",
-       "api-error-stashfilestorage": "Beim Späichere vum Fichier ass ee Feeler geschitt.",
-       "api-error-stashzerolength": "De Server konnt de Fichier net späicheren, well en eng Längt vun Null hat.",
-       "api-error-stashnotloggedin": "Dir musst ageloggt si fir Fichiere späicheren ze kënnen.",
-       "api-error-stashnosuchfilekey": "De Schlëssel vum Fichier op deen Dir am Späicher zréckgräife wëllt gëtt et net.",
-       "api-error-timeout": "De Server huet net bannen där Zäit geäntwert déi virgesinn ass.",
-       "api-error-unclassified": "En onbekannte Feeler ass geschitt",
-       "api-error-unknown-code": "Onbekannte Feeler: \"$1\"",
-       "api-error-unknown-error": "Interne Feeler: beim Versuch fir Äre Fichier eropzelueden ass eppes schif gaang",
+       "api-error-stashfailed": "Interne Feeler: de Server konnt den temporäre Fichier net späicheren.",
        "api-error-unknown-warning": "Onbekannte Warnung: \"$1\".",
        "api-error-unknownerror": "Onbekannte Feeler: \"$1\".",
-       "api-error-uploaddisabled": "D'Eroplueden ass op dëser Wiki ausgeschalt.",
-       "api-error-verification-error": "Dëse Fichier kéint korrupt sinn, oder en huet eng falsch Erweiderung.",
-       "api-error-was-deleted": "E Fichier mat dësem Numm gouf virdrun eropgelueden an duerno geläscht.",
        "duration-seconds": "$1 {{PLURAL:$1|Sekonn|Sekonnen}}",
        "duration-minutes": "$1 {{PLURAL:$1|Minutt|Minutten}}",
        "duration-hours": "$1 {{PLURAL:$1|Stonn|Stonnen}}",
index 3a8e61b..1d786c2 100644 (file)
@@ -6,38 +6,62 @@
                        "Malafaya",
                        "Reedy",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "Katxis",
+                       "Chabi"
                ]
        },
        "tog-underline": "Sulinia lias:",
        "tog-hideminor": "Asconda editas minor en cambias resente",
+       "tog-hidepatrolled": "Asconde editas patruliada de cambias resente",
+       "tog-newpageshidepatrolled": "Asconde pajes patruliada de lista de pajes nova",
+       "tog-hidecategorization": "Asconde categori de pajes",
        "tog-extendwatchlist": "Grandi la lista oservada per mostra tota cambias aplicable",
        "tog-usenewrc": "Aumenta cambias resente (JavaScript)",
        "tog-numberheadings": "Dona automatica numeros a titula",
        "tog-showtoolbar": "Mostra la bara de utiles per edita (JavaScript)",
        "tog-editondblclick": "Edita pajes a du clicas (JavaScript)",
        "tog-editsectiononrightclick": "Engrana la edita de sesion par clica a la destra a titulos de sesion (JavaScript)",
-       "tog-watchcreations": "Junta la pajes ce me ia creada a me lista de pajes oservada",
-       "tog-watchdefault": "Junta pajes ce me ia edita a me lista de pajes oservada",
-       "tog-watchmoves": "Junta pajes ce me ia moveda a me lista de pajes oservada",
-       "tog-watchdeletion": "Junta pajes ce me ia sutrae a me lista de pajes oservada",
+       "tog-watchcreations": "Junta la pajes cual me ia crea e fixes cual me ia carga  a mea lista de pajes oservada",
+       "tog-watchdefault": "Junta pajes e imajes cual me ia edita a mea lista de pajes oservada",
+       "tog-watchmoves": "Junta pajes e fixes cual me ia moveda a mea lista de pajes oservada",
+       "tog-watchdeletion": "Junta pajes cual me ia sutrae a mea lista de pajes oservada",
+       "tog-watchuploads": "Ajunta fixes nova cual me ia carga a mea lista de pajes oservada",
+       "tog-watchrollback": "Ajunta pajes a cual me ia reversa a mea lista de pajes oservada",
        "tog-minordefault": "Marca costumal tota editas como minor",
        "tog-previewontop": "Mostra la previde ante la caxa de editas",
        "tog-previewonfirst": "Mostra la previde a la edita prima",
-       "tog-enotifwatchlistpages": "Envia un eposta a me cuando un paje ce me oserva es cambiada",
+       "tog-enotifwatchlistpages": "Envia un eposta a me cuando un paje o fix cual me oserva es cambiada",
        "tog-enotifusertalkpages": "Envia me un eposta cuando me paje de discutes es cambiada",
-       "tog-enotifminoredits": "Ance envia un eposta a me con edita minor de pajes",
+       "tog-enotifminoredits": "Ance envia un eposta a me con editas minor de pajes e fixes",
        "tog-enotifrevealaddr": "Descovre la me adirije de eposta en postas de nota",
        "tog-shownumberswatching": "Mostra la numero de usores oservante",
-       "tog-fancysig": "Sinias simple (sin lia automatica)",
+       "tog-oldsig": "Tua suscrive presente",
+       "tog-fancysig": "Trata la suscrive como vicitesto (sin lia automatica)",
+       "tog-uselivepreview": "Usa un previde direta",
+       "tog-forceeditsummary": "Recorda me cuando entera un resoma vacua de edita",
        "tog-watchlisthideown": "Asconde me editas de la lista de pajes oservada",
        "tog-watchlisthidebots": "Asconde editas par bot de la lista de pajes oservada",
        "tog-watchlisthideminor": "Asconde editas minor de la lista de pajes oservada",
+       "tog-watchlisthideliu": "Asconde editas par usores identifiada de la lista de pajes oservada",
+       "tog-watchlistreloadautomatically": "Recarga automata la lista de pajes oservada cuando un filtre es cambiada (JavaScript nesesada)",
+       "tog-watchlisthideanons": "Asconde editas par usores anonim de la lista de pajes oservada",
+       "tog-watchlisthidepatrolled": "Asconde editas patruliada de la lista de pajes oservada",
+       "tog-watchlisthidecategorization": "Asconde la categori de pajes",
        "tog-ccmeonemails": "Envia copias de la epostas ce me envia a otras a me ance",
+       "tog-diffonly": "No mostra la conteni de paje su diffes",
        "tog-showhiddencats": "Mostra categorias ascondeda",
+       "tog-norollbackdiff": "No mostra diff pos un reversa",
+       "tog-useeditwarning": "Avisa me cuando me sorti un paje de edita con cambias nonsalvada",
+       "tog-prefershttps": "Sempre usa un lia secur cuando identifiada",
        "underline-always": "A tota tempo",
        "underline-never": "A no tempo",
-       "underline-default": "Surfador costumal",
+       "underline-default": "Inisial de pel o surfador",
+       "editfont-style": "Edita area de stilo de leteras",
+       "editfont-default": "Inisial de surfador",
+       "editfont-monospace": "Leteras monospasida",
+       "editfont-sansserif": "Leteras sin serifes",
+       "editfont-serif": "Leteras con serifes",
        "sunday": "soldi",
        "monday": "lundi",
        "tuesday": "martedi",
        "oct": "oto",
        "nov": "nov",
        "dec": "des",
+       "january-date": "$1 janero",
+       "february-date": "$1 febrero",
+       "march-date": "$1 marto",
+       "april-date": "$1 april",
+       "may-date": "$1 maio",
+       "june-date": "$1 junio",
+       "july-date": "$1 julio",
+       "august-date": "$1 agosto",
+       "september-date": "$1 setembre",
+       "october-date": "$1 otobre",
+       "november-date": "$1 novembre",
+       "december-date": "$1 desembre",
+       "period-am": "am",
+       "period-pm": "pm",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
        "category_header": "Articles en categoria \"$1\"",
        "subcategories": "Sucategorias",
        "category-empty": "''Aora, esta categoria no conteni pajes o medio.''",
        "hidden-categories": "{{PLURAL:$1|Categoria|Categorias}} ascondeda",
        "hidden-category-category": "Categorias ascondeda",
+       "category-subcat-count": "{{PLURAL:$2|Esta categoria ave sola la sucategoria seguente.|Esta categoria ave la {{PLURAL:$1|sucategoria|$1 sucategorias}} seguente, entre $2 tota.}}",
+       "category-subcat-count-limited": "Esta categoria ave la {{PLURAL:$1|sucategoria|$1sucategorias}} seguente.",
+       "category-article-count": "{{PLURAL:$2|Esta categoria conteni sola la paje seguente.|La {{PLURAL:$1|paje es|$1 pajes es}} seguente en esta categoria, estra $2 tota.}}",
+       "category-article-count-limited": "La {{PLURAL:$1|paje|$1pajes}} seguente es en la categoria presente.",
+       "category-file-count": "{{PLURAL:$2|Esta categoria conteni sola la fix seguente.|La {{PLURAL:$1|fix|$1 fixes}} seguente es en esta categoria, estra $2 tota.}}",
+       "category-file-count-limited": "The {{PLURAL:$1|fix|$1 fixes}} seguente es en la categoria presente.",
        "listingcontinuesabbrev": "cont.",
+       "index-category": "Pajes indiseda",
+       "noindex-category": "Pajes nonindiseda",
+       "broken-file-category": "Pajes con lias rompeda de fixes",
        "about": "Supra",
        "article": "Paje de contenis",
        "newwindow": "(va abri en fenetra nova)",
        "cancel": "Cansela",
        "moredotdotdot": "Plu...",
-       "mypage": "Me paje",
+       "morenotlisted": "Esta lista es posible noncompleta.",
+       "mypage": "Paje",
        "mytalk": "Discutes",
-       "anontalk": "Discutes per esta IP",
+       "anontalk": "Discute",
        "navigation": "Naviga",
        "and": "&#32;e",
        "qbfind": "Trova",
        "qbedit": "Edita",
        "qbpageoptions": "Esta paje",
        "qbmyoptions": "Me pajes",
+       "faq": "Demandas comun",
+       "faqpage": "Project: Demandas comun",
+       "actions": "Atas",
+       "namespaces": "Locas de nom",
+       "variants": "Varias",
+       "navigation-heading": "Menu per naviga",
        "errorpagetitle": "Era",
        "returnto": "Restora a $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Disionario",
        "search": "Xerca",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Titulos cual va es iniorada par xerca.\n# Cambias a esta va aveni pronto cuando la paje con la titulo es indiseda.\n# Tu pote forsa la reindise de un paje par fa un edita vacua.\n# La sintax es como la seguente:\n#   * Tota de la sinia \"#\" a la fini de la linia es un comenta.\n#   * Tota linia nonvacua es la titulo esata per iniora, incluinte caso etc.\nReferes\nLias esterna\nVide ance\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "Xerca",
        "go": "Vade",
        "searcharticle": "Vade",
        "history": "Istoria de paje",
        "history_short": "Istoria",
+       "history_small": "istoria",
        "updatedmarker": "renovida de me visita presedente",
        "printableversion": "Varia primable",
        "permalink": "Lia permanente",
        "print": "Primi",
+       "view": "Vide",
+       "view-foreign": "Vide a $1",
        "edit": "Cambia",
+       "edit-local": "Edita descrive local",
        "create": "Crea",
+       "create-local": "Ajunta descrive local",
        "editthispage": "Cambia esta paje",
        "create-this-page": "Crea esta paje",
        "delete": "Sutrae",
        "deletethispage": "Sutrae esta paje",
+       "undeletethispage": "Desutrae esta paje",
        "undelete_short": "Desutrae {{PLURAL:$1|edita|editas}}",
+       "viewdeleted_short": "Vide {{PLURAL:$1|un edit desutraeda|$1 editas desutraeda}}",
        "protect": "Proteje",
        "protect_change": "cambia",
        "protectthispage": "Proteje esta paje",
-       "unprotect": "desproteje",
-       "unprotectthispage": "Desproteje esta paje",
+       "unprotect": "Cambia la proteje",
+       "unprotectthispage": "Cambia la proteje de esta paje",
        "newpage": "Paje nova",
        "talkpage": "Discute esta paje",
        "talkpagelinktext": "Parla",
        "talk": "Discutes",
        "views": "Vides",
        "toolbox": "Utiles",
+       "tool-link-userrights": "Cambia grupos de {{GENDER:$1|usor}}",
+       "tool-link-userrights-readonly": "Vide grupos de {{GENDER:$1|usor}}",
+       "tool-link-emailuser": "E-posta esta {{GENDER:$1|usor}}",
        "userpage": "Vide paje de usor",
        "projectpage": "Vide la paje de projeta",
        "imagepage": "Vide paje de fix",
        "otherlanguages": "En otra linguas",
        "redirectedfrom": "(Redirijeda de $1)",
        "redirectpagesub": "Redireta la paje",
+       "redirectto": "Redirije a:",
+       "lastmodifiedat": "Esta paje ia es cambiada a $1, a $2",
        "viewcount": "Esta paje es asesada a $1 {{PLURAL:$1|ves|veses}}.",
        "protectedpage": "Paje protejeda",
        "jumpto": "Salta a:",
        "jumptonavigation": "naviga",
        "jumptosearch": "xerca",
+       "view-pool-error": "Pardona, la servadores es tro cargada a esta ora.\nTro multe usores es atenta vide esta paje.\nPer favore espeta ante cuanto tu atenta vide esta paje denova.\n\n$1",
+       "generic-pool-error": "Pardona, la servadores es tro cargada a esta ora.\nTro multe usores es atentante vide esta recurso.\nPer favore espeta ante cuando tu atenta vide esta recurso denova.",
        "aboutsite": "Supra {{SITENAME}}",
        "aboutpage": "Project:Supra",
        "copyrightpage": "{{ns:project}}:Diretos de autor",
        "disclaimers": "Negas de respondablia",
        "disclaimerpage": "Project:Nega jeneral de respondablia",
        "edithelp": "Aida con edita",
+       "helppage-top-gethelp": "Aida",
        "mainpage": "Paje Prima",
        "mainpage-description": "Paje Prima",
        "policy-url": "Project:Politica",
        "toc": "Contenida",
        "showtoc": "mostra",
        "hidetoc": "asconde",
+       "collapsible-collapse": "Colasa",
+       "collapsible-expand": "Estende",
+       "confirmable-confirm": "Esce {{GENDER:$1|tu}} es serta?",
+       "confirmable-yes": "Si",
+       "confirmable-no": "No",
        "viewdeleted": "Vide $1?",
        "feedlinks": "Flue:",
        "site-rss-feed": "$1 RSS Flue",
        "site-atom-feed": "$1 Atom Flue",
        "page-rss-feed": "\"$1\" RSS Flue",
+       "page-atom-feed": "\"$1\" Enflue de atom",
        "red-link-title": "$1 (paje no esiste)",
        "nstab-main": "Paje",
        "nstab-user": "Paje de usor",
        "nstab-template": "Model",
        "nstab-help": "Paje de aida",
        "nstab-category": "Categoria",
+       "mainpage-nstab": "Paje Prima",
        "error": "Era",
        "databaseerror": "Era de base de datos",
        "missingarticle-diff": "(Difere: $1, $2)",
        "badtitletext": "La titulo de la paje tu ia desira ia es nonlegal, es vacua, o es un titulo intervici o interlingual no liada coreta. Es posable ce es un o plu simboles ce no pote es usada en titulos.",
        "viewsource": "Vide la orijin",
        "viewsourcetext": "Tu pote vide e copia la orijin de esta paje:",
+       "mycustomcssprotected": "Tu no ave permete per edita esta paje CSS.",
+       "mycustomjsprotected": "Tu no ave permete per edita esta paje JavaScript.",
+       "myprivateinfoprotected": "Tu no ave permete per edita tua informa privata.",
+       "mypreferencesprotected": "Tu no ave permete per edita tua preferes.",
+       "ns-specialprotected": "La pajes spesial no pote es editada.",
+       "welcomeuser": "Bonveni, $1!",
        "yourname": "Nom de usor:",
+       "userlogin-yourname": "Nom de usor",
+       "userlogin-yourname-ph": "Entra tua nom de usor",
        "yourpassword": "Sinia de entra:",
+       "userlogin-yourpassword": "Clave",
+       "userlogin-yourpassword-ph": "Entra tua sinia secreta",
+       "createacct-yourpassword-ph": "Entra un sinia secreta",
        "yourpasswordagain": "Retape la sinia:",
+       "createacct-yourpasswordagain": "Confirma la sinia secreta",
+       "createacct-yourpasswordagain-ph": "Entra un sinia secreta denova",
+       "userlogin-remembermypassword": "Reteni me como identifiada",
        "yourdomainname": "Tu domina:",
        "login": "Identifia",
        "nav-login-createaccount": "Sinia per entra",
        "userlogin": "Sinia per entra",
        "logout": "Retira",
        "userlogout": "Sinia per retira",
+       "userlogin-noaccount": "Tu no ave un conta?",
+       "userlogin-joinproject": "Crea un conta con {{SITENAME}}",
        "nologin": "Tu no ave un conta? '''$1'''.",
        "nologinlink": "Crea  un conta",
        "createaccount": "Crea un conta",
        "gotaccount": "Tu ave ja un conta? '''$1'''.",
        "gotaccountlink": "Sinia per entra",
+       "userlogin-resetpassword-link": "Tu ia oblida tua sinia secreta?",
+       "userlogin-helplink2": "Aida me per identifia me",
+       "createacct-emailrequired": "Adirije de e-posta",
+       "createacct-emailoptional": "Adirije de e-posta (elejable)",
+       "createacct-email-ph": "Entra tua adirije de e-posta",
+       "createacct-another-email-ph": "Entra tua adirije de e-posta",
+       "createaccountreason": "Razona:",
+       "createacct-reason": "Razona:",
+       "createacct-submit": "Crea tua conta",
+       "createacct-another-submit": "Crea un conta",
+       "createacct-benefit-heading": "{{SITENAME}} es fabricada par persones como tu.",
+       "createacct-benefit-body1": "{{PLURAL:$1|edita|editas}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|paje|pajes}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|contribuor|contribuores}}",
        "loginerror": "Era de entra",
-       "loginsuccesstitle": "Entra susedente",
+       "loginsuccesstitle": "Tu ia entra",
        "loginsuccess": "'''Tu ia entrada aora a {{SITENAME}} como \"$1\".'''",
-       "nosuchuser": "Es no usor con la nom \"$1\".\nEsamina la spele, o [[Special:CreateAccount|crea un conta nova]].",
+       "nosuchuser": "On no ave un usor con la nom \"$1\".\nOn distingui entre leteras major e minor per nomes de usores.\nEsamina la spele, o [[Special:CreateAccount|crea un conta nova]].",
        "nosuchusershort": "Es no usor con esta nom \"$1\". Esamina la spele.",
        "nouserspecified": "Tu debe indica un nom de usor.",
        "wrongpassword": "La sinia de entra no es coreta. Per favore, atenta ancora.",
        "wrongpasswordempty": "La sinia de entra es vacua. Per favore, atenta ancora.",
-       "passwordtooshort": "Tu sinia secreta no es legal o es tro corta.\nEl debe ave a min {{PLURAL:$1|1 simbol|$1 simboles}} e debe difere de tu nom de usor.",
-       "mailmypassword": "Envia la sinia secreta nova par eposta",
+       "passwordtooshort": "Sinias secreta debe ave minima {{PLURAL:$1|1 simbol|$1 simboles}}.",
+       "passwordtoolong": "Sinias secreta no pote ave plu ca {{PLURAL:$1|1 simbol|$1 simboles}}.",
+       "passwordtoopopular": "Sinias secreta comun debe no es usada. Per favore, eleje un sinia plu unica.",
+       "mailmypassword": "Cambia tua sinia secreta",
        "passwordremindertitle": "Sinia secreta temporer nova per {{SITENAME}}",
-       "passwordremindertext": "Algun (tu, probable, de adirije IP $1)\nia demanda ce nos envia a tu un sinia secreta nova per {{SITENAME}} ($4).\nLa sinia secreta per usor \"$2\" es aora \"$3\".\nTu debe sinia per entra e cambia tu sinia secreta aora.\n\nSi algun otra ce tu ia envia esta demanda a nos, o si tu ia recorda tu sinia secreta e no vole cambia el aora, tu pote iniora esta mesaje e continua usa tu sinia secreta vea.",
+       "passwordremindertext": "Algun (tu, probable, de adirije IP $1)\nia demanda un sinia secreta nova per {{SITENAME}} ($4).\nLa sinia secreta tempora per usor \"$2\" es aora \"$3\". Si esta ia es tua intende, tu debe identifia tu denova per entra e eleje tua sinia nova aora.\nTua sinia tempora va desvalidi en {{PLURAL:$5|un dia|$5 dias}}.\n\nSi algun otra ca tu ia envia esta demanda a nos, o si tu ia recorda tua sinia secreta e no vole cambia lo aora, tu pote iniora esta mesaje e continua usa tua sinia secreta vea.",
        "noemail": "No es un adirije de eposta per usor \"$1\".",
        "passwordsent": "Un sinia secreta ia es enviada a la adirije de eposta per \"$1\".\nPer favore, sinia per entra ancora pos tu ia reseta el.",
-       "eauthentsent": "Un eposta de serti ia es enviada a la adirije de eposta proposada.\nAnte alga otra eposta es enviada a la conta, tu va nesesa segue la instruis en la eposta, per serti ce la conta es vera de tu.",
+       "eauthentsent": "Un eposta de serti ia es enviada a la adirije de eposta spesifada.\nAnte cualce otra epostas es enviada a tua conta, tu va nesesa segue la instruis en la eposta, per serti ce la conta es vera la tua.",
        "emailconfirmlink": "Aproba tu adirije de eposta",
+       "accountcreated": "Conta es creada",
        "loginlanguagelabel": "Lingua: $1",
+       "pt-login": "Identifia se",
+       "pt-login-button": "Identifia tua",
+       "pt-createaccount": "Crea un conta",
+       "pt-userlogout": "Desidentifia",
        "oldpassword": "Sinia secreta vea:",
        "newpassword": "Sinia secreta nova:",
        "retypenew": "Re-entra tu sinia secreta nova:",
        "resetpass-submit-loggedin": "Cambia la sinia secreta",
        "resetpass-temp-password": "Sinia secreta tempora:",
+       "passwordreset": "Reinisia sinia secreta",
+       "passwordreset-username": "Nom de usor:",
+       "passwordreset-domain": "Domina:",
+       "passwordreset-email": "Adirije de e-posta",
+       "passwordreset-invalidemail": "Adirije de e-posta no es valida",
+       "changeemail-submit": "Cambia e-posta",
        "bold_sample": "Testo en leteras forte",
        "bold_tip": "Testo en leteras forte",
        "italic_sample": "Testo en leteras italica",
        "sig_tip": "Tu sinia con la primi de la ora",
        "hr_tip": "Linia orizonal (usa nonfrecuente)",
        "summary": "Soma:",
-       "subject": "Sujeto/titulo:",
+       "subject": "Sujeto:",
        "minoredit": "Esta es un cambia minor",
        "watchthis": "Oserva esta paje",
        "savearticle": "Fisa paje",
+       "publishpage": "Publici paje",
+       "publishchanges": "Publica la cambias",
        "preview": "Previde",
        "showpreview": "Mostra previde",
        "showdiff": "Mostra diferes",
-       "anoneditwarning": "'''Avisa:''' Tu no ia sinia per entra.\nTu adirije de IP va es memorada en la istoria de revisas de esta paje.",
+       "anoneditwarning": "'''Avisa:''' Tu no ia identifia se.\nTu adirije de IP va es memorada en la istoria de revisas de esta paje. Si tu <strong>[$1 identifia se]</strong> o <strong>[$2 crea un conta]</strong>, tua editas va es atribuida a tua nom de usor, con otra benefias.",
        "summary-preview": "Previde soma:",
        "blockedtitle": "Usor es impedida",
        "blockedtext": "'''Tu nom de usor o adirije de IP ia es impedida.'''\n\nLa impedi ia es fada par $1.\nLa razon donada es ''$2''.\n\n* Comensa de impedi: $8\n* Fini de impedi: $6\n* Ci algun intende impedi: $7\n\nTu pote contata $1 o un otra [[{{MediaWiki:Grouppage-sysop}}|dirijor]] per discute esta impedi.\nTu no pote usa la 'envia un eposta a esta usor' sin un adirije de eposta legal es indicada en tu\n[[Special:Preferences|preferis de conta]] e tu no es impedida de usa el.\nTu adirije de IP es aora $3, e la identia de la impedi es #$5.\nPer favore inclui tota esta detales en tu demandas.",
+       "loginreqtitle": "Entra de identia nesesada",
+       "loginreqlink": "Identifia se",
        "newarticle": "(Nova)",
        "newarticletext": "Tu ia segue un lia a un paje ce no esista ja.\nPer crea la paje, comensa scrive en la caxa a su\n(vide la [$1 paje de aida] per plu).\nSi tu es asi par era, clica a la boton '''retro''' de tu surfador.",
-       "noarticletext": "Es aora no testo a esta paje.\nTu pote [[Special:Search/{{PAGENAME}}|xerca per la titulo de esta paje]] en otra pajes,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} xerca la arcivos relatada],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} edita esta paje]</span>.",
+       "noarticletext": "On ave aora no testo a esta paje.\nTu pote [[Special:Search/{{PAGENAME}}|xerca per la titulo de esta paje]] en otra pajes,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} xerca la arcivos relatada],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} edita esta paje]</span>.",
+       "noarticletext-nopermission": "On ave presente no testo en esta paje.\nTu pote [[Special:Search/{{PAGENAME}}|xerca per esta titulo de paje]] en otra pajes, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} xerca arcivos relatada]</span>, ma tu no es permeteda per crea esta paje.",
        "previewnote": "'''Esta sola un previde; cambias no es fisada ja'''",
        "editing": "En la prosede de edita $1",
+       "creating": "Creante $1",
        "editingsection": "Edita $1 (sesion)",
        "editingcomment": "Edita $1 (sesion nova)",
        "yourdiff": "Diferes",
        "templatesusedpreview": "{{PLURAL:$1|Modele|Modeles}} usada en esta previde:",
        "template-protected": "(protejeda)",
        "template-semiprotected": "(proteje en parte)",
+       "hiddencategories": "Esta paje es un membro de {{PLURAL:$1|1 categoria ascondeda|$1 categorias ascondeda}}:",
        "nocreatetext": "{{SITENAME}} ave un restringe a la capas per crea pajes nova.\nTu pote vade a retro e edita un paje esistente, o  [[Special:UserLogin|sinia per entra o crea un conta]].",
-       "recreate-moveddeleted-warn": "'''Avisa: Tu es recrea un paje ce ia es sutraed en la pasada.'''\nTu debe pensa ce es bon continua edita esta paje.\nLa arcivo de sutraes per esta paje es asi per conveni:",
+       "permissionserrorstext-withaction": "Tua no es permeteda per $2, per la {{PLURAL:$1|razona|razonas}} seguente:",
+       "recreate-moveddeleted-warn": "<strong>Avisa: Tu es recreante un paje cual ia es sutraeda a ante.</strong>\nTu debe pensa si la continua de edita de esta paje conveni.\nLa arcivo de sutraes e moves per esta paje es asi per tua conveni:",
+       "moveddeleted-notice": "Esta paje ia es sutraeda.\nLa arcivo de sutraes e moves per la paje es furnida a su per refere.",
        "viewpagelogs": "Vide la arcivo de esta paje",
        "currentrev": "Cambia presente",
        "currentrev-asof": "Cambia presente a departi di $1",
        "page_last": "final",
        "histlegend": "Diferente eleje: Marca la caxas de radio de esta varias per compare e clica entra o la boton a la funda.<br />\n(presente) = difere de la varia presente,\n(presedente) = difere con varia presedente, M = edita minor.",
        "history-fieldset-title": "Surfa istoria",
-       "histfirst": "Prima",
-       "histlast": "Ultima",
+       "histfirst": "La plu vea",
+       "histlast": "La plu nova",
        "historysize": "({{PLURAL:$1|1 otuple|$1 otuples}})",
        "historyempty": "(vacua)",
        "history-feed-title": "Istoria de revises",
        "history-feed-item-nocomment": "$1 a $2",
        "rev-delundel": "mostra/asconde",
+       "rev-showdeleted": "mostra",
+       "revdelete-show-file-submit": "Si",
+       "revdelete-radio-set": "Ascondeda",
+       "revdelete-radio-unset": "Vidable",
+       "pagehist": "Istoria de paje",
+       "deletedhist": "Istoria sutraeda",
        "history-title": "Istoria de cambias de \"$1\"",
+       "difference-title": "Difere entre revisas de \"$1\"",
        "lineno": "Linia $1:",
        "compareselectedversions": "Compare varias elejeda",
        "editundo": "desfa",
+       "diff-multi-sameuser": "({{PLURAL:$1|Un revisa media|$1 revisas media}} par la mesma usor no mostrada)",
        "searchresults": "Resultas de xerca",
+       "searchresults-title": "Xerca la resultas per \"$1\"",
        "prevn": "{{PLURAL:$1|$1}} presedente",
        "nextn": "{{PLURAL:$1|$1}} seguente",
+       "nextn-title": "Seguente $1 {{PLURAL:$1|resulta|resultas}}",
+       "shown-title": "Mostra $1 {{PLURAL:$1|resulta|resultas}} per paje",
        "viewprevnext": "Vide ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>Crea la paje \"[[:$1]]\" a esta wiki!</strong> {{PLURAL:$2|0=|Vide ance la paje trovada con tua xerca.|Vide ance la resultas trovada par la xerca.}}",
+       "searchprofile-articles": "Pajes de contenis",
+       "searchprofile-images": "Multimedios",
+       "searchprofile-everything": "Tota",
+       "searchprofile-advanced": "Avansada",
+       "searchprofile-articles-tooltip": "Xerca en $1",
+       "searchprofile-images-tooltip": "Xerca per fixes",
+       "searchprofile-everything-tooltip": "Xerca tota contenidas (incluinte pajes de conversa)",
+       "searchprofile-advanced-tooltip": "Xerca en nomspasios unica",
        "search-result-size": "$1 ({{PLURAL:$2|1 parola|$2 parolas}})",
+       "search-redirect": "(redirije de $1)",
        "search-section": "(sesion $1)",
+       "search-suggest": "Tu ia intende: $1",
        "search-interwiki-default": "Resultas de $1:",
        "search-interwiki-more": "(plu)",
        "searchall": "tota",
+       "search-showingresults": "{{PLURAL:$4|Resulta <strong>$1</strong> de <strong>$3</strong>|Resultas <strong>$1 - $2</strong> de <strong>$3</strong>}}",
+       "search-nonefound": "On ave no resultas cual conforma con la demanda.",
+       "powersearch-toggleall": "Tota",
+       "powersearch-togglenone": "Zero",
        "preferences": "Preferis",
        "mypreferences": "Preferis",
        "skin-preview": "Previde",
        "saveprefs": "Fisa",
-       "rows": "Linias:",
-       "columns": "Colonas:",
        "searchresultshead": "Xerca",
        "savedprefs": "Tu preferis es fisada",
        "timezoneregion-africa": "Africa",
        "timezoneregion-pacific": "Mar Pasifica",
        "prefs-files": "Fixes",
        "youremail": "Eposta:",
-       "username": "Nom de usor:",
-       "prefs-memberingroups": "Membro de la {{PLURAL:$1|grupo|grupos}}:",
+       "username": "{{GENDER:$1|Nom de usor}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Membro}} de {{PLURAL:$1|grupo|grupos}}:",
        "yourrealname": "Nom vera:",
        "yourlanguage": "Lingua:",
        "yournick": "Suscrive:",
-       "yourgender": "Seso:",
-       "gender-male": "Mas",
-       "gender-female": "Fema",
+       "yourgender": "Como tu prefere ce tu es descriveda?",
+       "gender-male": "El edita pajes de wiki",
+       "gender-female": "El edita pajes de wiki",
        "email": "Eposta",
-       "prefs-help-realname": "Tu nom vera no es obligada, ma si tu vole dona tu nom vera, el va es usada per onora tu per tu labora.",
+       "prefs-help-realname": "Tu nom vera no es obligada, ma si tu vole dona tu nom vera, el va es usada per onora tu per tu labora.\n\nTu no debe entra tua nom vera. Ma si tu entra tua noma vera, lo pote es usada per atribui tua laboras a tu.",
        "prefs-signature": "Suscrive",
        "userrights": "Dirije de la diretos de usores",
        "saveusergroups": "Fisa la grupo de usores",
        "group-user": "Usores",
        "group-sysop": "Dirijores",
        "group-all": "(tota)",
-       "group-user-member": "Usor",
+       "group-user-member": "{{GENDER:$1|usor}}",
        "grouppage-user": "{{ns:project}}:Usores",
        "grouppage-sysop": "{{ns:project}}:Dirijores",
+       "right-writeapi": "Usa de la API de scrive",
+       "newuserlogpage": "Arcivo de creas de usor",
        "rightslog": "Catalogo de diretos de usor",
        "action-edit": "edita esta paje",
        "nchanges": "$1 {{PLURAL:$1|cambia|cambias}}",
+       "enhancedrc-history": "istoria",
        "recentchanges": "Cambias resente",
+       "recentchanges-legend": "Elejes  per cambias resente",
        "recentchanges-summary": "Asi la lista de cambias resente en la vici.",
        "recentchanges-feed-description": "Seque la cambias plu resente a la vici en esta flue.",
+       "recentchanges-label-newpage": "Esta edita ia crea un paje nova",
+       "recentchanges-label-minor": "Esta es un edita minor",
+       "recentchanges-label-bot": "Esta edita ia es fada par un bot",
+       "recentchanges-label-unpatrolled": "Esta edita no ia es ja patruliada",
+       "recentchanges-label-plusminus": "La grandia de esta paje es cambiada par esta cuantia de baites",
+       "recentchanges-legend-heading": "<strong>Titulo:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide ance [[Special:NewPages|la lista de pajes nova]])",
        "rcnotefrom": "A su es la cambias de '''$2''' (asta '''$1''' es mostrada).",
        "rclistfrom": "Mostra cambias nova, comensante de $3 $2",
        "rcshowhideminor": "$1 editas minor",
+       "rcshowhideminor-show": "Mostra",
+       "rcshowhideminor-hide": "Asconde",
        "rcshowhidebots": "$1 botes",
-       "rcshowhideliu": "$1 usores ativa aora",
+       "rcshowhidebots-show": "Mostra",
+       "rcshowhidebots-hide": "Asconde",
+       "rcshowhideliu": "$1 usores identifiada aora",
+       "rcshowhideliu-hide": "Asconde",
        "rcshowhideanons": "$1 usores sin nom",
+       "rcshowhideanons-show": "Mostra",
+       "rcshowhideanons-hide": "Asconde",
        "rcshowhidepatr": "$1 editas patroliada",
        "rcshowhidemine": "$1 me editas",
+       "rcshowhidemine-show": "Mostra",
+       "rcshowhidemine-hide": "Asconde",
        "rclinks": "Mostra la $1 cambias presedente en la $2 dias presedente<br />$3",
        "diff": "dife",
        "hist": "isto",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
-       "rc_categories_any": "Cualce",
+       "rc_categories_any": "Cualce de la elejeda",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bait|baites}}  pos cambia",
        "rc-enhanced-expand": "Mostra detalias",
        "rc-enhanced-hide": "Asconde detalias",
        "recentchangeslinked": "Cambias relateda",
        "recentchangeslinked-title": "Cambias relatada a \"$1\"",
        "recentchangeslinked-summary": "Esta lista conteni la cambias plu resente de la pajes liada a otra (o de la membros de un categoria).\nPajes a [[Special:Watchlist|tu lista de pajes oservada]] es en leteras '''forte'''.",
        "recentchangeslinked-page": "Nom de la paje:",
+       "recentchangeslinked-to": "En loca, mostra cambia a pajes liada a la paje presentada",
        "upload": "Envia fixes",
        "uploadbtn": "Envia la fix",
        "uploadlogpage": "Envia arcivo",
+       "filedesc": "Resoma",
        "savefile": "Fisa fix",
        "upload-file-error": "Era interna",
+       "license-header": "Lisensa",
        "imgfile": "fix",
        "listfiles": "Lista de imajes",
        "listfiles_name": "Nom",
        "filehist-help": "Clica a un data/tempo per vide la fix como el ia aperi alora.",
        "filehist-current": "aora",
        "filehist-datetime": "Date/Tempo",
+       "filehist-thumb": "Imajeta",
+       "filehist-thumbtext": "Imajeta per varia pos $1",
        "filehist-user": "Usor",
        "filehist-dimensions": "Mesuras",
        "filehist-filesize": "Grandia de fix",
        "linkstoimage": "Esta {{PLURAL:$1|paje|pajes}} lia a esta fix:",
        "nolinkstoimage": "Es no pajes ce lia a esta fix.",
        "sharedupload": "Esta fix es parte de $1 e pote es usada par otra projetas.",
+       "sharedupload-desc-here": "Esta fix es de $1 e pote es usada par otra projetas.\nLa descrive su sua [$2 paje de descrive de fix] ala es mostra a su.",
        "uploadnewversion-linktext": "Envia un varia nova de esta fix",
+       "upload-disallowed-here": "Tu no pote suprascrive esta arcivo.",
        "mimesearch": "Xerca de MIME",
        "listredirects": "Lista redirijes",
        "unusedtemplates": "modeles no usada",
        "wantedpages": "Pajes desirada",
        "mostlinked": "Pajes la plu liada",
        "mostlinkedcategories": "Categorias a ce es la plu lias",
-       "mostlinkedtemplates": "Modeles a ce es la plu lias",
+       "mostlinkedtemplates": "Pajes la plu liada",
        "mostcategories": "Pajes con la plu categorias",
        "mostimages": "Fixes a ce es la plu lias",
        "mostrevisions": "Pajes con la plu revisas",
        "longpages": "Pajes longa",
        "deadendpages": "Pajes sin sorti",
        "protectedpages": "Pajes protejeda",
+       "protectedpages-page": "Paje",
+       "protectedpages-expiry": "Desvalidi",
        "listusers": "Lista de usores",
        "newpages": "Pajes nova",
        "ancientpages": "Pajes la plu vea",
        "pager-newer-n": "{{PLURAL:$1|1 plu resente|$1 plu resentes}}",
        "pager-older-n": "{{PLURAL:$1|1 plu vea|$1 plu veas}}",
        "booksources": "Orijines de libros",
+       "booksources-search-legend": "Xerca per fontes de libros",
+       "booksources-search": "Xerca",
        "specialloguserlabel": "Usor:",
        "speciallogtitlelabel": "Titulo:",
        "log": "Lista de atas",
        "listgrouprights-group": "Grupo",
        "listgrouprights-members": "(lista de membros)",
        "emailuser": "Envia un eposta a esta usor",
-       "emailfrom": "De",
-       "emailto": "Per",
-       "watchlist": "Pajes oservada",
+       "emailfrom": "De:",
+       "emailto": "A:",
+       "emailsubject": "Sujeto:",
+       "emailmessage": "Mesaje:",
+       "emailsend": "Envia",
+       "emailsent": "E-posta ia es enviada",
+       "watchlist": "Lista de pajes oservada",
        "mywatchlist": "Lista de pajes oservada",
+       "watchlistfor2": "Per $1 $2",
        "nowatchlist": "Tu ave no cosas en tu lista oservada",
        "addedwatchtext": "La paje \"[[:$1]]\" ia es juntada a tu [[Special:Watchlist|lista de pajes oservada]].\nCambias future a esta paje e se paje de discutes va es listada ala, e la paje va apera en leteras '''forte''' en la [[Special:RecentChanges|lista de cambias resente]] per es plu fasil oservada.\n\nSi tu vole sutrae la paje de tu lista de pajes oservada en la futur, clica a \"no oserva\" en la bara a la lado.",
        "removedwatchtext": "La paje \"[[:$1]]\" ia es sutraeda de [[Special:Watchlist|tu lista de pajes oservada]].",
        "deleteotherreason": "Otra/plu razona:",
        "deletereasonotherlist": "Otra razona",
        "rollbacklink": "retro",
+       "rollbacklinkcount": "reversa $1 {{PLURAL:$1|edita|editas}}",
        "protectlogpage": "Catalogo de protejes",
        "protectedarticle": "\"[[$1]]\" protejeda",
        "unprotectedarticle": "''[[$1]]'' desprotejeda",
        "undelete-search-submit": "Xerca",
        "namespace": "Loca de nom:",
        "invert": "Reversa la eleje",
+       "tooltip-invert": "Marca esta caxa per asconde cambias a pajes en la nomspasio elejeda (e la nomspasio asosiada si marcada)",
+       "namespace_association": "Nomspasio asosiada",
+       "tooltip-namespace_association": "Marca esta caxa per inclui ance la nomspasio de discute o sujeto asosiada con la nomspasio elejeda",
        "blanknamespace": "(Prima)",
-       "contributions": "Contribuis de usor",
-       "mycontris": "Me contribuis",
+       "contributions": "Contribuis de {{GENDER:$1|usor}}",
+       "mycontris": "Mea contribuis",
+       "anoncontribs": "Contribuis",
        "contribsub2": "Per $1 ($2)",
        "uctop": "(culmine)",
        "month": "De mensa (e plu vea):",
        "nolinkshere": "No pajes lia a '''[[:$1]]'''.",
        "isredirect": "redirije paje",
        "istemplate": "inclui",
-       "isimage": "lia de imaje",
+       "isimage": "lia de fix",
        "whatlinkshere-prev": "{{PLURAL:$1|presesdente|$1 presedente}}",
        "whatlinkshere-next": "{{PLURAL:$1|seguente|$1 seguente}}",
        "whatlinkshere-links": "← lias",
        "whatlinkshere-hideredirs": "$1 redirijes",
+       "whatlinkshere-hidetrans": "$1 transcluis",
        "whatlinkshere-hidelinks": "$1 lias",
        "whatlinkshere-filters": "Filtros",
        "blockip": "Impedi usor",
        "move-page-legend": "Move paje",
        "movepagetext": "Usa la forma a su va cambia la nom de un paje, e va move tota se istoria a la nom nova.\nLa titulo vea va deveni un paje de redirije a la titulo nova.\nLias a la titulo de la paje vea no va es cambiada;\nTu debe vide serta ce es redirijes duple o rompeda.\nTu es respondable per es serta ce la lias va continua vade a la locas intendeda.\n\nNota ce la paje '''no''' va es moveda si es ja un paje a la titulo nova, sin el es vacua o un redirije e no ave un istoria de editas presedente.\nEsta sinifia ce tu pote cambia la nom de un paje a la loca presedente si tu era, e tu no pote scrive supra un paje ce esiste ja.\n\n'''AVISA!'''\nEsta pote es un cambia dramos e nonespetada per un paje poplal;\nper favore, es serta ce tu comprende la resulta de esta ata ante tu continua.",
        "movepagetalktext": "La paje de discuta de esta paje va es moveda automatica con el '''eseta si:'''\n*Un paje de discuta ce no es vacua esiste ja su la nom nova, o\n*Tu cambia la indica en la caxa su.\n\nEn esta casos, tu va nesesa move o fusa la paje per mano, si desirada.",
-       "newtitle": "A titulo nova:",
+       "newtitle": "Titulo nova:",
        "move-watch": "Oserva esta paje",
        "movepagebtn": "Move paje",
        "pagemovedsub": "La move ia susede",
        "thumbnail_error": "Era en crea la imajeta: $1",
        "import": "Emporta pajes",
        "importlogpage": "Importa arcivo",
-       "tooltip-pt-userpage": "Tu paje de usor",
-       "tooltip-pt-mytalk": "Tu paje de discutes",
-       "tooltip-pt-preferences": "Me preferis",
+       "tooltip-pt-userpage": "{{GENDER:|Tua}} page de usor",
+       "tooltip-pt-mytalk": "{{GENDER:|Tua}} paje de discutes",
+       "tooltip-pt-preferences": "{{GENDER:|Tua}} preferes",
        "tooltip-pt-watchlist": "La lista de pajes ce tu oserva per cambias",
-       "tooltip-pt-mycontris": "Lista de tu contribuis",
+       "tooltip-pt-mycontris": "Lista de tua contribuis",
        "tooltip-pt-login": "Nos preferi si tu sinia per entra, ma tu es no obligada.",
        "tooltip-pt-logout": "Sinia per retira",
+       "tooltip-pt-createaccount": "Tu es corajida per crea un conta e identifia se; an si, esta no es obligante",
        "tooltip-ca-talk": "Discute de la paje de contenis",
-       "tooltip-ca-edit": "Tu pote edita esta paje. Per favore, usa la boton de previde ante fisa.",
+       "tooltip-ca-edit": "Edita esta paje",
        "tooltip-ca-addsection": "Inisia un sesion nova",
        "tooltip-ca-viewsource": "Esta paje es protejeda. Tu pote vide se orijin.",
+       "tooltip-ca-history": "Revisas pasada de esta paje",
        "tooltip-ca-protect": "Proteje esta paje",
        "tooltip-ca-delete": "Sutrae esta paje",
        "tooltip-ca-move": "Move esta paje",
        "tooltip-ca-watch": "Junta esta paje a tu lista de pajes oservada",
        "tooltip-ca-unwatch": "Sutrae esta paje de tu lista de pajes oservada",
        "tooltip-search": "Xerca {{SITENAME}}",
+       "tooltip-search-go": "Vade a un paje con esta nom esata, si lo esiste",
+       "tooltip-search-fulltext": "MediaWiki:Tooltip-xerca-testoplen/lfn",
        "tooltip-p-logo": "Visita la paje prima",
        "tooltip-n-mainpage": "Visita la paje prima",
        "tooltip-n-mainpage-description": "Visita la paje prima",
        "tooltip-n-randompage": "Carga un paje acaso",
        "tooltip-n-help": "La loca per descovre.",
        "tooltip-t-whatlinkshere": "Lista de tota pajes de vici ce lia a asi",
-       "tooltip-t-contributions": "Vide la lista de contribuis de esta usor",
+       "tooltip-t-recentchangeslinked": "Cambia resente en pajes liada de esta paje",
+       "tooltip-feed-atom": "Enflue de atom per esta paje",
+       "tooltip-t-contributions": "Vide la lista de contribuis de {{GENDER:$1|esta usor}}",
        "tooltip-t-emailuser": "Envia un eposta a esta usor",
        "tooltip-t-upload": "Envia fixes",
        "tooltip-t-specialpages": "Lista de tota pajes spesial",
+       "tooltip-t-print": "Varia primable de esta paje",
+       "tooltip-t-permalink": "Lias permanente a esta revisa de la paje",
+       "tooltip-ca-nstab-main": "Vide la paje de contenis",
        "tooltip-ca-nstab-user": "Vide la paje de usor",
+       "tooltip-ca-nstab-special": "Esta es un paje special, e no pote es editada.",
        "tooltip-ca-nstab-project": "Vide la paje de la projeta",
        "tooltip-ca-nstab-image": "Vide la paje de fix",
        "tooltip-ca-nstab-template": "Mostra la model",
        "tooltip-diff": "Mostra tu cambias de la testo.",
        "tooltip-compareselectedversions": "Vide la diferes entre la du varias elejeda de esta paje.",
        "tooltip-watch": "Junta esta paje a tu lista de pajes oservada",
+       "tooltip-rollback": "\"Rollback\" reverts the last contributor's edit(s) to this page in one click\n\n\"Reversa\" reversa la edita o editas a esta paje par la contribuor presedente con un clica",
+       "tooltip-undo": "\"Desfa\" reversa esta edita e abri la forma de edita en la modo de previde. Lo permete la ajunta de un razona en la resoma.",
+       "tooltip-summary": "Entra un resoma corta",
        "others": "otras",
+       "simpleantispam-label": "Proba anti-spam.\n<strong>No</strong> completa esta!",
+       "pageinfo-toolboxlink": "Informa de paje",
        "previousdiff": "← Difere plu vea",
        "nextdiff": "Difere plu nova →",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|paje|pajes}}",
        "file-info-size": "$1 × $2 pixel, grandia de fix: $3, MIME tipo: $4",
        "file-nohires": "No plu densia posable.",
        "svg-long-desc": "SVG fix, per nom $1 × $2 pixeles, grandia de fix: $3",
-       "show-big-image": "Densia masima",
+       "show-big-image": "Arcivo orijinal",
+       "show-big-image-preview": "Grandia de esta previde: $1",
+       "show-big-image-other": "Otra {{PLURAL:$2|densia|densias}}: $1.",
+       "show-big-image-size": "$1 × $2 pixeles",
        "newimages": "Imajes nova",
        "ilsubmit": "Xerca",
        "bad_image_list": "La forma es la seguente:\n\nSola linias de un lista (ce comensa con *) es considerada.\nLa lia prima a la linia nesesa es un lia a un mal fix.\nCada lias seguente a la mesma linia es considerada es esetas, ce es, la pajes do la fix pote aveni enlinia.",
        "metadata-help": "Esta fix conteni plu informa, posable juntada de un camera dijital o un scanador usada per crea o dijiti el.\nSi la fix ia es cambiada de se stato orijinal, alga detalias pote no es clara en la fix cambiada.",
        "metadata-expand": "Mostra detalias estendente",
        "metadata-collapse": "Asconde detalias estendeda",
-       "metadata-fields": "Campos de EXIF metadata listada en esta mesaje va es inclui cuando la table de metadata es minimida.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Campos de EXIF metadata listada en esta mesaje va es incluida cuando la table de metadata es minimida.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Orienta",
+       "exif-xresolution": "Densia orizonal",
+       "exif-yresolution": "Densia vertical",
+       "exif-datetime": "Data e ora de cambia de fix",
+       "exif-make": "Fabricor de camera",
+       "exif-model": "Model de camera",
+       "exif-software": "Programas usada",
+       "exif-exifversion": "Varia de Exif",
+       "exif-colorspace": "Spasio de color",
+       "exif-datetimeoriginal": "Data e ora de jenera de datos",
+       "exif-datetimedigitized": "Data e ora de dijitali",
        "exif-exposuretime-format": "$1 sec. ($2)",
+       "exif-orientation-1": "Normal",
        "namespacesall": "tota",
        "monthsall": "tota",
        "confirm_purge_button": "Oce",
        "watchlisttools-view": "Vide cambias pertinente",
        "watchlisttools-edit": "Vide e edita la lista de pajes oservada",
        "watchlisttools-raw": "Edita la lista rua de pajes oservada",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discute]])",
        "version": "Varia",
        "version-version": "($1)",
        "fileduplicatesearch-submit": "Xerca",
        "specialpages": "Pajes spesial",
+       "tag-filter": "Filtre de [[Special:Tags|eticeta]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|sutraeda}} paje $3",
+       "logentry-move-move": "$1 {{GENDER:$2|moveda}} paje $3 a $4",
+       "logentry-newusers-create": "Conta de usor $1 ia es {{GENDER:$2|creada}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|cargada}} $3",
+       "searchsuggest-search": "Xerca {{SITENAME}}",
        "expand_templates_ok": "Oce"
 }
index c6a1e3a..b08935b 100644 (file)
        "right-managechangetags": "ایجاد و حذف [[Special:Tags|برچسب‌ها]] از پایگاه داده",
        "right-applychangetags": "تائید [[Special:Tags|برچسب]] بر روی تغییرات یک نفر",
        "right-changetags": "افزودن یا حذف [[Special:Tags|برچسب]] قراردادی بر روی نسخه یا سیاهه ورودی‌ها",
+       "right-deletechangetags": "[[Special:Tags|tags]] را اژ پایگاه پاک بکه",
        "grant-generic": "حقوق \"$1\" بسته",
        "grant-group-page-interaction": "تعاول با صفحه",
        "grant-group-file-interaction": "تعامل با میدیا",
        "feedback-useragent": "رابط کاربر:",
        "searchsuggest-search": "مِنِی کِردِن(گێردین)",
        "searchsuggest-containing": "وةڵگةل  دربردارنده...",
-       "api-error-badaccess-groups": "شما اجازهٔ بارگذاری پرونده‌ها را در این ویکی ندارید.",
        "api-error-badtoken": "خطای داخلی: کد امنیتی اشتباه (Bad token).",
-       "api-error-copyuploaddisabled": "بارگذاری با استفاده از نشانی اینترنتی در این کارساز غیرفعال است.",
-       "api-error-duplicate": "{{PLURAL:$1|پروندهٔ دیگری|چند پروندهٔ دیگر}} در تارنما با محتوای یکسان وجود داشت.",
-       "api-error-duplicate-archive": "{{PLURAL:$1| پروندهٔ دیگری|چند پروندهٔ دیگر}} در تارنما با محتوای یکسان وجود داشت، ولی حذف {{PLURAL:$1|شده است|شده‌اند}}.",
-       "api-error-empty-file": "پرونده‌ای که شما ارسال کردید خالی بود.",
        "api-error-emptypage": "ایجاد وةڵگةل خالی مجاز نیست.",
-       "api-error-fetchfileerror": "خطای داخلی: در هنگام گرفتن پرونده، یک چیزی درست پیش نرفت.",
-       "api-error-fileexists-forbidden": "یک پرونده با نام \"$1\" موجود است و امکان بازنویسی نیست.",
-       "api-error-fileexists-shared-forbidden": "یک پرونده با نام \"$1\" در انبار اشتراک پرونده موجود است و امکان بازنویسی نیست.",
-       "api-error-file-too-large": "پرونده‌ای که شما ارسال کردید بیش از اندازه بزرگ بود.",
-       "api-error-filename-tooshort": "نام پرونده بیش از اندازه کوتاه است.",
-       "api-error-filetype-banned": "این نوع پرونده ممنوع است.",
-       "api-error-filetype-banned-type": "&lrm;$1 {{PLURAL:$4|یک نوع پروندهٔ نامجاز است|انواع پروندهٔ نامجاز هستند}}. {{PLURAL:$3|نوع پروندهٔ مجاز|انواع پروندهٔ مجاز}} از این قرار است: $2.",
-       "api-error-filetype-missing": "پرونده فرمت ندارد.",
-       "api-error-hookaborted": "اصلاحیه‌ای که شما سعی در ایجاد آن بودید توسط افزونه‌ای به دام افتاد.",
-       "api-error-http": "خطای داخلی: قادر به اتصال به سرور نیست.",
-       "api-error-illegal-filename": "نام پرونده مجاز نیست.",
-       "api-error-internal-error": "خطای داخلی: با پردازش بارگذاری شما در ویکی، یک چیز اشتباه پیش رفت.",
-       "api-error-invalid-file-key": "خطای داخلی: پرونده در حافظهٔ موقت موجود نیست.",
-       "api-error-missingparam": "خطای داخلی: پارامترهای ناموجود در درخواست.",
-       "api-error-missingresult": "خطای داخلی: نمی‌توان فهمید کپی‌برداری موفق بوده‌است یا نه.",
-       "api-error-mustbeloggedin": "برای بارگذاری پرونده‌ها شما باید به سامانه وارد شوید.",
-       "api-error-mustbeposted": "خطای داخلی: درخواست باید از روش POST HTTP ارسال گردد.",
-       "api-error-noimageinfo": "بارگذاری موفق بود، ولی کارساز هیچ اطلاعاتی دربارهٔ پرونده به ما نداد.",
-       "api-error-nomodule": "خطای داخلی: پودمان بارگذاری تنظیم نشده‌است.",
-       "api-error-ok-but-empty": "خطای داخلی : پاسخی از سرور دریافت نشد.",
-       "api-error-overwrite": "جای نوشتن یک پرونده موجود مجاز نیست.",
-       "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 \"",
-       "api-error-unknown-error": "خطای داخلی: در زمانی که شما در حال تلاش برای بارگذاری پروندهٔ‌تان بودید، یک چیز اشتباه پیش رفت.",
+       "api-error-stashfailed": "خطای داخلی: کارساز نمی‌تواند پرونده موقت را ذخیره کند.",
        "api-error-unknown-warning": "هشدار نادیاری/ ناشناخته: $1",
        "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|ساعت |ساعتةلئ}} دماتر",
index 16ed0bb..905d05e 100644 (file)
        "saveprefs": "Išsaugoti",
        "restoreprefs": "Grąžinti visus numatytuosius nustatymus (visose skiltyse)",
        "prefs-editing": "Redagavimas",
-       "rows": "Eilutės:",
-       "columns": "Stulpeliai:",
        "searchresultshead": "Paieškos nustatymai",
        "stub-threshold": "Ribinė reikšmė nepilnų puslapių nuorodų formatavimui ($1):",
        "stub-threshold-sample-link": "pavyzdys",
        "recentchanges-legend-heading": "<strong>Paaiškinimai:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (taip pat žiūrėkite [[Special:NewPages|naujausių straipsnių sąrašą]])",
        "recentchanges-submit": "Rodyti",
+       "rcfilters-activefilters": "Aktyvūs filtrai",
+       "rcfilters-invalid-filter": "Negalimas filtras",
+       "rcfilters-filterlist-title": "Filtrai",
+       "rcfilters-filterlist-noresults": "Nerastas toks filtras",
+       "rcfilters-filtergroup-registration": "Vartotojo registracija",
+       "rcfilters-filter-registered-label": "Registruoti",
+       "rcfilters-filter-unregistered-label": "Neregistruoti",
+       "rcfilters-filter-editsbyself-label": "Jūsų keitimai",
+       "rcfilters-filter-editsbyself-description": "Jūsų keitimai.",
+       "rcfilters-filter-editsbyother-label": "Kitų keitimai",
+       "rcfilters-filter-editsbyother-description": "Kaitimai sukurti kitų vartotojų (ne jūsų).",
+       "rcfilters-filtergroup-userExpLevel": "Patirties lygis (tik registruotiems vartotojams)",
+       "rcfilters-filter-userExpLevel-newcomer-label": "Naujokai",
+       "rcfilters-filter-userExpLevel-learner-label": "Mokiniai",
+       "rcfilters-filter-userExpLevel-experienced-label": "Patyrę vartotojai",
+       "rcfilters-filter-userExpLevel-experienced-description": "Daugiau nei 30 dienų veiklos ir 500 keitimų.",
+       "rcfilters-filter-bots-label": "Robotas",
+       "rcfilters-filter-bots-description": "Keitimai, atlikti automatinių įrankių.",
+       "rcfilters-filter-humans-label": "Žmogaus (ne roboto)",
+       "rcfilters-filter-humans-description": "Keitimai atlikti žmonių.",
+       "rcfilters-filtergroup-significance": "Reikšmė",
+       "rcfilters-filter-minor-label": "Smulkūs pakeitimai",
+       "rcfilters-filter-minor-description": "Keitimai, kuriuos autorius pažymėjo kaip mažus.",
+       "rcfilters-filter-major-label": "Nesmulkūs pakeitimai",
+       "rcfilters-filter-major-description": "Keitimai, nepažymėti kaip smulkūs.",
+       "rcfilters-filtergroup-changetype": "Pakeitimo tipas",
+       "rcfilters-filter-pageedits-label": "Puslapių keitimai",
+       "rcfilters-filter-newpages-label": "Puslapių sukūrimai",
+       "rcfilters-filter-newpages-description": "Keitimai, kurie sukuria naujus puslapius.",
+       "rcfilters-filter-categorization-label": "Kategorijų pakeitimai",
+       "rcfilters-filter-categorization-description": "Įrašai puslapių, kurie yra pridedami ar pašalinami iš kategorijų.",
        "rcnotefrom": "Žemiau yra {{PLURAL:$5|pakeitimas|pakeitimai}} pradedant <strong>$3, $4</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
        "rclistfrom": "Rodyti naujus pakeitimus pradedant $3 $2",
        "rcshowhideminor": "$1 smulkius keitimus",
        "proxyblockreason": "Jūsų IP adresas yra užblokuotas, nes jis yra atvirasis tarpinis serveris. Prašome susisiekti su savo interneto paslaugų tiekėju ar technine pagalba ir praneškite jiems apie šią svarbią saugumo problemą.",
        "sorbsreason": "Jūsų IP adresas yra įtrauktas į atvirųjų tarpinių serverių DNSBL sąrašą, naudojamą šios svetainės.",
        "sorbs_create_account_reason": "Jūsų IP adresas yra įtrauktas į atvirųjų tarpinių serverių DNSBL sąrašą, naudojamą šios svetainės. Jūs negalite sukurti paskyros",
+       "softblockrangesreason": "Anoniminiai įnašai nėra leidžiami iš jūsų IP adreso ($1). Prašome prisijungti.",
        "xffblockreason": "IP adresas esantys X-Forwarded-For antraštėje, jūsų ar tarpinio serverio, kuriuo jūs naudojatės, buvo užblokuotas. Originali bloko priežastis buvo: $1",
        "cant-see-hidden-user": "Naudotojas, kurį bandote užblokuoti, jau yra užblokuotas arba paslėptas.\nKadangi jūs neturi hideuser teisės, jūs negalite pamatyti arba pakeisti naudotojo blokavimo.",
        "ipbblocked": "Jūs negalite blokuoti ar atblokuoti kitų naudotojų, nes pats esate užblokuotas",
        "feedback-useragent": "Vartotojo veiksnys:",
        "searchsuggest-search": "Ieškoti",
        "searchsuggest-containing": "turintys",
-       "api-error-autoblocked": "Jūsų IP adresas buvo automatiškai užblokuotas, nes jį naudojo užblokuotas naudotojas.",
-       "api-error-badaccess-groups": "Jums neleidžiama įkelti failus į šią wiki.",
        "api-error-badtoken": "Vidinė klaida: blogai atpažinimo ženklas.",
-       "api-error-blocked": "Jus buvote užblokuotas, kad negalėtumėte redaguoti.",
-       "api-error-copyuploaddisabled": "Siuntimas pagal URL yra išjungtas šiame serveryje.",
-       "api-error-duplicate": "Jau {{PLURAL:$1|yra kitas failas|yra kiti failai}} puslapyje su tuo pačiu turiniu.",
-       "api-error-duplicate-archive": "Jau {{PLURAL:$1|buvo kitas failas|buvo kitų failų}} puslapyje su tuo pačiu turiniu, bet {{PLURAL:$1|buvo ištrintas|buvo ištrinti}}.",
-       "api-error-empty-file": "Pateikta failas buvo tuščias.",
        "api-error-emptypage": "Kurti naujus, tuščius puslapius neleidžiama.",
-       "api-error-fetchfileerror": "Vidinė klaida: Kažkas nutiko gaunant failą.",
-       "api-error-fileexists-forbidden": "Failas, kurio pavadinimas \"$1\" jau egzistuoja, ir negali būti perrašytas.",
-       "api-error-fileexists-shared-forbidden": "Failas, kurio pavadinimas \"$1\" jau egzistuoja bendro naudojimo failų saugykloje, ir negali būti perrašytas.",
-       "api-error-file-too-large": "Failą, kurį pateikėte buvo per didelis.",
-       "api-error-filename-tooshort": "Failo vardas yra per trumpas.",
-       "api-error-filetype-banned": "Šis failų tipas yra uždraustas.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nėra leistinas failo tipas|nėra leistini failo tipai}}.{{PLURAL:$3|Leistinas failo tipas yra|Leistini failo tipai yra}} $2.",
-       "api-error-filetype-missing": "Failas neturi galūnės.",
-       "api-error-hookaborted": "Pakeitimą, kurį bandėte atlikti, nutraukė priedas.",
-       "api-error-http": "Vidinė klaida: nepavyko prisijungti prie serverio.",
-       "api-error-illegal-filename": "Failo vardas neleidžiamas.",
-       "api-error-internal-error": "Vidinė klaida: Kažkas ne taip su jūsų įkėlimo apdorojimu wiki.",
-       "api-error-invalid-file-key": "Vidinė klaida: failas nerastas saugykloje.",
-       "api-error-missingparam": "Vidinė klaida: Trūksta reikalingų parametrų.",
-       "api-error-missingresult": "Vidinė klaida: nepavyko nustatyti, ar pavyko nukopijuoti.",
-       "api-error-mustbeloggedin": "Jūs turite būti prisijungęs kad galėtumėte įkelti failus.",
-       "api-error-mustbeposted": "Vidinė klaida: prašymas reikalauja HTTP POST.",
-       "api-error-noimageinfo": "Įkelti pavyko, bet serveris nepateikė mums jokios informacijos apie failą.",
-       "api-error-nomodule": "Vidinė klaida: nėra nustatytas įkėlimų modulis.",
-       "api-error-ok-but-empty": "Vidinė klaida: nėra atsakymo iš serverio.",
-       "api-error-overwrite": "Perrašymas esamą failą neleidžiamas.",
-       "api-error-ratelimited": "Jūs per trumpą laiko tarpą bandote įkelti daugiau failų, nei leidžiama šiame projekte.\nPabandykite dar kartą po keleto minučių.",
-       "api-error-stashfailed": "Vidinė klaida: serveriui nepavyko išsaugoti laikinąjį failą.",
        "api-error-publishfailed": "Vidinė klaida: serveriui nepavyko paskelbti laikino failo.",
-       "api-error-stasherror": "Įvyko klaida keliant failą į laikyklą.",
-       "api-error-stashedfilenotfound": "Saugomas failas nebuvo rastas bandant įkelti jį iš saugyklos.",
-       "api-error-stashpathinvalid": "Kelias, kuriuo saugomas failas būtų surastas yra negalimas.",
-       "api-error-stashfilestorage": "Įvyko klaida saugant failą saugykloje.",
-       "api-error-stashzerolength": "Serveris negalėjo išsaugoti failo, nes jo ilgis yra nulinis.",
-       "api-error-stashnotloggedin": "Jūs turite būti prisijungęs jei norite išsaugoti failus įkėlimų saugykloje.",
-       "api-error-stashwrongowner": "Failas, kuri bandėte pasiekti saugykloje jums nepriklauso.",
-       "api-error-stashnosuchfilekey": "Failo raktas, kurį bandėte pasiekti saugykloje neegzistuoja.",
-       "api-error-timeout": "Serveris neatsakė per numatytą laiką.",
-       "api-error-unclassified": "Įvyko nežinoma klaida",
-       "api-error-unknown-code": "Nežinoma klaida: \" $1 \"",
-       "api-error-unknown-error": "Vidinė klaida: kažkas nutiko bandant įkelti failą.",
+       "api-error-stashfailed": "Vidinė klaida: serveriui nepavyko išsaugoti laikinąjį failą.",
        "api-error-unknown-warning": "Nežinomas įspėjimas: $1",
        "api-error-unknownerror": "Nežinoma klaida: \"$1\"",
-       "api-error-uploaddisabled": "Įkėlimas išjungtas šioje wiki.",
-       "api-error-verification-error": "Šis failas gali būti sugadintas arba turi neteisingą papildinį.",
-       "api-error-was-deleted": "Failas tokiu pavadinimu anksčiau jau yra buvęs įkeltas, o paskui ištrintas.",
        "duration-seconds": "$1 {{PLURAL:$1|sekundė|sekundės|sekundžių}}",
        "duration-minutes": "$1 {{PLURAL:$1|minutė|minutės|minučių}}",
        "duration-hours": "$1 {{PLURAL:$1|valanda|valandos|valandų}}",
        "pagelang-language": "Kalba",
        "pagelang-use-default": "Naudoti numatytąją kalbą",
        "pagelang-select-lang": "Pasirinkite kalbą",
+       "pagelang-reason": "Priežastis",
        "pagelang-submit": "Pateikti",
+       "pagelang-nonexistent-page": "Puslapis $1 neegzistuoja.",
+       "pagelang-db-failed": "Duomenų bazei nepavyko pakeisti puslapio kalbos.",
        "right-pagelang": "Keisti puslapio kalbą",
        "action-pagelang": "keisti puslapio kalbą",
        "log-name-pagelang": "Kalbos keitimų žurnalas",
index b7faa78..64d015a 100644 (file)
        "feedback-thanks-title": "Paldies!",
        "searchsuggest-search": "Meklēt {{SITENAME}}",
        "searchsuggest-containing": "Meklējamā frāze:",
-       "api-error-badaccess-groups": "Jums nav atļauts augšupielādēt failus šajā wiki.",
-       "api-error-copyuploaddisabled": "Augšupielāde no URL šajā serverī ir atspējota.",
-       "api-error-filename-tooshort": "Faila nosaukums ir pārāk īss.",
-       "api-error-filetype-banned": "Šis failu veids ir aizliegts.",
-       "api-error-http": "Iekšēja kļūda: Nevar izveidot savienojumu ar serveri.",
-       "api-error-mustbeloggedin": "Tev jāpieslēdzas, lai augšupielādētu failus.",
-       "api-error-ok-but-empty": "Iekšēja kļūda: Nav atbildes no servera.",
-       "api-error-timeout": "Serveris neatbildēja paredzētajā laikā.",
-       "api-error-unclassified": "Nezināma kļūda.",
-       "api-error-unknown-code": "Nezināma kļūda: \" $1 \"",
        "api-error-unknown-warning": "Nezināms brīdinājums: $1",
        "api-error-unknownerror": "Nezināma kļūda: \"$1\"",
-       "api-error-uploaddisabled": "Augšupielāde šajā wiki  ir atslēgta.",
        "limitreport-title": "Parsētāja profilēšanas dati:",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|baiti|baits|baiti}}",
        "limitreport-templateargumentsize": "Veidnes argumenta izmērs",
index 5867df4..3e1e0dc 100644 (file)
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Прикажи",
        "rcfilters-activefilters": "Активни филтри",
+       "rcfilters-restore-default-filters": "Поврати основни филтри",
+       "rcfilters-clear-all-filters": "Тргни ги сите филтри",
        "rcfilters-search-placeholder": "Филтрирај скорешни промени (прелстајте или почнете да пишувате)",
        "rcfilters-invalid-filter": "Неважечки филтер",
+       "rcfilters-empty-filter": "Нема активни филтри. Прикажани се сите придонеси.",
        "rcfilters-filterlist-title": "Филтри",
        "rcfilters-filterlist-noresults": "Не пронајдов ниеден филтер",
+       "rcfilters-filtergroup-registration": "Регистрација на корисници",
+       "rcfilters-filter-registered-label": "Регистрирани",
+       "rcfilters-filter-registered-description": "Најавени уредници.",
+       "rcfilters-filter-unregistered-label": "Нерегистрирани",
+       "rcfilters-filter-unregistered-description": "Уредници кои не се најавени.",
        "rcfilters-filtergroup-authorship": "Уреди авторство",
        "rcfilters-filter-editsbyself-label": "Ваши сопствени уредувања",
        "rcfilters-filter-editsbyself-description": "Ваши уредувања.",
        "rcfilters-filter-editsbyother-label": "Туѓи уредувања",
        "rcfilters-filter-editsbyother-description": "Уредувања направени од други корисници (не од вас).",
-       "rcfilters-filtergroup-userExpLevel": "Корисничка искусност",
+       "rcfilters-filtergroup-userExpLevel": "Корисничка искусност (само за регистрирани)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Новодојденци",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Ð\9cногÑ\83 Ð½Ð¾Ð²Ð¸ Ñ\83Ñ\80едниÑ\86и: Ð¿омалку од 10 уредувања и 4 дена активност.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Ð\9fомалку од 10 уредувања и 4 дена активност.",
        "rcfilters-filter-userExpLevel-learner-label": "Ученици",
-       "rcfilters-filter-userExpLevel-learner-description": "Повеќе денови активност од новодојденците, но помалку од искусните корисници.",
+       "rcfilters-filter-userExpLevel-learner-description": "Повеќе денови активност од „новодојденците“, но помалку од „искусните корисници“.",
        "rcfilters-filter-userExpLevel-experienced-label": "Искусни корисници",
        "rcfilters-filter-userExpLevel-experienced-description": "Повеќе од 30 дена активност и 500 уредувања.",
+       "rcfilters-filtergroup-automated": "Автоматизирани придонеси",
+       "rcfilters-filter-bots-label": "Ботовски",
+       "rcfilters-filter-bots-description": "Уредувања со автоматизирани алатки.",
+       "rcfilters-filter-humans-label": "Човечки (неботовски)",
+       "rcfilters-filter-humans-description": "Уредувања направени од човечки уредници.",
+       "rcfilters-filtergroup-significance": "Значајност",
+       "rcfilters-filter-minor-label": "Ситни уредувања",
+       "rcfilters-filter-minor-description": "Уредувања кои авторот ги означил како ситни.",
+       "rcfilters-filter-major-label": "Неситни уредувања",
+       "rcfilters-filter-major-description": "Уредувања кои не се означени како ситни.",
+       "rcfilters-filtergroup-changetype": "Вид на промена",
+       "rcfilters-filter-pageedits-label": "Уредувања на страници",
+       "rcfilters-filter-pageedits-description": "Уредувања во содржината, разговорите, описите на категориите...",
+       "rcfilters-filter-newpages-label": "Создавања на страници",
+       "rcfilters-filter-newpages-description": "Уредувања кои создаваат нови страници.",
+       "rcfilters-filter-categorization-label": "Промени во категории",
+       "rcfilters-filter-categorization-description": "Записи од ставање на страници во категории или нивно отстранување од нив.",
+       "rcfilters-filter-logactions-label": "Заведени дејства",
+       "rcfilters-filter-logactions-description": "Административни постапки, создавања на сметки, бришења на страници, подигања...",
        "rcnotefrom": "Подолу {{PLURAL:$5|е прикажана промената|се прикажани промените}} почнувајќи од <strong>$3, $4</strong>  (се прикажуваат до <b>$1</b>).",
        "rclistfrom": "Прикажи нови промени почнувајќи од $3 $2",
        "rcshowhideminor": "$1 ситни промени",
        "apisandbox-sending-request": "Испраќам барање до извршникот...",
        "apisandbox-loading-results": "Добивам исход од извршникот...",
        "apisandbox-results-error": "Се појави грешка при вчитувањето на одговорот од барањето до извршникот: $1.",
-       "apisandbox-request-params-json": "JSON-параметри:",
        "apisandbox-request-url-label": "URL на барањето:",
        "apisandbox-request-time": "Време за барањето: {{PLURAL:$1|$1 милисекунда|$1 милисекунди}}",
        "apisandbox-results-fixtoken": "Исправи ја шифрата и поднеси одново",
        "feedback-useragent": "Кориснички вршител:",
        "searchsuggest-search": "Пребарајте по {{SITENAME}}",
        "searchsuggest-containing": "содржи...",
-       "api-error-autoblocked": "Вашата IP-адреса е автоматски блокирана бидејќи ја има користено блокиран корисник.",
-       "api-error-badaccess-groups": "Не ви е дозволено да подигате податотеки на ова вики.",
        "api-error-badtoken": "Внатрешна грешка: неисправна шифра.",
-       "api-error-blocked": "Блокирани сте од уредување.",
-       "api-error-copyuploaddisabled": "Подигањата со URL се оневозможени на овој опслужувач.",
-       "api-error-duplicate": "Веќе {{PLURAL:$1|постои друга податотека|постојат други податотеки}} со истата содржина.",
-       "api-error-duplicate-archive": "На мрежното место веќе {{PLURAL:$1|постоела друга податотека|постоеле други податотеки}} со истата содржина, но во меѓувреме {{PLURAL:$1|била избришана|биле избришани}}.",
-       "api-error-empty-file": "Поднесената податотека е празна.",
        "api-error-emptypage": "Создавањето на нови празни страници не е дозволено.",
-       "api-error-fetchfileerror": "Внатрешна грешка: нешто тргна наопаку при добивањето на податотеката.",
-       "api-error-fileexists-forbidden": "Веќе постои податотека наречена „$1“ и не може да се презапише.",
-       "api-error-fileexists-shared-forbidden": "Веќе постои податотека наречена „$1“ во заедничкото складиште и не може да се презапише.",
-       "api-error-file-too-large": "Поднесената податотека е преголема.",
-       "api-error-filename-tooshort": "Името на податотеката е прекратко.",
-       "api-error-filetype-banned": "Овој тип на податотека е забранет.",
-       "api-error-filetype-banned-type": "$1 не {{PLURAL:$4|е допуштен тип на податотека|се допуштени типови на податотека}}. {{PLURAL:$3|Допуштен е|Допуштени се}} $2.",
-       "api-error-filetype-missing": "На податотеката ѝ недостасува наставка.",
-       "api-error-hookaborted": "Измената што се обидовте да ја направите е откажана од пресретник за наставки.",
-       "api-error-http": "Внатрешна грешка: не можам да се поврзам со опслужувачот.",
-       "api-error-illegal-filename": "Податотеката има недозволено име.",
-       "api-error-internal-error": "Внатрешна грешка: нешто тргна наопаку при обработката на она што го подигате на викито.",
-       "api-error-invalid-file-key": "Внатрешна грешка: не ја пронајдов податотеката во привременото складиште.",
-       "api-error-missingparam": "Внатрешна грешка: недостасуваат параметри за барањето.",
-       "api-error-missingresult": "Внатрешна грешка: не можев да одредам дали копирањето заврши успешно.",
-       "api-error-mustbeloggedin": "Мора да сте најавени за да подигате податотеки.",
-       "api-error-mustbeposted": "Во програмов има грешка. Не користи исправен HTTP-метод.",
-       "api-error-noimageinfo": "Погидањето успеа, но опслужувачот не понуди никакви информации за податотеката.",
-       "api-error-nomodule": "Внатрешна грешка: нема зададено модул за подигање.",
-       "api-error-ok-but-empty": "Внатрешна грешка: опслужувачот не одговара.",
-       "api-error-overwrite": "Презапишувањето врз постоечки податотеки не е дозволено.",
-       "api-error-ratelimited": "Се обидувате да подигнете повеќе податотеки отколку што викито допушта за дадено време.\nОбидете се повторно за неколку минути.",
-       "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“",
-       "api-error-unknown-error": "Внатрешна грешка: нешто тргна наопаку при обидот да ја подигнете податотеката.",
+       "api-error-stashfailed": "Внатрешна грешка: Опслужувачот не успеа да ја складира привремената податотека.",
        "api-error-unknown-warning": "Непознато предупредување: „$1“",
        "api-error-unknownerror": "Непозната грешка: „$1“.",
-       "api-error-uploaddisabled": "Подигањето е оневозможено на ова вики.",
-       "api-error-verification-error": "Податотеката е оштетена или има погрешна наставка.",
-       "api-error-was-deleted": "Податотека со ова име веќе е подигана и потоа избришана.",
        "duration-seconds": "{{PLURAL:$1|една секунда|$1 секунди}}",
        "duration-minutes": "{{PLURAL:$1|една минута|$1 минути}}",
        "duration-hours": "{{PLURAL:$1|еден час|$1 часа}}",
        "usercssispublic": "Напомена: потстраниците со CSS не треба да содржат дсоверливи податоци бидејќи истите се видливи и за други корисници.",
        "restrictionsfield-badip": "Неважечки IP-дијапазон на адреси: $1",
        "restrictionsfield-label": "Допуштени IP-опсези:",
-       "restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
        "revid": "преработка $1",
        "pageid": "назнака на страницата $1"
 }
index 30842e0..66b2190 100644 (file)
@@ -92,7 +92,7 @@
        "tog-ccmeonemails": "मी इतर सदस्यांना पाठविलेल्या ई-मेल च्या प्रती मलाही माझ्या ई-मेल पत्त्यावर पाठवा",
        "tog-diffonly": "निवडलेल्या आवृत्त्यांमधील बदल दाखवताना जुनी आवृत्ती दाखवू नका.",
        "tog-showhiddencats": "लपविलेले वर्ग दाखवा",
-       "tog-norollbackdiff": "दà¥\8dरà¥\81तमाà¤\98ार à¤\98à¥\87तलà¥\8dयास à¤¬à¤¦à¤² à¤µà¤\97ळा",
+       "tog-norollbackdiff": "दà¥\8dरà¥\81तमाà¤\98ार à¤\98à¥\87तलà¥\8dयास à¤«à¤°à¤\95 à¤¦à¤¾à¤\96वà¥\82 à¤¨à¤\95ा",
        "tog-useeditwarning": "जर मी संपादित करीत असलेल्या पानावरील माझे संपादिलेले बदल जतन न केल्यास मला इशारा द्या",
        "tog-prefershttps": "सनोंद प्रवेशित असतांना प्रत्येक वेळी  सुरक्षित अनुबंध वापरा",
        "underline-always": "नेहमी",
        "tagline": "{{SITENAME}} कडून",
        "help": "साहाय्य",
        "search": "शोधा",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "शोधा",
        "go": "चला",
        "searcharticle": "जा",
        "history": "पानाचा इतिहास",
        "history_short": "इतिहास",
+       "history_small": "इतिहास",
        "updatedmarker": "माझ्या शेवटच्या भेटीनंतर अद्यतन केले",
        "printableversion": "छापण्यायोग्य आवृत्ती",
        "permalink": "शाश्वत दुवा",
        "nocookieslogin": "{{SITENAME}} सदस्यांना सनोंद-प्रवेश देतांना, त्यांच्या स्मृतिशेष (cookies) वापरते.तुम्ही स्मृतिशेष सुविधा अनुपलब्ध ठेवली आहे.स्मृतीशेष सुविधा कृपया उपलब्ध करा आणि सनोंद-प्रवेशासाठी पुन्हा प्रयत्न करा.",
        "nocookiesfornew": "हे सदस्य खाते अस्तित्वात नाही, त्यामुळे आम्ही त्याच्या स्रोताची खात्री करू शकलो नाही.\nतुमचे स्मृतिशेष उपलब्ध असण्याची खात्री करा,या पानास पुनर्भारण(रिलोड) करा  किंवा पुन्हा प्रयत्न करा.",
        "noname": "आपण वैध सदस्यनाम नमूद केले नाही.",
-       "loginsuccesstitle": "à¤\86पलà¥\8dया à¤¸à¤¨à¥\8bà¤\82द-पà¥\8dरवà¥\87शाà¤\9aà¥\80 à¤¨à¥\8bà¤\82दणà¥\80 à¤¯à¤¶à¤¸à¥\8dवà¥\80रà¥\80तà¥\8dया à¤ªà¥\82रà¥\8dण à¤\9dालà¥\80",
+       "loginsuccesstitle": "सनà¥\8bà¤\82द-पà¥\8dरवà¥\87शित",
        "loginsuccess": "'''तुम्ही {{SITENAME}} वर \"$1\" नावाने सनोंद प्रवेशित आहात.'''",
        "nosuchuser": "\"$1\" या नावाचा कोणताही सदस्य नाही.तुमचे शुद्धलेखन तपासा, किंवा [[Special:CreateAccount|नवीन खाते]] तयार करा.",
        "nosuchusershort": "\"$1\" या नावाचा सदस्य नाही. लिहीताना आपली चूक तर नाही ना झाली?",
        "newpassword": "नवीन परवलीचा शब्द:",
        "retypenew": "पुन्हा एकदा परवलीचा शब्द टंका:",
        "resetpass_submit": "परवलीचा शब्द टाका आणि सनोंद-प्रवेश करा",
-       "changepassword-success": "तà¥\81मà¤\9aा à¤ªà¤°à¤µà¤²à¥\80à¤\9aा à¤¶à¤¬à¥\8dद à¤¯à¤¶à¤¸à¥\8dवà¥\80रितà¥\8dया à¤¬à¤¦à¤²à¤²à¥\87ला à¤\86हà¥\87!",
+       "changepassword-success": "तुमचा परवलीचा शब्द बदललेला आहे!",
        "changepassword-throttled": "तुम्ही नुकतेच सनोंद- प्रवेशासाठी अनेकानेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
        "botpasswords": "सांगकाम्याचे परवलीचे शब्द",
        "botpasswords-summary": "<em>सांगकाम्याचे परवलीचे शब्द</em>हे त्या खात्याची मुख्य सनोंद-प्रवेश अधिकारपत्रे न वापरता, एपीआय मार्फत, सदस्य खात्याच्या प्रवेशास पोहोच देतात.सांगकाम्याचा परवलीचा शब्द वापरुन सनोंद प्रवेश केलेल्यांचे उपलब्ध सदस्य अधिकार प्रतिबंधित असू शकतात.\n\nजर आपणास कळत नसेल आपण हे कां करीत आहोत,तर आपण ते बहुतेक करावयास नको.कोणीही आपणास असे कधीही सांगु नये कि यापैकी एखादे उत्पादित करा व त्यांना द्या.",
        "watchthis": "या लेखावर लक्ष ठेवा",
        "savearticle": "हा लेख साठवा",
        "savechanges": "बदल जतन करा",
+       "publishpage": "पानाचे प्रकाशन करा",
        "publishchanges": "बदल प्रकाशित करा",
        "preview": "झलक",
        "showpreview": "झलक दाखवा",
        "right-changetags": "वैयक्तिक आवृत्त्यांना व नोंद प्रवेष्ट्यांना, आहेतुक(arbitrary) [[Special:Tags|खूणपताका]] जोडा अथवा हटवा",
        "grant-generic": "\"$1\" अधिकार गठ्ठा",
        "grant-group-email": "विपत्र पाठवा",
-       "grant-blockusers": "सदसà¥\8dयाà¤\82ना à¤ªà¥\8dरतिबà¤\82धन/अप्रतिबंधित करा",
+       "grant-blockusers": "सदसà¥\8dयाà¤\82ना à¤ªà¥\8dरतिबà¤\82धित/अप्रतिबंधित करा",
        "grant-createaccount": "खाते तयार करा",
        "grant-createeditmovepage": "पाने बनवा,संपादा व स्थानांतरण करा",
        "grant-delete": "पाने, आवृत्त्या व नोंदी वगळा",
        "grant-editinterface": "मिडियाविकि नामविश्व व सदस्यांची CSS/JS संपादा",
-       "grant-editmycssjs": "à¤\86पलà¥\87 सदस्य CSS/JavaScript संपादित करा",
+       "grant-editmycssjs": "à¤\86पलà¥\80 सदस्य CSS/JavaScript संपादित करा",
        "grant-editmyoptions": "आपला सदस्य पसंतीक्रम संपादा",
        "grant-editmywatchlist": "आपली निरीक्षणयादी संपादित करा",
        "grant-editpage": "अस्तित्वात असलेली पाने संपादा",
        "grant-highvolume": "अत्त्युच्च-जागा घेणारे संपादन",
        "grant-oversight": "सदस्य लपवा व आवृत्त्या दाबा",
        "grant-patrol": "पानांच्या बदलांवर गस्त घाला",
+       "grant-privateinfo": "वैयक्तिक माहिती बघा",
        "grant-protect": "पाने सुरक्षित किंवा असुरक्षित करा",
-       "grant-rollback": "पानाचे बदल परतवा",
+       "grant-rollback": "पानाà¤\82à¤\9aà¥\87 à¤¬à¤¦à¤² à¤ªà¤°à¤¤à¤µà¤¾",
        "grant-sendemail": "इतर सदस्यांना विपत्र पाठवा",
+       "grant-uploadeditmovefile": "संचिकांचे अपभारण, बदल व स्थानांतरण करा",
+       "grant-uploadfile": "नविन संचिका चढवा",
        "grant-basic": "मूळ अधिकार",
        "grant-viewdeleted": "वगळलेल्या संचिका व पाने बघा",
        "grant-viewmywatchlist": "आपली निरीक्षणसूची बघा",
+       "grant-viewrestrictedlogs": "प्रतिबंधित लॉग नोंदी बघा",
        "newuserlogpage": "नवीन सदस्यांची नोंद",
        "newuserlogpagetext": "ही नवीन सदस्यांची नोंद यादी आहे.",
        "rightslog": "सदस्य आधिकार नोंद",
        "action-upload_by_url": "यूआरएल वरुन संचिकेचे अपभारण करा",
        "action-writeapi": "लेखन एपीआय वापरा",
        "action-delete": "हे पान वगळा",
-       "action-deleterevision": "हे आवर्तन वगळा",
-       "action-deletedhistory": "या पानाचा वगळलेला इतिहास पहा",
+       "action-deleterevision": "आवर्तने वगळा",
+       "action-deletelogentry": "लॉग प्रविष्ट्या वगळा",
+       "action-deletedhistory": "एखाद्या पानाचा वगळलेला इतिहास पहा",
+       "action-deletedtext": "वगळलेल्या आवृत्तीतील मजकूर बघा",
        "action-browsearchive": "वगळलेली पाने शोधा",
-       "action-undelete": "वà¤\97ळà¥\8dलà¥\87लà¥\87 à¤ªà¥\83षà¥\8dठ पुनर्स्थापित करा",
-       "action-suppressrevision": "लपलà¥\87लà¥\87 à¤ªà¥\81नरावरà¥\8dतन à¤ªà¤¹à¤¾ à¤µ à¤¸à¤¦à¥\8dयसà¥\8dथितà¥\80त à¤\86णा",
+       "action-undelete": "वà¤\97ळà¥\8dलà¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aà¥\80 पुनर्स्थापित करा",
+       "action-suppressrevision": "लपविलà¥\87लà¥\8dया à¤\86वà¥\83तà¥\8dतà¥\8dया à¤ªà¤¹à¤¾ à¤µ à¤ªà¥\81नरà¥\8dसà¥\8dथापित à¤\95रा",
        "action-suppressionlog": "ही खासगी नोंद पहा",
        "action-block": "या सदस्यास संपादन करण्यापासून प्रतिबंधित करा",
        "action-protect": "या पानाचा सुरक्षास्तर बदला",
        "action-userrights-interwiki": "इतर विकिंवरच्या सदस्यांचे अधिकार संपादित करा",
        "action-siteadmin": "माहितीसाठ्याला कुलूप लावा अथवा काढा",
        "action-sendemail": "विपत्रे (ई-मेल्स) पाठवा.",
+       "action-editmyoptions": "आपल्या स्वत:चा 'पसंतीक्रम' संपादा",
        "action-editmywatchlist": "'माझी निरीक्षणसूची' संपादा",
        "action-viewmywatchlist": "'माझी निरीक्षणसूची' बघा",
        "action-viewmyprivateinfo": "आपली वैयक्तिक माहिती बघा",
        "action-editmyprivateinfo": "आपली वैयक्तिक माहिती संपादा",
        "action-editcontentmodel": "पानाचा आशय नमूना संपादा",
-       "action-managechangetags": "डाà¤\9fाबà¥\87समधà¥\8dयà¥\87 à¤\96à¥\82णपतà¤\95ा à¤¤à¤¯à¤¾à¤° à¤\95रा à¤\95िà¤\82वा à¤µà¤\97ळा",
+       "action-managechangetags": "à¤\96à¥\82णपताà¤\95ा à¤¤à¤¯à¤¾à¤° à¤\95रा à¤\95िà¤\82वा (à¤\85)सà¤\95à¥\8dरिय à¤\95रा",
        "action-applychangetags": "आपल्या बदलांसोबतच खूणपताका जोडा",
        "action-changetags": "वैयक्तिक आवृत्त्यांना व नोंद प्रवेष्ट्यांना, आहेतुक(arbitrary) खूणपताका जोडा अथवा हटवा",
+       "action-deletechangetags": "डाटाबेसमधून खूणपताका वगळा",
+       "action-purge": "या पानास तरोताजे (पर्ज) करा",
        "nchanges": "$1 {{PLURAL:$1|बदल}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|मागील भेटीनंतर}}",
        "enhancedrc-history": "इतिहास",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नविन पानांची यादी]] हेही पाहा)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "recentchanges-submit": "दाखवा",
+       "rcfilters-activefilters": "सक्रिय गाळण्या",
+       "rcfilters-search-placeholder": "अलीकडील बदल गाळा (न्याहाळा किंवा टंकन सुरू करा)",
+       "rcfilters-invalid-filter": "अवैध गाळणी",
+       "rcfilters-filterlist-title": "गाळण्या",
+       "rcfilters-filterlist-noresults": "कोणतीच गाळणी सापडली नाही",
+       "rcfilters-filtergroup-registration": "सदस्य नोंदणी",
+       "rcfilters-filter-registered-label": "नोंदणीकृत",
+       "rcfilters-filter-registered-description": "प्रवेशलेले सदस्य",
+       "rcfilters-filter-unregistered-label": "अ-नोंदणीकृत",
+       "rcfilters-filter-unregistered-description": "संपादक जे प्रवेशित नाहीत.",
+       "rcfilters-filtergroup-authorship": "संपादनाचा लेखक",
+       "rcfilters-filter-editsbyself-label": "आपली स्वत:ची संपादने",
+       "rcfilters-filter-editsbyself-description": "आपली संपादने",
+       "rcfilters-filter-editsbyother-label": "इतरांची संपादने",
+       "rcfilters-filter-editsbyother-description": "इतर सदस्यांनी तयार केलेली संपादने (आपण नाही).",
+       "rcfilters-filtergroup-userExpLevel": "अनुभवाचा स्तर (फक्त नोंदणीकृत सदस्यांसाठीच)",
+       "rcfilters-filter-userExpLevel-newcomer-label": "नवागत",
+       "rcfilters-filter-userExpLevel-newcomer-description": "१० संपादनांपेक्षा कमी व ४ दिवसांची सक्रियता.",
+       "rcfilters-filter-userExpLevel-learner-label": "शिकाऊ",
        "rcnotefrom": "खाली {{PLURAL:$5|हा बदल आहे|हे बदल आहेत}} <strong>$3, $4</strong>पासून ते(<strong>$1</strong>पर्यंतचे  बदल दाखविले आहेत).",
        "rclistfrom": "$2,$3 पासून सुरुवात करुन, नविन केल्या गेलेले बदल दाखवा.",
        "rcshowhideminor": "छोटे बदल $1",
        "apisandbox-intro": "<strong>मिडियाविकि वेब सर्व्हीस एपीआय</strong> वर प्रयोग करण्यासाठी या पानाचा वापर करा. एपीआय वापरण्याच्या अधिक तपशिलासाठी  [[mw:API:Main page| एपीआय दस्ताऐवजीकरण]] हे पान बघा. उदाहरणार्थ:[https://www.mediawiki.org/wiki/API#A_simple_example मुख्य पानाचा आशय मिळवा]. अधिक उदाहरणे बघण्यास एखादी क्रिया निवडा.\n\nयाची नोंद घ्या कि ही धूळपाटी असली तरी, या पानावर आपण केलेल्या क्रियांद्वारे विकिवर फेरफार होऊ शकतो.",
        "apisandbox-submit": "विनंती करा",
        "apisandbox-reset": "हटवा",
-       "apisandbox-examples": "उदाहरण",
+       "apisandbox-examples": "उदाहरण",
        "apisandbox-results": "निकाल",
        "apisandbox-request-url-label": "'यूआरएल'ची विनंती करा:",
-       "apisandbox-request-time": "विनंती वेळ:$1",
+       "apisandbox-request-time": "विनंती वेळ:{{PLURAL:$1|$1 मिलीसेकंद}}",
        "booksources": "पुस्तक स्रोत",
        "booksources-search-legend": "पुस्तक स्रोत शोधा",
        "booksources-search": "शोधा",
        "modifiedarticleprotection": "\"[[$1]]\"करिता सुरक्षापातळी बदलली",
        "unprotectedarticle": "\"[[$1]]\" असुरक्षित केला.",
        "movedarticleprotection": "सुरक्षापातळी \"[[$2]]\" येथून \"[[$1]]\" येथे हलवली.",
+       "protectedarticle-comment": "\"[[$1]]\" ला {{GENDER:$2|ने संरक्षित केले}}",
+       "modifiedarticleprotection-comment": "\"[[$1]]\" ची {{GENDER:$2| ने संरक्षण पातळी बदलली}}",
+       "unprotectedarticle-comment": "\"[[$1]]\" ची {{GENDER:$2| ने सुरक्षा हटविली}}",
        "protect-title": "\"$1\" सुरक्षित करत आहे",
        "protect-title-notallowed": "\"$1\" ची सुरक्षा पातळी पहा",
        "prot_1movedto2": "\"[[$1]]\" हे पान \"[[$2]]\" मथळ्याखाली स्थानांतरित केले.",
        "pageinfo-display-title": "दृश्य शीर्षक",
        "pageinfo-default-sort": "डिफॉल्ट निवड-कळ (सॉर्ट कि)",
        "pageinfo-length": "पानाचा आकार (बाइट्समध्ये)",
-       "pageinfo-article-id": "पà¥\83षà¥\8dठ-परिà¤\9aय",
-       "pageinfo-language": "पानाच्या मजकूराची भाषा",
-       "pageinfo-content-model": "पान आशय नमूना",
+       "pageinfo-article-id": "पà¥\83षà¥\8dठ-à¤\93ळà¤\96ण",
+       "pageinfo-language": "पान-आशय भाषा",
+       "pageinfo-content-model": "पान-आशय नमूना",
        "pageinfo-content-model-change": "बदला",
-       "pageinfo-robot-policy": "यà¤\82तà¥\8dरमानवादà¥\8dवारà¥\87 à¤\85नà¥\81à¤\95à¥\8dरमन",
+       "pageinfo-robot-policy": "यà¤\82तà¥\8dरमानवाà¤\82दà¥\8dवारà¥\87 à¤\85नà¥\81à¤\95à¥\8dरमण",
        "pageinfo-robot-index": "अनुमती दिली",
        "pageinfo-robot-noindex": "अनुमती दिल्या जात नाही",
        "pageinfo-watchers": "पानावर पहारा देणाऱ्यांची संख्या",
+       "pageinfo-visiting-watchers": "या पानात झालेल्या अलीकडील संपादनांना पहारा देणाऱ्यांची संख्या",
        "pageinfo-few-watchers": "$1 पेक्षा कमी {{PLURAL:$1|पहारेदार}}",
        "pageinfo-redirects-name": "या पानास असलेली  पुनर्निर्देशनांची संख्या",
-       "pageinfo-subpages-name": "या à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤\89प-पान",
+       "pageinfo-subpages-name": "या à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\80 à¤\89प-पानà¥\87",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|पुनर्निर्देशन|पुनर्निर्देशने}}; $3 {{PLURAL:$3|अ-पुनर्निर्देशन|अ-पुनर्निर्देशने}})",
-       "pageinfo-firstuser": "पà¥\83षà¥\8dठ à¤¨à¤¿à¤°à¥\8dमानक",
+       "pageinfo-firstuser": "पà¥\83षà¥\8dठ à¤¨à¤¿à¤°à¥\8dमाणक",
        "pageinfo-firsttime": "पान निर्मितीचा दिनांक",
        "pageinfo-lastuser": "अलीकडील संपादक",
        "pageinfo-lasttime": "अलीकडिल संपादनाचा दिनांक",
        "pageinfo-edits": "एकूण संपादने",
        "pageinfo-authors": "सुस्पष्ट-लेखकांची एकुण संख्या",
-       "pageinfo-recent-edits": "सध्याची संपादनसंख्या (मागील $1 मध्ये)",
+       "pageinfo-recent-edits": "सध्याची संपादनसंख्या (मागील $1)",
        "pageinfo-recent-authors": "सुस्पष्ट लेखकांची सध्या असलेली संख्या",
        "pageinfo-magic-words": "जादुई {{PLURAL:$1|शब्द}} ($1)",
        "pageinfo-hidden-categories": "लपविलेले {{PLURAL:$1|वर्ग}} ($1)",
        "pageinfo-category-pages": "पानांची संख्या",
        "pageinfo-category-subcats": "उपवर्गांची संख्या",
        "pageinfo-category-files": "संचिकांची संख्या",
+       "pageinfo-user-id": "सदस्य ओळखण",
        "markaspatrolleddiff": "टेहळणी केल्याची खूण करा",
        "markaspatrolledtext": "या पानावर गस्त झाल्याची खूण करा",
        "markaspatrolledtext-file": "या संचिकेच्या आवृत्तीस गस्त घातली म्हणून् खूण करा",
        "watchlistedit-raw-done": "तुमची पहाऱ्याची सूची परिष्कृत करण्यात आली आहे.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 शीर्षक होते |$1 शीर्षक होती }} भर घातली:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 शीर्षक होते |$1 शीर्षक होती }} वगळले:",
-       "watchlistedit-clear-title": "निरà¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80 à¤¸à¤¾à¤« à¤\95à¥\87लà¥\80",
+       "watchlistedit-clear-title": "निरà¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80 à¤¸à¤¾à¤« à¤\95रा",
        "watchlistedit-clear-legend": "निरीक्षणसूची साफ करा",
-       "watchlistedit-clear-explain": "à¤\86पलà¥\8dया à¤¨à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80तà¥\80ल à¤¸à¤°à¥\8dव à¤¶à¤¿à¤°à¥\8dषà¤\95 à¤¹à¤\9fविलà¥\8dया à¤\9cातà¥\80ल.",
+       "watchlistedit-clear-explain": "आपल्या निरीक्षणसूचीतील सर्व शिर्षक हटविल्या जातील.",
        "watchlistedit-clear-titles": "शिर्षके:",
        "watchlistedit-clear-submit": "निरीक्षणसूची साफ करा(हे कायमस्वरुपी आहे!)",
        "watchlistedit-clear-done": "तुमची पहाऱ्याची सूची स्वच्छ करण्यात आली आहे.",
        "feedback-useragent": "सदस्य प्रतिनीधी:",
        "searchsuggest-search": "शोधा {{SITENAME}}",
        "searchsuggest-containing": ".......हे असलेले",
-       "api-error-badaccess-groups": "आपणास ह्या विकिवर संचिका चढवण्याची परवानगी नाही",
        "api-error-badtoken": "अंतर्गत चूक: अयोग्य टोकन",
-       "api-error-copyuploaddisabled": "या विदागारावर 'संकेतस्थळावरील संचिका चढविणे' अक्षम करण्यात आले आहे.",
-       "api-error-duplicate": "{{PLURAL:$1|दुसरी संचिका|दुसऱ्या इतर संचिका}}ही याच नावाने व याच आशयासह संकेतस्थळावर आहेत.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|दुसरी संचिका|दुसऱ्या इतर संचिका}}ही याच नावाने व याच आशयासह संकेतस्थळावर आहे परंतु{{PLURAL:$1|ते वगळल्या गेले|ती वगळल्या गेलीत}}",
-       "api-error-empty-file": "तुम्ही प्रस्तुत केलेली संचिका रिकामी होती.",
        "api-error-emptypage": "नवीन आणि मोकळी पाने बनवायला परवानगी नाही",
-       "api-error-fetchfileerror": "अंतर्गत चूक: फाइल मिळवतांना काहीतरी चूक झाली आहे",
-       "api-error-fileexists-forbidden": "\"$1\" या नावाची संचिका पूर्वीच उपलब्ध आहे व त्यावर पुनर्लेखन करता येऊ शकत नाही.",
-       "api-error-fileexists-shared-forbidden": "\"$1\" या नावाची संचिका, 'सहभागी संचिका भांडारात' पूर्वीच उपलब्ध आहे,व त्यावर पुनर्लेखन करता येऊ शकत नाही.",
-       "api-error-file-too-large": "तुम्ही प्रस्तुत केलेली संचिका आकाराने खूप मोठी होती.",
-       "api-error-filename-tooshort": "संचिकेचे नाव खूपच छोटे आहे.",
-       "api-error-filetype-banned": "याप्रकारची संचिका प्रतिबंधित आहे.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|हा परवानगी नसलेला  संचिका-प्रकार आहे|या परवानगी नसलेल्या संचिका-प्रकार आहेत}}. $2 {{PLURAL:$3|हा परवानगी असलेला संचिका-प्रकार आहे|या परवानगी असलेल्या संचिका-प्रकार आहेत}}.",
-       "api-error-filetype-missing": "या संचिकेस विस्तार(एक्सटेंशन) नाही.",
-       "api-error-hookaborted": "तुम्ही केलेला बदल extension ने उलटवला आहे",
-       "api-error-http": "अंतर्गत त्रुटी: सर्व्हरशी जोडणी होऊ शकली नाही.",
-       "api-error-illegal-filename": "हे संचिकानाम प्रतिबंधित आहे.",
-       "api-error-internal-error": "अंतर्गत त्रुटी:आपण विकिवर चढविलेल्या संचिकेवर प्रक्रिया करतांना काहीतरी चुकले आहे.",
-       "api-error-invalid-file-key": "अंतर्गत त्रुटी: तात्पुरत्या साठवणीत संचिका सापडली नाही.",
-       "api-error-missingparam": "अंतर्गत चूक: मागणीतील काही नोंदी राहून गेल्या आहेत",
-       "api-error-missingresult": "आंतरिक त्रुटी : प्रत यशस्वी झाली की नाही हे ठरवता  येत नाही",
-       "api-error-mustbeloggedin": "संचिका चढविण्यासाठी आपण दाखल होणे जरुरी आहे.",
-       "api-error-mustbeposted": "अंतर्गत चूक: मागणी पूर्ण करण्यासाठी HTTP POST असायला हवे",
-       "api-error-noimageinfo": "डाटा अपलोड यशस्वी झाले आहे पण सर्व्हर कडून तशी माहिती अजून मिळाली नाही",
-       "api-error-nomodule": "अंतर्गत चूक: module set चढवलेला नाही",
-       "api-error-ok-but-empty": "आंतरिक त्रुटी : विदादाता प्रतिक्रिया देत नहीं",
-       "api-error-overwrite": "अस्तित्वात असलेल्या संचिकेवर पुनर्लेखन प्रतिबंधित आहे.",
-       "api-error-ratelimited": "आपण, हा विकी परवानगी देत असल्यापेक्षा अधिक संचिका, कमी कालावधीत अपभारणाचा प्रयत्न करीत आहात.\nकाही मिनिटांनी पुन्हा प्रयत्न करा.",
-       "api-error-stashfailed": "इन्तरिक त्रुटी : विदादाता तात्पुरत्या स्वरूपाच्या संचिका जमा करण्यात अयशस्वी",
        "api-error-publishfailed": "अंतर्गत त्रुटी:विदादात्यास, या तात्पुरत्या संचिकेच्या प्रकाशनास अपयश आले.",
-       "api-error-stasherror": "स्टॅचमध्ये ही संचिका अपभारणात त्रुटी आली.",
-       "api-error-timeout": "अपेक्षित वेळेत विदागार (server)ने प्रतिसाद दिला नाही.",
-       "api-error-unclassified": "एक अज्ञात चूक उद्भवली.",
-       "api-error-unknown-code": "अज्ञात त्रुटी: \"$1\"",
-       "api-error-unknown-error": "अंतर्गत त्रुटी:आपली संचिका चढवितांना काहीतरी चुकले आहे.",
+       "api-error-stashfailed": "इन्तरिक त्रुटी : विदादाता तात्पुरत्या स्वरूपाच्या संचिका जमा करण्यात अयशस्वी",
        "api-error-unknown-warning": "अज्ञात इशारा : $1",
        "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|तासापूर्वी|तासांपूर्वी}}",
index 1647067..802933e 100644 (file)
        "view-foreign": "$1 တွင် ကြည့်ရန်",
        "edit": "ပြင်ဆင်ရန်",
        "create": "စတင်ရေးသားရန်",
+       "create-local": "ဒေသတွင်း ဖော်ပြချက် ထည့်ရန်",
        "editthispage": "ဤစာမျက်နှာကို ပြင်ရန်",
        "create-this-page": "ဤစာမျက်နှာကို စတင်ရေးသားရန်",
        "delete": "ဖျက်​ပါ​",
        "retypenew": "စကားဝှက် အသစ်ကို ထပ်ရိုက်ပါ -",
        "resetpass_submit": "စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန်",
        "changepassword-success": "သင့်စကားဝှက်ကို ပြောင်းလဲပြီးပါပြီ!",
+       "botpasswords": "ဘော့ စကားဝှက်များ",
        "botpasswords-label-appid": "ဘော့အမည်-",
        "botpasswords-label-create": "ဖန်တီး",
        "botpasswords-label-cancel": "မလုပ်တော့ပါ",
        "searchall": "အားလုံး",
        "showingresults": "№<strong>$2</strong> နှင့်စသော ရလဒ် {{PLURAL:$1|<strong>1</strong> ခု|<strong>$1</strong> ခု}}ထိကို အောက်တွင် ပြထားသည်။",
        "showingresultsinrange": "№<strong>$2</strong> မှ #<strong>$3</strong> အထိ ရလဒ် {{PLURAL:$1|<strong>1</strong> ခု|<strong>$1</strong> ခု}}ထိကို အောက်တွင် ပြထားသည်။",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> ၏ <strong>$1</strong> ရလဒ်|<strong>$3</strong> ၏ <strong>$1 - $2</strong> ရလဒ်များ}}",
        "search-nonefound": "စုံစမ်းမှုနှင့်ကိုက်ညီသော ရလဒ်မရှိပါ။",
        "powersearch-legend": "အထူးပြု ရှာဖွေရန်",
        "powersearch-ns": "အမည်ညွှန်းတို့တွင် ရှာရန် -",
        "recentchanges-label-bot": "ဤတည်းဖြတ်မှုကို ဘော့က လုပ်ဆောင်သွားသည်။",
        "recentchanges-label-unpatrolled": "ဤတည်းဖြတ်မှုကို မစောင့်ကြပ်မစစ်ဆေးရသေးပါ",
        "recentchanges-label-plusminus": "စာမျက်နှာ အရွယ်အစားမှာ အောက်ပါ ဘိုက်ပမာဏ ပြောင်းလဲသွားခဲ့သည်",
+       "recentchanges-legend-heading": "<strong>အညွှန်း:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|စာမျက်နှာသစ်များ စာရင်း]]ကိုလည်း ကြည့်ရန်)",
        "recentchanges-submit": "ပြသရန်",
        "rcnotefrom": "အောက်ပါတို့မှာ <strong>$3၊ $4</strong> မှစ၍ {{PLURAL:$5|ပြောင်းလဲမှု|ပြောင်းလဲမှုများ}} ဖြစ်သည်  (<strong>$1</strong> အထိ ပြထား)။",
        "download": "ဒေါင်းလုဒ်",
        "unwatchedpages": "မစောင့်ကြည့်တော့သော စာမျက်နှာများ",
        "listredirects": "ပြန်ညွှန်းသည့် လင့်များစာရင်း",
+       "listduplicatedfiles": "ထပ်တူပုံပွားဖိုင်များ စာရင်း",
        "unusedtemplates": "မသုံးသော တမ်းပလိတ်များ",
        "unusedtemplateswlh": "အခြားလိပ်စာများ",
        "randompage": "ကျ​ပန်း​စာ​မျက်​နှာ​",
+       "randomincategory": "ကဏ္ဍတွင်းရှိ ကျပန်း စာမျက်နှာ",
        "randomincategory-category": "ကဏ္ဍ:",
        "randomredirect": "ကျပန်းပြန်ညွှန်း",
        "randomredirect-nopages": "အမည်ညွှန်း \"$1\" တွင် ပြန်ညွှန်းမရှိပါ။",
        "listgrouprights-addgroup-self-all": "အုပ်စုအားလုံးကို မိမိ၏အကောင့်သို့ ပေါင်းထည့်ရန်",
        "listgrouprights-removegroup-self-all": "မိမိ၏အကောင့်မှ အုပ်စုအားလုံးကို ဖယ်ရှားရန်",
        "trackingcategories": "နောက်ယောင်ခံ ကဏ္ဍများ",
+       "trackingcategories-msg": "နောက်ယောင်ခံ ကဏ္ဍ",
        "mailnologin": "ပို့ရန်လိပ်စာ မရှိပါ",
        "emailuser": "ဤ​အ​သုံး​ပြု​သူ​အား​ အီး​မေး​ပို့​ပါ​",
        "emailuser-title-target": "{{GENDER:$1|အသုံးပြုသူ}}ကို အီးမေးပို့ရန်",
        "invert": "ရွေးချယ်ထားခြင်းကို ပြောင်းပြန်လှန်ရန်",
        "tooltip-invert": "ဤအကွက်ကို အမှန်ခြစ်၍ ရွေးချယ်ထားသော အမည်ညွှန်း (နှင့် ဆက်စပ်အမည်ညွှန်း)တွင် ပြောင်းလဲမှုများကို ဝှက်ပါ။",
        "namespace_association": "ဆက်စပ်နေသော အမည်ညွှန်း",
+       "tooltip-namespace_association": "ရွေးချယ်ထားသည့် အမည်ညွှန်းနှင့် ဆက်စပ်နေသည့် ဆွေးနွေးချက် သို့မဟုတ် အကြောင်းအရာ အမည်ညွှန်း ပါဝင်စေရန် ဤအကွက်တွင် အမှန်ခြစ်ရန်",
        "blanknamespace": "(ပင်မ)",
        "contributions": "{{GENDER:$1|အသုံးပြုသူ}}၏ ဆောင်ရွက်ချက်များ",
        "contributions-title": "$1 အတွက် အသုံးပြုသူ၏ ဆောင်ရွက်ချက်များ",
        "show-big-image": "မူရင်းဖိုင်",
        "show-big-image-preview": "ဤနမူနာ၏ အရွယ်အစား - $1။",
        "show-big-image-other": "အခြား {{PLURAL:$2|ပုံရိပ်ပြတ်သားမှု|ပုံရိပ်ပြတ်သားမှု}}: $1။",
+       "show-big-image-size": "$1 × $2 ပစ်ဇယ်",
        "newimages": "ပုံအသစ်များပြခန်း",
        "newimages-legend": "စိစစ်မှု",
        "newimages-label": "ဖိုင်အမည် (သို့ ယင်း၏အစိတ်အပိုင်း) -",
        "exif-usercomment": "အသုံးပြုသူ မှတ်ချက်များ",
        "exif-relatedsoundfile": "ဆက်နွယ်သော အသံဖိုင်",
        "exif-datetimeoriginal": "ဒေတာဖန်တီးခဲ့သော နေ့စွဲနှင့် အချိန်",
+       "exif-datetimedigitized": "ဒီဂျစ်တယ်ပြောင်းသည့် နေ့ရက်နှင့် အချိန်",
        "exif-exposuretime-format": "$1 စက္ကန့် ($2)",
        "exif-shutterspeedvalue": "APEX ရှပ်တာ အမြန်နှုန်း",
        "exif-flash": "ဖလက်ရှ်",
        "fileduplicatesearch-filename": "ဖိုင်အမည် -",
        "fileduplicatesearch-submit": "ရှာဖွေရန်",
        "specialpages": "အ​ထူး ​စာ​မျက်​နှာ​များ",
+       "specialpages-note": "* ပုံမှန် အထူးစာမျက်နှာများ။\n* <span class=\"mw-specialpagerestricted\">ကန့်သတ်ထားသော အထူးစာမျက်နှာများ။</span>",
        "specialpages-group-maintenance": "ထိန်းသိမ်းမှု အစီရင်ခံချက်များ",
        "specialpages-group-other": "အခြားအထူးစာမျက်နှာများ",
        "specialpages-group-login": "Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန်",
        "revdelete-unrestricted": "အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်",
        "logentry-suppress-block": "{{GENDER:$4|$3}} အား $5 ကြာအောင် $1 က {{GENDER:$2|ပိတ်ပင်ခဲ့သည်}} $6",
        "logentry-move-move": "$3 စာမျက်နှာကို $4 သို့ $1က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
-       "logentry-move-move-noredirect": "$3 á\80\99á\80¾ $4 á\80\9eá\80­á\80¯á\80· á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\80á\80­á\80¯ á\80\95á\80¼á\80\94á\80ºá\80\8aá\80½á\80¾á\80\94á\80ºá\80¸á\80\81á\80»á\80\94á\80ºá\80\99á\80\91á\80¬á\80¸á\80\95ဲ $1 {{GENDER:$2|က ရွှေ့ခဲ့သည်}}",
+       "logentry-move-move-noredirect": "$3 á\80\99á\80¾ $4 á\80\9eá\80­á\80¯á\80· á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\80á\80­á\80¯ á\80\95á\80¼á\80\94á\80ºá\80\8aá\80½á\80¾á\80\94á\80ºá\80¸á\80\81á\80»á\80\94á\80ºá\80\99á\80\91á\80¬á\80¸á\80\98ဲ $1 {{GENDER:$2|က ရွှေ့ခဲ့သည်}}",
        "logentry-move-move_redir": "$3 စာမျက်နှာကို $4 သို့ ပြန်ညွှန်းပေါ်ထပ်၍ $1 က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
+       "logentry-move-move_redir-noredirect": "$3 မှ $4 သို့ ပြန်ညွှန်ပေါ်ထပ်အုပ်ကာ ပြန်ညွှန်းချန်မထားဘဲ $1 က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
        "logentry-newusers-create": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-newusers-autocreate": "အသုံးပြုသူအကောင့် $1 ကို အလိုအလျောက် {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-upload-upload": "$1 သည် $3 ကို {{GENDER:$2|upload တင်ခဲ့သည်}}",
        "rightsnone": "(ဘာမှမရှိ)",
        "revdelete-summary": "အကျဉ်းချုပ်ကို တည်းဖြတ်ရန်",
        "searchsuggest-search": "{{SITENAME}} တွင် ရှာဖွေရန်",
-       "api-error-filename-tooshort": "ဖိုင်အမည်သည် တိုလွန်းသည်။",
-       "api-error-filetype-banned": "ဤဖိုင်အမျိုးအစားကို တားမြစ်ထားသည်။",
-       "api-error-http": "အတွင်းပိုင်းအမှား - ဆာဗာကို မဆက်သွယ်နိုင်ပါ။",
-       "api-error-illegal-filename": "ဖိုင်အမည်ကို ခွင့်မပြုပါ။",
-       "api-error-mustbeloggedin": "ဖိုင်တင်ရန် login ဝင်ထားရမည်။",
-       "api-error-ok-but-empty": "အတွင်းပိုင်းအမှား - ဆာဗာထံမှ တုံ့ပြန်မှု မရပါ။",
-       "api-error-unknown-code": "အမည်မသိ အမှား - \"$1\"",
        "api-error-unknown-warning": "အမည်မသိ သတိပေးချက် - $1",
-       "api-error-uploaddisabled": "ဤဝီကီတွင် ဖိုင်တင်ခြင်း ပိတ်ထားသည်။",
-       "api-error-verification-error": "ဖိုင်ပျက်နေသည် (သို့) ဖိုင်နောက်ဆက် extension မှားနေသည်။",
        "pagelanguage": "စာမျက်နှာ ဘာသာစကား ပြောင်းလဲရန်",
        "pagelang-name": "စာမျက်နှာ",
        "pagelang-language": "ဘာသာစကား",
index 58efd6f..ecff7b5 100644 (file)
@@ -15,7 +15,7 @@
                        "Akapochtli"
                ]
        },
-       "tog-underline": "Mokìnxòîkuilòtzàswis tzòwilistìn:",
+       "tog-underline": "Moquinxoihcuilotzazhuiz tzohuiliztin:",
        "tog-hideminor": "Motlàtìs tepỉtzìn tlayèktlàlilistli ìpan welok tlapảtlalistli",
        "tog-hidepatrolled": "Motlàtìs tlapîpialli tlayèktlàlilistli ìpan welok tlapảtlalistli",
        "tog-newpageshidepatrolled": "Mokintlàtis tlapîpialtlaìxtlapaltìn ìwikpa ìtlapòpòwaltekpànal in yâyankuik tlaìxtlapaltìn",
        "category-subcat-count-limited": "Inin {{PLURAL:$1|neneuhcayotl quipiya|$1 in tetoquilli tlani-neneuhcayotl|in tetoquiltin tlani-neneuhcayomeh}}.",
        "category-article-count": "{{PLURAL:$2|Inin neneuhcayotl zan quipiya in tetoquilli tlahcuilolli.|{{PLURAL:$1|In tetoquilli tlahcuilolli itech pohui|In tetoquiltin $1 tlahcuiloltin itech pohui}}, inin neneuhcayotl itech tlacecempohualoni ipan $2.}}",
        "category-article-count-limited": "Inīn {{PLURAL:$1|zāzanilli cah|$1 zāzanilli cateh}} inīn neneuhcāyōc.",
-       "category-file-count": "{{PLURAL:$2|Inìn tlaìxmatkàyòtlàlilòtl san kipia|Inìn tlaìxmatkàyòtlalilòtl kimpia {{PLURAL:$1|inìn èwalli|inîke $1 èwaltìn}}, ìwikpa $2.}}",
+       "category-file-count": "{{PLURAL:$2|Inin neneuhcayotl zan quipiya|Inin neneuhcayotl quimpiya {{PLURAL:$1|inin ehualli|inihqueh $1 ehualtin}}, ihuicpa $2.}}",
        "category-file-count-limited": "{{PLURAL:$1|Inin tlahcuilolehualli kah|Inihqueh $1 tlahcuilolehualtin catehqueh}} ipan inin neneuhcayotl.",
        "listingcontinuesabbrev": "niman",
        "about": "Itechcopa",
        "prefs-resetpass": "Ticpatlāz motlahtōlichtacāyo",
        "saveprefs": "Xicpiya",
        "prefs-editing": "Tlapatlaliztli",
-       "rows": "Pāntli:",
        "searchresultshead": "Tlatemoliztli",
        "recentchangesdays": "Tōnaltin tiquinttāz yancuīc tlapatlalizpan:",
        "localtime": "Cāhuitl nicān:",
        "withoutinterwiki": "Zāzaniltin ahtle tzonhuiliztli",
        "withoutinterwiki-submit": "Tiquittāz",
        "nbytes": "$1 {{PLURAL:$1|byte}}",
-       "ncategories": "$1 {{PLURAL:$1|tlaìxmatkàyòtlàlilòtl|tlaìxmatkàyòtlàlilòme}}",
+       "ncategories": "$1 {{PLURAL:$1|neneuhcayotl|neneuhcayomeh}",
        "nlinks": "$1 {{PLURAL:$1|tzohuililiztli|tzohuililiztin}}",
        "nmembers": "$1 {{PLURAL:$1|tlahcuilolamatl|tlahcuilolamameh}}",
        "nrevisions": "$1 {{PLURAL:$1|tlapiyaliztli}}",
        "rightsnone": "ahtlein",
        "revdelete-summary": "ticpatlāz tlahcuilōltōn",
        "searchsuggest-search": "Tlatemoliztli",
-       "api-error-ok-but-empty": "Tlâtek îtlakawilistli: Âmò tènankilia in tlatèmakani.",
-       "api-error-overwrite": "Awel motlâkuilnepanòltis sè èwalli tlèn yi katki.",
        "api-error-stashfailed": "Tlâtek îtlakawilistli: In tlatèmakani awel òkeuh in èwalpanòni.",
-       "api-error-timeout": "In tlatèmakani âmò òwalnàwat kèn òmochìxtikatka.",
-       "api-error-unclassified": "Òpanòk sè âmò ìxmatkàyo îtlakawilistli.",
-       "api-error-unknown-code": "Âmò ìxmatkàyo îtlakawilistli: \"$1\".",
-       "api-error-unknown-error": "Tlâtek îtlakawilistli: Îtlâtlèn òîtlakauh îkuàk òmonekià motilànas in èwalli.",
        "api-error-unknown-warning": "Âmò ìxmatkàyo tlanawatilistli: \"$1\".",
        "api-error-unknownerror": "Âmò ìxmatkàyo îtlakawilistli: \"$1\".",
-       "api-error-uploaddisabled": "Sèuhtok in êkawilistli ìpan inìn wiki.",
-       "api-error-verification-error": "Inìn èwalli welis îtlakauhtok, noso âmò kualli motzòwîtok.",
        "expand_templates_ok": "Cayecualli",
        "expand_templates_preview": "Xiquitta achtochīhualiztli",
        "special-characters-group-latin": "Latintlahcuilolli",
index 80f0207..ca6ace5 100644 (file)
        "rcfilters-invalid-filter": "Ugyldig filter",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-filterlist-noresults": "Ingen filtre funnet",
+       "rcfilters-filtergroup-registration": "Brukerregistrering",
+       "rcfilters-filter-registered-label": "Registrerte",
+       "rcfilters-filter-registered-description": "Innloggede brukere.",
+       "rcfilters-filter-unregistered-label": "Uregistrerte",
+       "rcfilters-filter-unregistered-description": "Brukere som ikke er logget inn.",
        "rcfilters-filtergroup-authorship": "Redigeringens forfatter",
        "rcfilters-filter-editsbyself-label": "Dine egne redigeringer",
        "rcfilters-filter-editsbyself-description": "Redigeringer gjort av deg.",
        "rcfilters-filter-editsbyother-label": "Redigeringer av andre",
        "rcfilters-filter-editsbyother-description": "Redigeringer som er gjort av andre brukere enn deg.",
-       "rcfilters-filtergroup-userExpLevel": "Brukererfaringsnivå",
+       "rcfilters-filtergroup-userExpLevel": "Erfaringsnivå (kun for registrerte brukere)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Nykommere",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Veldig nye bidragsytere: Færre enn 10 redigeringer og 4 dagers aktivitet.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Færre enn 10 redigeringer og 4 dagers aktivitet.",
        "rcfilters-filter-userExpLevel-learner-label": "Nybegynnere",
        "rcfilters-filter-userExpLevel-learner-description": "Flere dagers aktivitet enn «Nykommere», men mindre enn «Erfarne brukere».",
        "rcfilters-filter-userExpLevel-experienced-label": "Erfarne brukere",
        "rcfilters-filter-userExpLevel-experienced-description": "Mer enn 30 dagers aktivitet og 500 redigeringer.",
+       "rcfilters-filtergroup-automated": "Automatiske bidrag",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Redigeringer gjort med automatiske verktøy.",
+       "rcfilters-filter-humans-label": "Menneske (ikke bot)",
+       "rcfilters-filter-humans-description": "Redigeringer gjort av menneskelige brukere.",
+       "rcfilters-filtergroup-significance": "Betydning",
+       "rcfilters-filter-minor-label": "Mindre endringer",
+       "rcfilters-filter-minor-description": "Redigeringer merket som mindre av brukeren.",
+       "rcfilters-filter-major-label": "Ikke-mindre endringer",
+       "rcfilters-filter-major-description": "Redigeringer som ikke er merket som mindre.",
+       "rcfilters-filtergroup-changetype": "Type endring",
+       "rcfilters-filter-pageedits-label": "Sideredigeringer",
+       "rcfilters-filter-pageedits-description": "Redigeringer til wikiinnhold, diskusjoner, kategoribeskrivelser ...",
+       "rcfilters-filter-newpages-label": "Sideopprettelser",
+       "rcfilters-filter-newpages-description": "Redigeringer som oppretter nye sider.",
+       "rcfilters-filter-categorization-label": "Kategoriendringer",
+       "rcfilters-filter-categorization-description": "Sporer sider som legges til i eller fjernes fra kategorier.",
+       "rcfilters-filter-logactions-label": "Loggførte handlinger",
+       "rcfilters-filter-logactions-description": "Administrative handlinger, kontoopprettelser, sideslettinger, opplastinger ...",
        "rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden <strong>$3, $4</strong> (frem til <strong>$1</strong>).",
        "rclistfrom": "Vis nye endringer fra og med $3 $2",
        "rcshowhideminor": "$1 mindre endringer",
        "apisandbox-sending-request": "Sender API-forespørsel...",
        "apisandbox-loading-results": "Mottar API-resultater...",
        "apisandbox-results-error": "En feil oppsto under lasting av API-spørringssvaret: $1.",
-       "apisandbox-request-params-json": "JSON-parametre:",
        "apisandbox-request-url-label": "Forespurt URL:",
        "apisandbox-request-time": "Forespørselstid: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Fiks nøkkelen og send på nytt",
        "htmlform-user-not-exists": "<strong>$1</strong> eksisterer ikke.",
        "htmlform-user-not-valid": "<strong>$1</strong> er ikke et gyldig brukernavn.",
        "logentry-delete-delete": "$1 {{GENDER:$2|slettet}} siden $3",
-       "logentry-delete-delete_redir": "$1 {{GENDER:$2|slettet}} omdirigeringen $3 ved å overskrive",
+       "logentry-delete-delete_redir": "$1 {{GENDER:$2|sletta}} omdirigeringa $3 gjennom overskriving",
        "logentry-delete-restore": "$1 {{GENDER:$2|gjenopprettet}} siden $3",
        "logentry-delete-event": "$1 {{GENDER:$2|endret}} synligheten av {{PLURAL:$5|en logghendelse|$5 logghendelser}} på $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|endret}} synligheten av {{PLURAL:$5|en revisjon|$5 revisjoner}} på side $3: $4",
        "feedback-useragent": "Brukeragent",
        "searchsuggest-search": "Søk i {{SITENAME}}",
        "searchsuggest-containing": "inneholder …",
-       "api-error-autoblocked": "Din IP-adresse har blitt blokkert automatisk fordi den ble brukt av en blokkert bruker.",
-       "api-error-badaccess-groups": "Du har ikke tillatelse til å laste opp filer til denne wikien.",
        "api-error-badtoken": "Intern feil: Ugyldig nøkkel.",
-       "api-error-blocked": "Du har blitt blokkert fra å redigere.",
-       "api-error-copyuploaddisabled": "Opplasting ved URL er deaktivert på denne tjeneren.",
-       "api-error-duplicate": "Det er allerede {{PLURAL:$1|en annen fil|flere andre filer}} på denne siden med samme innhold.",
-       "api-error-duplicate-archive": "Det fantes {{PLURAL:$1|en annen fil|noen andre filer}} på siden som hadde samme innhold, men {{PLURAL:$1|den|de}} ble slettet.",
-       "api-error-empty-file": "Filen du sendte inn var tom.",
        "api-error-emptypage": "Det er ikke tillatt å opprette nye, tomme sider.",
-       "api-error-fetchfileerror": "Intern feil: Noe gikk galt ved henting av denne filen.",
-       "api-error-fileexists-forbidden": "En fil med navnet «$1» finnes allerede, og kan ikke overskrives.",
-       "api-error-fileexists-shared-forbidden": "En fil med navnet «$1» finnes allerede i det delte filsystemet, og kan ikke overskrives.",
-       "api-error-file-too-large": "Filen du la inn var for stor.",
-       "api-error-filename-tooshort": "Filnavnet er for kort.",
-       "api-error-filetype-banned": "Denne filtypen er ikke tillatt.",
-       "api-error-filetype-banned-type": "{{PLURAL:$4|Filtypen|Filtypene}} $1 er ikke {{PLURAL:$4|tillatt|tillatte}}. {{PLURAL:$3|Tillatt filtype|Tillatte filtyper}} er $2.",
-       "api-error-filetype-missing": "Filen mangler filendelse.",
-       "api-error-hookaborted": "Endringen du prøvde å gjøre ble avbrutt av en utvidelsestilkobling.",
-       "api-error-http": "Intern feil: kan ikke få forbindelse til server.",
-       "api-error-illegal-filename": "Filnavnet er ikke tillatt.",
-       "api-error-internal-error": "Intern feil: Noe gikk galt ved prosessering av din opplastning til wikien.",
-       "api-error-invalid-file-key": "Intern feil: Fil ble ikke funnet i midlertidig lagerplass",
-       "api-error-missingparam": "Intern feil: Manglende parameter i forespørselen",
-       "api-error-missingresult": "Intern feil: Kan ikke bekrefte at kopieringen var vellykket.",
-       "api-error-mustbeloggedin": "Du må være logget inn for å laste opp filer.",
-       "api-error-mustbeposted": "Intern feil: forespørsel krever HTTP POST.",
-       "api-error-noimageinfo": "Opplastingen var vellykket, men tjeneren returnerte ikke noe informasjon om filen.",
-       "api-error-nomodule": "Intern feil: ingen opplastningsmodul har blitt valgt.",
-       "api-error-ok-but-empty": "Intern feil: ingen svar fra server.",
-       "api-error-overwrite": "Det er ikke tillatt å overskrive eksisterende filer.",
-       "api-error-ratelimited": "Du prøver å laste opp flere filer enn wikien tillater i et kort tidsrom.\nPrøv igjen om noen minutter.",
-       "api-error-stashfailed": "Internal error: tjeneren greide ikke å lagre midlertidig fil.",
        "api-error-publishfailed": "Intern feil: Tjeneren greide ikke å publisere midlertidig fil.",
-       "api-error-stasherror": "Det oppstod en feil mens filen ble lastet opp til stash.",
-       "api-error-stashedfilenotfound": "Den temporære filen ble ikke funnet ved forsøk på å laste den opp fra lageret.",
-       "api-error-stashpathinvalid": "Stien som den temporære filen skulle vært funnet via var ugyldig.",
-       "api-error-stashfilestorage": "Det oppsto en feil når filen skulle lastes opp til lageret.",
-       "api-error-stashzerolength": "Tjenermaskinen kunne i lagre den temporære filen fordi den hadde null lengde.",
-       "api-error-stashnotloggedin": "Du må være innlogget for å lagre filene i opplastingslageret.",
-       "api-error-stashwrongowner": "Filen du prøvde å få tilgang til tilhører ikke deg.",
-       "api-error-stashnosuchfilekey": "Filnøkkelen du prøvde å få tilgang til finnes ikke.",
-       "api-error-timeout": "Tjeneren svarte ikke innenfor forventet tid.",
-       "api-error-unclassified": "En ukjent feil har oppstått",
-       "api-error-unknown-code": "Ukjent feil: \"$1\"",
-       "api-error-unknown-error": "Intern feil: Noe gikk galt ved opplastning av filen din.",
+       "api-error-stashfailed": "Internal error: tjeneren greide ikke å lagre midlertidig fil.",
        "api-error-unknown-warning": "Ukjent advarsel: «$1».",
        "api-error-unknownerror": "Ukjent feil: «$1».",
-       "api-error-uploaddisabled": "Opplastning har blitt deaktivert på denne wikien.",
-       "api-error-verification-error": "Filen kan være korrupt, eller ha feil filendelse.",
-       "api-error-was-deleted": "En fil med dette navnet har tidligere blitt lastet opp og senere slettet.",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunder}}",
        "duration-minutes": "$1 {{PLURAL:$1|minutt|minutter}}",
        "duration-hours": "$1 {{PLURAL:$1|time|timer}}",
        "usercssispublic": "Merk: CSS-undersidene bør ikke inneholde konfidensielle data siden de kan ses av andre brukere.",
        "restrictionsfield-badip": "Ugyldig IP-adresse eller intervall: $1",
        "restrictionsfield-label": "Tillatte IP-intervaller:",
-       "restrictionsfield-help": "Én IP-adresse eller CIDR-intervall per linje. For å slå på alt, bruk <br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
+       "restrictionsfield-help": "Én IP-adresse eller CIDR-intervall per linje. For å slå på alt, bruk: <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisjon $1",
        "pageid": "side-ID $1"
 }
index f5f497e..96c4c7a 100644 (file)
        "viewpagelogs": "यस पृष्ठका लगहरू हेर्नुहोस्",
        "nohistory": "यस पृष्ठको लागी कुनै सम्पादन इतिहास छैन।",
        "currentrev": "हालको संस्करण",
-       "currentrev-asof": "$1à¤\95à¥\8b à¤°à¥\81पमा à¤¹à¤¾à¤²à¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81",
+       "currentrev-asof": "$1à¤\95à¥\8b à¤°à¥\81पमा à¤¹à¤¾à¤²à¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82",
        "revisionasof": "$1 जस्तै गरी पुनरावलोकन",
        "revision-info": "{{GENDER:$6|$2}}$7 द्वारा $1को संशोधन",
        "previousrevision": "← पुरानो संशोधन",
        "rev-suppressed-text-view": "यस पृष्ठको पुनरावलोकन <strong>थिचिएको छ</strong>।\nप्रबन्धकको हैसियतले हेर्न सक्नुहुन्छ; [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को थिचिएको लगमा विवरण पाउन सकिन्छ]",
        "rev-deleted-no-diff": "तपाईंले यसको भिन्नता पाउन सक्नुहुन्न किनभने यस पृष्ठको पुनरावलोकन <strong>मेटाइएको छ</strong>'।\nयसको विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटाइएको लगमा पाउन सक्नुहुन्छ]।",
        "rev-suppressed-no-diff": "तपाईं यसको भिन्नता हेर्न सक्नुहुन्न किनभने यसको एउटा संशोधन <strong>मेटाइएको</strong>छ।",
-       "rev-deleted-unhide-diff": "यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 मध्ये एउटा भिन्नता <strong>मेटाइएकोछ</strong>।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटाइएको लगमा पाउन सकिन्छ]।\nयदि चाहनु भयो भने प्रवन्धकको हैसियतले [यो भिन्नता $1] हेर्न सक्नुहुन्छ।",
-       "rev-suppressed-unhide-diff": "यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 मध्ये एउटा भिन्नता <strong>थिचिएको छ</strong>।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/suppress|पृष्ठ={{FULLPAGENAMEE}}}}को थिचिएको लगमा पाउन सकिन्छ]।\nयदि चाहनु भयो भने प्रबन्धकको हैसियतमा [यो भिन्नता $1] हेर्न सक्नुहुन्छ।",
+       "rev-deleted-unhide-diff": "यस à¤ªà¥\83षà¥\8dठà¤\95ा à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 मध्ये एउटा भिन्नता <strong>मेटाइएकोछ</strong>।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटाइएको लगमा पाउन सकिन्छ]।\nयदि चाहनु भयो भने प्रवन्धकको हैसियतले [यो भिन्नता $1] हेर्न सक्नुहुन्छ।",
+       "rev-suppressed-unhide-diff": "यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 मध्ये एउटा भिन्नता <strong>थिचिएको छ</strong>।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/suppress|पृष्ठ={{FULLPAGENAMEE}}}}को थिचिएको लगमा पाउन सकिन्छ]।\nयदि चाहनु भयो भने प्रबन्धकको हैसियतमा [यो भिन्नता $1] हेर्न सक्नुहुन्छ।",
        "rev-deleted-diff-view": "यस भिन्नताका संशोधनहरुमध्येको एउटा चाहिं <strong>मेटियो।<strong> \nतपाईंले यस भिन्नतालाई हेर्न सक्नुहुन्छ; सबै विवरण  [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} मेटाइएको लग]मा पाउन सकिनेछ।",
        "rev-suppressed-diff-view": "यस भिन्नताका संशोधनहरुमध्येको एउटा चाहिं  <strong>दबाइयो।<strong> \nतपाईंले यस भिन्नतालाई हेर्न सक्नुहुन्छ; सबै विवरण  [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} दबाइएको लग]मा पाउन सकिनेछ।",
        "rev-delundel": "दृश्यता परिवर्तन गर्ने",
        "rev-showdeleted": "देखाउनुहोस्",
-       "revisiondelete": "मà¥\87à¤\9fाà¤\89नà¥\87/मà¥\87à¤\9fाà¤\8fà¤\95à¥\8b à¤°à¤¦à¥\8dदà¤\97रà¥\8dनà¥\87  à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81",
+       "revisiondelete": "मà¥\87à¤\9fाà¤\89नà¥\87/मà¥\87à¤\9fाà¤\8fà¤\95à¥\8b à¤°à¤¦à¥\8dदà¤\97रà¥\8dनà¥\87  à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82",
        "revdelete-nooldid-title": "अमान्य पुनरावलोकन लक्ष",
        "revdelete-nooldid-text": "यस क्रियालाई गर्नको लागि तपाईंले लक्ष्य अवतरण दिनु भएको छैन, वा तपाईंले दिएको अवतरण अस्तित्वमा छैन वा तपाईं सद्य अवतरणलाई लुकाउने प्रयत्न गर्दै हुनुहुन्छ।",
        "revdelete-no-file": "खुलाइएको पृष्ठ अस्तित्वमा छैन",
        "mergehistory-merge": "[[:$1]]को निम्न अवतरण [[:$2]]मा समाविष्ट गर्न सकिनेछ।\nदिइएको समय वा त्यस भन्दा पहिले भएको अवतरणहरूलाई एकत्रित गर्नका लागि  रेडियो बटनको प्रयोग गर्नुहोस।\nन्याभिगेसन लिङ्कहरूको प्रयोग पछी यो कलम आफ्नो पुरानै स्थितिमा आउनेछ।",
        "mergehistory-go": "जोड्न मिल्ने सम्पादनहरू",
        "mergehistory-submit": "पुनरावलोकहरु जोड्नुहोस्",
-       "mergehistory-empty": "à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 जोड्न मिल्दैन ।",
+       "mergehistory-empty": "à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 जोड्न मिल्दैन ।",
        "mergehistory-done": "$3 {{PLURAL:$3|संस्करण|संस्करणहरू}}  $1बाट सफलतापूर्वक [[:$2]]मा थपियो ।",
        "mergehistory-fail": "इतिहास जोड्न सकिएन कृपया पृष्ठको नाम र समयमान जाँच गर्नुहोस्।",
        "mergehistory-fail-toobig": "इतिहास समाहित गर्न सम्भव छैन किनभने अवतरण सिमा $1 भन्दा बढी {{PLURAL:$1|अवतरण|अवतरणहरू}} लाई स्थानान्तरित गर्नु पर्छ।",
        "difference-multipage": "(पृष्ठहरूमा भिन्नता)",
        "lineno": "पंक्ति $1:",
        "compareselectedversions": "छानिएका संस्करणहरू दाँज्नुहोस्",
-       "showhideselectedversions": "à¤\9bानिà¤\8fà¤\95ा à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 देखाउने/लुकाउने",
+       "showhideselectedversions": "à¤\9bानिà¤\8fà¤\95ा à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 देखाउने/लुकाउने",
        "editundo": "रद्द गर्ने",
        "diff-empty": "(कुनै भिन्नता छैन)",
        "diff-multi-sameuser": "(यस प्रयोगकर्ताद्वारा {{PLURAL:$1|गरिएको बीचको एउटा अवतरण देखाइएन|गरिएको बीचको $1 अवतरण देखाइएन}})",
        "saveprefs": "संग्रह",
        "restoreprefs": "सबै पूर्वनिर्धारित स्थिती कायम गर्ने(सबै खण्डहरूमा)",
        "prefs-editing": "सम्पादन",
-       "rows": "हरफहरू :",
-       "columns": "स्तम्भहरू :",
        "searchresultshead": "खोज",
        "stub-threshold": "<a href=\"#\" class=\"stub\">ठूटो</a> को लागि थ्रेसहोल्ड स्वरूपण (बाइट):",
        "stub-threshold-sample-link": "उदाहरण",
        "userrights-reason": "कारण :",
        "userrights-no-interwiki": "तपाईंलाई अन्य विकिमा प्रयोगकर्ता अधिकार सम्पादन गर्ने अनुमति छैन।",
        "userrights-nodatabase": "डेटाबेस $1 उपलब्ध छैन या स्थानीय हैन।",
-       "userrights-nologin": "प्रयोगकर्ता अधिकार प्रदान गर्न तपाईंले प्रबन्धक खाताबाट [[Special:UserLogin|प्रवेश]] गर्नुपर्छ।",
-       "userrights-notallowed": "प्रयोगकर्तालाई अधिकार प्रदान गर्ने वा हटाउने अनुमति तपाईंलाई छैन।",
        "userrights-changeable-col": "तपाईंले परिवर्तन गर्न सक्ने समूहहरू",
        "userrights-unchangeable-col": "तपाईंले परिवर्तन गर्न नसक्ने समूहहरू",
        "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "प्रयोगकर्ताको अधिकार परिवर्तनमा मतभेद भयो ! कृपया तपाईंको परिवर्तन पुनरावलोकन तथा पुष्टि गर्नुहोस् ।",
-       "userrights-removed-self": "तपाईंले सफलतापूर्वक आफ्नो अधिकारहरूलाई मेटाउनु भयो । त्यस कारण तपाईं अब यो पृष्ठ हेर्न सक्नु हुन्न ।",
        "group": "समूह :",
        "group-user": "प्रयोगकर्ताहरू",
        "group-autoconfirmed": "स्वत निश्चित गरिएका प्रयोगकर्ताहरू",
        "nlinks": "$1 {{PLURAL:$1|लिंक|लिंकहरू}}",
        "nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्यहरू}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|सदस्य|सदस्यहरू}}",
-       "nrevisions": "$1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95न|पà¥\81नरावलà¥\8bà¤\95नहरà¥\81}}",
+       "nrevisions": "$1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95न|पà¥\81नरावलà¥\8bà¤\95नहरà¥\82}}",
        "nimagelinks": "$1 {{PLURAL:$1|पृष्ठ|पृष्ठहरु}}माथि प्रयोग गरिएको",
        "ntransclusions": "$1 {{PLURAL:$1पृष्ठमा प्रयोग गरिएको|पृष्ठहरूमा प्रयोग गरिएका}}",
        "specialpage-empty": "यो पृष्ठ खाली छ।",
        "restriction-level-all": "कुनै स्तर",
        "undelete": "मेटिएका पृष्ठहरू हेर्नुहोस्",
        "undeletepage": "मेटाइएका पृष्ठहरू हेर्ने अनि पुनर्स्थापित गर्ने",
-       "undeletepagetitle": "'''[[:$1|$1]]à¤\95ा à¤®à¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 यसभित्र  छन् '''।",
+       "undeletepagetitle": "'''[[:$1|$1]]à¤\95ा à¤®à¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 यसभित्र  छन् '''।",
        "viewdeletedpage": "मेटिएका पृष्ठहरू हेर्नुहोस्",
        "undeletepagetext": "निम्नलिखित {{PLURAL:$1|पृष्ठ मेटिएकोछ तर पूरालेखभित्रै छ|$1 पृष्ठ मेटिएकाछन् तर पूरालेखभित्रै छन्}} र पुनर्स्थापित गर्न सकिन्छ।\nपूरालेखको समय-समयमा सफाई गर्न सकिन्छ।",
-       "undelete-fieldset-title": "पà¥\81नरावलà¥\8bà¤\95नहरà¥\81  पूर्वावस्थामा ल्याउनुहोस्",
+       "undelete-fieldset-title": "पà¥\81नरावलà¥\8bà¤\95नहरà¥\82  पूर्वावस्थामा ल्याउनुहोस्",
        "undeleteextrahelp": "यस पृष्ठक पुरै इतिहास पूर्वरुपमा फर्काउनको लागि  छनोट सन्दुकहरुलाई नछानी '''''{{int:undeletebtn}}''''' मा क्लिक गर्नुहोस।\nअनुकुल पूर्वरुपमा फर्काउने कार्य गर्न छनौट चाहिएका संस्करणक सन्दुकहरुलाई छानेर '''''{{int:undeletebtn}}'''''मा क्लिक गर्नुहोस।",
        "undeleterevisions": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} संग्रहित",
        "undeletehistory": "यदि कुनै पृष्टलाई पुन: स्थापन गराउनु भयो भने सम्पूर्ण संस्करणहरू इतिहासमा पुन:स्थापन हुनेछन् ।\nयदि यसै नामबाट  नयाँ पृष्ठ निर्माण भैसकेको छ भने पुन: स्थापित संस्करणहरू पूर्व इतिहासको रुपमा स्थापित हुनेछन् ।",
        "undeletehistorynoadmin": "यस पृष्ठ मेटिएको छ।\nमेटिनाको कारण निम्न जानकारीहरुमा खुलाइएको छ र मेटिनु अगिका योगदानकर्ताहरुको नाम पनि \nमेटिएका पृष्ठको पूरा पाठ प्रवन्धकहरुलाई मात्र उपलब्ध हुन्छ ।",
        "undelete-revision": "$3द्वारा $1को ($4को  समय $5 मा) मेटाइएका संशोधनहरू :",
        "undeleterevision-missing": "अमान्य या मेटिएको संस्करण ।\nखराब लिन्क पनि सक्छ  या संस्करण पुन: स्थापना गरिएको या अभिलेखबाट हटाइएको हुनसक्छ ।",
-       "undelete-nodiff": "à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¥\81रानà¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 भेटिएन ।",
+       "undelete-nodiff": "à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¥\81रानà¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 भेटिएन ।",
        "undeletebtn": "पूर्वावस्थामा ल्याउनुहोस्",
        "undeletelink": "हेर्ने/पूर्वरुपमा फर्काउने",
        "undeleteviewlink": "अवलोकन",
        "import-comment": "टिप्पणी :",
        "importtext": "कृपया स्रोत विकिबाट फाइल निर्यात गर्नका लागि [[Special:Export|निर्यात सुविधा]]को प्रयोग गर्नुहोस। यसलाई आफ्नो कम्प्युटरमा सङ्ग्रह गरे यहाँ अपलोड गर्नुहोस।",
        "importstart": "पृष्ठ आयात गरिदै...",
-       "import-revision-count": "$1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95न|पà¥\81नरावलà¥\8bà¤\95नहरà¥\81}}",
+       "import-revision-count": "$1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95न|पà¥\81नरावलà¥\8bà¤\95नहरà¥\82}}",
        "importnopages": "आयातगर्नको लागि कुनै पृष्ठ छैन।",
        "imported-log-entries": "आयातित $1 {{PLURAL:$1|लग प्रविष्टी|लग प्रविष्टीहरू}}",
        "importfailed": "आयात असफल भयो :<nowiki>$1</nowiki>",
        "importlogpage": "आयात सूची",
        "importlogpagetext": "अन्य विकिहरूबाट प्रवन्धकहरूद्वारा गरिएको सम्पादन इतिहाससँग हुने पृष्ठहरूको आयात।",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} आयात भयो",
-       "import-logentry-interwiki-detail": "$2 à¤¦à¥\87à¤\96ि $1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95न|पà¥\81नरावलà¥\8bà¤\95नहरà¥\81}} आयात भयो",
+       "import-logentry-interwiki-detail": "$2 à¤¦à¥\87à¤\96ि $1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95न|पà¥\81नरावलà¥\8bà¤\95नहरà¥\82}} आयात भयो",
        "javascripttest": "JavaScript जाँच गरिदै",
        "javascripttest-pagetext-unknownaction": "अज्ञात कारवाही \"$1\" ।",
        "javascripttest-qunit-intro": "mediawiki.org मा [$1 जाँचको कागजात] हेर्नुहोस् ।",
        "patrol-log-header": "गस्ती गरिएका संस्करणहरूको लग यस प्रकार रहेका छन् ।",
        "log-show-hide-patrol": "$1 निगरानी लग",
        "log-show-hide-tag": "$1 ट्याग लग",
-       "deletedrevision": "पà¥\81राना à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 $1 मेटिए",
+       "deletedrevision": "पà¥\81राना à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 $1 मेटिए",
        "filedeleteerror-short": "$1 फाइल मेटाइमा भूल",
        "filedeleteerror-long": "निम्न फाइल मेट्ने क्रममा त्रुटी भयो:\n\n$1",
        "filedelete-missing": "\"$1\" फाइल मेट्न सकिंदैन किनभनें यो फाइल नैं छैन।",
        "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
        "searchsuggest-search": "{{SITENAME}} मा खोज्नुहोस्",
        "searchsuggest-containing": "समावेश भएको...",
-       "api-error-badaccess-groups": "यस विकिमा तपाईंलाई फाइल अपलोड गर्ने अनुमति छैन।",
        "api-error-badtoken": "आन्तरिक समस्याः खराब टोकन ।",
-       "api-error-copyuploaddisabled": "यस सर्वरमा URL द्वारा अपलोड गर्ने व्यवस्था निस्क्रिय गरिएकोछ।",
-       "api-error-duplicate": "यस साइटमा पहिलेबाट यस्तै सामग्री {{PLURAL:$1|भएको अर्को फाइल छ|भएका  केहि अरु फाइलहरू छन्}} ।",
-       "api-error-duplicate-archive": "यस साइटमा पहिलेबाट यस्तै सामग्री {{PLURAL:$1|भएको अर्को फाइल थियो|भएका  केहि अरु फाइलहरू थिए}} ।\nतर {{PLURAL:$1|यो मेटाइएको थियो|यी मेटाइएका थिए}} ।",
-       "api-error-empty-file": "तपाईंले बुझाएको फाइल खालि छ।",
        "api-error-emptypage": "नयाँ तयार गर्दै, खाली पृष्ठ तयार गर्न अनुमति छैन ।",
-       "api-error-fetchfileerror": "आन्तरिक समस्याः फाइल तान्दा केही कुरा गलत भएछ ।",
-       "api-error-fileexists-forbidden": "\"$1\" नामको फाइल पहिले नै छ र अधिलेखित गर्न सकिंदैन।",
-       "api-error-fileexists-shared-forbidden": "\"$1\" नामको फाइल पहिले नै साझा फाइल भण्डारमा छ, र अधिलेखित गर्न सकिंदैन।",
-       "api-error-file-too-large": "तपाईंले बुझाएको फाइल अति ठूलो छ।",
-       "api-error-filename-tooshort": "फाइलको नाम अति छोटो भयो।",
-       "api-error-filetype-banned": "यस प्रकारको फाइलमाथि प्रतिबन्ध छ।",
-       "api-error-filetype-banned-type": "$1 फाइल {{PLURAL:$4|प्रकार|प्रकारहरू}} को अनुमति छैन। फाइल प्रकार {{PLURAL:$3|जसको|जुनको}} अनुमति छ: $2।",
-       "api-error-filetype-missing": "फाइलमा एक्स्टेन्शनको अभाव छ।",
-       "api-error-hookaborted": "एक्सटेन्शन हुकले गर्दा यस फाइललाई नयाँ रुप दिने क्रिया रद्द भयो।",
-       "api-error-http": "आन्तरिक त्रुटि: सर्वरसित जोड़न असमर्थ",
-       "api-error-illegal-filename": "यस्तो फाइल नामको अनुमति छैन।",
-       "api-error-internal-error": "आन्तरिक त्रुटि: विकिमा आफ्नो अपलोड प्रसंस्करणसँग केहि त्रुटि देखिएको छ।",
-       "api-error-invalid-file-key": "आन्तरिक त्रुटि: अस्थाई भण्डारमा फाइल पाइएन।",
-       "api-error-missingparam": "आन्तरिक त्रुटि: अनुरोधमा पैरामीटरहरुको कमी",
-       "api-error-missingresult": "आन्तरिक त्रुटि: कपी सफल भयो भएन भनेर निश्चय गर्ने सकिएन।",
-       "api-error-mustbeloggedin": "फाइल अपलोड गर्न तपाईंले प्रवेश गरेको हुनुपर्छ।",
-       "api-error-mustbeposted": "आन्तरिक त्रुटि: अनुरोधको निम्ति HTTP POST को आवश्यकता",
-       "api-error-noimageinfo": "अपलोड सफल भयो, तर सर्वरले फाइलको बारेमा कुनै सूचना दिएन।",
-       "api-error-nomodule": "आन्तरिक त्रुटि: अपलोड मोडुल सेट नगरिएको।",
-       "api-error-ok-but-empty": "आन्तरिक त्रुटि: सर्वरबाट कुनै उत्तर आएन।",
-       "api-error-overwrite": "वर्तमान फाइलमाथि अधिलेखन(Overwriting)को अनुमति छैन।",
-       "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\"",
-       "api-error-unknown-error": "आन्तरिक त्रुटि: तपाईंद्वारा फाइल अपलोड गरिने प्रयास गर्दा समय केहि गलत भएको थियो।",
+       "api-error-stashfailed": "आन्तरिक त्रुटि: अस्थाई फाइल राख्न सर्वर असफल भयो।",
        "api-error-unknown-warning": "अज्ञात चेतावनी: \"$1\"",
        "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|घण्टा|घण्टाहरू}}",
index 149d0fc..9bcc007 100644 (file)
        "searcharticle": "OK",
        "history": "Geschiedenis",
        "history_short": "Geschiedenis",
+       "history_small": "geschiedenis",
        "updatedmarker": "bewerkt sinds mijn laatste bezoek",
        "printableversion": "Printvriendelijke versie",
        "permalink": "Permanente koppeling",
        "rcfilters-invalid-filter": "Ongeldig filter",
        "rcfilters-filterlist-title": "Filters",
        "rcfilters-filterlist-noresults": "Geen filters gevonden",
+       "rcfilters-filtergroup-registration": "Gebruikers-registratie",
+       "rcfilters-filter-registered-label": "Geregistreerd",
+       "rcfilters-filter-registered-description": "Ingelogde gebruikers.",
+       "rcfilters-filter-unregistered-label": "Niet-geregistreerd",
+       "rcfilters-filter-unregistered-description": "Gebruikers die niet zijn ingelogd.",
        "rcfilters-filter-editsbyself-label": "Uw eigen bewerkingen",
        "rcfilters-filter-editsbyself-description": "Bewerkingen door u.",
        "rcfilters-filter-editsbyother-label": "Bewerkingen door anderen",
-       "rcfilters-filter-editsbyother-description": "Bewerkingen die gemaakt zijn door andere gebruikers (niet door uzelf.)",
-       "rcfilters-filtergroup-userExpLevel": "Gebruikerservarings niveau",
+       "rcfilters-filter-editsbyother-description": "Bewerkingen die gemaakt zijn door andere gebruikers (niet door uzelf).",
+       "rcfilters-filtergroup-userExpLevel": "Gebruikerservarings niveau (alleen voor geregistreerde gebruikers)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Nieuwkomers",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Zeer nieuwe bewerkers: minder dan 10 bewerkingen en 4 dagen van activiteit.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Minder dan 10 bewerkingen en 4 dagen van activiteit.",
        "rcfilters-filter-userExpLevel-learner-label": "Leerlingen",
-       "rcfilters-filter-userExpLevel-learner-description": "Meer dagen van activiteit en bewerkingen dan 'Nieuwkomers', maar minder dan 'Ervaren gebruikers.'",
+       "rcfilters-filter-userExpLevel-learner-description": "Meer dagen van activiteit en bewerkingen dan \"Nieuwkomers\", maar minder dan \"Ervaren gebruikers\".",
        "rcfilters-filter-userExpLevel-experienced-label": "Ervaren gebruikers",
        "rcfilters-filter-userExpLevel-experienced-description": "Meer dan 30 dagen van activiteit en 500 bewerkingen.",
+       "rcfilters-filtergroup-automated": "Automatische bijdragen",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "De wijzigingen van geautomatiseerde hulpmiddelen.",
+       "rcfilters-filter-humans-label": "Menselijk (geen bot)",
+       "rcfilters-filter-humans-description": "Bewerkingen door menselijke bewerkers.",
+       "rcfilters-filtergroup-significance": "Belangrijkheid",
+       "rcfilters-filter-minor-label": "Kleine bewerkingen",
+       "rcfilters-filter-minor-description": "Bewerkingen die door de bewerker zijn gelabeld als klein.",
+       "rcfilters-filter-major-label": "Geen kleine bewerking",
+       "rcfilters-filter-major-description": "Bewerkingen niet gelabeld als klein.",
+       "rcfilters-filtergroup-changetype": "Soort wijziging",
+       "rcfilters-filter-pageedits-label": "Paginabewerkingen",
+       "rcfilters-filter-pageedits-description": "Wijzigingen aan de wiki inhoud, discussies, categorie beschrijvingen....",
+       "rcfilters-filter-newpages-label": "Nieuwe pagina's",
+       "rcfilters-filter-newpages-description": "Bewerkingen die een nieuwe pagina aanmaken.",
+       "rcfilters-filter-categorization-label": "Categorie wijzigingen",
+       "rcfilters-filter-logactions-label": "Geregistreerde acties",
+       "rcfilters-filter-logactions-description": "Administratieve handelingen, account creaties, pagina verwijderingen, uploads....",
        "rcnotefrom": "Wijzigingen sinds <strong>$3 om $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wijziging|wijzigingen}}).",
        "rclistfrom": "Wijzigingen bekijken vanaf $3 $2",
        "rcshowhideminor": "Kleine bewerkingen $1",
        "uncategorizedcategories": "Niet-gecategoriseerde categorieën",
        "uncategorizedimages": "Niet-gecategoriseerde bestanden",
        "uncategorizedtemplates": "Niet-gecategoriseerde sjablonen",
+       "uncategorized-categories-exceptionlist": "# Bevat een lijst van categorieën, welke niet op Speciaal:NietGecategoriseerdeCategorieën getoond moeten worden. Een per regel, beginnend met \"*\". Regels die starten met een ander teken (inclusief witruimte) worden genegeerd. Gebruik \"#\" voor opmerkingen.",
        "unusedcategories": "Ongebruikte categorieën",
        "unusedimages": "Ongebruikte bestanden",
        "wantedcategories": "Niet-bestaande categorieën met de meeste koppelingen",
        "apisandbox-sending-request": "API-verzoek verzenden...",
        "apisandbox-loading-results": "API-resultaten ontvangen...",
        "apisandbox-results-error": "Er is een fout opgetreden tijdens het laden van het antwoord op het API-verzoek: $1.",
-       "apisandbox-request-params-json": "JSON parameters:",
        "apisandbox-request-url-label": "Verzoek-URL:",
        "apisandbox-request-time": "Doorlooptijd verzoek: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Token corrigeren en opnieuw verzenden",
        "listgrants-grant": "Toestemming",
        "listgrants-rights": "Rechten",
        "trackingcategories": "Volgcategorieën",
-       "trackingcategories-summary": "Op deze pagina worden volgcategorieën weergegeven die automatisch worden gevuld door de MediaWikisoftware. De namen van de categorieën kunnen gewijzigd worden door de bijbehorende systeemberichten in de naamruimte \"{{ns:8}}\" bij te werken.",
+       "trackingcategories-summary": "Op deze pagina worden volgcategorieën weergegeven die automatisch worden gevuld door de MediaWiki software. De namen van de categorieën kunnen gewijzigd worden door de bijbehorende systeemberichten in de naamruimte \"{{ns:8}}\" bij te werken.",
        "trackingcategories-msg": "Volgcategorie",
        "trackingcategories-name": "Berichtnaam",
        "trackingcategories-desc": "Opnamecriteria",
        "feedback-useragent": "Useragent:",
        "searchsuggest-search": "Doorzoek {{SITENAME}}",
        "searchsuggest-containing": "bevat...",
-       "api-error-autoblocked": "Uw IP-adres is automatisch geblokeerd, omdat het gebruikt is door een geblokkeerde gebruiker.",
-       "api-error-badaccess-groups": "U mag geen bestanden uploaden in deze wiki.",
        "api-error-badtoken": "Interne fout: het token klopt niet.",
-       "api-error-blocked": "U bent geblokkeerd en kunt niet bewerken.",
-       "api-error-copyuploaddisabled": "Uploaden via URL is uitgeschakeld op deze server.",
-       "api-error-duplicate": "Er {{PLURAL:$1|bestaat al een bestand|bestaan al bestanden}} met dezelfde inhoud op de wiki.",
-       "api-error-duplicate-archive": "Er {{PLURAL:$1|was al een ander bestand|waren al andere bestanden}} op de site met dezelfde inhoud, maar {{PLURAL:$1|deze is|deze zijn}} verwijderd.",
-       "api-error-empty-file": "Het bestand dat u hebt geüpload is leeg.",
        "api-error-emptypage": "Het aanmaken van nieuwe, lege pagina's is niet toegestaan.",
-       "api-error-fetchfileerror": "Interne fout: er is iets misgegaan bij het ophalen van het bestand.",
-       "api-error-fileexists-forbidden": "Er bestaat al een bestand met de naam \"$1\" dat niet overschreven kan worden.",
-       "api-error-fileexists-shared-forbidden": "Er bestaat al een bestand met de naam \"$1\" in de gedeelde repository dat niet overschreven kan worden.",
-       "api-error-file-too-large": "Het bestand dat u hebt geüpload is te groot.",
-       "api-error-filename-tooshort": "De bestandsnaam is te kort.",
-       "api-error-filetype-banned": "Dit bestandstype mag niet geüpload worden.",
-       "api-error-filetype-banned-type": "{{PLURAL:$4|Het bestandstype $1 wordt|De bestandstypes $1 worden}} niet toegelaten. {{PLURAL:$3|Het toegelaten bestandstype is|De toegelaten bestandstypes zijn}} $2.",
-       "api-error-filetype-missing": "Het bestand heeft geen extensie.",
-       "api-error-hookaborted": "De wijziging die u probeert te maken is afgebroken door een uitbreiding.",
-       "api-error-http": "Interne fout: er kon geen verbinding gemaakt worden met de server.",
-       "api-error-illegal-filename": "Deze bestandsnaam is niet toegestaan.",
-       "api-error-internal-error": "Interne fout: er is iets misgegaan tijdens het verwerken van uw upload door de wiki.",
-       "api-error-invalid-file-key": "Interne fout: het bestand is niet aangetroffen in de tijdelijke opslag.",
-       "api-error-missingparam": "Interne fout: niet alle parameters zijn in het verzoek meegeleverd.",
-       "api-error-missingresult": "Interne fout: het was niet mogelijk vast te stellen of het kopiëren is geslaagd.",
-       "api-error-mustbeloggedin": "U moet aangemeld zijn om bestanden te kunnen uploaden.",
-       "api-error-mustbeposted": "Er zit een fout in de software. Er wordt geen gebruik gemaakt van de juiste HTTP-methode.",
-       "api-error-noimageinfo": "De upload is afgerond, maar de server heeft geen gegevens over het bestand verstrekt.",
-       "api-error-nomodule": "Interne fout: er is geen uploadmodule ingesteld.",
-       "api-error-ok-but-empty": "Interne fout: de server heeft geen gegevens teruggeleverd.",
-       "api-error-overwrite": "Het overschrijven van een bestand bestand is niet toegestaan.",
-       "api-error-ratelimited": "U probeert meer bestanden te uploaden in een korte periode dan deze wiki toelaat.\nProbeer het over een aantal minuten opnieuw.",
-       "api-error-stashfailed": "Interne fout: de server kon het tijdelijke bestand niet opslaan.",
        "api-error-publishfailed": "Interne fout: de server kon het tijdelijke bestand niet publiceren.",
-       "api-error-stasherror": "Er is een fout opgetreden tijdens het uploaden van het bestand naar de tijdelijke opslagruimte.",
-       "api-error-stashedfilenotfound": "Het opgeslagen bestand is niet aangetroffen tijdens het uploaden vanuit de stash.",
-       "api-error-stashpathinvalid": "Het pad waar het bestand in de stash werd verwacht is ongeldig.",
-       "api-error-stashfilestorage": "Er is een fout opgetreden tijdens het opslaan van het bestand in de stash.",
-       "api-error-stashzerolength": "De server kon het bestand niet opslaan in de stash, omdat het een lengte van nul had.",
-       "api-error-stashnotloggedin": "U moet aangemeld zijn om bestanden te kunnen opslaan in de stash.",
-       "api-error-stashwrongowner": "U bent geen eigenaar van het bestand waar u toegang tot probeerde te krijgen.",
-       "api-error-stashnosuchfilekey": "Het sleutelbestand in de stash waar u toegang tot probeert te krijgen bestaat niet.",
-       "api-error-timeout": "De server heeft niet binnen de verwachte tijd geantwoord.",
-       "api-error-unclassified": "Er is een onbekende fout opgetreden",
-       "api-error-unknown-code": "Interne fout: \"$1\"",
-       "api-error-unknown-error": "Interne fout: er is iets misgegaan tijdens het uploaden van uw bestand.",
+       "api-error-stashfailed": "Interne fout: de server kon het tijdelijke bestand niet opslaan.",
        "api-error-unknown-warning": "Onbekende waarschuwing: \"$1\".",
        "api-error-unknownerror": "Onbekende fout: \"$1\"",
-       "api-error-uploaddisabled": "Uploaden is niet mogelijk in deze wiki.",
-       "api-error-verification-error": "Dit bestand is mogelijk beschadigd of heeft een onjuiste extensie.",
-       "api-error-was-deleted": "Een bestand met deze naam is al eerder geüpload en vervolgens verwijderd.",
        "duration-seconds": "$1 {{PLURAL:$1|seconde|seconden}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuut|minuten}}",
        "duration-hours": "$1 {{PLURAL:$1|uur|uren}}",
        "authmanager-provider-password": "Op wachtwoord gebaseerde authenticatie",
        "authmanager-provider-password-domain": "Wachtwoord- en domeingebaseerde authentificatie",
        "authmanager-provider-temporarypassword": "Tijdelijk wachtwoord",
+       "authprovider-confirmlink-request-label": "Accounts die aan elkaar moeten worden gekoppeld.",
        "authprovider-confirmlink-success-line": "$1: Succesvol gekoppeld.",
        "authprovider-resetpass-skip-label": "Overslaan",
        "authprovider-resetpass-skip-help": "Sla het resetten van het wachtwoord over.",
        "authform-notoken": "Ontbrekend token",
        "authform-wrongtoken": "Verkeerd token",
        "specialpage-securitylevel-not-allowed-title": "Niet toegestaan",
+       "authpage-cannot-create": "Kon het account aanmaken niet starten.",
        "cannotauth-not-allowed-title": "Geen toegang",
        "cannotauth-not-allowed": "U hebt geen toestemming om deze pagina te gebruiken",
        "changecredentials": "Authenticatiegegevens wijzigen",
        "changecredentials-submit": "Authenticatiegegevens wijzigen",
+       "changecredentials-invalidsubpage": "$1 is geen geldig identificatietype.",
        "changecredentials-success": "Uw authenticatiegegevens zijn gewijzigd.",
        "removecredentials": "Authenticatiegegevens verwijderen",
        "removecredentials-submit": "Authenticatiegegevens verwijderen",
+       "removecredentials-invalidsubpage": "$1 is geen geldig identificatietype.",
        "removecredentials-success": "Uw authenticatiegegevens zijn verwijderd.",
        "credentialsform-provider": "Soort authenticatiegegevens:",
        "credentialsform-account": "Gebruikersnaam:",
        "usercssispublic": "Let op: CSS deelpagina's moeten geen vertrouwelijke gegevens bevatten omdat ze kunnen worden bekeken door andere gebruikers.",
        "restrictionsfield-badip": "Ongeldig IP-adres of range: $1",
        "restrictionsfield-label": "Toegestane IP-ranges:",
+       "restrictionsfield-help": "Een IP-adres of CIDR bereik per lijn. Om alles toe te staan, gebruik:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "versie $1",
        "pageid": "Pagina-ID $1"
 }
index 6685817..c50b09e 100644 (file)
        "history-feed-description": "Endringshistorikk for denne sida på wikien",
        "history-feed-item-nocomment": "$1 på $2",
        "history-feed-empty": "Den etterspurde sida finst ikkje. Ho kan vere sletta frå wikien, eller vere flytta. Prøv å [[Special:Search|søke på wikien]] for relevante nye sider.",
+       "history-edit-tags": "Endra merka til dei valde versjonane",
        "rev-deleted-comment": "(endringssamandrag fjerna)",
        "rev-deleted-user": "(brukarnamnet er fjerna)",
        "rev-deleted-event": "(fjerna loggoppføring)",
        "feedback-thanks": "Takk! Attendemeldinga di er lagd inn på sida «[$2 $1]».",
        "searchsuggest-search": "Søk i {{SITENAME}}",
        "searchsuggest-containing": "som inneheld …",
-       "api-error-badaccess-groups": "Du har ikkje løyve til å lasta opp filer til wikien.",
        "api-error-badtoken": "Intern feil: ugild token.",
-       "api-error-copyuploaddisabled": "Opplasting etter URL er avslege på tenaren.",
-       "api-error-duplicate": "Det finst {{PLURAL:$1|ei anna fil|andre filer}} på nettstaden med same innhaldet.",
-       "api-error-duplicate-archive": "Det fanst {{PLURAL:$1|ei anna fi|andre file}} på nettstaden med det same innhaldet, men {{PLURAL:$1|ho|dei}} vart sletta.",
-       "api-error-empty-file": "Fila du sende var tom.",
        "api-error-emptypage": "Det er ikkje tillate å oppretta nye tomme sider.",
-       "api-error-fetchfileerror": "Intern feil: Noko gjekk gale då fila vart henta.",
-       "api-error-fileexists-forbidden": "Ei fil med namnet «$1» finst alt, og kan ikkje skrivast over.",
-       "api-error-fileexists-shared-forbidden": "Ei fil med namnet «$1» finst alt i den delte filsamlinga, og kan ikkje skrivast over.",
-       "api-error-file-too-large": "Fila du sende var for stor.",
-       "api-error-filename-tooshort": "Filnamnet er for stutt.",
-       "api-error-filetype-banned": "Denne filtypen er ikkje tillaten.",
-       "api-error-filetype-banned-type": "$1 er ikkje {{PLURAL:$4|ein tillaten filtype|tillatne filtypar}}. {{PLURAL:$3|Tillaten filtype|Tillatne filtypar}} er $2.",
-       "api-error-filetype-missing": "Fila saknar ei ending.",
-       "api-error-hookaborted": "Endringa du freista vart avbroten av ei utviding.",
-       "api-error-http": "Intern feil: kan ikkje kopla til tenaren.",
-       "api-error-illegal-filename": "Filnamnet er ikkje tillate.",
-       "api-error-internal-error": "Intern feil: Noko gjekk gale med handsaminga av opplastinga di til wikien.",
-       "api-error-invalid-file-key": "Intern feil: Fila vart ikkje funnen i mellombels lagringsplass.",
-       "api-error-missingparam": "Intern feil: det saknar parametrar i førespurnaden.",
-       "api-error-missingresult": "Intern feil: kunne ikkje avgjera om koperinga var vellukka.",
-       "api-error-mustbeloggedin": "Du lyt vera innlogga for å lasta opp filer.",
-       "api-error-mustbeposted": "Intern feil: førespurnad krev HTTP POST.",
-       "api-error-noimageinfo": "Opplastinga gjekk greitt, men tenaren gav oss ikkje noko informasjon om fila.",
-       "api-error-nomodule": "Intern feil: ingen opplastingsmodul er vald.",
-       "api-error-ok-but-empty": "Intern feil: ikkje noko svar frå tenaren.",
-       "api-error-overwrite": "Det er ikkje tillate å skriva over filer som alt finst.",
-       "api-error-stashfailed": "Intern feil: tenaren greidde ikkje å lagra ei mellombels fil.",
        "api-error-publishfailed": "Intern feil: tenaren greidde ikkje å publisera mellombels fil.",
-       "api-error-timeout": "Tenaren svara ikkje innan tida svar var venta.",
-       "api-error-unclassified": "Det oppstod ein ukjend feil.",
-       "api-error-unknown-code": "Ukjend feil: «$1»",
-       "api-error-unknown-error": "Intern feil: Noko gjekk gale då fila di vart freista lasta opp.",
+       "api-error-stashfailed": "Intern feil: tenaren greidde ikkje å lagra ei mellombels fil.",
        "api-error-unknown-warning": "Ukjend åtvaring: $1",
        "api-error-unknownerror": "Ukjend feil: «$1».",
-       "api-error-uploaddisabled": "Det er ikkje høve til å lasta opp filer til wikien.",
-       "api-error-verification-error": "Fila kan vera øydelagd eller ha rang filending.",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekund}}",
        "duration-minutes": "$1 {{PLURAL:$1|minutt|minutt}}",
        "duration-hours": "$1 {{PLURAL:$1|time|timar}}",
index 05e3e97..30bcfde 100644 (file)
        "changepassword-success": "Vòstre senhal es estat modificat !",
        "changepassword-throttled": "Avètz ensajat un tròp grand nombre de connexions darrièrament.\nEsperatz $1 abans d’ensajar tornarmai.",
        "botpasswords": "Senhals de robòts",
+       "botpasswords-disabled": "Los senhals robòts son desactivats.",
        "botpasswords-no-central-id": "Per intrar lo senhau d'un bot, devètz èsser connectat amb un còmpte globau.",
+       "botpasswords-existing": "Senhals de robòts existents",
        "botpasswords-createnew": "Crear un novèu senhau de bot",
        "botpasswords-editexisting": "Editar un senhau de bot existent",
        "botpasswords-label-appid": "Nom del robòt :",
        "passwordreset-emailelement": "Utilizaire: \n$1\n\nSenhal temporari: \n$2",
        "passwordreset-emailsentemail": "Se aquela adreiça de corrièr electrnic es associat ambé vòstre compte, un corrièr electronic de reïnicializacion de senhal es estat mandat.",
        "passwordreset-emailsentusername": "Se una adreiça de corrier electronic es associada amb aqueu còmpte d'utilizaire, un senhau de reïnicializacion serà mandat.",
+       "passwordreset-nosuchcaller": "L’apelant existís pas : $1",
        "passwordreset-invalidemail": "Adreiça electronica invalida",
        "changeemail": "Cambiar o suprimir l'adreça electronica",
        "changeemail-header": "Cambiar l'adreça electronica del compte",
        "mergehistory-done": "$3 version{{PLURAL:$3||s}} de $1 {{PLURAL:$3|es estada fusionada|son estada fusionadas}} dins [[:$2]].",
        "mergehistory-fail": "Impossible de procedir a la fusion dels istorics. Seleccionatz  tornamai la pagina e mai los paramètres de data.",
        "mergehistory-fail-bad-timestamp": "L’orodatatge es pas valid.",
+       "mergehistory-fail-invalid-source": "La pagina font es pas valida.",
        "mergehistory-fail-invalid-dest": "La pagina de destinacion es invalida",
        "mergehistory-fail-toobig": "Impossible d’efectuar la fusion de l’istoric perque un nombre de {{PLURAL:$1|revisions}} superior al limit de $1 deuriá èsser desplaçat.",
        "mergehistory-no-source": "La pagina d'origina $1 existís pas.",
        "right-sendemail": "Mandar un corrièl als autres utilizaires",
        "right-applychangetags": "Aplicar [[Special:Tags|las balisas]] amb sas pròprias modificacions",
        "grant-generic": "ensemble de dreits « $1 »",
+       "grant-group-page-interaction": "Interagir amb de paginas",
+       "grant-group-file-interaction": "Interagir amb de mèdias",
+       "grant-group-watchlist-interaction": "Interagir amb vòstra lista de seguiment",
        "grant-group-email": "Mandar un corrièr electronic",
        "grant-blockusers": "Blocar e desblocar d'utilizaires",
        "grant-createaccount": "Crear de comptes",
        "grant-uploadfile": "Telecargar un novèu fichier",
        "grant-basic": "Dreits de basa",
        "grant-viewdeleted": "Veire lei fichiers e lei paginas escafats",
+       "grant-viewmywatchlist": "Afichar vòstra lista de seguiment",
        "newuserlogpage": "Istoric de las creacions de comptes",
        "newuserlogpagetext": "Jornal de las creacions de comptes d'utilizaires.",
        "rightslog": "Istoric de las modificacions d'estatut",
        "action-upload_by_url": "importar aqueste fichièr a partir d’una adreça internet",
        "action-writeapi": "utilizar l‘API d’escritura",
        "action-delete": "suprimir aquesta pagina",
-       "action-deleterevision": "suprimir aquesta version",
+       "action-deleterevision": "suprimir las revisions",
        "action-deletelogentry": "Escafar lo jornau deis intradas",
-       "action-deletedhistory": "veire l’istoric suprimit d'aquesta pagina",
+       "action-deletedhistory": "veire l’istoric suprimit d'una pagina",
        "action-browsearchive": "recercar de paginas suprimidas",
-       "action-undelete": "restablir aquesta pagina",
-       "action-suppressrevision": "tornar veire e restablir aquesta version suprimida",
+       "action-undelete": "restablir de paginas",
+       "action-suppressrevision": "visionar e restablir de revisions suprimidas",
        "action-suppressionlog": "veire aqueste jornal privat",
        "action-block": "blocar aqueste utilizaire a l’edicion",
        "action-protect": "modificar los nivèls de proteccion per aquesta pagina",
        "recentchanges-legend-heading": "<strong>Legenda :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
        "recentchanges-submit": "Afichar",
+       "rcfilters-activefilters": "Filtres actius",
+       "rcfilters-invalid-filter": "Filtre pas valid",
+       "rcfilters-filterlist-title": "Filtres",
+       "rcfilters-filterlist-noresults": "Cap de filtre pas trobat",
+       "rcfilters-filtergroup-registration": "Inscripcion de l'utilizaire",
+       "rcfilters-filter-registered-label": "Enregistrat",
+       "rcfilters-filter-registered-description": "Editors connectats.",
+       "rcfilters-filter-unregistered-label": "Desinscrit",
+       "rcfilters-filter-unregistered-description": "Editors que son pas connectats.",
+       "rcfilters-filtergroup-authorship": "Modificar la paternitat",
+       "rcfilters-filter-editsbyself-label": "Vòstras pròprias modificacions",
+       "rcfilters-filter-editsbyself-description": "Vòstras modificacions.",
+       "rcfilters-filter-editsbyother-label": "Modificacions per d’autres.",
+       "rcfilters-filter-userExpLevel-newcomer-label": "Novèls arribants",
+       "rcfilters-filter-userExpLevel-learner-label": "Aprenents",
+       "rcfilters-filter-userExpLevel-experienced-label": "Utilizaires experimentats",
+       "rcfilters-filtergroup-automated": "Contribucions automatizadas",
+       "rcfilters-filter-bots-label": "Robòt",
+       "rcfilters-filter-humans-label": "Èsser uman (pas robòt)",
+       "rcfilters-filtergroup-significance": "Significacion",
+       "rcfilters-filter-minor-label": "Cambiaments menors",
+       "rcfilters-filter-major-label": "Modificacions pas menoras",
+       "rcfilters-filtergroup-changetype": "Tipe de cambiament",
+       "rcfilters-filter-pageedits-label": "Modificacions de pagina",
+       "rcfilters-filter-newpages-label": "Creacions de pagina",
+       "rcfilters-filter-categorization-label": "Cambiaments de categoria",
+       "rcfilters-filter-logactions-label": "Accions traçadas",
        "rcnotefrom": "Çaijós {{PLURAL:$5|la modificacion efectuada|las modificacions efectuadas}} dempuèi lo <strong>$3, $4</strong> (afichadas fins a <strong>$1</strong>).",
        "rclistfrom": "Afichar las modificacions novèlas dempuèi lo $3 $2",
        "rcshowhideminor": "$1 los cambiaments menors",
        "apisandbox-deprecated-parameters": "Paramètres obsolèts",
        "apisandbox-submit-invalid-fields-title": "De camps son invalides",
        "apisandbox-results": "Resultats",
+       "apisandbox-sending-request": "Mandadís de la requèsta a l'API...",
        "apisandbox-request-url-label": "Requèsta URL :",
        "apisandbox-request-time": "Durada de la demanda : {{PLURAL:$1|$1 ms}}",
        "apisandbox-continue": "Contunhar",
        "apisandbox-continue-clear": "Escafar",
+       "apisandbox-multivalue-all-namespaces": "$1 (totes los espacis de noms)",
+       "apisandbox-multivalue-all-values": "$1 (totas las valors)",
        "booksources": "Obratges de referéncia",
        "booksources-search-legend": "Recercar demest d'obratges de referéncia",
        "booksources-isbn": "ISBN :",
        "watchlistanontext": "Connectatz-vos per visualizar o modificar los elements de vòstra lista de seguiment.",
        "watchnologin": "Vos sètz pas identificat(ada)",
        "addwatch": "Apondre a la lista de seguiment",
-       "addedwatchtext": "La pagina « [[:$1]] » es estada aponduda a vòstra [[Special:Watchlist|lista de seguiment]]. Las modificacions venentas d'aquesta pagina e de la pagina de discussion associada i seràn repertoriadas.",
+       "addedwatchtext": "La pagina « [[:$1]] » e sa pagina de discussion son estadas apondudas a vòstra [[Special:Watchlist|lista de seguiment]].",
        "addedwatchtext-short": "La pagina « $1 » es estada aponduda a vòstra lista de seguiment.",
        "removewatch": "Suprimir de la lista de seguiment",
-       "removedwatchtext": "La pagina « [[:$1]] » es estada levada de vòstra [[Special:Watchlist|lista de seguiment]].",
+       "removedwatchtext": "La pagina « [[:$1]] » e sa pagina de discussion son estadas levadas de vòstra [[Special:Watchlist|lista de seguiment]].",
        "removedwatchtext-short": "La pagina « $1 » es estada suprimida de vòstra lista de seguiment.",
        "watch": "Seguir",
        "watchthispage": "Seguir aquesta pagina",
        "wlshowlast": "Far veire las darrièras $1 oras, los darrièrs $2 jorns",
        "watchlist-hide": "Amagar",
        "watchlist-submit": "Afichar",
+       "wlshowtime": "Periòde afichat :",
        "wlshowhideminor": "cambiaments menors",
        "wlshowhidebots": "Robòts",
        "wlshowhideliu": "utilizaires enregistrats",
        "wlshowhideanons": "utilizaires anonims",
        "wlshowhidepatr": "modificacions repassadas",
        "wlshowhidemine": "mas modificacions",
+       "wlshowhidecategorization": "categorizacion de la pagina",
        "watchlist-options": "Opcions de la lista de seguiment",
        "watching": "Seguit...",
        "unwatching": "Fin del seguit...",
        "sp-contributions-username": "Adreça IP o nom d’utilizaire :",
        "sp-contributions-toponly": "Mostrar sonque las contribucions que son las darrièras dels articles",
        "sp-contributions-newonly": "Afichar unicament las modificacions que son de creacions de pagina",
+       "sp-contributions-hideminor": "Amagar las modificacions menoras",
        "sp-contributions-submit": "Cercar",
        "whatlinkshere": "Paginas ligadas a aquesta",
        "whatlinkshere-title": "Paginas que puntan cap a « $1 »",
        "whatlinkshere-hidelinks": "$1 ligams",
        "whatlinkshere-hideimages": "$1 los ligams cap al fichièr",
        "whatlinkshere-filters": "Filtres",
+       "whatlinkshere-submit": "Validar",
        "autoblockid": "Blocatge automatic #$1",
        "block": "Blocar un utilizaire",
        "unblock": "Desblocar un utilizaire",
        "movenosubpage": "Aquesta pagina a pas cap de sospagina.",
        "movereason": "Motiu :",
        "revertmove": "anullar",
-       "delete_and_move_text": "==Supression requerida==\nL’article de destinacion « [[:$1]] » existís ja.\nLo volètz suprimir per permetre lo cambiament de nom ?",
+       "delete_and_move_text": "La pagina de destinacion « [[:$1]] » existís ja.\nSètz segur{{GENDER:||a|}} que la volètz suprimir pe permetre aqueste cambiament de nom ?",
        "delete_and_move_confirm": "Òc, accèpti de suprimir la pagina de destinacion per permetre lo cambiament de nom.",
        "delete_and_move_reason": "Pagina suprimida per permetre lo cambiament de nom dempuèi « [[$1]] »",
        "selfmove": "Los títols d’origina e de destinacion son los meteisses : impossible de tornar nomenar una pagina sus ela-meteissa.",
        "tooltip-ca-unprotect": "Cambiar la proteccion d'aquesta pagina",
        "tooltip-ca-delete": "Suprimir aquesta pagina",
        "tooltip-ca-undelete": "Restablir aquesta pagina",
-       "tooltip-ca-move": "Tornar nomenar aquesta pagina",
+       "tooltip-ca-move": "Renomenar aquesta pagina",
        "tooltip-ca-watch": "Apondètz aquesta pagina a vòstra lista de seguiment",
        "tooltip-ca-unwatch": "Levatz aquesta pagina de vòstra lista de seguiment",
        "tooltip-search": "Cercar dins {{SITENAME}}",
        "pageinfo-length": "Talha de la pagina (en octets)",
        "pageinfo-article-id": "Numèro de la pagina",
        "pageinfo-language": "Lenga del contengut de la pagina",
+       "pageinfo-language-change": "modificar",
        "pageinfo-content-model": "Modèl de contengut de la pagina",
        "pageinfo-content-model-change": "modificar",
        "pageinfo-robot-policy": "Indexacion per robòts",
        "newimages-legend": "Filtre",
        "newimages-label": "Nom del fichièr (o una partida d'aqueste) :",
        "newimages-showbots": "Afichar los impòrts per de robòts",
+       "newimages-hidepatrolled": "Amagar los telecargaments patrolhats",
        "noimages": "Cap d'imatge d'afichar pas.",
+       "gallery-slideshow-toggle": "Bascular las vinhetas",
        "ilsubmit": "Cercar",
        "bydate": "per data",
        "sp-newimages-showfrom": "Afichar los imatges novèls importats dempuèi lo $2, $1",
        "exif-compression-4": "CCITT Grop 4 encodatge del fax",
        "exif-copyrighted-true": "Somés al dreit d'autor",
        "exif-copyrighted-false": "Estat dels dreits d’autor pas definit",
+       "exif-photometricinterpretation-1": "Blanc e negre (0 pel negre)",
        "exif-unknowndate": "Data desconeguda",
        "exif-orientation-1": "Normala",
        "exif-orientation-2": "Inversada orizontalament",
        "confirmemail_body_set": "Qualqu’un, probablament vos, dempuèi l’adreça IP $1, a modificat l'adreça de corrièr electronic del compte « $2 » amb aquesta sul site {{SITENAME}}.\n\nPer confirmar qu'aqueste compte vos aparten vertadièrament e reactivar las foncions de messatjariá sus {{SITENAME}}, seguissètz lo ligam çaijós dins vòstre navigador :\n\n$3\n\nAqueste còdi de confirmacion expirarà lo $4.\n\nSe s’agís *pas* de vòstre compte, seguissètz aqueste ligam per anullar la confirmacion de l'adreça de corrièr electronic :\n\n$5",
        "confirmemail_invalidated": "Confirmacion de l’adreça de corrièr electronic anullada",
        "invalidateemail": "Anullar la confirmacion del corrièr electronic",
+       "notificationemail_subject_changed": "L'adreça de corrièr electronic enregistrada de {{SITENAME}} es estada cambiada",
+       "notificationemail_subject_removed": "L'adreça de corrièr electronic enregistrada de {{SITENAME}} es estada suprimida",
        "scarytranscludedisabled": "[La transclusion interwiki es desactivada]",
        "scarytranscludefailed": "[La recuperacion de modèl a pas capitat per $1]",
        "scarytranscludefailed-httpstatus": "[Fracàs de la recuperacion del modèl per  $1 : HTTP  $2 ]",
        "logentry-newusers-create2": "Lo compte d'utilizaire $3 {{GENDER:$2|es estat creat}} per $1",
        "logentry-newusers-byemail": "Lo compte d'utilizaire $3 {{GENDER:$2|es estat creat}} per $1 e lo senhal es estat mandat per corrièr electronic",
        "logentry-newusers-autocreate": "Lo compte $1 {{GENDER:$2|es estat creat}} automaticament",
-       "logentry-rights-rights": "$1 {{GENDER:$2|a modificat}} l'apartenéncia al grop per $3 de $4 a $5",
+       "logentry-rights-rights": "$1 a modificat l’apartenéncia al grop per {{GENDER:$6|$3}} de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modificat}} l'apartenéncia al grop per $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|es estat promolgut}} automaticament de $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|a mandat}} $3",
        "feedback-useragent": "Agent utilizaire :",
        "searchsuggest-search": "Recercar sus {{SITENAME}}",
        "searchsuggest-containing": "que conten...",
-       "api-error-badaccess-groups": "Sètz pas autorizat a cargar de fichièrs sus aqueste wiki.",
        "api-error-badtoken": "Error intèrna : marrit « geton ».",
-       "api-error-copyuploaddisabled": "Los cargaments via URL son desactivats sus aqueste servidor.",
-       "api-error-duplicate": "I a ja {{PLURAL:$1|un autre fichièr present|d'autres fichièrs presents}} sul site amb lo meteis contengut.",
-       "api-error-duplicate-archive": "I aviá ja {{PLURAL:$1|un autre fichièr present|d'autres fichièrs presents}} sul site amb lo meteis contengut, mas {{PLURAL:$1|es estat suprimit|son estats suprimits}}.",
-       "api-error-empty-file": "Lo fichièr qu'avètz somés èra void.",
        "api-error-emptypage": "Creacion de paginas voidas pas autorizada.",
-       "api-error-fetchfileerror": "Error intèrna : Quicòm s'es mal passat al moment de la recuperacion del fichièr.",
-       "api-error-fileexists-forbidden": "Un fichièr nomenat \"$1\" existís ja, e pòt pas èsser espotir.",
-       "api-error-fileexists-shared-forbidden": "Un fichièr nomenat \"$1\" existís ja dins lo repertòri dels fichièrs partejats, e pòt pas èsser espotit.",
-       "api-error-file-too-large": "Lo fichièr qu'avètz somés èra tròp grand.",
-       "api-error-filename-tooshort": "Lo nom del fichièr es tròp cort.",
-       "api-error-filetype-banned": "Aqueste tipe de fichièr es interdich",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|es pas un tipe de fichièr autorizat|son pas de tipes de fichièrs autorizats}}. \n{{PLURAL:$3|Lo tipe de fichièr autorizat es|Los tipes de fichièrs autorizats son}} $2.",
-       "api-error-filetype-missing": "L'extension del fichièr es mancanta.",
-       "api-error-hookaborted": "La modificacion qu'avètz ensajat de realizar es estada anullada per una extension.",
-       "api-error-http": "Error intèrna : se pòt pas connectar al servidor.",
-       "api-error-illegal-filename": "Lo nom del fichièr es pas autorizat.",
-       "api-error-internal-error": "Error intèrna : Quicòm s'es mal passat al moment del tractament de vòstre impòrt sul wiki.",
-       "api-error-invalid-file-key": "Error intèrna : cap de fichièr pas trobat dins l'emmagazinatge temporari.",
-       "api-error-missingparam": "Error intèrna : Manca de paramètres dins la requèsta.",
-       "api-error-missingresult": "Error intèrna : Avèm pas pogut determinar se la còpia aviá capitat.",
-       "api-error-mustbeloggedin": "Vos cal èsser connectat per telecargar de fichièrs.",
-       "api-error-mustbeposted": "Error intèrna : aquesta requèsta necessita lo metòde HTTP POST.",
-       "api-error-noimageinfo": "Lo mandadís a capitat, mas lo servidor a pas donat cap d'informacions sul fichièr.",
-       "api-error-nomodule": "Error intèrna : cap de modul de versament pas definit.",
-       "api-error-ok-but-empty": "Error intèrna : Lo servidor a pas respondut.",
-       "api-error-overwrite": "Espotir un fichièr existent es pas autorizat.",
-       "api-error-stashfailed": "Error intèrna : lo servidor a pas pogut enregistrar lo fichièr temporari.",
        "api-error-publishfailed": "Error intèrna: Lo servidor a pas pogut publicar lo fichièr temporari.",
-       "api-error-stasherror": "Una error s'es produsida al moment del telecargament del fichièr per lo dissimular.",
-       "api-error-stashzerolength": "Lo servidor pòu pas estocar aqueu fichier perqué sa talha es nulla.",
-       "api-error-stashnotloggedin": "Devètz èsser connectat per enregistrar de fichiers dins l'espaci de telecargament.",
-       "api-error-timeout": "Lo servidor a pas respondut dins lo relambi pervist.",
-       "api-error-unclassified": "Una error desconeguda s'es produita.",
-       "api-error-unknown-code": "Error desconeguda : « $1 »",
-       "api-error-unknown-error": "Error intèrna : Quicòm a mal virat al moment del mandadís de vòstre fichièr.",
-       "api-error-unknown-warning": "Avertiment desconegut : $1",
+       "api-error-stashfailed": "Error intèrna : lo servidor a pas pogut enregistrar lo fichièr temporari.",
+       "api-error-unknown-warning": "Avertiment desconegut : « $1 ».",
        "api-error-unknownerror": "Error desconeguda : « $1 »",
-       "api-error-uploaddisabled": "Lo cargament es desactivat sus aqueste wiki.",
-       "api-error-verification-error": "Aqueste fichièr pòt èsser corromput, o son extension es incorrècta.",
        "duration-seconds": "$1 segonda{{PLURAL:$1||s}}",
        "duration-minutes": "$1 minuta{{PLURAL:$1||s}}",
        "duration-hours": "$1 ora{{PLURAL:$1||s}}",
        "pagelang-language": "Lenga",
        "pagelang-use-default": "Utilizar la lenga per defaut",
        "pagelang-select-lang": "Seleccionar la lenga",
+       "pagelang-reason": "Motiu",
        "pagelang-submit": "Validar",
+       "pagelang-nonexistent-page": "La pagina $1 existís pas.",
        "right-pagelang": "Cambiar la lenga de la pagina",
        "action-pagelang": "cambiar la lenga de la pagina",
        "log-name-pagelang": "Traçar los cambiaments de lenga",
        "special-characters-group-ipa": "API",
        "special-characters-group-symbols": "Simbòls",
        "special-characters-group-greek": "Grèc",
+       "special-characters-group-greekextended": "Grèc espandit",
        "special-characters-group-cyrillic": "Cirillic",
        "special-characters-group-arabic": "Arabi",
        "special-characters-group-arabicextended": "Arabi espandit",
        "special-characters-title-endash": "jonhent anglés",
        "special-characters-title-emdash": "jonhent em",
        "special-characters-title-minus": "signe mens",
+       "mw-widgets-dateinput-no-date": "Cap de data pas seleccionada",
+       "mw-widgets-mediasearch-input-placeholder": "Recercar de mèdias",
        "mw-widgets-mediasearch-noresults": "Ges de resultat trobat",
        "mw-widgets-categoryselector-add-category-placeholder": "Ajustar una categoria...",
        "sessionprovider-generic": "$1 sessions",
        "log-action-filter-patrol-autopatrol": "Patrolha automatica",
        "log-action-filter-protect-protect": "Proteccion",
        "log-action-filter-protect-modify": "Modificacion de proteccion",
+       "log-action-filter-protect-unprotect": "Desproteccion",
+       "log-action-filter-protect-move_prot": "Proteccion de renomenatge",
        "log-action-filter-rights-rights": "Cambiament manuau",
        "log-action-filter-rights-autopromote": "Cambiament automatic",
+       "log-action-filter-suppress-event": "Supression de jornal",
+       "log-action-filter-suppress-revision": "Supression de revision",
        "log-action-filter-suppress-delete": "Supression de pagina",
        "log-action-filter-upload-upload": "Telecargament novèu",
        "log-action-filter-upload-overwrite": "Retelecargament",
        "authprovider-confirmlink-success-line": "$1 : operacion capitada, lei còmptes son estats liats.",
        "authprovider-confirmlink-failed": "La temptativa de liar lei còmptes a pas capitat : $1",
        "authprovider-resetpass-skip-label": "Sautar",
+       "authform-newtoken": "Geton mancant. $1",
+       "authform-notoken": "Geton mancant",
+       "authform-wrongtoken": "Marrit geton",
        "specialpage-securitylevel-not-allowed-title": "Pas autorizat",
        "changecredentials": "Modificar las informacions d’identificacion",
+       "credentialsform-account": "Nom de compte :",
        "linkaccounts": "Liar lei còmptes",
        "linkaccounts-success-text": "Lo còmpte èra estat liat.",
        "linkaccounts-submit": "Liar lei còmptes",
index 06c9345..8ad40e4 100644 (file)
        "rcfilters-invalid-filter": "Nieprawidłowy filtr",
        "rcfilters-filterlist-title": "Filtry",
        "rcfilters-filterlist-noresults": "Nie znaleziono filtrów",
+       "rcfilters-filtergroup-registration": "Rejestracja użytkownika",
+       "rcfilters-filter-registered-description": "Zalogowani edytorzy.",
        "rcfilters-filtergroup-authorship": "Autorstwo edycji",
        "rcfilters-filter-editsbyself-label": "Moje edycje",
        "rcfilters-filter-editsbyself-description": "Edycje dokonane przez Ciebie.",
        "rcfilters-filter-editsbyother-label": "Edycje inne niż Twoje",
        "rcfilters-filter-editsbyother-description": "Edycje wykonane przez innych niż Ty.",
-       "rcfilters-filtergroup-userExpLevel": "Poziomu doświadczenia użytkownika",
+       "rcfilters-filtergroup-userExpLevel": "Poziom doświadczenia (tylko dla zarejestrowanych użytkowników)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Początkujący",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Nowi edytujący: mniej niż 10 edycji i 4 dni aktywności.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Mniej niż 10 edycji i 4 dni aktywności.",
        "rcfilters-filter-userExpLevel-learner-label": "Uczący się",
-       "rcfilters-filter-userExpLevel-learner-description": "Więcej dni aktywności i edycji niż 'Nowicjusze', ale mniej niż 'Doświadczeni użytkownicy.'",
+       "rcfilters-filter-userExpLevel-learner-description": "Więcej dni aktywności i edycji niż „Nowicjusze”, ale mniej niż „Doświadczeni użytkownicy”.",
        "rcfilters-filter-userExpLevel-experienced-label": "Doświadczeni użytkownicy",
        "rcfilters-filter-userExpLevel-experienced-description": "Ponad 30 dni aktywności i 500 edycji.",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Człowiek (nie bot)",
+       "rcfilters-filter-minor-label": "Drobne zmiany",
+       "rcfilters-filter-pageedits-label": "Edycje strony",
        "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
        "rcshowhideminor": "$1 drobne edycje",
        "apisandbox-sending-request": "Wysyłanie zapytania API…",
        "apisandbox-loading-results": "Pobieranie wyników API...",
        "apisandbox-results-error": "Wystąpił błąd podczas pobierania odpowiedzi na zapytanie API: $1.",
-       "apisandbox-request-params-json": "Parametry JSON:",
        "apisandbox-request-url-label": "URL zapytania:",
        "apisandbox-request-time": "Czas przetwarzania zapytania: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Popraw token i wyślij ponownie",
        "feedback-useragent": "Aplikacja klienta:",
        "searchsuggest-search": "Przeszukaj {{GRAMMAR:B.lp|{{SITENAME}}}}",
        "searchsuggest-containing": "zawierające...",
-       "api-error-autoblocked": "Twój adres IP został automatycznie zablokowany, ponieważ był używany przez zablokowanego użytkownika.",
-       "api-error-badaccess-groups": "Nie masz uprawnień aby przesyłać pliki do tej wiki.",
        "api-error-badtoken": "Błąd wewnętrzny – nieprawidłowy kod weryfikacyjny (token).",
-       "api-error-blocked": "Została ci zablokowana możliwość edycji.",
-       "api-error-copyuploaddisabled": "Przesyłanie poprzez podanie adresu URL zostało na tym serwerze wyłączone.",
-       "api-error-duplicate": "{{PLURAL:$1|Jest już inny plik|Są już inne pliki}} na tej stronie o tej samej zawartości.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Był już inny plik|Były już inne pliki}} na tej stronie o takiej samej zawartości, ale {{PLURAL:$1|został usunięty|zostały usunięte}}.",
-       "api-error-empty-file": "Przesłany przez Ciebie plik jest pusty.",
        "api-error-emptypage": "Tworzenie nowych, pustych stron jest niedozwolone.",
-       "api-error-fetchfileerror": "Błąd wewnętrzny – wystąpił błąd w trakcie pobierania pliku.",
-       "api-error-fileexists-forbidden": "Plik o nazwie \"$1\" już istnieje i nie może być nadpisany.",
-       "api-error-fileexists-shared-forbidden": "Plik o nazwie \"$1\" już istnieje we współdzielonym repozytorium i nie może być nadpisany.",
-       "api-error-file-too-large": "Przesłany przez Ciebie plik jest zbyt duży.",
-       "api-error-filename-tooshort": "Nazwa pliku jest zbyt krótka.",
-       "api-error-filetype-banned": "Zabroniony format pliku.",
-       "api-error-filetype-banned-type": "$1 nie {{PLURAL:$4|jest dozwolonym typem pliku|są dozwolonymi typami plików}}. Dopuszczalne są pliki w {{PLURAL:$3|formacie|formatach}} $2.",
-       "api-error-filetype-missing": "Brak rozszerzenia w nazwie pliku.",
-       "api-error-hookaborted": "Zmiana, którą próbowałeś wykonać została przerwana przez hak rozszerzenia.",
-       "api-error-http": "Błąd wewnętrzny – brak połączenia z serwerem.",
-       "api-error-illegal-filename": "Niedopuszczalna nazwa pliku.",
-       "api-error-internal-error": "Błąd wewnętrzny – wystąpił błąd w trakcie przetwarzania przesłanego pliku.",
-       "api-error-invalid-file-key": "Błąd wewnętrzny – nie można odnaleźć pliku w wśród plików tymczasowych.",
-       "api-error-missingparam": "Błąd wewnętrzny –  brak jest niektórych wymaganych informacji do realizacji przesłania.",
-       "api-error-missingresult": "Błąd wewnętrzny – nie można określić czy kopiowanie się udało.",
-       "api-error-mustbeloggedin": "Aby przesyłać pliki, musisz się zalogować.",
-       "api-error-mustbeposted": "Wystąpił błąd w oprogramowaniu. Nie użyto właściwej metody HTTP.",
-       "api-error-noimageinfo": "Plik przesłano pomyślnie, ale serwer nie zwrócił informacji na jego temat.",
-       "api-error-nomodule": "Błąd wewnętrzny – nie określono modułu przesyłania plików.",
-       "api-error-ok-but-empty": "Błąd wewnętrzny – brak odpowiedzi od serwera.",
-       "api-error-overwrite": "Nadpisanie istniejącego pliku nie jest dopuszczalne.",
-       "api-error-ratelimited": "Próbujesz przesłać więcej plików w krótszym odstępie czasowym, niż ta wiki na to pozwala.\nSpróbuj jeszcze raz za kilka minut.",
-       "api-error-stashfailed": "Błąd wewnętrzny – serwer nie mógł zapisać pliku tymczasowego.",
        "api-error-publishfailed": "Błąd wewnętrzny: serwer nie mógł zapisać pliku tymczasowego.",
-       "api-error-stasherror": "Wystąpił błąd podczas przesyłania pliku.",
-       "api-error-stashedfilenotfound": "Nie odnaleziono pliku podczas próby pobrania go ze schowka.",
-       "api-error-stashpathinvalid": "Ścieżka do pliku zapasowego jest błędna.",
-       "api-error-stashfilestorage": "Wystąpił błąd podczas przesyłania pliku do archiwum.",
-       "api-error-stashzerolength": "Serwer nie może zapisać pliku zapasowego do archiwum, gdyż ma on zerową długość.",
-       "api-error-stashnotloggedin": "Musisz się zalogować, aby móc zapisać plik zapasowy do archiwum.",
-       "api-error-stashwrongowner": "Plik w archiwum, do którego próbujesz uzyskać dostęp, nie należy do Ciebie.",
-       "api-error-stashnosuchfilekey": "Klucz zbioru w archiwum, do którego próbujesz uzyskać dostęp, nie należy do Ciebie.",
-       "api-error-timeout": "Serwer nie odpowiedział w spodziewanym czasie.",
-       "api-error-unclassified": "Wystąpił nieznany błąd",
-       "api-error-unknown-code": "Błąd nieznany – „$1”",
-       "api-error-unknown-error": "Błąd wewnętrzny – wysŧapił nierozpoznany błąd w trakcie próby przesłania pliku.",
+       "api-error-stashfailed": "Błąd wewnętrzny – serwer nie mógł zapisać pliku tymczasowego.",
        "api-error-unknown-warning": "Nieznane ostrzeżenie: „$1”.",
        "api-error-unknownerror": "Nieznany błąd: „$1”",
-       "api-error-uploaddisabled": "Na tej wiki przesyłanie zostało wyłączone.",
-       "api-error-verification-error": "Plik może być uszkodzony lub nazwa pliku ma nieprawidłowe rozszerzenie.",
-       "api-error-was-deleted": "Plik o tej nazwie już istniał, ale został usunięty.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekundy|sekund}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuta|minuty|minut}}",
        "duration-hours": "$1 {{PLURAL:$1|godzina|godziny|godzin}}",
        "usercssispublic": "Uwaga: Podstrony z kodem CSS są widoczne publicznie i nie powinny zawierać poufnych danych.",
        "restrictionsfield-badip": "Nieprawidłowy adres IP lub zakres adresów: $1",
        "restrictionsfield-label": "Dozwolone zakresy adresów IP:",
-       "restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "wersja $1",
        "pageid": "ID strony: $1"
 }
index 2166628..73eb495 100644 (file)
        "rcfilters-invalid-filter": "Filtro inválido",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-noresults": "Nenhum filtro encontrado",
+       "rcfilters-filtergroup-registration": "Registro de usuário",
+       "rcfilters-filter-registered-label": "Registrado",
+       "rcfilters-filter-registered-description": "Editores conectados.",
+       "rcfilters-filter-unregistered-label": "Não registrado",
+       "rcfilters-filter-unregistered-description": "Editores que não estão conectados.",
        "rcfilters-filtergroup-authorship": "Editar autoria",
        "rcfilters-filter-editsbyself-label": "Suas próprias edições",
        "rcfilters-filter-editsbyself-description": "Edições por você.",
        "rcfilters-filter-editsbyother-label": "Edições de outros",
        "rcfilters-filter-editsbyother-description": "Edições criadas por outros usuários (não você.)",
-       "rcfilters-filtergroup-userExpLevel": "Nível de experiência do usuário",
+       "rcfilters-filtergroup-userExpLevel": "Nível de experiência (apenas para usuário registados)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Recém-chegados",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Editores muito novos: menos de 10 edições e 4 dias de atividade.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Menos de 10 edições e 4 dias de atividade.",
        "rcfilters-filter-userExpLevel-learner-label": "Aprendizes",
        "rcfilters-filter-userExpLevel-learner-description": "Mais dias de atividade e edições do que \"Novatos\", mas menos do que \"Usuários experientes\".",
        "rcfilters-filter-userExpLevel-experienced-label": "Usuários experientes",
        "rcfilters-filter-userExpLevel-experienced-description": "Mais de 30 dias de atividade e 500 edições.",
+       "rcfilters-filtergroup-automated": "Contribuições automatizadas",
+       "rcfilters-filter-bots-label": "Robô",
+       "rcfilters-filter-bots-description": "Edições feitas por ferramentas automatizadas.",
+       "rcfilters-filter-humans-label": "Humano (não bot)",
+       "rcfilters-filter-humans-description": "Edições feitas por editores humanos.",
+       "rcfilters-filtergroup-significance": "Significado",
+       "rcfilters-filter-minor-label": "Edições menores",
+       "rcfilters-filter-minor-description": "Edita o autor rotulado como menor.",
+       "rcfilters-filter-major-label": "Edições não menores",
+       "rcfilters-filter-major-description": "Edições não rotuladas como menores.",
+       "rcfilters-filtergroup-changetype": "Tipo de mudança",
+       "rcfilters-filter-pageedits-label": "Edições da página",
+       "rcfilters-filter-pageedits-description": "Edições para conteúdo wiki, discussões, descrições de categorias ....",
+       "rcfilters-filter-newpages-label": "Criações de páginas",
+       "rcfilters-filter-newpages-description": "Edições que fazem novas páginas.",
+       "rcfilters-filter-categorization-label": "Mudanças de categoria",
+       "rcfilters-filter-categorization-description": "Registros de páginas que estão sendo adicionadas ou removidas de categorias.",
+       "rcfilters-filter-logactions-label": "Acções registadas",
+       "rcfilters-filter-logactions-description": "Ações administrativas, criação de contas, eliminação de páginas, carregamentos ...",
        "rcnotefrom": "Abaixo {{PLURAL:$5|é a mudança|são as mudanças}} desde <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfrom": "Mostrar as novas alterações a partir das $2 de $3",
        "rcshowhideminor": "$1 edições menores",
        "apisandbox-sending-request": "Enviando solicitação de API ...",
        "apisandbox-loading-results": "Recebendo resultados da API ...",
        "apisandbox-results-error": "Ocorreu um erro ao carregar a resposta de consulta da API: $1.",
-       "apisandbox-request-params-json": "parâmetros JSON:",
        "apisandbox-request-url-label": "URL solicitante:",
        "apisandbox-request-time": "Tempo do pedido: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrigir token e reenviar",
        "feedback-useragent": "Agente de usuário:",
        "searchsuggest-search": "Pesquisar em {{SITENAME}}",
        "searchsuggest-containing": "páginas contendo…",
-       "api-error-autoblocked": "Seu endereço IP foi bloqueado automaticamente, porque ele foi usado por um usuário bloqueado.",
-       "api-error-badaccess-groups": "Você não tem permissão para enviar arquivos para este wiki.",
        "api-error-badtoken": "Erro interno: token inválido.",
-       "api-error-blocked": "Você foi bloqueado de editar.",
-       "api-error-copyuploaddisabled": "O upload por URL está desativado neste servidor.",
-       "api-error-duplicate": "Já {{PLURAL:$1|há outro arquivo|existem outros arquivos}} no site com o mesmo conteúdo",
-       "api-error-duplicate-archive": "Já {{PLURAL:$1|existiu outro arquivo|existiram outros arquivos}} neste site com o mesmo conteúdo que, no entanto, {{PLURAL:$1|foi removido|foram removidos}}.",
-       "api-error-empty-file": "O arquivo que você enviou está vazio.",
        "api-error-emptypage": "Não é permitido criar páginas novas vazias.",
-       "api-error-fetchfileerror": "Erro interno: ocorreu um problema indeterminado ao acessar o arquivo.",
-       "api-error-fileexists-forbidden": "Já existe um arquivo com o nome \"$1\". Não é possível substituí-lo.",
-       "api-error-fileexists-shared-forbidden": "Já existe, no repositório de arquivos partilhados, um arquivo com o nome \"$1\". Não é possível substituí-lo.",
-       "api-error-file-too-large": "O arquivo que você enviou é muito grande.",
-       "api-error-filename-tooshort": "O nome do arquivo é curto demais.",
-       "api-error-filetype-banned": "Este tipo do arquivo é proibido.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|não é um tipo de arquivo permitido|não são tipos de arquivos permitidos}}. {{PLURAL:$3|O tipo de arquivo permitido é|Os tipos de arquivos permitidos são}} $2.",
-       "api-error-filetype-missing": "Falta a extensão de arquivo.",
-       "api-error-hookaborted": "A modificação que você tentou realizar foi abortada pelo hook de uma extensão.",
-       "api-error-http": "Erro interno: não foi possível conectar ao servidor.",
-       "api-error-illegal-filename": "O nome do arquivo não é permitido.",
-       "api-error-internal-error": "Erro interno: ocorreu algum erro ao processar o arquivo que você enviou ao wiki.",
-       "api-error-invalid-file-key": "Erro interno: o arquivo não foi encontrado no armazenamento temporário.",
-       "api-error-missingparam": "Erro interno: parâmetros em falta no pedido.",
-       "api-error-missingresult": "Erro interno: não foi possível determinar se a cópia foi feita.",
-       "api-error-mustbeloggedin": "Você precisa estar autenticado para enviar arquivos.",
-       "api-error-mustbeposted": "Erro interno: a solicitação requer HTTP POST",
-       "api-error-noimageinfo": "O upload foi concluído, mas o servidor não retornou informações sobre o arquivo.",
-       "api-error-nomodule": "Erro interno: o módulo de upload não está configurado.",
-       "api-error-ok-but-empty": "Erro interno: não há resposta do servidor.",
-       "api-error-overwrite": "Não é permitido sobrescrever um arquivo já existente.",
-       "api-error-ratelimited": "Você está tentando fazer upload de mais arquivos em um curto espaço de tempo do que este wiki permite.\nPor favor, tente novamente em alguns minutos.",
-       "api-error-stashfailed": "Erro interno: o servidor não conseguiu armazenar o arquivo temporário.",
        "api-error-publishfailed": "Erro interno: O servidor falhou ao publicar o arquivo temporário.",
-       "api-error-stasherror": "Houve um erro durante o upload do arquivo para a pilha.",
-       "api-error-stashedfilenotfound": "O arquivo escondido não foi encontrado ao tentar enviá-lo de seu esconderijo.",
-       "api-error-stashpathinvalid": "O caminho no qual o arquivo escondido deveria ter sido encontrado era inválido.",
-       "api-error-stashfilestorage": "Ocorreu um erro ao armazenar o arquivo em seu esconderijo.",
-       "api-error-stashzerolength": "O servidor não pôde esconder o arquivo, porque ele tinha zero de tamanho.",
-       "api-error-stashnotloggedin": "Você precisa estar logado para salvar arquivos no esconderijo.",
-       "api-error-stashwrongowner": "O arquivo que você estava tentando acessar no esconderijo não pertence a você.",
-       "api-error-stashnosuchfilekey": "O arquivo chave que você estava tentando acessar no esconderijo não existe.",
-       "api-error-timeout": "O servidor não respondeu dentro do tempo esperado.",
-       "api-error-unclassified": "Ocorreu um erro desconhecido",
-       "api-error-unknown-code": "Erro desconhecido: \"$1\"",
-       "api-error-unknown-error": "Erro interno: ocorreu um erro indeterminado ao tentar enviar o arquivo.",
+       "api-error-stashfailed": "Erro interno: o servidor não conseguiu armazenar o arquivo temporário.",
        "api-error-unknown-warning": "Aviso desconhecido: \"$1\".",
        "api-error-unknownerror": "Erro desconhecido: \"$1\".",
-       "api-error-uploaddisabled": "Este wiki está com o upload de arquivos desabilitado.",
-       "api-error-verification-error": "Este arquivo pode estar corrompido ou ter a extensão errada.",
-       "api-error-was-deleted": "Um arquivo deste nome foi carregado anteriormente e posteriormente excluído.",
        "duration-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}",
        "duration-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "usercssispublic": "Observação: As subpáginas CSS não devem conter dados confidenciais, pois são visíveis por outros usuários.",
        "restrictionsfield-badip": "Endereço IP ou intervalo inválido: $1",
        "restrictionsfield-label": "Intervalos IP permitidos:",
-       "restrictionsfield-help": "Um endereço IP ou intervalo CIDR por linha. Para ativar tudo, use<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Um endereço IP ou intervalo CIDR por linha. Para ativar tudo, use\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisão $1",
        "pageid": "ID da página $1"
 }
index 35d5caf..bf967dc 100644 (file)
        "rcfilters-invalid-filter": "Filtro inválido",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-noresults": "Não foram encontrados filtros",
+       "rcfilters-filtergroup-registration": "Registo de utilizador",
        "rcfilters-filtergroup-authorship": "Editar autoria",
        "rcfilters-filter-editsbyself-label": "As suas próprias edições",
        "rcfilters-filter-editsbyself-description": "Edições suas.",
        "rcfilters-filter-editsbyother-label": "Edições de outros",
        "rcfilters-filter-editsbyother-description": "Edições criadas por outros utilizadores (não por si).",
-       "rcfilters-filtergroup-userExpLevel": "Nível de experiência do utilizador",
+       "rcfilters-filtergroup-userExpLevel": "Nível de experiência (apenas para utilizadores registados)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Novatos",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Editores muito recentes: menos de 10 edições e 4 dias de atividade.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Menos de 10 edições e 4 dias de atividade.",
        "rcfilters-filter-userExpLevel-learner-label": "Aprendizes",
        "rcfilters-filter-userExpLevel-learner-description": "Mais dias de atividade e edições do que \"Novatos\", mas menos do que \"Utilizadores experientes\".",
        "rcfilters-filter-userExpLevel-experienced-label": "Utilizadores experientes",
        "apisandbox-sending-request": "A enviar solicitação de API...",
        "apisandbox-loading-results": "A receber resultados da API...",
        "apisandbox-results-error": "Ocorreu um erro ao carregar a resposta à consulta por API: $1",
-       "apisandbox-request-params-json": "Parâmetros JSON:",
        "apisandbox-request-url-label": "URL do pedido:",
        "apisandbox-request-time": "Tempo de processamento: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrija o identificador e volte a submete-lo",
        "feedback-useragent": "Agente de utilizador:",
        "searchsuggest-search": "Pesquisar na wiki {{SITENAME}}",
        "searchsuggest-containing": "contendo...",
-       "api-error-autoblocked": "O seu endereço IP foi bloqueado automaticamente, pois foi utilizado por um utilizador bloqueado.",
-       "api-error-badaccess-groups": "Não tem permissão para enviar ficheiros para esta wiki.",
        "api-error-badtoken": "Erro interno: Chave incorrecta.",
-       "api-error-blocked": "Foi bloqueado de editar.",
-       "api-error-copyuploaddisabled": "O carregamento de ficheiros por URL não foi possibilitado neste servidor.",
-       "api-error-duplicate": "Já {{PLURAL:$1|existia outro ficheiro|existiam outros ficheiro}} na wiki com o mesmo conteúdo.",
-       "api-error-duplicate-archive": "Já {{PLURAL:$1|estava outro ficheiro|estavam outros ficheiros}} no site com o mesmo conteúdo, mas {{PLURAL:$1|foi eliminado|foram eliminados}}.",
-       "api-error-empty-file": "O ficheiro que enviou está vazio.",
        "api-error-emptypage": "Não é permitido criar páginas novas vazias.",
-       "api-error-fetchfileerror": "Erro interno: Ocorreu um problema indeterminado ao aceder ao ficheiro.",
-       "api-error-fileexists-forbidden": "Já existe um ficheiro com o nome \"$1\" e não pode ser substituído.",
-       "api-error-fileexists-shared-forbidden": "Já existe um ficheiro com o nome \"$1\" no repositório de ficheiros partilhados e não pode ser substituído.",
-       "api-error-file-too-large": "O ficheiro que enviou era demasiado grande.",
-       "api-error-filename-tooshort": "O nome do ficheiro é demasiado curto.",
-       "api-error-filetype-banned": "Este tipo de ficheiro é proibido.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|não é um tipo de ficheiro permitido|não são tipos de ficheiro permitidos}}. {{PLURAL:$3|O tipo de ficheiro permitido é|Os tipos de ficheiro permitidos são}} $2.",
-       "api-error-filetype-missing": "Falta a extensão do ficheiro.",
-       "api-error-hookaborted": "A modificação que tentou fazer foi cancelada por uma extensão.",
-       "api-error-http": "Erro interno: Ocorreu um problema na ligação ao servidor.",
-       "api-error-illegal-filename": "Este nome de ficheiro não é permitido.",
-       "api-error-internal-error": "Erro interno: Ocorreu um erro indeterminado na wiki ao processar o ficheiro que enviou.",
-       "api-error-invalid-file-key": "Erro interno: O ficheiro não foi encontrado no armazenamento temporário.",
-       "api-error-missingparam": "Erro interno: Há parâmetros em falta no pedido.",
-       "api-error-missingresult": "Erro interno: Não foi possível determinar se a cópia foi feita.",
-       "api-error-mustbeloggedin": "Tem de iniciar sessão para enviar ficheiros.",
-       "api-error-mustbeposted": "Erro interno: O pedido necessita do HTTP POST.",
-       "api-error-noimageinfo": "O envio correu bem, mas o servidor não forneceu nenhuma informação sobre o ficheiro.",
-       "api-error-nomodule": "Erro interno: Não está definido nenhum módulo para o carregamento de ficheiros.",
-       "api-error-ok-but-empty": "Erro interno: o servidor não respondeu.",
-       "api-error-overwrite": "Não é permitido sobrescrever um ficheiro existente.",
-       "api-error-ratelimited": "Está a tentar carregar mais ficheiros do que esta wiki permite num espaço de tempo curto. Tente de novo dentro de alguns minutos, por favor.",
-       "api-error-stashfailed": "Erro interno: O servidor não conseguiu armazenar o ficheiro temporário.",
        "api-error-publishfailed": "Erro interno: Servidor não conseguiu publicar ficheiro temporário.",
-       "api-error-stasherror": "Ocorreu um erro no carregamento do ficheiro escondido.",
-       "api-error-stashedfilenotfound": "O ficheiro escondido não foi encontrado ao tentar carregá-lo.",
-       "api-error-stashpathinvalid": "O caminho no qual o ficheiro escondido deveria ter sido encontrado era inválido.",
-       "api-error-stashfilestorage": "Ocorreu um erro no carregamento do ficheiro escondido.",
-       "api-error-stashzerolength": "Não foi possível o servidor esconder o ficheiro, porque este tinha comprimento zero.",
-       "api-error-stashnotloggedin": "Tem de ter uma sessão iniciada para gravar ficheiros na área de ficheiros escondidos.",
-       "api-error-stashwrongowner": "O ficheiro a que estava a tentar aceder na área de ficheiros escondidos não lhe pertence.",
-       "api-error-stashnosuchfilekey": "O chave do ficheiro a que estava a tentar aceder na área de ficheiros escondidos não existe.",
-       "api-error-timeout": "O servidor não respondeu no prazo esperado.",
-       "api-error-unclassified": "Ocorreu um erro desconhecido",
-       "api-error-unknown-code": "Erro desconhecido: \"$1\"",
-       "api-error-unknown-error": "Erro interno: Ocorreu um erro indeterminado ao tentar receber o ficheiro.",
+       "api-error-stashfailed": "Erro interno: O servidor não conseguiu armazenar o ficheiro temporário.",
        "api-error-unknown-warning": "Aviso desconhecido: $1",
        "api-error-unknownerror": "Erro desconhecido: \"$1\".",
-       "api-error-uploaddisabled": "Esta wiki não está configurada para poder receber ficheiros.",
-       "api-error-verification-error": "Este ficheiro pode estar corrompido, ou ter a extensão errada.",
-       "api-error-was-deleted": "Um ficheiro com este nome foi carregado anteriormente e posteriormente eliminado.",
        "duration-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}",
        "duration-hours": "$1 {{PLURAL:$1|hora|horas}}",
        "usercssispublic": "Nota: As subpáginas de CSS não devem conter dados confidenciais porque podem ser vistas por outros utilizadores.",
        "restrictionsfield-badip": "Endereço IP (ou gama de endereços IP) inválido: $1",
        "restrictionsfield-label": "Gamas de endereços IP permitidas:",
-       "restrictionsfield-help": "Um endereço IP ou uma gama CIDR por linha. Para ativar todos,\nuse<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Um endereço IP ou uma gama CIDR por linha. Para ativar todos,\nuse: <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisão $1",
        "pageid": "identificador de página $1"
 }
index 7219eb6..8c2eef7 100644 (file)
        "sig_tip": "This is the text that appears when you hover the mouse over the second key from the right on the edit toolbar.\n{{Identical|Signature with timestamp}}",
        "hr_tip": "This is the text that appears when you hover the mouse over the first button on the right on the edit toolbar.",
        "summary": "The Summary text beside the edit summary field\n\nSee also:\n* {{msg-mw|Subject}}\nSee also:\n* {{msg-mw|Accesskey-summary}}\n* {{msg-mw|Tooltip-summary}}\n{{Identical|Summary}}",
-       "subject": "Used as label for input box in the EditPage page.\n\nSee also:\n* {{msg-mw|Summary}}\n{{Identical|Subject}}",
+       "subject": "Used as label for the section title input box when adding a new section on a talk page.\n\nSee also:\n* {{msg-mw|Summary}}\n{{Identical|Subject}}",
        "minoredit": "Text above Save page button in editor\n\nSee also:\n* {{msg-mw|Minoredit}}\n* {{msg-mw|Accesskey-minoredit}}\n* {{msg-mw|Tooltip-minoredit}}",
        "watchthis": "Text of checkbox above {{msg-mw|Showpreview}} button in editor.\n\nSee also:\n* {{msg-mw|Watchthis}}\n* {{msg-mw|Accesskey-watch}}\n* {{msg-mw|Tooltip-watch}}\n{{Identical|Watch this page}}",
        "savearticle": "Text on the button to create a new page. It should be an action which is short and makes clear that the effect is immediate and public.\n\nSee also {{msg-mw|showpreview}} and {{msg-mw|showdiff}} for the other buttons, and {{msg-mw|savechanges}} for the label for the button when the page is being modified.\n\nSee also:\n* {{msg-mw|Accesskey-publish}}\n* {{msg-mw|Tooltip-publish}}\n{{Identical|Save page}}",
        "missingcommenttext": "This message is shown, when the textbox by a new-section is empty.",
        "missingcommentheader": "Edit summary that is shown if you enable \"Prompt me when entering a blank summary\" and add a new section without headline to a talk page.\n\n\"Subject\" is {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Missingsummary}}\n* {{msg-mw|Savearticle}}",
        "summary-preview": "Preview of the edit summary, shown under the edit summary itself.\nShould match: {{msg-mw|summary}}.",
-       "subject-preview": "Should match {{msg-mw|subject}}",
+       "subject-preview": "Used as label for preview of the section title when adding a new section on a talk page.\n\nShould match {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Summary-preview}}\n\n{{Identical|Subject}}",
        "previewerrortext": "When a user has the editing preference LivePreview enabled, clicked the Preview or Show Changes button in the edit page and the action did not succeed.",
        "blockedtitle": "Used as title displayed for blocked users. The corresponding message body is one of the following messages:\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Autoblockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext}}",
        "blockedtext": "Text displayed to blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
        "recentchanges-legend-plusminus": "{{optional}}\nA plus/minus sign with a number for the legend.",
        "recentchanges-submit": "Label for submit button in [[Special:RecentChanges]]\n{{Identical|Show}}",
        "rcfilters-activefilters": "Title for the filters selection showing the active filters.",
+       "rcfilters-restore-default-filters": "Label for the button that resets filters to defaults",
+       "rcfilters-clear-all-filters": "Title for the button that clears all filters",
        "rcfilters-search-placeholder": "Placeholder for the filter search input.",
        "rcfilters-invalid-filter": "A label for an invalid filter.",
+       "rcfilters-empty-filter": "Placeholder for the filter list when no filters were chosen.",
        "rcfilters-filterlist-title": "Title for the filters list.\n{{Identical|Filter}}",
        "rcfilters-filterlist-noresults": "Message showing no results found for searching a filter.",
        "rcfilters-filtergroup-registration": "Title for the filter group for editor registration type.",
-       "rcfilters-filter-registered-label": "Label for the filter for showing edits made by logged-in users.",
+       "rcfilters-filter-registered-label": "Label for the filter for showing edits made by logged-in users.\n{{Identical|Registered}}",
        "rcfilters-filter-registered-description": "Description for the filter for showing edits made by logged-in users.",
        "rcfilters-filter-unregistered-label": "Label for the filter for showing edits made by logged-out users.",
        "rcfilters-filter-unregistered-description": " Description for the filter for showing edits made by logged-out users.",
        "rcfilters-filter-userExpLevel-experienced-label": "Label for the filter for showing edits made by experienced editors.",
        "rcfilters-filter-userExpLevel-experienced-description": "Description for the filter for showing edits made by experienced editors.",
        "rcfilters-filtergroup-automated": "Title for the filter group for editor automation type.",
-       "rcfilters-filter-bots-label": "Label for the filter for showing edits made by automated tools.",
+       "rcfilters-filter-bots-label": "Label for the filter for showing edits made by automated tools.\n{{Identical|Bot}}",
        "rcfilters-filter-bots-description": "Description for the filter for showing edits made by automated tools.",
        "rcfilters-filter-humans-label": "Label for the filter for showing edits made by human editors.",
-       "rcfilters-filter-humans-description": " Description for the filter for showing edits made by human editors.",
-       "rcfilters-filtergroup-significance": "Title for the filter group for edit significance.",
+       "rcfilters-filter-humans-description": "Description for the filter for showing edits made by human editors.",
+       "rcfilters-filtergroup-significance": "Title for the filter group for edit significance.\n{{Identical|Significance}}",
        "rcfilters-filter-minor-label": "Label for the filter for showing edits marked as minor.",
        "rcfilters-filter-minor-description": "Description for the filter for showing edits marked as minor.",
        "rcfilters-filter-major-label": "Label for the filter for showing edits not marked as minor.",
        "uncategorizedimages-summary": "{{notranslate}}\nused in [[Special:Uncategorizedimages]]. [[mw:Manual:Interface/Special pages summary|mw manual]].",
        "uncategorizedtemplates": "{{doc-special|UncategorizedTemplates}}",
        "uncategorizedtemplates-summary": "{{doc-specialpagesummary|uncategorizedtemplates}}",
-       "uncategorized-categories-exceptionlist": "System message used as a list of exceptions for Special:UncategorizedCategories. {{notranslate}}",
+       "uncategorized-categories-exceptionlist": "{{optional}}\nSystem message used as a list of exceptions for Special:UncategorizedCategories.",
        "unusedcategories": "{{doc-special|UnusedCategories}}",
        "unusedcategories-summary": "{{doc-specialpagesummary|unusedcategories}}",
        "unusedimages": "{{doc-special|UnusedImages}}",
        "apisandbox-sending-request": "JavaScript message displayed while the request is being sent.",
        "apisandbox-loading-results": "JavaScript message displayed while the response is being read.",
        "apisandbox-results-error": "Displayed as an error message from JavaScript when the request failed.\n\nParameters:\n* $1 - Error message",
-       "apisandbox-request-params-json": "Label for text field display the request parameters as JSON.",
        "apisandbox-request-url-label": "Label for the text field displaying the URL used to make this request.",
        "apisandbox-request-time": "Label and value for displaying the time taken by the request.\n\nParameters:\n* $1 - Time taken in milliseconds",
        "apisandbox-results-fixtoken": "JavaScript button label",
        "feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.\n{{Identical|User agent}}",
        "searchsuggest-search": "Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)\n{{Identical|Search}}",
        "searchsuggest-containing": "Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.",
-       "api-error-autoblocked": "API error message that can be used for client side localisation of API errors.\n\nCf. {{msg-mw|Autoblockedtext}}.",
-       "api-error-badaccess-groups": "API error message that can be used for client side localisation of API errors.",
        "api-error-badtoken": "API error message that can be used for client side localisation of API errors.",
-       "api-error-blocked": "API error message that can be used for client side localisation of API errors.",
-       "api-error-copyuploaddisabled": "API error message that can be used for client side localisation of API errors.",
-       "api-error-duplicate": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 - a number of files",
-       "api-error-duplicate-archive": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 - a number of files",
-       "api-error-empty-file": "API error message that can be used for client side localisation of API errors.",
        "api-error-emptypage": "API error message that can be used for client side localisation of API errors.",
-       "api-error-fetchfileerror": "API error message that can be used for client side localisation of API errors.",
-       "api-error-fileexists-forbidden": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - filename\nSee also:\n* {{msg-mw|Api-error-fileexists-shared-forbidden}}",
-       "api-error-fileexists-shared-forbidden": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - filename\nSee also:\n* {{msg-mw|Api-error-fileexists-forbidden}}",
-       "api-error-file-too-large": "API error message that can be used for client side localisation of API errors.",
-       "api-error-filename-tooshort": "API error message that can be used for client side localisation of API errors.",
-       "api-error-filetype-banned": "API error message that can be used for client side localisation of API errors.",
-       "api-error-filetype-banned-type": "API error message that can be used for client side localisation of API errors.\n\n* $1 is the extension(s) of the file which cannot be uploaded\n* $2 is the list of file extensions that can be uploaded (Example: ''png, gif, jpg, jpeg, ogg, pdf, svg.'')\n* $3 is the number of allowed file formats (to be used for the PLURAL function)\n* $4 is the number of extensions that could not be uploaded (to be used for the PLURAL function)",
-       "api-error-filetype-missing": "The word \"extension\" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.",
-       "api-error-hookaborted": "The word \"extension\" here refers to a [[:mw:Manual:Extensions|MediaWiki Extension]] which extends the functionality of the basic wiki by adding something to its capabilities. \"… aborted by an extension\" implies that an operation could not be performed successfully or was not allowed to continue to its intended end.",
-       "api-error-http": "API error message that can be used for client side localisation of API errors.",
-       "api-error-illegal-filename": "API error message that can be used for client side localisation of API errors.",
-       "api-error-internal-error": "API error message that can be used for client side localisation of API errors.",
-       "api-error-invalid-file-key": "API error message that can be used for client side localisation of API errors.",
-       "api-error-missingparam": "API error message that can be used for client side localisation of API errors.",
-       "api-error-missingresult": "API error message that can be used for client side localisation of API errors.",
-       "api-error-mustbeloggedin": "API error message that can be used for client side localisation of API errors.",
-       "api-error-mustbeposted": "API error message that can be used for client side localisation of API errors.",
-       "api-error-noimageinfo": "API error message that can be used for client side localisation of API errors.",
-       "api-error-nomodule": "API error message that can be used for client side localisation of API errors.",
-       "api-error-ok-but-empty": "API error message that can be used for client side localisation of API errors.",
-       "api-error-overwrite": "API error message that can be used for client side localisation of API errors.",
-       "api-error-ratelimited": "API error message that can be used for client side localisation of API errors.\n\nCf. {{msg-mw|Actionthrottledtext}}",
-       "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}}",
-       "api-error-unknown-error": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashfailed": "API error message that can be used for client side localisation of API errors.",
        "api-error-unknown-warning": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 is an unknown warning.",
        "api-error-unknownerror": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - an unknown error message\n{{Identical|Unknown error}}",
-       "api-error-uploaddisabled": "API error message that can be used for client side localisation of API errors.",
-       "api-error-verification-error": "The word \"extension\" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.",
-       "api-error-was-deleted": "API error message that can be used for client side localisation of API errors.",
        "duration-seconds": "Used as duration. Parameters:\n* $1 - number of seconds\n{{Related|Duration}}\n{{Identical|Second}}",
        "duration-minutes": "Used as duration. Parameters:\n* $1 - number of minutes\n{{Related|Duration}}\n{{Identical|Minute}}",
        "duration-hours": "Used as duration. Parameters:\n* $1 - number of hours\n{{Related|Duration}}\n{{Identical|Hour}}",
index f64d92a..6011dfb 100644 (file)
@@ -98,7 +98,8 @@
                        "Irus",
                        "Kareyac",
                        "Mailman",
-                       "Аль-Гимравий"
+                       "Аль-Гимравий",
+                       "Gamliel Fishkin"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Показать",
        "rcfilters-activefilters": "Активные фильтры",
+       "rcfilters-restore-default-filters": "Восстановить фильтры по умолчанию",
+       "rcfilters-clear-all-filters": "Очистить все фильтры",
        "rcfilters-search-placeholder": "Последние изменения фильтров (просмотрите или начните вводить)",
        "rcfilters-invalid-filter": "Недопустимый фильтр",
+       "rcfilters-empty-filter": "Нет активных фильтров. Показываются все правки.",
        "rcfilters-filterlist-title": "Фильтры",
        "rcfilters-filterlist-noresults": "Фильтры не найдены",
+       "rcfilters-filtergroup-registration": "Регистрация участников",
+       "rcfilters-filter-registered-label": "Зарегистрированные",
+       "rcfilters-filter-registered-description": "Вошедшие редакторы.",
+       "rcfilters-filter-unregistered-label": "Незарегистрированные",
+       "rcfilters-filter-unregistered-description": "Редакторы, которые не вошли в систему.",
        "rcfilters-filtergroup-authorship": "Редактировать авторство",
        "rcfilters-filter-editsbyself-label": "Ваши собственные правки",
        "rcfilters-filter-editsbyself-description": "Ваши правки.",
        "rcfilters-filter-editsbyother-label": "Правки других участников",
-       "rcfilters-filter-editsbyother-description": "Ð\98зменениÑ\8f, Ñ\81озданнÑ\8bе Ð´Ñ\80Ñ\83гими Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8fми (а Ð½Ðµ Ð²Ð°Ð¼Ð¸.)",
-       "rcfilters-filtergroup-userExpLevel": "Уровня опыта пользователей",
+       "rcfilters-filter-editsbyother-description": "Ð\9fÑ\80авки, Ñ\81деланнÑ\8bе Ð´Ñ\80Ñ\83гими Ñ\83Ñ\87аÑ\81Ñ\82никами (не Ð²Ð°Ð¼Ð¸).",
+       "rcfilters-filtergroup-userExpLevel": "Уровня опыта (только для зарегистрированных участников)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Новички",
-       "rcfilters-filter-userExpLevel-newcomer-description": "СовÑ\81ем Ð½Ð¾Ð²Ñ\8bе Ñ\80едакÑ\82оÑ\80Ñ\8b: Ð¼енее 10 правок и 4 дней работы.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Ð\9cенее 10 правок и 4 дней работы.",
        "rcfilters-filter-userExpLevel-learner-label": "Учащиеся",
-       "rcfilters-filter-userExpLevel-learner-description": "Больше правок и дней работы, чем у 'новичков', но меньше, чем у 'опытных пользователей'.",
+       "rcfilters-filter-userExpLevel-learner-description": "Больше правок и дней работы, чем у «Новичков», но меньше, чем у «Опытных пользователей».",
        "rcfilters-filter-userExpLevel-experienced-label": "Опытные пользователи",
        "rcfilters-filter-userExpLevel-experienced-description": "Более 30 дней активности и 500 правок.",
+       "rcfilters-filtergroup-automated": "Автоматизированные вклады",
+       "rcfilters-filter-bots-label": "Бот",
+       "rcfilters-filter-bots-description": "Правки, сделанные с помощью автоматизированных инструментов.",
+       "rcfilters-filter-humans-label": "Человек (не бот)",
+       "rcfilters-filter-humans-description": "Правки, внесённые редакторами.",
+       "rcfilters-filtergroup-significance": "Значение",
+       "rcfilters-filter-minor-label": "Малые правки",
+       "rcfilters-filter-minor-description": "Правки, которые автор пометил как малые.",
+       "rcfilters-filter-major-label": "Обычные правки",
+       "rcfilters-filter-major-description": "Правки, не помеченные как малые.",
+       "rcfilters-filtergroup-changetype": "Тип изменения",
+       "rcfilters-filter-pageedits-label": "Правки страницы",
+       "rcfilters-filter-pageedits-description": "Правки содержимого, обсуждений, описания категорий…",
+       "rcfilters-filter-newpages-label": "Создания страниц",
+       "rcfilters-filter-newpages-description": "Правки, приводящие к созданию новых страниц.",
+       "rcfilters-filter-categorization-label": "Изменения категорий",
+       "rcfilters-filter-categorization-description": "Записи о страницах, добавленных или удаленных из категорий.",
+       "rcfilters-filter-logactions-label": "Протоколируемые действия",
+       "rcfilters-filter-logactions-description": "Административные действия, создания учётных записей, удаления страниц, загрузки файлов…",
        "rcnotefrom": "Ниже {{PLURAL:$5|указано изменение|перечислены изменения}} с <strong>$3, $4</strong> (показано не более <strong>$1</strong>).",
        "rclistfrom": "Показать изменения с $3 $2.",
        "rcshowhideminor": "$1 малые правки",
        "apisandbox-sending-request": "Отправка API-запроса…",
        "apisandbox-loading-results": "Получение API-результатов…",
        "apisandbox-results-error": "Произошла ошибка при загрузке API-ответа на запрос: $1.",
-       "apisandbox-request-params-json": "JSON-параметры:",
        "apisandbox-request-url-label": "URL-адрес запроса:",
        "apisandbox-request-time": "Время запроса: {{PLURAL:$1|$1 мс}}",
        "apisandbox-results-fixtoken": "Исправьте токен и повторите отправку",
        "whatlinkshere-hideredirs": "$1 перенаправления",
        "whatlinkshere-hidetrans": "$1 включения",
        "whatlinkshere-hidelinks": "$1 ссылки",
-       "whatlinkshere-hideimages": "$1 файловые ссылки",
+       "whatlinkshere-hideimages": "$1 файл{{PLURAL:$1|овая ссылка|овых ссылки|овых ссылок}}",
        "whatlinkshere-filters": "Фильтры",
        "whatlinkshere-submit": "Выполнить",
        "autoblockid": "Автоблокировка #$1",
        "feedback-useragent": "Браузер:",
        "searchsuggest-search": "Искать в {{grammar:prepositional|{{SITENAME}}}}",
        "searchsuggest-containing": "содержащие…",
-       "api-error-autoblocked": "Ваш IP-адрес был автоматически заблокирован, потому что он был использован заблокированным участником.",
-       "api-error-badaccess-groups": "Вам не разрешено загружать файлы в эту вики.",
        "api-error-badtoken": "Внутренняя ошибка:  некорректный токен.",
-       "api-error-blocked": "Редактирование было для вас заблокировано.",
-       "api-error-copyuploaddisabled": "Загрузка по URL-адресу отключена на этом сервере.",
-       "api-error-duplicate": "Уже {{PLURAL:$1|существует другой файл|существуют другие файлы}} с таким же содержимым.",
-       "api-error-duplicate-archive": "Ранее на сайте {{PLURAL:$1|1уже существовал файл|существовали файлы}} с точно таким же содержанием, но {{PLURAL:$1|он был удалён|они были удалены}}.",
-       "api-error-empty-file": "Отправленный вами файл пуст.",
        "api-error-emptypage": "Не допускается создание новых пустых страниц.",
-       "api-error-fetchfileerror": "Внутренняя ошибка: что-то пошло не так при получении файла.",
-       "api-error-fileexists-forbidden": "Файл с именем «$1» уже существует и не может быть перезаписан.",
-       "api-error-fileexists-shared-forbidden": "Файл с именем «$1» уже существует в хранилище общих файлов и не может быть перезаписан.",
-       "api-error-file-too-large": "Отправленный вами файл слишком велик.",
-       "api-error-filename-tooshort": "Слишком короткое имя файла.",
-       "api-error-filetype-banned": "Этот тип файлов запрещён.",
-       "api-error-filetype-banned-type": "$1 — {{PLURAL:$4|1=запрещённый тип файла|запрещённые типы файлов}}. {{PLURAL:$3|1=Разрешённый тип файлов —|Разрешённые типы файлов:}} $2.",
-       "api-error-filetype-missing": "У этого файла отсутствует расширение.",
-       "api-error-hookaborted": "Изменение, которые вы пытались сделать, прервано обработчиком расширения.",
-       "api-error-http": "Внутренняя ошибка: не удаётся подключиться к серверу.",
-       "api-error-illegal-filename": "Недопустимое имя файла.",
-       "api-error-internal-error": "Внутренняя ошибка: что-то пошло не так при обработке вашей загрузки в вики.",
-       "api-error-invalid-file-key": "Внутренняя ошибка: файл во временном хранилище не найден.",
-       "api-error-missingparam": "Внутренняя ошибка: отсутствуют параметры по запросу.",
-       "api-error-missingresult": "Внутренняя ошибка: не удалось определить, успешно ли завершилось копирование.",
-       "api-error-mustbeloggedin": "Вы должны представиться системе для загрузки файлов.",
-       "api-error-mustbeposted": "Внутренняя ошибка: запрос требует инструкцию HTTP POST.",
-       "api-error-noimageinfo": "Загрузка завершилась успешно, но сервер не вернул никакой информации о файле.",
-       "api-error-nomodule": "Внутренняя ошибка: не настроен модуль загрузки.",
-       "api-error-ok-but-empty": "Внутренняя ошибка: нет ответа от сервера.",
-       "api-error-overwrite": "Не допускается замена существующего файла.",
-       "api-error-ratelimited": "Вы пытаетесь загрузить несколько файлов за более короткий промежуток времени, чем это позволено.\nПожалуйста, попробуйте ещё раз через несколько минут.",
-       "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»",
-       "api-error-unknown-error": "Внутренняя ошибка: что-то пошло не так при попытке загрузить файл.",
+       "api-error-stashfailed": "Внутренняя ошибка: сервер не смог сохранить временный файл.",
        "api-error-unknown-warning": "Неизвестное предупреждение: «$1».",
        "api-error-unknownerror": "Неизвестная ошибка: «$1».",
-       "api-error-uploaddisabled": "В этой вики отключена возможность загрузки файлов.",
-       "api-error-verification-error": "Возможно, этот файл повреждён или имеет неправильное расширение.",
-       "api-error-was-deleted": "Файл с таким именем был уже ранее загружен и впоследствии удалён.",
        "duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
        "duration-minutes": "$1 {{PLURAL:$1|минута|минуты|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|час|часа|часов}}",
        "usercssispublic": "Обратите внимание: подстраницы CSS не должны содержать конфиденциальные сведения, поскольку они доступны для просмотра другим участникам.",
        "restrictionsfield-badip": "Недопустимый IP-адрес или диапазон адресов: $1",
        "restrictionsfield-label": "Разрешённые диапазоны IP-адресов:",
-       "restrictionsfield-help": "По одному IP-адресу или CIDR-диапазону в строке. Чтобы разрешить всё, используйте <br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
+       "restrictionsfield-help": "По одному IP-адресу или CIDR-диапазону в строке. Чтобы разрешить всё, используйте:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "версия $1",
        "pageid": "ID страницы $1"
 }
index 2c8bc34..4a5ce17 100644 (file)
        "createacct-another-username-ph": "Ааккын суруй",
        "yourpassword": "Киирии тыла:",
        "userlogin-yourpassword": "Аһарык",
-       "userlogin-yourpassword-ph": "Ð\9aииÑ\80ии Ñ\82Ñ\8bлгын суруй",
-       "createacct-yourpassword-ph": "Ð\9aииÑ\80ии Ñ\82Ñ\8bлгын суруй",
-       "yourpasswordagain": "Ð\9aииÑ\80ии Ñ\82Ñ\8bлгын хатылаа:",
-       "createacct-yourpasswordagain": "Ð\9aииÑ\80ии Ñ\82Ñ\8bлгын бигэргэт",
-       "createacct-yourpasswordagain-ph": "Ð\9aииÑ\80ии Ñ\82Ñ\8bлгын хатылаа",
+       "userlogin-yourpassword-ph": "Ð\90һаÑ\80Ñ\8bккын суруй",
+       "createacct-yourpassword-ph": "Ð\90һаÑ\80Ñ\8bккын суруй",
+       "yourpasswordagain": "Ð\90һаÑ\80Ñ\8bккын хатылаа:",
+       "createacct-yourpasswordagain": "Ð\90һаÑ\80Ñ\8bккын бигэргэт",
+       "createacct-yourpasswordagain-ph": "Ð\90һаÑ\80Ñ\8bккын хатылаа",
        "userlogin-remembermypassword": "Тиһиликтэн тахсыма",
        "userlogin-signwithsecure": "Бигэ холбонуу",
        "cannotlogin-title": "Киирэр сатаммат",
        "gotaccount": "Бэлиэтэммитиҥ дуо? '''$1'''.",
        "gotaccountlink": "Аатыҥ",
        "userlogin-resetlink": "Киирэр тылгын умнубуккун дуо?",
-       "userlogin-resetpassword-link": "Ð\9aииÑ\80ии тылгын санаттараҕын дуо?",
+       "userlogin-resetpassword-link": "Ð\90һаÑ\80Ñ\8bк тылгын санаттараҕын дуо?",
        "userlogin-helplink2": "Киирэргэ көмө",
        "userlogin-loggedin": "Маннык аатынан киирбиккин {{GENDER:$1|$1}}.\nАтын аатынан киирэргэ аллара көстөр форманы туһан.",
        "userlogin-reauth": "Тиһиккэ хат киирэн {{GENDER:$1|$1}} буоларгын бигэргэтиэхтээххин.",
        "nouserspecified": "Кыттааччы аатын киллэриэхтээххин.",
        "login-userblocked": "Бу кыттааччы бобуллубут. Тиһиккэ киирии көҥүллэммэт.",
        "wrongpassword": "Киирии тылыҥ сыыһалаах. Өссө киллэрэн көр.",
-       "wrongpasswordempty": "Ð\9aииÑ\80ии Ñ\82Ñ\8bлгÑ\8bн Ñ\81Ñ\83Ñ\80Ñ\83йбаÑ\82аÑ\85Ñ\85Ñ\8bн. Ó¨Ñ\81Ñ\81Ó© киирэн көр.",
+       "wrongpasswordempty": "Ð\90һаÑ\80Ñ\8bккÑ\8bн Ñ\81Ñ\83Ñ\80Ñ\83йбаÑ\82аÑ\85Ñ\85Ñ\8bн. Ð¥Ð°Ñ\82 киирэн көр.",
        "passwordtooshort": "Киирии тылыҥ наһаа кылгас.\nКырата {{PLURAL:$1|1 бэлиэлээх|$1 бэлиэлээх}} буолуохтаах.",
        "passwordtoolong": "Аһарык {{PLURAL:$1|1 бэлиэттэн|$1 бэлиэттэн}} уһун буолуо суохтаах.",
        "passwordtoopopular": "Элбэхтэ туттуллар аһарыктары туттар сатаммат. Бука диэн атын аһарыкта тал.",
        "password-name-match": "Аһарыгыҥ ааккыттан атын буолуохтаах.",
        "password-login-forbidden": "Маннык ааты уонна киирии тылы туһаныы бобуллар.",
        "mailmypassword": "Киирии тылы саҥардыы",
-       "passwordremindertitle": "{{SITENAME}} ÐºÐ¸Ð¸Ñ\80ии тылын санатыы",
-       "passwordremindertext": "Ким эрэ (бадаҕа эн бу IP-аадырыстан: $1), {{SITENAME}} ($4) аһарыгын саҥаттан ыытыҥ диэбит.\n\"$2\" кыттааччы быстах аһарыга билигин маннык: \"$3\".\nӨскө маны эн чахчы көрдөөбүт буоллаххына, систиэмэҕэ саҥаттан киирэҥҥин аһарыккын уларытыаххын сөп.\nБыстах аһарык {{PLURAL:$5|биир хонук|$5 хонук устата}} үлэлиир.\n\nӨскөтүн аһарыгы саҥаттан көрдөөбөтөх буоллаххына,\nэбэтэр урукку аһарыккн өйдөөн кэлбит буоллаххына,\nбу суругу ааххайыма уонна урукку аһарыккын салгыы туһан.",
+       "passwordremindertitle": "{{SITENAME}} Ð°Ò»Ð°Ñ\80Ñ\8bк тылын санатыы",
+       "passwordremindertext": "Ким эрэ (бадаҕа Эн бу IP-аадырыстан: $1), {{SITENAME}} ($4) аһарыгын саҥаттан ыытыҥ диэбит.\n\"$2\" кыттааччы быстах аһарыга билигин маннык: \"$3\".\nӨскө маны эн чахчы көрдөөбүт буоллаххына, систиэмэҕэ саҥаттан киирэҥҥин аһарыккын уларытыаххын сөп.\nБыстах аһарык {{PLURAL:$5|биир хонук|$5 хонук устата}} үлэлиир.\n\nӨскөтүн аһарыгы саҥаттан көрдөөбөтөх буоллаххына,\nэбэтэр урукку аһарыккын өйдөөн кэлбит буоллаххына,\nбу суругу ааххайыма уонна урукку аһарыккын салгыы туһан.",
        "noemail": "\"$1\" ааттаах киһиэхэ эл. почтата ыйыллыбатах.",
        "noemailcreate": "Электроннай почтаҥ сөптөөх аадырыһын суруйуохтааххын",
        "passwordsent": "Саҥа аһарык тыл \"$1\" эл. почтатыгар ыытылынна.\nТиһиккэ киирэргэ саҥа аһарыгы туһан.",
        "accountcreated": "Саҥа аат иҥэрилиннэ",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|ыр.]]) бэлиэ аат оҥоһулунна.",
        "createaccount-title": "{{SITENAME}} бырайыакка саҥа аат оҥоруу",
-       "createaccount-text": "Ð\9aим Ñ\8dÑ\80Ñ\8d {{SITENAME}} Ð±Ñ\8bÑ\80айÑ\8bакка ($4) Ñ\81аҥа $2 Ð°Ð°Ñ\82Ñ\8b Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dÑ\8dбиÑ\82. \"$2\" ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bла \"$3\". Ð\91илигин ÐºÐ¸Ð¸Ñ\80Ñ\8dн ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлгÑ\8bн Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bаÑ\85Ñ\85Ñ\8bн Ð½Ð°Ð°Ð´Ð°.\n\nСаҥа аат сыыһа оҥоһуллубут буоллаҕына тугу да гыныа суоххун сөп.",
+       "createaccount-text": "Ð\9aим Ñ\8dÑ\80Ñ\8d {{SITENAME}} Ð±Ñ\8bÑ\80айÑ\8bакка ($4) Ñ\81аҥа $2 Ð°Ð°Ñ\82Ñ\8b Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dÑ\8dбиÑ\82. \"$2\" Ð°Ò»Ð°Ñ\80Ñ\8bга \"$3\". Ð\91илигин ÐºÐ¸Ð¸Ñ\80Ñ\8dн Ð°Ò»Ð°Ñ\80Ñ\8bк Ñ\82Ñ\8bлгÑ\8bн Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bаÑ\85Ñ\82ааÑ\85 Ñ\8dбиккин.\n\nСаҥа аат сыыһа оҥоһуллубут буоллаҕына тугу да гыныа суоххун сөп.",
        "login-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
        "login-abort-generic": "Бу аатынан сатаан киирбэтиҥ - быһынна",
        "login-migrated-generic": "Эн бэлиэ-аатыҥ көһөрүллүбүт, онон урукку аатыҥ бу биикигэ суох буолбут эбит.",
        "changepassword": "Киирии тылы уларытарга",
        "resetpass_announce": "Түмүктүүргэ саҥа киирии тылла суруй.",
        "resetpass_text": "<!-- Тиэкиһи манна эбэн суруйуҥ -->",
-       "resetpass_header": "Ð\90аÑ\82 ÐºÐ¸Ð¸Ñ\80ии тылын уларытыы",
+       "resetpass_header": "Ð\91Ñ\8dлиÑ\8d-ааÑ\82 Ð°Ò»Ð°Ñ\80Ñ\8bк тылын уларытыы",
        "oldpassword": "Эргэ аһарык:",
        "newpassword": "Саҥа аһарык:",
        "retypenew": "Саҥа киирии тылы хатылаа:",
        "passwordreset-domain": "Домен:",
        "passwordreset-email": "Электроннай почтата:",
        "passwordreset-emailtitle": "{{SITENAME}} бырайыакка аатын туһунан",
-       "passwordreset-emailtext-ip": "Ким эрэ (баҕар эн буолуо, бу IP-ттан $1)  {{SITENAME}} ($4) бырайыакка киирии тылы уларытар туһунан ыйытык биэрбит.\nБу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}:\n\n$2\n\nБу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.\nЭн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.\nӨскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына \nбу биллэриини ааххайыа суоххун сөп.\nОччоҕо урукку киирии тылыҥ оннунан хаалыа.",
-       "passwordreset-emailtext-user": "$1 Ð´Ð¸Ñ\8dн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b  {{SITENAME}} ($4) Ð±Ñ\8bÑ\80айÑ\8bакка ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлгÑ\8bн Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 Ñ\82Ñ\83Ò»Ñ\83нан Ñ\8bйÑ\8bÑ\82Ñ\8bк Ñ\8bÑ\8bппÑ\8bÑ\82.\nÐ\91Ñ\83 Ñ\8dлекÑ\82Ñ\80он Ð°Ð°Ð´Ñ\8bÑ\80Ñ\8bÒ»Ñ\8b ÐºÑ\8bÑ\82Ñ\82а Ð±Ñ\83 {{PLURAL:$3|ааÑ\82 Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85|ааÑ\82Ñ\82аÑ\80 Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85Ñ\82Ñ\8dÑ\80}}\n\n$2\n\nÐ\91Ñ\83 Ð±Ñ\8bÑ\81Ñ\82аÑ\85 ÐºÑ\8dмҥÑ\8d Ð°Ð½Ð°Ð»Ð»Ð°Ð°Ñ\85 {{PLURAL:$3|кииÑ\80ии Ñ\82Ñ\8bл|киÑ\80ии Ñ\82Ñ\8bллаÑ\80}} {{PLURAL:$5|бииÑ\80 ÐºÒ¯Ð½ Ò¯Ð»Ñ\8dлиÑ\8dÒ\95Ñ\8d|$5 ÐºÒ¯Ð½ Ò¯Ð»Ñ\8dлиÑ\8dÑ\85Ñ\82Ñ\8dÑ\80Ñ\8d}}.\nЭн Ñ\82иһиликкÑ\8d Ð°Ð°ÐºÐºÑ\8bн Ñ\8dÑ\82Ñ\8dн Ñ\81аҥа ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлÑ\8b ÐºÐ¸Ð»Ð»Ñ\8dÑ\80иÑ\8dÑ\85Ñ\82Ñ\8dÑ\8dÑ\85Ñ\85ин.\nÓ¨Ñ\81кө Ð±Ñ\83 Ñ\8bйÑ\8bÑ\82Ñ\8bгÑ\8b Ñ\8bÑ\8bппаÑ\82аÑ\85 Ð±Ñ\83оллаÑ\85Ñ\85Ñ\8bна, Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ñ\83Ñ\80Ñ\83ккÑ\83 ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлгÑ\8bн Ó©Ð¹Ð´Ó©Ó©Ð½ ÐºÑ\8dлбиÑ\82 Ð±Ñ\83оллаÑ\85Ñ\85Ñ\8bна \nбÑ\83 Ð±Ð¸Ð»Ð»Ñ\8dÑ\80иини Ð°Ð°Ñ\85Ñ\85айÑ\8bа Ñ\81Ñ\83оÑ\85Ñ\85Ñ\83н Ñ\81өп.\nÐ\9eÑ\87Ñ\87оÒ\95о Ñ\83Ñ\80Ñ\83ккÑ\83 ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлыҥ оннунан хаалыа.",
+       "passwordreset-emailtext-ip": "Ким эрэ (баҕар Эн буолуо, бу IP-ттан $1)  {{SITENAME}} ($4) бырайыакка аһарык тылы уларытар туһунан ыйытык биэрбит.\nБу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}:\n\n$2\n\nБу быстах кэмҥэ аналлаах {{PLURAL:$3|аһарык|аһарык тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.\nЭн тиһиликкэ ааккын этэн саҥа аһарык тылы киллэриэхтээххин.\nӨскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку аһарык тылгын өйдөөн кэлбит буоллаххына \nбу биллэриини ааххайыа суоххун сөп.\nОччоҕо урукку аһарык тылыҥ оннунан хаалыа.",
+       "passwordreset-emailtext-user": "$1 Ð´Ð¸Ñ\8dн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b  {{SITENAME}} ($4) Ð±Ñ\8bÑ\80айÑ\8bакка Ð°Ò»Ð°Ñ\80Ñ\8bккÑ\8bн Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 Ñ\82Ñ\83Ò»Ñ\83нан Ñ\8bйÑ\8bÑ\82Ñ\8bк Ñ\8bÑ\8bппÑ\8bÑ\82.\nÐ\91Ñ\83 Ñ\8dлекÑ\82Ñ\80он Ð°Ð°Ð´Ñ\8bÑ\80Ñ\8bÒ»Ñ\8b ÐºÑ\8bÑ\82Ñ\82а Ð±Ñ\83 {{PLURAL:$3|ааÑ\82 Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85|ааÑ\82Ñ\82аÑ\80 Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85Ñ\82Ñ\8dÑ\80}}\n\n$2\n\nÐ\91Ñ\83 Ð±Ñ\8bÑ\81Ñ\82аÑ\85 ÐºÑ\8dмҥÑ\8d Ð°Ð½Ð°Ð»Ð»Ð°Ð°Ñ\85 {{PLURAL:$3|аһаÑ\80Ñ\8bк|аһаÑ\80Ñ\8bкÑ\82аÑ\80}} {{PLURAL:$5|бииÑ\80 ÐºÒ¯Ð½ Ò¯Ð»Ñ\8dлиÑ\8dÒ\95Ñ\8d|$5 ÐºÒ¯Ð½ Ò¯Ð»Ñ\8dлиÑ\8dÑ\85Ñ\82Ñ\8dÑ\80Ñ\8d}}.\nЭн Ñ\82иһиликкÑ\8d Ð°Ð°ÐºÐºÑ\8bн Ñ\8dÑ\82Ñ\8dн Ñ\81аҥа ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлÑ\8b ÐºÐ¸Ð»Ð»Ñ\8dÑ\80иÑ\8dÑ\85Ñ\82Ñ\8dÑ\8dÑ\85Ñ\85ин.\nÓ¨Ñ\81кө Ð±Ñ\83 Ñ\8bйÑ\8bÑ\82Ñ\8bгÑ\8b Ñ\8bÑ\8bппаÑ\82аÑ\85 Ð±Ñ\83оллаÑ\85Ñ\85Ñ\8bна, Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ñ\83Ñ\80Ñ\83ккÑ\83 Ð°Ò»Ð°Ñ\80Ñ\8bккÑ\8bн Ó©Ð¹Ð´Ó©Ó©Ð½ ÐºÑ\8dлбиÑ\82 Ð±Ñ\83оллаÑ\85Ñ\85Ñ\8bна \nбÑ\83 Ð±Ð¸Ð»Ð»Ñ\8dÑ\80иини Ð°Ð°Ñ\85Ñ\85айÑ\8bа Ñ\81Ñ\83оÑ\85Ñ\85Ñ\83н Ñ\81өп.\nÐ\9eÑ\87Ñ\87оÒ\95о Ñ\83Ñ\80Ñ\83ккÑ\83 Ð°Ò»Ð°Ñ\80Ñ\8bгыҥ оннунан хаалыа.",
        "passwordreset-emailelement": "Кыттааччы: \n$1\n\nБыстах аһарык тыл: \n$2",
        "passwordreset-emailsentemail": "Өскө бу Эн ааккар баайыллыбыт аадырыс буоллаҕына, аһарык тылы уларытар туһунан сурук барыа.",
        "passwordreset-emailsentusername": "Өскө бу аакка баайыллыбыт аадырыс баар буоллаҕына, аһарык тылы уларытар туһунан сурук онно барыа.",
        "prefs-help-gender": "Маны туруорар булгуччута суох. \nБырагыраамма сорох дьоҥҥо туһаайыллыбыт биллэриилэригэр эбэтэр кинилэргэ сыһыаннаах этиилэригэр кытааччы дьахтарыттан эбэтэр эр киһититтэн көрөн этии тутулун уларытан биэриэн сөп. \nТуора дьоҥҥо көстөр бэлиэтээһин.",
        "email": "Почта",
        "prefs-help-realname": "Сурукка киирбит аатыҥ булгуччута суох. Суруйдаххына ааптар быһыытынан ыйыллар буолуоҥ.",
-       "prefs-help-email": "ЭлекÑ\82Ñ\80оннай Ð°Ð°Ð´Ñ\8bÑ\80Ñ\8bÒ»Ñ\8b Ñ\81Ñ\83Ñ\80Ñ\83йаÑ\80 Ð±Ñ\83лгÑ\83Ñ\87Ñ\87Ñ\83Ñ\82а Ñ\81Ñ\83оÑ\85, Ð¾Ð» Ñ\8dÑ\80Ñ\8dÑ\8dÑ\80и ÐºÐ¸Ð¸Ñ\80ии тылгын умуннаххына санатарга көмөлөһүө.",
+       "prefs-help-email": "ЭлекÑ\82Ñ\80оннай Ð°Ð°Ð´Ñ\8bÑ\80Ñ\8bÒ»Ñ\8b Ñ\81Ñ\83Ñ\80Ñ\83йаÑ\80 Ð±Ñ\83лгÑ\83Ñ\87Ñ\87Ñ\83Ñ\82а Ñ\81Ñ\83оÑ\85, Ð¾Ð» Ñ\8dÑ\80Ñ\8dÑ\8dÑ\80и Ð°Ò»Ð°Ñ\80Ñ\8bк тылгын умуннаххына санатарга көмөлөһүө.",
        "prefs-help-email-others": "Эбии. Атын кыттааччылар Эйигин кытта электроннай почтаҕын билбэккэ эрэ суруйсар кыахтаныахтара.",
        "prefs-help-email-required": "E-mail баар буолуохтаах.",
        "prefs-info": "Сүрүн сибидиэнньэлэр",
        "feedback-useragent": "Браузерым:",
        "searchsuggest-search": "{{SITENAME}} иһигэр көрдөөһүн",
        "searchsuggest-containing": "тыл баар ыстатыйалара...",
-       "api-error-autoblocked": "Эн IP-аадырыһыҥ бүөлэммит кыттааччы туттубутун иһин хааччахтаммыт.",
-       "api-error-badaccess-groups": "Эн бу биикигэ билэ киллэрэриҥ хааччахтаммыт.",
        "api-error-badtoken": "Ис алҕас: Омсолоох токен.",
-       "api-error-blocked": "Уларытар кыаххын быспыттар эбит.",
-       "api-error-copyuploaddisabled": "URL көмөтүнэн киллэрии бу сиэрбэргэ араарыллыбыт.",
-       "api-error-duplicate": "Маннык иһинээҕилээх атын {{PLURAL:$1|билэ баар|билэлэр бааллар}} эбит",
-       "api-error-duplicate-archive": "Урут ситим-сиргэ маннык иһинээҕилээх {{PLURAL:$1|билэ баар|билэлэр бааллар}} этэ, ол гынан баран {{PLURAL:$1|сотуллубута|сотуллубуттара}}.",
-       "api-error-empty-file": "Ыыппыт билэҥ кураанах.",
        "api-error-emptypage": "Саҥа кураанах сирэйи оҥорор табыллыбат.",
-       "api-error-fetchfileerror": "Ис алҕас: билэни ыларга туох эрэ сатаммата.",
-       "api-error-fileexists-forbidden": "Маннык \"$1\" ааттаах билэ хайыы үйэ баар уонна хат суруллар кыаҕа суох эбит.",
-       "api-error-fileexists-shared-forbidden": "«$1» диэн ааттаах билэ уопсай харайар сиргэ баар уонна хат суруллар кыаҕа суох эбит.",
-       "api-error-file-too-large": "Ыыппыт билэҥ наһаа улахан эбит.",
-       "api-error-filename-tooshort": "Билэҥ аата наһаа кылгас.",
-       "api-error-filetype-banned": "Маннык көрүҥнээх билэлэр бобуулаахтар.",
-       "api-error-filetype-banned-type": "$1 — {{PLURAL:$4|билэ бобуллубут көрүҥэ|билэ бобуллубут көрүҥнэрэ}}. \nКөҥүллэммит билэ {{PLURAL:$3|көрүҥэ маннык|көрүҥнэрэ манныктар}}: $2.",
-       "api-error-filetype-missing": "Бу билэ тэнитиитэ (расширение) суох эбит.",
-       "api-error-hookaborted": "Эн киллэрбит уларытыыгын кэҥэтии таҥастааччыта оннугар төннөрбүт.",
-       "api-error-http": "Ис алҕас: Сиэрбэргэ холбонор табыллыбата.",
-       "api-error-illegal-filename": "Билэ маннык ааттанара сатаммат.",
-       "api-error-internal-error": "Ис алҕас: биикигэ угаары гыммыккар туох эрэ сатаммата.",
-       "api-error-invalid-file-key": "Ис алҕас: Быстах уурар сиргэ билэ көстүбэтэ.",
-       "api-error-missingparam": "Ис алҕас: Көрдөбүл туруоруулара суохтар эбит.",
-       "api-error-missingresult": "Ис алҕас: Хатылааһын сатаммыта-сатамматаҕа биллибэтэ.",
-       "api-error-mustbeloggedin": "Билэни киллэрэргэ бастаан ааккын этиэхтээххин.",
-       "api-error-mustbeposted": "Ис алҕас: HTTP POST алҕастаах.",
-       "api-error-noimageinfo": "Хачайдааһын сөпкө түмүктэннэ эрээри, сиэрбэр билэ туһунан тугу да биллэрбэтэ.",
-       "api-error-nomodule": "Ис алҕас: хачайдыыр муодул туруоруута суох.",
-       "api-error-ok-but-empty": "Ис алҕас: сиэрбэртэн хоруй кэлбэтэ.",
-       "api-error-overwrite": "Баар билэни уларытар сатаммат.",
-       "api-error-ratelimited": "Наһаа элбэх билэни кылгас кэм иһигэр уга сатаатыҥ.\nТохтуу түһэн баран хатылаан көрөөр.",
-       "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»",
-       "api-error-unknown-error": "Ис алҕас: билэни киллэрии кэмигэр туох эрэ сатаммата.",
+       "api-error-stashfailed": "Ис алҕас: сиэрбэр быстах кэмҥэ оҥоһуллубут билэни кыайан бигэргэппэтэх.",
        "api-error-unknown-warning": "Биллибэт сэрэтии: $1",
        "api-error-unknownerror": "Биллибэт алҕас: $1",
-       "api-error-uploaddisabled": "Бу биикигэ хачайдыыр араарыллыбыт эбит.",
-       "api-error-verification-error": "Бу билэ алдьаммыт эбэтэр табыгаһа суох кэҥэтиилээх.",
-       "api-error-was-deleted": "Маннык ааттаах билэ урут баар буола сылдьыбыт, онтон сотуллубут эбит.",
        "duration-seconds": "$1 сөкүүндэ",
        "duration-minutes": "$1 мүнүүтэ",
        "duration-hours": "$1 чаас",
index 635ae49..389398d 100644 (file)
        "badsig": "Loš sirovi potpis.\nProvjerite HTML tagove.",
        "badsiglength": "Vaš potpis je predug.\nMora biti manji od $1 {{PLURAL:$1|znaka|znaka|znakova}}.",
        "yourgender": "Kako želite da se predstavite?",
-       "gender-unknown": "Kad vas spominje, softver će pokušati koristiti srednji rod kad god je to moguće",
+       "gender-unknown": "Kad Vas spominje, softver će pokušati izbjegavati rod kad god je to moguće",
        "gender-male": "On uređuje wiki stranice",
        "gender-female": "Ona uređuje wiki stranice",
        "prefs-help-gender": "Postavljanje ove preferencije nije obavezno.\nSoftver koristi ovu vrijednost kako bi vam se obratio i spomenuo vas drugima koristeći vaš gramatički rod.\nOva informacija će biti javna.",
        "feedback-thanks": "Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.",
        "searchsuggest-search": "Traži",
        "searchsuggest-containing": "sadrži...",
-       "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
        "api-error-badtoken": "Unutrašnja greška: token nije ispravan.",
-       "api-error-copyuploaddisabled": "Postavljanja putem URL-a su onemogućena na ovom serveru.",
-       "api-error-duplicate": "Već postoji {{PLURAL:$1|druga datoteka|druge datoteke}} na ovoj stranici sa istim sadržajem",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Postojala je druga datoteka|Postojale su neke druge datoteke}} na sajtu sa istim sadržajem, ali {{PLURAL:$1|je obrisana|su obrisane}}.",
-       "api-error-empty-file": "Datoteka koju ste poslali je bila prazna.",
        "api-error-emptypage": "Stvaranje novih praznih stranica nije dozvoljeno.",
-       "api-error-fetchfileerror": "Unutrašnja greška: pojavio se neki problem pri dobijanju podataka o datoteci.",
-       "api-error-fileexists-forbidden": "Već postoji datoteka s imenom „$1“ i ne može da se zamijeni.",
-       "api-error-fileexists-shared-forbidden": "Već postoji datoteka s imenom „$1“ u zajedničkoj riznici i ne može da se zamijeni.",
-       "api-error-file-too-large": "Datoteka koju ste poslali je bila prevelika.",
-       "api-error-filename-tooshort": "Ime datoteke je prekratko.",
-       "api-error-filetype-banned": "Ova vrsta datoteke je zabranjena.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|je zabranjena vrsta datoteke|su zabranjene vrste datoteka}}. {{PLURAL:$3|Dozvoljena je|Dozvoljene su}} $2.",
-       "api-error-filetype-missing": "Datoteci nedostaje nastavak.",
-       "api-error-hookaborted": "Izmjena koji ste pokušali načiniti je otkazana preko \"kuke\" proširenja mediawiki softvera.",
-       "api-error-http": "Unutrašnja greška: ne može se spojiti na server.",
-       "api-error-illegal-filename": "Ime datoteke nije dopušteno.",
-       "api-error-internal-error": "Unutrašnja greška: pojavio se neki problem sa obradom vašeg postavljanja na wiki.",
-       "api-error-invalid-file-key": "Unutrašnja greška: datoteka nije pronađena u privremenom skladištu.",
-       "api-error-missingparam": "Unutrašnja greška: nedostaju parametri u zahtjevu.",
-       "api-error-missingresult": "Unutrašnja greška: ne može se otkriti da li je kopiranje uspjelo.",
-       "api-error-mustbeloggedin": "Morate biti prijavljeni da biste postavljali datoteke.",
-       "api-error-mustbeposted": "Unutrašnja greška: ne koristi se ispravan HTTP metod.",
-       "api-error-noimageinfo": "Postavljanje je uspjelo, ali server nam nije dao nikakvu informaciju o datoteci.",
-       "api-error-nomodule": "Unutrašnja greška: nije postavljen modul za postavljanje.",
-       "api-error-ok-but-empty": "Unutrašnja greška: nema odgovora od servera.",
-       "api-error-overwrite": "Pisanje preko postojeće datoteke nije dopušteno.",
-       "api-error-stashfailed": "Unutrašnja greška: server nije mogao da spremi privremenu datoteku.",
        "api-error-publishfailed": "Unutrašnja greška: server nije mogao da spremi privremenu datoteku.",
-       "api-error-timeout": "Server nije odgovorio unutar očekivanog vremena.",
-       "api-error-unclassified": "Desila se nepoznata greška",
-       "api-error-unknown-code": "Nepoznata greška: \"$1\"",
-       "api-error-unknown-error": "Unutrašnja greška: desila se neka greška pri pokušaju postavljanja vaše datoteke.",
+       "api-error-stashfailed": "Unutrašnja greška: server nije mogao da spremi privremenu datoteku.",
        "api-error-unknown-warning": "Nepoznato upozorenje: $1",
        "api-error-unknownerror": "Nepoznata greška: \"$1\"",
-       "api-error-uploaddisabled": "Postavljanje je onemogućeno na ovoj wiki.",
-       "api-error-verification-error": "Ova datoteka je možda oštećenja ili ima pogrešan nastavak.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekunde}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuta|minuta}}",
        "duration-hours": "$1 {{PLURAL:$1|sat|sati}}",
index 3ef2782..fae2cb6 100644 (file)
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (glej tudi [[Special:NewPages|seznam novih strani]])",
        "recentchanges-submit": "Prikaži",
        "rcfilters-activefilters": "Dejavni filtri",
+       "rcfilters-restore-default-filters": "Obnovi privzete filtre",
+       "rcfilters-clear-all-filters": "Počisti vse filtre",
        "rcfilters-search-placeholder": "Zadnje spremembe filtrov (prebrskajte ali začnite vnašati)",
        "rcfilters-invalid-filter": "Neveljaven filter",
+       "rcfilters-empty-filter": "Ni dejavnih filtrov. Prikazani so vsi prispevki.",
        "rcfilters-filterlist-title": "Filtri",
        "rcfilters-filterlist-noresults": "Nismo našli nobenega filtra",
+       "rcfilters-filtergroup-registration": "Registracija uporabnika",
+       "rcfilters-filter-registered-label": "Registriran",
+       "rcfilters-filter-registered-description": "Prijavljeni uredniki.",
+       "rcfilters-filter-unregistered-label": "Neregistriran",
+       "rcfilters-filter-unregistered-description": "Uredniki, ki niso prijavljeni.",
        "rcfilters-filtergroup-authorship": "Uredi avtorstvo",
        "rcfilters-filter-editsbyself-label": "Vaša lastna urejanja",
        "rcfilters-filter-editsbyself-description": "Vaša urejanja.",
        "rcfilters-filter-editsbyother-label": "Urejanja drugih",
        "rcfilters-filter-editsbyother-description": "Urejanja, ki so jih naredili drugi uporabniki (ne vi).",
-       "rcfilters-filtergroup-userExpLevel": "Stopnja uporabnikove izkušenosti",
+       "rcfilters-filtergroup-userExpLevel": "Stopnja izkušenosti (samo za registrirane uporabnike)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Novinci",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Zelo novi sodelavci: manj kot 10 urejanj in 4 dni dejavnosti.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Manj kot 10 urejanj in 4 dni dejavnosti.",
        "rcfilters-filter-userExpLevel-learner-label": "Učenci",
        "rcfilters-filter-userExpLevel-learner-description": "Več dni dejavnosti in urejanj kot »Novinci«, vendar manj kot »Izkušeni uporabniki«.",
        "rcfilters-filter-userExpLevel-experienced-label": "Izkušeni uporabniki",
        "rcfilters-filter-userExpLevel-experienced-description": "Več kot 30 dni dejavnosti in 500 urejanj.",
+       "rcfilters-filtergroup-automated": "Samodejni prispevki",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Urejanja, narejena s samodejnimi orodji.",
+       "rcfilters-filter-humans-label": "Človek (ne bot)",
+       "rcfilters-filter-humans-description": "Urejanja, ki so jih izvedli uredniki ljudje.",
+       "rcfilters-filtergroup-significance": "Pomembnost",
+       "rcfilters-filter-minor-label": "Manjše urejanje",
+       "rcfilters-filter-minor-description": "Urejanja, ki jih je avtor označil kot manjša.",
+       "rcfilters-filter-major-label": "Nemanjša urejanja",
+       "rcfilters-filter-major-description": "Urejanja, ki niso označena kot manjša.",
+       "rcfilters-filtergroup-changetype": "Vrsta spremembe",
+       "rcfilters-filter-pageedits-label": "Urejanja strani",
+       "rcfilters-filter-pageedits-description": "Urejanja vsebine wikija, razprave, opisi kategorij ...",
+       "rcfilters-filter-newpages-label": "Ustvarjanja strani",
+       "rcfilters-filter-newpages-description": "Urejanja, ki ustvarijo nove strani.",
+       "rcfilters-filter-categorization-label": "Spremembe kategorij",
+       "rcfilters-filter-categorization-description": "Zapisi o straneh, ki so bila dodana ali odstranjena iz kategorij.",
+       "rcfilters-filter-logactions-label": "Zabeležena dejanja",
+       "rcfilters-filter-logactions-description": "Administrativna dejanja, ustvarjanja računov, izbrisi strani, nalaganja ...",
        "rcnotefrom": "{{PLURAL:$5|Navedena je sprememba|Navedeni sta spremembi|Navedene so spremembe}} od <strong>$3 $4</strong> dalje (prikazujem jih do <strong>$1</strong>).",
        "rclistfrom": "Prikaži spremembe od $3 $2 naprej",
        "rcshowhideminor": "$1 manjša urejanja",
        "apisandbox-sending-request": "Pošiljanje zahteve API ...",
        "apisandbox-loading-results": "Prejemanje zahteve API ...",
        "apisandbox-results-error": "Med nalaganjem odgovora poizvedbe API je prišlo do napake: $1.",
-       "apisandbox-request-params-json": "Parametri JSON:",
        "apisandbox-request-url-label": "URL zahteve:",
        "apisandbox-request-time": "Trajanje zahteve: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Popravite žeton in ponovno pošljite",
        "feedback-useragent": "Uporabniški agent:",
        "searchsuggest-search": "Iskanje po {{GRAMMAR:dajalnik|{{SITENAME}}}}",
        "searchsuggest-containing": "vsebujoč ...",
-       "api-error-autoblocked": "Vaš IP-naslov smo samodejno blokirali, saj ga je uporabljal blokiran uporabnik.",
-       "api-error-badaccess-groups": "Nalaganje datotek na ta wiki vam ni dovoljeno.",
        "api-error-badtoken": "Notranja napaka: slab žeton.",
-       "api-error-blocked": "Urejanje vam je preprečeno.",
-       "api-error-copyuploaddisabled": "Nalaganje preko URL je na tem strežniku onemogočeno.",
-       "api-error-duplicate": "Na strani že {{PLURAL:$1|obstaja druga datoteka|obstajata drugi datoteki|obstajajo druge datoteke}} z enako vsebino.",
-       "api-error-duplicate-archive": "Na strani {{PLURAL:$1|je že bila druga datoteka|sta že bili drugi datoteki|so že bile nekatere druge datoteke}} z enako vsebino, vendar {{PLURAL:$1|je bila izbrisana|sta bili izbrisani|so bile izbrisane}}.",
-       "api-error-empty-file": "Poslana datoteka je prazna.",
        "api-error-emptypage": "Ustvarjanje novih, praznih strani ni dovoljeno.",
-       "api-error-fetchfileerror": "Notranja napaka: pri pridobivanju datoteke je nekaj šlo narobe.",
-       "api-error-fileexists-forbidden": "Datoteka »$1« že obstaja in je ni mogoče prepisati.",
-       "api-error-fileexists-shared-forbidden": "Datoteka »$1« že obstaja v skupnem skladišču datotek in je ni mogoče prepisati.",
-       "api-error-file-too-large": "Poslana datoteka je prevelika.",
-       "api-error-filename-tooshort": "Ime datoteke je prekratko.",
-       "api-error-filetype-banned": "Ta vrsta datoteke je prepovedana.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|ni dovoljena datotečna vrsta|nista dovoljeni datotečni vrsti|niso dovoljene datotečne vrste}}. {{PLURAL:$3|Dovoljena datotečna vrsta je|Dovoljeni datotečni vrsti sta|Dovoljene datotečne vrste so}} $2.",
-       "api-error-filetype-missing": "Datoteki manjka končnica.",
-       "api-error-hookaborted": "Spremembo, ki ste jo poskušali narediti, je prekinila razširitev.",
-       "api-error-http": "Notranja napaka: ni mogoče vzpostaviti povezave s strežnikom.",
-       "api-error-illegal-filename": "Ime datoteke ni dovoljeno.",
-       "api-error-internal-error": "Notranja napaka: pri obdelovanju vaše datoteke, naložene na wiki, je nekaj šlo narobe.",
-       "api-error-invalid-file-key": "Notranja napaka: datoteke ni bilo mogoče najti v začasni hrambi.",
-       "api-error-missingparam": "Notranja napaka: manjkajoči parametri ob zahtevi.",
-       "api-error-missingresult": "Notranja napaka: ni bilo mogoče določiti, če je kopiranje uspelo.",
-       "api-error-mustbeloggedin": "Za nalaganje datotek morate biti prijavljeni.",
-       "api-error-mustbeposted": "V tem programju je hrošč; ne uporablja pravilne metode HTTP.",
-       "api-error-noimageinfo": "Nalaganje je uspelo, vendar nam strežnik ni dal nobenih informacij o datoteki.",
-       "api-error-nomodule": "Notranja napaka: modul nalaganja ni izbran.",
-       "api-error-ok-but-empty": "Notranja napaka: strežnik se ne odziva.",
-       "api-error-overwrite": "Prepisovanje obstoječe datoteke ni dovoljeno.",
-       "api-error-ratelimited": "Poskušate naložiti več datotek v kratkem časovnem obdobju kot to dovoljuje ta wiki. Prosimo, poskusite znova čez nekaj minut.",
-       "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«",
-       "api-error-unknown-error": "Notranja napaka: pri poskusu nalaganja vaše datoteke je nekaj šlo narobe.",
+       "api-error-stashfailed": "Notranja napaka: strežnik ni uspel shraniti začasne datoteke.",
        "api-error-unknown-warning": "Neznano opozorilo: »$1«.",
        "api-error-unknownerror": "Neznana napaka: »$1«.",
-       "api-error-uploaddisabled": "Nalaganje je onemogočeno na tem wikiju.",
-       "api-error-verification-error": "Ta datoteka je morda poškodovana ali ima napačno končnico.",
-       "api-error-was-deleted": "Datoteko s tem imenom je v preteklosti nekdo že naložil, ampak je bila nato izbrisana.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekundi|sekunde|sekund}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuta|minuti|minute|minut}}",
        "duration-hours": "$1 {{PLURAL:$1|ura|uri|ure|ur}}",
        "usercssispublic": "Pomnite: Podstrani CSS naj ne vsebujejo zaupnih podatkov, saj so vidne tudi drugim uporabnikom.",
        "restrictionsfield-badip": "Neveljaven IP-naslov ali obseg: $1",
        "restrictionsfield-label": "Dovoljeni IP-obsegi:",
-       "restrictionsfield-help": "En IP-naslov ali CIDR-območje na vrstico. Da omogočite vse, uporabite<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "En IP-naslov ali CIDR-območje na vrstico. Da omogočite vse, uporabite:\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "redakcija $1",
        "pageid": "ID strani $1"
 }
index a2f0024..54de80a 100644 (file)
        "autoredircomment": "Преусмерење на [[$1]]",
        "autosumm-new": "Нова страница: $1",
        "autosumm-newblank": "Направљена празна страница",
-       "size-bytes": "$1 B",
+       "size-bytes": "$1 {{PLURAL:$1|бајт|бајта|бајтова}}",
        "size-kilobytes": "$1 kB",
        "size-megabytes": "$1 MB",
        "size-gigabytes": "$1 GB",
        "feedback-thanks-title": "Хвала вам!",
        "searchsuggest-search": "Претрага",
        "searchsuggest-containing": "садржи...",
-       "api-error-badaccess-groups": "Није вам дозвољено да отпремате датотеке на овај вики.",
        "api-error-badtoken": "Унутрашња грешка: неисправан жетон.",
-       "api-error-copyuploaddisabled": "Отпремање путем адресе је онемогућено на овом серверу.",
-       "api-error-duplicate": "Већ {{PLURAL:$1|1=постоји друга датотека|постоје друге датотеке}} с истим садржајем.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Постојала је друга датотека|Постојале су друге датотеке}} с истим садржајем, али {{PLURAL:$1|је обрисана|су обрисане}}.",
-       "api-error-empty-file": "Послата датотека је празна.",
        "api-error-emptypage": "Стварање нових празних страница није дозвољено.",
-       "api-error-fetchfileerror": "Унутрашња грешка: дошло је до грешке при добављању датотеке.",
-       "api-error-fileexists-forbidden": "Већ постоји датотека с именом „$1“ и не може да се замени.",
-       "api-error-fileexists-shared-forbidden": "Већ постоји датотека с именом „$1“ у заједничкој ризници и не може да се замени.",
-       "api-error-file-too-large": "Послата датотека је превелика.",
-       "api-error-filename-tooshort": "Назив датотеке је прекратак.",
-       "api-error-filetype-banned": "Ова врста датотеке је забрањена.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|је забрањена врста датотеке|су забрањене врсте датотека}}. {{PLURAL:$3|Дозвољена је|Дозвољене су}} $2.",
-       "api-error-filetype-missing": "Датотеци недостаје наставак.",
-       "api-error-hookaborted": "Измена је одбачена од куке за проширења.",
-       "api-error-http": "Унутрашња грешка: не могу да се повежем са сервером.",
-       "api-error-illegal-filename": "Назив датотеке је забрањен.",
-       "api-error-internal-error": "Унутрашња грешка: дошло је до грешке при обрађивању датотеке на викију.",
-       "api-error-invalid-file-key": "Унутрашња грешка: не могу да пронађем датотеку у привременом складишту.",
-       "api-error-missingparam": "Унутрашња грешка: недостају параметри у захтеву.",
-       "api-error-missingresult": "Унутрашња грешка: не могу да утврдим да ли је умножавање успело.",
-       "api-error-mustbeloggedin": "Морате бити пријављени да бисте отпремали датотеке.",
-       "api-error-mustbeposted": "Унутрашња грешка: не користи се исправан HTTP метод.",
-       "api-error-noimageinfo": "Отпремање је успело, али сервер није дао никакав податак о датотеци.",
-       "api-error-nomodule": "Унутрашња грешка: није постављен модул за отпремање.",
-       "api-error-ok-but-empty": "Унутрашња грешка: сервер не одговара.",
-       "api-error-overwrite": "Замењивање постојеће датотеке је забрањено.",
-       "api-error-stashfailed": "Унутрашња грешка: сервер не може да сачува привремену датотеку.",
        "api-error-publishfailed": "Унутрашња грешка: сервер није успео да објави привремену датотеку.",
-       "api-error-timeout": "Сервер није одговорио у очекивано време.",
-       "api-error-unclassified": "Дошло је до непознате грешке",
-       "api-error-unknown-code": "Непозната грешка: „$1“",
-       "api-error-unknown-error": "Унутрашња грешка: дошло је до грешке при отпремању датотеке.",
+       "api-error-stashfailed": "Унутрашња грешка: сервер не може да сачува привремену датотеку.",
        "api-error-unknown-warning": "Непознато упозорење: $1",
        "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|сат|сата|сати}}",
index 735e419..fc2858e 100644 (file)
        "saveprefs": "Sačuvaj",
        "restoreprefs": "Vrati sve na podrazumevano (u svim odeljcima)",
        "prefs-editing": "Uređivanje",
-       "rows": "Redova:",
-       "columns": "Kolona",
        "searchresultshead": "Pretraga",
        "stub-threshold": "Prag za oblikovanje veze kao klice ($1):",
        "stub-threshold-sample-link": "primer",
        "autoredircomment": "Preusmerenje na [[$1]]",
        "autosumm-new": "Nova stranica: $1",
        "autosumm-newblank": "Napravljena prazna stranica",
-       "size-bytes": "$1 B",
+       "size-bytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
        "size-kilobytes": "$1 kB",
        "size-megabytes": "$1 MB",
        "size-gigabytes": "$1 GB",
        "feedback-thanks-title": "Hvala vam!",
        "searchsuggest-search": "Pretraga",
        "searchsuggest-containing": "sadrži...",
-       "api-error-badaccess-groups": "Nije vam dozvoljeno da otpremate datoteke na ovaj viki.",
        "api-error-badtoken": "Unutrašnja greška: neispravan žeton.",
-       "api-error-copyuploaddisabled": "Otpremanje putem adrese je onemogućeno na ovom serveru.",
-       "api-error-duplicate": "Već {{PLURAL:$1|1=postoji druga datoteka|postoje druge datoteke}} s istim sadržajem.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Postojala je druga datoteka|Postojale su druge datoteke}} s istim sadržajem, ali {{PLURAL:$1|je obrisana|su obrisane}}.",
-       "api-error-empty-file": "Poslata datoteka je prazna.",
        "api-error-emptypage": "Stvaranje novih praznih stranica nije dozvoljeno.",
-       "api-error-fetchfileerror": "Unutrašnja greška: došlo je do greške pri dobavljanju datoteke.",
-       "api-error-fileexists-forbidden": "Već postoji datoteka s imenom „$1“ i ne može da se zameni.",
-       "api-error-fileexists-shared-forbidden": "Već postoji datoteka s imenom „$1“ u zajedničkoj riznici i ne može da se zameni.",
-       "api-error-file-too-large": "Poslata datoteka je prevelika.",
-       "api-error-filename-tooshort": "Naziv datoteke je prekratak.",
-       "api-error-filetype-banned": "Ova vrsta datoteke je zabranjena.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|je zabranjena vrsta datoteke|su zabranjene vrste datoteka}}. {{PLURAL:$3|Dozvoljena je|Dozvoljene su}} $2.",
-       "api-error-filetype-missing": "Datoteci nedostaje nastavak.",
-       "api-error-hookaborted": "Izmena je odbačena od kuke za proširenja.",
-       "api-error-http": "Unutrašnja greška: ne mogu da se povežem sa serverom.",
-       "api-error-illegal-filename": "Naziv datoteke je zabranjen.",
-       "api-error-internal-error": "Unutrašnja greška: došlo je do greške pri obrađivanju datoteke na vikiju.",
-       "api-error-invalid-file-key": "Unutrašnja greška: ne mogu da pronađem datoteku u privremenom skladištu.",
-       "api-error-missingparam": "Unutrašnja greška: nedostaju parametri u zahtevu.",
-       "api-error-missingresult": "Unutrašnja greška: ne mogu da utvrdim da li je umnožavanje uspelo.",
-       "api-error-mustbeloggedin": "Morate biti prijavljeni da biste otpremali datoteke.",
-       "api-error-mustbeposted": "Unutrašnja greška: ne koristi se ispravan HTTP metod.",
-       "api-error-noimageinfo": "Otpremanje je uspelo, ali server nije dao nikakav podatak o datoteci.",
-       "api-error-nomodule": "Unutrašnja greška: nije postavljen modul za otpremanje.",
-       "api-error-ok-but-empty": "Unutrašnja greška: server ne odgovara.",
-       "api-error-overwrite": "Zamenjivanje postojeće datoteke je zabranjeno.",
-       "api-error-stashfailed": "Unutrašnja greška: server ne može da sačuva privremenu datoteku.",
        "api-error-publishfailed": "Unutrašnja greška: server nije uspeo da objavi privremenu datoteku.",
-       "api-error-timeout": "Server nije odgovorio u očekivano vreme.",
-       "api-error-unclassified": "Došlo je do nepoznate greške",
-       "api-error-unknown-code": "Nepoznata greška: „$1“",
-       "api-error-unknown-error": "Unutrašnja greška: došlo je do greške pri otpremanju datoteke.",
+       "api-error-stashfailed": "Unutrašnja greška: server ne može da sačuva privremenu datoteku.",
        "api-error-unknown-warning": "Nepoznato upozorenje: $1",
        "api-error-unknownerror": "Nepoznata greška: „$1“.",
-       "api-error-uploaddisabled": "Otpremanje je onemogućeno na ovom vikiju.",
-       "api-error-verification-error": "Datoteka je oštećena ili ima neispravan nastavak.",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunde|sekundi}}",
        "duration-minutes": "$1 {{PLURAL:$1|minut|minuta|minuta}}",
        "duration-hours": "$1 {{PLURAL:$1|sat|sata|sati}}",
index a972790..d1b7ee6 100644 (file)
        "searcharticle": "Gå till",
        "history": "Sidhistorik",
        "history_short": "Historik",
+       "history_small": "historik",
        "updatedmarker": "uppdaterad sedan senaste besöket",
        "printableversion": "Utskriftsvänlig version",
        "permalink": "Permanent länk",
        "rcfilters-invalid-filter": "Ogiltigt filter",
        "rcfilters-filterlist-title": "Filter",
        "rcfilters-filterlist-noresults": "Inga filter hittades",
+       "rcfilters-filtergroup-registration": "Användarregistrering",
+       "rcfilters-filter-registered-label": "Registrerade",
+       "rcfilters-filter-registered-description": "Inloggade redigerare.",
+       "rcfilters-filter-unregistered-label": "Oregistrerade",
+       "rcfilters-filter-unregistered-description": "Redigerare som inte är inloggade.",
        "rcfilters-filtergroup-authorship": "Redigera författarskap",
        "rcfilters-filter-editsbyself-label": "Dina egna redigeringar",
        "rcfilters-filter-editsbyself-description": "Redigeringar av dig.",
        "rcfilters-filter-editsbyother-label": "Redigeringar av andra",
-       "rcfilters-filter-editsbyother-description": "Redigeringar som har skapats av andra användare (inte dig.)",
-       "rcfilters-filtergroup-userExpLevel": "Erfarenhetsnivå för användare",
+       "rcfilters-filter-editsbyother-description": "Redigeringar som har skapats av andra användare (inte dig).",
+       "rcfilters-filtergroup-userExpLevel": "Erfarenhetsnivå (endast för registrerade användare)",
        "rcfilters-filter-userExpLevel-newcomer-label": "Nykomlingar",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Väldigt nya redigerare: färre än 10 redigeringar och 4 dagars aktivitet.",
+       "rcfilters-filter-userExpLevel-newcomer-description": "Färre än 10 redigeringar och 4 dagars aktivitet.",
        "rcfilters-filter-userExpLevel-learner-label": "Nybörjare",
        "rcfilters-filter-userExpLevel-learner-description": "Fler dagars aktivitet och redigeringar än \"Nybörjare\" men färre än \"Erfarna användare\".",
        "rcfilters-filter-userExpLevel-experienced-label": "Erfarna användare",
        "rcfilters-filter-userExpLevel-experienced-description": "Fler än 30 dagars aktivitet och 500 redigeringar.",
+       "rcfilters-filtergroup-automated": "Automatiserade bidrag",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Redigeringar gjorda av automatiserade verktyg.",
+       "rcfilters-filter-humans-label": "Människa (inte bot)",
+       "rcfilters-filter-humans-description": "Redigeringar gjorda av mänskliga redigerare.",
+       "rcfilters-filtergroup-significance": "Betydelse",
+       "rcfilters-filter-minor-label": "Mindre redigeringar",
+       "rcfilters-filter-minor-description": "Redigeringar som är märkta som mindre.",
+       "rcfilters-filter-major-label": "Icke-mindre redigeringar",
+       "rcfilters-filter-major-description": "Redigeringar som inte är märkta som mindre.",
+       "rcfilters-filtergroup-changetype": "Typ av ändring",
+       "rcfilters-filter-pageedits-label": "Sidredigeringar",
+       "rcfilters-filter-pageedits-description": "Redigeringar till wikiinnehåll, diskussioner, kategoribeskrivningar...",
+       "rcfilters-filter-newpages-label": "Sidskapande",
+       "rcfilters-filter-newpages-description": "Redigeringar som skapade nya sidor.",
+       "rcfilters-filter-categorization-label": "Kategoriändringar",
+       "rcfilters-filter-categorization-description": "Poster av sidor som läggs till eller tas bort från kategorier.",
+       "rcfilters-filter-logactions-label": "Loggade åtgärder",
+       "rcfilters-filter-logactions-description": "Administrativa åtgärder, kontoskapande, sidraderingar, uppladdningar....",
        "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfrom": "Visa nya ändringar från och med $2 $3",
        "rcshowhideminor": "$1 mindre ändringar",
        "apisandbox-sending-request": "Skickar API-begäran...",
        "apisandbox-loading-results": "Hämtar API-resultat...",
        "apisandbox-results-error": "Ett fel uppstod när API-förfrågans svar lästes in: $1.",
-       "apisandbox-request-params-json": "JSON-parametrar:",
        "apisandbox-request-url-label": "Begärd URL:",
        "apisandbox-request-time": "Tid för begäran: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Korrigera nyckeln och skicka igen",
        "feedback-useragent": "Användaragent:",
        "searchsuggest-search": "Sök på {{SITENAME}}",
        "searchsuggest-containing": "innehåller...",
-       "api-error-autoblocked": "Din IP-adress har blockerats automatiskt eftersom den har använts av en blockerad användare.",
-       "api-error-badaccess-groups": "Du får inte ladda upp filer till denna wiki.",
        "api-error-badtoken": "Internt fel: felaktig nyckel.",
-       "api-error-blocked": "Du har blockerats från att redigera.",
-       "api-error-copyuploaddisabled": "Uppladdning via URL är inaktiverat på den här servern.",
-       "api-error-duplicate": "Det finns redan {{PLURAL:$1|en annan fil|andra filer}} på webbplatsen med samma innehåll.",
-       "api-error-duplicate-archive": "Det fanns redan {{PLURAL:$1|en annan fil|några andra filer}} på webbplatsen med samma innehåll, men {{PLURAL:$1|den har|de har}} raderats.",
-       "api-error-empty-file": "Filen du skickade var tom.",
        "api-error-emptypage": "Det är inte tillåtet att skapa nya, tomma sidor.",
-       "api-error-fetchfileerror": "Internt fel: något gick fel vid hämtningen av filen.",
-       "api-error-fileexists-forbidden": "En fil med namnet \"$1\" finns redan och kan inte skrivas över.",
-       "api-error-fileexists-shared-forbidden": "En fil med namnet \"$1\" finns redan i det delade filarkivet och kan inte skrivas över.",
-       "api-error-file-too-large": "Filen du skickade var för stor.",
-       "api-error-filename-tooshort": "Filnamnet är för kort.",
-       "api-error-filetype-banned": "Denna typ av fil är förbjuden.",
-       "api-error-filetype-banned-type": "$1 är inte {{PLURAL:$4|en tillåten filtyp|tillåtna filtyper}}. {{PLURAL:$3|Tillåten filtyp|Tillåtna filtyper}} är $2.",
-       "api-error-filetype-missing": "Filnamnet saknar en filändelse.",
-       "api-error-hookaborted": "Ändringen du försökte göra avbröts av en extension hook.",
-       "api-error-http": "Internt fel: Det gick inte att ansluta till servern.",
-       "api-error-illegal-filename": "Filnamnet är inte tillåtet.",
-       "api-error-internal-error": "Internt fel: Något gick fel med bearbetningen av din uppladdning på wikin.",
-       "api-error-invalid-file-key": "Internt fel: filen hittades inte i tillfällig lagring.",
-       "api-error-missingparam": "Internt fel: Det saknas parametrar i begäran.",
-       "api-error-missingresult": "Internt fel: Kunde inte avgöra om kopieringen lyckades.",
-       "api-error-mustbeloggedin": "Du måste vara inloggad för att kunna ladda upp filer.",
-       "api-error-mustbeposted": "Det finns en bugg i detta program, det använder inte rätt HTTP-metod.",
-       "api-error-noimageinfo": "Uppladdningen lyckades, men servern gav oss inte någon information om filen.",
-       "api-error-nomodule": "Internt fel: Ingen uppladdningsmodul uppsatt.",
-       "api-error-ok-but-empty": "Internt fel: Inget svar från servern.",
-       "api-error-overwrite": "Det är inte tillåtet att skriva över en befintlig fil.",
-       "api-error-ratelimited": "Du försöker ladda upp fler filer inom en kortare tidsrymd än denna wiki tillåter.\nFörsök igen om några minuter.",
-       "api-error-stashfailed": "Internt fel: servern kunde inte lagra temporär fil.",
        "api-error-publishfailed": "Internt fel: Servern kunde inte publicera temporär fil.",
-       "api-error-stasherror": "Ett fel uppstod under uppladdningen av filen till mellanlagringsfilen.",
-       "api-error-stashedfilenotfound": "Den temporära filen kunde inte hittas när den skulle laddas upp från den temporära lagringsytan.",
-       "api-error-stashpathinvalid": "Den sökväg där den temporära filen skulle ha hittats var ogiltig.",
-       "api-error-stashfilestorage": "Ett fel uppstod under lagringen av filen i den temporära lagringsytan.",
-       "api-error-stashzerolength": "Servern kunde inte lagra filen temporärt eftersom den har noll längd.",
-       "api-error-stashnotloggedin": "Du måste vara inloggad för att spara filer till den temporära ytan för uppladdningar.",
-       "api-error-stashwrongowner": "Filen du försöker komma åt i det temporära lagringsutrymmet tillhör inte dig.",
-       "api-error-stashnosuchfilekey": "Filnyckeln som du försökte komma åt i den temporära lagringsytan existerar inte.",
-       "api-error-timeout": "Servern svarade inte inom förväntad tid.",
-       "api-error-unclassified": "Ett okänt fel uppstod.",
-       "api-error-unknown-code": "Okänt fel: \"$1\".",
-       "api-error-unknown-error": "Internt fel: något gick fel när vi försökte ladda upp din fil.",
+       "api-error-stashfailed": "Internt fel: servern kunde inte lagra temporär fil.",
        "api-error-unknown-warning": "Okänd varning: \"$1\".",
        "api-error-unknownerror": "Okänt fel: \"$1\".",
-       "api-error-uploaddisabled": "Uppladdning är inaktiverad på denna wiki.",
-       "api-error-verification-error": "Denna fil kan vara skadad eller har fel filändelse.",
-       "api-error-was-deleted": "En fil med detta namn har tidigare laddats upp och sedan raderats.",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunder}}",
        "duration-minutes": "$1 {{PLURAL:$1|minut|minuter}}",
        "duration-hours": "$1 {{PLURAL:$1|timme|timmar}}",
        "usercssispublic": "Observera: CSS-undersidor bör inte innehålla konfidentiella uppgifter eftersom de kan ses av andra användare.",
        "restrictionsfield-badip": "Ogiltig IP-adress eller intervall: $1",
        "restrictionsfield-label": "Tillåtna IP-intervall:",
-       "restrictionsfield-help": "En IP-adress eller CIDR-intervall per rad. För att aktivera allting, använd<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "En IP-adress eller CIDR-intervall per rad. För att aktivera allting, använd<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
        "revid": "sidversion $1",
        "pageid": "sid-ID $1"
 }
index 8d17d4d..bf05552 100644 (file)
        "searcharticle": "செல்",
        "history": "பக்க வரலாறு",
        "history_short": "வரலாறு",
+       "history_small": "வரலாறு",
        "updatedmarker": "எனது கடைசி வருகைக்குப் பின் இற்றைப்படுத்தப்பட்டது",
        "printableversion": "அச்சுக்குகந்த பதிப்பு",
        "permalink": "நிலையான இணைப்பு",
        "saveprefs": "சேமி",
        "restoreprefs": "எல்லோருக்கும் பொதுவான வடிவமைப்பைத் திரும்பக்கொண்டுவரவும் (எல்லா பிரிவுகளிலும்).",
        "prefs-editing": "தொகுத்தல்",
-       "rows": "நிரைகள் (கிடை வரிசைகள்):",
-       "columns": "நிரல்கள்",
        "searchresultshead": "தேடுக",
        "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> சீர்படுத்தலுக்கான எல்லை (பைட்டுகள்):",
        "stub-threshold-sample-link": "மாதிரி",
        "recentchanges-legend-heading": "<strong>குறியீட்டு விளக்கம்:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|புதிய பக்கங்கள் பட்டியலையும்]] காணவும்)",
        "recentchanges-submit": "காட்டு",
+       "rcfilters-filterlist-title": "வடிப்பான்கள்",
+       "rcfilters-filtergroup-registration": "பயனர் பதிகை",
+       "rcfilters-filter-registered-label": "பதிவுசெய்யப்பட்டது",
+       "rcfilters-filter-unregistered-label": "பதிவு நீக்கம் செய்யப்பட்டது",
+       "rcfilters-filter-editsbyself-label": "தங்களின் சொந்த தொகுப்புகள்",
+       "rcfilters-filter-userExpLevel-newcomer-label": "புது வரவுகள்",
+       "rcfilters-filter-userExpLevel-learner-label": "கற்போர்",
+       "rcfilters-filter-bots-label": "தானியங்கி",
+       "rcfilters-filter-humans-label": "மனிதன் (தானியங்கி அல்ல)",
+       "rcfilters-filtergroup-changetype": "மாற்ற வகை",
+       "rcfilters-filter-newpages-label": "பக்க உருவாக்கங்கள்",
        "rcnotefrom": "கீழே காணப்படுவது <strong>$3, $4</strong> இலிருந்து செய்யப்பட்ட (<strong>$1</strong> வரைக் காட்டப்பட்டுள்ளது) {{PLURAL:$5|மாற்றமாகும்.|மாற்றங்களாகும்.}}",
        "rclistfrom": "$2, $3 முதல் இன்று வரை செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்",
        "rcshowhideminor": "சிறிய தொகுப்புகளை $1",
        "feedback-useragent": "பயனர் முகவர்:",
        "searchsuggest-search": "தேடு",
        "searchsuggest-containing": "கொண்டுள்ளது...",
-       "api-error-badaccess-groups": "இந்த விக்கிக்குக் கோப்புகளைப் பதிவேற்றுவதற்கு நீங்கள் அனுமதிக்கப்படவில்லை.",
        "api-error-badtoken": "உள்ளகப் பிழை: தவறான அடையாளம்.",
-       "api-error-copyuploaddisabled": "உரலி மூலம் பதிவேற்றுவது இந்த வழங்கியில் செயலிழக்கச் செய்யப்பட்டுள்ளது.",
-       "api-error-duplicate": "There {{PLURAL:$1|is another file|are some other files}} already on the site with the same content.",
-       "api-error-duplicate-archive": "ஏற்கனவே இத்தளத்தில் இதே உள்ளடக்கத்தைக் கொண்ட {{PLURAL:$1|கோப்பு இருந்தது|கோப்புகள் இருந்தன}}, ஆனால் {{PLURAL:$1|அது நீக்கப்பட்டுவிட்டது|அவை நீக்கப்பட்டுவிட்டன.}}",
-       "api-error-empty-file": "நீங்கள் அளித்த கோப்பு காலியாக உள்ளது.",
        "api-error-emptypage": "புதிய, காலி பக்கங்கள் உருவாக்கல் அனுமதிக்கப்படவில்லை.",
-       "api-error-fetchfileerror": "உள்ளகப் பிழை: கோப்பைப் பெறுகையில் ஏதோ தவறு நேர்ந்துவிட்டது.",
-       "api-error-fileexists-forbidden": "\"$1\" என்ற பெயருள்ள கோப்பு ஏற்கனவே உள்ளது.  மேலெழுத முடியாது.",
-       "api-error-fileexists-shared-forbidden": "\"$1\" என்ற பெயருள்ள கோப்பு ஏற்கனவே கோப்பு பகிர்மானப் பெட்டகத்தில்  உள்ளது. மேலெழுத முடியாது.",
-       "api-error-file-too-large": "நீங்கள் அளித்த கோப்பு மிகவும் பெரியதாக உள்ளது.",
-       "api-error-filename-tooshort": "கோப்புப் பெயர் மிகவும் சிறியதாக உள்ளது.",
-       "api-error-filetype-banned": "இக்கோப்பு வகை தடைசெய்யப்பட்டுள்ளது.",
-       "api-error-filetype-banned-type": "$1  {{PLURAL:$4|அனுமதிக்கப்படாத கோப்பு வகையாகும் | அனுமதிக்கப்படாத கோப்பு வகைகளாகும்}}.. அனுமதிக்கப்பட்ட {{PLURAL:$3|கோப்புவகை|கோப்புவகைகள்}} $2 என்பது(வை) ஆகும்.",
-       "api-error-filetype-missing": "கோப்பில் ஒரு விரிவு விடுபடுகிறது.",
-       "api-error-hookaborted": "நீங்கள் செய்ய முயன்ற மாற்றம் ஒரு விரிவாக்கத்தால் புறக்கணிக்கப்பட்டது.",
-       "api-error-http": "உள்ளகப் பிழை: வழங்கியுடன் இணைக்க முடியவில்லை",
-       "api-error-illegal-filename": "இக்கோப்புப் பெயர் அனுமதிக்கப்படமாட்டாது.",
-       "api-error-internal-error": "உள்ளகப் பிழை: உங்கள் பதிவேற்றத்தை விக்கியில் செயல்படுத்தும்போது ஏதோ தவறு நேர்ந்துவிட்டது.",
-       "api-error-invalid-file-key": "உள்ளகப் பிழை: தற்காலிகச் சேமிப்பில் கோப்பு காணப்படவில்லை.",
-       "api-error-missingparam": "உள்ளகப் பிழை: கோரிக்கையில் அளபுருக்கள் விடுபடுகின்றன.",
-       "api-error-missingresult": "உள்ளகப் பிழை: நகல் வெற்றியடைந்ததா என்று தீர்மாணிக்க முடியவில்லை.",
-       "api-error-mustbeloggedin": "கோப்புகளைப் பதிவேற்ற நீங்கள் கண்டிப்பாகப் புகுபதிகை செய்திருக்க வேண்டும்.",
-       "api-error-mustbeposted": "உள்ளகப் பிழை: கோரிக்கைக்கு HTTP POST தேவை.",
-       "api-error-noimageinfo": "பதிவேற்றம் வெற்றியடைந்தது, ஆனால் வழங்கி கோப்பைப் பற்றிய எந்த ஒரு தகவலையும் எங்களுக்குத் தரவில்லை.",
-       "api-error-nomodule": "உள்ளகப் பிழை: பதிவேற்றப் பகுதி அமைக்கப்படவில்லை.",
-       "api-error-ok-but-empty": "உள்ளகப் பிழை: வழங்கியிலிருந்து பதில் வரவில்லை",
-       "api-error-overwrite": "ஏற்கனவே உள்ள கோப்பின் மேலெழுதுவது அனுமதிக்கப்படமாட்டாது.",
-       "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\"",
-       "api-error-unknown-error": "உள்ளகப் பிழை: உங்கள் கோப்பைப் பதிவேற்ற முயல்கையில் ஏதோ தவறு நேர்ந்துவிட்டது.",
+       "api-error-stashfailed": "உள்ளகப் பிழை: வழங்கி தற்காலிகக் கோப்பைத் தேக்கத் தவறிவிட்டது.",
        "api-error-unknown-warning": "அறியப்படா எச்சரிக்கை: \"$1\".",
        "api-error-unknownerror": "அறியப்படாத பிழை: \"$1\".",
-       "api-error-uploaddisabled": "இந்த விக்கியில் பதிவேற்றல் செயலிழக்கச் செய்யப்பட்டுள்ளது.",
-       "api-error-verification-error": "இக்கோப்பு பிழையுடனோ தவறான விரிவுடனோ இருக்கலாம்.",
        "duration-seconds": "$1 {{PLURAL:$1|நொடி|நொடிகள்}}",
        "duration-minutes": "{{PLURAL:$1|நிமிடம்|நிமிடங்கள்}}",
        "duration-hours": "$1 {{PLURAL:$1|மணி|மணிகள்}} முன்பு",
        "pagelang-language": "மொழி",
        "pagelang-use-default": "இயல்பு நிலை மொழி",
        "pagelang-select-lang": "மொழியைத் தேர்ந்தெடு",
+       "pagelang-reason": "காரணம்",
        "pagelang-submit": "சமர்ப்பி",
        "right-pagelang": "பக்க மொழியை மாற்றுக",
        "action-pagelang": "பக்க மொழியை மாற்றுக",
index ad5535e..a1eb2ae 100644 (file)
@@ -50,9 +50,9 @@
        "tog-minordefault": "กำหนดการแก้ไขทุกครั้งเป็นการแก้ไขเล็กน้อยโดยปริยาย",
        "tog-previewontop": "แสดงตัวอย่างก่อนกล่องแก้ไข",
        "tog-previewonfirst": "แสดงตัวอย่างในการแก้ไขครั้งแรก",
-       "tog-enotifwatchlistpages": "อีà¹\80มลหาเมื่อหน้าหรือไฟล์ในรายการเฝ้าดูเปลี่ยนแปลง",
-       "tog-enotifusertalkpages": "อีà¹\80มลหาเมื่อมีการเปลี่ยนแปลงหน้าคุยกับผู้ใช้ของฉัน",
-       "tog-enotifminoredits": "อีà¹\80มลหาเช่นกันสำหรับการแก้ไขหน้าและไฟล์เล็กน้อย",
+       "tog-enotifwatchlistpages": "อีà¹\80มลà¸\9aอà¸\81à¸\89ัà¸\99เมื่อหน้าหรือไฟล์ในรายการเฝ้าดูเปลี่ยนแปลง",
+       "tog-enotifusertalkpages": "อีà¹\80มลà¸\9aอà¸\81à¸\89ัà¸\99เมื่อมีการเปลี่ยนแปลงหน้าคุยกับผู้ใช้ของฉัน",
+       "tog-enotifminoredits": "อีà¹\80มลà¸\9aอà¸\81à¸\89ัà¸\99เช่นกันสำหรับการแก้ไขหน้าและไฟล์เล็กน้อย",
        "tog-enotifrevealaddr": "เปิดเผยที่อยู่อีเมลของฉันในอีเมลแจ้งเตือน",
        "tog-shownumberswatching": "แสดงจำนวนผู้ใช้ที่เฝ้าดู",
        "tog-oldsig": "ลายเซ็นที่คุณมีอยู่:",
@@ -75,9 +75,9 @@
        "tog-prefershttps": "ใช้การเชื่อมต่อปลอดภัยทุกครั้งเมื่อเข้าสู่ระบบแล้ว",
        "underline-always": "ทุกครั้ง",
        "underline-never": "ไม่",
-       "underline-default": "à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายของหน้าตาหรือเบราว์เซอร์",
+       "underline-default": "à¸\84à¹\88าà¹\80ริà¹\88มà¸\95à¹\89à¸\99ของหน้าตาหรือเบราว์เซอร์",
        "editfont-style": "รูปแบบชุดแบบอักษรในพื้นที่แก้ไข:",
-       "editfont-default": "à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายของเบราว์เซอร์",
+       "editfont-default": "à¸\84à¹\88าà¹\80ริà¹\88มà¸\95à¹\89à¸\99ของเบราว์เซอร์",
        "editfont-monospace": "ชุดอักษรแบบความกว้างคงที่",
        "editfont-sansserif": "ชุดอักษรแบบไม่มีเชิง",
        "editfont-serif": "ชุดอักษรแบบมีเชิง",
        "qbedit": "แก้ไข",
        "qbpageoptions": "หน้านี้",
        "qbmyoptions": "หน้าของฉัน",
-       "faq": "คำถามพบบ่อย",
-       "faqpage": "Project:คำถามพบบ่อย",
+       "faq": "à¸\84ำà¸\96ามà¸\97ีà¹\88à¸\9eà¸\9aà¸\9aà¹\88อย",
+       "faqpage": "Project:à¸\84ำà¸\96ามà¸\97ีà¹\88à¸\9eà¸\9aà¸\9aà¹\88อย",
        "actions": "ปฏิบัติการ",
        "namespaces": "เนมสเปซ",
        "variants": "สิ่งที่แตกต่าง",
        "searcharticle": "ไป",
        "history": "ประวัติหน้า",
        "history_short": "ประวัติ",
+       "history_small": "ประวัติ",
        "updatedmarker": "ถูกปรับตั้งแต่การเยี่ยมชมครั้งสุดท้ายของฉัน",
        "printableversion": "รุ่นพร้อมพิมพ์",
        "permalink": "ลิงก์ถาวร",
        "imagepage": "ดูหน้าไฟล์",
        "mediawikipage": "ดูหน้าข้อความ",
        "templatepage": "ดูหน้าแม่แบบ",
-       "viewhelppage": "à¸\94ูหà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย",
+       "viewhelppage": "à¸\94ูหà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89",
        "categorypage": "ดูหน้าหมวดหมู่",
        "viewtalkpage": "ดูการพูดคุย",
        "otherlanguages": "ในภาษาอื่น",
        "redirectto": "เปลี่ยนทางไป:",
        "lastmodifiedat": "ดัดแปรหน้านี้ล่าสุดเมื่อวันที่ $1 เวลา $2",
        "viewcount": "มีการเข้าถึงหน้านี้ $1 ครั้ง",
-       "protectedpage": "หà¸\99à¹\89าà¸\96ูà¸\81ลà¹\87อà¸\81",
+       "protectedpage": "หà¸\99à¹\89าà¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99",
        "jumpto": "ข้ามไป:",
        "jumptonavigation": "การนำทาง",
        "jumptosearch": "ค้นหา",
        "databaseerror-query": "คำสั่ง: $1",
        "databaseerror-function": "ฟังก์ชัน: $1",
        "databaseerror-error": "ข้อผิดพลาด: $1",
-       "laggedslavemode": "<strong>คำเตือน:</strong> หน้านี้อาจไม่มีการปรับล่าสุด",
+       "laggedslavemode": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99:</strong> à¸«à¸\99à¹\89าà¸\99ีà¹\89อาà¸\88à¹\84มà¹\88มีà¸\81ารà¸\9bรัà¸\9aà¸\82à¹\89อมูลลà¹\88าสุà¸\94",
        "readonly": "ฐานข้อมูลถูกล็อก",
        "enterlockreason": "ใส่เหตุแห่งการล็อก ทั้งเวลาที่คาดว่าจะปลดล็อก",
        "readonlytext": "ขณะนี้ฐานข้อมูลถูกล็อกรายการใหม่และการแก้ไขเพิ่มเติมอื่น อาจเป็นเพราะการบำรุงรักษาฐานข้อมูลรูทีน หลังแล้วเสร็จจะกลับมาใช้งานได้ตามปกติ\n\nผู้ดูแลระบบที่ล็อกได้ให้คำอธิบายดังนี้: $1",
        "namespaceprotected": "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ <strong>$1</strong>",
        "customcssprotected": "คุณไม่มีสิทธิแก้ไขหน้า CSS นี้ เพราะมีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
        "customjsprotected": "คุณไม่มีสิทธิแก้ไขหน้าจาวาสคริปต์นี้ เพราะหน้านี้มีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
-       "mycustomcssprotected": "คุณไม่มีสิทธิแก้ไขหน้าซีเอสเอสนี้",
+       "mycustomcssprotected": "คุณไม่มีสิทธิแก้ไขหน้า CSS นี้",
        "mycustomjsprotected": "คุณไม่มีสิทธิแก้ไขหน้าจาวาสคริปต์นี้",
        "myprivateinfoprotected": "คุณไม่มีสิทธิแก้ไขข้อมูลส่วนตัวของคุณ",
        "mypreferencesprotected": "คุณไม่มีสิทธิแก้ไขการตั้งค่าของคุณ",
        "password-change-forbidden": "คุณไม่สามารถเปลี่ยนรหัสผ่านบนวิกินี้",
        "externaldberror": "มีข้อผิดพลาดของฐานข้อมูลการพิสูจน์ตัวจริง หรือคุณไม่ได้รับอนุญาตให้ปรับบัญชีภายนอกของคุณ",
        "login": "ล็อกอิน",
+       "login-security": "ยืนยันตัวตนของคุณ",
        "nav-login-createaccount": "ล็อกอิน / สร้างบัญชี",
        "userlogin": "ล็อกอิน / สร้างบัญชี",
        "userloginnocreate": "ล็อกอิน",
        "userlogin-resetpassword-link": "ลืมรหัสผ่านหรือ",
        "userlogin-helplink2": "วิธีใช้เรื่องการล็อกอิน",
        "userlogin-loggedin": "คุณล็อกอินในชื่อ {{GENDER:$1|$1}} แล้ว\nใช้แบบด้านล่างเพื่อล็อกอินเป็นอีกผู้ใช้หนึ่ง",
+       "userlogin-reauth": "คุณต้องเข้าสู่ระบบอีกครั้งเพื่อยืนยันว่าคุณคือ{{GENDER:$1|$1}}",
        "userlogin-createanother": "สร้างอีกบัญชี",
        "createacct-emailrequired": "ที่อยู่อีเมล",
        "createacct-emailoptional": "ที่อยู่อีเมล (เลือกไม่ใส่ก็ได้)",
        "createacct-email-ph": "กรอกที่อยู่อีเมลของคุณ",
        "createacct-another-email-ph": "กรอกที่อยู่อีเมล",
        "createaccountmail": "ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุ",
+       "createaccountmail-help": "สามารถใช้สร้างบัญชีสำหรับบุคคลอื่นๆ โดยที่ไม่ต้องเรียนรู้รหัสผ่านก็ได้",
        "createacct-realname": "ชื่อจริง (เลือกไม่ใส่ได้)",
        "createaccountreason": "เหตุผล:",
        "createacct-reason": "เหตุผล",
        "createacct-reason-ph": "เหตุใดคุณจึงสร้างอีกบัญชี",
+       "createacct-reason-help": "ข้อความที่แสดงในล็อกการสร้างบัญชี",
        "createacct-submit": "สร้างบัญชีของคุณ",
        "createacct-another-submit": "สร้างบัญชี",
+       "createacct-continue-submit": "ทำการสร้างบัญชีต่อไป",
+       "createacct-another-continue-submit": "ทำการสร้างบัญชีต่อไป",
        "createacct-benefit-heading": "{{SITENAME}}สร้างจากคนเช่นคุณ",
        "createacct-benefit-body1": "$1 การแก้ไข",
        "createacct-benefit-body2": "$1 หน้า",
        "nocookiesnew": "สร้างบัญชีผู้ใช้แล้ว แต่ยังไม่ได้ล็อกอิน \n{{SITENAME}} ใช้คุกกี้เพื่อล็อกอินผู้ใช้\nคุณปิดใช้งานคุกกี้\nโปรดเปิดใช้งาน แล้วล็อกอินพร้อมชื่อผู้ใช้และรหัสผ่านใหม่ของคุณ",
        "nocookieslogin": "{{SITENAME}} ใช้คุกกี้เพื่อล็อกอินผู้ใช้\nคุณปิดใช้งานคุกกี้\nกรุณาเปิดใช้งานและลองอีกครั้ง",
        "nocookiesfornew": "บัญชีผู้ใช้ไม่ถูกสร้าง เนื่องจากเราไม่สามารถยืนยันต้นทาง\nกรุณาทำให้แน่ใจว่าคุณได้เปิดใช้งานคุกกี้ โหลดหน้านี้ใหม่และลองอีกครั้ง",
+       "createacct-loginerror": "บัญชีผู้ใช้ถูกสร้างสำเร็จแล้ว แต่คุณไม่สามารถเข้าสู่ระบบได้โดยอัตโนมัติ โปรด[[Special:UserLogin|เข้าสู่ระบบด้วยตนเอง]]",
        "noname": "คุณไม่ได้ใส่ชื่อผู้ใช้ที่ถูกต้อง",
        "loginsuccesstitle": "ล็อกอินสำเร็จ",
        "loginsuccess": "<strong>ขณะนี้คุณล็อกอินสู่ {{SITENAME}} ในชื่อ \"$1\"</strong>",
        "createacct-another-realname-tip": "ไม่จำเป็นต้องใส่ชื่อจริง\nหากคุณเลือกใส่ชื่อจริง จะใช้เพื่อแสดงที่มาสำหรับงานของตน",
        "pt-login": "ล็อกอิน",
        "pt-login-button": "ล็อกอิน",
+       "pt-login-continue-button": "ทำการเข้าสู่ระบบต่อไป",
        "pt-createaccount": "สร้างบัญชี",
        "pt-userlogout": "ล็อกเอาต์",
        "php-mail-error-unknown": "เกิดข้อผิดพลาดไม่ทราบสาเหตุในฟังก์ชัน mail() ของพีเอชพี",
        "changepassword-success": "เปลี่ยนรหัสผ่านของคุณสำเร็จ!",
        "changepassword-throttled": "ล่าสุดคุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
        "botpasswords": "รหัสผ่านบอต",
+       "botpasswords-disabled": "รหัสผ่านสำหรับบอตถูกปิดใช้",
+       "botpasswords-no-central-id": "หากต้องการใช้รหัสผ่านบอต คุณต้องล็อกอินในชื่อบัญชีผู้ใช้ที่เป็นกลาง",
+       "botpasswords-existing": "รหัสผ่านบอตที่มีอยู่",
+       "botpasswords-createnew": "สร้างรหัสผ่านบอตใหม่",
+       "botpasswords-editexisting": "แก้ไขรหัสผ่านบอตที่มีอยู่เดิม",
        "botpasswords-label-appid": "ชื่อบอต:",
        "botpasswords-label-create": "สร้าง",
        "botpasswords-label-update": "อัปเดต",
        "botpasswords-label-cancel": "ยกเลิก",
        "botpasswords-label-delete": "ลบ",
        "botpasswords-label-resetpassword": "ตั้งรหัสผ่านใหม่",
+       "botpasswords-label-grants": "การอนุญาตที่นำไปใช้ได้:",
+       "botpasswords-label-grants-column": "อนุญาตแล้ว",
+       "botpasswords-bad-appid": "ชื่อบอต \"$1\" ไม่ถูกต้อง",
+       "botpasswords-insert-failed": "การเพิ่มชื่อบอต \"$1\" ล้มเหลว คุณได้เพิ่มมันไว้แล้วหรือเปล่า?",
+       "botpasswords-update-failed": "การอัปเดตชื่อบอต \"$1\" ล้มเหลว คุณลบมันออกไปหรือเปล่า?",
        "resetpass_forbidden": "ไม่สามารถเปลี่ยนรหัสผ่านได้",
        "resetpass-no-info": "คุณต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง",
        "resetpass-submit-loggedin": "เปลี่ยนรหัสผ่าน",
        "saveprefs": "บันทึก",
        "restoreprefs": "คืนการตั้งค่าโดยปริยายทั้งหมด (ในทุกส่วน)",
        "prefs-editing": "การแก้ไข",
-       "rows": "แถว:",
-       "columns": "คอลัมน์:",
        "searchresultshead": "ค้นหา",
        "stub-threshold": "ขีดแบ่งสำหรับการจัดรูปแบบลิงก์โครง ($1):",
        "stub-threshold-sample-link": "ตัวอย่าง",
        "emailccsubject": "คัดลอกสารของคุณไป $1: $2",
        "emailsent": "ส่งอีเมลแล้ว",
        "emailsenttext": "ส่งสารอีเมลของคุณแล้ว",
-       "emailuserfooter": "$1 ส่งอีเมลนี้ถึง $2 โดยฟังก์ชัน \"{{int:emailuser}}\" ที่ {{SITENAME}}",
+       "emailuserfooter": "$1 ส่งอีเมลนี้ถึง $2 โดยฟังก์ชัน \"{{int:emailuser}}\" ที่ {{SITENAME}} อีเมลของคุณจะถูกส่งไปที่ผู้ส่งคนเดิมโดยตรง โดยจะเปิดเผยที่อยู่อีเมลให้พวกเขาเห็น",
        "usermessage-summary": "ฝากสารระบบ",
        "usermessage-editor": "ตัวส่งสารของระบบ",
        "watchlist": "รายการเฝ้าดู",
        "enotif_lastvisited": "ดู $1 สำหรับการเปลี่ยนแปลงทั้งหมดตั้งแต่คุณเยี่ยมชมครั้งสุดท้าย",
        "enotif_lastdiff": "ดู $1 เพื่อดูการเปลี่ยนแปลงนี้",
        "enotif_anon_editor": "ผู้ใช้นิรนาม $1",
-       "enotif_body": "เรียน $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nคำอธิบายอย่างย่อของผู้เขียน: $PAGESUMMARY $PAGEMINOREDIT\n\nติดต่อผู้เขียน:\nเมล: $PAGEEDITOR_EMAIL\nวิกิ: $PAGEEDITOR_WIKI\n\nจะไม่มีประกาศอื่นหากมีกิจกรรมเพิ่มเติม เว้นเสียแต่คุณจะเข้าชมหน้านี้ คุณยังสามารถตั้งค่าตัวบ่งชี้ประกาศใหม่สำหรับหน้าที่คุณเฝ้าดูทุกหน้าในรายการเฝ้าดูของคุณ\n\nระบบประกาศ {{SITENAME}} ที่เป็นมิตรของคุณ\n\n--\nในการเปลี่ยนการตั้งค่าประกาศอีเมลของคุณ โปรดดู\n{{canonicalurl:{{#special:Preferences}}}}\n\nในการเปลี่ยนการตั้งค่ารายการเฝ้าดูของคุณ โปรดดู\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nในการลบหน้าจากรายการเฝ้าดูของคุณ โปรดดู\n$UNWATCHURL\n\nผลป้อนกลับและความช่วยเหลือเพิ่มเติม:\n$HELPPAGE",
+       "enotif_body": "เรียน $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nคำอธิบายอย่างย่อของผู้เขียน: $PAGESUMMARY $PAGEMINOREDIT\n\nติดต่อผู้เขียน:\nเมล: $PAGEEDITOR_EMAIL\nวิกิ: $PAGEEDITOR_WIKI\n\nจะไม่มีประกาศอื่นหากมีกิจกรรมเพิ่มเติม เว้นเสียแต่คุณจะเข้าชมหน้านี้ขณะที่กำลังล็อกอินอยู่ คุณยังสามารถตั้งค่าตัวบ่งชี้ประกาศใหม่สำหรับหน้าที่คุณเฝ้าดูทุกหน้าในรายการเฝ้าดูของคุณ\n\nระบบประกาศ {{SITENAME}} ที่เป็นมิตรของคุณ\n\n--\nในการเปลี่ยนการตั้งค่าประกาศอีเมลของคุณ โปรดดู\n{{canonicalurl:{{#special:Preferences}}}}\n\nในการเปลี่ยนการตั้งค่ารายการเฝ้าดูของคุณ โปรดดู\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nในการลบหน้าจากรายการเฝ้าดูของคุณ โปรดดู\n$UNWATCHURL\n\nผลป้อนกลับและความช่วยเหลือเพิ่มเติม:\n$HELPPAGE",
        "created": "ถูกสร้าง",
        "changed": "ถูกเปลี่ยนแปลง",
        "deletepage": "ลบหน้า",
        "feedback-thanks": "ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า \"[$2 $1]\" แล้ว",
        "searchsuggest-search": "ค้นหา {{SITENAME}}",
        "searchsuggest-containing": "มี...",
-       "api-error-badaccess-groups": "คุณไม่ได้รับอนุญาตให้อัปโหลดไฟล์มายังวิกินี้",
-       "api-error-empty-file": "ไฟล์ที่คุณส่งมานั้นว่าง",
        "api-error-emptypage": "ไม่อนุญาตให้สร้างหน้าใหม่ที่ว่าง",
-       "api-error-file-too-large": "ไฟล์ที่คุณส่งมาใหญ่เกินไป",
-       "api-error-filename-tooshort": "ชื่อไฟล์สั้นเกินไป",
-       "api-error-filetype-banned": "ไฟล์ประเภทนี้ถูกห้าม",
-       "api-error-mustbeloggedin": "กรุณาลงชื่อเข้าใช้เพื่ออัปโหลดไฟล์",
-       "api-error-ratelimited": "คุณกำลังพยายามอัปโหลดไฟล์ภายในระยะห่างเวลาที่สั้นเกินกว่าที่วิกินี้อนุญาต\nโปรดรอสักครู่แล้วลองใหม่อีกครั้ง",
-       "api-error-uploaddisabled": "การอัปโหลดถูกปิดใช้งานบนวิกินี้",
        "duration-seconds": "$1 วินาที",
        "duration-minutes": "$1 นาที",
        "duration-hours": "$1 ชั่วโมง",
index e1c2df5..bcab524 100644 (file)
        "recentchanges-legend-heading": "<strong>Gösterge:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca [[Special:NewPages|yeni sayfalar listesine]] bakınız)",
        "recentchanges-submit": "Göster",
+       "rcfilters-filter-minor-label": "Küçük değişiklikler",
+       "rcfilters-filter-major-label": "Küçük olmayan değişiklikler",
        "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
        "feedback-useragent": "Kullanıcı temsilcisi",
        "searchsuggest-search": "Ara",
        "searchsuggest-containing": "içeren...",
-       "api-error-badaccess-groups": "Bu wiki için dosya yüklemenize izin verilmiyor.",
        "api-error-badtoken": "İç hata: Bozuk anahtar.",
-       "api-error-copyuploaddisabled": "URL ile yükleme bu sunucuda devre dışı bırakılmıştır.",
-       "api-error-duplicate": "Sitede zaten aynı içerikte başka {{PLURAL:$1|bir dosya|dosyalar}} mevcut.",
-       "api-error-duplicate-archive": "Sitede zaten aynı içerikte başka {{PLURAL:$1|bir dosya|dosyalar}} vardı, ama {{PLURAL:$1|silindi|silindiler}}.",
-       "api-error-empty-file": "Gönderdiğiniz dosya boş.",
        "api-error-emptypage": "Yeni, boş bir sayfa oluşturmaya izin verilmez.",
-       "api-error-fetchfileerror": "İç hata: Dosya alınırken bir hata oluştu.",
-       "api-error-fileexists-forbidden": "\"$1\" adıyla bir dosya zaten mevcut dolayısıyla üzerine yazamazsınız.",
-       "api-error-fileexists-shared-forbidden": "\"$1\" adında bir dosya ortak havuzda zaten var, ve üzerine yazılamaz.",
-       "api-error-file-too-large": "Gönderdiğiniz dosya çok büyük.",
-       "api-error-filename-tooshort": "Dosya adı çok kısa.",
-       "api-error-filetype-banned": "Bu dosya biçimi yasaklanmıştır.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|izin verilen bir dosya türü değil|izin verilen dosya türleri değil}}. İzin verilen {{PLURAL:$3|dosya türü|dosya türleri}} $2.",
-       "api-error-filetype-missing": "Dosya uzantısı eksik.",
-       "api-error-hookaborted": "Yapmaya çalıştığınız değişiklik bir eklenti tarafından iptal edildi.",
-       "api-error-http": "İç hata: sunucu ile bağlantı kurulamıyor.",
-       "api-error-illegal-filename": "Bu dosya adına izin verilmiyor.",
-       "api-error-internal-error": "İç hata: Wiki'ye yükleme yapma işleminizde bir şeyler ters gitti.",
-       "api-error-invalid-file-key": "İç hata: geçici depolama dosyası bulunamadı.",
-       "api-error-missingparam": "İç hata: İstenilen parametreler eksik.",
-       "api-error-missingresult": "İç hata: Kopyalamanın başarılı olup olmadığı belirlenemedi.",
-       "api-error-mustbeloggedin": "Dosya yükleyebilmek için oturum açmanız gereklidir.",
-       "api-error-mustbeposted": "İç hata: İstek HTTP POST gerektiriyor.",
-       "api-error-noimageinfo": "Yükleme başarılı oldu, ancak sunucu, bize dosya hakkında herhangi bir bilgi vermedi.",
-       "api-error-nomodule": "İç hata: Yükleme modülü ayarı yapılmadı.",
-       "api-error-ok-but-empty": "İç hata: Sunucu yanıt vermiyor.",
-       "api-error-overwrite": "Varolan dosyanın üzerine yazmaya izin verilmiyor.",
-       "api-error-stashfailed": "İç hata: Sunucu, geçici dosyaları kaybetti.",
        "api-error-publishfailed": "İç hata: Sunucu geçici dosyayı yayınlarken başarısız oldu.",
-       "api-error-stasherror": "Dosya zulaya yüklenirken hata oluştu.",
-       "api-error-stashedfilenotfound": "Saklandığı yerden yüklenmeye çalışılan dosya bu yerde bulunamadı.",
-       "api-error-stashpathinvalid": "Saklanan dosyanın bulunması beklenen yer bilgisi geçersiz.",
-       "api-error-stashfilestorage": "Dosya zulaya saklanmaya çalışılırken hata ile karşılaşıldı.",
-       "api-error-stashzerolength": "Sunucu dosyayı zulada saklayamadı; çünkü dosya boyutu sıfır uzunlukta.",
-       "api-error-stashnotloggedin": "Dosya yükleme zulasına dosya kaydetmek için oturum açmış olmanız gerekiyor.",
-       "api-error-stashwrongowner": "Zulada erişmeye çalıştığınız belge size ait değil.",
-       "api-error-stashnosuchfilekey": "Zulaya erişmeye çalışırken kullanılan dosya anahtarı mevcut değil.",
-       "api-error-timeout": "Sunucu beklenen süre içinde yanıt vermedi.",
-       "api-error-unclassified": "Bilinmeyen bir hata oluştu.",
-       "api-error-unknown-code": "Bilinmeyen hata: \"$1\"",
-       "api-error-unknown-error": "İç hata: Dosya yüklemeye çalışırken bir şeyler ters gitti.",
+       "api-error-stashfailed": "İç hata: Sunucu, geçici dosyaları kaybetti.",
        "api-error-unknown-warning": "Bilinmeyen uyarı: $1",
        "api-error-unknownerror": "Bilinmeyen hata: \"$1\".",
-       "api-error-uploaddisabled": "Yükleme bu vikide devre dışı bırakılmıştır.",
-       "api-error-verification-error": "Dosya bozuk veya yanlış uzantıya sahip olabilir.",
        "duration-seconds": "$1 {{PLURAL:$1|saniye|saniye}}",
        "duration-minutes": "$1 {{PLURAL:$1|dakika|dakika}}",
        "duration-hours": "$1 {{PLURAL:$1|saat|saat}}",
index 5b2d221..d0060fd 100644 (file)
        "feedback-thanks-title": "Рәхмәт!",
        "searchsuggest-search": "{{SITENAME}} эчендә эзләү",
        "searchsuggest-containing": "эчтәлек...",
-       "api-error-badaccess-groups": "Сезгә бу викигә файллар өстәү рөхсәт ителмәгән",
        "api-error-badtoken": "Эчке хата: дөрес булмаган токен.",
-       "api-error-copyuploaddisabled": "URL-адрес буенча йөкләү бу серверда сүндерелгән.",
-       "api-error-duplicate": "Мондый эчтәлекле {{PLURAL:$1|башка файл|башка файллар}} да бар.",
-       "api-error-duplicate-archive": "Элек сайтта мондый эчтәлекле {{PLURAL:$1|башка файл|башка файллар}} бар иде инде, ләкин {{PLURAL:$1|1=аны бетерделәр|аларны бетерделәр}}.",
-       "api-error-empty-file": "Сезнең тарафтан җибәрелгән файл буш.",
        "api-error-emptypage": "Яңа буш сәхифәләр төзү рөхсәт ителми",
-       "api-error-unknown-code": "Билгесез хата: \"$1\"",
-       "api-error-unknown-error": "Эчке хата: файлны йөкләргә тырышканда нәрсәдер ялгыш китте.",
        "api-error-unknown-warning": "Билгесез кисәтү: \"$1\".",
        "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|сәгать}}",
index ebeca70..8a61fb5 100644 (file)
        "nocreatetext": "Та сайтлэн бамаз выль сюбегатэм луонлыкъёсын кылдытон.\nТон улыса, берлань вуэ быгатэ бам отредактировать, [[Special:UserLogin|тусбуяськыны книгае яке выль система кылдыто учётной]].",
        "nocreate-loggedin": "Выль бамъёсты кылдытъяны тӥляд лэзёнды ӧвӧл.",
        "permissionserrors": "Лэзён янгыш",
-       "permissionserrorstext": "Тон дорын разрешенизы ӧвӧлэн, тазэ лэсьтом шуыса, со понна вуоно {{PLURAL:$1|мугез}}:",
+       "permissionserrorstext": "Тӥляд тае быдэстыны лэзёнды ӧвӧл та {{PLURAL:$1|1=муген|мугъёсын}} сэрен:",
        "permissionserrorstext-withaction": "Тӥляд $2 лэзёнды ӧвӧл та {{PLURAL:$1|1=муген|мугъёсын}} сэрен:",
        "moveddeleted-notice": "Та бам быдтэмын вал.\nБыдтонъёсын но ним воштонъёсын журналъёсысь ярано записьёс чӧлсконлы улӥ возьматэмын.",
        "content-model-wikitext": "викитекст",
        "group-sysop": "Администраторъёс",
        "group-all": "(ваньзэ)",
        "grouppage-sysop": "{{ns:project}}:Администраторъёс",
-       "right-read": "лÑ\8bдÓ\9fÑ\8bнÑ\8b Ð±Ð°Ð¼",
-       "right-edit": "пÑ\80авка Ð±Ð°Ð¼",
-       "right-createpage": "бам ÐºÑ\8bлдÑ\8bÑ\82он-а, Ñ\83г-возÑ\8cмаÑ\82Ñ\8dмзÑ\8d Ñ\8dÑ\81кеÑ\80он",
-       "right-createtalk": "создание бамлэн обсуждениосаз",
-       "right-createaccount": "вÑ\8bлÑ\8c ÐºÐ½Ð¸Ð³Ð° ÐºÑ\8bлдÑ\8bÑ\82он Ð¿Ñ\8bÑ\80иÑ\81Ñ\8cкизÑ\8b Ñ\83Ñ\87Ñ\91Ñ\82ной",
-       "right-writeapi": "гожÑ\82Ñ\8dÑ\82Ñ\8aÑ\91Ñ\81Ñ\82Ñ\8b ÐºÑ\83Ñ\82он Ð¿Ð¾Ð½Ð½Ð° API",
+       "right-read": "Ð\91амÑ\8aÑ\91Ñ\81Ñ\82Ñ\8b Ñ\83Ñ\87кон",
+       "right-edit": "Ð\91амÑ\8aÑ\91Ñ\81Ñ\82Ñ\8b Ñ\82Ñ\83паÑ\82Ñ\8aÑ\8fн",
+       "right-createpage": "Ð\91амÑ\8aÑ\91Ñ\81Ñ\82Ñ\8b ÐºÑ\8bлдÑ\8bÑ\82он (веÑ\80аÑ\81Ñ\8cкон Ð±Ð°Ð¼Ñ\8aÑ\91Ñ\81 Ñ\81Ñ\8fна)",
+       "right-createtalk": "Вераськон бамъёсты кылдытон",
+       "right-createaccount": "Ð\92икиавÑ\82оÑ\80Ñ\8aÑ\91Ñ\81лÑ\8dÑ\81Ñ\8c Ð²Ñ\8bлÑ\8c Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8cÑ\91Ñ\81Ñ\81Ñ\8dÑ\81 ÐºÑ\8bлдÑ\8bÑ\82он",
+       "right-writeapi": "Ð\93ожÑ\8aÑ\8fÑ\81Ñ\8c API Ñ\83же ÐºÑ\83Ñ\82он",
        "right-block": "мукет пыриськисьёслэсь курон-косон вылэ установкаосты редактировать",
        "newuserlogpage": "Викиавторъёсыз регистрациосын журнал",
        "action-read": "та лыдӟонъёс бам",
        "logentry-upload-upload": "$1 {{GENDER:$2|понӥз}} $3",
        "searchsuggest-search": "Утчано {{SITENAME}}",
        "searchsuggest-containing": "кудъёсаз вань...",
-       "api-error-autoblocked": "Тӥляд IP-адресты автоматически заблокировать каремын вал, малы ке шуоно со кутӥськиз заблокировать карем викиавторен.",
-       "api-error-blocked": "Тӥ тупатъянлэсь палэнтэмын вал.",
        "expand_templates_preview": "Эскерон",
        "log-action-filter-all": "Ваньзэ"
 }
index e4db290..de19903 100644 (file)
        "apisandbox-sending-request": "Надсилання запиту API…",
        "apisandbox-loading-results": "Отримання результатів API…",
        "apisandbox-results-error": "Сталася помилка при завантаженні відповіді на запит API: $1.",
-       "apisandbox-request-params-json": "Параметри JSON:",
        "apisandbox-request-url-label": "URL-адреса запиту:",
        "apisandbox-request-time": "Час запиту: {{PLURAL:$1|$1 мс}}",
        "apisandbox-results-fixtoken": "Виправте токен і надішліть ще раз",
        "feedback-useragent": "User Agent:",
        "searchsuggest-search": "Пошук {{GRAMMAR:locative|{{SITENAME}}}}",
        "searchsuggest-containing": "що містять...",
-       "api-error-autoblocked": "Вашу IP-адресу було заблоковано автоматично, тому що її використовував заблокований користувач.",
-       "api-error-badaccess-groups": "Вам не дозволено завантажувати файли до цього вікіпроекту.",
        "api-error-badtoken": "Внутрішня помилка: некоректний токен.",
-       "api-error-blocked": "Можливість редагування для вас заблоковано.",
-       "api-error-copyuploaddisabled": "На цьому сервері вимкнене завантаження за URL-адресою.",
-       "api-error-duplicate": "Уже {{PLURAL:$1|1=існує інший файл|існують інші файли}} з таким самим вмістом.",
-       "api-error-duplicate-archive": "Раніше на сайті вже {{PLURAL:$1|1=був файл|були файли}} з ідентичним вмістом, але {{PLURAL:$1|1=його|їх}} вилучили.",
-       "api-error-empty-file": "Файл, який ви надіслали, порожній.",
        "api-error-emptypage": "Створення нової порожньої сторінки неприпустиме.",
-       "api-error-fetchfileerror": "Внутрішня помилка: щось пішло не так під час отримання файлу.",
-       "api-error-fileexists-forbidden": "Файл з назвою «$1» вже існує і його не можна перезаписати.",
-       "api-error-fileexists-shared-forbidden": "Файл з назвою «$1» вже існує в сховищі спільних файлів, його не можна перезаписати.",
-       "api-error-file-too-large": "Файл, який ви надіслали, завеликий.",
-       "api-error-filename-tooshort": "Назва файлу занадто коротка.",
-       "api-error-filetype-banned": "Цей тип файлів заборонений.",
-       "api-error-filetype-banned-type": "$1 — {{PLURAL:$4|1=недозволений тип файлів|недозволені типи файлів}}. {{PLURAL:$3|1=Дозволений тип файлів|Дозволені типи файлів}}: $2.",
-       "api-error-filetype-missing": "У цього файла відсутнє розширення.",
-       "api-error-hookaborted": "Зміну, що Ви намагалися зробити, відкинуто обробником.",
-       "api-error-http": "Внутрішня помилка: Не вдається підключитися до сервера.",
-       "api-error-illegal-filename": "Неприпустиме ім'я файлу.",
-       "api-error-internal-error": "Внутрішня помилка: Щось пішло не так під час обробки вашого завантаження на вікі.",
-       "api-error-invalid-file-key": "Внутрішня помилка: Файл не знайдено в тимчасовому сховищі.",
-       "api-error-missingparam": "Внутрішня помилка: Відсутні параметри за запитом.",
-       "api-error-missingresult": "Внутрішня помилка: не вдалося визначити, чи пройшло копіювання вдало.",
-       "api-error-mustbeloggedin": "Ви повинні увійти в систему для завантаження файлів.",
-       "api-error-mustbeposted": "Внутрішня помилка: Запит вимагає HTTP POST.",
-       "api-error-noimageinfo": "Завантаження завершено, але сервер не надав ніякої інформації про файл.",
-       "api-error-nomodule": "Внутрішня помилка: Відсутній модуль завантажень.",
-       "api-error-ok-but-empty": "Внутрішня помилка: сервер не відповідає.",
-       "api-error-overwrite": "Заміну існуючого файлу не дозволено.",
-       "api-error-ratelimited": "Ви намагаєтесь завантажити більше файлів за короткий проміжок часу, ніж дозволено у цій вікі. Будь ласка, спробуйте за декілька хвилин.",
-       "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»",
-       "api-error-unknown-error": "Внутрішня помилка: щось пішло не так, при спробі завантажити файл.",
+       "api-error-stashfailed": "Внутрішня помилка: сервер не зміг зберегти тимчасовий файл.",
        "api-error-unknown-warning": "Невідоме попередження: «$1».",
        "api-error-unknownerror": "Невідома помилка: \"$1\".",
-       "api-error-uploaddisabled": "Завантаження вимкнуто у цій вікі.",
-       "api-error-verification-error": "Цей файл можливо пошкоджено, або він має неправильне розширення.",
-       "api-error-was-deleted": "Файл із цією назвою раніше було завантажено і згодом вилучено.",
        "duration-seconds": "$1 {{PLURAL:$1|секунда|секунди|секунд}}",
        "duration-minutes": "$1 {{PLURAL:$1|хвилина|хвилини|хвилин}}",
        "duration-hours": "$1 {{PLURAL:$1|година|години|годин}}",
        "usercssispublic": "Будь ласка, зверніть увагу: підсторінки CSS не повинні містити конфіденційних даних, бо їх можуть бачити інші користувачі.",
        "restrictionsfield-badip": "Недійсна IP-адреса або діапазон: $1",
        "restrictionsfield-label": "Дозволені діапазони IP-адрес:",
-       "restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "версія $1",
        "pageid": "ID сторінки $1"
 }
index 9a4f66e..9ca5fde 100644 (file)
        "nstab-template": "Batakan",
        "nstab-help": "Pakli hin pabulig",
        "nstab-category": "Kaarangay",
-       "mainpage-nstab": "Panguna nga pakli",
+       "mainpage-nstab": "Syahan nga Pakli",
        "nosuchaction": "Waray sugad nga buhat",
        "nosuchactiontext": "An buhat nga gin-ispisipikar han URL diri puyde.\nBangin la, nagsayop ka pagmakinilya han URL, o sinmunod hin sayop nga sumpay.\nBangin liwat ini usa nga bug dida han software nga ginagamit han {{SITENAME}}.",
        "nosuchspecialpage": "Waray sugad nga pinaurog nga pakli",
        "passwordreset-emaildisabled": "Mga mga higamit ha email in waray pinaandar hini nga wiki.",
        "passwordreset-username": "Agnay hiton gumaramit:",
        "passwordreset-domain": "Dominyo:",
-       "passwordreset-capture": "Kikitaon mo an resulta nga e-mail?",
-       "passwordreset-capture-help": "Kun imo igtsek ini nga kahon, an email (lakip an temporaryo nga tigaman-panakob) in igpapakita ha imo labot la han ginpadangat ha gumaramit.",
        "passwordreset-email": "E-mail adres:",
        "passwordreset-emailtitle": "Mga detalye han akawnt ha {{SITENAME}}",
        "passwordreset-emailtext-ip": "Mayda gumaramit (bangin hi ikaw, tikang han IP adres nga $1) nga naghangyo hin reset han imo tigaman-pansulod han {{SITENAME}} ($4). An nasunod nga gumaramit {{PLURAL:$3|nga akawnt|nga mga akawnt}} nahanungod hini nga email nga adres: \n\n$2\n\n{{PLURAL:$3|Iní nga temporaryo nga tigaman-pansulod|Iní nga mga temporaryo nga tigaman-pansulod}} ma-waray bali hin {{PLURAL:$5|usa ka adlaw|$5 nga mga adlaw}}.\nAngay ka sumakob ngan pumílì hin bag-o nga tigaman-pansulod ha yanâ.  Kun mayda lain nga naghatag hini nga hangyo, o kun nahinumdoman mo an imo orihinal nga tigaman-pansulod, ngan nadírì ka na pagbalyo hiní, puyde mo pasagdan ini nga sumat ngan magpadayon hin paggamit han imo daan nga tigaman-pansulod.",
        "searchprofile-advanced-tooltip": "Pamilnga ha mga nabatasan nga ngaran-lat'ang",
        "search-result-size": "$1 ({{PLURAL:$2|1 nga pulong|$2 nga mga pulong}})",
        "search-result-category-size": "{{PLURAL:$1|1 nga api|$1 nga mga api}} ({{PLURAL:$2|1 nga ubos-nga-kaarangay|$2 nga mga ubos-nga-kaarangay}}, {{PLURAL:$3| 1 nga fayl|$3 nga mga fayl}})",
-       "search-redirect": "(redirekta $1)",
+       "search-redirect": "(Ginredirekta tikang ha $1)",
        "search-section": "(bahin $1)",
        "search-category": "(kaarangay $1)",
        "search-suggest": "Buot sidngon mo ba: $1",
        "saveprefs": "Igtipig",
        "restoreprefs": "Igbalik an ngatanan ngada nga aada-nga-daan nga settings (ha ngatanan nga mga bahin)",
        "prefs-editing": "Ginliliwat",
-       "rows": "Mga rumbay pahigda:",
-       "columns": "Mga rumbay patindog:",
        "searchresultshead": "Bilnga",
        "stub-threshold-sample-link": "pananglitan",
        "stub-threshold-disabled": "Waray ginpagana",
        "userrights-reason": "Katadungan:",
        "userrights-no-interwiki": "\nDiri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki.",
        "userrights-nodatabase": "Waray kaaagii an Database $1 o diri ini aada ha lokal.",
-       "userrights-notallowed": "Waray nim pagtugot hin pagdugang o pagtanggal hin mga katungod han gumaramit.",
        "userrights-changeable-col": "Mga hugpo nga puydi mo labtan",
        "userrights-unchangeable-col": "Mga hugpo nga diri mo puydi labtan",
-       "userrights-removed-self": "Imo gintanggal an imo kalugaringon mga katungod. Tungod hito, diri kana makaka-access hinin nga pakli.",
        "group": "Hugpo:",
        "group-user": "Mga gumaramit",
        "group-autoconfirmed": "Mga gumaramit nga lugaring nakokonpirma",
        "right-userrights-interwiki": "Igliwat an mga katungod han gumaramit han mga gumaramit ha iba nga mga wiki",
        "right-siteadmin": "Igtrangka ngan igrangka an database",
        "right-sendemail": "Padad-i hin e-mail ngada ha iba nga mga gumaramit",
-       "right-passwordreset": "Pakit-a an mga password reset email",
        "right-deletechangetags": "Igpara an [[Special:Tags|tags]] tikang han database",
        "grant-generic": "mga katungod nga katitirok han \"$1\"",
        "grant-group-page-interaction": "Pakig-interact han mga pakli",
        "whatlinkshere-links": "← mga sumpay",
        "whatlinkshere-hideredirs": "$1 nga mga redirek",
        "whatlinkshere-hidetrans": "$1 nga mga transklusyon",
-       "whatlinkshere-hidelinks": "$1 an mga sumpay",
+       "whatlinkshere-hidelinks": "$1 nga mga sumpay",
        "whatlinkshere-hideimages": "$1 an mga sumpay han paypay",
        "whatlinkshere-filters": "Mga panara",
        "whatlinkshere-submit": "Kadto-a",
        "feedback-message": "Mensahe:",
        "feedback-subject": "Himangrawon:",
        "feedback-thanks-title": "Salamat!",
-       "searchsuggest-search": "Pamilnga",
+       "searchsuggest-search": "Bilnga ha {{SITENAME}}",
        "searchsuggest-containing": "nagsusulod. . .",
-       "api-error-badaccess-groups": "Diri ka gintutugotan pagkarga paigbaw ha dinhi nga wiki.",
        "api-error-badtoken": "Sayop ha sulod: Maraot nga token.",
-       "api-error-copyuploaddisabled": "Pagkarga paigbaw pinaagi han URL in diri mahihimo ha dinhi nga serbidor.",
-       "api-error-empty-file": "An paypay nga isinumite nimo in waray sulod.",
        "api-error-emptypage": "Naghihimo hin bag-o, diri gintutugotan an waray sulod nga mga pakli.",
-       "api-error-filename-tooshort": "An ngaran han paypay in halipot hin duro.",
-       "api-error-filetype-banned": "Diri gintutugotan ini nga klase nga paypay.",
-       "api-error-filetype-missing": "Ini nga ngaran han paypay in nawawad-an hin ekstensyon.",
-       "api-error-http": "Sayop ha sulod: Diri nakakasumpay ha serbidor.",
-       "api-error-illegal-filename": "Diri gintutugotan an ngaran-han-paypay.",
-       "api-error-mustbeloggedin": "Diri ka nakalog-in para makapagkarga-pasaka hin mga paypay.",
-       "api-error-mustbeposted": "Sayop ha sulod: Iton paalayon in nagkikinahanglan hin HTTP POST.",
-       "api-error-overwrite": "Pagsasapaw in aada nga paypay in diri gintutugotan.",
        "api-error-stashfailed": "Sayop ha sulod:  An serbidor in waray makatipig han temporaryo nga paypay.",
-       "api-error-timeout": "An serbidor in diri nabaton ha sulod han ginaasahan nga oras.",
-       "api-error-unclassified": "Nahitabo an waray kasabti nga sayop.",
-       "api-error-unknown-code": "Waray kasabti nga sayop: \"$1\".",
-       "api-error-unknown-error": "Sayop ha sulod: May-ada nagkasayop han pagkakarga paigbaw han imo paypay.",
        "api-error-unknown-warning": "Waray kasabti nga pahimatngon: \"$1\".",
        "api-error-unknownerror": "Waray kasabti nga sayop: \"$1\".",
-       "api-error-uploaddisabled": "Diri ginpapakarga paigbaw ha dinhi nga wiki.",
-       "api-error-verification-error": "Ini nga paypay in bangin naraot, o may-ada iba nga ekstensyon.",
        "duration-seconds": "$1 {{PLURAL:$1|segundo|mga segundo}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|mga minuto}}",
        "duration-hours": "$1 {{PLURAL:$1|oras|mga oras}}",
index 66e7099..55fc024 100644 (file)
        "edit_form_incomplete": "<strong>编辑表格的某些部分没有到达服务器,请检查您的编辑是否完整并重试。</strong>",
        "editing": "编辑“$1”",
        "creating": "创建“$1”",
-       "editingsection": "编辑“$1”(段落)",
-       "editingcomment": "编辑“$1”(新段落)",
+       "editingsection": "编辑“$1”(章节)",
+       "editingcomment": "编辑“$1”(新章节)",
        "editconflict": "编辑冲突:$1",
        "explainconflict": "其他用户在您开始编辑后更改了该页面。上面的文字区含有该页面当前的文字。下面的文字区显示您的更改。您必须把您的更改合并至现有文字。<strong>只有</strong>当您单击“{{int:savearticle}}”后,上面的文字区中的文字才会被保存。",
        "yourtext": "您的文字",
        "badsig": "错误的原始签名。请检查HTML标签。",
        "badsiglength": "签名过长。请不超过$1个字符。",
        "yourgender": "您希望使用什么性别称呼?",
-       "gender-unknown": "当提及您时,软件将使用性别中性的词汇(只要可能)",
+       "gender-unknown": "当提及您时,软件将尽可能使用性别中性的词法",
        "gender-male": "他",
        "gender-female": "她",
        "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
        "rcfilters-invalid-filter": "无效过滤器",
        "rcfilters-filterlist-title": "过滤器",
        "rcfilters-filterlist-noresults": "找不到过滤器",
+       "rcfilters-filtergroup-registration": "用户注册",
+       "rcfilters-filter-registered-label": "已注册",
+       "rcfilters-filter-registered-description": "登录编辑者。",
+       "rcfilters-filter-unregistered-label": "未注册",
+       "rcfilters-filter-unregistered-description": "未登录的编辑者。",
        "rcfilters-filtergroup-authorship": "编辑的作者",
        "rcfilters-filter-editsbyself-label": "您自己的编辑",
        "rcfilters-filter-editsbyself-description": "由您编辑。",
        "rcfilters-filter-editsbyother-label": "由其他人编辑",
        "rcfilters-filter-editsbyother-description": "由其他用户(而不是您)创建的编辑。",
-       "rcfilters-filtergroup-userExpLevel": "用户体验水平",
+       "rcfilters-filtergroup-userExpLevel": "体验水平(仅限注册用户)",
        "rcfilters-filter-userExpLevel-newcomer-label": "新手",
-       "rcfilters-filter-userExpLevel-newcomer-description": "非常新的编辑者:少于10次编辑和4天活跃。",
+       "rcfilters-filter-userExpLevel-newcomer-description": "少于10次编辑和4天活跃。",
        "rcfilters-filter-userExpLevel-learner-label": "初学者",
-       "rcfilters-filter-userExpLevel-learner-description": "比“新手”拥有更多活跃天数和编辑数,但少于“有经验的用户。”",
+       "rcfilters-filter-userExpLevel-learner-description": "比“新手”拥有更多活跃天数和编辑数,但少于“有经验的用户”。",
        "rcfilters-filter-userExpLevel-experienced-label": "有经验的用户",
        "rcfilters-filter-userExpLevel-experienced-description": "超过30天活跃和500次编辑。",
+       "rcfilters-filtergroup-automated": "自动化贡献者",
+       "rcfilters-filter-bots-label": "机器人",
+       "rcfilters-filter-bots-description": "由自动化工具做出的编辑。",
+       "rcfilters-filter-humans-label": "人类(不是机器人)",
+       "rcfilters-filter-humans-description": "由人类编辑者做出的编辑。",
+       "rcfilters-filtergroup-significance": "意义",
+       "rcfilters-filter-minor-label": "小编辑",
+       "rcfilters-filter-minor-description": "作者已标记为小编辑的编辑。",
+       "rcfilters-filter-major-label": "不是小编辑",
+       "rcfilters-filter-major-description": "未标记为小编辑的编辑。",
+       "rcfilters-filtergroup-changetype": "更改类型",
+       "rcfilters-filter-pageedits-label": "页面编辑",
+       "rcfilters-filter-pageedits-description": "对wiki内容、讨论、分类描述的编辑....",
+       "rcfilters-filter-newpages-label": "页面创建",
+       "rcfilters-filter-newpages-description": "做出新页面的编辑。",
+       "rcfilters-filter-categorization-label": "分类更改",
+       "rcfilters-filter-categorization-description": "从分类中添加或移除页面的记录。",
+       "rcfilters-filter-logactions-label": "记录的操作",
+       "rcfilters-filter-logactions-description": "管理操作、账户创建、页面删除、上传....",
        "rcnotefrom": "下面{{PLURAL:$5|是}}<strong>$3 $4</strong>之后的更改(最多显示<strong>$1</strong>个)。",
        "rclistfrom": "显示$3 $2之后的新更改",
        "rcshowhideminor": "$1小编辑",
        "apisandbox-sending-request": "正在发送API请求...",
        "apisandbox-loading-results": "正在接收API请求...",
        "apisandbox-results-error": "加载API查询响应时出错:$1。",
-       "apisandbox-request-params-json": "JSON参数:",
        "apisandbox-request-url-label": "请求的URL:",
        "apisandbox-request-time": "请求时间:{{PLURAL:$1|$1毫秒}}",
        "apisandbox-results-fixtoken": "改正令牌并重新提交",
        "apisandbox-continue-clear": "清除",
        "apisandbox-continue-help": "{{int:apisandbox-continue}}将[https://www.mediawiki.org/wiki/API:Query#Continuing_queries 继续]上次请求;{{int:apisandbox-continue-clear}}将清除继续相关的参数。",
        "apisandbox-param-limit": "输入<kbd>max</kbd>以使用最大限制。",
-       "apisandbox-multivalue-all-namespaces": "$1(所有名字空间)",
+       "apisandbox-multivalue-all-namespaces": "$1(所有名字空间)",
        "apisandbox-multivalue-all-values": "$1(所有值)",
        "booksources": "网络书源",
        "booksources-search-legend": "搜索图书来源",
        "seconds": "$1秒",
        "minutes": "$1分",
        "hours": "$1小时",
-       "days": "$1天",
+       "days": "{{PLURAL:$1|$1天}}",
        "weeks": "$1周",
        "months": "$1个月",
        "years": "$1年",
        "feedback-useragent": "用户代理:",
        "searchsuggest-search": "搜索{{SITENAME}}",
        "searchsuggest-containing": "含有...",
-       "api-error-autoblocked": "您的IP地址已被自动封禁,因为它曾被一位已封禁用户使用。",
-       "api-error-badaccess-groups": "您没有将文件上传到此 wiki 的权限。",
        "api-error-badtoken": "内部错误:会话无效。",
-       "api-error-blocked": "您已被封禁,不能编辑。",
-       "api-error-copyuploaddisabled": "通过URL上传的功能已被此服务器禁用。",
-       "api-error-duplicate": "在网站上已有相同内容的{{PLURAL:$1|另一个文件|另一些文件}}。",
-       "api-error-duplicate-archive": "在网站上曾有相同内容的{{PLURAL:$1|另一个文件|另一些文件}},但{{PLURAL:$1|已被}}删除。",
-       "api-error-empty-file": "您提交的文件是空的。",
        "api-error-emptypage": "不能创建没有内容的新页面。",
-       "api-error-fetchfileerror": "内部错误:获取文件时发生错误。",
-       "api-error-fileexists-forbidden": "名为$1的文件已经存在而且无法覆盖。",
-       "api-error-fileexists-shared-forbidden": "名为$1的文件已经存在于共享媒体库中而且无法覆盖。",
-       "api-error-file-too-large": "您提交的文件过大。",
-       "api-error-filename-tooshort": "文件名过短。",
-       "api-error-filetype-banned": "此类文件被禁止。",
-       "api-error-filetype-banned-type": "$1{{PLURAL:$4|不是允许的文件类型}}。允许的{{PLURAL:$3|文件类型是|文件类型有}}$2。",
-       "api-error-filetype-missing": "该文件没有扩展名。",
-       "api-error-hookaborted": "您试图进行的修改被一个扩展钩子终止。",
-       "api-error-http": "内部错误:无法连接到服务器。",
-       "api-error-illegal-filename": "文件名非法。",
-       "api-error-internal-error": "内部错误:此wiki在处理您的上传数据时出现了错误。",
-       "api-error-invalid-file-key": "内部错误:找不到临时文件。",
-       "api-error-missingparam": "内部错误:请求中缺少参数。",
-       "api-error-missingresult": "内部错误:无法确定是否复制成功。",
-       "api-error-mustbeloggedin": "您必须登录后再上传文件。",
-       "api-error-mustbeposted": "内部错误:请求需要HTTP POST",
-       "api-error-noimageinfo": "上传成功,但服务器没有向我们提供任何有关文件的信息。",
-       "api-error-nomodule": "内部错误:缺少上传模块集。",
-       "api-error-ok-but-empty": "内部错误:服务器没有响应。",
-       "api-error-overwrite": "不允许覆盖现有文件。",
-       "api-error-ratelimited": "您正在尝试在比该wiki允许时间更短的时间内上传更多文件。请等待几分钟后再试。",
-       "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”。",
-       "api-error-unknown-error": "内部错误:尝试上传文件时出错。",
+       "api-error-stashfailed": "内部错误:服务器保存临时文件失败。",
        "api-error-unknown-warning": "未知警告:“$1”。",
        "api-error-unknownerror": "未知错误:$1。",
-       "api-error-uploaddisabled": "该wiki停用上传。",
-       "api-error-verification-error": "该文件可能损坏或扩展名错误。",
-       "api-error-was-deleted": "此名称的文件曾被上传,随后被删除。",
        "duration-seconds": "$1秒",
        "duration-minutes": "$1分",
        "duration-hours": "$1小时",
        "usercssispublic": "请注意:CSS子页面不应包含机密数据,因为它们可以被其他用户查看。",
        "restrictionsfield-badip": "无效的IP地址或段:$1",
        "restrictionsfield-label": "允许的IP段:",
-       "restrictionsfield-help": "每行一个IP地址或CIDR段。要启用所有,可使用<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "restrictionsfield-help": "每行一个IP地址或CIDR段。要启用任何地址或地址段,可使用:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "修订版本$1",
        "pageid": "页面ID$1"
 }
index 8ef9be7..eaa41c2 100644 (file)
        "rcfilters-filter-editsbyself-description": "您的編輯。",
        "rcfilters-filter-editsbyother-label": "其他人的編輯",
        "rcfilters-filter-editsbyother-description": "由其他使用者而非您所作的編輯。",
-       "rcfilters-filtergroup-userExpLevel": "使用者經驗等級",
+       "rcfilters-filtergroup-userExpLevel": "經驗等級 (僅限已註冊的使用者)",
        "rcfilters-filter-userExpLevel-newcomer-label": "新手",
-       "rcfilters-filter-userExpLevel-newcomer-description": "非常新的編輯者:編輯數低於 10 次,活躍低於 4 天。",
+       "rcfilters-filter-userExpLevel-newcomer-description": "編輯數低於 10 次,活躍低於 4 天。",
        "rcfilters-filter-userExpLevel-learner-label": "初學者",
        "rcfilters-filter-userExpLevel-learner-description": "活躍的天數以及編輯數比 '新手' 多,但比 '有經驗的使用者' 少。",
        "rcfilters-filter-userExpLevel-experienced-label": "有經驗的使用者",
        "apisandbox-sending-request": "傳送 API 請求中...",
        "apisandbox-loading-results": "接收 API 結果中...",
        "apisandbox-results-error": "讀取 API 查詢回應時發生錯誤:$1。",
-       "apisandbox-request-params-json": "JSON參數:",
        "apisandbox-request-url-label": "請求 URL:",
        "apisandbox-request-time": "請求時間:{{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "更正密鑰並重新送出",
        "feedback-useragent": "使用者代理:",
        "searchsuggest-search": "搜尋 {{SITENAME}}",
        "searchsuggest-containing": "包含...",
-       "api-error-autoblocked": "您的IP位址已經被自動封禁,因為它曾經被一名已封禁的使用者使用過。",
-       "api-error-badaccess-groups": "您沒有權限在此 Wiki 上傳檔案。",
        "api-error-badtoken": "內部錯誤:密鑰錯誤。",
-       "api-error-blocked": "您已被封鎖,無法編輯。",
-       "api-error-copyuploaddisabled": "此伺服器已停用使用 URL 上傳檔案的功能。",
-       "api-error-duplicate": "在網站上已有相同內容的{{PLURAL:$1|其他檔案|其他檔案}}。",
-       "api-error-duplicate-archive": "在網站上曾有相同內容的{{PLURAL:$1|其他檔案|其他檔案}},但{{PLURAL:$1|已被}}刪除。",
-       "api-error-empty-file": "您送出的檔案是空的。",
        "api-error-emptypage": "不允許建立空白的頁面。",
-       "api-error-fetchfileerror": "內部錯誤:取得檔案時發生錯誤。",
-       "api-error-fileexists-forbidden": "名稱為 \"$1\" 的檔案已經存在,並且不能被覆寫。",
-       "api-error-fileexists-shared-forbidden": "名稱為 \"$1\" 的檔案已經存在於共用儲存庫,並且不能被覆寫。",
-       "api-error-file-too-large": "您送出的檔案太大了。",
-       "api-error-filename-tooshort": "檔案名稱過短。",
-       "api-error-filetype-banned": "此檔案類型已禁止使用。",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|不是允許的檔案類型}}。 允許的{{PLURAL:$3|檔案類型有}} $2。",
-       "api-error-filetype-missing": "此檔案名稱缺少副檔名。",
-       "api-error-hookaborted": "您嘗試進行的修改被某個擴充套件中止。",
-       "api-error-http": "內部錯誤:無法連線到伺服器。",
-       "api-error-illegal-filename": "不允許使用的檔案名稱。",
-       "api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。",
-       "api-error-invalid-file-key": "內部錯誤:於暫存儲存庫中查無檔案。",
-       "api-error-missingparam": "內部錯誤:請求中缺少參數。",
-       "api-error-missingresult": "內部錯誤:無法辨識複製是否成功。",
-       "api-error-mustbeloggedin": "您必須登入方可上傳檔案。",
-       "api-error-mustbeposted": "內部錯誤:請求需使用 HTTP POST。",
-       "api-error-noimageinfo": "已成功上傳,但伺服器未回應任何該檔案的資訊。",
-       "api-error-nomodule": "內部錯誤:缺少上傳模組集。",
-       "api-error-ok-but-empty": "內部錯誤:伺服器沒有回應。",
-       "api-error-overwrite": "不允許覆蓋已存在的檔案。",
-       "api-error-ratelimited": "您正在嘗試在比本wiki所允許時間更短的時間內,上傳更多的檔案。請稍待幾分鐘之後再試一次。",
-       "api-error-stashfailed": "內部錯誤:伺服器儲存暫存檔案失敗。",
        "api-error-publishfailed": "內部錯誤:伺服器發佈暫存檔案失敗。",
-       "api-error-stasherror": "上傳檔案至儲藏庫時發生錯誤。",
-       "api-error-stashedfilenotfound": "嘗試從儲藏庫上傳檔案時查無該檔案。",
-       "api-error-stashpathinvalid": "應該存在儲藏檔案的路徑無效。",
-       "api-error-stashfilestorage": "儲存檔案至儲藏庫時發生錯誤。",
-       "api-error-stashzerolength": "伺服器無法儲藏該檔案,因為該檔案大小為 0。",
-       "api-error-stashnotloggedin": "您必須登入以儲存檔案於上傳儲藏庫。",
-       "api-error-stashwrongowner": "您嘗試在儲藏庫存取的檔案不屬於您的。",
-       "api-error-stashnosuchfilekey": "您嘗試在儲藏庫存取的檔案金鑰不存在。",
-       "api-error-timeout": "伺服器沒有在預期的時間內回應。",
-       "api-error-unclassified": "發生不明錯誤。",
-       "api-error-unknown-code": "不明錯誤:\"$1\"。",
-       "api-error-unknown-error": "內部錯誤:嘗試上傳您的檔案時發生錯誤。",
+       "api-error-stashfailed": "內部錯誤:伺服器儲存暫存檔案失敗。",
        "api-error-unknown-warning": "不明警告:\"$1\"。",
        "api-error-unknownerror": "不明錯誤:\"$1\"。",
-       "api-error-uploaddisabled": "此 Wiki 的上傳功能已停用。",
-       "api-error-verification-error": "此檔案可能已損壞,或副檔名錯誤。",
-       "api-error-was-deleted": "與此名稱相同的檔案曾被上傳過,隨後遭到刪除。",
        "duration-seconds": "$1 秒",
        "duration-minutes": "$1 分鐘",
        "duration-hours": "$1 小時",
index 9fe2e0c..ea807fd 100644 (file)
@@ -46,7 +46,7 @@ $magicWords = [
 
 $bookstoreList = [
        'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 $datePreferences = [
index b184d94..a6fd58a 100644 (file)
@@ -215,7 +215,7 @@ $magicWords = [
 
 $bookstoreList = [
        'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 $datePreferences = [
index 29d423c..a2a7e7d 100644 (file)
@@ -146,7 +146,7 @@ $magicWords = [
 ];
 
 $bookstoreList = [
-       'Amazon.fr'    => 'http://www.amazon.fr/exec/obidos/ISBN=$1',
+       'Amazon.fr'    => 'https://www.amazon.fr/exec/obidos/ISBN=$1',
        'alapage.fr'   => 'http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&',
        'fnac.com'     => 'http://www3.fnac.com/advanced/book.do?isbn=$1',
        'chapitre.com' => 'http://www.chapitre.com/frame_rec.asp?isbn=$1',
index dd5a3af..cb26337 100644 (file)
@@ -8,6 +8,8 @@
  *
  */
 
+$fallback = 'oc';
+
 $namespaceNames = [
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Especial',
@@ -158,6 +160,14 @@ $dateFormats = [
        'ymd both' => 'H:i, Y M j',
 ];
 
+$datePreferences = [
+       'default',
+       'dmy',
+       'ymd',
+       'ISO 8601',
+];
+$defaultDateFormat = 'dmy';
+
 $bookstoreList = [
        'Catàleg Col·lectiu de les Universitats de Catalunya' => 'http://ccuc.cbuc.es/cgi-bin/vtls.web.gateway?searchtype=control+numcard&searcharg=$1',
        'Totselsllibres.com' => 'http://www.totselsllibres.com/tel/publi/busquedaAvanzadaLibros.do?ISBN=$1',
index 096eb33..2fec9fc 100644 (file)
@@ -98,8 +98,8 @@ $defaultDateFormat = 'dmy';
 $bookstoreList = [
        "AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
        "Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
-       "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1",
-       "Amazon.co.uk" => "http://www.amazon.co.uk/exec/obidos/ISBN=$1"
+       "Amazon.com" => "https://www.amazon.com/exec/obidos/ISBN=$1",
+       "Amazon.co.uk" => "https://www.amazon.co.uk/exec/obidos/ISBN=$1"
 ];
 
 $linkTrail = "/^([àáâèéêìíîïòóôûŵŷa-z]+)(.*)$/sDu";
index 760f23c..160f57d 100644 (file)
@@ -344,7 +344,7 @@ $dateFormats = [
 $capitalizeAllNouns = true;
 $bookstoreList = [
        'abebooks.de' => 'http://www.abebooks.de/servlet/BookSearchPL?ph=2&isbn=$1',
-       'amazon.de' => 'http://www.amazon.de/gp/search/field-isbn=$1',
+       'amazon.de' => 'https://www.amazon.de/gp/search/field-isbn=$1',
        'buch.de' => 'http://www.buch.de/shop/home/suche/?sswg=BUCH&sq=$1',
        'Karlsruher Virtueller Katalog (KVK)' => 'http://www.ubka.uni-karlsruhe.de/kvk.html?SB=$1',
        'Lehmanns Fachbuchhandlung' => 'http://www.lob.de/cgi-bin/work/suche?flag=new&stich1=$1'
index 99d3f64..689586b 100644 (file)
@@ -187,7 +187,7 @@ $dateFormats = [
 $bookstoreList = [
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
-       'Amazon.com' => 'http://www.amazon.com/gp/search/?field-isbn=$1'
+       'Amazon.com' => 'https://www.amazon.com/gp/search/?field-isbn=$1'
 ];
 
 /**
index ec165ab..28c69df 100644 (file)
@@ -146,7 +146,7 @@ $bookstoreList = [
        'Raamatukoi' => 'http://www.raamatukoi.ee/cgi-bin/index?valik=otsing&paring=$1',
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 $magicWords = [
index 9e233de..3e3cf80 100644 (file)
@@ -294,7 +294,7 @@ $magicWords = [
 ];
 
 $bookstoreList = [
-       'Amazon.fr'    => 'http://www.amazon.fr/exec/obidos/ISBN=$1',
+       'Amazon.fr'    => 'https://www.amazon.fr/exec/obidos/ISBN=$1',
        'alapage.fr'   => 'http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&',
        'fnac.com'     => 'http://www3.fnac.com/advanced/book.do?isbn=$1',
        'chapitre.com' => 'http://www.chapitre.com/frame_rec.asp?isbn=$1',
index 88eafdf..0ac1caf 100644 (file)
@@ -11,7 +11,7 @@
 $fallback = 'fr';
 
 $bookstoreList = [
-       'Amazon.fr'    => 'http://www.amazon.fr/exec/obidos/ISBN=$1',
+       'Amazon.fr'    => 'https://www.amazon.fr/exec/obidos/ISBN=$1',
        'alapage.fr'   => 'http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&',
        'fnac.com'     => 'http://www3.fnac.com/advanced/book.do?isbn=$1',
        'chapitre.com' => 'http://www.chapitre.com/frame_rec.asp?isbn=$1',
index 46c4080..19f8232 100644 (file)
@@ -343,5 +343,5 @@ $bookstoreList = [
        'מיתוס'          => 'http://www.mitos.co.il/',
        'iBooks'         => 'http://www.ibooks.co.il/',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
-       'Amazon.com'     => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com'     => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
index 065b4fb..9a5a809 100644 (file)
@@ -76,7 +76,7 @@ $dateFormats = [
 ];
 
 $bookstoreList = [
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 $magicWords = [
index b57c03e..2107e7d 100644 (file)
@@ -43,7 +43,7 @@ $namespaceAliases = [
 
 $bookstoreList = [
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
        'Bhinneka.com bookstore' => 'http://www.bhinneka.com/Buku/Engine/search.asp?fisbn=$1',
        'Gramedia Cyberstore (via Google)' => 'http://www.google.com/search?q=%22ISBN+:+$1%22+%22product_detail%22+site:www.gramediacyberstore.com+OR+site:www.gramediaonline.com+OR+site:www.kompas.com&hl=id',
index d33075e..66f0527 100644 (file)
@@ -55,7 +55,7 @@ $bookstoreList = [
        'Bibsys' => 'http://ask.bibsys.no/ask/action/result?cmd=&kilde=biblio&fid=isbn&term=$1&op=and&fid=bd&term=&arstall=&sortering=sortdate-&treffPrSide=50',
        'Akademika' => 'http://www.akademika.no/sok.php?ts=4&sok=$1',
        'Haugenbok' => 'http://www.haugenbok.no/resultat.cfm?st=extended&isbn=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 $namespaceNames = [
index 49ea249..10d0a83 100644 (file)
@@ -88,7 +88,7 @@ $magicWords = [
 $bookstoreList = [
        'Verteken vun leverbore Böker'  => 'http://www.buchhandel.de/sixcms/list.php?page=buchhandel_profisuche_frameset&suchfeld=isbn&suchwert=$1=0&y=0',
        'abebooks.de'                   => 'http://www.abebooks.de/servlet/BookSearchPL?ph=2&isbn=$1',
-       'Amazon.de'                     => 'http://www.amazon.de/exec/obidos/ISBN=$1',
+       'Amazon.de'                     => 'https://www.amazon.de/exec/obidos/ISBN=$1',
        'Lehmanns Fachbuchhandlung'     => 'http://www.lob.de/cgi-bin/work/suche?flag=new&stich1=$1',
 ];
 
index 2776847..7572c67 100644 (file)
@@ -96,9 +96,9 @@ $bookstoreList = [
        'Haugenbok'    => 'http://www.haugenbok.no/resultat.cfm?st=hurtig&isbn=$1',
        'Akademika'    => 'http://www.akademika.no/sok.php?isbn=$1',
        'Gnist'        => 'http://www.gnist.no/sok.php?isbn=$1',
-       'Amazon.co.uk' => 'http://www.amazon.co.uk/exec/obidos/ISBN=$1',
-       'Amazon.de'    => 'http://www.amazon.de/exec/obidos/ISBN=$1',
-       'Amazon.com'   => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.co.uk' => 'https://www.amazon.co.uk/exec/obidos/ISBN=$1',
+       'Amazon.de'    => 'https://www.amazon.de/exec/obidos/ISBN=$1',
+       'Amazon.com'   => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 $magicWords = [
index 3f84517..1d9e0e5 100644 (file)
  * @author לערי ריינהארט
  */
 
+$fallback = 'ca';
+
 $bookstoreList = [
-       'Amazon.fr' => 'http://www.amazon.fr/exec/obidos/ISBN=$1'
+       'Amazon.fr' => 'https://www.amazon.fr/exec/obidos/ISBN=$1'
 ];
 
 $namespaceNames = [
@@ -57,6 +59,8 @@ $namespaceAliases = [
        'Discussion_Imatge'    => NS_FILE_TALK,
 ];
 
+$namespaceGenderAliases = [];
+
 $specialPageAliases = [
        'Allmessages'               => [ 'Messatge_sistèma', 'Messatge_del_sistèma' ],
        'Allpages'                  => [ 'Totas_las_paginas' ],
index cb44ce9..3041abd 100644 (file)
@@ -413,7 +413,7 @@ $bookstoreList = [
        'Яндекс.Маркет' => 'http://market.yandex.ru/search.xml?text=$1',
        'ОЗОН' => 'http://www.ozon.ru/?context=advsearch_book&isbn=$1',
        'Books.Ru' => 'http://www.books.ru/shop/search?query=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 /**
index 3ee463e..8130978 100644 (file)
@@ -13,6 +13,8 @@
  * @author לערי ריינהארט
  */
 
+$fallback = 'bs, sr-el, hr';
+
 $namespaceNames = [
        NS_SPECIAL          => 'Posebno',
        NS_TALK             => 'Razgovor',
@@ -30,6 +32,23 @@ $namespaceNames = [
        NS_CATEGORY_TALK    => 'Razgovor_o_kategoriji',
 ];
 
+# Some dummy translations to prevent language fallback for now
+# @TODO: Check whether localising them is appropriate.
+$namespaceGenderAliases = [];
+$defaultDateFormat = 'dmy';
+$datePreferences = [
+       'default',
+       'dmy',
+       'ymd',
+       'ISO 8601',
+];
+$datePreferenceMigrationMap = [
+       'default',
+       'mdy',
+       'dmy',
+       'ymd'
+];
+
 $specialPageAliases = [
        'Activeusers'               => [ 'Aktivni_korisnici' ],
        'Allmessages'               => [ 'Sve_poruke' ],
index 75cf114..0399bfa 100644 (file)
@@ -177,9 +177,9 @@ $bookstoreList = [
        'Haugenbok' => 'http://www.haugenbok.no/searchresults.cfm?searchtype=simple&isbn=$1',
        'Akademika' => 'http://www.akademika.no/sok.php?isbn=$1',
        'Gnist' => 'http://www.gnist.no/sok.php?isbn=$1',
-       'Amazon.co.uk' => 'http://www.amazon.co.uk/exec/obidos/ISBN=$1',
-       'Amazon.de' => 'http://www.amazon.de/exec/obidos/ISBN=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.co.uk' => 'https://www.amazon.co.uk/exec/obidos/ISBN=$1',
+       'Amazon.de' => 'https://www.amazon.de/exec/obidos/ISBN=$1',
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 $magicWords = [
index d222639..01254e7 100644 (file)
@@ -116,7 +116,7 @@ $bookstoreList = [
        'ОЗОН' => 'http://www.ozon.ru/?context=advsearch_book&isbn=$1',
        'Books.Ru' => 'http://www.books.ru/shop/search/advanced?as%5Btype%5D=books&as%5Bname%5D=&as%5Bisbn%5D=$1&as%5Bauthor%5D=&as%5Bmaker%5D=&as%5Bcontents%5D=&as%5Binfo%5D=&as%5Bdate_after%5D=&as%5Bdate_before%5D=&as%5Bprice_less%5D=&as%5Bprice_more%5D=&as%5Bstrict%5D=%E4%E0&as%5Bsub%5D=%E8%F1%EA%E0%F2%FC&x=22&y=8',
        'Яндекс.Маркет' => 'http://market.yandex.ru/search.xml?text=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1',
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
        'Barnes & Noble' => 'http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1'
 ];
index 0c381e5..480d94f 100644 (file)
@@ -121,7 +121,7 @@ $dateFormats = [
 ];
 
 $bookstoreList = [
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+       'Amazon.com' => 'https://www.amazon.com/exec/obidos/ISBN=$1'
 ];
 
 // Russian names are kept for backwards compatibility
index 4915680..58024d2 100644 (file)
@@ -193,7 +193,7 @@ $specialPageAliases = [
 $bookstoreList = [
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
-       '亞馬遜' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
+       '亞馬遜' => 'https://www.amazon.com/exec/obidos/ISBN=$1',
        '博客來書店' => 'http://www.books.com.tw/exep/prod/booksfile.php?item=$1',
        '三民書店' => 'http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1',
        '天下書店' => 'http://www.cwbook.com.tw/search/result1.jsp?field=2&keyWord=$1',
index b7be658..7a0dbb6 100644 (file)
@@ -425,8 +425,8 @@ $dateFormats = [
 $bookstoreList = [
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
-       '亚马逊' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
-       '卓越亚马逊' => 'http://www.amazon.cn/mn/advancedSearchApp?isbn=$1',
+       '亚马逊' => 'https://www.amazon.com/exec/obidos/ISBN=$1',
+       '卓越亚马逊' => 'https://www.amazon.cn/mn/advancedSearchApp?isbn=$1',
        '当当网' => 'http://search.dangdang.com/search.aspx?key=$1',
        '博客来书店' => 'http://www.books.com.tw/exep/prod/booksfile.php?item=$1',
        '三民书店' => 'http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1',
index d3041d9..a84f2ae 100644 (file)
@@ -108,6 +108,7 @@ class GenerateJsonI18n extends Maintenance {
                if ( !is_readable( $phpfile ) ) {
                        $this->error( "Error reading $phpfile", 1 );
                }
+               $messages = null;
                include $phpfile;
                $phpfileContents = file_get_contents( $phpfile );
 
diff --git a/maintenance/manageJobs.php b/maintenance/manageJobs.php
new file mode 100644 (file)
index 0000000..9585ed8
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Maintenance script that handles managing job queue admin tasks
+ *
+ * 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
+ * @author Aaron Schulz
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script that handles managing job queue admin tasks (re-push, delete, ...)
+ *
+ * @ingroup Maintenance
+ */
+class ManageJobs extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription( 'Perform administrative tasks on a job queue' );
+               $this->addOption( 'type', 'Job type', true, true );
+               $this->addOption( 'action', 'Queue operation ("delete", "repush-abandoned")', true, true );
+       }
+
+       public function execute() {
+               $type = $this->getOption( 'type' );
+               $action = $this->getOption( 'action' );
+
+               $group = JobQueueGroup::singleton();
+               $queue = $group->get( $type );
+
+               if ( $action === 'delete' ) {
+                       $this->delete( $queue );
+               } elseif ( $action === 'repush-abandoned' ) {
+                       $this->repushAbandoned( $queue );
+               } else {
+                       $this->error( "Invalid action '$action'.", 1 );
+               }
+       }
+
+       private function delete( JobQueue $queue ) {
+               $this->output( "Queue has {$queue->getSize()} job(s); deleting...\n" );
+               $queue->delete();
+               $this->output( "Done; current size is {$queue->getSize()} job(s).\n" );
+       }
+
+       private function repushAbandoned( JobQueue $queue ) {
+               $cache = ObjectCache::getInstance( CACHE_DB );
+               $key = $cache->makeGlobalKey( 'last-job-repush', $queue->getWiki(), $queue->getType() );
+
+               $now = wfTimestampNow();
+               $lastRepushTime = $cache->get( $key );
+               if ( $lastRepushTime === false ) {
+                       $lastRepushTime = wfTimestamp( TS_MW, 1 ); // include all jobs
+               }
+
+               $this->output( "Last re-push time: $lastRepushTime; current time: $now\n" );
+
+               $count = 0;
+               $skipped = 0;
+               foreach ( $queue->getAllAbandonedJobs() as $job ) {
+                       /** @var Job $job */
+                       if ( $job->getQueuedTimestamp() < $lastRepushTime ) {
+                               ++$skipped;
+                               continue; // already re-pushed in prior round
+                       }
+
+                       $queue->push( $job );
+                       ++$count;
+
+                       if ( ( $count % $this->mBatchSize ) == 0 ) {
+                               $queue->waitForBackups();
+                       }
+               }
+
+               $cache->set( $key, $now ); // next run will ignore these jobs
+
+               $this->output( "Re-pushed $count job(s) [$skipped skipped].\n" );
+       }
+}
+
+$maintClass = "ManageJobs";
+require_once RUN_MAINTENANCE_IF_MAIN;
index 37636c8..b7f0762 100644 (file)
@@ -108,9 +108,8 @@ class RebuildTextIndex extends Maintenance {
                        );
 
                        foreach ( $res as $s ) {
+                               $title = Title::makeTitle( $s->page_namespace, $s->page_title );
                                try {
-                                       $title = Title::makeTitle( $s->page_namespace, $s->page_title );
-
                                        $rev = new Revision( $s );
                                        $content = $rev->getContent();
 
index e7a4d06..fb24a1d 100644 (file)
@@ -29,6 +29,8 @@ require_once __DIR__ . '/Maintenance.php';
  * @ingroup Maintenance
  */
 class RefreshLinks extends Maintenance {
+       const REPORTING_INTERVAL = 100;
+
        /** @var int|bool */
        protected $namespace = false;
 
@@ -43,6 +45,8 @@ class RefreshLinks extends Maintenance {
                $this->addOption( 'dfn-chunk-size', 'Maximum number of existent IDs to check per ' .
                        'query, default 100000', false, true );
                $this->addOption( 'namespace', 'Only fix pages in this namespace', false, true );
+               $this->addOption( 'category', 'Only fix pages in this category', false, true );
+               $this->addOption( 'tracking-category', 'Only fix pages in this tracking category', false, true );
                $this->addArg( 'start', 'Page_id to start from, default 1', false );
                $this->setBatchSize( 100 );
        }
@@ -61,7 +65,15 @@ class RefreshLinks extends Maintenance {
                } else {
                        $this->namespace = (int)$ns;
                }
-               if ( !$this->hasOption( 'dfn-only' ) ) {
+               if ( ( $category = $this->getOption( 'category', false ) ) !== false ) {
+                       $title = Title::makeTitleSafe( NS_CATEGORY, $category );
+                       if ( !$title ) {
+                               $this->error( "'$category' is an invalid category name!\n", true );
+                       }
+                       $this->refreshCategory( $category );
+               } elseif ( ( $category = $this->getOption( 'tracking-category', false ) ) !== false ) {
+                       $this->refreshTrackingCategory( $category );
+               } elseif ( !$this->hasOption( 'dfn-only' ) ) {
                        $new = $this->getOption( 'new-only', false );
                        $redir = $this->getOption( 'redirects-only', false );
                        $oldRedir = $this->getOption( 'old-redirects-only', false );
@@ -89,7 +101,6 @@ class RefreshLinks extends Maintenance {
        private function doRefreshLinks( $start, $newOnly = false,
                $end = null, $redirectsOnly = false, $oldRedirectsOnly = false
        ) {
-               $reportingInterval = 100;
                $dbr = $this->getDB( DB_REPLICA, [ 'vslow' ] );
 
                if ( $start === null ) {
@@ -124,7 +135,7 @@ class RefreshLinks extends Maintenance {
                        $i = 0;
 
                        foreach ( $res as $row ) {
-                               if ( !( ++$i % $reportingInterval ) ) {
+                               if ( !( ++$i % self::REPORTING_INTERVAL ) ) {
                                        $this->output( "$i\n" );
                                        wfWaitForSlaves();
                                }
@@ -145,7 +156,7 @@ class RefreshLinks extends Maintenance {
 
                        $i = 0;
                        foreach ( $res as $row ) {
-                               if ( !( ++$i % $reportingInterval ) ) {
+                               if ( !( ++$i % self::REPORTING_INTERVAL ) ) {
                                        $this->output( "$i\n" );
                                        wfWaitForSlaves();
                                }
@@ -166,7 +177,7 @@ class RefreshLinks extends Maintenance {
 
                        for ( $id = $start; $id <= $end; $id++ ) {
 
-                               if ( !( $id % $reportingInterval ) ) {
+                               if ( !( $id % self::REPORTING_INTERVAL ) ) {
                                        $this->output( "$id\n" );
                                        wfWaitForSlaves();
                                }
@@ -179,7 +190,7 @@ class RefreshLinks extends Maintenance {
 
                                for ( $id = $start; $id <= $end; $id++ ) {
 
-                                       if ( !( $id % $reportingInterval ) ) {
+                                       if ( !( $id % self::REPORTING_INTERVAL ) ) {
                                                $this->output( "$id\n" );
                                                wfWaitForSlaves();
                                        }
@@ -379,6 +390,7 @@ class RefreshLinks extends Maintenance {
         * @param string $var Field name
         * @param mixed $start First value to include or null
         * @param mixed $end Last value to include or null
+        * @return string
         */
        private static function intervalCond( IDatabase $db, $var, $start, $end ) {
                if ( $start === null && $end === null ) {
@@ -391,6 +403,87 @@ class RefreshLinks extends Maintenance {
                        return "$var BETWEEN {$db->addQuotes( $start )} AND {$db->addQuotes( $end )}";
                }
        }
+
+       /**
+        * Refershes links for pages in a tracking category
+        *
+        * @param string $category Category key
+        */
+       private function refreshTrackingCategory( $category ) {
+               $cats = $this->getPossibleCategories( $category );
+
+               if ( !$cats ) {
+                       $this->error( "Tracking category '$category' is disabled\n" );
+                       // Output to stderr but don't bail out,
+               }
+
+               foreach ( $cats as $cat ) {
+                       $this->refreshCategory( $cat );
+               }
+       }
+
+       /**
+        * Refreshes links to a category
+        *
+        * @param Title $category
+        */
+       private function refreshCategory( Title $category ) {
+               $this->output( "Refreshing pages in category '{$category->getText()}'...\n" );
+
+               $dbr = $this->getDB( DB_REPLICA );
+               $conds = [
+                       'page_id=cl_from',
+                       'cl_to' => $category->getDBkey(),
+               ];
+               if ( $this->namespace !== false ) {
+                       $conds['page_namespace'] = $this->namespace;
+               }
+
+               $i = 0;
+               $timestamp = '';
+               $lastId = 0;
+               do {
+                       $finalConds = $conds;
+                       $timestamp = $dbr->addQuotes( $timestamp );
+                       $finalConds []=
+                               "(cl_timestamp > $timestamp OR (cl_timestamp = $timestamp AND cl_from > $lastId))";
+                       $res = $dbr->select( [ 'page', 'categorylinks' ],
+                               [ 'page_id', 'cl_timestamp' ],
+                               $finalConds,
+                               __METHOD__,
+                               [
+                                       'ORDER BY' => [ 'cl_timestamp', 'cl_from' ],
+                                       'LIMIT' => $this->mBatchSize,
+                               ]
+                       );
+
+                       foreach ( $res as $row ) {
+                               if ( !( ++$i % self::REPORTING_INTERVAL ) ) {
+                                       $this->output( "$i\n" );
+                                       wfWaitForSlaves();
+                               }
+                               $lastId = $row->page_id;
+                               $timestamp = $row->cl_timestamp;
+                               self::fixLinksFromArticle( $row->page_id );
+                       }
+
+               } while ( $res->numRows() == $this->mBatchSize );
+       }
+
+       /**
+        * Returns a list of possible categories for a given tracking category key
+        *
+        * @param string $categoryKey
+        * @return Title[]
+        */
+       private function getPossibleCategories( $categoryKey ) {
+               $trackingCategories = new TrackingCategories( $this->getConfig() );
+               $cats = $trackingCategories->getTrackingCategories();
+               if ( isset( $cats[$categoryKey] ) ) {
+                       return $cats[$categoryKey]['cats'];
+               }
+               $this->error( "Unknown tracking category {$categoryKey}\n", true );
+       }
 }
 
 $maintClass = 'RefreshLinks';
index d01b07e..22f109d 100644 (file)
@@ -1276,59 +1276,18 @@ return [
                        'upload-form-label-infoform-description-tooltip',
                        'upload-form-label-usage-title',
                        'upload-form-label-usage-filename',
-                       'api-error-unknownerror',
+                       'action-upload',
+                       'apierror-mustbeloggedin',
+                       'badaccess-groups',
+                       'apierror-unknownerror',
                        'api-error-unknown-warning',
-                       'api-error-autoblocked',
-                       'api-error-blocked',
-                       'api-error-badaccess-groups',
-                       'api-error-badtoken',
-                       'api-error-copyuploaddisabled',
-                       'api-error-duplicate',
-                       'api-error-duplicate-archive',
-                       'api-error-empty-file',
-                       'api-error-emptypage',
-                       'api-error-fetchfileerror',
-                       'api-error-fileexists-forbidden',
-                       'api-error-fileexists-shared-forbidden',
-                       'api-error-file-too-large',
-                       'api-error-filename-tooshort',
-                       'api-error-filetype-banned',
-                       'api-error-filetype-banned-type',
-                       'api-error-filetype-missing',
-                       'api-error-hookaborted',
-                       'api-error-http',
-                       'api-error-illegal-filename',
-                       'api-error-internal-error',
-                       'api-error-invalid-file-key',
-                       'api-error-missingparam',
-                       'api-error-missingresult',
-                       'api-error-mustbeloggedin',
-                       'api-error-mustbeposted',
-                       'api-error-noimageinfo',
-                       'api-error-nomodule',
-                       'api-error-ok-but-empty',
-                       'api-error-overwrite',
-                       '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',
-                       'api-error-unknown-error',
-                       'api-error-uploaddisabled',
-                       'api-error-verification-error',
-                       'api-error-was-deleted',
                        'fileexists',
                        'filepageexists',
+                       'file-exists-duplicate',
+                       'file-deleted-duplicate',
                        'filename-bad-prefix',
                        'filename-thumb-name',
+                       'filewasdeleted',
                        'badfilename',
                        'protectedpagetext',
                ],
@@ -1395,13 +1354,6 @@ return [
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'mediawiki.reasonSuggest' => [
-               'scripts' => 'resources/src/mediawiki/mediawiki.reasonSuggest.js',
-               'dependencies' => [
-                       'jquery.suggestions',
-                       'mediawiki.api.messages'
-               ]
-       ],
        'mediawiki.userSuggest' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.userSuggest.js',
                'dependencies' => [
@@ -1795,7 +1747,6 @@ return [
                        'resources/src/mediawiki.rcfilters/mw.rcfilters.init.js',
                ],
                'styles' => [
-                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FiltersListWidget.less',
@@ -1804,8 +1755,11 @@ return [
                ],
                'messages' => [
                        'rcfilters-activefilters',
+                       'rcfilters-restore-default-filters',
+                       'rcfilters-clear-all-filters',
                        'rcfilters-search-placeholder',
                        'rcfilters-invalid-filter',
+                       'rcfilters-empty-filter',
                        'rcfilters-filterlist-title',
                        'rcfilters-filterlist-noresults',
                        'rcfilters-filtergroup-registration',
@@ -1848,6 +1802,7 @@ return [
                'dependencies' => [
                        'oojs-ui',
                        'mediawiki.Uri',
+                       'oojs-ui.styles.icons-moderation'
                ],
        ],
        'mediawiki.special' => [
@@ -1901,7 +1856,6 @@ return [
                        'apisandbox-sending-request',
                        'apisandbox-loading-results',
                        'apisandbox-results-error',
-                       'apisandbox-request-params-json',
                        'apisandbox-request-url-label',
                        'apisandbox-request-time',
                        'apisandbox-results-fixtoken',
index 870f605..b93d59e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:07Z
+ * Date: 2017-01-19T20:22:26Z
  */
 ( function ( OO ) {
 
@@ -41,3 +41,5 @@ OO.ui.ApexTheme.prototype.getDialogTransitionDuration = function () {
 OO.ui.theme = new OO.ui.ApexTheme();
 
 }( OO ) );
+
+//# sourceMappingURL=oojs-ui-apex.js.map
\ No newline at end of file
index 842ddfd..2bee712 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-element-hidden {
   display: none !important;
@@ -417,10 +417,10 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   color: inherit;
   display: inline-table;
   box-sizing: border-box;
-  max-width: 100%;
   padding: 0;
   white-space: normal;
   float: left;
+  width: 100%;
 }
 .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-fieldsetLayout-header > .oo-ui-labelElement-label:empty {
   display: none;
@@ -439,7 +439,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   line-height: 1.4;
 }
 .oo-ui-fieldsetLayout .oo-ui-fieldsetLayout-header {
-  width: 50em;
+  max-width: 50em;
 }
 .oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
 .oo-ui-fieldsetLayout + .oo-ui-formLayout {
index 89b2164..632c085 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-element-hidden {
   display: none !important;
@@ -558,10 +558,10 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   color: inherit;
   display: inline-table;
   box-sizing: border-box;
-  max-width: 100%;
   padding: 0;
   white-space: normal;
   float: left;
+  width: 100%;
 }
 .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-fieldsetLayout-header > .oo-ui-labelElement-label:empty {
   display: none;
@@ -580,7 +580,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   line-height: 1.4;
 }
 .oo-ui-fieldsetLayout .oo-ui-fieldsetLayout-header {
-  width: 50em;
+  max-width: 50em;
 }
 .oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
 .oo-ui-fieldsetLayout + .oo-ui-formLayout {
index 1542c4b..5dc78ab 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:07Z
+ * Date: 2017-01-19T20:22:26Z
  */
 ( function ( OO ) {
 
@@ -68,7 +68,7 @@ OO.ui.elementId = 0;
  */
 OO.ui.generateElementId = function () {
        OO.ui.elementId++;
-       return 'ooui-' + OO.ui.elementId;
+       return 'oojsui-' + OO.ui.elementId;
 };
 
 /**
@@ -10586,3 +10586,5 @@ OO.inheritClass( OO.ui.HorizontalLayout, OO.ui.Layout );
 OO.mixinClass( OO.ui.HorizontalLayout, OO.ui.mixin.GroupElement );
 
 }( OO ) );
+
+//# sourceMappingURL=oojs-ui-core.js.map
\ No newline at end of file
index 96f6ebb..32daabd 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:07Z
+ * Date: 2017-01-19T20:22:26Z
  */
 ( function ( OO ) {
 
@@ -82,3 +82,5 @@ OO.ui.MediaWikiTheme.prototype.getDialogTransitionDuration = function () {
 OO.ui.theme = new OO.ui.MediaWikiTheme();
 
 }( OO ) );
+
+//# sourceMappingURL=oojs-ui-mediawiki.js.map
\ No newline at end of file
index 1fa8c8d..d781e68 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
index 88b2c7c..9860240 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-tool.oo-ui-widget-enabled {
   -webkit-transition: background-color 100ms;
index 422704b..0b8a7f6 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:07Z
+ * Date: 2017-01-19T20:22:26Z
  */
 ( function ( OO ) {
 
@@ -2329,3 +2329,5 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
 };
 
 }( OO ) );
+
+//# sourceMappingURL=oojs-ui-toolbars.js.map
\ No newline at end of file
index 7e7d89c..ec581c1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-draggableElement-handle,
 .oo-ui-draggableElement-handle.oo-ui-widget {
index 11ebd2c..aced25b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-draggableElement-handle,
 .oo-ui-draggableElement-handle.oo-ui-widget {
index e26e203..4bf461f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:07Z
+ * Date: 2017-01-19T20:22:26Z
  */
 ( function ( OO ) {
 
@@ -4329,7 +4329,7 @@ OO.ui.CapsuleMultiselectWidget.prototype.focus = function () {
 OO.ui.CapsuleMultiSelectWidget = function OoUiCapsuleMultiSelectWidget() {
        OO.ui.warnDeprecation( 'CapsuleMultiSelectWidget is deprecated. Use the CapsuleMultiselectWidget instead.' );
        // Parent constructor
-       OO.ui.TextInputMenuSelectWidget.parent.apply( this, arguments );
+       OO.ui.CapsuleMultiSelectWidget.parent.apply( this, arguments );
 };
 
 OO.inheritClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.CapsuleMultiselectWidget );
@@ -5345,3 +5345,5 @@ OO.ui.NumberInputWidget.prototype.setDisabled = function ( disabled ) {
 };
 
 }( OO ) );
+
+//# sourceMappingURL=oojs-ui-widgets.js.map
\ No newline at end of file
index f29a03c..2fc4cc8 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
   background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
index ba47634..c643c28 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:12Z
+ * Date: 2017-01-19T20:22:32Z
  */
 .oo-ui-window {
   background: transparent;
index fc8beb2..ab83a55 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.18.4
+ * OOjs UI v0.18.4-fix (d4045dee45)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-01-18T00:07:07Z
+ * Date: 2017-01-19T20:22:26Z
  */
 ( function ( OO ) {
 
@@ -3168,7 +3168,9 @@ OO.ui.ProcessDialog.prototype.getActionWidgets = function ( actions ) {
 
        for ( i = 0, len = actions.length; i < len; i++ ) {
                config = $.extend( { framed: !OO.ui.isMobile() }, actions[ i ] );
-               if ( isMobile && ( config.flags === 'back' || config.flags.indexOf( 'back' ) !== -1 ) ) {
+               if ( isMobile &&
+                       ( config.flags === 'back' || ( Array.isArray( config.flags ) && config.flags.indexOf( 'back' ) !== -1 ) )
+               ) {
                        $.extend( config, {
                                icon: 'previous',
                                label: ''
@@ -3494,3 +3496,5 @@ OO.ui.prompt = function ( text, options ) {
 };
 
 }( OO ) );
+
+//# sourceMappingURL=oojs-ui-windows.js.map
\ No newline at end of file
index 63db0ea..5dfb68d 100644 (file)
         * @cfg {string} [group] The group this item belongs to
         * @cfg {string} [label] The label for the filter
         * @cfg {string} [description] The description of the filter
-        * @cfg {boolean} [selected] Filter is selected
+        * @cfg {boolean} [active=true] The filter is active and affecting the result
+        * @cfg {string[]} [excludes=[]] A list of filter names this filter, if
+        *  selected, makes inactive.
+        * @cfg {boolean} [default] The default state of this filter
         */
        mw.rcfilters.dm.FilterItem = function MwRcfiltersDmFilterItem( name, config ) {
                config = config || {};
                this.group = config.group || '';
                this.label = config.label || this.name;
                this.description = config.description;
+               this.default = !!config.default;
 
-               this.selected = !!config.selected;
+               this.active = config.active === undefined ? true : !!config.active;
+               this.excludes = config.excludes || [];
+               this.selected = this.default;
        };
 
        /* Initialization */
                return this.description;
        };
 
+       /**
+        * Get the default value of this filter
+        *
+        * @return {boolean} Filter default
+        */
+       mw.rcfilters.dm.FilterItem.prototype.getDefault = function () {
+               return this.default;
+       };
+
        /**
         * Get the selected state of this filter
         *
                return this.selected;
        };
 
+       /**
+        * Check if this filter is active
+        *
+        * @return {boolean} Filter is active
+        */
+       mw.rcfilters.dm.FilterItem.prototype.isActive = function () {
+               return this.active;
+       };
+
+       /**
+        * Check if this filter has a list of excluded filters
+        *
+        * @return {boolean} Filter has a list of excluded filters
+        */
+       mw.rcfilters.dm.FilterItem.prototype.hasExcludedFilters = function () {
+               return !!this.excludes.length;
+       };
+
+       /**
+        * Get this filter's list of excluded filters
+        *
+        * @return {string[]} Array of excluded filter names
+        */
+       mw.rcfilters.dm.FilterItem.prototype.getExcludedFilters = function () {
+               return this.excludes;
+       };
+
+       /**
+        * Toggle the active state of the item
+        *
+        * @param {boolean} [isActive] Filter is active
+        * @fires update
+        */
+       mw.rcfilters.dm.FilterItem.prototype.toggleActive = function ( isActive ) {
+               isActive = isActive === undefined ? !this.active : isActive;
+
+               if ( this.active !== isActive ) {
+                       this.active = isActive;
+                       this.emit( 'update' );
+               }
+       };
+
        /**
         * Toggle the selected state of the item
         *
index 3217d0d..3f7fa53 100644 (file)
                OO.EmitterList.call( this );
 
                this.groups = {};
+               this.excludedByMap = {};
+               this.defaultParams = {};
+               this.defaultFiltersEmpty = null;
 
                // Events
-               this.aggregate( { update: 'itemUpdate' } );
+               this.aggregate( { update: 'filterItemUpdate' } );
+               this.connect( this, { filterItemUpdate: 'onFilterItemUpdate' } );
        };
 
        /* Initialization */
 
        /* Methods */
 
+       /**
+        * Respond to filter item change.
+        *
+        * @param {mw.rcfilters.dm.FilterItem} item Updated filter
+        * @fires itemUpdate
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.onFilterItemUpdate = function ( item ) {
+               // Reapply the active state of filters
+               this.reapplyActiveFilters( item );
+
+               this.emit( 'itemUpdate', item );
+       };
+
+       /**
+        * Calculate the active state of the filters, based on selected filters in the group.
+        *
+        * @param {mw.rcfilters.dm.FilterItem} item Changed item
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.reapplyActiveFilters = function ( item ) {
+               var selectedItemsCount,
+                       group = item.getGroup(),
+                       model = this;
+               if (
+                       !this.groups[ group ].exclusionType ||
+                       this.groups[ group ].exclusionType === 'default'
+               ) {
+                       // Default behavior
+                       // If any parameter is selected, but:
+                       // - If there are unselected items in the group, they are inactive
+                       // - If the entire group is selected, all are inactive
+
+                       // Check what's selected in the group
+                       selectedItemsCount = this.groups[ group ].filters.filter( function ( filterItem ) {
+                               return filterItem.isSelected();
+                       } ).length;
+
+                       this.groups[ group ].filters.forEach( function ( filterItem ) {
+                               filterItem.toggleActive(
+                                       selectedItemsCount > 0 ?
+                                               // If some items are selected
+                                               (
+                                                       selectedItemsCount === model.groups[ group ].filters.length ?
+                                                       // If **all** items are selected, they're all inactive
+                                                       false :
+                                                       // If not all are selected, then the selected are active
+                                                       // and the unselected are inactive
+                                                       filterItem.isSelected()
+                                               ) :
+                                               // No item is selected, everything is active
+                                               true
+                               );
+                       } );
+               } else if ( this.groups[ group ].exclusionType === 'explicit' ) {
+                       // Explicit behavior
+                       // - Go over the list of excluded filters to change their
+                       //   active states accordingly
+
+                       // For each item in the list, see if there are other selected
+                       // filters that also exclude it. If it does, it will still be
+                       // inactive.
+
+                       item.getExcludedFilters().forEach( function ( filterName ) {
+                               var filterItem = model.getItemByName( filterName );
+
+                               // Note to reduce confusion:
+                               // - item is the filter whose state changed and should exclude the other filters
+                               //   in its list of exclusions
+                               // - filterItem is the filter that is potentially being excluded by the current item
+                               // - anotherExcludingFilter is any other filter that excludes filterItem; we must check
+                               //   if that filter is selected, because if it is, we should not touch the excluded item
+                               if (
+                                       // Check if there are any filters (other than the current one)
+                                       // that also exclude the filterName
+                                       !model.excludedByMap[ filterName ].some( function ( anotherExcludingFilterName ) {
+                                               var anotherExcludingFilter = model.getItemByName( anotherExcludingFilterName );
+
+                                               return (
+                                                       anotherExcludingFilterName !== item.getName() &&
+                                                       anotherExcludingFilter.isSelected()
+                                               );
+                                       } )
+                               ) {
+                                       // Only change the state for filters that aren't
+                                       // also affected by other excluding selected filters
+                                       filterItem.toggleActive( !item.isSelected() );
+                               }
+                       } );
+               }
+       };
+
        /**
         * Set filters and preserve a group relationship based on
         * the definition given by an object
         * @param {Object} filters Filter group definition
         */
        mw.rcfilters.dm.FiltersViewModel.prototype.initializeFilters = function ( filters ) {
-               var i, filterItem,
+               var i, filterItem, selectedFilterNames, excludedFilters,
                        model = this,
-                       items = [];
+                       items = [],
+                       addToMap = function ( excludedFilters ) {
+                               excludedFilters.forEach( function ( filterName ) {
+                                       model.excludedByMap[ filterName ] = model.excludedByMap[ filterName ] || [];
+                                       model.excludedByMap[ filterName ].push( filterItem.getName() );
+                               } );
+                       };
 
                // Reset
                this.clearItems();
                this.groups = {};
+               this.excludedByMap = {};
 
                $.each( filters, function ( group, data ) {
                        model.groups[ group ] = model.groups[ group ] || {};
                        model.groups[ group ].title = data.title;
                        model.groups[ group ].type = data.type;
                        model.groups[ group ].separator = data.separator || '|';
+                       model.groups[ group ].exclusionType = data.exclusionType || 'default';
 
+                       selectedFilterNames = [];
                        for ( i = 0; i < data.filters.length; i++ ) {
+                               excludedFilters = data.filters[ i ].excludes || [];
+
                                filterItem = new mw.rcfilters.dm.FilterItem( data.filters[ i ].name, {
                                        group: group,
                                        label: data.filters[ i ].label,
                                        description: data.filters[ i ].description,
-                                       selected: data.filters[ i ].selected
+                                       selected: data.filters[ i ].selected,
+                                       excludes: excludedFilters,
+                                       'default': data.filters[ i ].default
                                } );
 
+                               // Map filters and what excludes them
+                               addToMap( excludedFilters );
+
+                               if ( data.type === 'send_unselected_if_any' ) {
+                                       // Store the default parameter state
+                                       // For this group type, parameter values are direct
+                                       model.defaultParams[ data.filters[ i ].name ] = Number( !!data.filters[ i ].default );
+                               } else if (
+                                       data.type === 'string_options' &&
+                                       data.filters[ i ].default
+                               ) {
+                                       selectedFilterNames.push( data.filters[ i ].name );
+                               }
+
                                model.groups[ group ].filters.push( filterItem );
                                items.push( filterItem );
                        }
+
+                       if ( data.type === 'string_options' ) {
+                               // Store the default parameter group state
+                               // For this group, the parameter is group name and value is the names
+                               // of selected items
+                               model.defaultParams[ group ] = model.sanitizeStringOptionGroup( group, selectedFilterNames ).join( model.groups[ group ].separator );
+                       }
                } );
 
                this.addItems( items );
+
                this.emit( 'initialize' );
        };
 
        };
 
        /**
-        * Get the current state of the filters
+        * Get the current state of the filters.
+        *
+        * Checks whether the filter group is active. This means at least one
+        * filter is selected, but not all filters are selected.
+        *
+        * @param {string} groupName Group name
+        * @return {boolean} Filter group is active
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.isFilterGroupActive = function ( groupName ) {
+               var count = 0,
+                       filters = this.groups[ groupName ].filters;
+
+               filters.forEach( function ( filterItem ) {
+                       count += Number( filterItem.isSelected() );
+               } );
+
+               return (
+                       count > 0 &&
+                       count < filters.length
+               );
+       };
+
+       /**
+        * Update the representation of the parameters. These are the back-end
+        * parameters representing the filters, but they represent the given
+        * current state regardless of validity.
+        *
+        * This should only run after filters are already set.
+        *
+        * @param {Object} params Parameter state
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.updateParameters = function ( params ) {
+               var model = this;
+
+               $.each( params, function ( name, value ) {
+                       // Only store the parameters that exist in the system
+                       if ( model.getItemByName( name ) ) {
+                               model.parameters[ name ] = value;
+                       }
+               } );
+       };
+
+       /**
+        * Get the value of a specific parameter
+        *
+        * @param {string} name Parameter name
+        * @return {number|string} Parameter value
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getParamValue = function ( name ) {
+               return this.parameters[ name ];
+       };
+
+       /**
+        * Get the current selected state of the filters
         *
-        * @return {Object} Filters current state
+        * @return {Object} Filters selected state
         */
-       mw.rcfilters.dm.FiltersViewModel.prototype.getState = function () {
+       mw.rcfilters.dm.FiltersViewModel.prototype.getSelectedState = function () {
                var i,
                        items = this.getItems(),
                        result = {};
                return result;
        };
 
+       /**
+        * Get the current full state of the filters
+        *
+        * @return {Object} Filters full state
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getFullState = function () {
+               var i,
+                       items = this.getItems(),
+                       result = {};
+
+               for ( i = 0; i < items.length; i++ ) {
+                       result[ items[ i ].getName() ] = {
+                               selected: items[ i ].isSelected(),
+                               active: items[ i ].isActive()
+                       };
+               }
+
+               return result;
+       };
+
+       /**
+        * Get the default parameters object
+        *
+        * @return {Object} Default parameter values
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.getDefaultParams = function () {
+               return this.defaultParams;
+       };
+
+       /**
+        * Set all filter states to default values
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.setFiltersToDefaults = function () {
+               var defaultFilterStates = this.getFiltersFromParameters( this.getDefaultParams() );
+
+               this.updateFilters( defaultFilterStates );
+       };
+
        /**
         * Analyze the groups and their filters and output an object representing
         * the state of the parameters they represent.
         *
+        * @param {Object} [filterGroups] An object defining the filter groups to
+        *  translate to parameters. Its structure must follow that of this.groups
+        *  see #getFilterGroups
         * @return {Object} Parameter state object
         */
-       mw.rcfilters.dm.FiltersViewModel.prototype.getParametersFromFilters = function () {
+       mw.rcfilters.dm.FiltersViewModel.prototype.getParametersFromFilters = function ( filterGroups ) {
                var i, filterItems, anySelected, values,
                        result = {},
-                       groupItems = this.getFilterGroups();
+                       groupItems = filterGroups || this.getFilterGroups();
 
                $.each( groupItems, function ( group, data ) {
                        filterItems = data.filters;
         * Remove duplicates and make sure to only use valid
         * values.
         *
+        * @private
         * @param {string} groupName Group name
         * @param {string[]} valueArray Array of values
         * @return {string[]} Array of valid values
                return result;
        };
 
+       /**
+        * Check whether the current filter state is set to all false.
+        *
+        * @return {boolean} Current filters are all empty
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.areCurrentFiltersEmpty = function () {
+               var currFilters = this.getSelectedState();
+
+               return Object.keys( currFilters ).every( function ( filterName ) {
+                       return !currFilters[ filterName ];
+               } );
+       };
+
+       /**
+        * Check whether the default values of the filters are all false.
+        *
+        * @return {boolean} Default filters are all false
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.areDefaultFiltersEmpty = function () {
+               var defaultFilters;
+
+               if ( this.defaultFiltersEmpty !== null ) {
+                       // We only need to do this test once,
+                       // because defaults are set once per session
+                       defaultFilters = this.getFiltersFromParameters();
+                       this.defaultFiltersEmpty = Object.keys( defaultFilters ).every( function ( filterName ) {
+                               return !defaultFilters[ filterName ];
+                       } );
+               }
+
+               return this.defaultFiltersEmpty;
+       };
+
        /**
         * This is the opposite of the #getParametersFromFilters method; this goes over
-        * the parameters and translates into a selected/unselected value in the filters.
+        * the given parameters and translates into a selected/unselected value in the filters.
         *
         * @param {Object} params Parameters query object
         * @return {Object} Filter state object
                var i, filterItem,
                        groupMap = {},
                        model = this,
-                       base = this.getParametersFromFilters(),
-                       // Start with current state
-                       result = this.getState();
+                       base = this.getDefaultParams(),
+                       result = {};
 
                params = $.extend( {}, base, params );
 
                } )[ 0 ];
        };
 
+       /**
+        * Set all filters to false or empty/all
+        * This is equivalent to display all.
+        */
+       mw.rcfilters.dm.FiltersViewModel.prototype.emptyAllFilters = function () {
+               var filters = {};
+
+               this.getItems().forEach( function ( filterItem ) {
+                       filters[ filterItem.getName() ] = false;
+               } );
+
+               // Update filters
+               this.updateFilters( filters );
+       };
+
        /**
         * Toggle selected state of items by their names
         *
index ea44b8b..28d9f28 100644 (file)
@@ -6,7 +6,6 @@
         */
        mw.rcfilters.Controller = function MwRcfiltersController( model ) {
                this.model = model;
-
                // TODO: When we are ready, update the URL when a filter is updated
                // this.model.connect( this, { itemUpdate: 'updateURL' } );
        };
        mw.rcfilters.Controller.prototype.initialize = function () {
                var uri = new mw.Uri();
 
+               // Give the model a full parameter state from which to
+               // update the filters
                this.model.updateFilters(
                        // Translate the url params to filter select states
                        this.model.getFiltersFromParameters( uri.query )
                );
        };
 
+       /**
+        * Reset to default filters
+        */
+       mw.rcfilters.Controller.prototype.resetToDefaults = function () {
+               this.model.setFiltersToDefaults();
+       };
+
+       /**
+        * Empty all selected filters
+        */
+       mw.rcfilters.Controller.prototype.emptyFilters = function () {
+               this.model.emptyAllFilters();
+       };
+
        /**
         * Update the state of a filter
         *
index 34df2f5..7b29d4b 100644 (file)
@@ -24,7 +24,7 @@
                                                        description: mw.msg( 'rcfilters-filter-registered-description' )
                                                },
                                                {
-                                                       name: 'hideanon',
+                                                       name: 'hideanons',
                                                        label: mw.msg( 'rcfilters-filter-unregistered-label' ),
                                                        description: mw.msg( 'rcfilters-filter-unregistered-description' )
                                                }
                                                {
                                                        name: 'hidebots',
                                                        label: mw.msg( 'rcfilters-filter-bots-label' ),
-                                                       description: mw.msg( 'rcfilters-filter-bots-description' )
+                                                       description: mw.msg( 'rcfilters-filter-bots-description' ),
+                                                       'default': true
                                                },
                                                {
                                                        name: 'hidehumans',
                                                        label: mw.msg( 'rcfilters-filter-humans-label' ),
-                                                       description: mw.msg( 'rcfilters-filter-humans-description' )
+                                                       description: mw.msg( 'rcfilters-filter-humans-description' ),
+                                                       'default': false
                                                }
                                        ]
                                },
                                                {
                                                        name: 'hidepageedits',
                                                        label: mw.msg( 'rcfilters-filter-pageedits-label' ),
-                                                       description: mw.msg( 'rcfilters-filter-pageedits-description' )
+                                                       description: mw.msg( 'rcfilters-filter-pageedits-description' ),
+                                                       'default': false
                                                },
                                                {
                                                        name: 'hidenewpages',
                                                        label: mw.msg( 'rcfilters-filter-newpages-label' ),
-                                                       description: mw.msg( 'rcfilters-filter-newpages-description' )
+                                                       description: mw.msg( 'rcfilters-filter-newpages-description' ),
+                                                       'default': false
                                                },
                                                {
                                                        name: 'hidecategorization',
                                                        label: mw.msg( 'rcfilters-filter-categorization-label' ),
-                                                       description: mw.msg( 'rcfilters-filter-categorization-description' )
+                                                       description: mw.msg( 'rcfilters-filter-categorization-description' ),
+                                                       'default': true
                                                },
                                                {
                                                        name: 'hidelog',
                                                        label: mw.msg( 'rcfilters-filter-logactions-label' ),
-                                                       description: mw.msg( 'rcfilters-filter-logactions-description' )
+                                                       description: mw.msg( 'rcfilters-filter-logactions-description' ),
+                                                       'default': false
                                                }
                                        ]
                                }
                        // Initialize values
                        controller.initialize();
 
+                       // HACK: Remove old-style filter links for filters handled by the widget
+                       // Ideally the widget would handle all filters and we'd just remove .rcshowhide entirely
+                       $( '.rcshowhide' ).children().each( function () {
+                               // HACK: Interpret the class name to get the filter name
+                               // This should really be set as a data attribute
+                               var i,
+                                       name = null,
+                                       // Some of the older browsers we support don't have .classList,
+                                       // so we have to interpret the class attribute manually.
+                                       classes = this.getAttribute( 'class' ).split( ' ' );
+                               for ( i = 0; i < classes.length; i++ ) {
+                                       if ( classes[ i ].substr( 0, 'rcshow'.length ) === 'rcshow' ) {
+                                               name = classes[ i ].substr( 'rcshow'.length );
+                                               break;
+                                       }
+                               }
+                               if ( name === null ) {
+                                       return;
+                               }
+                               if ( name === 'hidemine' ) {
+                                       // HACK: the span for hidemyself is called hidemine
+                                       name = 'hidemyself';
+                               }
+                               // This span corresponds to a filter that's in our model, so remove it
+                               if ( model.getItemByName( name ) ) {
+                                       // HACK: Remove the text node after the span.
+                                       // If there isn't one, we're at the end, so remove the text node before the span.
+                                       // This would be unnecessary if we added separators with CSS.
+                                       if ( this.nextSibling && this.nextSibling.nodeType === Node.TEXT_NODE ) {
+                                               this.parentNode.removeChild( this.nextSibling );
+                                       } else if ( this.previousSibling && this.previousSibling.nodeType === Node.TEXT_NODE ) {
+                                               this.parentNode.removeChild( this.previousSibling );
+                                       }
+                                       // Remove the span itself
+                                       this.parentNode.removeChild( this );
+                               }
+                       } );
+
                        $( '.rcoptions form' ).submit( function () {
                                var $form = $( this );
 
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less
deleted file mode 100644 (file)
index 7f71c0c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-.rcshowhidemine {
-       // HACK: Hide this filter since it already appears in
-       // the new filter drop-down.
-       display: none;
-}
index 4e55add..2ff731c 100644 (file)
@@ -4,6 +4,31 @@
                color: #54595d;
        }
 
+       &-item-inactive {
+               opacity: 0.5;
+       }
+
+       &-emptyFilters {
+               color: #72777d;
+       }
+
+       &-table {
+               display: table;
+               width: 100%;
+       }
+
+       &-row {
+               display: table-row;
+       }
+
+       &-cell {
+               display: table-cell;
+
+               &:last-child {
+                       text-align: right;
+               }
+       }
+
        .oo-ui-capsuleItemWidget {
                color: #222;
                background-color: #fff;
index 70982d4..3723916 100644 (file)
@@ -8,6 +8,12 @@
                color: #555a5d;
        }
 
+       &-active {
+               .mw-rcfilters-ui-filterGroupWidget-title {
+                       font-weight: bold;
+               }
+       }
+
        &-invalid-notice {
                padding: 0.5em;
                font-style: italic;
index ad0b816..912e75c 100644 (file)
@@ -15,4 +15,8 @@
        .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline {
                margin-bottom: 0 !important;
        }
+
+       &-inactive {
+               opacity: 0.5;
+       }
 }
index a610e8f..f138d7e 100644 (file)
@@ -17,7 +17,7 @@
        &-popup {
                // We have to override OOUI's definition, which is set
                // on the inline style of the popup
-               margin-top: 2em !important;
+               margin-top: 2.4em !important;
                max-width: 650px;
        }
 
index db21542..c498ce9 100644 (file)
@@ -5,15 +5,19 @@
         * @extends OO.ui.CapsuleMultiselectWidget
         *
         * @constructor
+        * @param {mw.rcfilters.Controller} controller RCFilters controller
+        * @param {mw.rcfilters.dm.FiltersViewModel} model RCFilters view model
         * @param {OO.ui.InputWidget} filterInput A filter input that focuses the capsule widget
         * @param {Object} config Configuration object
         */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget = function MwRcfiltersUiFilterCapsuleMultiselectWidget( filterInput, config ) {
+       mw.rcfilters.ui.FilterCapsuleMultiselectWidget = function MwRcfiltersUiFilterCapsuleMultiselectWidget( controller, model, filterInput, config ) {
                // Parent
                mw.rcfilters.ui.FilterCapsuleMultiselectWidget.parent.call( this, $.extend( {
                        $autoCloseIgnore: filterInput.$element
                }, config ) );
 
+               this.controller = controller;
+               this.model = model;
                this.filterInput = filterInput;
 
                this.$content.prepend(
                                .text( mw.msg( 'rcfilters-activefilters' ) )
                );
 
+               this.resetButton = new OO.ui.ButtonWidget( {
+                       icon: 'trash',
+                       framed: false,
+                       title: mw.msg( 'rcfilters-clear-all-filters' ),
+                       classes: [ 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-resetButton' ]
+               } );
+
+               this.emptyFilterMessage = new OO.ui.LabelWidget( {
+                       label: mw.msg( 'rcfilters-empty-filter' ),
+                       classes: [ 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-emptyFilters' ]
+               } );
+
                // Events
+               this.resetButton.connect( this, { click: 'onResetButtonClick' } );
+               this.model.connect( this, { itemUpdate: 'onModelItemUpdate' } );
                // Add the filterInput as trigger
                this.filterInput.$input
                        .on( 'focus', this.focus.bind( this ) );
 
+               // Initialize
+               this.$content.append( this.emptyFilterMessage.$element );
+               this.$handle
+                       .append(
+                               // The content and button should appear side by side regardless of how
+                               // wide the button is; the button also changes its width depending
+                               // on language and its state, so the safest way to present both side
+                               // by side is with a table layout
+                               $( '<div>' )
+                                       .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-table' )
+                                       .append(
+                                               $( '<div>' )
+                                                       .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-row' )
+                                                       .append(
+                                                               $( '<div>' )
+                                                                       .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-content' )
+                                                                       .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell' )
+                                                                       .append( this.$content ),
+                                                               $( '<div>' )
+                                                                       .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell' )
+                                                                       .append( this.resetButton.$element )
+                                                       )
+                                       )
+                       );
+
                this.$element
                        .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget' );
+
+               this.reevaluateResetRestoreState();
        };
 
        /* Initialization */
 
        /* Methods */
 
+       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onModelItemUpdate = function () {
+               // Re-evaluate reset state
+               this.reevaluateResetRestoreState();
+       };
+
+       /**
+        * Respond to click event on the reset button
+        */
+       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onResetButtonClick = function () {
+               if ( this.model.areCurrentFiltersEmpty() ) {
+                       // Reset to default filters
+                       this.controller.resetToDefaults();
+               } else {
+                       // Reset to have no filters
+                       this.controller.emptyFilters();
+               }
+       };
+
+       /**
+        * Reevaluate the restore state for the widget between setting to defaults and clearing all filters
+        */
+       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.reevaluateResetRestoreState = function () {
+               var defaultsAreEmpty = this.model.areDefaultFiltersEmpty(),
+                       currFiltersAreEmpty = this.model.areCurrentFiltersEmpty(),
+                       hideResetButton = currFiltersAreEmpty && defaultsAreEmpty;
+
+               this.resetButton.setIcon(
+                       currFiltersAreEmpty ? 'history' : 'trash'
+               );
+
+               this.resetButton.setLabel(
+                       currFiltersAreEmpty ? mw.msg( 'rcfilters-restore-default-filters' ) : ''
+               );
+
+               this.resetButton.toggle( !hideResetButton );
+               this.emptyFilterMessage.toggle( currFiltersAreEmpty );
+       };
+
        /**
         * @inheritdoc
         */
index 92ae4d1..2723258 100644 (file)
                return this.name;
        };
 
+       /**
+        * Toggle the active state of this group
+        *
+        * @param {boolean} isActive The group is active
+        */
+       mw.rcfilters.ui.FilterGroupWidget.prototype.toggleActiveState = function ( isActive ) {
+               this.$element.toggleClass( 'mw-rcfilters-ui-filterGroupWidget-active', isActive );
+       };
+
 }( mediaWiki, jQuery ) );
index b77df3b..f353051 100644 (file)
         */
        mw.rcfilters.ui.FilterItemWidget.prototype.onModelUpdate = function () {
                this.checkboxWidget.setSelected( this.model.isSelected() );
+
+               this.$element.toggleClass(
+                       'mw-rcfilters-ui-filterItemWidget-inactive',
+                       !this.model.isActive()
+               );
        };
 
        /**
index 3fcfc47..34cc240 100644 (file)
@@ -37,7 +37,7 @@
                        placeholder: mw.msg( 'rcfilters-search-placeholder' )
                } );
 
-               this.capsule = new mw.rcfilters.ui.FilterCapsuleMultiselectWidget( this.textInput, {
+               this.capsule = new mw.rcfilters.ui.FilterCapsuleMultiselectWidget( controller, this.model, this.textInput, {
                        popup: {
                                $content: this.filterPopup.$element,
                                classes: [ 'mw-rcfilters-ui-filterWrapperWidget-popup' ]
@@ -99,6 +99,7 @@
         */
        mw.rcfilters.ui.FilterWrapperWidget.prototype.onModelInitialize = function () {
                var items,
+                       wrapper = this,
                        filters = this.model.getItems();
 
                // Reset
                } );
 
                this.capsule.getMenu().addItems( items );
+
+               // Add defaults to capsule. We have to do this
+               // after we added to the capsule menu, since that's
+               // how the capsule multiselect widget knows which
+               // object to add
+               filters.forEach( function ( filterItem ) {
+                       if ( filterItem.isSelected() ) {
+                               wrapper.addCapsuleItemFromName( filterItem.getName() );
+                       }
+               } );
        };
 
        /**
         * @param {mw.rcfilters.dm.FilterItem} item Filter item that was updated
         */
        mw.rcfilters.ui.FilterWrapperWidget.prototype.onModelItemUpdate = function ( item ) {
+               var widget = this;
+
                if ( item.isSelected() ) {
-                       this.capsule.addItemsFromData( [ item.getName() ] );
+                       this.addCapsuleItemFromName( item.getName() );
                } else {
                        this.capsule.removeItemsFromData( [ item.getName() ] );
                }
+
+               // Toggle the active state of the group
+               this.filterPopup.getItems().forEach( function ( groupWidget ) {
+                       if ( groupWidget.getName() === item.getGroup() ) {
+                               groupWidget.toggleActiveState( widget.model.isFilterGroupActive( groupWidget.getName() ) );
+                       }
+               } );
+       };
+
+       /**
+        * Add a capsule item by its filter name
+        *
+        * @param {string} itemName Filter name
+        */
+       mw.rcfilters.ui.FilterWrapperWidget.prototype.addCapsuleItemFromName = function ( itemName ) {
+               var item = this.model.getItemByName( itemName );
+
+               this.capsule.addItemsFromData( [ itemName ] );
+
+               // Deal with active/inactive capsule filter items
+               this.capsule.getItemFromData( itemName ).$element
+                       .toggleClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-item-inactive', !item.isActive() );
        };
 }( mediaWiki ) );
index a62ef2e..87e209e 100644 (file)
@@ -123,7 +123,6 @@ table.toc td {
 /* Images */
 /* @noflip */div.floatright, table.floatright {
        margin: 0 0 .5em .5em;
-       border: 0;
 }
 
 div.floatright p {
@@ -132,7 +131,6 @@ div.floatright p {
 
 /* @noflip */div.floatleft, table.floatleft {
        margin: 0 .5em .5em 0;
-       border: 0;
 }
 
 div.floatleft p {
index 707a579..99f6c13 100644 (file)
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator.mw-apisandbox-clickable-indicator {
        cursor: pointer;
 }
-
-.mw-apisandbox-textInputCode .oo-ui-inputWidget-input {
-       font-family: monospace, 'Courier';
-       font-size: 0.8125em;
-       -moz-tab-size: 4;
-       -o-tab-size: 4;
-       tab-size: 4;
-}
index fdb54cb..e9922f8 100644 (file)
                        }
 
                        $.when.apply( $, deferreds ).done( function () {
-                               var jsonInput;
-
                                if ( $.inArray( false, arguments ) !== -1 ) {
                                        windowManager.openWindow( 'errorAlert', {
                                                title: Util.parseMsg( 'apisandbox-submit-invalid-fields-title' ),
                                                                label: Util.parseMsg( 'apisandbox-request-url-label' )
                                                        }
                                                ).$element,
-                                               new OO.ui.FieldLayout(
-                                                       jsonInput = new OO.ui.TextInputWidget( {
-                                                               classes: [ 'mw-apisandbox-textInputCode' ],
-                                                               readOnly: true,
-                                                               multiline: true,
-                                                               autosize: true,
-                                                               maxRows: 6,
-                                                               value: JSON.stringify( displayParams, null, '\t' )
-                                                       } ), {
-                                                               label: Util.parseMsg( 'apisandbox-request-params-json' )
-                                                       }
-                                               ).$element,
                                                $result
                                        );
                                ApiSandbox.updateUI();
                                booklet.setPage( '|results|' );
 
-                               // Resize the multiline input once visible
-                               jsonInput.adjustSize();
-
                                location.href = oldhash = '#' + query;
 
                                api.post( params, {
index 069fbbf..4930c4f 100644 (file)
@@ -26,7 +26,7 @@
                 * Any warnings returned by the API, including warnings about invalid option names or values,
                 * are ignored. However, do not rely on this behavior.
                 *
-                * If necessary, the options will be saved using several parallel API requests. Only one promise
+                * If necessary, the options will be saved using several sequential API requests. Only one promise
                 * is always returned that will be resolved when all requests complete.
                 *
                 * @param {Object} options Options as a `{ name: value, … }` object
@@ -35,7 +35,7 @@
                saveOptions: function ( options ) {
                        var name, value, bundleable,
                                grouped = [],
-                               deferreds = [];
+                               promise = $.Deferred().resolve();
 
                        for ( name in options ) {
                                value = options[ name ] === null ? null : String( options[ name ] );
                                        }
                                } else {
                                        if ( value !== null ) {
-                                               deferreds.push( this.postWithToken( 'csrf', {
-                                                       formatversion: 2,
-                                                       action: 'options',
-                                                       optionname: name,
-                                                       optionvalue: value
-                                               } ) );
+                                               promise = promise.then( function ( name, value ) {
+                                                       return this.postWithToken( 'csrf', {
+                                                               formatversion: 2,
+                                                               action: 'options',
+                                                               optionname: name,
+                                                               optionvalue: value
+                                                       } );
+                                               }.bind( this, name, value ) );
                                        } else {
                                                // Omitting value resets the option
-                                               deferreds.push( this.postWithToken( 'csrf', {
-                                                       formatversion: 2,
-                                                       action: 'options',
-                                                       optionname: name
-                                               } ) );
+                                               promise = promise.then( function ( name ) {
+                                                       return this.postWithToken( 'csrf', {
+                                                               formatversion: 2,
+                                                               action: 'options',
+                                                               optionname: name
+                                                       } );
+                                               }.bind( this, name ) );
                                        }
                                }
                        }
 
                        if ( grouped.length ) {
-                               deferreds.push( this.postWithToken( 'csrf', {
-                                       formatversion: 2,
-                                       action: 'options',
-                                       change: grouped
-                               } ) );
+                               promise = promise.then( function () {
+                                       return this.postWithToken( 'csrf', {
+                                               formatversion: 2,
+                                               action: 'options',
+                                               change: grouped
+                                       } );
+                               }.bind( this ) );
                        }
 
-                       return $.when.apply( $, deferreds );
+                       return promise;
                }
 
        } );
index 543ece8..f2b6f5f 100644 (file)
         * @return {mw.Upload}
         */
        mw.ForeignStructuredUpload.BookletLayout.prototype.createUpload = function () {
-               return new mw.ForeignStructuredUpload( this.target );
+               return new mw.ForeignStructuredUpload( this.target, {
+                       parameters: {
+                               errorformat: 'html',
+                               errorlang: mw.config.get( 'wgUserLanguage' ),
+                               errorsuselocal: 1,
+                               formatversion: 2
+                       }
+               } );
        };
 
        /* Form renderers */
index f736036..172cac2 100644 (file)
                                        function ( userInfo ) {
                                                if ( userInfo.rights.indexOf( 'upload' ) === -1 ) {
                                                        if ( mw.user.isAnon() ) {
-                                                               booklet.getPage( 'upload' ).$element.msg( 'api-error-mustbeloggedin' );
+                                                               booklet.getPage( 'upload' ).$element.msg( 'apierror-mustbeloggedin', mw.msg( 'action-upload' ) );
                                                        } else {
-                                                               booklet.getPage( 'upload' ).$element.msg( 'api-error-badaccess-groups' );
+                                                               booklet.getPage( 'upload' ).$element.msg( 'apierror-permissiondenied', mw.msg( 'action-upload' ) );
                                                        }
                                                }
                                                return $.Deferred().resolve();
         * @return {mw.Upload} Upload model
         */
        mw.Upload.BookletLayout.prototype.createUpload = function () {
-               return new mw.Upload();
+               return new mw.Upload( {
+                       parameters: {
+                               errorformat: 'html',
+                               errorlang: mw.config.get( 'wgUserLanguage' ),
+                               errorsuselocal: 1,
+                               formatversion: 2
+                       }
+               } );
        };
 
        /* Uploading */
         * @return {jQuery.Promise} A Promise that will be resolved with an OO.ui.Error.
         */
        mw.Upload.BookletLayout.prototype.getErrorMessageForStateDetails = function () {
-               var message,
-                       state = this.upload.getState(),
+               var state = this.upload.getState(),
                        stateDetails = this.upload.getStateDetails(),
-                       error = stateDetails.error,
-                       warnings = stateDetails.upload && stateDetails.upload.warnings;
+                       error = stateDetails.errors ? stateDetails.errors[ 0 ] : false,
+                       warnings = stateDetails.upload && stateDetails.upload.warnings,
+                       $ul = $( '<ul>' );
 
                if ( state === mw.Upload.State.ERROR ) {
                        if ( !error ) {
                                // If there's an 'exception' key, this might be a timeout, or other connection problem
                                return $.Deferred().resolve( new OO.ui.Error(
-                                       $( '<p>' ).msg( 'api-error-unknownerror', JSON.stringify( stateDetails ) ),
+                                       $( '<p>' ).msg( 'apierror-unknownerror', JSON.stringify( stateDetails ) ),
                                        { recoverable: false }
                                ) );
                        }
 
-                       // Errors in this format are produced by TitleBlacklist and AbuseFilter. Perhaps other
-                       // extensions will follow this format in the future.
-                       if ( error.message ) {
-                               return this.upload.getApi()
-                                       .then( function ( api ) {
-                                               // 'amenableparser' will expand templates and parser functions server-side.
-                                               // We still do the rest of wikitext parsing here (through jqueryMsg).
-                                               return api.loadMessagesIfMissing( [ error.message.key ], { amenableparser: true } )
-                                                       .then( function () {
-                                                               if ( !mw.message( error.message.key ).exists() ) {
-                                                                       return $.Deferred().reject();
-                                                               }
-                                                               return new OO.ui.Error(
-                                                                       $( '<p>' ).msg( error.message.key, error.message.params || [] ),
-                                                                       { recoverable: false }
-                                                               );
-                                                       } );
-                                       } )
-                                       .then( null, function () {
-                                               // We failed when loading the error message, or it doesn't actually exist, fall back
-                                               return $.Deferred().resolve( new OO.ui.Error(
-                                                       $( '<p>' ).msg( 'api-error-unknownerror', JSON.stringify( stateDetails ) ),
-                                                       { recoverable: false }
-                                               ) );
-                                       } );
-                       }
-
-                       if ( error.code === 'protectedpage' ) {
-                               message = mw.message( 'protectedpagetext' );
-                       } else {
-                               message = mw.message( 'api-error-' + error.code );
-                               if ( !message.exists() ) {
-                                       message = mw.message( 'api-error-unknownerror', JSON.stringify( stateDetails ) );
-                               }
-                       }
                        return $.Deferred().resolve( new OO.ui.Error(
-                               $( '<p>' ).append( message.parseDom() ),
+                               $( '<p>' ).html( error.html ),
                                { recoverable: false }
                        ) );
                }
                        // We could get more than one of these errors, these are in order
                        // of importance. For example fixing the thumbnail like file name
                        // won't help the fact that the file already exists.
-                       if ( warnings.stashfailed !== undefined ) {
-                               return $.Deferred().resolve( new OO.ui.Error(
-                                       $( '<p>' ).msg( 'api-error-stashfailed' ),
-                                       { recoverable: false }
-                               ) );
-                       } else if ( warnings.exists !== undefined ) {
+                       if ( warnings.exists !== undefined ) {
                                return $.Deferred().resolve( new OO.ui.Error(
                                        $( '<p>' ).msg( 'fileexists', 'File:' + warnings.exists ),
                                        { recoverable: false }
                                        { recoverable: false }
                                ) );
                        } else if ( warnings.duplicate !== undefined ) {
+                               $.each( warnings.duplicate, function ( i, filename ) {
+                                       var $a = $( '<a>' ).text( filename ),
+                                               href = mw.Title.makeTitle( mw.config.get( 'wgNamespaceIds' ).file, filename ).getUrl( {} );
+
+                                       $a.attr( { href: href, target: '_blank' } );
+                                       $ul.append( $( '<li>' ).append( $a ) );
+                               } );
+
                                return $.Deferred().resolve( new OO.ui.Error(
-                                       $( '<p>' ).msg( 'api-error-duplicate', warnings.duplicate.length ),
+                                       $( '<p>' ).msg( 'file-exists-duplicate', warnings.duplicate.length ).append( $ul ),
                                        { recoverable: false }
                                ) );
                        } else if ( warnings[ 'thumb-name' ] !== undefined ) {
                                ) );
                        } else if ( warnings[ 'duplicate-archive' ] !== undefined ) {
                                return $.Deferred().resolve( new OO.ui.Error(
-                                       $( '<p>' ).msg( 'api-error-duplicate-archive', 1 ),
+                                       $( '<p>' ).msg( 'file-deleted-duplicate', 'File:' + warnings[ 'duplicate-archive' ] ),
                                        { recoverable: false }
                                ) );
                        } else if ( warnings[ 'was-deleted' ] !== undefined ) {
                                return $.Deferred().resolve( new OO.ui.Error(
-                                       $( '<p>' ).msg( 'api-error-was-deleted' ),
+                                       $( '<p>' ).msg( 'filewasdeleted', 'File:' + warnings[ 'was-deleted' ] ),
                                        { recoverable: false }
                                ) );
                        } else if ( warnings.badfilename !== undefined ) {
index 7a3fb0a..4849f5a 100644 (file)
@@ -71,7 +71,7 @@
                $notificationContent.appendTo( $notification );
 
                // Private state parameters, meant for internal use only
-               // autoHideSeconds: Number of seconds to wait before auto-hiding notifications.
+               // autoHideSeconds: String alias for number of seconds for timeout of auto-hiding notifications.
                // isOpen: Set to true after .start() is called to avoid double calls.
                //         Set back to false after .close() to avoid duplicating the close animation.
                // isPaused: false after .resume(), true after .pause(). Avoids duplicating or breaking the hide timeouts.
@@ -80,8 +80,9 @@
                //          to stop replacement of a tagged notification with another notification using the same message.
                // options: The options passed to the notification with a little sanitization. Used by various methods.
                // $notification: jQuery object containing the notification DOM node.
-               // Set hide delay
-               this.autoHideSeconds = options.autoHideSeconds;
+               this.autoHideSeconds = options.autoHideSeconds &&
+                       notification.autoHideSeconds[ options.autoHideSeconds ] ||
+                       notification.autoHideSeconds.short;
                this.isOpen = false;
                this.isPaused = true;
                this.message = message;
                 *   be hidden after shown. Or if it should persist.
                 *
                 * - autoHideSeconds:
-                *   Number of seconds to wait before auto-hiding notifications.
+                *   Key to #autoHideSeconds for number of seconds for timeout of auto-hide
+                *   notifications.
                 *
                 * - tag:
                 *   An optional string. When a notification is tagged only one message
                 */
                defaults: {
                        autoHide: true,
-                       autoHideSeconds: 5,
+                       autoHideSeconds: 'short',
                        tag: false,
                        title: undefined,
                        type: false
                },
 
+               /**
+                * @private
+                * @property {Object}
+                */
+               autoHideSeconds: {
+                       'short': 5,
+                       'long': 30
+               },
+
                /**
                 * @property {number}
-                * Maximum number of notifications to count down auto-hide timers for.
-                * Only the first #autoHideLimit notifications being displayed will
-                * auto-hide. Any notifications further down in the list will only start
-                * counting down to auto-hide after the first few messages have closed.
+                * Maximum number of simultaneous notifications to start auto-hide timers for.
+                * Only this number of notifications being displayed will be auto-hidden at one time.
+                * Any additional notifications in the list will only start counting their timeout for
+                * auto-hiding after the previous messages have been closed.
                 *
-                * This basically represents the number of notifications the user should
-                * be able to process in #autoHideSeconds time.
+                * This basically represents the minimal number of notifications the user should
+                * be able to process during the {@link #defaults default} #autoHideSeconds time.
                 */
                autoHideLimit: 3
        };
diff --git a/resources/src/mediawiki/mediawiki.reasonSuggest.js b/resources/src/mediawiki/mediawiki.reasonSuggest.js
deleted file mode 100644 (file)
index 71efdb0..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*!
-* Add autocomplete suggestions for action forms reasons.
-*/
-( function ( mw, $ ) {
-       $( function () {
-               var reasons = mw.config.get( 'reasons' );
-
-               // Add relevant suggestion
-               $( '#mwProtect-reason, #wpReason, #mw-input-wpReason-other' ).suggestions( {
-                       fetch: function () {
-                               var $this = $( this ), relevantSuggestions;
-                               relevantSuggestions = $.grep( reasons, function ( reason ) {
-                                       return ( reason.toLowerCase().indexOf( $this.val().toLowerCase() ) > -1 );
-                               } );
-                               $this.suggestions( 'suggestions', relevantSuggestions );
-                       },
-                       highlightInput: true
-               } );
-       } );
-}( mediaWiki, jQuery ) );
index c18f087..8922234 100644 (file)
@@ -11,11 +11,11 @@ Feature: Log in
 
   Scenario: Log in without entering credentials
     When I log in without entering credentials
-    Then error box should be visible
+    Then error message should be displayed for username
 
   Scenario: Log in without entering password
     When I log in without entering password
-    Then error box should be visible
+    Then error message should be displayed for password
 
   Scenario: Log in with incorrect username
     When I log in with incorrect username
index 9b35e99..14a2d76 100644 (file)
@@ -30,6 +30,14 @@ Then(/^error box should not be visible$/) do
   expect(on(LoginPage).error_message_element).not_to exist
 end
 
+Then(/^error message should be displayed for username$/) do
+  expect(on(LoginPage).username_error_element).to exist
+end
+
+Then(/^error message should be displayed for password$/) do
+  expect(on(LoginPage).password_error_element).to exist
+end
+
 Then(/^feedback should be (.+)$/) do |feedback|
   on(LoginPage) do |page|
     page.feedback_element.when_present.click
index 20e2744..de12aee 100644 (file)
@@ -4,5 +4,5 @@ class CreateAccountPage
   page_url '<%=params[:page_title]%>'
 
   button(:create_account, id: 'wpCreateaccount')
-  element(:error_message, css: 'div#userloginForm div.error')
+  element(:error_message, css: 'input#wpName2:required:invalid')
 end
index 4727318..c119b38 100644 (file)
@@ -10,10 +10,12 @@ class LoginPage
   button(:login, id: 'wpLoginAttempt')
   li(:logout, id: 'pt-logout')
   text_field(:password, id: 'wpPassword1')
+  element(:password_error, css: 'input#wpPassword1:required:invalid')
   a(:password_strength, text: 'password strength')
   a(:phishing, text: 'phishing')
   text_field(:username, id: 'wpName1')
   a(:username_displayed, title: /Your user page/)
+  element(:username_error, css: 'input#wpName1:required:invalid')
 
   def logged_in_as_element
     @browser.div(id: 'mw-content-text').p.b
index 281e1df..97e24b6 100644 (file)
@@ -974,7 +974,10 @@ class ParserTestRunner {
                        'wgEnableUploads' => self::getOptionValue( 'wgEnableUploads', $opts, true ),
                        'wgLanguageCode' => $langCode,
                        'wgRawHtml' => self::getOptionValue( 'wgRawHtml', $opts, false ),
-                       'wgNamespacesWithSubpages' => [ 0 => isset( $opts['subpage'] ) ],
+                       'wgNamespacesWithSubpages' => [
+                               0 => isset( $opts['subpage'] ),
+                               2 => isset( $opts['subpage'] ),
+                       ],
                        'wgMaxTocLevel' => $maxtoclevel,
                        'wgAllowExternalImages' => self::getOptionValue( 'wgAllowExternalImages', $opts, true ),
                        'wgThumbLimits' => [ self::getOptionValue( 'thumbsize', $opts, 180 ) ],
index 3853a12..1563525 100644 (file)
@@ -933,6 +933,7 @@ Italics and bold: 5-quote opening sequence: (5,6)
 ###
 ### multiple quote sequences in a line
 ###
+
 !! test
 Italics and bold: multiple quote sequences: (2,4,2)
 !! options
@@ -942,8 +943,7 @@ parsoid=wt2html
 !! html/*
 <p><i>foo'<b>bar</b></i>
 </p>
-!!end
-
+!! end
 
 # same html as previous, but wikitext adjusted to match parsoid html2wt
 !! test
@@ -955,7 +955,6 @@ Italics and bold: multiple quote sequences: (2,4,2+3) w/ nowiki
 </p>
 !! end
 
-
 !! test
 Italics and bold: multiple quote sequences: (2,4,3)
 !! options
@@ -965,8 +964,7 @@ parsoid=wt2html
 !! html/*
 <p><i>foo'<b>bar</b></i>
 </p>
-!!end
-
+!! end
 
 # same html as previous, but wikitext adjusted to match parsoid html2wt
 !! test
@@ -978,7 +976,6 @@ Italics and bold: multiple quote sequences: (2,4,3+2) w/ nowiki
 </p>
 !! end
 
-
 !! test
 Italics and bold: multiple quote sequences: (2,4,4)
 !! options
@@ -988,8 +985,7 @@ parsoid=wt2html
 !! html/*
 <p><i>foo'<b>bar'</b></i>
 </p>
-!!end
-
+!! end
 
 # same html as previous, but wikitext adjusted to match parsoid html2wt
 !! test
@@ -1001,7 +997,6 @@ Italics and bold: multiple quote sequences: (2,4,4+2) w/ nowiki
 </p>
 !! end
 
-
 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
 Italics and bold: multiple quote sequences: (3,4,2)
@@ -1015,24 +1010,21 @@ parsoid=wt2html
 !! html/parsoid
 <p><b>foo'</b>bar<i></i>
 </p>
-!!end
+!! end
 
 # same html as previous, but wikitext adjusted to match parsoid html2wt
 !! test
 Italics and bold: multiple quote sequences: (3,4,2+2) w/ nowiki
-!! options
-parsoid
 !! wikitext
-'''<nowiki>foo'</nowiki>'''bar''<nowiki/>''
+'''foo''''bar''<nowiki/>''
 !! html/php
 <p><b>foo'</b>bar
 </p>
 !! html/parsoid
-<p><b><span typeof="mw:Nowiki">foo'</span></b>bar<i></i>
+<p><b>foo'</b>bar<i></i>
 </p>
 !! end
 
-
 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
 Italics and bold: multiple quote sequences: (3,4,3)
@@ -1046,18 +1038,18 @@ parsoid=wt2html
 !! html/parsoid
 <p><b>foo'</b>bar<b></b>
 </p>
-!!end
+!! end
 
 # same html as previous, but wikitext adjusted to match parsoid html2wt
 !! test
 Italics and bold: multiple quote sequences: (3,4,3+3) w/ nowiki
 !! wikitext
-'''<nowiki>foo'</nowiki>'''bar'''<nowiki/>'''
+'''foo''''bar'''<nowiki/>'''
 !! html/php
 <p><b>foo'</b>bar
 </p>
 !! html/parsoid
-<p><b><span typeof="mw:Nowiki">foo'</span></b>bar<b></b>
+<p><b>foo'</b>bar<b></b>
 </p>
 !! end
 
@@ -1135,7 +1127,7 @@ The ''[[Main Page]]'''s talk page.
 <p>The <i><a href="/wiki/Main_Page" title="Main Page">Main Page</a>'</i>s talk page.
 </p>
 !! html/parsoid
-<p>The <i><a rel="mw:WikiLink"  href="Main_Page" title="Main Page">Main Page</a>'</i>s talk page.</p>
+<p>The <i><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a>'</i>s talk page.</p>
 !! end
 
 !! test
@@ -2861,9 +2853,9 @@ Parsoid: pipe in transclusion parameter
 !! html/php+tidy
 <p><a rel="nofollow" class="external free" href="http://foo.com/a%7Cb">http://foo.com/a%7Cb</a></p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
+<p><a rel="mw:ExtLink" href="http://foo.com/a%7Cb" about="#mwt1"
 typeof="mw:Transclusion"
-data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a&amp;#124;b"}},"i":0}}]}'>http://foo.com/a|b</a></p>
+data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a&amp;#124;b"}},"i":0}}]}'>http://foo.com/a%7Cb</a></p>
 !! end
 
 !! test
@@ -4798,6 +4790,17 @@ news:'a'b''c''d e
 <p><a rel="mw:ExtLink" href="news:'a'b">news:'a'b</a><i>c</i>d e</p>
 !! end
 
+!! test
+External links: with entity
+!! wikitext
+[http://&#x20;www.librarieswithoutborders.org Libraries without borders]
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://+www.librarieswithoutborders.org">Libraries without borders</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://+www.librarieswithoutborders.org" data-parsoid='{"a":{"href":"http://+www.librarieswithoutborders.org"},"sa":{"href":"http://&amp;#x20;www.librarieswithoutborders.org"}}'>Libraries without borders</a></p>
+!! end
+
 !! test
 External links: Lone protocols are never linked (T105697)
 !! wikitext
@@ -5460,7 +5463,7 @@ http://example.com/index.php?foozoid&#x5B;&#x5D;=bar
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a></p>
 
-<p><a rel="mw:ExtLink" href="http://example.com/index.php?foozoid[]=bar">http://example.com/index.php?foozoid[]=bar</a></p>
+<p><a rel="mw:ExtLink" href="http://example.com/index.php?foozoid%5B%5D=bar" data-parsoid='{"stx":"url","a":{"href":"http://example.com/index.php?foozoid%5B%5D=bar"},"sa":{"href":"http://example.com/index.php?foozoid&amp;#x5B;&amp;#x5D;=bar"}}'>http://example.com/index.php?foozoid%5B%5D=bar</a></p>
 !! end
 
 !! test
@@ -6407,7 +6410,7 @@ parsoid=wt2html,html2html
 !! html/parsoid
 <table><tbody>
 <tr>
-<td data-parsoid='{"startTagSrc":"| ","attrSepSrc":"|","autoInsertedEnd":true}'><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
+<td data-parsoid='{"startTagSrc":"| ","attrSepSrc":"|","autoInsertedEnd":true}'>[<a rel="mw:ExtLink" href="ftp://%7Cx" data-parsoid='{"stx":"url","a":{"href":"ftp://%7Cx"},"sa":{"href":"ftp://|x"}}'>ftp://%7Cx</a></td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'>]" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
 !! end
 
 !! test
@@ -7485,7 +7488,7 @@ Piped link with multiple pipe characters in link text
 <p><a href="/wiki/Main_Page" title="Main Page">|The|Main|Page|</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="Main_Page" title="Main Page">|The|Main|Page|</a></p>
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">|The|Main|Page|</a></p>
 !! end
 
 !! test
@@ -7841,6 +7844,17 @@ Link containing double-single-quotes '' (bug 4598)
 <p><a rel="mw:WikiLink" href="./Lista_d''e_paise_d''o_munno" title="Lista d''e paise d''o munno">Lista d''e paise d''o munno</a></p>
 !! end
 
+!! test
+Link containing double quotes and spaces
+!! wikitext
+[[Cool "Gator"]]
+!! html/php
+<p><a href="/index.php?title=Cool_%22Gator%22&amp;action=edit&amp;redlink=1" class="new" title="Cool &quot;Gator&quot; (page does not exist)">Cool "Gator"</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Cool_%22Gator%22" title='Cool "Gator"'>Cool "Gator"</a></p>
+!! end
+
 !! test
 Link containing double-single-quotes '' in text (bug 4598 sanity check)
 !! wikitext
@@ -7849,7 +7863,7 @@ Some [[Link|pretty ''italics'' and stuff]]!
 <p>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!
 </p>
 !! html/parsoid
-<p>Some <a rel="mw:WikiLink" href="Link" title="Link">pretty <i>italics</i> and stuff</a>!</p>
+<p>Some <a rel="mw:WikiLink" href="./Link" title="Link">pretty <i>italics</i> and stuff</a>!</p>
 !! end
 
 !! test
@@ -7879,9 +7893,9 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 </p>
 !! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Denys_Savchenko_''Pentecoste''.jpg"><img resource="./File:Denys_Savchenko_''Pentecoste''.jpg" src="./Special:FilePath/Denys_Savchenko_''Pentecoste''.jpg" height="220" width="220"/></a></span></p>
-<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''">''Pentecoste''</a></p>
-<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''">Pentecoste</a></p>
-<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''"><i>Pentecoste</i></a></p>
+<p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''">''Pentecoste''</a></p>
+<p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''">Pentecoste</a></p>
+<p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''"><i>Pentecoste</i></a></p>
 !! end
 
 !! test
@@ -7976,7 +7990,7 @@ Piped link to URL: [[http://www.example.com|an example URL]]
 <p>Piped link to URL: [<a rel="nofollow" class="external text" href="http://www.example.com%7Can">example URL</a>]
 </p>
 !! html/parsoid
-<p>Piped link to URL: [<a rel="mw:ExtLink" href="http://www.example.com|an">example URL</a>]</p>
+<p>Piped link to URL: [<a rel="mw:ExtLink" href="http://www.example.com%7Can" data-parsoid='{"a":{"href":"http://www.example.com%7Can"},"sa":{"href":"http://www.example.com|an"}}'>example URL</a>]</p>
 !! end
 
 !! test
@@ -8134,19 +8148,32 @@ Link with multiple ":" in a subpage-supporting namespace (bug 63636)
 Handle title parsing for subpages
 !! options
 title=[[/123123]]
+subpage
 !! wikitext
 123
+!! html/php
+<p>123
+</p>
 !! html/parsoid
 <p>123</p>
 !! end
 
-## FIXME: Add a working php section here
+!! article
+User:Test/123
+!! text
+test 123
+!! endarticle
+
 !! test
 Link to a subpage from a namespace other than main
 !! options
-title=[[User:test]]
+title=[[User:Test]]
+subpage
 !! wikitext
 [[/123]]
+!! html/php
+<p><a href="/wiki/User:Test/123" title="User:Test/123">/123</a>
+</p>
 !! html/parsoid
 <p><a rel="mw:WikiLink" href="./User:Test/123" title="User:Test/123" data-parsoid='{"stx":"simple","a":{"href":"./User:Test/123"},"sa":{"href":"/123"}}'>/123</a></p>
 !! end
@@ -8168,7 +8195,8 @@ parsoid=wt2html
 !! test
 Purely hash wikilink
 !! options
-title=[[User:test/123]]
+title=[[User:Test/123]]
+subpage
 !! wikitext
 [[#a|b]]
 !! html/php
@@ -8180,12 +8208,10 @@ title=[[User:test/123]]
 
 !! test
 1. Interaction of linktrail and template encapsulation
-!! options
-parsoid
 !! wikitext
 {{echo|[[Foo]]}}l
-!! html
-<p><a rel="mw:WikiLink" href="Foo" title="Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Foo]]"}},"i":0}},"l"]}'>Fool</a></p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Foo]]"}},"i":0}},"l"]}'>Fool</a></p>
 !! end
 
 !! test
@@ -8255,7 +8281,7 @@ Parsoid link trail escaping
 !! options
 parsoid=html2wt,html2html
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="Apple" title="Apple">apple</a>s</p>
+<p><a rel="mw:WikiLink" href="./Apple" title="Apple">apple</a>s</p>
 !! wikitext
 [[apple]]<nowiki/>s
 !! end
@@ -8266,7 +8292,7 @@ Parsoid link prefix escaping
 language=is
 parsoid=html2wt,html2html
 !! html/parsoid
-<p>Aðrir mótmælenda<a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður">söfnuður</a></p>
+<p>Aðrir mótmælenda<a rel="mw:WikiLink" href="./Söfnuður" title="Söfnuður">söfnuður</a></p>
 !! wikitext
 Aðrir mótmælenda<nowiki/>[[söfnuður]]
 !! end
@@ -8291,12 +8317,10 @@ Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
 
 !! test
 Parsoid: Scoped parsing should handle mixed transclusions and plain text
-!! options
-parsoid
 !! wikitext
 [[Foo|{{echo|a}} b {{echo|c}}]]
-!! html
-<p><a rel="mw:WikiLink" href="Foo" title="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
 !! end
 
 !! test
@@ -8590,6 +8614,22 @@ Blah blah blah
 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar" />
 !! end
 
+!! test
+Escaping of interlanguage links
+!! wikitext
+Blah blah blah
+[[:es:Spanish]]
+[[ : zh : Chinese ]]
+!! html/php
+<p>Blah blah blah
+<a href="http://es.wikipedia.org/wiki/Spanish" class="extiw" title="es:Spanish">es:Spanish</a>
+<a href="http://zh.wikipedia.org/wiki/Chinese" class="extiw" title="zh:Chinese"> zh : Chinese </a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">es:Spanish</a>
+<a rel="mw:ExtLink" href="http://zh.wikipedia.org/wiki/Chinese" title="zh:Chinese"> zh : Chinese </a></p>
+!! end
+
 ## parsoid html2wt will normalize the space to _
 !! test
 Space and question mark encoding in interlanguage links (T95473)
@@ -8695,8 +8735,8 @@ Parsoid bug 53221: Wikilinks should be properly entity-escaped
 !! options
 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
 !! html/parsoid
-<p>He&amp;nbsp;llo <a href="Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
-<p>He&amp;nbsp;llo <a href="He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
+<p>He&amp;nbsp;llo <a href="./Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
+<p>He&amp;nbsp;llo <a href="./He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
 !! wikitext
 He&amp;nbsp;llo [[Foo|He&amp;nbsp;llo]]
 
@@ -10345,7 +10385,7 @@ Parsoid: Page property magic word with magic word contents
 !! wikitext
 {{DISPLAYTITLE:''{{PAGENAME}}''}}
 !! html/parsoid
-<meta property="mw:PageProp/displaytitle" content="Main Page" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"src":"{{DISPLAYTITLE:&#39;&#39;{{PAGENAME}}&#39;&#39;}}"}' data-mw='{"attribs":[[{"txt":"content"},{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[15,31,2,2]}&#39;>&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[17,29,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}&#39;>Main Page&lt;/span>&lt;/i>"}]]}'/>
+<meta property="mw:PageProp/displaytitle" content="Main Page" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"src":"{{DISPLAYTITLE:&#39;&#39;{{PAGENAME}}&#39;&#39;}}"}' data-mw='{"attribs":[[{"txt":"content"},{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[15,31,2,2]}&#39;>&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[17,29,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}&#39;>Main Page&lt;/span>&lt;/i>"}]]}'/>
 !! end
 
 !! test
@@ -13561,7 +13601,7 @@ Image with link parameter, wiki target
 <p><a href="/wiki/Main_Page" title="Main Page"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 # parsoid bug 49293 (part 1)
@@ -13668,7 +13708,7 @@ Image with link parameter (wiki target) and unnamed parameter
 <p><a href="/wiki/Main_Page" title="Title"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -13720,7 +13760,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -13762,7 +13802,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="./Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -13775,7 +13815,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></figcaption></figure>
 !! end
 
 !! test
@@ -13788,7 +13828,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></figcaption></figure>
 !! end
 
 !! test
@@ -14252,7 +14292,7 @@ parsoid=wt2html,wt2wt,html2html
 <p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a href="/wiki/Main_Page" title="Main Page">this</a> is just an ordinary link.
 </p>
 !! html/parsoid
-<p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a rel="mw:WikiLink" href="Main_Page" title="Main Page">this</a> is just an ordinary link.</p>
+<p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">this</a> is just an ordinary link.</p>
 !! end
 
 !! test
@@ -14365,7 +14405,7 @@ language=es
 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/Foo" title="Foo"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/Archivo:Foobar.jpg" class="internal" title="Aumentar"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -14739,8 +14779,8 @@ subpage title=[[Subpage test/1/2/3/4]]
 </p><p><a href="/wiki/Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage test/1/2/subpage</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a></p>
-<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
+<p><a rel="mw:WikiLink" href="./Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a></p>
+<p><a rel="mw:WikiLink" href="./Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
 !! end
 
 !! test
@@ -15030,12 +15070,12 @@ Bar
 Bar
 </p>
 !! html/parsoid
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="Category:Baz"/> <link rel="mw:PageProp/Category" href="Category:Baz"/> <link rel="mw:PageProp/Category" href="Category:Baz"/> Bar <link rel="mw:PageProp/Category" href="Category:Baz"/> <link rel="mw:PageProp/Category" href="Category:Baz"/> <link rel="mw:PageProp/Category" href="Category:Baz"/> <link rel="mw:PageProp/Category" href="Category:Baz"/> <link rel="mw:PageProp/Category" href="Category:Baz" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Baz]]"}},"i":0}}]}'/></p>
-<link rel="mw:PageProp/Category" href="Category:Baz"/>
+<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
+<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
+<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
+<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
+<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Baz]]"}},"i":0}}]}'/></p>
+<link rel="mw:PageProp/Category" href="./Category:Baz"/>
 !! end
 
 ## We used to, but no longer wt2wt this test since the default serializer
@@ -16067,7 +16107,7 @@ div with braces in attribute value
 !! wikitext
 <div title="{}">Foo</div>
 !! html/php
-<div title="&#123;}">Foo</div>
+<div title="&#123;&#125;">Foo</div>
 
 !! html/parsoid
 <div title="{}">Foo</div>
@@ -16507,9 +16547,11 @@ Template:Div style
 Bug 2304: HTML attribute safety (safe template; regression bug 2309)
 !! wikitext
 <div title="{{test}}"></div>
-!! html
+!! html/php
 <div title="This is a test template"></div>
 
+!! html/parsoid
+<div title="This is a test template" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"This is a test template"},"sa":{"title":"{{test}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[12,20,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"test\",\"href\":\"./Template:Test\"},\"params\":{},\"i\":0}}]}&#39;>This is a test template&lt;/span>"}]]}'></div>
 !! end
 
 # Parsoid has enough context to handle this case
@@ -16528,29 +16570,36 @@ Bug 2304: HTML attribute safety (dangerous template; 2309)
 Bug 2304: HTML attribute safety (dangerous style template; 2309)
 !! wikitext
 <div style="{{dangerous style attribute}}"></div>
-!! html
+!! html/php
 <div style="/* insecure input */"></div>
 
+!! html/parsoid
+<div style="/* insecure input */" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"{{dangerous style attribute}}"}}' data-mw='{"attribs":[[{"txt":"style"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[12,41,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"dangerous style attribute\",\"href\":\"./Template:Dangerous_style_attribute\"},\"params\":{},\"i\":0}}]}&#39;>border-size: expression(alert(document.cookie))&lt;/span>"}]]}'></div>
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (safe parameter; 2309)
 !! wikitext
 {{div style|width: 200px}}
-!! html
+!! html/php
 <div style="float: right; width: 200px">Magic div</div>
 
+!! html/parsoid
+<div style="float: right; width: 200px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","a":{"style":"float: right; width: 200px"},"sa":{"style":"float: right; {{{1}}}"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"width: 200px"}},"i":0}}]}'>Magic div</div>
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (unsafe parameter; 2309)
 !! wikitext
 {{div style|width: expression(alert(document.cookie))}}
-!! html
+!! html/php
 <div style="/* insecure input */">Magic div</div>
 
+!! html/parsoid
+<div style="/* insecure input */" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"float: right; {{{1}}}"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"width: expression(alert(document.cookie))"}},"i":0}}]}'>Magic div</div>
 !! end
 
+## Parsoid output here differs; needs investigation.
 !! test
 Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309)
 !! wikitext
@@ -16560,6 +16609,7 @@ Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309)
 
 !! end
 
+## Parsoid output here differs; needs investigation.
 !! test
 Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309)
 !! wikitext
@@ -16596,7 +16646,6 @@ Bug 2304: HTML attribute safety (bold)
 
 !! end
 
-
 !! test
 Bug 2304: HTML attribute safety (ISBN)
 !! wikitext
@@ -16646,18 +16695,22 @@ Bug 2304: HTML attribute safety (named web link)
 Bug 3244: HTML attribute safety (extension; safe)
 !! wikitext
 <div style="<nowiki>background:blue</nowiki>"></div>
-!! html
+!! html/php
 <div style="background:blue"></div>
 
+!! html/parsoid
+<div style="background:blue" data-parsoid='{"stx":"html","a":{"style":"background:blue"},"sa":{"style":"&lt;nowiki>background:blue&lt;/nowiki>"}}'></div>
 !! end
 
 !! test
 Bug 3244: HTML attribute safety (extension; unsafe)
 !! wikitext
 <div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
-!! html
+!! html/php
 <div style="/* insecure input */"></div>
 
+!! html/parsoid
+<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"&lt;nowiki>border-left:expression(alert(document.cookie))&lt;/nowiki>"}}'></div>
 !! end
 
 # More MSIE fun discovered by Tom Gilder
@@ -16666,45 +16719,55 @@ Bug 3244: HTML attribute safety (extension; unsafe)
 MSIE CSS safety test: spurious slash
 !! wikitext
 <div style="background-image:u\rl(javascript:alert('boo'))">evil</div>
-!! html
+!! html/php
 <div style="/* insecure input */">evil</div>
 
+!! html/parsoid
+<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:u\\rl(javascript:alert(&#39;boo&#39;))"}}'>evil</div>
 !! end
 
 !! test
 MSIE CSS safety test: hex code
 !! wikitext
 <div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
-!! html
+!! html/php
 <div style="/* insecure input */">evil</div>
 
+!! html/parsoid
+<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:u\\72l(javascript:alert(&#39;boo&#39;))"}}'>evil</div>
 !! end
 
 !! test
 MSIE CSS safety test: comment in url
 !! wikitext
 <div style="background-image:u/**/rl(javascript:alert('boo'))">evil</div>
-!! html
+!! html/php
 <div style="background-image:u rl(javascript:alert(&#39;boo&#39;))">evil</div>
 
+!! html/parsoid
+<div style="background-image:u rl(javascript:alert('boo'))" data-parsoid='{"stx":"html","a":{"style":"background-image:u rl(javascript:alert(&#39;boo&#39;))"},"sa":{"style":"background-image:u/**/rl(javascript:alert(&#39;boo&#39;))"}}'>evil</div>
 !! end
 
 !! test
 MSIE CSS safety test: comment in expression
 !! wikitext
 <div style="background-image:expres/**/sion(alert('boo4'))">evil4</div>
-!! html
+!! html/php
 <div style="background-image:expres sion(alert(&#39;boo4&#39;))">evil4</div>
 
+!! html/parsoid
+<div style="background-image:expres sion(alert('boo4'))" data-parsoid='{"stx":"html","a":{"style":"background-image:expres sion(alert(&#39;boo4&#39;))"},"sa":{"style":"background-image:expres/**/sion(alert(&#39;boo4&#39;))"}}'>evil4</div>
 !! end
 
 !! test
 CSS safety test (all browsers): vertical tab (bug 55332 / CVE-2013-4567)
 !! wikitext
 <p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
-!! html
+!! html/php
 <p style="/* invalid control char */">A</p>
 
+!! html/parsoid
+<p style="/* invalid control char */" data-parsoid='{"stx":"html","a":{"style":"/* invalid control char */"},"sa":{"style":"font-size: 100px; background-image:url\\b(https://www.google.com/images/srpr/logo6w.png)"}}'>A</p>
 !! end
 
 !! test
@@ -16712,10 +16775,13 @@ MSIE 6 CSS safety test: Fullwidth (bug 55332)
 !! wikitext
 <p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p>
 <div style="top:EXPRESSION(alert())">B</div>
-!! html
+!! html/php
 <p style="/* insecure input */">A</p>
 <div style="/* insecure input */">B</div>
 
+!! html/parsoid
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expression((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>A</p>
+<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"top:EXPRESSION(alert())"}}'>B</div>
 !! end
 
 !! test
@@ -16723,10 +16789,13 @@ MSIE 6 CSS safety test: IPA extensions (bug 55332)
 !! wikitext
 <div style="background-image:uʀʟ(javascript:alert())">A</div>
 <p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p>
-!! html
+!! html/php
 <div style="/* insecure input */">A</div>
 <p style="/* insecure input */">B</p>
 
+!! html/parsoid
+<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:uʀʟ(javascript:alert())"}}'>A</div>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expʀessɪoɴ((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>B</p>
 !! end
 
 !! test
@@ -16735,23 +16804,30 @@ MSIE 6 CSS safety test: sup/sub script (bug 55332)
 <div style="background-image:url⁽javascript:alert())">A</div>
 <div style="background-image:url₍javascript:alert())">B</div>
 <p style="font-size: 100px; color: expressioⁿ((title='XSSed'),'red')">C</p>
-!! html
+!! html/php
 <div style="/* insecure input */">A</div>
 <div style="/* insecure input */">B</div>
 <p style="/* insecure input */">C</p>
 
+!! html/parsoid
+<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:url⁽javascript:alert())"}}'>A</div>
+<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:url₍javascript:alert())"}}'>B</div>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expressioⁿ((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>C</p>
 !! end
 
-# FIXME: Parsoid fails to sanitize this! See T58846.
 !! test
 Opera -o-link CSS
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 <div
 title="&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#44;&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#49;&#32;&#111;&#110;&#101;&#114;&#114;&#111;&#114;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#62;"
 style="-o-link:attr(title);-o-link-source:current">X</div>
-!! html
+!! html/php
 <div title="data:text/html,&lt;img src=1 onerror=alert(1)&gt;" style="/* insecure input */">X</div>
 
+!! html/parsoid
+<div title="data:text/html,&lt;img src=1 onerror=alert(1)>" style="/* insecure input */" data-parsoid='{"stx":"html","a":{"title":"data:text/html,&lt;img src=1 onerror=alert(1)>","style":"/* insecure input */"},"sa":{"title":"&amp;#100;&amp;#97;&amp;#116;&amp;#97;&amp;#58;&amp;#116;&amp;#101;&amp;#120;&amp;#116;&amp;#47;&amp;#104;&amp;#116;&amp;#109;&amp;#108;&amp;#44;&amp;#60;&amp;#105;&amp;#109;&amp;#103;&amp;#32;&amp;#115;&amp;#114;&amp;#99;&amp;#61;&amp;#49;&amp;#32;&amp;#111;&amp;#110;&amp;#101;&amp;#114;&amp;#114;&amp;#111;&amp;#114;&amp;#61;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;&amp;#49;&amp;#41;&amp;#62;","style":"-o-link:attr(title);-o-link-source:current"}}'>X</div>
 !! end
 
 !! test
@@ -16764,7 +16840,7 @@ MSIE 6 CSS safety test: Repetition markers (bug 55332)
 <p style="font-size: 100px; color: expresﹽion((title='XSSed'),'red')">E</p>
 <p style="font-size: 100px; color: expresﹼion((title='XSSed'),'red')">F</p>
 <p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">G</p>
-!! html
+!! html/php
 <p style="/* insecure input */">A</p>
 <p style="/* insecure input */">B</p>
 <p style="/* insecure input */">C</p>
@@ -16773,6 +16849,14 @@ MSIE 6 CSS safety test: Repetition markers (bug 55332)
 <p style="/* insecure input */">F</p>
 <p style="/* insecure input */">G</p>
 
+!! html/parsoid
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expres〱ion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>A</p>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresゝion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>B</p>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresーion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>C</p>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresヽion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>D</p>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresﹽion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>E</p>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresﹼion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>F</p>
+<p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresーion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>G</p>
 !! end
 
 !! test
@@ -16836,7 +16920,6 @@ Expansion of multi-line templates in attribute values (bug 6255)
 
 !! end
 
-
 !! test
 Expansion of multi-line templates in attribute values (bug 6255 sanity check)
 !! wikitext
@@ -16870,6 +16953,7 @@ Tags which are hidden from Tidy cannot pass through the Sanitizer
 ###
 ### Parser hooks (see tests/parser/parserTestsParserHook.php for the <tag> extension)
 ###
+
 !! test
 Parser hook: empty input
 !! wikitext
@@ -18840,7 +18924,6 @@ stuff
 xxx
 !! end
 
-
 !! test
 Handling of &#x0A; in URLs
 !! wikitext
@@ -18849,9 +18932,7 @@ Handling of &#x0A; in URLs
 <ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
 
 !! html/parsoid
-<ul><li><ul><li> <a rel="mw:ExtLink" href="irc://
-a">irc://
-a</a></li></ul></li></ul>
+<ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa" data-parsoid='{"stx":"url","a":{"href":"irc://%0Aa"},"sa":{"href":"irc://&amp;#x0A;a"}}'>irc://%0Aa</a></li></ul></li></ul>
 !! end
 
 !! test
@@ -18865,7 +18946,6 @@ Handling of %0A in URLs
 <ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
 !! end
 
-
 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
 5 quotes, code coverage +1 line
@@ -19436,6 +19516,27 @@ File:Foobar.jpg|alt=galleryalt|link=http://www.example.org
 </ul>
 !! end
 
+!! test
+Gallery override link with absolute external link with LanguageConverter
+!! options
+language=zh
+!! input
+<gallery>
+File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
+</gallery>
+!! result
+<ul class="gallery mw-gallery-traditional">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
+                       <div class="gallerytext">
+<p>caption
+</p>
+                       </div>
+               </div></li>
+</ul>
+
+!! end
+
 !! test
 Gallery override link with malicious javascript (T36852)
 !! options
@@ -19458,7 +19559,7 @@ File:Foobar.jpg|alt=galleryalt|link=" onclick="alert('malicious javascript code!
 
 !! html/parsoid
 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
-<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span style="display: inline-block; height: 100%; vertical-align: middle;"></span><span typeof="mw:Image" style="vertical-align: middle; display: inline-block;"><a href="./&quot;_onclick=&quot;alert('malicious_javascript_code!');"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span style="display: inline-block; height: 100%; vertical-align: middle;"></span><span typeof="mw:Image" style="vertical-align: middle; display: inline-block;"><a href="./%22_onclick=%22alert('malicious_javascript_code!');"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
 </ul>
 !! end
 
@@ -19488,6 +19589,24 @@ File:Foobar.jpg|link=<
 </ul>
 !! end
 
+!! test
+Serialize gallery without attrs in data-mw
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "nativeGallery": true
+}
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","body":{}}'>
+<li class="gallerycaption">123</li>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span style="display: inline-block; height: 100%; vertical-align: middle;"></span><span style="vertical-align: middle; display: inline-block;">File:Test.png</span></div><div class="gallerytext"></div></li>
+</ul>
+!! wikitext
+<gallery caption="123">
+File:Test.png
+</gallery>
+!! end
+
 !! test
 HTML Hex character encoding (spells the word "JavaScript")
 !! options
@@ -19771,7 +19890,6 @@ dt/dd/dl test
 
 !!end
 
-
 # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
 !! test
 Images with the "|" character in the comment
@@ -19781,7 +19899,7 @@ Images with the "|" character in the comment
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>An <a rel="nofollow" class="external text" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx">external</a> URL</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=|left|&amp;param2=|x">external</a> URL</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx" data-parsoid='{"a":{"href":"http://test/?param1=%7Cleft%7C&amp;param2=%7Cx"},"sa":{"href":"http://test/?param1=|left|&amp;param2=|x"}}'>external</a> URL</figcaption></figure>
 !! end
 
 !! test
@@ -20333,8 +20451,8 @@ parsoid=wt2html
 !! html/php
 cat=分类 sort=
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="A" title="A">A</a></p>
-<link rel="mw:PageProp/Category" href="Category:分类"/>
+<p><a rel="mw:WikiLink" href="./A" title="A">A</a></p>
+<link rel="mw:PageProp/Category" href="./Category:分类"/>
 !! end
 
 !! test
@@ -20609,6 +20727,28 @@ Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiw
 # Since Parsoid is starting to emit canonical wikitext for links,
 # [http://example.com http://example.com] will not RT back to that
 # form anymore.
+!! test
+HTML markups with conversion syntax in attribs, nested in other conversion blocks
+!! options
+language=zh variant=zh-cn
+!! wikitext
+-{zh;zh-hans;zh-hant|<span title="-{X}-">A</span>}-
+!! html
+<p><span title="X">A</span>
+</p>
+!! end
+
+!! test
+HTML markups with conversion syntax in attribs, nested in other conversion blocks (not working yet)
+!! options
+language=zh variant=zh-cn disabled
+!! wikitext
+-{<span title="-{X}-">A</span>}-
+!! html
+<p><span title="X">A</span>
+</p>
+!! end
+
 !! test
 Proper conversion of text in external links
 !! options
@@ -22368,82 +22508,6 @@ File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
 
 !! end
 
-!!test
-Gallery override link with absolute external link (bug 34852)
-!! wikitext
-<gallery>
-File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
-</gallery>
-!! html
-<ul class="gallery mw-gallery-traditional">
-               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
-                       <div class="gallerytext">
-<p>caption
-</p>
-                       </div>
-               </div></li>
-</ul>
-
-!! end
-
-!! test
-Gallery override link with absolute external link with LanguageConverter
-!! options
-language=zh
-!! input
-<gallery>
-File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
-</gallery>
-!! result
-<ul class="gallery mw-gallery-traditional">
-               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
-                       <div class="gallerytext">
-<p>caption
-</p>
-                       </div>
-               </div></li>
-</ul>
-
-!! end
-
-!!test
-Gallery override link with malicious javascript (bug 34852)
-!! wikitext
-<gallery>
-File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascript code!');
-</gallery>
-!! html
-<ul class="gallery mw-gallery-traditional">
-               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
-                       <div class="gallerytext">
-<p>caption
-</p>
-                       </div>
-               </div></li>
-</ul>
-
-!! end
-
-!!test
-Gallery with invalid title as link (bug 43964)
-!! wikitext
-<gallery>
-File:foobar.jpg|link=<
-</gallery>
-!! html
-<ul class="gallery mw-gallery-traditional">
-               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
-                       <div class="gallerytext">
-                       </div>
-               </div></li>
-</ul>
-
-!! end
-
 !!test
 Language parser function
 !! wikitext
@@ -22705,7 +22769,7 @@ A <ref>
 <p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
 
 <ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">This is a <b><a rel="mw:WikiLink" href="Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
+<li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">This is a <b><a rel="mw:WikiLink" href="./Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
 </span></li>
 </ol>
 !!end
index cef03ee..19469d9 100644 (file)
@@ -34,19 +34,24 @@ return [
         * project. directory_list won't find .inc files so
         * we augment it here.
         */
-       'file_list' => [
-               'maintenance/7zip.inc',
-               'maintenance/backupPrefetch.inc',
-               'maintenance/commandLine.inc',
-               'maintenance/sqlite.inc',
-               'maintenance/userOptions.inc',
-               'maintenance/backup.inc',
-               'maintenance/cleanupTable.inc',
-               'maintenance/importImages.inc',
-               'maintenance/userDupes.inc',
-               'maintenance/language/checkLanguage.inc',
-               'maintenance/language/languages.inc',
-       ],
+       'file_list' => array_merge(
+               function_exists( 'register_postsend_function' ) ? [] : [ 'tests/phan/stubs/hhvm.php' ],
+               function_exists( 'wikidiff2_do_diff' ) ? [] : [ 'tests/phan/stubs/wikidiff.php' ],
+               class_exists( PEAR::class ) ? [] : [ 'tests/phan/stubs/mail.php' ],
+               [
+                       'maintenance/7zip.inc',
+                       'maintenance/backupPrefetch.inc',
+                       'maintenance/commandLine.inc',
+                       'maintenance/sqlite.inc',
+                       'maintenance/userOptions.inc',
+                       'maintenance/backup.inc',
+                       'maintenance/cleanupTable.inc',
+                       'maintenance/importImages.inc',
+                       'maintenance/userDupes.inc',
+                       'maintenance/language/checkLanguage.inc',
+                       'maintenance/language/languages.inc',
+               ]
+       ),
 
        /**
         * A list of directories that should be parsed for class and
@@ -65,7 +70,6 @@ return [
                'resources/',
                'skins/',
                'vendor/',
-               'tests/phan/stubs/',
        ],
 
        /**
@@ -96,7 +100,7 @@ return [
                // External class
                'includes/libs/jsminplus.php',
                // separate repositories
-               'skins/'
+               'skins/',
        ],
 
        /**
@@ -129,7 +133,7 @@ return [
         * ```php
         * <?php
         * function test($arg):int {
-        *      return $arg;
+        *    return $arg;
         * }
         * test("abc");
         * ```
@@ -203,7 +207,7 @@ return [
         * with complicated cross-file globals that you have no
         * hope of fixing.
         */
-       'ignore_undeclared_variables_in_global_scope' => false,
+       'ignore_undeclared_variables_in_global_scope' => true,
 
        /**
         * Set to true in order to attempt to detect dead
@@ -339,8 +343,6 @@ return [
                "PhanUndeclaredProperty",
                // approximate error count: 3
                "PhanUndeclaredStaticMethod",
-               // approximate error count: 79
-               "PhanUndeclaredVariable",
        ],
 
        /**
index e906cdb..7cd9016 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 
-// @codingStandardsIgnoreFile
-
 /**
  * Minimal set of classes necessary for UserMailer to be happy. Types
  * taken from documentation at pear.php.net.
+ * @codingStandardsIgnoreFile
  */
+
 class PEAR {
        /**
         * @param mixed $data
index fd02a3e..37f76ff 100644 (file)
@@ -255,6 +255,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                CACHE_ACCEL => $hashCache,
                                CACHE_MEMCACHED => $hashCache,
                                'apc' => $hashCache,
+                               'apcu' => $hashCache,
                                'xcache' => $hashCache,
                                'wincache' => $hashCache,
                        ] + $baseConfig->get( 'ObjectCaches' );
index 0e83006..371731b 100644 (file)
@@ -12,6 +12,45 @@ class OutputPageTest extends MediaWikiTestCase {
        const SCREEN_MEDIA_QUERY = 'screen and (min-width: 982px)';
        const SCREEN_ONLY_MEDIA_QUERY = 'only screen and (min-width: 982px)';
 
+       /**
+        * @covers OutputPage::addMeta
+        * @covers OutputPage::getMetaTags
+        * @covers OutputPage::getHeadLinksArray
+        */
+       public function testMetaTags() {
+               $outputPage = $this->newInstance();
+               $outputPage->addMeta( 'http:expires', '0' );
+               $outputPage->addMeta( 'keywords', 'first' );
+               $outputPage->addMeta( 'keywords', 'second' );
+
+               $expected = [
+                       [ 'http:expires', '0' ],
+                       [ 'keywords', 'first' ],
+                       [ 'keywords', 'second' ],
+               ];
+               $this->assertSame( $expected, $outputPage->getMetaTags() );
+
+               $links = $outputPage->getHeadLinksArray();
+               $this->assertContains( '<meta http-equiv="expires" content="0"/>', $links );
+               $this->assertContains( '<meta name="keywords" content="first"/>', $links );
+               $this->assertContains( '<meta name="keywords" content="second"/>', $links );
+               $this->assertArrayNotHasKey( 'meta-robots', $links );
+       }
+
+       /**
+        * @covers OutputPage::setIndexPolicy
+        * @covers OutputPage::setFollowPolicy
+        * @covers OutputPage::getHeadLinksArray
+        */
+       public function testRobotsPolicies() {
+               $outputPage = $this->newInstance();
+               $outputPage->setIndexPolicy( 'noindex' );
+               $outputPage->setFollowPolicy( 'nofollow' );
+
+               $links = $outputPage->getHeadLinksArray();
+               $this->assertContains( '<meta name="robots" content="noindex,nofollow"/>', $links );
+       }
+
        /**
         * Tests a particular case of transformCssMedia, using the given input, globals,
         * expected return, and message
@@ -374,6 +413,29 @@ class OutputPageTest extends MediaWikiTestCase {
                $this->assertEquals( [ 0 => 'Test2' ], $outputPage->getCategories( 'normal' ) );
                $this->assertEquals( [ 0 => 'Test' ], $outputPage->getCategories( 'hidden' ) );
        }
+
+       /**
+        * @return OutputPage
+        */
+       private function newInstance() {
+               $context = new RequestContext();
+
+               $context->setConfig( new HashConfig( [
+                       'AppleTouchIcon' => false,
+                       'DisableLangConversion' => true,
+                       'EnableAPI' => false,
+                       'EnableCanonicalServerLink' => false,
+                       'Favicon' => false,
+                       'Feed' => false,
+                       'LanguageCode' => false,
+                       'ReferrerPolicy' => false,
+                       'RightsPage' => false,
+                       'RightsUrl' => false,
+                       'UniversalEditButton' => false,
+               ] ) );
+
+               return new OutputPage( $context );
+       }
 }
 
 /**
index 7d3007b..642ada2 100644 (file)
@@ -274,18 +274,6 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->assertEquals( $page->getId(), $rev->getPage() );
        }
 
-       /**
-        * @covers Revision::getText
-        */
-       public function testGetText() {
-               $this->hideDeprecated( 'Revision::getText' );
-
-               $orig = $this->makeRevision( [ 'text' => 'hello hello.' ] );
-               $rev = Revision::newFromId( $orig->getId() );
-
-               $this->assertEquals( 'hello hello.', $rev->getText() );
-       }
-
        /**
         * @covers Revision::getContent
         */
index 767c963..c971a40 100644 (file)
@@ -311,28 +311,6 @@ class RevisionTest extends MediaWikiTestCase {
                );
        }
 
-       function dataGetText() {
-               // NOTE: we expect the help namespace to always contain wikitext
-               return [
-                       [ 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ],
-                       [ serialize( 'hello world' ), 'Hello', "testing", null, Revision::FOR_PUBLIC, null ],
-                       [ serialize( 'hello world' ), 'Dummy:Hello', null, null, Revision::FOR_PUBLIC, null ],
-               ];
-       }
-
-       /**
-        * @group Database
-        * @dataProvider dataGetText
-        * @covers Revision::getText
-        */
-       public function testGetText( $text, $title, $model, $format, $audience, $expectedText ) {
-               $this->hideDeprecated( 'Revision::getText' );
-
-               $rev = $this->newTestRevision( $text, $title, $model, $format );
-
-               $this->assertEquals( $expectedText, $rev->getText( $audience ) );
-       }
-
        public function dataGetSize() {
                return [
                        [ "hello world.", CONTENT_MODEL_WIKITEXT, 12 ],
@@ -375,14 +353,11 @@ class RevisionTest extends MediaWikiTestCase {
         * @covers Revision::__construct
         */
        public function testConstructWithText() {
-               $this->hideDeprecated( "Revision::getText" );
-
                $rev = new Revision( [
                        'text' => 'hello world.',
                        'content_model' => CONTENT_MODEL_JAVASCRIPT
                ] );
 
-               $this->assertNotNull( $rev->getText(), 'no content text' );
                $this->assertNotNull( $rev->getContent(), 'no content object available' );
                $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
                $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
@@ -392,15 +367,12 @@ class RevisionTest extends MediaWikiTestCase {
         * @covers Revision::__construct
         */
        public function testConstructWithContent() {
-               $this->hideDeprecated( "Revision::getText" );
-
                $title = Title::newFromText( 'RevisionTest_testConstructWithContent' );
 
                $rev = new Revision( [
                        'content' => ContentHandler::makeContent( 'hello world.', $title, CONTENT_MODEL_JAVASCRIPT ),
                ] );
 
-               $this->assertNotNull( $rev->getText(), 'no content text' );
                $this->assertNotNull( $rev->getContent(), 'no content object available' );
                $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
                $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
index a40db24..eaa4d17 100644 (file)
@@ -439,8 +439,8 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
                $formatter->addMessagesFromStatus( 'status', $status );
                $this->assertSame( [
                        'error' => [
-                               'code' => 'parentheses',
-                               'info' => $parensPlain,
+                               'code' => 'mainpage',
+                               'info' => $mainpagePlain,
                        ],
                        'warnings' => [
                                'status' => [
@@ -502,6 +502,17 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
                        $formatter->arrayFromStatus( $status, 'warning' ),
                        'arrayFromStatus test for warning'
                );
+
+               $result->reset();
+               $result->addValue( null, 'error', [ 'bogus' ] );
+               $formatter->addError( 'err', 'mainpage' );
+               $this->assertSame( [
+                       'error' => [
+                               'code' => 'mainpage',
+                               'info' => $mainpagePlain,
+                       ],
+                       ApiResult::META_TYPE => 'assoc',
+               ], $result->getResultData(), 'Overwrites bogus "error" value with real error' );
        }
 
        /**
index bd744c0..a12c8b2 100644 (file)
@@ -99,6 +99,37 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                ];
        }
 
+       public function testReplaceMsg() {
+               global $wgContLang;
+
+               $messageCache = MessageCache::singleton();
+               $message = 'go';
+               $uckey = $wgContLang->ucfirst( $message );
+               $oldText = $messageCache->get( $message ); // "Ausführen"
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->startAtomic( __METHOD__ ); // simulate request and block deferred updates
+               $messageCache->replace( $uckey, 'Allez!' );
+               $this->assertEquals( 'Allez!',
+                       $messageCache->getMsgFromNamespace( $uckey, 'de' ),
+                       'Updates are reflected in-process immediately' );
+               $this->assertEquals( 'Allez!',
+                       $messageCache->get( $message ),
+                       'Updates are reflected in-process immediately' );
+               $this->makePage( 'Go', 'de', 'Race!' );
+               $dbw->endAtomic( __METHOD__ );
+
+               $this->assertEquals( 0,
+                       DeferredUpdates::pendingUpdatesCount(),
+                       'Post-commit deferred update triggers a run of all updates' );
+
+               $this->assertEquals( 'Race!', $messageCache->get( $message ), 'Correct final contents' );
+
+               $this->makePage( 'Go', 'de', $oldText );
+               $messageCache->replace( $uckey, $oldText ); // deferred update runs immediately
+               $this->assertEquals( $oldText, $messageCache->get( $message ), 'Content restored' );
+       }
+
        /**
         * There's a fallback case where the message key is given as fully qualified -- this
         * should ignore the passed $lang and use the language from the key
index 6885ca3..e778270 100644 (file)
@@ -155,60 +155,6 @@ class WikiPageTest extends MediaWikiLangTestCase {
                $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
        }
 
-       /**
-        * @covers WikiPage::doEdit
-        * @deprecated since 1.21. Should be removed when WikiPage::doEdit() gets removed
-        */
-       public function testDoEdit() {
-               $this->hideDeprecated( "WikiPage::doEdit" );
-               $this->hideDeprecated( "Revision::getText" );
-
-               // NOTE: assume help namespace will default to wikitext
-               $title = Title::newFromText( "Help:WikiPageTest_testDoEdit" );
-
-               $page = $this->newPage( $title );
-
-               $text = "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
-                       . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
-
-               $page->doEdit( $text, "[[testing]] 1" );
-
-               $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
-               $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
-               $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
-               $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
-
-               $id = $page->getId();
-
-               # ------------------------
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'pagelinks', '*', [ 'pl_from' => $id ] );
-               $n = $res->numRows();
-               $res->free();
-
-               $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
-
-               # ------------------------
-               $text = "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
-                       . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.";
-
-               $page->doEdit( $text, "testing 2" );
-
-               # ------------------------
-               $page = new WikiPage( $title );
-
-               $retrieved = $page->getContent()->getNativeData();
-               $this->assertEquals( $text, $retrieved, 'retrieved text doesn\'t equal original' );
-
-               # ------------------------
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'pagelinks', '*', [ 'pl_from' => $id ] );
-               $n = $res->numRows();
-               $res->free();
-
-               $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
-       }
-
        /**
         * @covers WikiPage::doDeleteArticle
         */
index f69ecaf..d93181c 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 class BalancerTest extends MediaWikiTestCase {
-       private $balancer;
 
        /**
         * Anything that needs to happen before your tests should go here.
@@ -11,20 +10,20 @@ class BalancerTest extends MediaWikiTestCase {
                // This makes sure that all the various cleanup and restorations
                // happen as they should (including the restoration for setMwGlobals).
                parent::setUp();
-               $this->balancer = new MediaWiki\Tidy\Balancer( [
-                       'strict' => false, /* not strict */
-                       'allowedHtmlElements' => null, /* no sanitization */
-                       'tidyCompat' => false, /* standard parser */
-                       'allowComments' => true, /* comment parsing */
-               ] );
        }
 
        /**
         * @covers MediaWiki\Tidy\Balancer::balance
         * @dataProvider provideBalancerTests
         */
-       public function testBalancer( $description, $input, $expected ) {
-               $output = $this->balancer->balance( $input );
+       public function testBalancer( $description, $input, $expected, $useTidy ) {
+               $balancer = new MediaWiki\Tidy\Balancer( [
+                       'strict' => false, /* not strict */
+                       'allowedHtmlElements' => null, /* no sanitization */
+                       'tidyCompat' => $useTidy, /* standard parser */
+                       'allowComments' => true, /* comment parsing */
+               ] );
+               $output = $balancer->balance( $input );
 
                // Ignore self-closing tags
                $output = preg_replace( '/\s*\/>/', '>', $output );
@@ -86,7 +85,7 @@ class BalancerTest extends MediaWikiTestCase {
                                        // Skip tests involving unusual doctypes.
                                        continue;
                                }
-                               $literalre = "~ <rdar: | <isindex | < /? (
+                               $literalre = "~ <rdar: | < /? (
                                        html | head | body | frame | frameset | plaintext
                                ) > ~xi";
                                if ( preg_match( $literalre, $case['data'] ) ) {
@@ -146,10 +145,20 @@ class BalancerTest extends MediaWikiTestCase {
                                $tests[] = [
                                        $filename, # use better description?
                                        $data,
-                                       $html
+                                       $html,
+                                       false # strict HTML5 compat mode, no tidy
                                ];
                        }
                }
+
+               # Some additional tests for mediawiki-specific features
+               $tests[] = [
+                       'Round-trip serialization for <pre>/<listing>/<textarea>',
+                       "<pre>\n\na</pre><listing>\n\nb</listing><textarea>\n\nc</textarea>",
+                       "<pre>\n\na</pre><listing>\n\nb</listing><textarea>\n\nc</textarea>",
+                       true # use the tidy-compatible mode
+               ];
+
                return $tests;
        }
 }
index beb3659..2b1c3e8 100644 (file)
         "html": "<html><head></head><body><p><b><b><b><b></b></b></b></b></p><p><b><b><b>x</b></b></b></p></body></html>",
         "noQuirksBodyHtml": "<p><b><b><b><b></b></b></b></b></p><p><b><b><b>x</b></b></b></p>"
       }
+    },
+    {
+      "data": "<b><em><foo><foob><fooc><aside></b></em>",
+      "errors": [
+        "(1,35): adoption-agency-1.3",
+        "(1,40): adoption-agency-1.3",
+        "(1,40): expected-closing-tag-but-got-eof"
+      ],
+      "fragment": {
+        "name": "div"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "b": true,
+            "em": true,
+            "foo": true,
+            "foob": true,
+            "fooc": true,
+            "aside": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "b",
+            "children": [
+              {
+                "tag": "em",
+                "children": [
+                  {
+                    "tag": "foo",
+                    "children": [
+                      {
+                        "tag": "foob",
+                        "children": [
+                          {
+                            "tag": "fooc"
+                          }
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "tag": "aside",
+            "children": [
+              {
+                "tag": "b"
+              }
+            ]
+          }
+        ],
+        "html": "<b><em><foo><foob><fooc></fooc></foob></foo></em></b><aside><b></b></aside>",
+        "noQuirksBodyHtml": "<b><em><foo><foob><fooc></fooc></foob></foo></em></b><aside><b></b></aside>"
+      }
     }
   ],
   "adoption02.dat": [
       "data": "FOO&#11111111111ZOO",
       "errors": [
         "(1,3): expected-doctype-but-got-chars",
-        "(1,13): illegal-codepoint-for-numeric-entity"
+        "(1,16): numeric-entity-without-semicolon",
+        "(1,16): illegal-codepoint-for-numeric-entity"
       ],
       "document": {
         "props": {
       "data": "FOO&#1111111111ZOO",
       "errors": [
         "(1,3): expected-doctype-but-got-chars",
-        "(1,13): illegal-codepoint-for-numeric-entity"
+        "(1,15): numeric-entity-without-semicolon",
+        "(1,15): illegal-codepoint-for-numeric-entity"
       ],
       "document": {
         "props": {
       "data": "FOO&#111111111111ZOO",
       "errors": [
         "(1,3): expected-doctype-but-got-chars",
-        "(1,13): illegal-codepoint-for-numeric-entity"
+        "(1,17): numeric-entity-without-semicolon",
+        "(1,17): illegal-codepoint-for-numeric-entity"
       ],
       "document": {
         "props": {
     {
       "data": "<plaintext><foo>",
       "errors": [
-        "16: End of file seen and there were open elements.",
-        "11: Unclosed element “plaintext”."
+        "(1,16): expected-closing-tag-but-got-eof"
       ],
       "fragment": {
         "name": "desc",
       "data": "<isindex>",
       "errors": [
         "(1,9): expected-doctype-but-got-start-tag",
-        "(1,9): deprecated-tag"
+        "(1,9): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
             "html": true,
             "head": true,
             "body": true,
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
+            "isindex": true
           }
         },
         "tree": [
                 "tag": "body",
                 "children": [
                   {
-                    "tag": "form",
-                    "children": [
-                      {
-                        "tag": "hr"
-                      },
-                      {
-                        "tag": "label",
-                        "children": [
-                          {
-                            "text": "This is a searchable index. Enter search keywords: "
-                          },
-                          {
-                            "tag": "input",
-                            "attrs": [
-                              {
-                                "name": "name",
-                                "value": "isindex"
-                              }
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "tag": "hr"
-                      }
-                    ]
+                    "tag": "isindex"
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<html><head></head><body><form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form></body></html>",
-        "noQuirksBodyHtml": "<form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form>"
+        "html": "<html><head></head><body><isindex></isindex></body></html>",
+        "noQuirksBodyHtml": "<isindex></isindex>"
       }
     },
     {
       "data": "<isindex name=\"A\" action=\"B\" prompt=\"C\" foo=\"D\">",
       "errors": [
         "(1,48): expected-doctype-but-got-start-tag",
-        "(1,48): deprecated-tag"
+        "(1,48): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
             "html": true,
             "head": true,
             "body": true,
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
+            "isindex": true
           }
         },
         "tree": [
                 "tag": "body",
                 "children": [
                   {
-                    "tag": "form",
+                    "tag": "isindex",
                     "attrs": [
                       {
                         "name": "action",
                         "value": "B"
-                      }
-                    ],
-                    "children": [
+                      },
                       {
-                        "tag": "hr"
+                        "name": "foo",
+                        "value": "D"
                       },
                       {
-                        "tag": "label",
-                        "children": [
-                          {
-                            "text": "C"
-                          },
-                          {
-                            "tag": "input",
-                            "attrs": [
-                              {
-                                "name": "foo",
-                                "value": "D"
-                              },
-                              {
-                                "name": "name",
-                                "value": "isindex"
-                              }
-                            ]
-                          }
-                        ]
+                        "name": "name",
+                        "value": "A"
                       },
                       {
-                        "tag": "hr"
+                        "name": "prompt",
+                        "value": "C"
                       }
                     ]
                   }
             ]
           }
         ],
-        "html": "<html><head></head><body><form action=\"B\"><hr><label>C<input name=\"isindex\" foo=\"D\"></label><hr></form></body></html>",
-        "noQuirksBodyHtml": "<form action=\"B\"><hr><label>C<input name=\"isindex\" foo=\"D\"></label><hr></form>"
+        "html": "<html><head></head><body><isindex name=\"A\" action=\"B\" prompt=\"C\" foo=\"D\"></isindex></body></html>",
+        "noQuirksBodyHtml": "<isindex name=\"A\" action=\"B\" prompt=\"C\" foo=\"D\"></isindex>"
       }
     },
     {
       "data": "<form><isindex>",
       "errors": [
         "(1,6): expected-doctype-but-got-start-tag",
-        "(1,15): deprecated-tag",
         "(1,15): expected-closing-tag-but-got-eof"
       ],
       "document": {
             "html": true,
             "head": true,
             "body": true,
-            "form": true
+            "form": true,
+            "isindex": true
           }
         },
         "tree": [
                 "tag": "body",
                 "children": [
                   {
-                    "tag": "form"
+                    "tag": "form",
+                    "children": [
+                      {
+                        "tag": "isindex"
+                      }
+                    ]
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<html><head></head><body><form></form></body></html>",
-        "noQuirksBodyHtml": "<form></form>"
+        "html": "<html><head></head><body><form><isindex></isindex></form></body></html>",
+        "noQuirksBodyHtml": "<form><isindex></isindex></form>"
+      }
+    },
+    {
+      "data": "<!doctype html><isindex>x</isindex>x",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "isindex": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "isindex",
+                    "children": [
+                      {
+                        "text": "x"
+                      }
+                    ]
+                  },
+                  {
+                    "text": "x"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><isindex>x</isindex>x</body></html>",
+        "noQuirksBodyHtml": "<isindex>x</isindex>x"
       }
     }
   ],
       }
     },
     {
-      "data": "<!doctype html><main><p>foo</main>bar",
-      "errors": [],
+      "data": "<!doctype html><main><p>foo</main>bar",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "main": true,
+            "p": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "main",
+                    "children": [
+                      {
+                        "tag": "p",
+                        "children": [
+                          {
+                            "text": "foo"
+                          }
+                        ]
+                      }
+                    ]
+                  },
+                  {
+                    "text": "bar"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><main><p>foo</p></main>bar</body></html>",
+        "noQuirksBodyHtml": "<main><p>foo</p></main>bar"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html>xxx<svg><x><g><a><main><b>",
+      "errors": [
+        " * (1,42) unexpected HTML-like start tag token in foreign content",
+        " * (1,42) unexpected end of file"
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "svg svg": true,
+            "svg x": true,
+            "svg g": true,
+            "svg a": true,
+            "svg main": true,
+            "b": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "text": "xxx"
+                  },
+                  {
+                    "tag": "svg",
+                    "ns": "http://www.w3.org/2000/svg",
+                    "children": [
+                      {
+                        "tag": "x",
+                        "ns": "http://www.w3.org/2000/svg",
+                        "children": [
+                          {
+                            "tag": "g",
+                            "ns": "http://www.w3.org/2000/svg",
+                            "children": [
+                              {
+                                "tag": "a",
+                                "ns": "http://www.w3.org/2000/svg",
+                                "children": [
+                                  {
+                                    "tag": "main",
+                                    "ns": "http://www.w3.org/2000/svg"
+                                  }
+                                ]
+                              }
+                            ]
+                          }
+                        ]
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "b"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body>xxx<svg><x><g><a><main></main></a></g></x></svg><b></b></body></html>",
+        "noQuirksBodyHtml": "xxx<svg><x><g><a><main><b></b></main></a></g></x></svg>"
+      }
+    }
+  ],
+  "math.dat": [
+    {
+      "data": "<math><tr><td><mo><tr>",
+      "errors": [],
+      "fragment": {
+        "name": "td"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math tr": true,
+            "math td": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "tr",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "td",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "children": [
+                      {
+                        "tag": "mo",
+                        "ns": "http://www.w3.org/1998/Math/MathML"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><tr><td><mo></mo></td></tr></math>",
+        "noQuirksBodyHtml": "<math><tr><td><mo></mo></td></tr></math>"
+      }
+    },
+    {
+      "data": "<math><tr><td><mo><tr>",
+      "errors": [],
+      "fragment": {
+        "name": "tr"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math tr": true,
+            "math td": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "tr",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "td",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "children": [
+                      {
+                        "tag": "mo",
+                        "ns": "http://www.w3.org/1998/Math/MathML"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><tr><td><mo></mo></td></tr></math>",
+        "noQuirksBodyHtml": "<math><tr><td><mo></mo></td></tr></math>"
+      }
+    },
+    {
+      "data": "<math><thead><mo><tbody>",
+      "errors": [],
+      "fragment": {
+        "name": "thead"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math thead": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "thead",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "mo",
+                    "ns": "http://www.w3.org/1998/Math/MathML"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><thead><mo></mo></thead></math>",
+        "noQuirksBodyHtml": "<math><thead><mo></mo></thead></math>"
+      }
+    },
+    {
+      "data": "<math><tfoot><mo><tbody>",
+      "errors": [],
+      "fragment": {
+        "name": "tfoot"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math tfoot": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "tfoot",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "mo",
+                    "ns": "http://www.w3.org/1998/Math/MathML"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><tfoot><mo></mo></tfoot></math>",
+        "noQuirksBodyHtml": "<math><tfoot><mo></mo></tfoot></math>"
+      }
+    },
+    {
+      "data": "<math><tbody><mo><tfoot>",
+      "errors": [],
+      "fragment": {
+        "name": "tbody"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math tbody": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "tbody",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "mo",
+                    "ns": "http://www.w3.org/1998/Math/MathML"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><tbody><mo></mo></tbody></math>",
+        "noQuirksBodyHtml": "<math><tbody><mo></mo></tbody></math>"
+      }
+    },
+    {
+      "data": "<math><tbody><mo></table>",
+      "errors": [],
+      "fragment": {
+        "name": "tbody"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math tbody": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "tbody",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "mo",
+                    "ns": "http://www.w3.org/1998/Math/MathML"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><tbody><mo></mo></tbody></math>",
+        "noQuirksBodyHtml": "<math><tbody><mo></mo></tbody></math>"
+      }
+    },
+    {
+      "data": "<math><thead><mo></table>",
+      "errors": [],
+      "fragment": {
+        "name": "tbody"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math thead": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "thead",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "mo",
+                    "ns": "http://www.w3.org/1998/Math/MathML"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><thead><mo></mo></thead></math>",
+        "noQuirksBodyHtml": "<math><thead><mo></mo></thead></math>"
+      }
+    },
+    {
+      "data": "<math><tfoot><mo></table>",
+      "errors": [],
+      "fragment": {
+        "name": "tbody"
+      },
+      "document": {
+        "props": {
+          "tags": {
+            "math math": true,
+            "math tfoot": true,
+            "math mo": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "math",
+            "ns": "http://www.w3.org/1998/Math/MathML",
+            "children": [
+              {
+                "tag": "tfoot",
+                "ns": "http://www.w3.org/1998/Math/MathML",
+                "children": [
+                  {
+                    "tag": "mo",
+                    "ns": "http://www.w3.org/1998/Math/MathML"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<math><tfoot><mo></mo></tfoot></math>",
+        "noQuirksBodyHtml": "<math><tfoot><mo></mo></tfoot></math>"
+      }
+    }
+  ],
+  "menuitem-element.dat": [
+    {
+      "data": "<menuitem>",
+      "errors": [
+        "10: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body><menuitem></menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem></menuitem>"
+      }
+    },
+    {
+      "data": "</menuitem>",
+      "errors": [
+        "11: End tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.",
+        "11: Stray end tag “menuitem”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body></body></html>",
+        "noQuirksBodyHtml": ""
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><body><menuitem>A",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "text": "A"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem>A</menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem>A</menuitem>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><body><menuitem>A<menuitem>B",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "text": "A"
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "text": "B"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem>A</menuitem><menuitem>B</menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem>A</menuitem><menuitem>B</menuitem>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><body><menuitem>A<menu>B</menu>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true,
+            "menu": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "text": "A"
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "menu",
+                    "children": [
+                      {
+                        "text": "B"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem>A</menuitem><menu>B</menu></body></html>",
+        "noQuirksBodyHtml": "<menuitem>A</menuitem><menu>B</menu>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><body><menuitem>A<hr>B",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true,
+            "hr": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "text": "A"
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "hr"
+                  },
+                  {
+                    "text": "B"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem>A</menuitem><hr>B</body></html>",
+        "noQuirksBodyHtml": "<menuitem>A</menuitem><hr>B"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><li><menuitem><li>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "li": true,
+            "menuitem": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "li",
+                    "children": [
+                      {
+                        "tag": "menuitem"
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "li"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><li><menuitem></menuitem></li><li></li></body></html>",
+        "noQuirksBodyHtml": "<li><menuitem></menuitem></li><li></li>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><menuitem><p></menuitem>x",
+      "errors": [
+        "39: Stray end tag “menuitem”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true,
+            "p": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "tag": "p",
+                        "children": [
+                          {
+                            "text": "x"
+                          }
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem><p>x</p></menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem><p>x</p></menuitem>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><p><b></p><menuitem>",
+      "errors": [
+        "25: End tag “p” seen, but there were open elements.",
+        "21: Unclosed element “b”.",
+        "35: End of file seen and there were open elements."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "p": true,
+            "b": true,
+            "menuitem": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "p",
+                    "children": [
+                      {
+                        "tag": "b"
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "b",
+                    "children": [
+                      {
+                        "tag": "menuitem"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><p><b></b></p><b><menuitem></menuitem></b></body></html>",
+        "noQuirksBodyHtml": "<p><b></b></p><b><menuitem></menuitem></b>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><menuitem><asdf></menuitem>x",
+      "errors": [
+        "40: End tag “menuitem” seen, but there were open elements.",
+        "31: Unclosed element “asdf”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true,
+            "asdf": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "tag": "asdf"
+                      }
+                    ]
+                  },
+                  {
+                    "text": "x"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem><asdf></asdf></menuitem>x</body></html>",
+        "noQuirksBodyHtml": "<menuitem><asdf></asdf></menuitem>x"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html></menuitem>",
+      "errors": [
+        "26: Stray end tag “menuitem”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body></body></html>",
+        "noQuirksBodyHtml": ""
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><html></menuitem>",
+      "errors": [
+        "26: Stray end tag “menuitem”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body></body></html>",
+        "noQuirksBodyHtml": ""
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><head></menuitem>",
+      "errors": [
+        "26: Stray end tag “menuitem”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body></body></html>",
+        "noQuirksBodyHtml": ""
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><select><menuitem></select>",
+      "errors": [
+        "33: Stray start tag “menuitem”."
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "select": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "select"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><select></select></body></html>",
+        "noQuirksBodyHtml": "<select></select>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><option><menuitem>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "option": true,
+            "menuitem": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "option",
+                    "children": [
+                      {
+                        "tag": "menuitem"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><option><menuitem></menuitem></option></body></html>",
+        "noQuirksBodyHtml": "<option><menuitem></menuitem></option>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><menuitem><option>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true,
+            "option": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "tag": "option"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem><option></option></menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem><option></option></menuitem>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><menuitem></body>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem></menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem></menuitem>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><menuitem></html>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem></menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem></menuitem>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><menuitem><p>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true,
+            "p": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "tag": "p"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem><p></p></menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem><p></p></menuitem>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><menuitem><li>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "menuitem": true,
+            "li": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "menuitem",
+                    "children": [
+                      {
+                        "tag": "li"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><menuitem><li></li></menuitem></body></html>",
+        "noQuirksBodyHtml": "<menuitem><li></li></menuitem>"
+      }
+    }
+  ],
+  "namespace-sensitivity.dat": [
+    {
+      "data": "<body><table><tr><td><svg><td><foreignObject><span></td>Foo",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "table": true,
+            "tbody": true,
+            "tr": true,
+            "td": true,
+            "svg svg": true,
+            "svg td": true,
+            "svg foreignObject": true,
+            "span": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "text": "Foo"
+                  },
+                  {
+                    "tag": "table",
+                    "children": [
+                      {
+                        "tag": "tbody",
+                        "children": [
+                          {
+                            "tag": "tr",
+                            "children": [
+                              {
+                                "tag": "td",
+                                "children": [
+                                  {
+                                    "tag": "svg",
+                                    "ns": "http://www.w3.org/2000/svg",
+                                    "children": [
+                                      {
+                                        "tag": "td",
+                                        "ns": "http://www.w3.org/2000/svg",
+                                        "children": [
+                                          {
+                                            "tag": "foreignObject",
+                                            "ns": "http://www.w3.org/2000/svg",
+                                            "children": [
+                                              {
+                                                "tag": "span"
+                                              }
+                                            ]
+                                          }
+                                        ]
+                                      }
+                                    ]
+                                  }
+                                ]
+                              }
+                            ]
+                          }
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body>Foo<table><tbody><tr><td><svg><td><foreignObject><span></span></foreignObject></td></svg></td></tr></tbody></table></body></html>",
+        "noQuirksBodyHtml": "Foo<table><tbody><tr><td><svg><td><foreignObject><span></span></foreignObject></td></svg></td></tr></tbody></table>"
+      }
+    }
+  ],
+  "noscript01.dat": [
+    {
+      "data": "<head><noscript><!doctype html><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 31 Unexpected DOCTYPE. Ignored."
+      ],
+      "script": "off",
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "comment": true
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head",
+                "children": [
+                  {
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "comment": "foo"
+                      }
+                    ]
+                  }
+                ]
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html><head><noscript><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><!--foo--></noscript>"
+      }
+    },
+    {
+      "data": "<head><noscript><html class=\"foo\"><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 34 html needs to be the first start tag."
+      ],
+      "script": "off",
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "comment": true
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "attrs": [
+              {
+                "name": "class",
+                "value": "foo"
+              }
+            ],
+            "children": [
+              {
+                "tag": "head",
+                "children": [
+                  {
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "comment": "foo"
+                      }
+                    ]
+                  }
+                ]
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html class=\"foo\"><head><noscript><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><!--foo--></noscript>"
+      }
+    },
+    {
+      "data": "<head><noscript></noscript>",
+      "errors": [
+        "(1,6): expected-doctype-but-got-tag"
+      ],
+      "script": "off",
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head",
+                "children": [
+                  {
+                    "tag": "noscript"
+                  }
+                ]
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html><head><noscript></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript></noscript>"
+      }
+    },
+    {
+      "data": "<head><noscript>   </noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE."
+      ],
+      "script": "off",
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "no_escape": true
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head",
+                "children": [
+                  {
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "text": "   ",
+                        "no_escape": true
+                      }
+                    ]
+                  }
+                ]
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html><head><noscript>   </noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript>   </noscript>"
+      }
+    },
+    {
+      "data": "<head><noscript><!--foo--></noscript>",
+      "errors": [
+        "(1,6): expected-doctype-but-got-tag"
+      ],
+      "script": "off",
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "comment": true
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head",
+                "children": [
+                  {
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "comment": "foo"
+                      }
+                    ]
+                  }
+                ]
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html><head><noscript><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><!--foo--></noscript>"
+      }
+    },
+    {
+      "data": "<head><noscript><basefont><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE."
+      ],
+      "script": "off",
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "basefont": true,
+            "body": true
+          },
+          "comment": true
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head",
+                "children": [
+                  {
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "tag": "basefont"
+                      },
+                      {
+                        "comment": "foo"
+                      }
+                    ]
+                  }
+                ]
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html><head><noscript><basefont><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><basefont><!--foo--></noscript>"
+      }
+    },
+    {
+      "data": "<head><noscript><bgsound><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE."
+      ],
+      "script": "off",
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "bgsound": true,
+            "body": true
+          },
+          "comment": true
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head",
+                "children": [
+                  {
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "tag": "bgsound"
+                      },
+                      {
+                        "comment": "foo"
+                      }
+                    ]
+                  }
+                ]
+              },
+              {
+                "tag": "body"
+              }
+            ]
+          }
+        ],
+        "html": "<html><head><noscript><bgsound><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><bgsound><!--foo--></noscript>"
+      }
+    },
+    {
+      "data": "<head><noscript><link><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
             "html": true,
             "head": true,
-            "body": true,
-            "main": true,
-            "p": true
+            "noscript": true,
+            "link": true,
+            "body": true
           },
-          "doctype": true
+          "comment": true
         },
         "tree": [
-          {
-            "doctype": "html"
-          },
           {
             "tag": "html",
             "children": [
               {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "main",
+                    "tag": "noscript",
                     "children": [
                       {
-                        "tag": "p",
-                        "children": [
-                          {
-                            "text": "foo"
-                          }
-                        ]
+                        "tag": "link"
+                      },
+                      {
+                        "comment": "foo"
                       }
                     ]
-                  },
-                  {
-                    "text": "bar"
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body><main><p>foo</p></main>bar</body></html>",
-        "noQuirksBodyHtml": "<main><p>foo</p></main>bar"
+        "html": "<html><head><noscript><link><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><link><!--foo--></noscript>"
       }
     },
     {
-      "data": "<!DOCTYPE html>xxx<svg><x><g><a><main><b>",
+      "data": "<head><noscript><meta><!--foo--></noscript>",
       "errors": [
-        " * (1,42) unexpected HTML-like start tag token in foreign content",
-        " * (1,42) unexpected end of file"
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE."
       ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
             "html": true,
             "head": true,
-            "body": true,
-            "svg svg": true,
-            "svg x": true,
-            "svg g": true,
-            "svg a": true,
-            "svg main": true,
-            "b": true
+            "noscript": true,
+            "meta": true,
+            "body": true
           },
-          "doctype": true
+          "comment": true
         },
         "tree": [
-          {
-            "doctype": "html"
-          },
           {
             "tag": "html",
             "children": [
               {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
+                "tag": "head",
                 "children": [
                   {
-                    "text": "xxx"
-                  },
-                  {
-                    "tag": "svg",
-                    "ns": "http://www.w3.org/2000/svg",
+                    "tag": "noscript",
                     "children": [
                       {
-                        "tag": "x",
-                        "ns": "http://www.w3.org/2000/svg",
-                        "children": [
-                          {
-                            "tag": "g",
-                            "ns": "http://www.w3.org/2000/svg",
-                            "children": [
-                              {
-                                "tag": "a",
-                                "ns": "http://www.w3.org/2000/svg",
-                                "children": [
-                                  {
-                                    "tag": "main",
-                                    "ns": "http://www.w3.org/2000/svg"
-                                  }
-                                ]
-                              }
-                            ]
-                          }
-                        ]
+                        "tag": "meta"
+                      },
+                      {
+                        "comment": "foo"
                       }
                     ]
-                  },
-                  {
-                    "tag": "b"
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body>xxx<svg><x><g><a><main></main></a></g></x></svg><b></b></body></html>",
-        "noQuirksBodyHtml": "xxx<svg><x><g><a><main><b></b></main></a></g></x></svg>"
+        "html": "<html><head><noscript><meta><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><meta><!--foo--></noscript>"
       }
-    }
-  ],
-  "math.dat": [
+    },
     {
-      "data": "<math><tr><td><mo><tr>",
-      "errors": [],
-      "fragment": {
-        "name": "td"
-      },
+      "data": "<head><noscript><noframes>XXX</noscript></noframes></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math tr": true,
-            "math td": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "noframes": true,
+            "body": true
+          },
+          "no_escape": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "tr",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "td",
-                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "tag": "noscript",
                     "children": [
                       {
-                        "tag": "mo",
-                        "ns": "http://www.w3.org/1998/Math/MathML"
+                        "tag": "noframes",
+                        "children": [
+                          {
+                            "text": "XXX</noscript>",
+                            "no_escape": true
+                          }
+                        ]
                       }
                     ]
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<math><tr><td><mo></mo></td></tr></math>",
-        "noQuirksBodyHtml": "<math><tr><td><mo></mo></td></tr></math>"
+        "html": "<html><head><noscript><noframes>XXX</noscript></noframes></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><noframes>XXX</noscript></noframes></noscript>"
       }
     },
     {
-      "data": "<math><tr><td><mo><tr>",
-      "errors": [],
-      "fragment": {
-        "name": "tr"
-      },
+      "data": "<head><noscript><style>XXX</style></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math tr": true,
-            "math td": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "style": true,
+            "body": true
+          },
+          "no_escape": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "tr",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "td",
-                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "tag": "noscript",
                     "children": [
                       {
-                        "tag": "mo",
-                        "ns": "http://www.w3.org/1998/Math/MathML"
+                        "tag": "style",
+                        "children": [
+                          {
+                            "text": "XXX",
+                            "no_escape": true
+                          }
+                        ]
                       }
                     ]
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<math><tr><td><mo></mo></td></tr></math>",
-        "noQuirksBodyHtml": "<math><tr><td><mo></mo></td></tr></math>"
+        "html": "<html><head><noscript><style>XXX</style></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><style>XXX</style></noscript>"
       }
     },
     {
-      "data": "<math><thead><mo><tbody>",
-      "errors": [],
-      "fragment": {
-        "name": "thead"
-      },
+      "data": "<head><noscript></br><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 21 Element br not allowed in a inhead-noscript context",
+        "Line: 1 Col: 21 Unexpected end tag (br). Treated as br element.",
+        "Line: 1 Col: 42 Unexpected end tag (noscript). Ignored."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math thead": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true,
+            "br": true
+          },
+          "comment": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "thead",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "mo",
-                    "ns": "http://www.w3.org/1998/Math/MathML"
+                    "tag": "noscript"
+                  }
+                ]
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "br"
+                  },
+                  {
+                    "comment": "foo"
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<math><thead><mo></mo></thead></math>",
-        "noQuirksBodyHtml": "<math><thead><mo></mo></thead></math>"
+        "html": "<html><head><noscript></noscript></head><body><br><!--foo--></body></html>",
+        "noQuirksBodyHtml": "<noscript><br><!--foo--></noscript>"
       }
     },
     {
-      "data": "<math><tfoot><mo><tbody>",
-      "errors": [],
-      "fragment": {
-        "name": "tfoot"
-      },
+      "data": "<head><noscript><head class=\"foo\"><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 34 Unexpected start tag (head)."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math tfoot": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "comment": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "tfoot",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "mo",
-                    "ns": "http://www.w3.org/1998/Math/MathML"
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "comment": "foo"
+                      }
+                    ]
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<math><tfoot><mo></mo></tfoot></math>",
-        "noQuirksBodyHtml": "<math><tfoot><mo></mo></tfoot></math>"
+        "html": "<html><head><noscript><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><!--foo--></noscript>"
       }
     },
     {
-      "data": "<math><tbody><mo><tfoot>",
-      "errors": [],
-      "fragment": {
-        "name": "tbody"
-      },
+      "data": "<head><noscript><noscript class=\"foo\"><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 34 Unexpected start tag (noscript)."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math tbody": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "comment": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "tbody",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "mo",
-                    "ns": "http://www.w3.org/1998/Math/MathML"
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "comment": "foo"
+                      }
+                    ]
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<math><tbody><mo></mo></tbody></math>",
-        "noQuirksBodyHtml": "<math><tbody><mo></mo></tbody></math>"
+        "html": "<html><head><noscript><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><noscript class=\"foo\"><!--foo--></noscript></noscript>"
       }
     },
     {
-      "data": "<math><tbody><mo></table>",
-      "errors": [],
-      "fragment": {
-        "name": "tbody"
-      },
+      "data": "<head><noscript></p><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 20 Unexpected end tag (p). Ignored."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math tbody": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "comment": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "tbody",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "mo",
-                    "ns": "http://www.w3.org/1998/Math/MathML"
+                    "tag": "noscript",
+                    "children": [
+                      {
+                        "comment": "foo"
+                      }
+                    ]
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<math><tbody><mo></mo></tbody></math>",
-        "noQuirksBodyHtml": "<math><tbody><mo></mo></tbody></math>"
+        "html": "<html><head><noscript><!--foo--></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript><p></p><!--foo--></noscript>"
       }
     },
     {
-      "data": "<math><thead><mo></table>",
-      "errors": [],
-      "fragment": {
-        "name": "tbody"
-      },
+      "data": "<head><noscript><p><!--foo--></noscript>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 19 Element p not allowed in a inhead-noscript context",
+        "Line: 1 Col: 40 Unexpected end tag (noscript). Ignored."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math thead": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true,
+            "p": true
+          },
+          "comment": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "thead",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "mo",
-                    "ns": "http://www.w3.org/1998/Math/MathML"
+                    "tag": "noscript"
+                  }
+                ]
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "p",
+                    "children": [
+                      {
+                        "comment": "foo"
+                      }
+                    ]
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<math><thead><mo></mo></thead></math>",
-        "noQuirksBodyHtml": "<math><thead><mo></mo></thead></math>"
+        "html": "<html><head><noscript></noscript></head><body><p><!--foo--></p></body></html>",
+        "noQuirksBodyHtml": "<noscript><p><!--foo--></p></noscript>"
       }
     },
     {
-      "data": "<math><tfoot><mo></table>",
-      "errors": [],
-      "fragment": {
-        "name": "tbody"
-      },
+      "data": "<head><noscript>XXX<!--foo--></noscript></head>",
+      "errors": [
+        "Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.",
+        "Line: 1 Col: 19 Unexpected non-space character. Expected inhead-noscript content",
+        "Line: 1 Col: 30 Unexpected end tag (noscript). Ignored.",
+        "Line: 1 Col: 37 Unexpected end tag (head). Ignored."
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
-            "math math": true,
-            "math tfoot": true,
-            "math mo": true
-          }
+            "html": true,
+            "head": true,
+            "noscript": true,
+            "body": true
+          },
+          "comment": true
         },
         "tree": [
           {
-            "tag": "math",
-            "ns": "http://www.w3.org/1998/Math/MathML",
+            "tag": "html",
             "children": [
               {
-                "tag": "tfoot",
-                "ns": "http://www.w3.org/1998/Math/MathML",
+                "tag": "head",
                 "children": [
                   {
-                    "tag": "mo",
-                    "ns": "http://www.w3.org/1998/Math/MathML"
+                    "tag": "noscript"
+                  }
+                ]
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "text": "XXX"
+                  },
+                  {
+                    "comment": "foo"
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<math><tfoot><mo></mo></tfoot></math>",
-        "noQuirksBodyHtml": "<math><tfoot><mo></mo></tfoot></math>"
+        "html": "<html><head><noscript></noscript></head><body>XXX<!--foo--></body></html>",
+        "noQuirksBodyHtml": "<noscript>XXX<!--foo--></noscript>"
       }
-    }
-  ],
-  "namespace-sensitivity.dat": [
+    },
     {
-      "data": "<body><table><tr><td><svg><td><foreignObject><span></td>Foo",
-      "errors": [],
+      "data": "<head><noscript>",
+      "errors": [
+        "(1,6): expected-doctype-but-got-tag",
+        "(1,6): eof-in-head-noscript"
+      ],
+      "script": "off",
       "document": {
         "props": {
           "tags": {
             "html": true,
             "head": true,
-            "body": true,
-            "table": true,
-            "tbody": true,
-            "tr": true,
-            "td": true,
-            "svg svg": true,
-            "svg td": true,
-            "svg foreignObject": true,
-            "span": true
+            "noscript": true,
+            "body": true
           }
         },
         "tree": [
             "tag": "html",
             "children": [
               {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
+                "tag": "head",
                 "children": [
                   {
-                    "text": "Foo"
-                  },
-                  {
-                    "tag": "table",
-                    "children": [
-                      {
-                        "tag": "tbody",
-                        "children": [
-                          {
-                            "tag": "tr",
-                            "children": [
-                              {
-                                "tag": "td",
-                                "children": [
-                                  {
-                                    "tag": "svg",
-                                    "ns": "http://www.w3.org/2000/svg",
-                                    "children": [
-                                      {
-                                        "tag": "td",
-                                        "ns": "http://www.w3.org/2000/svg",
-                                        "children": [
-                                          {
-                                            "tag": "foreignObject",
-                                            "ns": "http://www.w3.org/2000/svg",
-                                            "children": [
-                                              {
-                                                "tag": "span"
-                                              }
-                                            ]
-                                          }
-                                        ]
-                                      }
-                                    ]
-                                  }
-                                ]
-                              }
-                            ]
-                          }
-                        ]
-                      }
-                    ]
+                    "tag": "noscript"
                   }
                 ]
+              },
+              {
+                "tag": "body"
               }
             ]
           }
         ],
-        "html": "<html><head></head><body>Foo<table><tbody><tr><td><svg><td><foreignObject><span></span></foreignObject></td></svg></td></tr></tbody></table></body></html>",
-        "noQuirksBodyHtml": "Foo<table><tbody><tr><td><svg><td><foreignObject><span></span></foreignObject></td></svg></td></tr></tbody></table>"
+        "html": "<html><head><noscript></noscript></head><body></body></html>",
+        "noQuirksBodyHtml": "<noscript></noscript>"
       }
     }
   ],
             "body": true,
             "pre": true
           },
-          "doctype": true,
-          "extraNL": true
+          "doctype": true
         },
         "tree": [
           {
                     "tag": "pre",
                     "children": [
                       {
-                        "text": "\nA",
-                        "extraNL": true
+                        "text": "\nA"
                       }
                     ]
                   }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body><pre>\n\nA</pre></body></html>",
-        "noQuirksBodyHtml": "<pre>\n\nA</pre>"
+        "html": "<!DOCTYPE html><html><head></head><body><pre>\nA</pre></body></html>",
+        "noQuirksBodyHtml": "<pre>\nA</pre>"
       }
     },
     {
             "body": true,
             "pre": true
           },
-          "doctype": true,
-          "extraNL": true
+          "doctype": true
         },
         "tree": [
           {
                     "tag": "pre",
                     "children": [
                       {
-                        "text": "\nA",
-                        "extraNL": true
+                        "text": "\nA"
                       }
                     ]
                   }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body><pre>\n\nA</pre></body></html>",
-        "noQuirksBodyHtml": "<pre>\n\nA</pre>"
+        "html": "<!DOCTYPE html><html><head></head><body><pre>\nA</pre></body></html>",
+        "noQuirksBodyHtml": "<pre>\nA</pre>"
       }
     },
     {
     {
       "data": "<html><ruby>a<rb>b<span></ruby></html>",
       "errors": [
-        "(1,6): expected-doctype-but-got-start-tag"
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,31): unexpected-end-tag"
       ],
       "document": {
         "props": {
     {
       "data": "<html><ruby>a<rt>b<span></ruby></html>",
       "errors": [
-        "(1,6): expected-doctype-but-got-start-tag"
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,31): unexpected-end-tag"
       ],
       "document": {
         "props": {
     {
       "data": "<html><ruby>a<rp>b<span></ruby></html>",
       "errors": [
-        "(1,6): expected-doctype-but-got-start-tag"
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,31): unexpected-end-tag"
       ],
       "document": {
         "props": {
         "(1,11): unexpected-start-tag-in-select",
         "(1,27): unexpected-select-in-select",
         "(1,39): unexpected-end-tag",
-        "(1,48): unexpected-end-tag",
-        "(1,49): expected-closing-tag-but-got-eof"
+        "(1,48): unexpected-end-tag"
       ],
       "document": {
         "props": {
         "(1,11): unexpected-start-tag-in-select",
         "(1,27): unexpected-select-in-select",
         "(1,39): unexpected-end-tag",
-        "(1,48): unexpected-end-tag",
-        "(1,48): expected-closing-tag-but-got-eof"
+        "(1,48): unexpected-end-tag"
       ],
       "document": {
         "props": {
         "noQuirksBodyHtml": "<math attributename=\"\" attributetype=\"\" basefrequency=\"\" baseprofile=\"\" calcmode=\"\" clippathunits=\"\" diffuseconstant=\"\" edgemode=\"\" filterunits=\"\" glyphref=\"\" gradienttransform=\"\" gradientunits=\"\" kernelmatrix=\"\" kernelunitlength=\"\" keypoints=\"\" keysplines=\"\" keytimes=\"\" lengthadjust=\"\" limitingconeangle=\"\" markerheight=\"\" markerunits=\"\" markerwidth=\"\" maskcontentunits=\"\" maskunits=\"\" numoctaves=\"\" pathlength=\"\" patterncontentunits=\"\" patterntransform=\"\" patternunits=\"\" pointsatx=\"\" pointsaty=\"\" pointsatz=\"\" preservealpha=\"\" preserveaspectratio=\"\" primitiveunits=\"\" refx=\"\" refy=\"\" repeatcount=\"\" repeatdur=\"\" requiredextensions=\"\" requiredfeatures=\"\" specularconstant=\"\" specularexponent=\"\" spreadmethod=\"\" startoffset=\"\" stddeviation=\"\" stitchtiles=\"\" surfacescale=\"\" systemlanguage=\"\" tablevalues=\"\" targetx=\"\" targety=\"\" textlength=\"\" viewbox=\"\" viewtarget=\"\" xchannelselector=\"\" ychannelselector=\"\" zoomandpan=\"\"></math>"
       }
     },
+    {
+      "data": "<!DOCTYPE html><body><svg contentScriptType='' contentStyleType='' externalResourcesRequired='' filterRes=''></svg>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "svg svg": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "svg",
+                    "ns": "http://www.w3.org/2000/svg",
+                    "attrs": [
+                      {
+                        "name": "contentscripttype",
+                        "value": ""
+                      },
+                      {
+                        "name": "contentstyletype",
+                        "value": ""
+                      },
+                      {
+                        "name": "externalresourcesrequired",
+                        "value": ""
+                      },
+                      {
+                        "name": "filterres",
+                        "value": ""
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><svg contentscripttype=\"\" contentstyletype=\"\" externalresourcesrequired=\"\" filterres=\"\"></svg></body></html>",
+        "noQuirksBodyHtml": "<svg contentScriptType=\"\" contentStyleType=\"\" externalResourcesRequired=\"\" filterres=\"\"></svg>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><body><svg CONTENTSCRIPTTYPE='' CONTENTSTYLETYPE='' EXTERNALRESOURCESREQUIRED='' FILTERRES=''></svg>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "svg svg": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "svg",
+                    "ns": "http://www.w3.org/2000/svg",
+                    "attrs": [
+                      {
+                        "name": "contentscripttype",
+                        "value": ""
+                      },
+                      {
+                        "name": "contentstyletype",
+                        "value": ""
+                      },
+                      {
+                        "name": "externalresourcesrequired",
+                        "value": ""
+                      },
+                      {
+                        "name": "filterres",
+                        "value": ""
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><svg contentscripttype=\"\" contentstyletype=\"\" externalresourcesrequired=\"\" filterres=\"\"></svg></body></html>",
+        "noQuirksBodyHtml": "<svg contentScriptType=\"\" contentStyleType=\"\" externalResourcesRequired=\"\" filterres=\"\"></svg>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><body><svg contentscripttype='' contentstyletype='' externalresourcesrequired='' filterres=''></svg>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "svg svg": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "svg",
+                    "ns": "http://www.w3.org/2000/svg",
+                    "attrs": [
+                      {
+                        "name": "contentscripttype",
+                        "value": ""
+                      },
+                      {
+                        "name": "contentstyletype",
+                        "value": ""
+                      },
+                      {
+                        "name": "externalresourcesrequired",
+                        "value": ""
+                      },
+                      {
+                        "name": "filterres",
+                        "value": ""
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><svg contentscripttype=\"\" contentstyletype=\"\" externalresourcesrequired=\"\" filterres=\"\"></svg></body></html>",
+        "noQuirksBodyHtml": "<svg contentScriptType=\"\" contentStyleType=\"\" externalResourcesRequired=\"\" filterres=\"\"></svg>"
+      }
+    },
+    {
+      "data": "<!DOCTYPE html><body><math contentScriptType='' contentStyleType='' externalResourcesRequired='' filterRes=''></math>",
+      "errors": [],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "math math": true
+          },
+          "doctype": true
+        },
+        "tree": [
+          {
+            "doctype": "html"
+          },
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "math",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "attrs": [
+                      {
+                        "name": "contentscripttype",
+                        "value": ""
+                      },
+                      {
+                        "name": "contentstyletype",
+                        "value": ""
+                      },
+                      {
+                        "name": "externalresourcesrequired",
+                        "value": ""
+                      },
+                      {
+                        "name": "filterres",
+                        "value": ""
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<!DOCTYPE html><html><head></head><body><math contentscripttype=\"\" contentstyletype=\"\" externalresourcesrequired=\"\" filterres=\"\"></math></body></html>",
+        "noQuirksBodyHtml": "<math contentscripttype=\"\" contentstyletype=\"\" externalresourcesrequired=\"\" filterres=\"\"></math>"
+      }
+    },
     {
       "data": "<!DOCTYPE html><body><svg><altGlyph /><altGlyphDef /><altGlyphItem /><animateColor /><animateMotion /><animateTransform /><clipPath /><feBlend /><feColorMatrix /><feComponentTransfer /><feComposite /><feConvolveMatrix /><feDiffuseLighting /><feDisplacementMap /><feDistantLight /><feFlood /><feFuncA /><feFuncB /><feFuncG /><feFuncR /><feGaussianBlur /><feImage /><feMerge /><feMergeNode /><feMorphology /><feOffset /><fePointLight /><feSpecularLighting /><feSpotLight /><feTile /><feTurbulence /><foreignObject /><glyphRef /><linearGradient /><radialGradient /><textPath /></svg>",
       "errors": [],
     {
       "data": "<!doctype html><script><!",
       "errors": [
+        "(1,25): expected-script-data-but-got-eof",
         "(1,25): expected-named-closing-tag-but-got-eof"
       ],
       "document": {
           }
         ],
         "html": "<!DOCTYPE html><html><head><noscript><!--<noscript></noscript></head><body>--&gt;</body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--&lt;noscript&gt;</noscript>--&gt;"
+        "noQuirksBodyHtml": "<noscript><!--<noscript></noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<!DOCTYPE html><html><head><noscript><!--<noscript></noscript>--></noscript></head><body></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--&lt;noscript&gt;</noscript>--&gt;"
+        "noQuirksBodyHtml": "<noscript><!--<noscript></noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<!DOCTYPE html><html><head><noscript><!--</noscript></head><body>X<noscript>--></noscript></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--</noscript>X<noscript>--&gt;</noscript>"
+        "noQuirksBodyHtml": "<noscript><!--</noscript>X<noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<!DOCTYPE html><html><head><noscript><!--</noscript>X<noscript>--></noscript></head><body></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--</noscript>X<noscript>--&gt;</noscript>"
+        "noQuirksBodyHtml": "<noscript><!--</noscript>X<noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<!DOCTYPE html><html><head><noscript><iframe></noscript></head><body>X</body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;iframe&gt;</noscript>X"
+        "noQuirksBodyHtml": "<noscript><iframe></noscript>X</iframe></noscript>"
       }
     },
     {
           }
         ],
         "html": "<!DOCTYPE html><html><head><noscript></noscript></head><body><iframe></noscript>X</iframe></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;iframe&gt;</noscript>X"
+        "noQuirksBodyHtml": "<noscript><iframe></noscript>X</iframe></noscript>"
       }
     },
     {
       "data": "<script><!",
       "errors": [
         "(1,8): expected-doctype-but-got-start-tag",
+        "(1,10): expected-script-data-but-got-eof",
         "(1,10): expected-named-closing-tag-but-got-eof"
       ],
       "document": {
           }
         ],
         "html": "<html><head><noscript><!--<noscript></noscript></head><body>--&gt;</body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--&lt;noscript&gt;</noscript>--&gt;"
+        "noQuirksBodyHtml": "<noscript><!--<noscript></noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<html><head><noscript><!--<noscript></noscript>--></noscript></head><body></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--&lt;noscript&gt;</noscript>--&gt;"
+        "noQuirksBodyHtml": "<noscript><!--<noscript></noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<html><head><noscript><!--</noscript></head><body>X<noscript>--></noscript></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--</noscript>X<noscript>--&gt;</noscript>"
+        "noQuirksBodyHtml": "<noscript><!--</noscript>X<noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<html><head><noscript><!--</noscript>X<noscript>--></noscript></head><body></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--</noscript>X<noscript>--&gt;</noscript>"
+        "noQuirksBodyHtml": "<noscript><!--</noscript>X<noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<html><head><noscript><iframe></noscript></head><body>X</body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;iframe&gt;</noscript>X"
+        "noQuirksBodyHtml": "<noscript><iframe></noscript>X</iframe></noscript>"
       }
     },
     {
           }
         ],
         "html": "<html><head><noscript></noscript></head><body><iframe></noscript>X</iframe></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;iframe&gt;</noscript>X"
+        "noQuirksBodyHtml": "<noscript><iframe></noscript>X</iframe></noscript>"
       }
     },
     {
         "noQuirksBodyHtml": "<p></p><h1></h1>"
       }
     },
-    {
-      "data": "<!doctype html><form><isindex>",
-      "errors": [
-        "(1,30): deprecated-tag",
-        "(1,30): expected-closing-tag-but-got-eof"
-      ],
-      "document": {
-        "props": {
-          "tags": {
-            "html": true,
-            "head": true,
-            "body": true,
-            "form": true
-          },
-          "doctype": true
-        },
-        "tree": [
-          {
-            "doctype": "html"
-          },
-          {
-            "tag": "html",
-            "children": [
-              {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
-                "children": [
-                  {
-                    "tag": "form"
-                  }
-                ]
-              }
-            ]
-          }
-        ],
-        "html": "<!DOCTYPE html><html><head></head><body><form></form></body></html>",
-        "noQuirksBodyHtml": "<form></form>"
-      }
-    },
-    {
-      "data": "<!doctype html><isindex action=\"POST\">",
-      "errors": [
-        "(1,38): deprecated-tag"
-      ],
-      "document": {
-        "props": {
-          "tags": {
-            "html": true,
-            "head": true,
-            "body": true,
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
-          },
-          "doctype": true
-        },
-        "tree": [
-          {
-            "doctype": "html"
-          },
-          {
-            "tag": "html",
-            "children": [
-              {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
-                "children": [
-                  {
-                    "tag": "form",
-                    "attrs": [
-                      {
-                        "name": "action",
-                        "value": "POST"
-                      }
-                    ],
-                    "children": [
-                      {
-                        "tag": "hr"
-                      },
-                      {
-                        "tag": "label",
-                        "children": [
-                          {
-                            "text": "This is a searchable index. Enter search keywords: "
-                          },
-                          {
-                            "tag": "input",
-                            "attrs": [
-                              {
-                                "name": "name",
-                                "value": "isindex"
-                              }
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "tag": "hr"
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        ],
-        "html": "<!DOCTYPE html><html><head></head><body><form action=\"POST\"><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form></body></html>",
-        "noQuirksBodyHtml": "<form action=\"POST\"><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form>"
-      }
-    },
-    {
-      "data": "<!doctype html><isindex prompt=\"this is isindex\">",
-      "errors": [
-        "(1,49): deprecated-tag"
-      ],
-      "document": {
-        "props": {
-          "tags": {
-            "html": true,
-            "head": true,
-            "body": true,
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
-          },
-          "doctype": true
-        },
-        "tree": [
-          {
-            "doctype": "html"
-          },
-          {
-            "tag": "html",
-            "children": [
-              {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
-                "children": [
-                  {
-                    "tag": "form",
-                    "children": [
-                      {
-                        "tag": "hr"
-                      },
-                      {
-                        "tag": "label",
-                        "children": [
-                          {
-                            "text": "this is isindex"
-                          },
-                          {
-                            "tag": "input",
-                            "attrs": [
-                              {
-                                "name": "name",
-                                "value": "isindex"
-                              }
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "tag": "hr"
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        ],
-        "html": "<!DOCTYPE html><html><head></head><body><form><hr><label>this is isindex<input name=\"isindex\"></label><hr></form></body></html>",
-        "noQuirksBodyHtml": "<form><hr><label>this is isindex<input name=\"isindex\"></label><hr></form>"
-      }
-    },
     {
       "data": "<!doctype html><isindex type=\"hidden\">",
       "errors": [
-        "(1,38): deprecated-tag"
-      ],
-      "document": {
-        "props": {
-          "tags": {
-            "html": true,
-            "head": true,
-            "body": true,
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
-          },
-          "doctype": true
-        },
-        "tree": [
-          {
-            "doctype": "html"
-          },
-          {
-            "tag": "html",
-            "children": [
-              {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
-                "children": [
-                  {
-                    "tag": "form",
-                    "children": [
-                      {
-                        "tag": "hr"
-                      },
-                      {
-                        "tag": "label",
-                        "children": [
-                          {
-                            "text": "This is a searchable index. Enter search keywords: "
-                          },
-                          {
-                            "tag": "input",
-                            "attrs": [
-                              {
-                                "name": "name",
-                                "value": "isindex"
-                              },
-                              {
-                                "name": "type",
-                                "value": "hidden"
-                              }
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "tag": "hr"
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        ],
-        "html": "<!DOCTYPE html><html><head></head><body><form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\" type=\"hidden\"></label><hr></form></body></html>",
-        "noQuirksBodyHtml": "<form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\" type=\"hidden\"></label><hr></form>"
-      }
-    },
-    {
-      "data": "<!doctype html><isindex name=\"foo\">",
-      "errors": [
-        "(1,35): deprecated-tag"
+        "(1,38): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
             "html": true,
             "head": true,
             "body": true,
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
+            "isindex": true
           },
           "doctype": true
         },
                 "tag": "body",
                 "children": [
                   {
-                    "tag": "form",
-                    "children": [
-                      {
-                        "tag": "hr"
-                      },
-                      {
-                        "tag": "label",
-                        "children": [
-                          {
-                            "text": "This is a searchable index. Enter search keywords: "
-                          },
-                          {
-                            "tag": "input",
-                            "attrs": [
-                              {
-                                "name": "name",
-                                "value": "isindex"
-                              }
-                            ]
-                          }
-                        ]
-                      },
+                    "tag": "isindex",
+                    "attrs": [
                       {
-                        "tag": "hr"
+                        "name": "type",
+                        "value": "hidden"
                       }
                     ]
                   }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body><form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form></body></html>",
-        "noQuirksBodyHtml": "<form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form>"
+        "html": "<!DOCTYPE html><html><head></head><body><isindex type=\"hidden\"></isindex></body></html>",
+        "noQuirksBodyHtml": "<isindex type=\"hidden\"></isindex>"
       }
     },
     {
     {
       "data": "<!DOCTYPE html><select><optgroup><option></optgroup><option><select><option>",
       "errors": [
-        "(1,68): unexpected-select-in-select",
-        "(1,76): expected-closing-tag-but-got-eof"
+        "(1,68): unexpected-select-in-select"
       ],
       "document": {
         "props": {
         "noQuirksBodyHtml": "<!-- XXX - XXX - XXX -->"
       }
     },
-    {
-      "data": "<isindex test=x name=x>",
-      "errors": [
-        "(1,23): expected-doctype-but-got-start-tag",
-        "(1,23): deprecated-tag"
-      ],
-      "document": {
-        "props": {
-          "tags": {
-            "html": true,
-            "head": true,
-            "body": true,
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
-          }
-        },
-        "tree": [
-          {
-            "tag": "html",
-            "children": [
-              {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
-                "children": [
-                  {
-                    "tag": "form",
-                    "children": [
-                      {
-                        "tag": "hr"
-                      },
-                      {
-                        "tag": "label",
-                        "children": [
-                          {
-                            "text": "This is a searchable index. Enter search keywords: "
-                          },
-                          {
-                            "tag": "input",
-                            "attrs": [
-                              {
-                                "name": "name",
-                                "value": "isindex"
-                              },
-                              {
-                                "name": "test",
-                                "value": "x"
-                              }
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "tag": "hr"
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        ],
-        "html": "<html><head></head><body><form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\" test=\"x\"></label><hr></form></body></html>",
-        "noQuirksBodyHtml": "<form><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\" test=\"x\"></label><hr></form>"
-      }
-    },
     {
       "data": "test\ntest",
       "errors": [
     {
       "data": "<option><option>",
       "errors": [
-        "(1,8): expected-doctype-but-got-start-tag",
-        "(1,16): expected-closing-tag-but-got-eof"
+        "(1,8): expected-doctype-but-got-start-tag"
       ],
       "document": {
         "props": {
                     "children": [
                       {
                         "tag": "annotation-xml",
-                        "ns": "http://www.w3.org/1998/Math/MathML"
+                        "ns": "http://www.w3.org/1998/Math/MathML"
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "div"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body><math><annotation-xml></annotation-xml></math><div></div></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml><div></div></annotation-xml></math>"
+      }
+    },
+    {
+      "data": "<math><annotation-xml encoding=\"application/svg+xml\"><div>",
+      "errors": [
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,58): unexpected-html-element-in-foreign-content",
+        "(1,58): expected-closing-tag-but-got-eof"
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "math math": true,
+            "math annotation-xml": true,
+            "div": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "math",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "children": [
+                      {
+                        "tag": "annotation-xml",
+                        "ns": "http://www.w3.org/1998/Math/MathML",
+                        "attrs": [
+                          {
+                            "name": "encoding",
+                            "value": "application/svg+xml"
+                          }
+                        ]
+                      }
+                    ]
+                  },
+                  {
+                    "tag": "div"
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body><math><annotation-xml encoding=\"application/svg+xml\"></annotation-xml></math><div></div></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"application/svg+xml\"><div></div></annotation-xml></math>"
+      }
+    },
+    {
+      "data": "<math><annotation-xml encoding=\"application/xhtml+xml\"><div>",
+      "errors": [
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,60): expected-closing-tag-but-got-eof"
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "math math": true,
+            "math annotation-xml": true,
+            "div": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "math",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "children": [
+                      {
+                        "tag": "annotation-xml",
+                        "ns": "http://www.w3.org/1998/Math/MathML",
+                        "attrs": [
+                          {
+                            "name": "encoding",
+                            "value": "application/xhtml+xml"
+                          }
+                        ],
+                        "children": [
+                          {
+                            "tag": "div"
+                          }
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body><math><annotation-xml encoding=\"application/xhtml+xml\"><div></div></annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"application/xhtml+xml\"><div></div></annotation-xml></math>"
+      }
+    },
+    {
+      "data": "<math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div>",
+      "errors": [
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,60): expected-closing-tag-but-got-eof"
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "math math": true,
+            "math annotation-xml": true,
+            "div": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "math",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "children": [
+                      {
+                        "tag": "annotation-xml",
+                        "ns": "http://www.w3.org/1998/Math/MathML",
+                        "attrs": [
+                          {
+                            "name": "encoding",
+                            "value": "aPPlication/xhtmL+xMl"
+                          }
+                        ],
+                        "children": [
+                          {
+                            "tag": "div"
+                          }
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body><math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div></div></annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div></div></annotation-xml></math>"
+      }
+    },
+    {
+      "data": "<math><annotation-xml encoding=\"text/html\"><div>",
+      "errors": [
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,48): expected-closing-tag-but-got-eof"
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "math math": true,
+            "math annotation-xml": true,
+            "div": true
+          }
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "math",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "children": [
+                      {
+                        "tag": "annotation-xml",
+                        "ns": "http://www.w3.org/1998/Math/MathML",
+                        "attrs": [
+                          {
+                            "name": "encoding",
+                            "value": "text/html"
+                          }
+                        ],
+                        "children": [
+                          {
+                            "tag": "div"
+                          }
+                        ]
                       }
                     ]
-                  },
-                  {
-                    "tag": "div"
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<html><head></head><body><math><annotation-xml></annotation-xml></math><div></div></body></html>",
-        "noQuirksBodyHtml": "<math><annotation-xml><div></div></annotation-xml></math>"
+        "html": "<html><head></head><body><math><annotation-xml encoding=\"text/html\"><div></div></annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"text/html\"><div></div></annotation-xml></math>"
       }
     },
     {
-      "data": "<math><annotation-xml encoding=\"application/svg+xml\"><div>",
+      "data": "<math><annotation-xml encoding=\"Text/htmL\"><div>",
       "errors": [
         "(1,6): expected-doctype-but-got-start-tag",
-        "(1,58): unexpected-html-element-in-foreign-content",
-        "(1,58): expected-closing-tag-but-got-eof"
+        "(1,48): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
                         "attrs": [
                           {
                             "name": "encoding",
-                            "value": "application/svg+xml"
+                            "value": "Text/htmL"
+                          }
+                        ],
+                        "children": [
+                          {
+                            "tag": "div"
                           }
                         ]
                       }
                     ]
-                  },
-                  {
-                    "tag": "div"
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<html><head></head><body><math><annotation-xml encoding=\"application/svg+xml\"></annotation-xml></math><div></div></body></html>",
-        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"application/svg+xml\"><div></div></annotation-xml></math>"
+        "html": "<html><head></head><body><math><annotation-xml encoding=\"Text/htmL\"><div></div></annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"Text/htmL\"><div></div></annotation-xml></math>"
       }
     },
     {
-      "data": "<math><annotation-xml encoding=\"application/xhtml+xml\"><div>",
+      "data": "<math><annotation-xml encoding=\" text/html \"><div>",
       "errors": [
         "(1,6): expected-doctype-but-got-start-tag",
-        "(1,60): expected-closing-tag-but-got-eof"
+        "(1,50): unexpected-html-element-in-foreign-content",
+        "(1,50): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
                         "attrs": [
                           {
                             "name": "encoding",
-                            "value": "application/xhtml+xml"
-                          }
-                        ],
-                        "children": [
-                          {
-                            "tag": "div"
+                            "value": " text/html "
                           }
                         ]
                       }
                     ]
+                  },
+                  {
+                    "tag": "div"
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<html><head></head><body><math><annotation-xml encoding=\"application/xhtml+xml\"><div></div></annotation-xml></math></body></html>",
-        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"application/xhtml+xml\"><div></div></annotation-xml></math>"
+        "html": "<html><head></head><body><math><annotation-xml encoding=\" text/html \"></annotation-xml></math><div></div></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml encoding=\" text/html \"><div></div></annotation-xml></math>"
       }
     },
     {
-      "data": "<math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div>",
+      "data": "<math><annotation-xml> </annotation-xml>",
       "errors": [
         "(1,6): expected-doctype-but-got-start-tag",
-        "(1,60): expected-closing-tag-but-got-eof"
+        "(1,40): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
             "head": true,
             "body": true,
             "math math": true,
-            "math annotation-xml": true,
-            "div": true
+            "math annotation-xml": true
           }
         },
         "tree": [
                       {
                         "tag": "annotation-xml",
                         "ns": "http://www.w3.org/1998/Math/MathML",
-                        "attrs": [
-                          {
-                            "name": "encoding",
-                            "value": "aPPlication/xhtmL+xMl"
-                          }
-                        ],
                         "children": [
                           {
-                            "tag": "div"
+                            "text": " "
                           }
                         ]
                       }
             ]
           }
         ],
-        "html": "<html><head></head><body><math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div></div></annotation-xml></math></body></html>",
-        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div></div></annotation-xml></math>"
+        "html": "<html><head></head><body><math><annotation-xml</annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml</annotation-xml></math>"
       }
     },
     {
-      "data": "<math><annotation-xml encoding=\"text/html\"><div>",
+      "data": "<math><annotation-xml>c</annotation-xml>",
       "errors": [
         "(1,6): expected-doctype-but-got-start-tag",
-        "(1,48): expected-closing-tag-but-got-eof"
+        "(1,40): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
             "head": true,
             "body": true,
             "math math": true,
-            "math annotation-xml": true,
-            "div": true
+            "math annotation-xml": true
           }
         },
         "tree": [
                       {
                         "tag": "annotation-xml",
                         "ns": "http://www.w3.org/1998/Math/MathML",
-                        "attrs": [
+                        "children": [
                           {
-                            "name": "encoding",
-                            "value": "text/html"
+                            "text": "c"
                           }
-                        ],
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          }
+        ],
+        "html": "<html><head></head><body><math><annotation-xml>c</annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml>c</annotation-xml></math>"
+      }
+    },
+    {
+      "data": "<math><annotation-xml><!--foo-->",
+      "errors": [
+        "(1,6): expected-doctype-but-got-start-tag",
+        "(1,32): expected-closing-tag-but-got-eof"
+      ],
+      "document": {
+        "props": {
+          "tags": {
+            "html": true,
+            "head": true,
+            "body": true,
+            "math math": true,
+            "math annotation-xml": true
+          },
+          "comment": true
+        },
+        "tree": [
+          {
+            "tag": "html",
+            "children": [
+              {
+                "tag": "head"
+              },
+              {
+                "tag": "body",
+                "children": [
+                  {
+                    "tag": "math",
+                    "ns": "http://www.w3.org/1998/Math/MathML",
+                    "children": [
+                      {
+                        "tag": "annotation-xml",
+                        "ns": "http://www.w3.org/1998/Math/MathML",
                         "children": [
                           {
-                            "tag": "div"
+                            "comment": "foo"
                           }
                         ]
                       }
             ]
           }
         ],
-        "html": "<html><head></head><body><math><annotation-xml encoding=\"text/html\"><div></div></annotation-xml></math></body></html>",
-        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"text/html\"><div></div></annotation-xml></math>"
+        "html": "<html><head></head><body><math><annotation-xml><!--foo--></annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml><!--foo--></annotation-xml></math>"
       }
     },
     {
-      "data": "<math><annotation-xml encoding=\"Text/htmL\"><div>",
+      "data": "<math><annotation-xml></svg>x",
       "errors": [
         "(1,6): expected-doctype-but-got-start-tag",
-        "(1,48): expected-closing-tag-but-got-eof"
+        "(1,28): unexpected-end-tag",
+        "(1,29): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
             "head": true,
             "body": true,
             "math math": true,
-            "math annotation-xml": true,
-            "div": true
+            "math annotation-xml": true
           }
         },
         "tree": [
                       {
                         "tag": "annotation-xml",
                         "ns": "http://www.w3.org/1998/Math/MathML",
-                        "attrs": [
-                          {
-                            "name": "encoding",
-                            "value": "Text/htmL"
-                          }
-                        ],
                         "children": [
                           {
-                            "tag": "div"
+                            "text": "x"
                           }
                         ]
                       }
             ]
           }
         ],
-        "html": "<html><head></head><body><math><annotation-xml encoding=\"Text/htmL\"><div></div></annotation-xml></math></body></html>",
-        "noQuirksBodyHtml": "<math><annotation-xml encoding=\"Text/htmL\"><div></div></annotation-xml></math>"
+        "html": "<html><head></head><body><math><annotation-xml>x</annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml>x</annotation-xml></math>"
       }
     },
     {
-      "data": "<math><annotation-xml encoding=\" text/html \"><div>",
+      "data": "<math><annotation-xml><svg>x",
       "errors": [
         "(1,6): expected-doctype-but-got-start-tag",
-        "(1,50): unexpected-html-element-in-foreign-content",
-        "(1,50): expected-closing-tag-but-got-eof"
+        "(1,28): expected-closing-tag-but-got-eof"
       ],
       "document": {
         "props": {
             "body": true,
             "math math": true,
             "math annotation-xml": true,
-            "div": true
+            "svg svg": true
           }
         },
         "tree": [
                       {
                         "tag": "annotation-xml",
                         "ns": "http://www.w3.org/1998/Math/MathML",
-                        "attrs": [
+                        "children": [
                           {
-                            "name": "encoding",
-                            "value": " text/html "
+                            "tag": "svg",
+                            "ns": "http://www.w3.org/2000/svg",
+                            "children": [
+                              {
+                                "text": "x"
+                              }
+                            ]
                           }
                         ]
                       }
                     ]
-                  },
-                  {
-                    "tag": "div"
                   }
                 ]
               }
             ]
           }
         ],
-        "html": "<html><head></head><body><math><annotation-xml encoding=\" text/html \"></annotation-xml></math><div></div></body></html>",
-        "noQuirksBodyHtml": "<math><annotation-xml encoding=\" text/html \"><div></div></annotation-xml></math>"
+        "html": "<html><head></head><body><math><annotation-xml><svg>x</svg></annotation-xml></math></body></html>",
+        "noQuirksBodyHtml": "<math><annotation-xml><svg>x</svg></annotation-xml></math>"
       }
     }
   ],
         "noQuirksBodyHtml": "<command>A</command>"
       }
     },
-    {
-      "data": "<!DOCTYPE html><body><menuitem>A",
-      "errors": [],
-      "document": {
-        "props": {
-          "tags": {
-            "html": true,
-            "head": true,
-            "body": true,
-            "menuitem": true
-          },
-          "doctype": true
-        },
-        "tree": [
-          {
-            "doctype": "html"
-          },
-          {
-            "tag": "html",
-            "children": [
-              {
-                "tag": "head"
-              },
-              {
-                "tag": "body",
-                "children": [
-                  {
-                    "tag": "menuitem"
-                  },
-                  {
-                    "text": "A"
-                  }
-                ]
-              }
-            ]
-          }
-        ],
-        "html": "<!DOCTYPE html><html><head></head><body><menuitem>A</body></html>",
-        "noQuirksBodyHtml": "<menuitem>A"
-      }
-    },
     {
       "data": "<!DOCTYPE html><body><embed>A",
       "errors": [],
             "body": true,
             "pre": true
           },
-          "doctype": true,
-          "extraNL": true
+          "doctype": true
         },
         "tree": [
           {
                     "tag": "pre",
                     "children": [
                       {
-                        "text": "\nfoo",
-                        "extraNL": true
+                        "text": "\nfoo"
                       }
                     ]
                   }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body><pre>\n\nfoo</pre></body></html>",
-        "noQuirksBodyHtml": "<pre>\n\nfoo</pre>"
+        "html": "<!DOCTYPE html><html><head></head><body><pre>\nfoo</pre></body></html>",
+        "noQuirksBodyHtml": "<pre>\nfoo</pre>"
       }
     },
     {
             "body": true,
             "pre": true
           },
-          "doctype": true,
-          "extraNL": true
+          "doctype": true
         },
         "tree": [
           {
                     "tag": "pre",
                     "children": [
                       {
-                        "text": "\nA",
-                        "extraNL": true
+                        "text": "\nA"
                       }
                     ]
                   }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body><pre>\n\nA</pre></body></html>",
-        "noQuirksBodyHtml": "<pre>\n\nA</pre>"
+        "html": "<!DOCTYPE html><html><head></head><body><pre>\nA</pre></body></html>",
+        "noQuirksBodyHtml": "<pre>\nA</pre>"
       }
     },
     {
             "body": true,
             "textarea": true
           },
-          "doctype": true,
-          "extraNL": true
+          "doctype": true
         },
         "tree": [
           {
                     "tag": "textarea",
                     "children": [
                       {
-                        "text": "\nfoo",
-                        "extraNL": true
+                        "text": "\nfoo"
                       }
                     ]
                   }
             ]
           }
         ],
-        "html": "<!DOCTYPE html><html><head></head><body><textarea>\n\nfoo</textarea></body></html>",
-        "noQuirksBodyHtml": "<textarea>\n\nfoo</textarea>"
+        "html": "<!DOCTYPE html><html><head></head><body><textarea>\nfoo</textarea></body></html>",
+        "noQuirksBodyHtml": "<textarea>\nfoo</textarea>"
       }
     },
     {
           }
         ],
         "html": "<html><head><noscript><!--</noscript></head><body>--&gt;</body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--</noscript>--&gt;"
+        "noQuirksBodyHtml": "<noscript><!--</noscript>--></noscript>"
       }
     },
     {
           }
         ],
         "html": "<html><head><noscript><!--</noscript>--></noscript></head><body></body></html>",
-        "noQuirksBodyHtml": "<noscript>&lt;!--</noscript>--&gt;"
+        "noQuirksBodyHtml": "<noscript><!--</noscript>--></noscript>"
       }
     }
   ],
         "(1,14): foster-parenting-character",
         "(1,20): foster-parenting-character",
         "(1,25): unexpected-end-tag",
+        "(1,25): unexpected-end-tag-in-special-element",
         "(1,26): foster-parenting-character"
       ],
       "document": {
     {
       "data": "</select><option>",
       "errors": [
-        "(1,9): XXX-undefined-error",
-        "(1,17): eof-in-select"
+        "(1,9): XXX-undefined-error"
       ],
       "fragment": {
         "name": "select"
     {
       "data": "<input><option>",
       "errors": [
-        "(1,7): unexpected-input-in-select",
-        "(1,15): eof-in-select"
+        "(1,7): unexpected-input-in-select"
       ],
       "fragment": {
         "name": "select"
     {
       "data": "<keygen><option>",
       "errors": [
-        "(1,8): unexpected-input-in-select",
-        "(1,16): eof-in-select"
+        "(1,8): unexpected-input-in-select"
       ],
       "fragment": {
         "name": "select"
     {
       "data": "<textarea><option>",
       "errors": [
-        "(1,10): unexpected-input-in-select",
-        "(1,18): eof-in-select"
+        "(1,10): unexpected-input-in-select"
       ],
       "fragment": {
         "name": "select"
         "(1,25): unexpected-select-in-select",
         "(1,59): unexpected-select-in-select",
         "(1,93): unexpected-select-in-select",
-        "(1,127): unexpected-select-in-select",
-        "(1,127): expected-closing-tag-but-got-eof"
+        "(1,127): unexpected-select-in-select"
       ],
       "document": {
         "props": {
           }
         ],
         "html": "<html><head></head><body><p id=\"status\"><noscript><strong>A</strong></noscript><span>B</span></p></body></html>",
-        "noQuirksBodyHtml": "<p id=\"status\"><noscript>&lt;strong&gt;A&lt;/strong&gt;</noscript><span>B</span></p>"
+        "noQuirksBodyHtml": "<p id=\"status\"><noscript><strong>A</strong></noscript><span>B</span></p>"
       }
     },
     {
           }
         ],
         "html": "<html><head></head><body><p id=\"status\"><noscript><strong>A</strong></noscript><span>B</span></p></body></html>",
-        "noQuirksBodyHtml": "<p id=\"status\"><noscript>&lt;strong&gt;A&lt;/strong&gt;</noscript><span>B</span></p>"
+        "noQuirksBodyHtml": "<p id=\"status\"><noscript><strong>A</strong></noscript><span>B</span></p>"
       }
     },
     {
         "noQuirksBodyHtml": "<b><em><foo><foob><foob><foob><foob><fooc><fooc><fooc><fooc><food></food></fooc></fooc></fooc></fooc></foob></foob></foob></foob></foo></em></b><aside><b></b></aside>"
       }
     },
-    {
-      "data": "<isindex action=\"x\">",
-      "errors": [],
-      "fragment": {
-        "name": "table"
-      },
-      "document": {
-        "props": {
-          "tags": {
-            "form": true,
-            "hr": true,
-            "label": true,
-            "input": true
-          }
-        },
-        "tree": [
-          {
-            "tag": "form",
-            "attrs": [
-              {
-                "name": "action",
-                "value": "x"
-              }
-            ],
-            "children": [
-              {
-                "tag": "hr"
-              },
-              {
-                "tag": "label",
-                "children": [
-                  {
-                    "text": "This is a searchable index. Enter search keywords: "
-                  },
-                  {
-                    "tag": "input",
-                    "attrs": [
-                      {
-                        "name": "name",
-                        "value": "isindex"
-                      }
-                    ]
-                  }
-                ]
-              },
-              {
-                "tag": "hr"
-              }
-            ]
-          }
-        ],
-        "html": "<form action=\"x\"><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form>",
-        "noQuirksBodyHtml": "<form action=\"x\"><hr><label>This is a searchable index. Enter search keywords: <input name=\"isindex\"></label><hr></form>"
-      }
-    },
     {
       "data": "<option><XH<optgroup></optgroup>",
       "errors": [],
       }
     }
   ]
-}
+}
\ No newline at end of file
index b2857d9..62d247a 100644 (file)
@@ -67,7 +67,7 @@
                );
 
                assert.deepEqual(
-                       model.getState(),
+                       model.getSelectedState(),
                        {
                                group1filter1: false,
                                group1filter2: false,
@@ -85,7 +85,7 @@
                        group3filter1: true
                } );
                assert.deepEqual(
-                       model.getState(),
+                       model.getSelectedState(),
                        {
                                group1filter1: true,
                                group1filter2: false,
                                                {
                                                        name: 'hidefilter1',
                                                        label: 'Show filter 1',
-                                                       description: 'Description of Filter 1 in Group 1'
+                                                       description: 'Description of Filter 1 in Group 1',
+                                                       default: true
                                                },
                                                {
                                                        name: 'hidefilter2',
                                                {
                                                        name: 'hidefilter3',
                                                        label: 'Show filter 3',
-                                                       description: 'Description of Filter 3 in Group 1'
+                                                       description: 'Description of Filter 3 in Group 1',
+                                                       default: true
                                                }
                                        ]
                                },
                                                {
                                                        name: 'hidefilter5',
                                                        label: 'Show filter 5',
-                                                       description: 'Description of Filter 2 in Group 2'
+                                                       description: 'Description of Filter 2 in Group 2',
+                                                       default: true
                                                },
                                                {
                                                        name: 'hidefilter6',
                                                {
                                                        name: 'filter8',
                                                        label: 'Group 3: Filter 2',
-                                                       description: 'Description of Filter 2 in Group 3'
+                                                       description: 'Description of Filter 2 in Group 3',
+                                                       default: true
                                                },
                                                {
                                                        name: 'filter9',
                                        ]
                                }
                        },
+                       defaultFilterRepresentation = {
+                               // Group 1 and 2, "send_unselected_if_any", the values of the filters are "flipped" from the values of the parameters
+                               hidefilter1: false,
+                               hidefilter2: true,
+                               hidefilter3: false,
+                               hidefilter4: true,
+                               hidefilter5: false,
+                               hidefilter6: true,
+                               // Group 3, "string_options", default values correspond to parameters and filters
+                               filter7: false,
+                               filter8: true,
+                               filter9: false
+                       },
                        model = new mw.rcfilters.dm.FiltersViewModel();
 
                model.initializeFilters( definition );
 
-               // Empty query = empty filter definition
+               // Empty query = only default values
                assert.deepEqual(
                        model.getFiltersFromParameters( {} ),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
-                               filter7: false,
-                               filter8: false,
-                               filter9: false
-                       },
-                       'Empty parameter query results in filters in initial state'
+                       defaultFilterRepresentation,
+                       'Empty parameter query results in filters in initial default state'
                );
 
                assert.deepEqual(
                        model.getFiltersFromParameters( {
-                               hidefilter1: '1'
-                       } ),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: true, // The text is "show filter 2"
-                               hidefilter3: true, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
-                               filter7: false,
-                               filter8: false,
-                               filter9: false
-                       },
-                       'One falsey parameter in a group makes the rest of the filters in the group truthy (checked) in the interface'
-               );
-
-               assert.deepEqual(
-                       model.getFiltersFromParameters( {
-                               hidefilter1: '1',
                                hidefilter2: '1'
                        } ),
-                       {
+                       $.extend( {}, defaultFilterRepresentation, {
                                hidefilter1: false, // The text is "show filter 1"
                                hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: true, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
-                               filter7: false,
-                               filter8: false,
-                               filter9: false
-                       },
-                       'Two falsey parameters in a \'send_unselected_if_any\' group makes the rest of the filters in the group truthy (checked) in the interface'
+                               hidefilter3: false // The text is "show filter 3"
+                       } ),
+                       'One truthy parameter in a group whose other parameters are true by default makes the rest of the filters in the group false (unchecked)'
                );
 
                assert.deepEqual(
                                hidefilter2: '1',
                                hidefilter3: '1'
                        } ),
-                       {
-                               // TODO: This will have to be represented as a different state, though.
+                       $.extend( {}, defaultFilterRepresentation, {
                                hidefilter1: false, // The text is "show filter 1"
                                hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
-                               filter7: false,
-                               filter8: false,
-                               filter9: false
-                       },
+                               hidefilter3: false // The text is "show filter 3"
+                       } ),
                        'All paremeters in the same \'send_unselected_if_any\' group false is equivalent to none are truthy (checked) in the interface'
                );
 
                // The ones above don't update the model, so we have a clean state.
-
+               // getFiltersFromParameters is stateless; any change is unaffected by the current state
+               // This test is demonstrating wrong usage of the method;
+               // We should be aware that getFiltersFromParameters is stateless,
+               // so each call gives us a filter state that only reflects the query given.
+               // This means that the two calls to updateFilters() below collide.
+               // The result of the first is overridden by the result of the second,
+               // since both get a full state object from getFiltersFromParameters that **only** relates
+               // to the input it receives.
                model.updateFilters(
                        model.getFiltersFromParameters( {
                                hidefilter1: '1'
 
                model.updateFilters(
                        model.getFiltersFromParameters( {
-                               hidefilter3: '1'
+                               hidefilter6: '1'
                        } )
                );
 
-               // 1 and 3 are separately unchecked via hide parameters, 2 should still be
-               // checked.
-               // This can simulate separate filters in the same group being hidden different
-               // ways (e.g. preferences and URL).
+               // The result here is ignoring the first updateFilters call
+               // We should receive default values + hidefilter6 as false
                assert.deepEqual(
-                       model.getState(),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: true, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
-                               filter7: false,
-                               filter8: false,
-                               filter9: false
-                       },
-                       'After unchecking 2 of 3 \'send_unselected_if_any\' filters via separate updateFilters calls, only the remaining one is still checked.'
+                       model.getSelectedState(),
+                       $.extend( {}, defaultFilterRepresentation, {
+                               hidefilter5: false,
+                               hidefilter6: false
+                       } ),
+                       'getFiltersFromParameters does not care about previous or existing state.'
                );
 
                // Reset
 
                model.updateFilters(
                        model.getFiltersFromParameters( {
-                               hidefilter1: '1'
+                               hidefilter1: '0'
                        } )
                );
                model.updateFilters(
                        model.getFiltersFromParameters( {
-                               hidefilter1: '0'
+                               hidefilter1: '1'
                        } )
                );
 
                // Simulates minor edits being hidden in preferences, then unhidden via URL
                // override.
                assert.deepEqual(
-                       model.getState(),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
-                               filter7: false,
-                               filter8: false,
-                               filter9: false
-                       },
-                       'After unchecking then checking a \'send_unselected_if_any\' filter (without touching other filters in that group), all are checked'
+                       model.getSelectedState(),
+                       defaultFilterRepresentation,
+                       'After checking and then unchecking a \'send_unselected_if_any\' filter (without touching other filters in that group), results are default'
                );
 
                model.updateFilters(
                        } )
                );
                assert.deepEqual(
-                       model.getState(),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
+                       model.getSelectedState(),
+                       $.extend( {}, defaultFilterRepresentation, {
                                filter7: true,
                                filter8: false,
                                filter9: false
-                       },
+                       } ),
                        'A \'string_options\' parameter containing 1 value, results in the corresponding filter as checked'
                );
 
                        } )
                );
                assert.deepEqual(
-                       model.getState(),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
+                       model.getSelectedState(),
+                       $.extend( {}, defaultFilterRepresentation, {
                                filter7: true,
                                filter8: true,
                                filter9: false
-                       },
+                       } ),
                        'A \'string_options\' parameter containing 2 values, results in both corresponding filters as checked'
                );
 
                        } )
                );
                assert.deepEqual(
-                       model.getState(),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
+                       model.getSelectedState(),
+                       $.extend( {}, defaultFilterRepresentation, {
                                filter7: false,
                                filter8: false,
                                filter9: false
-                       },
+                       } ),
                        'A \'string_options\' parameter containing all values, results in all filters of the group as unchecked.'
                );
 
                model.updateFilters(
                        model.getFiltersFromParameters( {
-                               group3: 'filter7,filter8,filter9'
+                               group3: 'filter7,all,filter9'
                        } )
                );
                assert.deepEqual(
-                       model.getState(),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
+                       model.getSelectedState(),
+                       $.extend( {}, defaultFilterRepresentation, {
                                filter7: false,
                                filter8: false,
                                filter9: false
-                       },
+                       } ),
                        'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as unchecked.'
                );
 
                        } )
                );
                assert.deepEqual(
-                       model.getState(),
-                       {
-                               hidefilter1: false, // The text is "show filter 1"
-                               hidefilter2: false, // The text is "show filter 2"
-                               hidefilter3: false, // The text is "show filter 3"
-                               hidefilter4: false, // The text is "show filter 4"
-                               hidefilter5: false, // The text is "show filter 5"
-                               hidefilter6: false, // The text is "show filter 6"
+                       model.getSelectedState(),
+                       $.extend( {}, defaultFilterRepresentation, {
                                filter7: true,
                                filter8: false,
                                filter9: true
-                       },
+                       } ),
                        'A \'string_options\' parameter containing an invalid value, results in the invalid value ignored and the valid corresponding filters checked.'
                );
        } );
                        'If any value is "all", the only value is "all".'
                );
        } );
+
+       QUnit.test( 'setFiltersToDefaults', function ( assert ) {
+               var definition = {
+                               group1: {
+                                       title: 'Group 1',
+                                       type: 'send_unselected_if_any',
+                                       exclusionType: 'default',
+                                       filters: [
+                                               {
+                                                       name: 'hidefilter1',
+                                                       label: 'Show filter 1',
+                                                       description: 'Description of Filter 1 in Group 1',
+                                                       default: true
+                                               },
+                                               {
+                                                       name: 'hidefilter2',
+                                                       label: 'Show filter 2',
+                                                       description: 'Description of Filter 2 in Group 1'
+                                               },
+                                               {
+                                                       name: 'hidefilter3',
+                                                       label: 'Show filter 3',
+                                                       description: 'Description of Filter 3 in Group 1',
+                                                       default: true
+                                               }
+                                       ]
+                               },
+                               group2: {
+                                       title: 'Group 2',
+                                       type: 'send_unselected_if_any',
+                                       filters: [
+                                               {
+                                                       name: 'hidefilter4',
+                                                       label: 'Show filter 4',
+                                                       description: 'Description of Filter 1 in Group 2'
+                                               },
+                                               {
+                                                       name: 'hidefilter5',
+                                                       label: 'Show filter 5',
+                                                       description: 'Description of Filter 2 in Group 2',
+                                                       default: true
+                                               },
+                                               {
+                                                       name: 'hidefilter6',
+                                                       label: 'Show filter 6',
+                                                       description: 'Description of Filter 3 in Group 2'
+                                               }
+                                       ]
+                               }
+                       },
+                       model = new mw.rcfilters.dm.FiltersViewModel();
+
+               model.initializeFilters( definition );
+
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               // Group 1
+                               hidefilter1: { selected: true, active: true },
+                               hidefilter2: { selected: false, active: true },
+                               hidefilter3: { selected: true, active: true },
+                               // Group 2
+                               hidefilter4: { selected: false, active: true },
+                               hidefilter5: { selected: true, active: true },
+                               hidefilter6: { selected: false, active: true },
+                       },
+                       'Initial state: all filters are active, and select states are default.'
+               );
+
+               // Default behavior for 'exclusion' type with only 1 item selected, means that:
+               // - The items in the same group that are *not* selected are *not* active
+               // - Items in other groups are unaffected (all active)
+               model.updateFilters( {
+                       hidefilter1: false,
+                       hidefilter2: false,
+                       hidefilter3: false,
+                       hidefilter4: false,
+                       hidefilter5: false,
+                       hidefilter6: true
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               // Group 1: not affected
+                               hidefilter1: { selected: false, active: true },
+                               hidefilter2: { selected: false, active: true },
+                               hidefilter3: { selected: false, active: true },
+                               // Group 2: affected
+                               hidefilter4: { selected: false, active: false },
+                               hidefilter5: { selected: false, active: false },
+                               hidefilter6: { selected: true, active: true },
+                       },
+                       'Default exclusion behavior with 1 item selected in the group.'
+               );
+
+               // Default behavior for 'exclusion' type with multiple items selected, but not all, means that:
+               // - The items in the same group that are *not* selected are *not* active
+               // - Items in other groups are unaffected (all active)
+               model.updateFilters( {
+                       // Literally updating filters to create a clean state
+                       hidefilter1: false,
+                       hidefilter2: false,
+                       hidefilter3: false,
+                       hidefilter4: false,
+                       hidefilter5: true,
+                       hidefilter6: true
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               // Group 1: not affected
+                               hidefilter1: { selected: false, active: true },
+                               hidefilter2: { selected: false, active: true },
+                               hidefilter3: { selected: false, active: true },
+                               // Group 2: affected
+                               hidefilter4: { selected: false, active: false },
+                               hidefilter5: { selected: true, active: true },
+                               hidefilter6: { selected: true, active: true },
+                       },
+                       'Default exclusion behavior with multiple items (but not all) selected in the group.'
+               );
+
+               // Default behavior for 'exclusion' type with all items in the group selected, means that:
+               // - All items in the group are NOT active
+               // - Items in other groups are unaffected (all active)
+               model.updateFilters( {
+                       // Literally updating filters to create a clean state
+                       hidefilter1: false,
+                       hidefilter2: false,
+                       hidefilter3: false,
+                       hidefilter4: true,
+                       hidefilter5: true,
+                       hidefilter6: true
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               // Group 1: not affected
+                               hidefilter1: { selected: false, active: true },
+                               hidefilter2: { selected: false, active: true },
+                               hidefilter3: { selected: false, active: true },
+                               // Group 2: affected
+                               hidefilter4: { selected: true, active: false },
+                               hidefilter5: { selected: true, active: false },
+                               hidefilter6: { selected: true, active: false },
+                       },
+                       'Default exclusion behavior with all items in the group.'
+               );
+       } );
+
+       QUnit.test( 'reapplyActiveFilters - "explicit" exclusion rules', function ( assert ) {
+               var definition = {
+                               group1: {
+                                       title: 'Group 1',
+                                       type: 'send_unselected_if_any',
+                                       exclusionType: 'explicit',
+                                       filters: [
+                                               {
+                                                       name: 'filter1',
+                                                       excludes: [ 'filter2', 'filter3' ],
+                                                       label: 'Show filter 1',
+                                                       description: 'Description of Filter 1 in Group 1'
+                                               },
+                                               {
+                                                       name: 'filter2',
+                                                       excludes: [ 'filter3' ],
+                                                       label: 'Show filter 2',
+                                                       description: 'Description of Filter 2 in Group 1'
+                                               },
+                                               {
+                                                       name: 'filter3',
+                                                       label: 'Show filter 3',
+                                                       excludes: [ 'filter1' ],
+                                                       description: 'Description of Filter 3 in Group 1'
+                                               },
+                                               {
+                                                       name: 'filter4',
+                                                       label: 'Show filter 4',
+                                                       description: 'Description of Filter 4 in Group 1'
+                                               }
+                                       ]
+                               }
+                       },
+                       defaultFilterRepresentation = {
+                               // Group 1 and 2, "send_unselected_if_any", the values of the filters are "flipped" from the values of the parameters
+                               hidefilter1: false,
+                               hidefilter2: true,
+                               hidefilter3: false,
+                               hidefilter4: true,
+                               hidefilter5: false,
+                               hidefilter6: true,
+                               // Group 3, "string_options", default values correspond to parameters and filters
+                               filter7: false,
+                               filter8: true,
+                               filter9: false
+                       },
+                       model = new mw.rcfilters.dm.FiltersViewModel();
+
+               model.initializeFilters( definition );
+
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               filter1: { selected: false, active: true },
+                               filter2: { selected: false, active: true },
+                               filter3: { selected: false, active: true },
+                               filter4: { selected: false, active: true }
+                       },
+                       'Initial state: all filters are active.'
+               );
+
+               // "Explicit" behavior for 'exclusion' with one item checked:
+               // - Items in the 'excluded' list of the selected filter are inactive
+               model.updateFilters( {
+                       // Literally updating filters to create a clean state
+                       filter1: true, // Excludes 'hidefilter2', 'hidefilter3'
+                       filter2: false, // Excludes 'hidefilter3'
+                       filter3: false, // Excludes 'hidefilter1'
+                       filter4: false // No exclusion list
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               filter1: { selected: true, active: true },
+                               filter2: { selected: false, active: false },
+                               filter3: { selected: false, active: false },
+                               filter4: { selected: false, active: true }
+                       },
+                       '"Explicit" exclusion behavior with one item selected that has an exclusion list.'
+               );
+
+               // "Explicit" behavior for 'exclusion' with two item checked:
+               // - Items in the 'excluded' list of each of the selected filter are inactive
+               model.updateFilters( {
+                       // Literally updating filters to create a clean state
+                       filter1: true, // Excludes 'hidefilter2', 'hidefilter3'
+                       filter2: false, // Excludes 'hidefilter3'
+                       filter3: true, // Excludes 'hidefilter1'
+                       filter4: false // No exclusion list
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               filter1: { selected: true, active: false },
+                               filter2: { selected: false, active: false },
+                               filter3: { selected: true, active: false },
+                               filter4: { selected: false, active: true }
+                       },
+                       '"Explicit" exclusion behavior with two selected items that both have an exclusion list.'
+               );
+
+               // "Explicit behavior" with two filters that exclude the same item
+
+               // Two filters selected, both exclude 'hidefilter3'
+               model.updateFilters( {
+                       // Literally updating filters to create a clean state
+                       filter1: true, // Excludes 'hidefilter2', 'hidefilter3'
+                       filter2: true, // Excludes 'hidefilter3'
+                       filter3: false, // Excludes 'hidefilter1'
+                       filter4: false // No exclusion list
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               filter1: { selected: true, active: true },
+                               filter2: { selected: true, active: false }, // Excluded by filter1
+                               filter3: { selected: false, active: false }, // Excluded by both filter1 and filter2
+                               filter4: { selected: false, active: true }
+                       },
+                       '"Explicit" exclusion behavior with two selected items that both exclude another item.'
+               );
+
+               // Unselect filter2: filter3 should still be excluded, because filter1 excludes it and is selected
+               model.updateFilters( {
+                       filter2: false, // Excludes 'hidefilter3'
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               filter1: { selected: true, active: true },
+                               filter2: { selected: false, active: false }, // Excluded by filter1
+                               filter3: { selected: false, active: false }, // Still excluded by filter1
+                               filter4: { selected: false, active: true }
+                       },
+                       '"Explicit" exclusion behavior unselecting one item that excludes another item, that is being excluded by a third active item.'
+               );
+
+               // Unselect filter1: filter3 should now be active, since both filters that exclude it are unselected
+               model.updateFilters( {
+                       filter1: false, // Excludes 'hidefilter3' and 'hidefilter2'
+               } );
+               assert.deepEqual(
+                       model.getFullState(),
+                       {
+                               filter1: { selected: false, active: true },
+                               filter2: { selected: false, active: true }, // No longer excluded by filter1
+                               filter3: { selected: false, active: true }, // No longer excluded by either filter1 nor filter2
+                               filter4: { selected: false, active: true }
+                       },
+                       '"Explicit" exclusion behavior unselecting both items that excluded the same third item.'
+               );
+
+       } );
 }( mediaWiki, jQuery ) );