Merge "LivePreview: Wrap content preview with mw-content-*"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 28 Feb 2015 14:47:53 +0000 (14:47 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 28 Feb 2015 14:47:53 +0000 (14:47 +0000)
198 files changed:
.jshintrc
RELEASE-NOTES-1.25
autoload.php
composer.json
docs/hooks.txt
includes/CategoryViewer.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Import.php
includes/MediaWiki.php
includes/MessageBlobStore.php
includes/TemplateParser.php
includes/UserArray.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiCreateAccount.php
includes/api/ApiEditPage.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiQuery.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryTokens.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiStashEdit.php
includes/api/ApiTokens.php
includes/api/i18n/ca.json
includes/api/i18n/cs.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/ksh.json
includes/api/i18n/zh-hans.json
includes/cache/BacklinkCache.php
includes/config/ConfigException.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/deferred/HTMLCacheUpdate.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/exception/MWException.php
includes/gallery/TraditionalImageGallery.php
includes/installer/DatabaseInstaller.php
includes/installer/Installer.php
includes/installer/MssqlInstaller.php
includes/installer/MysqlInstaller.php
includes/installer/PostgresInstaller.php
includes/installer/SqliteInstaller.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/ast.json
includes/installer/i18n/fa.json
includes/installer/i18n/nl.json
includes/jobqueue/jobs/RecentChangesUpdateJob.php
includes/jobqueue/jobs/RefreshLinksJob.php
includes/libs/composer/ComposerJson.php
includes/libs/objectcache/APCBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/BagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/EmptyBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/HashBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/WinCacheBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/XCacheBagOStuff.php [new file with mode: 0644]
includes/logging/BlockLogFormatter.php [new file with mode: 0644]
includes/logging/DeleteLogFormatter.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/objectcache/APCBagOStuff.php [deleted file]
includes/objectcache/BagOStuff.php [deleted file]
includes/objectcache/EmptyBagOStuff.php [deleted file]
includes/objectcache/HashBagOStuff.php [deleted file]
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/ReplicatedBagOStuff.php [new file with mode: 0644]
includes/objectcache/SqlBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php [deleted file]
includes/objectcache/XCacheBagOStuff.php [deleted file]
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/ParserOutput.php
includes/poolcounter/PoolWorkArticleView.php
includes/revisiondelete/RevDelList.php
includes/revisiondelete/RevDelLogList.php
includes/site/HashSiteStore.php [new file with mode: 0644]
includes/skins/Skin.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialExport.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialMyLanguage.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialWantedpages.php
includes/templates/NoLocalSettings.mustache
includes/templates/Usercreate.php
includes/upload/UploadFromUrl.php
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/az.json
languages/i18n/be-tarask.json
languages/i18n/bgn.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/fy.json
languages/i18n/gl.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/it.json
languages/i18n/ka.json
languages/i18n/ksh.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/mg.json
languages/i18n/mk.json
languages/i18n/mzn.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sah.json
languages/i18n/scn.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/th.json
languages/i18n/tr.json
languages/i18n/tt-latn.json
languages/i18n/tw.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/yi.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesTt_cyrl.php
maintenance/eval.php
maintenance/refreshLinks.php
resources/Resources.php
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs/oojs.jquery.js
resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less [new file with mode: 0644]
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.sectionAnchor.css
resources/src/mediawiki/mediawiki.sectionAnchor.hide.css
tests/parser/parserTests.txt
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/parser/ParserOutputTest.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php
tests/phpunit/includes/site/HashSiteStoreTest.php [new file with mode: 0644]
tests/phpunit/structure/ResourcesTest.php

index 92c8c43..d77ffb8 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -20,6 +20,7 @@
 
        "globals": {
                "mediaWiki": true,
+               "JSON": true,
                "jQuery": false,
                "QUnit": false
        }
index cdef220..45e669a 100644 (file)
@@ -105,6 +105,10 @@ production.
   and appear in the gutter on hovering over the heading.
 * Added 'CategoryViewer::doCategoryQuery' and 'CategoryViewer::generateLink' hooks
   to allow extensions to override how links to pages are rendered within NS_CATEGORY
+* (T19665) Special:WantedPages only lists page which having at least one red link
+  pointing to it.
+* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be
+  used for conditional registration of API modules.
 
 ==== External libraries ====
 * MediaWiki now requires certain external libraries to be installed. In the past
@@ -222,6 +226,8 @@ production.
 * (T88010) Added action=checktoken, to test a CSRF token's validity.
 * (T88010) Added intestactions to prop=info, to allow querying of
   Title::userCan() via the API.
+* Default type param for query list=watchlist and list=recentchanges has
+  been changed from all types (e.g. including 'external') to 'edit|new|log'.
 
 === Action API internal changes in 1.25 ===
 * ApiHelp has been rewritten to support i18n and paginated HTML output.
@@ -253,6 +259,11 @@ production.
   provided to access just the live or just the deleted revids.
 * Added ApiPageSet::setGeneratorData() and ApiPageSet::populateGeneratorData()
   to allow generators to include data in the action=query result.
+* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be
+  used for conditional registration of API modules.
+* Added ApiBase::lacksSameOriginSecurity() to allow modules to easily check if
+  the current request was sent with the 'callback' parameter (or any future
+  method that breaks the same-origin policy).
 * The following methods have been deprecated and may be removed in a future
   release:
   * ApiBase::getDescription
@@ -363,6 +374,16 @@ changes to languages because of Bugzilla reports.
 * (T87504) Avoid serving SVG background-images in CSS for Opera 12, which
   renders them incorrectly when combined with border-radius or background-size.
 * Removed maintenance script dumpSisterSites.php.
+* DatabaseBase class constructors must be called using the array argument style.
+  Ideally, DatabaseBase:factory() should be used instead in most cases.
+* Deprecated ParserOutput::addSecondaryDataUpdate and ParserOutput::getSecondaryDataUpdates.
+  This is a hard deprecation, with getSecondaryDataUpdates returning an empty array and
+  addSecondaryDataUpdate throwing an exception. These functions will be removed in 1.26,
+  since they interfere with caching of ParserOutput objects.
+* Introduced new hook 'SecondaryDataUpdates' that allows extensions to inject custom updates.
+* EditPage::attemptSave has been modified not to call handleStatus itself and
+  instead just returns the Status object. Extension calling it should be aware of
+  this.
 
 == Compatibility ==
 
index a115e75..90fab64 100644 (file)
@@ -4,7 +4,7 @@
 global $wgAutoloadLocalClasses;
 
 $wgAutoloadLocalClasses = array(
-       'APCBagOStuff' => __DIR__ . '/includes/objectcache/APCBagOStuff.php',
+       'APCBagOStuff' => __DIR__ . '/includes/libs/objectcache/APCBagOStuff.php',
        'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php',
        'Action' => __DIR__ . '/includes/actions/Action.php',
        'ActiveUsersPager' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
@@ -147,7 +147,7 @@ $wgAutoloadLocalClasses = array(
        'BackupDumper' => __DIR__ . '/maintenance/backup.inc',
        'BackupReader' => __DIR__ . '/maintenance/importDump.php',
        'BadTitleError' => __DIR__ . '/includes/exception/BadTitleError.php',
-       'BagOStuff' => __DIR__ . '/includes/objectcache/BagOStuff.php',
+       'BagOStuff' => __DIR__ . '/includes/libs/objectcache/BagOStuff.php',
        'BaseDump' => __DIR__ . '/maintenance/backupPrefetch.inc',
        'BaseTemplate' => __DIR__ . '/includes/skins/BaseTemplate.php',
        'BatchedQueryRunner' => __DIR__ . '/maintenance/runBatchedQuery.php',
@@ -169,6 +169,7 @@ $wgAutoloadLocalClasses = array(
        'Blob' => __DIR__ . '/includes/db/DatabaseUtility.php',
        'Block' => __DIR__ . '/includes/Block.php',
        'BlockListPager' => __DIR__ . '/includes/specials/SpecialBlockList.php',
+       'BlockLogFormatter' => __DIR__ . '/includes/logging/BlockLogFormatter.php',
        'BloomCache' => __DIR__ . '/includes/cache/bloom/BloomCache.php',
        'BloomCacheRedis' => __DIR__ . '/includes/cache/bloom/BloomCacheRedis.php',
        'BloomFilterTitleHasLogs' => __DIR__ . '/includes/cache/bloom/BloomFilters.php',
@@ -364,7 +365,7 @@ $wgAutoloadLocalClasses = array(
        'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
        'EmailNotification' => __DIR__ . '/includes/mail/EmailNotification.php',
        'EmaillingJob' => __DIR__ . '/includes/jobqueue/jobs/EmaillingJob.php',
-       'EmptyBagOStuff' => __DIR__ . '/includes/objectcache/EmptyBagOStuff.php',
+       'EmptyBagOStuff' => __DIR__ . '/includes/libs/objectcache/EmptyBagOStuff.php',
        'EmptyBloomCache' => __DIR__ . '/includes/cache/bloom/BloomCache.php',
        'EncryptedPassword' => __DIR__ . '/includes/password/EncryptedPassword.php',
        'EnhancedChangesList' => __DIR__ . '/includes/changes/EnhancedChangesList.php',
@@ -375,6 +376,7 @@ $wgAutoloadLocalClasses = array(
        'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php',
        'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php',
        'ExportProgressFilter' => __DIR__ . '/maintenance/backup.inc',
+       'ExportSites' => __DIR__ . '/maintenance/exportSites.php',
        'ExtensionLanguages' => __DIR__ . '/maintenance/language/languages.inc',
        'ExtensionProcessor' => __DIR__ . '/includes/registration/ExtensionProcessor.php',
        'ExtensionRegistry' => __DIR__ . '/includes/registration/ExtensionRegistry.php',
@@ -493,9 +495,10 @@ $wgAutoloadLocalClasses = array(
        'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php',
        'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
-       'HashBagOStuff' => __DIR__ . '/includes/objectcache/HashBagOStuff.php',
+       'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php',
        'HashConfig' => __DIR__ . '/includes/config/HashConfig.php',
        'HashRing' => __DIR__ . '/includes/libs/HashRing.php',
+       'HashSiteStore' => __DIR__ . '/includes/site/HashSiteStore.php',
        'HashtableReplacer' => __DIR__ . '/includes/libs/replacers/HashtableReplacer.php',
        'HistoryAction' => __DIR__ . '/includes/actions/HistoryAction.php',
        'HistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
@@ -535,6 +538,7 @@ $wgAutoloadLocalClasses = array(
        'ImageQueryPage' => __DIR__ . '/includes/specialpage/ImageQueryPage.php',
        'ImportReporter' => __DIR__ . '/includes/specials/SpecialImport.php',
        'ImportSiteScripts' => __DIR__ . '/maintenance/importSiteScripts.php',
+       'ImportSites' => __DIR__ . '/maintenance/importSites.php',
        'ImportSource' => __DIR__ . '/includes/Import.php',
        'ImportStreamSource' => __DIR__ . '/includes/Import.php',
        'ImportStringSource' => __DIR__ . '/includes/Import.php',
@@ -885,6 +889,7 @@ $wgAutoloadLocalClasses = array(
        'PopulateRevisionLength' => __DIR__ . '/maintenance/populateRevisionLength.php',
        'PopulateRevisionSha1' => __DIR__ . '/maintenance/populateRevisionSha1.php',
        'PostgreSqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+       'PostgresBlob' => __DIR__ . '/includes/db/DatabasePostgres.php',
        'PostgresField' => __DIR__ . '/includes/db/DatabasePostgres.php',
        'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
        'PostgresTransactionState' => __DIR__ . '/includes/db/DatabasePostgres.php',
@@ -963,6 +968,7 @@ $wgAutoloadLocalClasses = array(
        'RenderAction' => __DIR__ . '/includes/actions/RenderAction.php',
        'ReplacementArray' => __DIR__ . '/includes/libs/ReplacementArray.php',
        'Replacer' => __DIR__ . '/includes/libs/replacers/Replacer.php',
+       'ReplicatedBagOStuff' => __DIR__ . '/includes/objectcache/ReplicatedBagOStuff.php',
        'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
        'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
        'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
@@ -1326,12 +1332,12 @@ $wgAutoloadLocalClasses = array(
        'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
        'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
        'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php',
-       'WinCacheBagOStuff' => __DIR__ . '/includes/objectcache/WinCacheBagOStuff.php',
+       'WinCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/WinCacheBagOStuff.php',
        'WithoutInterwikiPage' => __DIR__ . '/includes/specials/SpecialWithoutinterwiki.php',
        'WordLevelDiff' => __DIR__ . '/includes/diff/DairikiDiff.php',
        'WrapOldPasswords' => __DIR__ . '/maintenance/wrapOldPasswords.php',
        'XCFHandler' => __DIR__ . '/includes/media/XCF.php',
-       'XCacheBagOStuff' => __DIR__ . '/includes/objectcache/XCacheBagOStuff.php',
+       'XCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/XCacheBagOStuff.php',
        'XMLRCFeedFormatter' => __DIR__ . '/includes/rcfeed/XMLRCFeedFormatter.php',
        'XMPInfo' => __DIR__ . '/includes/media/XMPInfo.php',
        'XMPReader' => __DIR__ . '/includes/media/XMP.php',
index 1650394..a289446 100644 (file)
@@ -17,8 +17,9 @@
        },
        "require": {
                "cssjanus/cssjanus": "1.1.1",
+               "ext-iconv": "*",
                "leafo/lessphp": "0.5.0",
-               "oojs/oojs-ui": "0.8.0",
+               "oojs/oojs-ui": "0.8.2",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
@@ -31,6 +32,7 @@
        },
        "suggest": {
                "ext-fileinfo": "*",
+               "ext-intl": "*",
                "ext-mbstring": "*",
                "ext-wikidiff2": "*",
                "ext-apc": "*",
index a88803b..5899154 100644 (file)
@@ -418,6 +418,10 @@ $module: ApiBase Module object
 &$help: Array of HTML strings to be joined for the output.
 $options: Array Options passed to ApiHelp::getHelp
 
+'ApiMain::moduleManager': Called when ApiMain has finished initializing its
+module manager. Can be used to conditionally register API modules.
+$moduleManager: ApiModuleManager Module manager instance
+
 'ApiOpenSearchSuggest': Called when constructing the OpenSearch results. Hooks
 can alter or append to the array.
 &$results: array with integer keys to associative arrays. Keys in associative
@@ -431,6 +435,10 @@ array:
     (url), 'width', 'height', 'alt', 'align'.
   - url: Url for the given title.
 
+'ApiQuery::moduleManager': Called when ApiQuery has finished initializing its
+module manager. Can be used to conditionally register API query modules.
+$moduleManager: ApiModuleManager Module manager instance
+
 'APIQueryAfterExecute': After calling the execute() method of an
 action=query submodule. Use this to extend core API modules.
 &$module: Module object
@@ -1057,6 +1065,15 @@ $title: the diff page title (nullable)
 $old: the ?old= param value from the url
 $new: the ?new= param value from the url
 
+'GetDifferenceEngine': Called when getting a new difference engine interface object
+Return false for valid object in $differenceEngine or true for the default difference engine
+$context: IContextSource context to be used for diff
+$old: Revision ID to show and diff with
+$new: Either a revision ID or one of the strings 'cur', 'prev' or 'next'
+$refreshCache: If set, refreshes the diff cache
+$unhide: If set, allow viewing deleted revs
+&$differenceEngine: output parameter, difference engine object to be used for diff
+
 'DiffRevisionTools': Override or extend the revision tools available from the
 diff view, i.e. undo, etc.
 $newRev: Revision object of the "new" revision
@@ -1127,6 +1144,11 @@ $editPage: EditPage      object
 saved, that is before WikiPage::doEditContent() is called
 $editpage_Obj: the current EditPage object
 
+'EditPage::attemptSave:after': Called after an article save attempt
+$editpage_Obj: the current EditPage object
+$status: the resulting Status object
+$resultDetails: Result details array
+
 'EditPage::importFormData': allow extensions to read additional data
 posted in the form
 $editpage: EditPage instance
@@ -2353,6 +2375,18 @@ $title : Current Title object being displayed in search results.
 'SearchableNamespaces': An option to modify which namespaces are searchable.
 &$arr : Array of namespaces ($nsId => $name) which will be used.
 
+'SecondaryDataUpdates': Allows modification of the list of DataUpdates to
+perform when page content is modified. Currently called by
+AbstractContent::getSecondaryDataUpdates.
+$title: Title of the page that is being edited.
+$oldContent: Content object representing the page's content before the edit.
+$recursive: bool indicating whether DataUpdates should trigger recursive
+  updates (relevant mostly for LinksUpdate).
+$parserOutput: ParserOutput representing the rendered version of the page
+  after the edit.
+&$updates: a list of DataUpdate objects, to be modified or replaced by
+  the hook handler.
+
 'SelfLinkBegin': Called before a link to the current article is displayed to
 allow the display of the link to be customized.
 $nt: the Title object
index 1e0bf16..48436c5 100644 (file)
@@ -89,6 +89,9 @@ class CategoryViewer extends ContextSource {
        ) {
                $this->title = $title;
                $this->setContext( $context );
+               $this->getOutput()->addModuleStyles( array(
+                       'mediawiki.action.view.categoryPage.styles'
+               ) );
                $this->from = $from;
                $this->until = $until;
                $this->limit = $context->getConfig()->get( 'CategoryPagingLimit' );
@@ -528,8 +531,7 @@ class CategoryViewer extends ContextSource {
         * TODO: Take the headers into account when creating columns, so they're
         * more visually equal.
         *
-        * More distant TODO: Scrap this and use CSS columns, whenever IE finally
-        * supports those.
+        * TODO: shortList and columnList are similar, need merging
         *
         * @param array $articles
         * @param string[] $articles_start_char
@@ -538,50 +540,34 @@ class CategoryViewer extends ContextSource {
         */
        static function columnList( $articles, $articles_start_char ) {
                $columns = array_combine( $articles, $articles_start_char );
-               # Split into three columns
-               $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ );
 
-               $ret = '<table style="width: 100%;"><tr style="vertical-align: top;">';
-               $prevchar = null;
+               $ret = Html::openElement( 'div', array( 'class' => 'mw-category' ) );
 
-               foreach ( $columns as $column ) {
-                       $ret .= '<td style="width: 33.3%;">';
-                       $colContents = array();
+               $colContents = array();
 
-                       # Kind of like array_flip() here, but we keep duplicates in an
-                       # array instead of dropping them.
-                       foreach ( $column as $article => $char ) {
-                               if ( !isset( $colContents[$char] ) ) {
-                                       $colContents[$char] = array();
-                               }
-                               $colContents[$char][] = $article;
+               # Kind of like array_flip() here, but we keep duplicates in an
+               # array instead of dropping them.
+               foreach ( $columns as $article => $char ) {
+                       if ( !isset( $colContents[$char] ) ) {
+                               $colContents[$char] = array();
                        }
+                       $colContents[$char][] = $article;
+               }
 
-                       $first = true;
-                       foreach ( $colContents as $char => $articles ) {
-                               # Change space to non-breaking space to keep headers aligned
-                               $h3char = $char === ' ' ? '&#160;' : htmlspecialchars( $char );
+               foreach ( $colContents as $char => $articles ) {
+                       # Change space to non-breaking space to keep headers aligned
+                       $h3char = $char === ' ' ? '&#160;' : htmlspecialchars( $char );
 
-                               $ret .= '<h3>' . $h3char;
-                               if ( $first && $char === $prevchar ) {
-                                       # We're continuing a previous chunk at the top of a new
-                                       # column, so add " cont." after the letter.
-                                       $ret .= ' ' . wfMessage( 'listingcontinuesabbrev' )->escaped();
-                               }
-                               $ret .= "</h3>\n";
+                       $ret .= '<div class="mw-category-group"><h3>' . $h3char;
+                       $ret .= "</h3>\n";
 
-                               $ret .= '<ul><li>';
-                               $ret .= implode( "</li>\n<li>", $articles );
-                               $ret .= '</li></ul>';
-
-                               $first = false;
-                               $prevchar = $char;
-                       }
+                       $ret .= '<ul><li>';
+                       $ret .= implode( "</li>\n<li>", $articles );
+                       $ret .= '</li></ul></div>';
 
-                       $ret .= "</td>\n";
                }
 
-               $ret .= '</tr></table>';
+               $ret .= Html::closeElement( 'div' );
                return $ret;
        }
 
index d4cdf9e..6786f81 100644 (file)
@@ -6422,6 +6422,7 @@ $wgJobClasses = array(
        'PublishStashedFile' => 'PublishStashedFileJob',
        'ThumbnailRender' => 'ThumbnailRenderJob',
        'recentChangesUpdate' => 'RecentChangesUpdateJob',
+       'refreshLinksPrioritized' => 'RefreshLinksJob', // for cascading protection
        'null' => 'NullJob'
 );
 
@@ -6664,17 +6665,12 @@ $wgLogHeaders = array(
  * Extensions with custom log types may add to this array.
  */
 $wgLogActions = array(
-       'block/block' => 'blocklogentry',
-       'block/unblock' => 'unblocklogentry',
-       'block/reblock' => 'reblock-logentry',
        'protect/protect' => 'protectedarticle',
        'protect/modify' => 'modifiedarticleprotection',
        'protect/unprotect' => 'unprotectedarticle',
        'protect/move_prot' => 'movedarticleprotection',
        'import/upload' => 'import-logentry-upload',
        'import/interwiki' => 'import-logentry-interwiki',
-       'suppress/block' => 'blocklogentry',
-       'suppress/reblock' => 'reblock-logentry',
 );
 
 /**
@@ -6704,6 +6700,11 @@ $wgLogActionsHandlers = array(
        'managetags/delete' => 'LogFormatter',
        'managetags/activate' => 'LogFormatter',
        'managetags/deactivate' => 'LogFormatter',
+       'block/block' => 'BlockLogFormatter',
+       'block/unblock' => 'BlockLogFormatter',
+       'block/reblock' => 'BlockLogFormatter',
+       'suppress/block' => 'BlockLogFormatter',
+       'suppress/reblock' => 'BlockLogFormatter',
 );
 
 /**
index 0d5e63c..a8a17cf 100644 (file)
@@ -534,7 +534,9 @@ class EditPage {
                # in the back door with a hand-edited submission URL.
 
                if ( 'save' == $this->formtype ) {
-                       if ( !$this->attemptSave() ) {
+                       $resultDetails = null;
+                       $status = $this->attemptSave( $resultDetails );
+                       if ( !$this->handleStatus( $status, $resultDetails ) ) {
                                return;
                        }
                }
@@ -1284,18 +1286,20 @@ class EditPage {
 
        /**
         * Attempt submission
+        * @param array $resultDetails See docs for $result in internalAttemptSave
         * @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
-        * @return bool False if output is done, true if the rest of the form should be displayed
+        * @return Status The resulting status object.
         */
-       public function attemptSave() {
+       public function attemptSave( &$resultDetails = false ) {
                global $wgUser;
 
-               $resultDetails = false;
                # Allow bots to exempt some edits from bot flagging
                $bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
                $status = $this->internalAttemptSave( $resultDetails, $bot );
 
-               return $this->handleStatus( $status, $resultDetails );
+               Hooks::run( 'EditPage::attemptSave:after', array( $this, $status, $resultDetails ) );
+
+               return $status;
        }
 
        /**
index eb2ca77..c036fbe 100644 (file)
@@ -376,12 +376,12 @@ class WikiImporter {
                $page->loadPageData( 'fromdbmaster' );
                $content = $page->getContent();
                $editInfo = $page->prepareContentForEdit( $content );
-
+               $countKey = 'title_' . $title->getPrefixedText();
                $countable = $page->isCountable( $editInfo );
-               $oldcountable = $this->countableCache['title_' . $title->getPrefixedText()];
-               if ( isset( $oldcountable ) && $countable != $oldcountable ) {
+               if ( array_key_exists( $countKey, $this->countableCache ) &&
+                       $countable != $this->countableCache[ $countKey ] ) {
                        DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array(
-                               'articles' => ( (int)$countable - (int)$oldcountable )
+                               'articles' => ( (int)$countable - (int)$this->countableCache[ $countKey ] )
                        ) ) );
                }
 
@@ -477,7 +477,8 @@ class WikiImporter {
        /**
         * Retrieves the contents of the named attribute of the current element.
         * @param string $attr The name of the attribute
-        * @return string The value of the attribute or an empty string if it is not set in the current element.
+        * @return string The value of the attribute or an empty string if it is not set in the current
+        * element.
         */
        public function nodeAttribute( $attr ) {
                return $this->reader->getAttribute( $attr );
index c21f5e9..3b463ae 100644 (file)
@@ -489,14 +489,16 @@ class MediaWiki {
                $action = $this->getAction();
                $wgTitle = $title;
 
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+
                // Aside from rollback, master queries should not happen on GET requests.
                // Periodic or "in passing" updates on GET should use the job queue.
                if ( !$request->wasPosted()
                        && in_array( $action, array( 'view', 'edit', 'history' ) )
                ) {
-                       $trxProfiler = Profiler::instance()->getTransactionProfiler();
                        $trxProfiler->setExpectation( 'masterConns', 0, __METHOD__ );
                        $trxProfiler->setExpectation( 'writes', 0, __METHOD__ );
+               } else {
                        $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ );
                }
 
index 6f7e8e5..c384188 100644 (file)
@@ -127,7 +127,7 @@ class MessageBlobStore {
                                        );
                                }
                        }
-               } catch ( Exception $e ) {
+               } catch ( DBError $e ) {
                        wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
                return $blob;
index 41ae4a4..559ffb9 100644 (file)
@@ -166,6 +166,16 @@ class TemplateParser {
 
        /**
         * Returns HTML for a given template by calling the template function with the given args
+        *
+        * @code
+        *     echo $templateParser->processTemplate(
+        *         'ExampleTemplate',
+        *         array(
+        *             'username' => $user->getName(),
+        *             'message' => 'Hello!'
+        *         )
+        *     );
+        * @endcode
         * @param string $templateName The name of the template
         * @param mixed $args
         * @param array $scopes
index e5621da..31bd601 100644 (file)
@@ -56,6 +56,27 @@ abstract class UserArray implements Iterator {
                return self::newFromResult( $res );
        }
 
+       /**
+        * @since 1.25
+        * @param array $names
+        * @return UserArrayFromResult
+        */
+       static function newFromNames( $names ) {
+               $names = array_map( 'strval', (array)$names ); // paranoia
+               if ( !$names ) {
+                       // Database::select() doesn't like empty arrays
+                       return new ArrayIterator( array() );
+               }
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select(
+                       'user',
+                       User::selectFields(),
+                       array( 'user_name' => array_unique( $names ) ),
+                       __METHOD__
+               );
+               return self::newFromResult( $res );
+       }
+
        /**
         * @param ResultWrapper $res
         * @return UserArrayFromResult
index ff31eb6..338d939 100644 (file)
@@ -246,13 +246,13 @@ class InfoAction extends FormlessAction {
                        $pageInfo['header-basic'][] = array(
                                $this->msg( 'pageinfo-redirectsto' ),
                                Linker::link( $this->page->getRedirectTarget() ) .
-                               $this->msg( 'word-separator' )->text() .
-                               $this->msg( 'parentheses', Linker::link(
+                               $this->msg( 'word-separator' )->escaped() .
+                               $this->msg( 'parentheses' )->rawParams( Linker::link(
                                        $this->page->getRedirectTarget(),
                                        $this->msg( 'pageinfo-redirectsto-info' )->escaped(),
                                        array(),
                                        array( 'action' => 'info' )
-                               ) )->text()
+                               ) )->escaped()
                        );
                }
 
index 3a31b2a..be5a9c3 100644 (file)
@@ -380,6 +380,20 @@ abstract class ApiBase extends ContextSource {
                return $this->isMain() ? null : $this->getMain();
        }
 
+       /**
+        * Returns true if the current request breaks the same-origin policy.
+        *
+        * For example, json with callbacks.
+        *
+        * https://en.wikipedia.org/wiki/Same-origin_policy
+        *
+        * @since 1.25
+        * @return bool
+        */
+       public function lacksSameOriginSecurity() {
+               return $this->getMain()->getRequest()->getVal( 'callback' ) !== null;
+       }
+
        /**
         * Get the path to this module
         *
index a7ba48a..b56a244 100644 (file)
  */
 class ApiCreateAccount extends ApiBase {
        public function execute() {
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
-                       $this->dieUsage( 'Cannot create account when using a callback', 'aborted' );
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
+                       $this->dieUsage(
+                               'Cannot create account when the same-origin policy is not applied', 'aborted'
+                       );
                }
 
                // $loginForm->addNewaccountInternal will throw exceptions
index 8ad2ad9..15fa333 100644 (file)
@@ -255,6 +255,7 @@ class ApiEditPage extends ApiBase {
                        'wpIgnoreBlankSummary' => true,
                        'wpIgnoreBlankArticle' => true,
                        'wpIgnoreSelfRedirect' => true,
+                       'bot' => $params['bot'],
                );
 
                if ( !is_null( $params['summary'] ) ) {
@@ -401,7 +402,7 @@ class ApiEditPage extends ApiBase {
                $oldRequest = $wgRequest;
                $wgRequest = $req;
 
-               $status = $ep->internalAttemptSave( $result, $user->isAllowed( 'bot' ) && $params['bot'] );
+               $status = $ep->attemptSave( $result );
                $wgRequest = $oldRequest;
 
                switch ( $status->value ) {
index 920dbbf..5480d94 100644 (file)
@@ -46,11 +46,12 @@ class ApiLogin extends ApiBase {
         * is reached. The expiry is $this->mLoginThrottle.
         */
        public function execute() {
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        $this->getResult()->addValue( null, 'login', array(
                                'result' => 'Aborted',
-                               'reason' => 'Cannot log in when using a callback',
+                               'reason' => 'Cannot log in when the same-origin policy is not applied',
                        ) );
 
                        return;
index 34ed523..d5cd475 100644 (file)
@@ -181,10 +181,10 @@ class ApiMain extends ApiBase {
                        // Remove all modules other than login
                        global $wgUser;
 
-                       if ( $this->getVal( 'callback' ) !== null ) {
-                               // JSON callback allows cross-site reads.
-                               // For safety, strip user credentials.
-                               wfDebug( "API: stripping user credentials for JSON callback\n" );
+                       if ( $this->lacksSameOriginSecurity() ) {
+                               // If we're in a mode that breaks the same-origin policy, strip
+                               // user credentials for security.
+                               wfDebug( "API: stripping user credentials when the same-origin policy is not applied\n" );
                                $wgUser = new User();
                                $this->getContext()->setUser( $wgUser );
                        }
@@ -215,6 +215,8 @@ class ApiMain extends ApiBase {
                $this->mModuleMgr->addModules( self::$Formats, 'format' );
                $this->mModuleMgr->addModules( $config->get( 'APIFormatModules' ), 'format' );
 
+               Hooks::run( 'ApiMain::moduleManager', array( $this->mModuleMgr ) );
+
                $this->mResult = new ApiResult( $this );
                $this->mEnableWrite = $enableWrite;
 
index 514d559..9196dc7 100644 (file)
@@ -143,6 +143,8 @@ class ApiQuery extends ApiBase {
                $this->mModuleMgr->addModules( self::$QueryMetaModules, 'meta' );
                $this->mModuleMgr->addModules( $config->get( 'APIMetaModules' ), 'meta' );
 
+               Hooks::run( 'ApiQuery::moduleManager', array( $this->mModuleMgr ) );
+
                // Create PageSet that will process titles/pageids/revids/generator
                $this->mPageSet = new ApiPageSet( $this );
        }
index fcfddd6..6aa714e 100644 (file)
@@ -117,8 +117,6 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                        }
                }
 
-               $this->addOption( 'USE INDEX', array( 'categorylinks' => 'cl_from' ) );
-
                $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                // Don't order by cl_from if it's constant in the WHERE clause
                if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
index f828255..f46fb34 100644 (file)
@@ -75,8 +75,9 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        );
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        $fld_token = false;
                }
 
index 02c88c4..5af44ee 100644 (file)
@@ -90,8 +90,9 @@ class ApiQueryInfo extends ApiQueryBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
index 3cdc53c..adf96fd 100644 (file)
@@ -310,14 +310,21 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                if ( $action == 'unblock' ) {
                                        break;
                                }
+                               if ( $legacy ) {
+                                       $durationKey = 0;
+                                       $flagsKey = 1;
+                               } else {
+                                       $durationKey = '5::duration';
+                                       $flagsKey = '6::flags';
+                               }
                                $vals2 = array();
-                               $vals2['duration'] = $params[0];
-                               $vals2['flags'] = isset( $params[1] ) ? $params[1] : '';
+                               $vals2['duration'] = $params[$durationKey];
+                               $vals2['flags'] = isset( $params[$flagsKey] ) ? $params[$flagsKey] : '';
 
                                // Indefinite blocks have no expiry time
-                               if ( SpecialBlock::parseExpiryInput( $params[0] ) !== wfGetDB( DB_SLAVE )->getInfinity() ) {
+                               if ( SpecialBlock::parseExpiryInput( $params[$durationKey] ) !== wfGetDB( DB_SLAVE )->getInfinity() ) {
                                        $vals2['expiry'] = wfTimestamp( TS_ISO_8601,
-                                               strtotime( $params[0], wfTimestamp( TS_UNIX, $ts ) ) );
+                                               strtotime( $params[$durationKey], wfTimestamp( TS_UNIX, $ts ) ) );
                                }
                                $vals[$type] = $vals2;
                                $params = null;
@@ -338,6 +345,36 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                        unset( $params['5::mergepoint'] );
                                }
                                break;
+                       case 'delete':
+                               if ( $action === 'event' || $action === 'revision' ) {
+                                       // replace the named parameter with numbered for backward compatibility
+                                       if ( $action === 'event' ) {
+                                               $idsKey = '4::ids';
+                                               $ofieldKey = '5::ofield';
+                                               $nfieldKey = '6::nfield';
+                                       } else {
+                                               if ( isset( $params['4::type'] ) ) {
+                                                       $params[] = $params['4::type'];
+                                                       unset( $params['4::type'] );
+                                               }
+                                               $idsKey = '5::ids';
+                                               $ofieldKey = '6::ofield';
+                                               $nfieldKey = '7::nfield';
+                                       }
+                                       if ( isset( $params[$idsKey] ) ) {
+                                               $params[] = implode( ',', $params[$idsKey] );
+                                               unset( $params[$idsKey] );
+                                       }
+                                       if ( isset( $params[$ofieldKey] ) ) {
+                                               $params[] = $params[$ofieldKey];
+                                               unset( $params[$ofieldKey] );
+                                       }
+                                       if ( isset( $params[$nfieldKey] ) ) {
+                                               $params[] = $params[$nfieldKey];
+                                               unset( $params[$nfieldKey] );
+                                       }
+                               }
+                               break;
                }
                if ( !is_null( $params ) ) {
                        $logParams = array();
index b6ef604..1482034 100644 (file)
@@ -56,8 +56,9 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
@@ -534,7 +535,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                $vals['logid'] = intval( $row->rc_logid );
                                $vals['logtype'] = $row->rc_log_type;
                                $vals['logaction'] = $row->rc_log_action;
-                               $logEntry = DatabaseLogEntry::newFromRow( (array)$row );
+                               $logEntry = DatabaseLogEntry::newFromRow( $row );
                                ApiQueryLogEvents::addLogParams(
                                        $this->getResult(),
                                        $vals,
@@ -688,6 +689,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'type' => array(
+                               ApiBase::PARAM_DFLT => 'edit|new|log',
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'edit',
index 7092fc4..552ca3b 100644 (file)
@@ -53,8 +53,9 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
index 2e107ac..f8eee8d 100644 (file)
@@ -37,8 +37,8 @@ class ApiQueryTokens extends ApiQueryBase {
                $params = $this->extractRequestParams();
                $res = array();
 
-               if ( $this->getMain()->getRequest()->getVal( 'callback' ) !== null ) {
-                       $this->setWarning( 'Tokens may not be obtained when using a callback' );
+               if ( $this->lacksSameOriginSecurity() ) {
+                       $this->setWarning( 'Tokens may not be obtained when the same-origin policy is not applied' );
                        return;
                }
 
index 7fc0ba8..1e3a432 100644 (file)
@@ -115,7 +115,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        );
                }
                if ( isset( $this->prop['preferencestoken'] ) &&
-                       is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) &&
+                       !$this->lacksSameOriginSecurity() &&
                        $user->isAllowed( 'editmyoptions' )
                ) {
                        $vals['preferencestoken'] = $user->getEditToken( '', $this->getMain()->getRequest() );
index b7f2f9a..52636cc 100644 (file)
@@ -67,8 +67,9 @@ class ApiQueryUsers extends ApiQueryBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
index 6e60fe4..11008cf 100644 (file)
@@ -412,7 +412,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                $vals['logid'] = intval( $row->rc_logid );
                                $vals['logtype'] = $row->rc_log_type;
                                $vals['logaction'] = $row->rc_log_action;
-                               $logEntry = DatabaseLogEntry::newFromRow( (array)$row );
+                               $logEntry = DatabaseLogEntry::newFromRow( $row );
                                ApiQueryLogEvents::addLogParams(
                                        $this->getResult(),
                                        $vals,
@@ -499,6 +499,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                )
                        ),
                        'type' => array(
+                               ApiBase::PARAM_DFLT => 'edit|new|log',
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'edit',
index 09489e4..3457670 100644 (file)
@@ -334,11 +334,7 @@ class ApiStashEdit extends ApiBase {
                $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
                $ttl = min( $parserOutput->getCacheExpiry() - $since, 5 * 60 );
 
-               // Note: ParserOutput with that contains secondary data update callbacks can not be
-               // stashed, since the callbacks are not serializable (see ParserOutput::__sleep).
-               $hasCustomDataUpdates = $parserOutput->hasCustomDataUpdates();
-
-               if ( $ttl > 0 && !$parserOutput->getFlag( 'vary-revision' ) && !$hasCustomDataUpdates ) {
+               if ( $ttl > 0 && !$parserOutput->getFlag( 'vary-revision' ) ) {
                        // Only store what is actually needed
                        $stashInfo = (object)array(
                                'pstContent' => $pstContent,
index 073495c..9eb4020 100644 (file)
@@ -54,8 +54,9 @@ class ApiTokens extends ApiBase {
        }
 
        private function getTokenTypes() {
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
index e68f496..73179d0 100644 (file)
@@ -13,5 +13,6 @@
        "apihelp-delete-description": "Suprimeix una pàgina.",
        "apihelp-edit-description": "Crea i edita pàgines.",
        "apihelp-edit-param-text": "Contingut de la pàgina.",
+       "apihelp-expandtemplates-param-title": "Títol de la pàgina.",
        "apihelp-login-example-login": "Inicia sessió."
 }
index 4a64137..6b5c20b 100644 (file)
@@ -4,7 +4,8 @@
                        "Mormegil",
                        "YjM",
                        "Juandev",
-                       "Aktron"
+                       "Aktron",
+                       "Cvanca"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page Dokumentace]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete na stránce https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
@@ -29,8 +30,8 @@
        "apihelp-block-param-allowusertalk": "Povolit uživateli editovat svou vlastní diskusní stránku (závisí na <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Pokud již uživatel blokován je, přepsat současný blok.",
        "apihelp-block-param-watchuser": "Sledovat stránku uživatele nebo IP adresy a jejich diskuzní stránky.",
-       "apihelp-block-example-ip-simple": "Zablokovat IP 192.0.2.5 na tři dny s důvodem „First strike“",
-       "apihelp-block-example-user-complex": "Trvale zablokovat uživatele Vandal s odůvodněním „Vandalism“ a bránit vytváření nových účtů a e-mailování",
+       "apihelp-block-example-ip-simple": "Na tři dny zablokovat IP adresu <kbd>192.0.2.5</kbd> s odůvodněním <kbd>First strike</kbd>.",
+       "apihelp-block-example-user-complex": "Trvale zablokovat uživatele <kbd>Vandal</kbd> s odůvodněním <kbd>Vandalism</kbd> a zabránit vytváření nových účtů a odesílání e-mailů.",
        "apihelp-compare-description": "Vrátí rozdíl dvou stránek.\n\nVe „from“ a „to“ musíte zadat číslo revize, název stránky nebo ID stránky.",
        "apihelp-compare-param-fromtitle": "Název první stránky k porovnání.",
        "apihelp-compare-param-fromid": "ID první stránky k porovnání.",
        "apihelp-opensearch-example-te": "Najít stránky začínající na „<kbd>Te</kbd>“.",
        "apihelp-options-example-reset": "Vrátit všechna nastavení.",
        "apihelp-parse-example-page": "Parsovat stránku.",
+       "apihelp-parse-example-text": "Parsovat wikitext.",
        "apihelp-patrol-example-revid": "Prověřit revizi.",
        "apihelp-protect-description": "Změnit úroveň zamčení stránky.",
        "apihelp-protect-param-reason": "Důvod pro odemčení.",
        "apihelp-protect-example-protect": "Zamknout stránku.",
+       "apihelp-query+alldeletedrevisions-description": "Seznam všech smazaných revizí od konkrétního uživatele nebo v konkrétním jmenném prostoru.",
        "apihelp-query+alldeletedrevisions-example-user": "Seznam posledních 50 smazaných editací uživatele <kbd>Příklad<kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Seznam prvních 50 smazaných revizí v hlavním jmenném prostoru.",
        "apihelp-query+allfileusages-description": "Zobrazit seznam všech použití souboru, včetně neexistujících.",
+       "apihelp-query+allfileusages-example-unique": "Zobrazit seznam unikátních názvů souborů.",
        "apihelp-query+alllinks-example-generator": "Získat stránky obsahující odkazy.",
        "apihelp-query+allpages-param-filterredir": "Které stránky uvést na seznam.",
        "apihelp-query+allpages-param-minsize": "Omezit na stránky s určitým počtem bajtů.",
index 6f7ccf3..c2d7fcc 100644 (file)
@@ -7,7 +7,9 @@
                        "McDutchie",
                        "Element303",
                        "Macofe",
-                       "Linedwell"
+                       "Linedwell",
+                       "Nicolapps",
+                       "Raulel"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
        "apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
        "apihelp-block-example-ip-simple": "Bloquer l’adresse IP <kbd>192.0.2.5</kbd> pour trois jours avec le motif <kbd>Premier avertissement</kbd>.",
        "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur <kbd>Vandale</kbd> avec le motif <kbd>Vandalisme</kbd>, et empêcher la création de nouveau compte et l'envoi de courriel.",
+       "apihelp-checktoken-description": "Vérifier la validité d'un jeton de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Type de jeton testé",
+       "apihelp-checktoken-param-token": "Jeton à tester.",
+       "apihelp-checktoken-param-maxtokenage": "Temps maximum autorisé pour le jeton, en secondes",
+       "apihelp-checktoken-example-simple": "Tester la validité d'un jeton de <kbd>csrf</kbd>.",
        "apihelp-clearhasmsg-description": "Efface le drapeau <code>hasmsg</code> pour l’utilisateur courant.",
        "apihelp-clearhasmsg-example-1": "Effacer le drapeau <code>hasmsg</code> pour l’utilisateur courant",
        "apihelp-compare-description": "Obtenir la différence entre 2 pages.\n\nVous devez passer un numéro de révision, un titre de page, ou un ID de page, à la fois pour « from » et « to ».",
@@ -63,7 +70,7 @@
        "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec <var>$1title</var>.",
        "apihelp-delete-param-reason": "Motif de suppression. Si non défini, un motif généré automatiquement sera utilisé.",
        "apihelp-delete-param-watch": "Ajouter la page à la liste de suivi de l’utilisateur actuel.",
-       "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans distinction la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne rien changer au suivi.",
        "apihelp-delete-param-unwatch": "Supprimer la page de la liste de suivi de l'utilisateur actuel.",
        "apihelp-delete-param-oldimage": "Le nom de l’ancienne image à supprimer tel que fourni par [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
        "apihelp-delete-example-simple": "Supprimer <kbd>Page principale</kbd>.",
@@ -80,8 +87,8 @@
        "apihelp-edit-param-notminor": "Modification non mineure.",
        "apihelp-edit-param-bot": "Marquer cette modification comme robot.",
        "apihelp-edit-param-basetimestamp": "Horodatage de la révision de base, utilisé pour détecter les conflits de modification. Peut être obtenu via [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
-       "apihelp-edit-param-starttimestamp": "Horodatage quand vous avez commencé le processus de modification, utilisé pour détecter les conflits de modification. Une valeur appropriée peut être obtenue en utilisant [[Special:ApiHelp/main|curtimestamp]] lors du démarrage du processus de modification (par ex. en chargeant le contenu de la page à modifier).",
-       "apihelp-edit-param-recreate": "Écraser toutes les erreurs sur l’article ayant été supprimé pendant ce temps.",
+       "apihelp-edit-param-starttimestamp": "L'horodatage, lorsque le processus d'édition est démarré, est utilisé pour détecter les conflits de modification. Une valeur appropriée peut être obtenue en utilisant <var>[[Special:ApiHelp/main|curtimestamp]]</var> lors du démarrage du processus d'édition (par ex. en chargeant le contenu de la page à modifier).",
+       "apihelp-edit-param-recreate": "Ignorer toutes les erreurs concernant la page \nqui a été supprimée entre-temps.",
        "apihelp-edit-param-createonly": "Ne pas modifier la page si elle existe déjà.",
        "apihelp-edit-param-nocreate": "Lever une erreur si la page n’existe pas.",
        "apihelp-edit-param-watch": "Ajouter la page à la liste de suivi de l'utilisateur actuel.",
        "apihelp-move-param-from": "Titre de la page que vous voulez déplacer. Impossible de l’utiliser avec $1fromid.",
        "apihelp-move-param-fromid": "ID de la page que vous voulez déplacer. Impossible à utiliser avec $1from.",
        "apihelp-move-param-to": "Titre de la page renommée.",
-       "apihelp-move-param-reason": "Motif du déplacement.",
-       "apihelp-move-param-movetalk": "Déplacer la page de discussion, si elle existe.",
-       "apihelp-move-param-movesubpages": "Déplacer les sous-pages, le cas échéant.",
+       "apihelp-move-param-reason": "Motif du renommage.",
+       "apihelp-move-param-movetalk": "Renommer la page de discussion, si elle existe.",
+       "apihelp-move-param-movesubpages": "Renommer les sous-pages, le cas échéant.",
        "apihelp-move-param-noredirect": "Ne pas créer une redirection.",
-       "apihelp-move-param-watch": "Ajouter une page et la redirection à votre liste de suivi.",
-       "apihelp-move-param-unwatch": "Supprimer la page et la redirection de votre liste de suivi.",
-       "apihelp-move-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas changer le suivi.",
+       "apihelp-move-param-watch": "Ajouter une page et la redirection à liste de suivi de l'utilisateur actuel.",
+       "apihelp-move-param-unwatch": "Supprimer la page et la redirection de la liste de suivi de l'utilisateur actuel.",
+       "apihelp-move-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
        "apihelp-move-param-ignorewarnings": "Ignorer tous les avertissements.",
        "apihelp-move-example-move": "Déplacer <kbd>Mauvais titre</kbd> en <kbd>Bon titre</kbd> sans garder de redirection.",
        "apihelp-opensearch-description": "Rechercher dans le wiki en utilisant le protocole OpenSearch.",
        "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd> pour une protection sans expiration.",
        "apihelp-protect-param-reason": "Motif de (dé)protection.",
        "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les pages incluses dans cette page). Ignoré si tous les niveaux de protection fournis ne supportent pas la mise en cascade.",
-       "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à votre liste de suivi.",
-       "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à la liste de suivi de l'utilisateur actuel.",
+       "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas modifier le suivi.",
        "apihelp-protect-example-protect": "Protéger une page",
        "apihelp-protect-example-unprotect": "Enlever la protection d’une page en mettant les restrictions à <kbd>all</kbd>.",
        "apihelp-protect-example-unprotect2": "Enlever la protection de la page en ne mettant aucune restriction",
        "apihelp-query+backlinks-param-namespace": "L’espace de noms à énumérer.",
        "apihelp-query+backlinks-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+backlinks-param-filterredir": "Comment filtrer les redirections. Si positionné à <kbd>nonredirects</kbd> quand <var>$1redirect</var> est activé, cela ne s’applique qu’au second niveau.",
-       "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui signifie que vous pouvez obtenir jusqu’à 2 * limite résultats).",
+       "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui signifie jusqu’à 2 * limite résultats peut être retourné).",
        "apihelp-query+backlinks-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont un lien vers cette redirection aussi. La limite maximale est divisée par deux.",
        "apihelp-query+backlinks-example-simple": "Afficher les liens vers <kbd>Main page<kbd>.",
        "apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers <kbd>Main page<kbd>.",
        "apihelp-query+templates-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+templates-example-simple": "Obtenir les modèles de [[Main Page]]",
        "apihelp-query+templates-example-generator": "Obtenir des informations sur les pages modèle utilisé sur <kbd>Main Page</kbd>.",
-       "apihelp-query+templates-example-namespaces": "Obtenir les modèles de [[Main Page]] dans les espaces de nom Utilisateur et Modèle",
+       "apihelp-query+templates-example-namespaces": "Obtenir les pages des espaces de nom {{ns:user}} et {{ns:template}} qui sont inclues dans la page <kdb>Main Page<kdb>.",
        "apihelp-query+tokens-description": "Récupère les jetons pour les actions de modification de données.",
        "apihelp-query+tokens-param-type": "Types de jeton à demander.",
        "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut)",
        "apihelp-yaml-description": "Extraire les données au format YAML.",
        "apihelp-yamlfm-description": "Extraire les données YAML (affiché proprement en HTML).",
        "api-format-title": "Résultat de l’API de MédiaWiki",
-       "api-format-prettyprint-header": "Vous regardez la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre format pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez format=$2.\n\nVoyez la [https://www.mediawiki.org/wiki/API documentation complète], ou l’ [[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+       "api-format-prettyprint-header": "Vous regardez la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.$2\n\nSpécifiez le paramètre format pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez format=$2.\n\nVoyez la [https://www.mediawiki.org/wiki/API documentation complète], ou l’ [[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
        "api-orm-param-props": "Champs à rechercher.",
        "api-orm-param-limit": "Nombre maximal de lignes à renvoyer.",
        "api-pageset-param-titles": "Une liste des titres sur lesquels travailler.",
index 6d3ed76..528ca8a 100644 (file)
@@ -25,6 +25,7 @@
        "apihelp-block-param-allowusertalk": "Permitir que o usuario edite a súa propia páxina de conversa (depende de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Se o usuario xa está bloqueado, sobreescribir o bloqueo existente.",
        "apihelp-block-param-watchuser": "Vixiar a páxina de usuario ou direccións IP e a de conversa deste usuario",
+       "apihelp-checktoken-param-token": "Símbolo a testar",
        "apihelp-clearhasmsg-description": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
        "apihelp-clearhasmsg-example-1": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
        "apihelp-compare-param-fromtitle": "Primeiro título para comparar.",
        "apihelp-createaccount-param-name": "Nome de usuario.",
        "apihelp-createaccount-param-password": "Contrasinal (ignorado se <var>$1mailpassword</var> está activo)",
        "apihelp-createaccount-param-domain": "Dominio para autenticación externa (opcional)",
+       "apihelp-createaccount-param-token": "Símbolo de creación de conta obtido á primeira.",
        "apihelp-createaccount-param-email": "Enderezo de correo eletrónico do usuario (opcional).",
        "apihelp-createaccount-param-realname": "Nome real do usuario (opcional).",
        "apihelp-createaccount-param-mailpassword": "Se se establece calquera valor, enviarase un contrasinal aleatorio ao usuario.",
+       "apihelp-createaccount-param-language": "Código de lingua para usar como defecto polo usuario (de xeito opcional, usarase a lingua por defecto)",
        "apihelp-createaccount-example-pass": "Crear usuario <kbd>testuser</kbd> con contrasinal <kbd>test123</kbd>.",
        "apihelp-createaccount-example-mail": "Crear usuario <kbd>testmailuser</kbd>\"testmailuser\" e enviar por correo electrónico un contrasinal xenerado de forma aleatoria.",
        "apihelp-delete-description": "Borrar a páxina.",
@@ -76,7 +79,9 @@
        "apihelp-expandtemplates-description": "Expandir tódolos modelos en wikitexto.",
        "apihelp-expandtemplates-param-title": "Título da páxina.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki a converter.",
+       "apihelp-expandtemplates-param-includecomments": "Cando queria incluír comentarios HTML na saída.",
        "apihelp-feedcontributions-description": "Devolve a lista de contribucións dun usuario.",
+       "apihelp-feedcontributions-param-feedformat": "O formato de alimentación.",
        "apihelp-feedcontributions-param-year": "Desde o ano (e anteriores).",
        "apihelp-feedcontributions-param-month": "Desde o mes de (e anteriores).",
        "apihelp-feedcontributions-param-tagfilter": "Filtrar as contribucións que teñan estas etiquetas.",
index ce7f695..41f73b1 100644 (file)
        "apihelp-createaccount-description": "Ene neue Zohjang för ene Metmaacher aanlähje.",
        "apihelp-createaccount-param-name": "Der Nahme för dä Metmaacher.",
        "apihelp-createaccount-param-password": "Et Paßwoot (Weed ävver it jebruc un övverjange, wann <code lang=\"en\" xml:lang=\"en\"><var>$1mailpassword</var></code> jesaz es)",
+       "apihelp-createaccount-param-email": "Däm Metmaacher sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i>, kann och fott bliive.",
        "apihelp-createaccount-param-realname": "Dämm Medmaacher singe reschtejje Nahme - kann fott blihve.",
+       "apihelp-createaccount-param-mailpassword": "Wann heh jädd aanjejovve es, kritt dä Metmaacher e zohfällesch ußjesöhk neu Paßwood aan sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> jescheck.",
+       "apihelp-createaccount-param-reason": "Ene Jrond för dä Zojang aanzelähje, dä en de Logböhscher kütt.",
        "apihelp-delete-description": "Schmieß en Sigg fott.",
        "apihelp-delete-param-watch": "Donn di Sigg en däm aktoälle Metmaacher sing Oppaßleß opnämme.",
        "apihelp-delete-param-unwatch": "Schmihß di Sigg us däm aktoälle Metmaacher singe Oppaßless erus.",
        "apihelp-delete-example-simple": "Schmiiß de Houpsigg fott",
+       "apihelp-edit-description": "Sigge aanlähje un verändere.",
        "apihelp-edit-param-sectiontitle": "De Övverschreff för ene neue Affschnett.",
+       "apihelp-edit-param-text": "Dä Sigg ehre Ennhalld.",
        "apihelp-edit-param-minor": "En klein Änderong.",
        "apihelp-edit-param-notminor": "Kein klein Änderong.",
        "apihelp-edit-param-bot": "Makeer heh di Änderog als vun enem Bot jemaat.",
+       "apihelp-edit-param-createonly": "Donn di Sigg nit ändere, wann se ald doh es.",
+       "apihelp-edit-param-nocreate": "Mäld ene Fähler, wann di Sigg nit doh es.",
+       "apihelp-edit-param-redirect": "Verfollsch de Ömleidonge automattesch.",
+       "apihelp-edit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
        "apihelp-edit-example-edit": "Veränder en Sigg.",
+       "apihelp-edit-example-prepend": "Donn <kbd>_&#95;NOTOC_&#95;</kbd> för en Sigg säze.",
+       "apihelp-emailuser-description": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher schecke.",
+       "apihelp-emailuser-param-target": "D ä Metmaacher, dä di <i lang=\"en\" xml:lang=\"en\">e-mail</i> krijje sull.",
        "apihelp-emailuser-param-ccme": "scheck mer en Koppih vun heh dä <i lang=\"en\" xml:lang=\"en\">e-mail</i>.",
+       "apihelp-emailuser-example-email": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\">WikiSysop</kbd> schecke mem Täx <kbd>Dä Enhalld</kbd> dren.",
        "apihelp-expandtemplates-description": "Deiht alle Schablohne en Wikkitäx ömsäze.",
-       "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg."
+       "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg.",
+       "apihelp-query+allmessages-param-prop": "Wat för en Eijeschaffte holle.",
+       "apihelp-query+allmessages-param-filter": "Jiv blohß de Täxte un Nohreesche uß, woh heh dat Täxschtöck dren änthallde es.",
+       "apihelp-query+allmessages-param-customised": "Jiv bloß de Täxte un Nohreesche en heh däm Zohschtand uß.",
+       "apihelp-query+allmessages-param-lang": "Jiv de Täxte un Nohreesche en heh dä Schprohch uß.",
+       "apihelp-query+allmessages-param-from": "Jiv de Täxte un Nohreesche vun heh aan uß.",
+       "apihelp-query+allmessages-param-to": "Jiv de Täxte un Nohreesche bes heh uß.",
+       "apihelp-query+allmessages-param-prefix": "Jiv de Täxte un Nohreesche met heh däm Aanfang uß."
 }
index f321dfb..8b4bd1a 100644 (file)
@@ -14,7 +14,7 @@
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|文档]]\n* [[mw:API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:API:Errors_and_warnings|API: 错误与警告]]。",
        "apihelp-main-param-action": "要执行的操作。",
        "apihelp-main-param-format": "输出的格式。",
-       "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码“maxlag”会返回消息,例如“等待$host中:延迟$lag秒”。<br />参见https://www.mediawiki.org/wiki/Manual:Maxlag_parameter以获取更多信息。",
+       "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码<samp>maxlag</samp>会返回消息,例如<samp>等待$host中:延迟$lag秒</samp>。<br />参见[[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]]以获取更多信息。",
        "apihelp-main-param-smaxage": "设置<code>s-maxage</code>页顶至这些秒。错误不会缓存。",
        "apihelp-main-param-maxage": "设置<code>max-age</code>页顶至这些秒。错误不会缓存。",
        "apihelp-main-param-assert": "如果设置为<kbd>user</kbd>就验证用户是否登录,或如果设置为<kbd>bot</kbd>就验证是否有机器人用户权限。",
        "apihelp-block-param-watchuser": "监视用户或该 IP 的用户页和讨论页。",
        "apihelp-block-example-ip-simple": "封禁IP地址<kbd>192.0.2.5</kbd>三天,原因<kbd>First strike</kbd>。",
        "apihelp-block-example-user-complex": "无限期封禁用户<kbd>Vandal</kbd>,原因<kbd>Vandalism</kbd>,并阻止新账户创建和电子邮件发送。",
+       "apihelp-checktoken-description": "从<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>检查令牌有效性。",
        "apihelp-checktoken-param-type": "已开始测试的令牌类型。",
        "apihelp-checktoken-param-token": "要测试的令牌。",
+       "apihelp-checktoken-param-maxtokenage": "令牌的最大允许年龄,以秒计。",
        "apihelp-checktoken-example-simple": "测试<kbd>csrf</kbd>令牌的有效性。",
        "apihelp-clearhasmsg-description": "清除当前用户的<code>hasmsg</code>标记。",
        "apihelp-clearhasmsg-example-1": "清除当前用户的<code>hasmsg</code>标记。",
@@ -67,7 +69,7 @@
        "apihelp-delete-param-pageid": "要删除的页面的页面 ID。不能与<var>$1title</var>一起使用。",
        "apihelp-delete-param-reason": "删除原因。如果未设置,将使用一个自动生成的原因。",
        "apihelp-delete-param-watch": "将该页面加入当前用户的监视列表。",
-       "apihelp-delete-param-watchlist": "无条件地将页面加入至的监视列表或将其移除,使用设置或不更改监视。",
+       "apihelp-delete-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-delete-param-unwatch": "将该页面从当前用户的监视列表删除。",
        "apihelp-delete-param-oldimage": "由[[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]]提供的要删除的旧图片名称。",
        "apihelp-delete-example-simple": "删除<kbd>Main Page</kbd>。",
@@ -90,7 +92,7 @@
        "apihelp-edit-param-nocreate": "如果该页面不存在,则抛出一个错误。",
        "apihelp-edit-param-watch": "将页面加入当前用户的监视列表。",
        "apihelp-edit-param-unwatch": "将页面从当前用户的监视列表中移除。",
-       "apihelp-edit-param-watchlist": "无条件地将页面加入至的监视列表或将其移除,使用设置或不更改监视。",
+       "apihelp-edit-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-edit-param-md5": "$1text参数或$1prependtext和$1appendtext级联参数的MD5哈希值。如果设置,除非哈希值正确否则编辑无法完成。",
        "apihelp-edit-param-prependtext": "将该文本添加到该页面的开始。覆盖$1text。",
        "apihelp-edit-param-appendtext": "将该文本添加到该页面的结尾。覆盖$1text。\n\n采用$1section=new来添加一个新的章节,而不是这个参数。",
        "apihelp-filerevert-param-archivename": "恢复到修订版存档名称。",
        "apihelp-filerevert-example-revert": "回退<kbd>Wiki.png</kbd>至<kbd>2011-03-05T15:27:40Z</kbd>的版本。",
        "apihelp-help-description": "显示指定模块的帮助。",
+       "apihelp-help-param-modules": "用于显示帮助的模块(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)。可通过<kbd>+</kbd>指定子模块。",
        "apihelp-help-param-submodules": "包括给定名称模块的子模块的帮助。",
        "apihelp-help-param-recursivesubmodules": "包括递归子模块的帮助。",
        "apihelp-help-param-helpformat": "帮助的输出格式。",
        "apihelp-imagerotate-param-rotation": "顺时针旋转图像的度数。",
        "apihelp-imagerotate-example-simple": "<kbd>90</kbd>度旋转<kbd>File:Example.png</kbd>。",
        "apihelp-imagerotate-example-generator": "将<kbd>Category:Flip</kbd>之中的所有图像旋转<kbd>180</kbd>度。",
+       "apihelp-import-description": "从另一个wiki导入一个页面,或一个XML文件。\n\n注意当发送一个用于<var>xml</var>参数的文件时,HTTP POST必须作为一次文件上传完成(也就是使用multipart/form-data)。",
        "apihelp-import-param-summary": "导入摘要。",
        "apihelp-import-param-xml": "上传的XML文件。",
        "apihelp-import-param-interwikisource": "用于跨wiki导入:导入的来源wiki。",
        "apihelp-logout-example-logout": "退出当前用户",
        "apihelp-managetags-description": "执行有关更改标签的管理任务。",
        "apihelp-managetags-param-operation": "要执行哪个操作:\n;create:创建一个新的更改标签供手动使用。\n;delete:从数据库中移除一个更改标签,包括移除已使用在所有修订版本、最近更改记录和日志记录上的该标签。\n;activate:激活一个更改标签,允许用户手动应用它。\n;deactivate:停用一个更改标签,阻止用户手动应用它。",
+       "apihelp-managetags-param-tag": "要创建、删除、激活或取消激活的标签。要创建标签,标签必须不存在。要删除标签,标签必须存在。要激活标签,标签必须存在,且不被任何扩展使用。要取消激活标签,标签必须当前处于激活状态,且被手动定义。",
        "apihelp-managetags-param-reason": "一个创建、删除、激活或停用标签时的原因,可选。",
        "apihelp-managetags-param-ignorewarnings": "是否忽略操作期间发生的任何警告。",
        "apihelp-managetags-example-create": "创建一个名为<kbd>spam</kbd>的标签,原因<kbd>For use in edit patrolling</kbd>",
        "apihelp-move-param-noredirect": "不要创建重定向。",
        "apihelp-move-param-watch": "将页面和重定向加入至当前用户的监视列表中。",
        "apihelp-move-param-unwatch": "从当前用户的监视列表中移除页面及重定向。",
-       "apihelp-move-param-watchlist": "无条件地将页面加入至的监视列表或将其移除,使用设置或不更改监视。",
+       "apihelp-move-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-move-param-ignorewarnings": "忽略任何警告。",
        "apihelp-move-example-move": "移动<kbd>坏标题</kbd>到<kbd>好标题</kbd>并且不留下重定向。",
        "apihelp-opensearch-description": "使用OpenSearch协议搜索本wiki。",
        "apihelp-opensearch-example-te": "查找以<kbd>Te</kbd>开头的页面。",
        "apihelp-options-description": "更改当前用户的偏好设置。\n\n只有注册在核心或者已安装扩展中的选项,或者具有\"userjs-\"键值前缀(旨在被用户脚本使用)的选项可被设置。",
        "apihelp-options-param-reset": "重置偏好设置到网站默认设置。",
+       "apihelp-options-param-resetkinds": "当<var>$1reset</var>选项被设置时,要重置的选项类型列表。",
        "apihelp-options-example-reset": "重置所有用户设置",
        "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>设置。",
        "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>皮肤</kbd>和<kbd>昵称</kbd>。",
        "apihelp-paraminfo-param-formatmodules": "格式模块名称(<var>format</var>参数的值)的列表。也可使用<var>$1modules</kbd>。",
        "apihelp-paraminfo-example-1": "显示<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>、<kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>、<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>和<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>的信息。",
        "apihelp-parse-description": "解析内容并返回解析器输出。\n\n参见<kbd>[[Special:ApiHelp/query|action=query]]</kbd>的各种prop-module以从页面的当前版本获得信息。\n\n这里有几种方法可以指定解析的文本:\n# 指定一个页面或修订,使用<var>$1page</var>、<var>$1pageid</var>或<var>$1oldid</var>。\n# 明确指定内容,使用<var>$1text</var>、<var>$1title</var>和<var>$1contentmodel</var>。\n# 只指定一段摘要解析。<var>$1prop</var>应提供一个空值。",
+       "apihelp-parse-param-title": "文本属于的页面标题。如果省略,<var>$1contentmodel</var>就必须被指定,且[[API]]将作为标题使用。",
+       "apihelp-parse-param-text": "要解析的文本。使用<var>$1title</var>或<var>$1contentmodel</var>以控制内容模型。",
        "apihelp-parse-param-summary": "所要解析的摘要。",
        "apihelp-parse-param-page": "解析此页的内容。不能与<var>$1text</var>和<var>$1title</var>一起使用。",
        "apihelp-parse-param-pageid": "解析此页的内容。覆盖<var>$1page</var>。",
-       "apihelp-parse-param-redirects": "如果 $1page 或 $1 pageid 参数被设置为一个重定向,则解析它。",
+       "apihelp-parse-param-redirects": "如果<var>$1page</var>或<var>$1pageid</var>被设置为一个重定向,则解析它。",
        "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖<var>$1page</var>和<var>$1pageid</var>。",
        "apihelp-parse-param-disablepp": "从解析器输出中禁用PP报告。",
        "apihelp-parse-param-disableeditsection": "从解析器输出中禁用编辑段落链接。",
        "apihelp-protect-param-protections": "保护等级列表,格式:<kbd>action=level</kbd>(例如<kbd>edit=sysop</kbd>)。\n\n<strong>注意:</strong>未列出的操作将移除限制。",
        "apihelp-protect-param-expiry": "到期时间戳。如果只有一个时间戳被设置,它将被用于所有保护。使用<kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd>或<kbd>never</kbd>用于永不过期的保护。",
        "apihelp-protect-param-reason": "(解除)保护的原因。",
+       "apihelp-protect-param-watch": "如果设置,就加入已开始(解除)保护的页面至当前用户的监视列表。",
+       "apihelp-protect-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-protect-example-protect": "保护一个页面",
        "apihelp-protect-example-unprotect": "通过设置限制为<kbd>all</kbd>解除保护一个页面。",
        "apihelp-protect-example-unprotect2": "通过设置没有限制解除保护一个页面",
        "apihelp-query+allcategories-example-size": "列出分类及其含有多少页面的信息。",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "只可以与<var>$3user</var>一起使用。",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能与<var>$3user</var>一起使用。",
+       "apihelp-query+alldeletedrevisions-param-start": "枚举的起始时间戳。",
+       "apihelp-query+alldeletedrevisions-param-end": "枚举的结束时间戳。",
        "apihelp-query+alldeletedrevisions-param-from": "从此标题开始列出。",
        "apihelp-query+alldeletedrevisions-param-to": "列出至此标题为止。",
+       "apihelp-query+alldeletedrevisions-param-tag": "只列出被此标签标记的修订。",
        "apihelp-query+alldeletedrevisions-param-user": "只列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
        "apihelp-query+alllinks-example-unique": "列出唯一的链接标题",
        "apihelp-query+alllinks-example-unique-generator": "获得所有已链接的标题,标记缺少的。",
        "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面",
-       "apihelp-query+allmessages-description": "è¿\94å\9b\9eæ\9d¥è\87ªè¯¥ç«\99ç\82¹的消息。",
+       "apihelp-query+allmessages-description": "è¿\94å\9b\9eæ\9d¥è\87ªè¯¥ç½\91ç«\99的消息。",
        "apihelp-query+allmessages-param-messages": "要输出的消息。<kbd>*</kbd>(默认)表示所有消息。",
        "apihelp-query+allmessages-param-prop": "要获取的属性。",
+       "apihelp-query+allmessages-param-customised": "只返回在此定制情形下的消息。",
        "apihelp-query+allmessages-param-lang": "返回这种语言的信息。",
+       "apihelp-query+allmessages-param-from": "从此消息开始返回消息。",
+       "apihelp-query+allmessages-param-to": "返回消息至此消息为止。",
        "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
        "apihelp-query+allmessages-example-ipb": "显示以<kbd>ipb-</kbd>开始的消息。",
        "apihelp-query+allmessages-example-de": "显示德语版的<kbd>august</kbd>和<kbd>mainpage</kbd>消息。",
        "apihelp-query+alltransclusions-example-unique": "列出孤立嵌入标题",
        "apihelp-query+alltransclusions-example-generator": "获得包含嵌入内容的页面。",
        "apihelp-query+allusers-description": "列举所有注册用户。",
+       "apihelp-query+allusers-param-from": "枚举的起始用户名。",
+       "apihelp-query+allusers-param-to": "枚举的结束用户名。",
        "apihelp-query+allusers-param-dir": "排序方向。",
        "apihelp-query+allusers-param-group": "只包含指定组中的用户。",
        "apihelp-query+allusers-param-excludegroup": "排除指定组中的用户。",
        "apihelp-query+blocks-param-users": "要搜索的用户列表(可选)。",
        "apihelp-query+blocks-example-simple": "封禁列表",
        "apihelp-query+blocks-example-users": "列出用户<kbd>Alice</kbd>和<kbd>Bob</kbd>的封禁。",
+       "apihelp-query+categories-description": "页面属于的所有分类列表。",
        "apihelp-query+categories-param-show": "显示何种分类。",
        "apihelp-query+categories-param-limit": "返回多少分类。",
        "apihelp-query+categories-param-dir": "罗列所采用的方向。",
        "apihelp-query+categorymembers-param-title": "要列举的分类(必需)。必须包括<kbd>{{ns:category}}:</kbd>前缀。不能与<var>$1pageid</var>一起使用。",
        "apihelp-query+categorymembers-param-namespace": "仅包含这些名字空间的页面。注意<kbd>$1type=subcat</kbd>或<kbd>$1type=file</kbd>可能被使用,而不是<kbd>$1namespace=14</kbd>或<kbd>6</kbd>。",
        "apihelp-query+categorymembers-param-type": "包含的分类成员类型。当<kbd>$1sort=timestamp</kbd>被设置时会忽略。",
+       "apihelp-query+categorymembers-param-limit": "返回页面的最大数量。",
        "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
        "apihelp-query+categorymembers-param-dir": "排序的方向。",
        "apihelp-query+categorymembers-param-start": "开始列举的时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
        "apihelp-query+embeddedin-example-generator": "获得有关显示嵌入<kbd>Template:Stub</kbd>的页面的信息。",
        "apihelp-query+extlinks-param-limit": "返回多少链接。",
        "apihelp-query+extlinks-example-simple": "获取<kbd>首页</kbd>的外部链接列表。",
+       "apihelp-query+exturlusage-param-namespace": "要列举的页面名字空间。",
        "apihelp-query+exturlusage-param-limit": "返回多少页面。",
        "apihelp-query+exturlusage-example-simple": "显示链接至<kbd>http://www.mediawiki.org</kbd>的页面。",
+       "apihelp-query+filearchive-param-from": "枚举的起始图片标题。",
+       "apihelp-query+filearchive-param-to": "枚举的结束图片标题。",
        "apihelp-query+filearchive-param-dir": "罗列所采用的方向。",
        "apihelp-query+filearchive-param-sha1": "图片的SHA1哈希值。覆盖$1sha1base36。",
        "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
        "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
        "apihelp-query+info-description": "获取基本页面信息。",
        "apihelp-query+info-param-prop": "要获取的额外属性:",
+       "apihelp-query+info-paramvalue-prop-watched": "列出每个页面的被监视状态。",
        "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
        "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+info-example-simple": "获得有关页面<kbd>Main Page</kbd>的信息。",
        "apihelp-query+links-example-simple": "从页面<kbd>Main Page</kbd>获得链接",
        "apihelp-query+links-example-generator": "获得有关在页面<kbd>Main Page</kbd>中连接的页面的信息。",
        "apihelp-query+links-example-namespaces": "获得在{{ns:user}}和{{ns:template}}名字空间中来自页面<kbd>Main Page</kbd>的链接。",
+       "apihelp-query+linkshere-description": "查找所有链接至指定页面的页面。",
+       "apihelp-query+linkshere-param-prop": "要获得的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:如果页面是一个重定向就标记。",
        "apihelp-query+linkshere-param-namespace": "只包括这些名字空间的页面。",
        "apihelp-query+linkshere-param-limit": "返回多少。",
        "apihelp-query+linkshere-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
        "apihelp-query+linkshere-example-simple": "获取链接至[[首页]]的页面列表",
        "apihelp-query+linkshere-example-generator": "获取有关链接至[[首页]]的页面的信息",
        "apihelp-query+logevents-description": "从日志获取事件。",
+       "apihelp-query+logevents-param-start": "枚举的起始时间戳。",
+       "apihelp-query+logevents-param-end": "枚举的结束时间戳。",
        "apihelp-query+logevents-example-simple": "列出最近日志活动",
        "apihelp-query+pagepropnames-description": "列出wiki中所有使用中的页面属性名称。",
+       "apihelp-query+pagepropnames-param-limit": "返回名称的最大数量。",
        "apihelp-query+pagepropnames-example-simple": "获取前10个属性名称。",
        "apihelp-query+pageprops-example-simple": "获得用于<kbd>Category:Foo</kbd>的属性。",
        "apihelp-query+pageswithprop-description": "列出所有使用指定页面属性的页面。",
+       "apihelp-query+pageswithprop-param-limit": "返回页面的最大数量。",
        "apihelp-query+pageswithprop-param-dir": "排序的方向。",
        "apihelp-query+pageswithprop-example-simple": "列出前10个使用<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>的页面。",
        "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用<code>_&#95;NOTOC_&#95;</code>的页面的信息。",
        "apihelp-query+siteinfo-example-replag": "检查当前的响应延迟。",
        "apihelp-query+stashimageinfo-example-simple": "返回藏匿文件的信息。",
        "apihelp-query+tags-description": "列出更改标签。",
+       "apihelp-query+tags-param-limit": "列出标签的最大数量。",
        "apihelp-query+tags-param-prop": "要获取哪个属性:\n;name:添加标签名称。\n;displayname:为标签添加系统消息。\n;description:为标签添加描述。\n;hitcount:已添加此标签的修订版本与日志数量。\n;defined:标识标签是否已定义。\n;source:获得标签来源,它可能包括用于扩展定义的标签的<samp>extension</samp>,以及用于可被用户手动应用的标签的<samp>manual</samp>。\n;active:标签是否仍可被应用。",
        "apihelp-query+tags-example-simple": "可用标签列表",
        "apihelp-query+templates-param-namespace": "只显示此名字空间的模板。",
        "apihelp-query+users-description": "获取有关列出用户的信息。",
        "apihelp-query+users-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
        "apihelp-query+users-example-simple": "返回用户<kbd>Example</kbd>的信息。",
+       "apihelp-query+watchlist-param-start": "枚举的起始时间戳。",
+       "apihelp-query+watchlist-param-end": "枚举的结束时间戳。",
        "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
        "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+watchlist-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
        "apihelp-revisiondelete-example-revision": "隐藏<kbd>首页</kbd>的修订版本<kbd>12345</kbd>的内容。",
        "apihelp-rollback-param-title": "要回退的页面标题。不能与<var>$1pageid</var>一起使用。",
        "apihelp-rollback-param-pageid": "要回退的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+       "apihelp-rollback-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-rollback-example-simple": "回退由用户<kbd>Example</kbd>对<kbd>Main Page</kbd>做出的最近编辑。",
        "apihelp-rollback-example-summary": "回退由IP用户<kbd>192.0.2.5</kbd>对页面<kbd>Main Page</kbd>做出的最近编辑,带编辑摘要<kbd>Reverting vandalism</kbd>,并将这些编辑和回退标记为机器人编辑。",
        "apihelp-rsd-description": "导出一个RSD(Really Simple Discovery)架构",
        "apihelp-rsd-example-simple": "导出RSD架构",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "工作于所有已监视页面。",
+       "apihelp-setnotificationtimestamp-example-all": "重置整个监视列表的通知状态。",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "设置<kbd>Main page</kbd>的通知时间戳,这样所有从2012年1月1日起的编辑都会是未复核的。",
        "apihelp-setnotificationtimestamp-example-allpages": "重置在<kbd>{{ns:user}}</kbd>名字空间中的页面的通知状态。",
        "apihelp-tokens-param-type": "要请求的令牌类型。",
        "apihelp-unblock-example-user": "解封用户<kbd>Bob</kbd>,原因<kbd>Sorry Bob</kbd>。",
        "apihelp-undelete-param-title": "要恢复的页面标题。",
        "apihelp-undelete-param-reason": "恢复的原因。",
+       "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-example-page": "恢复页面<kbd>Main Page</kbd>。",
        "apihelp-undelete-example-revisions": "恢复<kbd>首页</kbd>的两个修订。",
        "apihelp-upload-param-filename": "目标文件名。",
+       "apihelp-upload-param-comment": "上传注释。如果没有指定<var>$1text</var>,那么它也被用于新文件的初始页面文本。",
        "apihelp-upload-param-watch": "监视页面。",
+       "apihelp-upload-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
        "apihelp-upload-param-file": "文件内容。",
        "apihelp-upload-param-stash": "如果设置,服务器将临时藏匿文件而不是加入存储库。",
        "apihelp-yaml-description": "输出数据为YAML格式。",
        "apihelp-yamlfm-description": "输出数据为YAML格式(HTML优质打印效果)。",
        "api-format-title": "MediaWiki API 结果",
-       "api-format-prettyprint-header": "您正在查看$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定格式参数以更改输出格式。要查看$1格式的非HTML表示,设置format=$2。\n\n参见[https://www.mediawiki.org/wiki/Special:MyLanguage/API 完整文档],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
+       "api-format-prettyprint-header": "这是$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML表示,设置<kbd>format=$2</kbd>。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API 帮助]]以获取更多信息。",
        "api-orm-param-props": "要查询的字段。",
        "api-orm-param-limit": "返回的总行数。",
        "api-pageset-param-generator": "通过执行指定查询模块获得页面列表以工作。\n\n<strong>注意:</strong>发生器参数名称必须以“g”开头,参见例子。",
index c6d9a18..c3f455e 100644 (file)
@@ -487,4 +487,55 @@ class BacklinkCache {
 
                return array( 'numRows' => $numRows, 'batches' => $batches );
        }
+
+       /**
+        * Get a Title iterator for cascade-protected template/file use backlinks
+        *
+        * @return TitleArray
+        * @since 1.25
+        */
+       public function getCascadeProtectedLinks() {
+               $dbr = $this->getDB();
+
+               // @todo: use UNION without breaking tests that use temp tables
+               $resSets = array();
+               $resSets[] = $dbr->select(
+                       array( 'templatelinks', 'page_restrictions', 'page' ),
+                       array( 'page_namespace', 'page_title', 'page_id' ),
+                       array(
+                               'tl_namespace' => $this->title->getNamespace(),
+                               'tl_title' => $this->title->getDBkey(),
+                               'tl_from = pr_page',
+                               'pr_cascade' => 1,
+                               'page_id = tl_from'
+                       ),
+                       __METHOD__,
+                       array( 'DISTINCT' )
+               );
+               if ( $this->title->getNamespace() == NS_FILE ) {
+                       $resSets[] = $dbr->select(
+                               array( 'imagelinks', 'page_restrictions', 'page' ),
+                               array( 'page_namespace', 'page_title', 'page_id' ),
+                               array(
+                                       'il_to' => $this->title->getDBkey(),
+                                       'il_from = pr_page',
+                                       'pr_cascade' => 1,
+                                       'page_id = il_from'
+                               ),
+                               __METHOD__,
+                               array( 'DISTINCT' )
+                       );
+               }
+
+               // Combine and de-duplicate the results
+               $mergedRes = array();
+               foreach ( $resSets as $res ) {
+                       foreach ( $res as $row ) {
+                               $mergedRes[$row->page_id] = $row;
+                       }
+               }
+
+               return TitleArray::newFromResult(
+                       new FakeResultWrapper( array_values( $mergedRes ) ) );
+       }
 }
index 75cd5ee..3b3ba9d 100644 (file)
@@ -25,5 +25,5 @@
  *
  * @since 1.23
  */
-class ConfigException extends MWException {
+class ConfigException extends Exception {
 }
index 816572c..d8fca4d 100644 (file)
@@ -204,13 +204,13 @@ abstract class AbstractContent implements Content {
         * Returns a list of DataUpdate objects for recording information about this
         * Content in some secondary data store.
         *
-        * This default implementation calls
-        * $this->getParserOutput( $content, $title, null, null, false ),
-        * and then calls getSecondaryDataUpdates( $title, $recursive ) on the
-        * resulting ParserOutput object.
+        * This default implementation returns a LinksUpdate object and calls the
+        * SecondaryDataUpdates hook.
         *
         * Subclasses may override this to determine the secondary data updates more
         * efficiently, preferably without the need to generate a parser output object.
+        * They should however make sure to call SecondaryDataUpdates to give extensions
+        * a chance to inject additional updates.
         *
         * @since 1.21
         *
@@ -224,12 +224,19 @@ abstract class AbstractContent implements Content {
         * @see Content::getSecondaryDataUpdates()
         */
        public function getSecondaryDataUpdates( Title $title, Content $old = null,
-               $recursive = true, ParserOutput $parserOutput = null ) {
+               $recursive = true, ParserOutput $parserOutput = null
+       ) {
                if ( $parserOutput === null ) {
                        $parserOutput = $this->getParserOutput( $title, null, null, false );
                }
 
-               return $parserOutput->getSecondaryDataUpdates( $title, $recursive );
+               $updates = array(
+                       new LinksUpdate( $title, $parserOutput, $recursive )
+               );
+
+               Hooks::run( 'SecondaryDataUpdates', array( $title, $old, $recursive, $parserOutput, &$updates ) );
+
+               return $updates;
        }
 
        /**
index 61b9254..5823a9a 100644 (file)
@@ -292,6 +292,9 @@ interface Content {
         * Subclasses may implement this to determine the necessary updates more
         * efficiently, or make use of information about the old content.
         *
+        * @note Implementations should call the SecondaryDataUpdates hook, like
+        *   AbstractContent does.
+        *
         * @param Title $title The context for determining the necessary updates
         * @param Content $old An optional Content object representing the
         *    previous content, i.e. the content being replaced by this Content
index 8c806c6..371b267 100644 (file)
@@ -626,8 +626,15 @@ abstract class ContentHandler {
        public function createDifferenceEngine( IContextSource $context, $old = 0, $new = 0,
                $rcid = 0, //FIXME: Deprecated, no longer used
                $refreshCache = false, $unhide = false ) {
-               $diffEngineClass = $this->getDiffEngineClass();
 
+               // hook: get difference engine
+               $differenceEngine = null;
+               if ( !wfRunHooks( 'GetDifferenceEngine',
+                       array( $context, $old, $new, $refreshCache, $unhide, &$differenceEngine )
+               ) ) {
+                       return $differenceEngine;
+               }
+               $diffEngineClass = $this->getDiffEngineClass();
                return new $diffEngineClass( $context, $old, $new, $rcid, $refreshCache, $unhide );
        }
 
index 8ce7f3f..ee1722e 100644 (file)
@@ -753,32 +753,19 @@ abstract class DatabaseBase implements IDatabase {
         *
         * @param array $params Parameters passed from DatabaseBase::factory()
         */
-       function __construct( $params = null ) {
+       function __construct( array $params ) {
                global $wgDBprefix, $wgDBmwschema, $wgCommandLineMode, $wgDebugDBTransactions;
 
                $this->mTrxAtomicLevels = new SplStack;
 
-               if ( is_array( $params ) ) { // MW 1.22
-                       $server = $params['host'];
-                       $user = $params['user'];
-                       $password = $params['password'];
-                       $dbName = $params['dbname'];
-                       $flags = $params['flags'];
-                       $tablePrefix = $params['tablePrefix'];
-                       $schema = $params['schema'];
-                       $foreign = $params['foreign'];
-               } else { // legacy calling pattern
-                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.23" );
-                       $args = func_get_args();
-                       $server = isset( $args[0] ) ? $args[0] : false;
-                       $user = isset( $args[1] ) ? $args[1] : false;
-                       $password = isset( $args[2] ) ? $args[2] : false;
-                       $dbName = isset( $args[3] ) ? $args[3] : false;
-                       $flags = isset( $args[4] ) ? $args[4] : 0;
-                       $tablePrefix = isset( $args[5] ) ? $args[5] : 'get from global';
-                       $schema = 'get from global';
-                       $foreign = isset( $args[6] ) ? $args[6] : false;
-               }
+               $server = $params['host'];
+               $user = $params['user'];
+               $password = $params['password'];
+               $dbName = $params['dbname'];
+               $flags = $params['flags'];
+               $tablePrefix = $params['tablePrefix'];
+               $schema = $params['schema'];
+               $foreign = $params['foreign'];
 
                $this->mFlags = $flags;
                if ( $this->mFlags & DBO_DEFAULT ) {
@@ -902,18 +889,17 @@ abstract class DatabaseBase implements IDatabase {
 
                $class = 'Database' . ucfirst( $driver );
                if ( class_exists( $class ) && is_subclass_of( $class, 'DatabaseBase' ) ) {
-                       $params = array(
-                               'host' => isset( $p['host'] ) ? $p['host'] : false,
-                               'user' => isset( $p['user'] ) ? $p['user'] : false,
-                               'password' => isset( $p['password'] ) ? $p['password'] : false,
-                               'dbname' => isset( $p['dbname'] ) ? $p['dbname'] : false,
-                               'flags' => isset( $p['flags'] ) ? $p['flags'] : 0,
-                               'tablePrefix' => isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global',
-                               'schema' => isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType],
-                               'foreign' => isset( $p['foreign'] ) ? $p['foreign'] : false
-                       );
-
-                       return new $class( $params );
+                       // Resolve some defaults for b/c
+                       $p['host'] = isset( $p['host'] ) ? $p['host'] : false;
+                       $p['user'] = isset( $p['user'] ) ? $p['user'] : false;
+                       $p['password'] = isset( $p['password'] ) ? $p['password'] : false;
+                       $p['dbname'] = isset( $p['dbname'] ) ? $p['dbname'] : false;
+                       $p['flags'] = isset( $p['flags'] ) ? $p['flags'] : 0;
+                       $p['tablePrefix'] = isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global';
+                       $p['schema'] = isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType];
+                       $p['foreign'] = isset( $p['foreign'] ) ? $p['foreign'] : false;
+
+                       return new $class( $p );
                } else {
                        return null;
                }
@@ -1638,9 +1624,10 @@ abstract class DatabaseBase implements IDatabase {
         *     - If the value of such an array element is a scalar (such as a
         *       string), it will be treated as data and thus quoted appropriately.
         *       If it is null, an IS NULL clause will be added.
-        *     - If the value is an array, an IN(...) clause will be constructed,
-        *       such that the field name may match any of the elements in the
-        *       array. The elements of the array will be quoted.
+        *     - If the value is an array, an IN (...) clause will be constructed
+        *       from its non-null elements, and an IS NULL clause will be added
+        *       if null is present, such that the field may match any of the
+        *       elements in the array. The non-null elements will be quoted.
         *
         * Note that expressions are often DBMS-dependent in their syntax.
         * DBMS-independent wrappers are provided for constructing several types of
@@ -2679,10 +2666,13 @@ abstract class DatabaseBase implements IDatabase {
        /**
         * Adds quotes and backslashes.
         *
-        * @param string $s
+        * @param string|Blob $s
         * @return string
         */
        public function addQuotes( $s ) {
+               if ( $s instanceof Blob ) {
+                       $s = $s->fetch();
+               }
                if ( $s === null ) {
                        return 'NULL';
                } else {
@@ -3946,10 +3936,13 @@ abstract class DatabaseBase implements IDatabase {
         * in result objects. Pass the object through this function to return the
         * original string.
         *
-        * @param string $b
+        * @param string|Blob $b
         * @return string
         */
        public function decodeBlob( $b ) {
+               if ( $b instanceof Blob ) {
+                       $b = $b->fetch();
+               }
                return $b;
        }
 
index f5e6667..2b8f395 100644 (file)
@@ -1094,7 +1094,7 @@ class DatabaseMssql extends DatabaseBase {
        }
 
        /**
-        * @param string $s
+        * @param string|Blob $s
         * @return string
         */
        public function addQuotes( $s ) {
index e150206..9b00fbd 100644 (file)
@@ -207,23 +207,9 @@ class DatabaseOracle extends DatabaseBase {
        /** @var array */
        private $mFieldInfoCache = array();
 
-       function __construct( $p = null ) {
+       function __construct( array $p ) {
                global $wgDBprefix;
 
-               if ( !is_array( $p ) ) { // legacy calling pattern
-                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
-                       $args = func_get_args();
-                       $p = array(
-                               'host' => isset( $args[0] ) ? $args[0] : false,
-                               'user' => isset( $args[1] ) ? $args[1] : false,
-                               'password' => isset( $args[2] ) ? $args[2] : false,
-                               'dbname' => isset( $args[3] ) ? $args[3] : false,
-                               'flags' => isset( $args[4] ) ? $args[4] : 0,
-                               'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
-                               'schema' => 'get from global',
-                               'foreign' => isset( $args[6] ) ? $args[6] : false
-                       );
-               }
                if ( $p['tablePrefix'] == 'get from global' ) {
                        $p['tablePrefix'] = $wgDBprefix;
                }
index abf26e0..3d0ed86 100644 (file)
@@ -1495,12 +1495,14 @@ SQL;
         * @return Blob
         */
        function encodeBlob( $b ) {
-               return new Blob( pg_escape_bytea( $this->mConn, $b ) );
+               return new PostgresBlob( pg_escape_bytea( $b ) );
        }
 
        function decodeBlob( $b ) {
-               if ( $b instanceof Blob ) {
+               if ( $b instanceof PostgresBlob ) {
                        $b = $b->fetch();
+               } elseif ( $b instanceof Blob ) {
+                       return $b->fetch();
                }
 
                return pg_unescape_bytea( $b );
@@ -1520,7 +1522,12 @@ SQL;
                } elseif ( is_bool( $s ) ) {
                        return intval( $s );
                } elseif ( $s instanceof Blob ) {
-                       return "'" . $s->fetch( $s ) . "'";
+                       if ( $s instanceof PostgresBlob ) {
+                               $s = $s->fetch();
+                       } else {
+                               $s = pg_escape_bytea( $this->mConn, $s->fetch() );
+                       }
+                       return "'$s'";
                }
 
                return "'" . pg_escape_string( $this->mConn, $s ) . "'";
@@ -1692,3 +1699,5 @@ SQL;
                return wfBaseConvert( substr( sha1( $lockName ), 0, 15 ), 16, 10 );
        }
 } // end DatabasePostgres class
+
+class PostgresBlob extends Blob {}
index 95c44df..0b51972 100644 (file)
@@ -32,6 +32,9 @@ class DatabaseSqlite extends DatabaseBase {
        /** @var string File name for SQLite database file */
        public $mDatabaseFile;
 
+       /** @var string Transaction mode */
+       protected $trxMode;
+
        /** @var int The number of rows affected as an integer */
        protected $mAffectedRows;
 
@@ -44,23 +47,14 @@ class DatabaseSqlite extends DatabaseBase {
        /** @var FSLockManager (hopefully on the same server as the DB) */
        protected $lockMgr;
 
-       function __construct( $p = null ) {
+       /**
+        * Additional params include:
+        *   - trxMode : one of (deferred, immediate, exclusive)
+        * @param array $p
+        */
+       function __construct( array $p ) {
                global $wgSharedDB, $wgSQLiteDataDir;
 
-               if ( !is_array( $p ) ) { // legacy calling pattern
-                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
-                       $args = func_get_args();
-                       $p = array(
-                               'host' => isset( $args[0] ) ? $args[0] : false,
-                               'user' => isset( $args[1] ) ? $args[1] : false,
-                               'password' => isset( $args[2] ) ? $args[2] : false,
-                               'dbname' => isset( $args[3] ) ? $args[3] : false,
-                               'flags' => isset( $args[4] ) ? $args[4] : 0,
-                               'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
-                               'schema' => 'get from global',
-                               'foreign' => isset( $args[6] ) ? $args[6] : false
-                       );
-               }
                $this->mDBname = $p['dbname'];
                parent::__construct( $p );
                // parent doesn't open when $user is false, but we can work with $dbName
@@ -72,6 +66,12 @@ class DatabaseSqlite extends DatabaseBase {
                        }
                }
 
+               $this->trxMode = isset( $p['trxMode'] ) ? strtoupper( $p['trxMode'] ) : null;
+               if ( $this->trxMode && !in_array( $this->trxMode, array( 'IMMEDIATE', 'EXCLUSIVE' ) ) ) {
+                       $this->trxMode = null;
+                       wfWarn( "Invalid SQLite transaction mode provided." );
+               }
+
                $this->lockMgr = new FSLockManager( array( 'lockDirectory' => "$wgSQLiteDataDir/locks" ) );
        }
 
@@ -711,6 +711,15 @@ class DatabaseSqlite extends DatabaseBase {
                return false;
        }
 
+       protected function doBegin( $fname = '' ) {
+               if ( $this->trxMode ) {
+                       $this->query( "BEGIN {$this->trxMode}", $fname );
+               } else {
+                       $this->query( 'BEGIN', $fname );
+               }
+               $this->mTrxLevel = 1;
+       }
+
        /**
         * @param string $s
         * @return string
@@ -958,6 +967,11 @@ class DatabaseSqlite extends DatabaseBase {
  */
 class DatabaseSqliteStandalone extends DatabaseSqlite {
        public function __construct( $fileName, $flags = 0 ) {
+               global $wgSQLiteDataDir;
+
+               $this->mTrxAtomicLevels = new SplStack;
+               $this->lockMgr = new FSLockManager( array( 'lockDirectory' => "$wgSQLiteDataDir/locks" ) );
+
                $this->mFlags = $flags;
                $this->tablePrefix( null );
                $this->openFile( $fileName );
index e02cfbc..862ac27 100644 (file)
@@ -43,7 +43,6 @@ class HTMLCacheUpdate implements DeferrableUpdate {
        }
 
        public function doUpdate() {
-
                $job = new HTMLCacheUpdateJob(
                        $this->mTitle,
                        array(
@@ -63,6 +62,5 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                                $job->run(); // just do the purge query now
                        } );
                }
-
        }
 }
index 9c377df..e4f00e7 100644 (file)
@@ -228,12 +228,24 @@ class LinksUpdate extends SqlDataUpdate {
         * Which means do LinksUpdate on all pages that include the current page,
         * using the job queue.
         */
-       function queueRecursiveJobs() {
+       protected function queueRecursiveJobs() {
                self::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' );
                if ( $this->mTitle->getNamespace() == NS_FILE ) {
                        // Process imagelinks in case the title is or was a redirect
                        self::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' );
                }
+
+               $bc = $this->mTitle->getBacklinkCache();
+               // Get jobs for cascade-protected backlinks for a high priority queue.
+               // If meta-templates change to using a new template, the new template
+               // should be implicitly protected as soon as possible, if applicable.
+               // These jobs duplicate a subset of the above ones, but can run sooner.
+               // Which ever runs first generally no-ops the other one.
+               $jobs = array();
+               foreach ( $bc->getCascadeProtectedLinks() as $title ) {
+                       $jobs[] = new RefreshLinksJob( $title, array( 'prioritize' => true ) );
+               }
+               JobQueueGroup::singleton()->push( $jobs );
        }
 
        /**
@@ -253,6 +265,7 @@ class LinksUpdate extends SqlDataUpdate {
                                        "refreshlinks:{$table}:{$title->getPrefixedText()}"
                                )
                        );
+
                        JobQueueGroup::singleton()->push( $job );
                        JobQueueGroup::singleton()->deduplicateRootJob( $job );
                }
index 1bd2092..a0e1a96 100644 (file)
@@ -94,6 +94,10 @@ class DifferenceEngine extends ContextSource {
 
        /** @var bool Show rev_deleted content if allowed */
        protected $unhide = false;
+
+       /** @var bool Refresh the diff cache */
+       protected $mRefreshCache = false;
+
        /**#@-*/
 
        /**
index 6fd6fb5..097c043 100644 (file)
@@ -117,10 +117,11 @@ class MWException extends Exception {
                $args = array_slice( func_get_args(), 2 );
 
                if ( $this->useMessageCache() ) {
-                       return wfMessage( $key, $args )->text();
-               } else {
-                       return wfMsgReplaceArgs( $fallback, $args );
+                       try {
+                               return wfMessage( $key, $args )->text();
+                       } catch ( Exception $e ) {}
                }
+               return wfMsgReplaceArgs( $fallback, $args );
        }
 
        /**
@@ -139,10 +140,17 @@ class MWException extends Exception {
                        nl2br( htmlspecialchars( MWExceptionHandler::getRedactedTraceAsString( $this ) ) ) .
                        "</p>\n";
                } else {
+                       $logId = MWExceptionHandler::getLogId( $this );
+                       $type = get_class( $this );
                        return "<div class=\"errorbox\">" .
-                       '[' . MWExceptionHandler::getLogId( $this ) . '] ' .
-                       gmdate( 'Y-m-d H:i:s' ) .
-                       ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
+                       '[' . $logId . '] ' .
+                       gmdate( 'Y-m-d H:i:s' ) . ": " .
+                       $this->msg( "internalerror-fatal-exception",
+                               "Fatal exception of type $1",
+                               $type,
+                               $logId,
+                               MWExceptionHandler::getURL( $this )
+                       ) . "</div>\n" .
                        "<!-- Set \$wgShowExceptionDetails = true; " .
                        "at the bottom of LocalSettings.php to show detailed " .
                        "debugging information. -->";
index ac61067..7a0206c 100644 (file)
@@ -133,6 +133,8 @@ class TraditionalImageGallery extends ImageGalleryBase {
 
                                $this->adjustImageParameters( $thumb, $imageParameters );
 
+                               Linker::processResponsiveImages( $img, $thumb, $transformOptions );
+
                                # Set both fixed width and min-height.
                                $thumbhtml = "\n\t\t\t"
                                        . '<div class="thumb" style="width: '
index 1c15ad0..6ccf2d5 100644 (file)
@@ -369,12 +369,17 @@ abstract class DatabaseInstaller {
        }
 
        /**
-        * Get a name=>value map of MW configuration globals that overrides.
-        * DefaultSettings.php
+        * Get a name=>value map of MW configuration globals for the default values.
         * @return array
         */
        public function getGlobalDefaults() {
-               return array();
+               $defaults = array();
+               foreach ( $this->getGlobalNames() as $var ) {
+                       if ( isset( $GLOBALS[$var] ) ) {
+                               $defaults[$var] = $GLOBALS[$var];
+                       }
+               }
+               return $defaults;
        }
 
        /**
index dc52554..1036dcd 100644 (file)
@@ -285,15 +285,15 @@ abstract class Installer {
         */
        public $licenses = array(
                'cc-by' => array(
-                       'url' => 'http://creativecommons.org/licenses/by/3.0/',
+                       'url' => 'https://creativecommons.org/licenses/by/3.0/',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by.png',
                ),
                'cc-by-sa' => array(
-                       'url' => 'http://creativecommons.org/licenses/by-sa/3.0/',
+                       'url' => 'https://creativecommons.org/licenses/by-sa/3.0/',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-sa.png',
                ),
                'cc-by-nc-sa' => array(
-                       'url' => 'http://creativecommons.org/licenses/by-nc-sa/3.0/',
+                       'url' => 'https://creativecommons.org/licenses/by-nc-sa/3.0/',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-nc-sa.png',
                ),
                'cc-0' => array(
@@ -305,7 +305,7 @@ abstract class Installer {
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/public-domain.png',
                ),
                'gfdl' => array(
-                       'url' => 'http://www.gnu.org/copyleft/fdl.html',
+                       'url' => 'https://www.gnu.org/copyleft/fdl.html',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/gnu-fdl.png',
                ),
                'none' => array(
index 46bb86c..5a8403f 100644 (file)
@@ -652,9 +652,9 @@ class MssqlInstaller extends DatabaseInstaller {
        public function getGlobalDefaults() {
                // The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
                // the use of a schema, so we need to set it here
-               return array(
+               return array_merge( parent::getGlobalDefaults(), array(
                        'wgDBmwschema' => 'mediawiki',
-               );
+               ) );
        }
 
        /**
index b82e611..63e8611 100644 (file)
@@ -71,13 +71,6 @@ class MysqlInstaller extends DatabaseInstaller {
                return self::checkExtension( 'mysql' ) || self::checkExtension( 'mysqli' );
        }
 
-       /**
-        * @return array
-        */
-       public function getGlobalDefaults() {
-               return array();
-       }
-
        /**
         * @return string
         */
index c30a989..b18fe94 100644 (file)
@@ -262,11 +262,13 @@ class PostgresInstaller extends DatabaseInstaller {
                $status = Status::newGood();
                foreach ( $dbs as $db ) {
                        try {
-                               $conn = new DatabasePostgres(
-                                       $this->getVar( 'wgDBserver' ),
-                                       $user,
-                                       $password,
-                                       $db );
+                               $p = array(
+                                       'host' => $this->getVar( 'wgDBserver' ),
+                                       'user' => $user,
+                                       'password' => $password,
+                                       'dbname' => $db
+                               );
+                               $conn = DatabaseBase::factory( 'postgres', $p );
                        } catch ( DBConnectionError $error ) {
                                $conn = false;
                                $status->fatal( 'config-pg-test-error', $db,
@@ -627,9 +629,9 @@ class PostgresInstaller extends DatabaseInstaller {
        public function getGlobalDefaults() {
                // The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
                // the use of a schema, so we need to set it here
-               return array(
+               return array_merge( parent::getGlobalDefaults(), array(
                        'wgDBmwschema' => 'mediawiki',
-               );
+               ) );
        }
 
        public function setupPLpgSQL() {
index 351b022..1e7e969 100644 (file)
@@ -68,6 +68,7 @@ class SqliteInstaller extends DatabaseInstaller {
        }
 
        public function getGlobalDefaults() {
+               $defaults = parent::getGlobalDefaults();
                if ( isset( $_SERVER['DOCUMENT_ROOT'] ) ) {
                        $path = str_replace(
                                array( '/', '\\' ),
@@ -75,10 +76,9 @@ class SqliteInstaller extends DatabaseInstaller {
                                dirname( $_SERVER['DOCUMENT_ROOT'] ) . '/data'
                        );
 
-                       return array( 'wgSQLiteDataDir' => $path );
-               } else {
-                       return array();
+                       $defaults['wgSQLiteDataDir'] = $path;
                }
+               return $defaults;
        }
 
        public function getConnectForm() {
@@ -188,7 +188,7 @@ class SqliteInstaller extends DatabaseInstaller {
                        # @todo FIXME: Need more sensible constructor parameters, e.g. single associative array
                        # Setting globals kind of sucks
                        $wgSQLiteDataDir = $dir;
-                       $db = new DatabaseSqlite( false, false, false, $dbName );
+                       $db = DatabaseBase::factory( 'sqlite', array( 'dbname' => $dbName ) );
                        $status->value = $db;
                } catch ( DBConnectionError $e ) {
                        $status->fatal( 'config-sqlite-connection-error', $e->getMessage() );
@@ -226,6 +226,49 @@ class SqliteInstaller extends DatabaseInstaller {
                }
 
                $db = $this->getVar( 'wgDBname' );
+
+               # Make the main and cache stub DB files
+               $status = Status::newGood();
+               $status->merge( $this->makeStubDBFile( $dir, $db ) );
+               $status->merge( $this->makeStubDBFile( $dir, "wikicache" ) );
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+
+               # Nuke the unused settings for clarity
+               $this->setVar( 'wgDBserver', '' );
+               $this->setVar( 'wgDBuser', '' );
+               $this->setVar( 'wgDBpassword', '' );
+               $this->setupSchemaVars();
+
+               # Create the global cache DB
+               try {
+                       global $wgSQLiteDataDir;
+                       # @todo FIXME: setting globals kind of sucks
+                       $wgSQLiteDataDir = $dir;
+                       $conn = DatabaseBase::factory( 'sqlite', array( 'dbname' => "wikicache" ) );
+                       # @todo: don't duplicate objectcache definition, though it's very simple
+                       $sql =
+<<<EOT
+       CREATE TABLE IF NOT EXISTS objectcache (
+         keyname BLOB NOT NULL default '' PRIMARY KEY,
+         value BLOB,
+         exptime TEXT
+       )
+EOT;
+                       $conn->query( $sql );
+                       $conn->query( "CREATE INDEX IF NOT EXISTS exptime ON objectcache (exptime)" );
+                       $conn->query( "PRAGMA journal_mode=WAL" ); // this is permanent
+                       $conn->close();
+               } catch ( DBConnectionError $e ) {
+                       return Status::newFatal( 'config-sqlite-connection-error', $e->getMessage() );
+               }
+
+               # Open the main DB
+               return $this->getConnection();
+       }
+
+       protected function makeStubDBFile( $dir, $db ) {
                $file = DatabaseSqlite::generateFileName( $dir, $db );
                if ( file_exists( $file ) ) {
                        if ( !is_writable( $file ) ) {
@@ -236,13 +279,8 @@ class SqliteInstaller extends DatabaseInstaller {
                                return Status::newFatal( 'config-sqlite-cant-create-db', $file );
                        }
                }
-               // nuke the unused settings for clarity
-               $this->setVar( 'wgDBserver', '' );
-               $this->setVar( 'wgDBuser', '' );
-               $this->setVar( 'wgDBpassword', '' );
-               $this->setupSchemaVars();
 
-               return $this->getConnection();
+               return Status::newGood();
        }
 
        /**
@@ -280,6 +318,16 @@ class SqliteInstaller extends DatabaseInstaller {
                $dir = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgSQLiteDataDir' ) );
 
                return "# SQLite-specific settings
-\$wgSQLiteDataDir = \"{$dir}\";";
+\$wgSQLiteDataDir = \"{$dir}\";
+\$wgObjectCaches[CACHE_DB] = array(
+       'class' => 'SqlBagOStuff',
+       'loggroup' => 'SQLBagOStuff',
+       'server' => array(
+               'type' => 'sqlite',
+               'dbname' => 'wikicache',
+               'tablePrefix' => '',
+               'flags' => 0
+       )
+);";
        }
 }
index 038c2be..6e41514 100644 (file)
@@ -1183,7 +1183,7 @@ class WebInstallerOptions extends WebInstallerPage {
                ) );
                $styleUrl = $server . dirname( dirname( $this->parent->getUrl() ) ) .
                        '/mw-config/config-cc.css';
-               $iframeUrl = 'http://creativecommons.org/license/?' .
+               $iframeUrl = 'https://creativecommons.org/license/?' .
                        wfArrayToCgi( array(
                                'partner' => 'MediaWiki',
                                'exit_url' => $exitUrl,
index df7184f..62f0f03 100644 (file)
        "config-env-good": "Comprobóse l'entornu.\nPue instalar MediaWiki.",
        "config-env-bad": "Comprobóse l'entornu.\nNun pue instalar MediaWiki.",
        "config-env-php": "PHP $1 ta instaláu.",
-       "config-env-php-toolow": "PHP $1 ta instaláu.\nSicasí, MediaWiki necesita PHP $2 o superior.",
+       "config-env-hhvm": "HHVM $1 ta instaláu.",
        "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber pa la normalización Unicode.",
        "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl estensión intl PECL] pa la normalización Unicode.",
        "config-unicode-pure-php-warning": "'''Avisu:''' La [http://pecl.php.net/intl estensión intl PECL] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi xestiona un sitiu con un tráficu altu, tendría de lleer una migaya sobro la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
        "config-unicode-update-warning": "'''Avisu:''' La versión instalada del envoltoriu de normalización Unicode usa una versión antigua de la biblioteca [http://site.icu-project.org/ de los proyeutos ICU].\nTendría [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations d'anovala] si ye importante pa vusté usar Unicode.",
-       "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesita instalar un controlador de base de datos pa PHP.\nTienen sofitu los tipos de base de datos siguientes: $1.\n\nSi compiló PHP vusté mesmu, reconfigúrelu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instaló PHP dende un paquete de Debian o Ubuntu, necesita instalar tamién,por exemplu, el paquete <code>php5-mysql</code>.",
+       "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesites instalar un controlador de base de datos pa PHP.\n{{PLURAL:$2|Tien sofitu el tipu de base de datos siguiente|Tienen sofitu los tipos de base de datos siguientes}}: $1.\n\nSi compilasti PHP tu mesmu, reconfigúralu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instalasti PHP dende un paquete de Debian o Ubuntu, necesites instalar tamién,por exemplu, el paquete <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Avisu:''' tien SQLite $1, que ye inferior a la versión mínima necesaria $2. SQLite nun tará disponible.",
        "config-no-fts3": "'''Avisu:''' SQLite ta compiláu ensin el [//sqlite.org/fts3.html módulu FTS3]; les funciones de gueta nun tarán disponibles nesti sistema.",
-       "config-register-globals": "'''Avisu: La opción de PHP <code>[http://php.net/register_globals register_globals]</code> ta activada.'''\n'''Desactívela si ye posible.'''\nMediaWiki funcionará, pero'l so sirvidor queda albentestate ente posibles vulnerabilidaes de seguridá.",
+       "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> ta activada.\nTien de desactivase pa siguir cola instalación.</strong>\nVisita [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] p'alcontrar ayuda tocante a cómo facelo.",
+       "config-diff3-bad": "Nun s'alcontró GNU diff3.",
+       "config-git": "Alcontróse'l software de control de versiones Git: <code>$1</code>.",
+       "config-git-bad": "Nun s'alcontró el software de control de versiones Git.",
        "config-site-name": "Nome de la wiki:",
        "config-site-name-help": "Esto apaecerá na barra de títulos del navegador y en dellos sitios más.",
        "config-site-name-blank": "Escriba un nome pal sitiu.",
index ac486bb..6e44d4b 100644 (file)
@@ -57,7 +57,7 @@
        "config-unicode-using-intl": "برای یونیکد عادی از [http://pecl.php.net/intl intl PECL extension] استفاده کنید.",
        "config-unicode-pure-php-warning": "'''هشدار:''' [http://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.",
        "config-unicode-update-warning": "'''هشدار:''' نسخهٔ نصب شدهٔ پوشهٔ یونیکد عادی از ورژن قدیمی‌تر کتابخانه [http://site.icu-project.org/ the ICU project's] استفاده می‌کند.\nاگر کلاً علاقه‌مند به استفاده از یونیکد هستید باید [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade].",
-       "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی  برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب سوأل کنید.\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از <code>./configure --with-mysql</code> استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.",
+       "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی  برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب {{PLURAL:$2|سوأل کنید.|سوأل کنید.}}\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از <code>./configure --with-mysql</code> استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.",
        "config-outdated-sqlite": "''' هشدار:''' شما اس‌کیولایت $1 دارید، که پایین‌تر از حداقل نسخهٔ $2 مورد نیاز است.اس‌کیولایت در دسترس نخواهد بود.",
        "config-no-fts3": "'''هشدار:''' اس‌کیولایت بدون [//sqlite.org/fts3.html FTS3 module] تهیه شده‌است ، جستجوی ویژگی‌ها در این بخش پیشین در دسترس نخواهد‌بود.",
        "config-register-globals-error": "<strong>خطا:  پی‌اچ‌پی<code>[http://php.net/register_globals register_globals]</code> گزینه فعال است.\nبرای ادامه نصب باید غیر فعال باشد.</strong>\n[Https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] را برای کمک در مورد نحوه انجام این کار ببینید.",
index bf6cf04..d7bd9a6 100644 (file)
@@ -63,7 +63,7 @@
        "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
        "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].",
        "config-unicode-update-warning": "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].\nU moet [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.",
-       "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP. U moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls u een gedeelde omgeving gebruikt, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren.\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.",
+       "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP! U moet een databasedriver installeren voor PHP.\n{{PLURAL:$2|Het volgende databasetype wordt|De volgende databasetypes worden}} ondersteund: $1.\n\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysqli</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook bijvoorbeeld de module <code>php5-mysql</code>.",
        "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
        "config-no-fts3": "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
        "config-register-globals-error": "<strong>Fout: de optie <code>[http://php.net/register_globals register_globals]</code> van PHP is ingeschakeld.\nDeze optie moet uitgeschakeld zijn om door te kunnen gaan met de installatie.</strong>\nOp de pagina [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] staat beschreven hoe u dit kunt doen.",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn. ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL ondersteuning])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving.([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
-       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL ondersteuning]).",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows. Zie ook [http://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV].",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows ([http://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV]).",
        "config-header-mysql": "MySQL-instellingen",
        "config-header-postgres": "PostgreSQL-instellingen",
        "config-header-sqlite": "SQLite-instellingen",
        "config-mysql-charset": "Tekenset voor de database:",
        "config-mysql-binary": "Binair",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+       "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
        "config-mssql-auth": "Authenticatietype:",
        "config-mssql-install-auth": "Selecteer de authenticatiemethode die wordt gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
        "config-mssql-web-auth": "Selecteer de authenticatiemethode die de webserver gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
index b54ecfd..fb10c15 100644 (file)
@@ -64,6 +64,7 @@ class RecentChangesUpdateJob extends Job {
                if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
                        return; // already in progress
                }
+               $batchSize = 100; // Avoid slave lag
 
                $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
                do {
@@ -71,13 +72,21 @@ class RecentChangesUpdateJob extends Job {
                                'rc_id',
                                array( 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ),
                                __METHOD__,
-                               array( 'LIMIT' => 100 ) // avoid slave lag
+                               array( 'LIMIT' => $batchSize )
                        );
                        if ( $rcIds ) {
                                $dbw->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
                        }
                        // No need for this to be in a transaction.
                        $dbw->commit( __METHOD__, 'flush' );
+
+                       if ( count( $rcIds ) === $batchSize ) {
+                               // There might be more, so try waiting for slaves
+                               if ( !wfWaitForSlaves( null, false, false, /* $timeout = */ 3 ) ) {
+                                       // Another job will continue anyway
+                                       break;
+                               }
+                       }
                } while ( $rcIds );
 
                $dbw->unlock( $lockKey, __METHOD__ );
index 5d95792..1252b0b 100644 (file)
@@ -39,6 +39,10 @@ class RefreshLinksJob extends Job {
 
        function __construct( $title, $params = '' ) {
                parent::__construct( 'refreshLinks', $title, $params );
+               // A separate type is used just for cascade-protected backlinks
+               if ( !empty( $this->params['prioritize'] ) ) {
+                       $this->command .= 'Prioritized';
+               }
                // Base backlink update jobs and per-title update jobs can be de-duplicated.
                // If template A changes twice before any jobs run, a clean queue will have:
                //              (A base, A base)
@@ -100,6 +104,10 @@ class RefreshLinksJob extends Job {
                return true;
        }
 
+       /**
+        * @param Title $title
+        * @return bool
+        */
        protected function runForTitle( Title $title = null ) {
                $linkCache = LinkCache::singleton();
                $linkCache->clear();
index 49c9f23..796acb5 100644 (file)
@@ -28,7 +28,7 @@ class ComposerJson {
        public function getRequiredDependencies() {
                $deps = array();
                foreach ( $this->contents['require'] as $package => $version ) {
-                       if ( $package !== "php" ) {
+                       if ( $package !== "php" && strpos( $package, 'ext-' ) !== 0 ) {
                                $deps[$package] = self::normalizeVersion( $version );
                        }
                }
diff --git a/includes/libs/objectcache/APCBagOStuff.php b/includes/libs/objectcache/APCBagOStuff.php
new file mode 100644 (file)
index 0000000..eaf1155
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Object caching using PHP's APC accelerator.
+ *
+ * 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 Cache
+ */
+
+/**
+ * This is a wrapper for APC's shared memory functions
+ *
+ * @ingroup Cache
+ */
+class APCBagOStuff extends BagOStuff {
+       public function get( $key, &$casToken = null ) {
+               $val = apc_fetch( $key );
+
+               $casToken = $val;
+
+               if ( is_string( $val ) ) {
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
+               }
+
+               return $val;
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               apc_store( $key, $value, $exptime );
+
+               return true;
+       }
+
+       public function delete( $key ) {
+               apc_delete( $key );
+
+               return true;
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return apc_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return apc_dec( $key, $value );
+       }
+}
diff --git a/includes/libs/objectcache/BagOStuff.php b/includes/libs/objectcache/BagOStuff.php
new file mode 100644 (file)
index 0000000..0b791e5
--- /dev/null
@@ -0,0 +1,438 @@
+<?php
+/**
+ * Classes to cache objects in PHP accelerators, SQL database or DBA files
+ *
+ * Copyright © 2003-2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * @defgroup Cache Cache
+ */
+
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
+/**
+ * interface is intended to be more or less compatible with
+ * the PHP memcached client.
+ *
+ * backends for local hash array and SQL table included:
+ * <code>
+ *   $bag = new HashBagOStuff();
+ *   $bag = new SqlBagOStuff(); # connect to db first
+ * </code>
+ *
+ * @ingroup Cache
+ */
+abstract class BagOStuff implements LoggerAwareInterface {
+       private $debugMode = false;
+
+       protected $lastError = self::ERR_NONE;
+
+       /**
+        * @var LoggerInterface
+        */
+       protected $logger;
+
+       /** Possible values for getLastError() */
+       const ERR_NONE = 0; // no error
+       const ERR_NO_RESPONSE = 1; // no response
+       const ERR_UNREACHABLE = 2; // can't connect
+       const ERR_UNEXPECTED = 3; // response gave some error
+
+       public function __construct( array $params = array() ) {
+               if ( isset( $params['logger'] ) ) {
+                       $this->setLogger( $params['logger'] );
+               } else {
+                       $this->setLogger( new NullLogger() );
+               }
+       }
+
+       /**
+        * @param LoggerInterface $logger
+        * @return null
+        */
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
+       /**
+        * @param bool $bool
+        */
+       public function setDebug( $bool ) {
+               $this->debugMode = $bool;
+       }
+
+       /**
+        * Get an item with the given key. Returns false if it does not exist.
+        * @param string $key
+        * @param mixed $casToken [optional]
+        * @return mixed Returns false on failure
+        */
+       abstract public function get( $key, &$casToken = null );
+
+       /**
+        * Set an item.
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @return bool Success
+        */
+       abstract public function set( $key, $value, $exptime = 0 );
+
+       /**
+        * Delete an item.
+        * @param string $key
+        * @return bool True if the item was deleted or not found, false on failure
+        */
+       abstract public function delete( $key );
+
+       /**
+        * Merge changes into the existing cache value (possibly creating a new one).
+        * The callback function returns the new value given the current value (possibly false),
+        * and takes the arguments: (this BagOStuff object, cache key, current value).
+        *
+        * @param string $key
+        * @param callable $callback Callback method to be executed
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $attempts The amount of times to attempt a merge in case of failure
+        * @return bool Success
+        */
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
+       /**
+        * @see BagOStuff::merge()
+        *
+        * @param string $key
+        * @param callable $callback Callback method to be executed
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $attempts The amount of times to attempt a merge in case of failure
+        * @return bool Success
+        */
+       protected function mergeViaCas( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               do {
+                       $casToken = null; // passed by reference
+                       $currentValue = $this->get( $key, $casToken );
+                       // Derive the new value from the old value
+                       $value = call_user_func( $callback, $this, $key, $currentValue );
+
+                       if ( $value === false ) {
+                               $success = true; // do nothing
+                       } elseif ( $currentValue === false ) {
+                               // Try to create the key, failing if it gets created in the meantime
+                               $success = $this->add( $key, $value, $exptime );
+                       } else {
+                               // Try to update the key, failing if it gets changed in the meantime
+                               $success = $this->cas( $casToken, $key, $value, $exptime );
+                       }
+               } while ( !$success && --$attempts );
+
+               return $success;
+       }
+
+       /**
+        * Check and set an item
+        *
+        * @param mixed $casToken
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @return bool Success
+        */
+       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
+               throw new Exception( "CAS is not implemented in " . __CLASS__ );
+       }
+
+       /**
+        * @see BagOStuff::merge()
+        *
+        * @param string $key
+        * @param callable $callback Callback method to be executed
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $attempts The amount of times to attempt a merge in case of failure
+        * @return bool Success
+        */
+       protected function mergeViaLock( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !$this->lock( $key, 6 ) ) {
+                       return false;
+               }
+
+               $currentValue = $this->get( $key );
+               // Derive the new value from the old value
+               $value = call_user_func( $callback, $this, $key, $currentValue );
+
+               if ( $value === false ) {
+                       $success = true; // do nothing
+               } else {
+                       $success = $this->set( $key, $value, $exptime ); // set the new value
+               }
+
+               if ( !$this->unlock( $key ) ) {
+                       // this should never happen
+                       trigger_error( "Could not release lock for key '$key'." );
+               }
+
+               return $success;
+       }
+
+       /**
+        * @param string $key
+        * @param int $timeout Lock wait timeout [optional]
+        * @param int $expiry Lock expiry [optional]
+        * @return bool Success
+        */
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               $this->clearLastError();
+               $timestamp = microtime( true ); // starting UNIX timestamp
+               if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
+                       return true;
+               } elseif ( $this->getLastError() ) {
+                       return false;
+               }
+
+               $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
+               $sleep = 2 * $uRTT; // rough time to do get()+set()
+
+               $locked = false; // lock acquired
+               $attempts = 0; // failed attempts
+               do {
+                       if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
+                               // Exponentially back off after failed attempts to avoid network spam.
+                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
+                               $sleep *= 2;
+                       }
+                       usleep( $sleep ); // back off
+                       $this->clearLastError();
+                       $locked = $this->add( "{$key}:lock", 1, $expiry );
+                       if ( $this->getLastError() ) {
+                               return false;
+                       }
+               } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
+
+               return $locked;
+       }
+
+       /**
+        * @param string $key
+        * @return bool Success
+        */
+       public function unlock( $key ) {
+               return $this->delete( "{$key}:lock" );
+       }
+
+       /**
+        * Delete all objects expiring before a certain date.
+        * @param string $date The reference date in MW format
+        * @param callable|bool $progressCallback Optional, a function which will be called
+        *     regularly during long-running operations with the percentage progress
+        *     as the first parameter.
+        *
+        * @return bool Success, false if unimplemented
+        */
+       public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) {
+               // stub
+               return false;
+       }
+
+       /* *** Emulated functions *** */
+
+       /**
+        * Get an associative array containing the item for each of the keys that have items.
+        * @param array $keys List of strings
+        * @return array
+        */
+       public function getMulti( array $keys ) {
+               $res = array();
+               foreach ( $keys as $key ) {
+                       $val = $this->get( $key );
+                       if ( $val !== false ) {
+                               $res[$key] = $val;
+                       }
+               }
+               return $res;
+       }
+
+       /**
+        * Batch insertion
+        * @param array $data $key => $value assoc array
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @return bool Success
+        * @since 1.24
+        */
+       public function setMulti( array $data, $exptime = 0 ) {
+               $res = true;
+               foreach ( $data as $key => $value ) {
+                       if ( !$this->set( $key, $value, $exptime ) ) {
+                               $res = false;
+                       }
+               }
+               return $res;
+       }
+
+       /**
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime
+        * @return bool Success
+        */
+       public function add( $key, $value, $exptime = 0 ) {
+               if ( $this->get( $key ) === false ) {
+                       return $this->set( $key, $value, $exptime );
+               }
+               return false; // key already set
+       }
+
+       /**
+        * Increase stored value of $key by $value while preserving its TTL
+        * @param string $key Key to increase
+        * @param int $value Value to add to $key (Default 1)
+        * @return int|bool New value or false on failure
+        */
+       public function incr( $key, $value = 1 ) {
+               if ( !$this->lock( $key ) ) {
+                       return false;
+               }
+               $n = $this->get( $key );
+               if ( $this->isInteger( $n ) ) { // key exists?
+                       $n += intval( $value );
+                       $this->set( $key, max( 0, $n ) ); // exptime?
+               } else {
+                       $n = false;
+               }
+               $this->unlock( $key );
+
+               return $n;
+       }
+
+       /**
+        * Decrease stored value of $key by $value while preserving its TTL
+        * @param string $key
+        * @param int $value
+        * @return int
+        */
+       public function decr( $key, $value = 1 ) {
+               return $this->incr( $key, - $value );
+       }
+
+       /**
+        * Increase stored value of $key by $value while preserving its TTL
+        *
+        * This will create the key with value $init and TTL $ttl if not present
+        *
+        * @param string $key
+        * @param int $ttl
+        * @param int $value
+        * @param int $init
+        * @return bool
+        * @since 1.24
+        */
+       public function incrWithInit( $key, $ttl, $value = 1, $init = 1 ) {
+               return $this->incr( $key, $value ) ||
+                       $this->add( $key, (int)$init, $ttl ) || $this->incr( $key, $value );
+       }
+
+       /**
+        * Get the "last error" registered; clearLastError() should be called manually
+        * @return int ERR_* constant for the "last error" registry
+        * @since 1.23
+        */
+       public function getLastError() {
+               return $this->lastError;
+       }
+
+       /**
+        * Clear the "last error" registry
+        * @since 1.23
+        */
+       public function clearLastError() {
+               $this->lastError = self::ERR_NONE;
+       }
+
+       /**
+        * Set the "last error" registry
+        * @param int $err ERR_* constant
+        * @since 1.23
+        */
+       protected function setLastError( $err ) {
+               $this->lastError = $err;
+       }
+
+       /**
+        * @param string $text
+        */
+       protected function debug( $text ) {
+               if ( $this->debugMode ) {
+                       $this->logger->debug( "{class} debug: $text", array(
+                               'class' => get_class( $this ),
+                       ) );
+               }
+       }
+
+       /**
+        * Convert an optionally relative time to an absolute time
+        * @param int $exptime
+        * @return int
+        */
+       protected function convertExpiry( $exptime ) {
+               if ( ( $exptime != 0 ) && ( $exptime < 86400 * 3650 /* 10 years */ ) ) {
+                       return time() + $exptime;
+               } else {
+                       return $exptime;
+               }
+       }
+
+       /**
+        * Convert an optionally absolute expiry time to a relative time. If an
+        * absolute time is specified which is in the past, use a short expiry time.
+        *
+        * @param int $exptime
+        * @return int
+        */
+       protected function convertToRelative( $exptime ) {
+               if ( $exptime >= 86400 * 3650 /* 10 years */ ) {
+                       $exptime -= time();
+                       if ( $exptime <= 0 ) {
+                               $exptime = 1;
+                       }
+                       return $exptime;
+               } else {
+                       return $exptime;
+               }
+       }
+
+       /**
+        * Check if a value is an integer
+        *
+        * @param mixed $value
+        * @return bool
+        */
+       protected function isInteger( $value ) {
+               return ( is_int( $value ) || ctype_digit( $value ) );
+       }
+}
diff --git a/includes/libs/objectcache/EmptyBagOStuff.php b/includes/libs/objectcache/EmptyBagOStuff.php
new file mode 100644 (file)
index 0000000..4ccf270
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Dummy object caching.
+ *
+ * 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 Cache
+ */
+
+/**
+ * A BagOStuff object with no objects in it. Used to provide a no-op object to calling code.
+ *
+ * @ingroup Cache
+ */
+class EmptyBagOStuff extends BagOStuff {
+       public function get( $key, &$casToken = null ) {
+               return false;
+       }
+
+       public function set( $key, $value, $exp = 0 ) {
+               return true;
+       }
+
+       public function delete( $key ) {
+               return true;
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               return true; // faster
+       }
+}
diff --git a/includes/libs/objectcache/HashBagOStuff.php b/includes/libs/objectcache/HashBagOStuff.php
new file mode 100644 (file)
index 0000000..2c8b05a
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Object caching using PHP arrays.
+ *
+ * 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 Cache
+ */
+
+/**
+ * This is a test of the interface, mainly. It stores things in an associative
+ * array, which is not going to persist between program runs.
+ *
+ * @ingroup Cache
+ */
+class HashBagOStuff extends BagOStuff {
+       /** @var array */
+       protected $bag;
+
+       function __construct( $params = array() ) {
+               parent::__construct( $params );
+               $this->bag = array();
+       }
+
+       protected function expire( $key ) {
+               $et = $this->bag[$key][1];
+
+               if ( ( $et == 0 ) || ( $et > time() ) ) {
+                       return false;
+               }
+
+               $this->delete( $key );
+
+               return true;
+       }
+
+       public function get( $key, &$casToken = null ) {
+               if ( !isset( $this->bag[$key] ) ) {
+                       return false;
+               }
+
+               if ( $this->expire( $key ) ) {
+                       return false;
+               }
+
+               $casToken = $this->bag[$key][0];
+
+               return $this->bag[$key][0];
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               $this->bag[$key] = array( $value, $this->convertExpiry( $exptime ) );
+               return true;
+       }
+
+       function delete( $key ) {
+               if ( !isset( $this->bag[$key] ) ) {
+                       return false;
+               }
+
+               unset( $this->bag[$key] );
+
+               return true;
+       }
+
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               return true;
+       }
+
+       function unlock( $key ) {
+               return true;
+       }
+}
diff --git a/includes/libs/objectcache/WinCacheBagOStuff.php b/includes/libs/objectcache/WinCacheBagOStuff.php
new file mode 100644 (file)
index 0000000..5362574
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Object caching using WinCache.
+ *
+ * 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 Cache
+ */
+
+/**
+ * Wrapper for WinCache object caching functions; identical interface
+ * to the APC wrapper
+ *
+ * @ingroup Cache
+ */
+class WinCacheBagOStuff extends BagOStuff {
+
+       /**
+        * Get a value from the WinCache object cache
+        *
+        * @param string $key Cache key
+        * @param int $casToken [optional] Cas token
+        * @return mixed
+        */
+       public function get( $key, &$casToken = null ) {
+               $val = wincache_ucache_get( $key );
+
+               $casToken = $val;
+
+               if ( is_string( $val ) ) {
+                       $val = unserialize( $val );
+               }
+
+               return $val;
+       }
+
+       /**
+        * Store a value in the WinCache object cache
+        *
+        * @param string $key Cache key
+        * @param mixed $value Value to store
+        * @param int $expire Expiration time
+        * @return bool
+        */
+       public function set( $key, $value, $expire = 0 ) {
+               $result = wincache_ucache_set( $key, serialize( $value ), $expire );
+
+               /* wincache_ucache_set returns an empty array on success if $value
+                  was an array, bool otherwise */
+               return ( is_array( $result ) && $result === array() ) || $result;
+       }
+
+       /**
+        * Store a value in the WinCache object cache, race condition-safe
+        *
+        * @param int $casToken Cas token
+        * @param string $key Cache key
+        * @param int $value Object to store
+        * @param int $exptime Expiration time
+        * @return bool
+        */
+       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
+               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
+       }
+
+       /**
+        * Remove a value from the WinCache object cache
+        *
+        * @param string $key Cache key
+        * @return bool
+        */
+       public function delete( $key ) {
+               wincache_ucache_delete( $key );
+
+               return true;
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+}
diff --git a/includes/libs/objectcache/XCacheBagOStuff.php b/includes/libs/objectcache/XCacheBagOStuff.php
new file mode 100644 (file)
index 0000000..cfee923
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Object caching using XCache.
+ *
+ * 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 Cache
+ */
+
+/**
+ * Wrapper for XCache object caching functions; identical interface
+ * to the APC wrapper
+ *
+ * @ingroup Cache
+ */
+class XCacheBagOStuff extends BagOStuff {
+       /**
+        * Get a value from the XCache object cache
+        *
+        * @param string $key Cache key
+        * @param mixed $casToken Cas token
+        * @return mixed
+        */
+       public function get( $key, &$casToken = null ) {
+               $val = xcache_get( $key );
+
+               if ( is_string( $val ) ) {
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
+               } elseif ( is_null( $val ) ) {
+                       return false;
+               }
+
+               return $val;
+       }
+
+       /**
+        * Store a value in the XCache object cache
+        *
+        * @param string $key Cache key
+        * @param mixed $value Object to store
+        * @param int $expire Expiration time
+        * @return bool
+        */
+       public function set( $key, $value, $expire = 0 ) {
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               xcache_set( $key, $value, $expire );
+               return true;
+       }
+
+       /**
+        * Remove a value from the XCache object cache
+        *
+        * @param string $key Cache key
+        * @return bool
+        */
+       public function delete( $key ) {
+               xcache_unset( $key );
+               return true;
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return xcache_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return xcache_dec( $key, $value );
+       }
+}
diff --git a/includes/logging/BlockLogFormatter.php b/includes/logging/BlockLogFormatter.php
new file mode 100644 (file)
index 0000000..995b809
--- /dev/null
@@ -0,0 +1,167 @@
+<?php
+/**
+ * Formatter for block log entries.
+ *
+ * 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
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.25
+ */
+
+/**
+ * This class formats block log entries.
+ *
+ * @since 1.25
+ */
+class BlockLogFormatter extends LogFormatter {
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+
+               $title = $this->entry->getTarget();
+               if ( substr( $title->getText(), 0, 1 ) === '#' ) {
+                       // autoblock - no user link possible
+                       $params[2] = $title->getText();
+                       $params[3] = ''; // no user name for gender use
+               } else {
+                       // Create a user link for the blocked
+                       $username = $title->getText();
+                       // @todo Store the user identifier in the parameters
+                       // to make this faster for future log entries
+                       $targetUser = User::newFromName( $username, false );
+                       $params[2] = Message::rawParam( $this->makeUserLink( $targetUser, Linker::TOOL_LINKS_NOBLOCK ) );
+                       $params[3] = $username; // plain user name for gender use
+               }
+
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'block' || $subtype === 'reblock' ) {
+                       // Localize the duration, and add a tooltip
+                       // in English to help visitors from other wikis.
+                       // 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] ) . '</span>' );
+                       $params[5] = isset( $params[5] ) ?
+                               self::formatBlockFlags( $params[5], $this->context->getLanguage() ) : '';
+               }
+
+               return $params;
+       }
+
+       protected function extractParameters() {
+               $params = parent::extractParameters();
+               // Legacy log params returning the params in index 3 and 4, moved to 4 and 5
+               if ( $this->entry->isLegacy() && isset( $params[3] ) ) {
+                       if ( isset( $params[4] ) ) {
+                               $params[5] = $params[4];
+                       }
+                       $params[4] = $params[3];
+                       $params[3] = '';
+               }
+               return $params;
+       }
+
+       public function getPreloadTitles() {
+               $title = $this->entry->getTarget();
+               // Preload user page for non-autoblocks
+               if ( substr( $title->getText(), 0, 1 ) !== '#' ) {
+                       return array( $title->getTalkPage() );
+               }
+               return array();
+       }
+
+       public function getActionLinks() {
+               $subtype = $this->entry->getSubtype();
+               if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+                       || !( $subtype === 'block' || $subtype === 'reblock' )
+                       || !$this->context->getUser()->isAllowed( 'block' )
+               ) {
+                       return '';
+               }
+
+               // Show unblock/change block link
+               $title = $this->entry->getTarget();
+               $links = array(
+                       Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Unblock', $title->getDBkey() ),
+                               $this->msg( 'unblocklink' )->escaped()
+                       ),
+                       Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Block', $title->getDBkey() ),
+                               $this->msg( 'change-blocklink' )->escaped()
+                       )
+               );
+
+               return $this->msg( 'parentheses' )->rawParams(
+                       $this->context->getLanguage()->pipeList( $links ) )->escaped();
+       }
+
+       /**
+        * Convert a comma-delimited list of block log flags
+        * into a more readable (and translated) form
+        *
+        * @param string $flags Flags to format
+        * @param Language $lang
+        * @return string
+        */
+       public static function formatBlockFlags( $flags, $lang ) {
+               $flags = trim( $flags );
+               if ( $flags === '' ) {
+                       return ''; //nothing to do
+               }
+               $flags = explode( ',', $flags );
+               $flagsCount = count( $flags );
+
+               for ( $i = 0; $i < $flagsCount; $i++ ) {
+                       $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
+               }
+
+               return wfMessage( 'parentheses' )->inLanguage( $lang )
+                       ->rawParams( $lang->commaList( $flags ) )->escaped();
+       }
+
+       /**
+        * Translate a block log flag if possible
+        *
+        * @param int $flag Flag to translate
+        * @param Language $lang Language object to use
+        * @return string
+        */
+       public static function formatBlockFlag( $flag, $lang ) {
+               static $messages = array();
+
+               if ( !isset( $messages[$flag] ) ) {
+                       $messages[$flag] = htmlspecialchars( $flag ); // Fallback
+
+                       // For grepping. The following core messages can be used here:
+                       // * block-log-flags-angry-autoblock
+                       // * block-log-flags-anononly
+                       // * block-log-flags-hiddenname
+                       // * block-log-flags-noautoblock
+                       // * block-log-flags-nocreate
+                       // * block-log-flags-noemail
+                       // * block-log-flags-nousertalk
+                       $msg = wfMessage( 'block-log-flags-' . $flag )->inLanguage( $lang );
+
+                       if ( $msg->exists() ) {
+                               $messages[$flag] = $msg->escaped();
+                       }
+               }
+
+               return $messages[$flag];
+       }
+}
index 8b30e9b..4f13d37 100644 (file)
@@ -79,8 +79,10 @@ class DeleteLogFormatter extends LogFormatter {
 
                                $newParams = array_slice( $params, 0, 3 );
                                $newParams[3] = $changeText;
-                               $count = count( explode( ',', $params[$paramStart] ) );
-                               $newParams[4] = $this->context->getLanguage()->formatNum( $count );
+                               $ids = is_array( $params[$paramStart] )
+                                       ? $params[$paramStart]
+                                       : explode( ',', $params[$paramStart] );
+                               $newParams[4] = $this->context->getLanguage()->formatNum( count( $ids ) );
 
                                $this->parsedParametersDeleteLog = $newParams;
                                return $this->parsedParametersDeleteLog;
@@ -137,8 +139,10 @@ class DeleteLogFormatter extends LogFormatter {
 
                                // Different revision types use different URL params...
                                $key = $params[3];
-                               // This is a CSV of the IDs
-                               $ids = explode( ',', $params[4] );
+                               // This is a array or CSV of the IDs
+                               $ids = is_array( $params[4] )
+                                       ? $params[4]
+                                       : explode( ',', $params[4] );
 
                                $links = array();
 
index 4487fec..16cf5a1 100644 (file)
@@ -331,6 +331,29 @@ class LogFormatter {
                                        ->rawParams( $target, $parameters['4::dest'], $parameters['5::mergepoint'] )
                                        ->inContentLanguage()->escaped();
                                break;
+
+                       case 'block':
+                               switch ( $entry->getSubtype() ) {
+                                       case 'block':
+                                               global $wgContLang;
+                                               $duration = $wgContLang->translateBlockExpiry( $parameters['5::duration'] );
+                                               $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
+                                               $text = wfMessage( 'blocklogentry' )
+                                                       ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'unblock':
+                                               $text = wfMessage( 'unblocklogentry' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'reblock':
+                                               global $wgContLang;
+                                               $duration = $wgContLang->translateBlockExpiry( $parameters['5::duration'] );
+                                               $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
+                                               $text = wfMessage( 'reblock-logentry' )
+                                                       ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
+                                               break;
+                               }
+                               break;
                        // case 'suppress' --private log -- aaron  (so we know who to blame in a few years :-D)
                        // default:
                }
@@ -433,7 +456,8 @@ class LogFormatter {
                 */
                if ( count( $params ) ) {
                        $max = max( array_keys( $params ) );
-                       for ( $i = 4; $i < $max; $i++ ) {
+                       // index 0 to 2 are added in getMessageParameters
+                       for ( $i = 3; $i < $max; $i++ ) {
                                if ( !isset( $params[$i] ) ) {
                                        $params[$i] = '';
                                }
@@ -640,7 +664,7 @@ class LogFormatter {
                return $this->context->msg( $key );
        }
 
-       protected function makeUserLink( User $user ) {
+       protected function makeUserLink( User $user, $toolFlags = 0 ) {
                if ( $this->plaintext ) {
                        $element = $user->getName();
                } else {
@@ -650,9 +674,11 @@ class LogFormatter {
                        );
 
                        if ( $this->linkFlood ) {
-                               $element .= Linker::userToolLinksRedContribs(
+                               $element .= Linker::userToolLinks(
                                        $user->getId(),
                                        $user->getName(),
+                                       true, // redContribsWhenNoEdits
+                                       $toolFlags,
                                        $user->getEditCount()
                                );
                        }
@@ -758,29 +784,7 @@ class LegacyLogFormatter extends LogFormatter {
                $type = $this->entry->getType();
                $subtype = $this->entry->getSubtype();
 
-               // Show unblock/change block link
-               if ( ( $type == 'block' || $type == 'suppress' )
-                       && ( $subtype == 'block' || $subtype == 'reblock' )
-               ) {
-                       if ( !$this->context->getUser()->isAllowed( 'block' ) ) {
-                               return '';
-                       }
-
-                       $links = array(
-                               Linker::linkKnown(
-                                       SpecialPage::getTitleFor( 'Unblock', $title->getDBkey() ),
-                                       $this->msg( 'unblocklink' )->escaped()
-                               ),
-                               Linker::linkKnown(
-                                       SpecialPage::getTitleFor( 'Block', $title->getDBkey() ),
-                                       $this->msg( 'change-blocklink' )->escaped()
-                               )
-                       );
-
-                       return $this->msg( 'parentheses' )->rawParams(
-                               $this->context->getLanguage()->pipeList( $links ) )->escaped();
-               // Show change protection link
-               } elseif ( $type == 'protect'
+               if ( $type == 'protect'
                        && ( $subtype == 'protect' || $subtype == 'modify' || $subtype == 'unprotect' )
                ) {
                        $links = array(
index d576d74..30dee81 100644 (file)
@@ -288,24 +288,8 @@ class LogPage {
                                        $details = '';
                                        array_unshift( $params, $titleLink );
 
-                                       // User suppression
-                                       if ( preg_match( '/^(block|suppress)\/(block|reblock)$/', $key ) ) {
-                                               if ( $skin ) {
-                                                       // Localize the duration, and add a tooltip
-                                                       // in English to help visitors from other wikis.
-                                                       // The lrm is needed to make sure that the number
-                                                       // is shown on the correct side of the tooltip text.
-                                                       $durationTooltip = '&lrm;' . htmlspecialchars( $params[1] );
-                                                       $params[1] = "<span class='blockExpiry' title='$durationTooltip'>" .
-                                                               $wgLang->translateBlockExpiry( $params[1] ) . '</span>';
-                                               } else {
-                                                       $params[1] = $wgContLang->translateBlockExpiry( $params[1] );
-                                               }
-
-                                               $params[2] = isset( $params[2] ) ?
-                                                       self::formatBlockFlags( $params[2], $langObj ) : '';
                                        // Page protections
-                                       } elseif ( $type == 'protect' && count( $params ) == 3 ) {
+                                       if ( $type == 'protect' && count( $params ) == 3 ) {
                                                // Restrictions and expiries
                                                if ( $skin ) {
                                                        $details .= $wgLang->getDirMark() . htmlspecialchars( " {$params[1]}" );
@@ -370,36 +354,22 @@ class LogPage {
                        return $title->getPrefixedText();
                }
 
-               switch ( $type ) {
-                       case 'block':
-                               if ( substr( $title->getText(), 0, 1 ) == '#' ) {
-                                       $titleLink = $title->getText();
-                               } else {
-                                       // @todo Store the user identifier in the parameters
-                                       // to make this faster for future log entries
-                                       $id = User::idFromName( $title->getText() );
-                                       $titleLink = Linker::userLink( $id, $title->getText() )
-                                               . Linker::userToolLinks( $id, $title->getText(), false, Linker::TOOL_LINKS_NOBLOCK );
-                               }
-                               break;
-                       default:
-                               if ( $title->isSpecialPage() ) {
-                                       list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
-
-                                       # Use the language name for log titles, rather than Log/X
-                                       if ( $name == 'Log' ) {
-                                               $logPage = new LogPage( $par );
-                                               $titleLink = Linker::link( $title, $logPage->getName()->escaped() );
-                                               $titleLink = wfMessage( 'parentheses' )
-                                                       ->inLanguage( $lang )
-                                                       ->rawParams( $titleLink )
-                                                       ->escaped();
-                                       } else {
-                                               $titleLink = Linker::link( $title );
-                                       }
-                               } else {
-                                       $titleLink = Linker::link( $title );
-                               }
+               if ( $title->isSpecialPage() ) {
+                       list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+
+                       # Use the language name for log titles, rather than Log/X
+                       if ( $name == 'Log' ) {
+                               $logPage = new LogPage( $par );
+                               $titleLink = Linker::link( $title, $logPage->getName()->escaped() );
+                               $titleLink = wfMessage( 'parentheses' )
+                                       ->inLanguage( $lang )
+                                       ->rawParams( $titleLink )
+                                       ->escaped();
+                       } else {
+                               $titleLink = Linker::link( $title );
+                       }
+               } else {
+                       $titleLink = Linker::link( $title );
                }
 
                return $titleLink;
@@ -516,61 +486,6 @@ class LogPage {
                }
        }
 
-       /**
-        * Convert a comma-delimited list of block log flags
-        * into a more readable (and translated) form
-        *
-        * @param string $flags Flags to format
-        * @param Language $lang
-        * @return string
-        */
-       public static function formatBlockFlags( $flags, $lang ) {
-               $flags = trim( $flags );
-               if ( $flags === '' ) {
-                       return ''; //nothing to do
-               }
-               $flags = explode( ',', $flags );
-               $flagsCount = count( $flags );
-
-               for ( $i = 0; $i < $flagsCount; $i++ ) {
-                       $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
-               }
-
-               return wfMessage( 'parentheses' )->inLanguage( $lang )
-                       ->rawParams( $lang->commaList( $flags ) )->escaped();
-       }
-
-       /**
-        * Translate a block log flag if possible
-        *
-        * @param int $flag Flag to translate
-        * @param Language $lang Language object to use
-        * @return string
-        */
-       public static function formatBlockFlag( $flag, $lang ) {
-               static $messages = array();
-
-               if ( !isset( $messages[$flag] ) ) {
-                       $messages[$flag] = htmlspecialchars( $flag ); // Fallback
-
-                       // For grepping. The following core messages can be used here:
-                       // * block-log-flags-angry-autoblock
-                       // * block-log-flags-anononly
-                       // * block-log-flags-hiddenname
-                       // * block-log-flags-noautoblock
-                       // * block-log-flags-nocreate
-                       // * block-log-flags-noemail
-                       // * block-log-flags-nousertalk
-                       $msg = wfMessage( 'block-log-flags-' . $flag )->inLanguage( $lang );
-
-                       if ( $msg->exists() ) {
-                               $messages[$flag] = $msg->escaped();
-                       }
-               }
-
-               return $messages[$flag];
-       }
-
        /**
         * Name of the log.
         * @return Message
diff --git a/includes/objectcache/APCBagOStuff.php b/includes/objectcache/APCBagOStuff.php
deleted file mode 100644 (file)
index afc0f0a..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-/**
- * Object caching using PHP's APC accelerator.
- *
- * 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 Cache
- */
-
-/**
- * This is a wrapper for APC's shared memory functions
- *
- * @ingroup Cache
- */
-class APCBagOStuff extends BagOStuff {
-       /**
-        * @param string $key
-        * @param int $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               $val = apc_fetch( $key );
-
-               $casToken = $val;
-
-               if ( is_string( $val ) ) {
-                       if ( $this->isInteger( $val ) ) {
-                               $val = intval( $val );
-                       } else {
-                               $val = unserialize( $val );
-                       }
-               }
-
-               return $val;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        */
-       public function set( $key, $value, $exptime = 0 ) {
-               if ( !$this->isInteger( $value ) ) {
-                       $value = serialize( $value );
-               }
-
-               apc_store( $key, $value, $exptime );
-
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        * @throws MWException
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               // APC's CAS functions only work on integers
-               throw new MWException( "CAS is not implemented in " . __CLASS__ );
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       public function delete( $key ) {
-               apc_delete( $key );
-
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
-       }
-
-       public function incr( $key, $value = 1 ) {
-               return apc_inc( $key, $value );
-       }
-
-       public function decr( $key, $value = 1 ) {
-               return apc_dec( $key, $value );
-       }
-}
diff --git a/includes/objectcache/BagOStuff.php b/includes/objectcache/BagOStuff.php
deleted file mode 100644 (file)
index 2c10742..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-<?php
-/**
- * Classes to cache objects in PHP accelerators, SQL database or DBA files
- *
- * Copyright © 2003-2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * @defgroup Cache Cache
- */
-
-use Psr\Log\LoggerAwareInterface;
-use Psr\Log\LoggerInterface;
-use Psr\Log\NullLogger;
-
-/**
- * interface is intended to be more or less compatible with
- * the PHP memcached client.
- *
- * backends for local hash array and SQL table included:
- * <code>
- *   $bag = new HashBagOStuff();
- *   $bag = new SqlBagOStuff(); # connect to db first
- * </code>
- *
- * @ingroup Cache
- */
-abstract class BagOStuff implements LoggerAwareInterface {
-       private $debugMode = false;
-
-       protected $lastError = self::ERR_NONE;
-
-       /**
-        * @var LoggerInterface
-        */
-       protected $logger;
-
-       /** Possible values for getLastError() */
-       const ERR_NONE = 0; // no error
-       const ERR_NO_RESPONSE = 1; // no response
-       const ERR_UNREACHABLE = 2; // can't connect
-       const ERR_UNEXPECTED = 3; // response gave some error
-
-       public function __construct( array $params = array() ) {
-               if ( isset( $params['logger'] ) ) {
-                       $this->setLogger( $params['logger'] );
-               } else {
-                       $this->setLogger( new NullLogger() );
-               }
-       }
-
-       /**
-        * @param LoggerInterface $logger
-        * @return null
-        */
-       public function setLogger( LoggerInterface $logger ) {
-               $this->logger = $logger;
-       }
-
-       /**
-        * @param bool $bool
-        */
-       public function setDebug( $bool ) {
-               $this->debugMode = $bool;
-       }
-
-       /**
-        * Get an item with the given key. Returns false if it does not exist.
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return mixed Returns false on failure
-        */
-       abstract public function get( $key, &$casToken = null );
-
-       /**
-        * Set an item.
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @return bool Success
-        */
-       abstract public function set( $key, $value, $exptime = 0 );
-
-       /**
-        * Delete an item.
-        * @param string $key
-        * @return bool True if the item was deleted or not found, false on failure
-        */
-       abstract public function delete( $key );
-
-       /**
-        * Merge changes into the existing cache value (possibly creating a new one).
-        * The callback function returns the new value given the current value (possibly false),
-        * and takes the arguments: (this BagOStuff object, cache key, current value).
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               if ( !is_callable( $callback ) ) {
-                       throw new Exception( "Got invalid callback." );
-               }
-
-               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
-       }
-
-       /**
-        * @see BagOStuff::merge()
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       protected function mergeViaCas( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               do {
-                       $casToken = null; // passed by reference
-                       $currentValue = $this->get( $key, $casToken );
-                       // Derive the new value from the old value
-                       $value = call_user_func( $callback, $this, $key, $currentValue );
-
-                       if ( $value === false ) {
-                               $success = true; // do nothing
-                       } elseif ( $currentValue === false ) {
-                               // Try to create the key, failing if it gets created in the meantime
-                               $success = $this->add( $key, $value, $exptime );
-                       } else {
-                               // Try to update the key, failing if it gets changed in the meantime
-                               $success = $this->cas( $casToken, $key, $value, $exptime );
-                       }
-               } while ( !$success && --$attempts );
-
-               return $success;
-       }
-
-       /**
-        * Check and set an item.
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @return bool Success
-        */
-       abstract protected function cas( $casToken, $key, $value, $exptime = 0 );
-
-       /**
-        * @see BagOStuff::merge()
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       protected function mergeViaLock( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               if ( !$this->lock( $key, 6 ) ) {
-                       return false;
-               }
-
-               $currentValue = $this->get( $key );
-               // Derive the new value from the old value
-               $value = call_user_func( $callback, $this, $key, $currentValue );
-
-               if ( $value === false ) {
-                       $success = true; // do nothing
-               } else {
-                       $success = $this->set( $key, $value, $exptime ); // set the new value
-               }
-
-               if ( !$this->unlock( $key ) ) {
-                       // this should never happen
-                       trigger_error( "Could not release lock for key '$key'." );
-               }
-
-               return $success;
-       }
-
-       /**
-        * @param string $key
-        * @param int $timeout Lock wait timeout [optional]
-        * @param int $expiry Lock expiry [optional]
-        * @return bool Success
-        */
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
-               $this->clearLastError();
-               $timestamp = microtime( true ); // starting UNIX timestamp
-               if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
-                       return true;
-               } elseif ( $this->getLastError() ) {
-                       return false;
-               }
-
-               $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
-               $sleep = 2 * $uRTT; // rough time to do get()+set()
-
-               $locked = false; // lock acquired
-               $attempts = 0; // failed attempts
-               do {
-                       if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
-                               // Exponentially back off after failed attempts to avoid network spam.
-                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
-                               $sleep *= 2;
-                       }
-                       usleep( $sleep ); // back off
-                       $this->clearLastError();
-                       $locked = $this->add( "{$key}:lock", 1, $expiry );
-                       if ( $this->getLastError() ) {
-                               return false;
-                       }
-               } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
-
-               return $locked;
-       }
-
-       /**
-        * @param string $key
-        * @return bool Success
-        */
-       public function unlock( $key ) {
-               return $this->delete( "{$key}:lock" );
-       }
-
-       /**
-        * Delete all objects expiring before a certain date.
-        * @param string $date The reference date in MW format
-        * @param callable|bool $progressCallback Optional, a function which will be called
-        *     regularly during long-running operations with the percentage progress
-        *     as the first parameter.
-        *
-        * @return bool Success, false if unimplemented
-        */
-       public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) {
-               // stub
-               return false;
-       }
-
-       /* *** Emulated functions *** */
-
-       /**
-        * Get an associative array containing the item for each of the keys that have items.
-        * @param array $keys List of strings
-        * @return array
-        */
-       public function getMulti( array $keys ) {
-               $res = array();
-               foreach ( $keys as $key ) {
-                       $val = $this->get( $key );
-                       if ( $val !== false ) {
-                               $res[$key] = $val;
-                       }
-               }
-               return $res;
-       }
-
-       /**
-        * Batch insertion
-        * @param array $data $key => $value assoc array
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @return bool Success
-        * @since 1.24
-        */
-       public function setMulti( array $data, $exptime = 0 ) {
-               $res = true;
-               foreach ( $data as $key => $value ) {
-                       if ( !$this->set( $key, $value, $exptime ) ) {
-                               $res = false;
-                       }
-               }
-               return $res;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool Success
-        */
-       public function add( $key, $value, $exptime = 0 ) {
-               if ( $this->get( $key ) === false ) {
-                       return $this->set( $key, $value, $exptime );
-               }
-               return false; // key already set
-       }
-
-       /**
-        * Increase stored value of $key by $value while preserving its TTL
-        * @param string $key Key to increase
-        * @param int $value Value to add to $key (Default 1)
-        * @return int|bool New value or false on failure
-        */
-       public function incr( $key, $value = 1 ) {
-               if ( !$this->lock( $key ) ) {
-                       return false;
-               }
-               $n = $this->get( $key );
-               if ( $this->isInteger( $n ) ) { // key exists?
-                       $n += intval( $value );
-                       $this->set( $key, max( 0, $n ) ); // exptime?
-               } else {
-                       $n = false;
-               }
-               $this->unlock( $key );
-
-               return $n;
-       }
-
-       /**
-        * Decrease stored value of $key by $value while preserving its TTL
-        * @param string $key
-        * @param int $value
-        * @return int
-        */
-       public function decr( $key, $value = 1 ) {
-               return $this->incr( $key, - $value );
-       }
-
-       /**
-        * Increase stored value of $key by $value while preserving its TTL
-        *
-        * This will create the key with value $init and TTL $ttl if not present
-        *
-        * @param string $key
-        * @param int $ttl
-        * @param int $value
-        * @param int $init
-        * @return bool
-        * @since 1.24
-        */
-       public function incrWithInit( $key, $ttl, $value = 1, $init = 1 ) {
-               return $this->incr( $key, $value ) ||
-                       $this->add( $key, (int)$init, $ttl ) || $this->incr( $key, $value );
-       }
-
-       /**
-        * Get the "last error" registered; clearLastError() should be called manually
-        * @return int ERR_* constant for the "last error" registry
-        * @since 1.23
-        */
-       public function getLastError() {
-               return $this->lastError;
-       }
-
-       /**
-        * Clear the "last error" registry
-        * @since 1.23
-        */
-       public function clearLastError() {
-               $this->lastError = self::ERR_NONE;
-       }
-
-       /**
-        * Set the "last error" registry
-        * @param int $err ERR_* constant
-        * @since 1.23
-        */
-       protected function setLastError( $err ) {
-               $this->lastError = $err;
-       }
-
-       /**
-        * @param string $text
-        */
-       protected function debug( $text ) {
-               if ( $this->debugMode ) {
-                       $this->logger->debug( "{class} debug: $text", array(
-                               'class' => get_class( $this ),
-                       ) );
-               }
-       }
-
-       /**
-        * Convert an optionally relative time to an absolute time
-        * @param int $exptime
-        * @return int
-        */
-       protected function convertExpiry( $exptime ) {
-               if ( ( $exptime != 0 ) && ( $exptime < 86400 * 3650 /* 10 years */ ) ) {
-                       return time() + $exptime;
-               } else {
-                       return $exptime;
-               }
-       }
-
-       /**
-        * Convert an optionally absolute expiry time to a relative time. If an
-        * absolute time is specified which is in the past, use a short expiry time.
-        *
-        * @param int $exptime
-        * @return int
-        */
-       protected function convertToRelative( $exptime ) {
-               if ( $exptime >= 86400 * 3650 /* 10 years */ ) {
-                       $exptime -= time();
-                       if ( $exptime <= 0 ) {
-                               $exptime = 1;
-                       }
-                       return $exptime;
-               } else {
-                       return $exptime;
-               }
-       }
-
-       /**
-        * Check if a value is an integer
-        *
-        * @param mixed $value
-        * @return bool
-        */
-       protected function isInteger( $value ) {
-               return ( is_int( $value ) || ctype_digit( $value ) );
-       }
-}
diff --git a/includes/objectcache/EmptyBagOStuff.php b/includes/objectcache/EmptyBagOStuff.php
deleted file mode 100644 (file)
index 0fc65d9..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * Dummy object caching.
- *
- * 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 Cache
- */
-
-/**
- * A BagOStuff object with no objects in it. Used to provide a no-op object to calling code.
- *
- * @ingroup Cache
- */
-class EmptyBagOStuff extends BagOStuff {
-
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return bool
-        */
-       public function get( $key, &$casToken = null ) {
-               return false;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exp
-        * @return bool
-        */
-       public function set( $key, $value, $exp = 0 ) {
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exp
-        * @return bool
-        */
-       protected function cas( $casToken, $key, $value, $exp = 0 ) {
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       public function delete( $key ) {
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               return true;
-       }
-}
diff --git a/includes/objectcache/HashBagOStuff.php b/includes/objectcache/HashBagOStuff.php
deleted file mode 100644 (file)
index 278a74e..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * Object caching using PHP arrays.
- *
- * 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 Cache
- */
-
-/**
- * This is a test of the interface, mainly. It stores things in an associative
- * array, which is not going to persist between program runs.
- *
- * @ingroup Cache
- */
-class HashBagOStuff extends BagOStuff {
-       /** @var array */
-       protected $bag;
-
-       function __construct( $params = array() ) {
-               parent::__construct( $params );
-               $this->bag = array();
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       protected function expire( $key ) {
-               $et = $this->bag[$key][1];
-
-               if ( ( $et == 0 ) || ( $et > time() ) ) {
-                       return false;
-               }
-
-               $this->delete( $key );
-
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return bool|mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               if ( !isset( $this->bag[$key] ) ) {
-                       return false;
-               }
-
-               if ( $this->expire( $key ) ) {
-                       return false;
-               }
-
-               $casToken = $this->bag[$key][0];
-
-               return $this->bag[$key][0];
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        */
-       public function set( $key, $value, $exptime = 0 ) {
-               $this->bag[$key] = array( $value, $this->convertExpiry( $exptime ) );
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               if ( $this->get( $key ) === $casToken ) {
-                       return $this->set( $key, $value, $exptime );
-               }
-
-               return false;
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       function delete( $key ) {
-               if ( !isset( $this->bag[$key] ) ) {
-                       return false;
-               }
-
-               unset( $this->bag[$key] );
-
-               return true;
-       }
-}
index ac34570..83bee70 100644 (file)
@@ -108,6 +108,14 @@ class MemcachedBagOStuff extends BagOStuff {
                        $this->fixExpiry( $exptime ) );
        }
 
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * Get the underlying client object. This is provided for debugging
         * purposes.
index f9a8cfe..be54e4d 100644 (file)
@@ -40,12 +40,12 @@ class MultiWriteBagOStuff extends BagOStuff {
         *               the documentation of $wgObjectCaches for more detail.
         *
         * @param array $params
-        * @throws MWException
+        * @throws InvalidArgumentException
         */
        public function __construct( $params ) {
                parent::__construct( $params );
                if ( !isset( $params['caches'] ) ) {
-                       throw new MWException( __METHOD__ . ': the caches parameter is required' );
+                       throw new InvalidArgumentException( __METHOD__ . ': the caches parameter is required' );
                }
 
                $this->caches = array();
@@ -76,18 +76,6 @@ class MultiWriteBagOStuff extends BagOStuff {
                return false;
        }
 
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param mixed $exptime
-        * @return bool
-        * @throws MWException
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               throw new MWException( "CAS is not implemented in " . __CLASS__ );
-       }
-
        /**
         * @param string $key
         * @param mixed $value
index b1be9d8..de3511d 100644 (file)
@@ -315,6 +315,15 @@ class RedisBagOStuff extends BagOStuff {
                $this->logRequest( 'incr', $key, $server, $result );
                return $result;
        }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * @param mixed $data
         * @return string
diff --git a/includes/objectcache/ReplicatedBagOStuff.php b/includes/objectcache/ReplicatedBagOStuff.php
new file mode 100644 (file)
index 0000000..7aa2cc3
--- /dev/null
@@ -0,0 +1,122 @@
+<?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 Cache
+ * @author Aaron Schulz
+ */
+
+/**
+ * A cache class that directs writes to one set of servers and reads to
+ * another. This assumes that the servers used for reads are setup to slave
+ * those that writes go to. This can easily be used with redis for example.
+ *
+ * In the WAN scenario (e.g. multi-datacenter case), this is useful when
+ * writes are rare or usually takes place on the primary datacenter.
+ *
+ * @ingroup Cache
+ * @since 1.25
+ */
+class ReplicatedBagOStuff extends BagOStuff {
+       /** @var BagOStuff */
+       protected $mCache;
+       /** @var BagOStuff */
+       protected $sCache;
+
+       /**
+        * Constructor. Parameters are:
+        *   - masterCache : Cache parameter structures, in the style required by $wgObjectCaches.
+        *                   See the documentation of $wgObjectCaches for more detail.
+        *   - slaveCache  : Cache parameter structures, in the style required by $wgObjectCaches.
+        *                   See the documentation of $wgObjectCaches for more detail.
+        *
+        * @param array $params
+        * @throws MWException
+        */
+       public function __construct( $params ) {
+               parent::__construct( $params );
+
+               if ( !isset( $params['masterCache'] ) ) {
+                       throw new MWException( __METHOD__ . ': the "masterCache" parameter is required' );
+               } elseif ( !isset( $params['slaveCache'] ) ) {
+                       throw new MWException( __METHOD__ . ': the "slaveCache" parameter is required' );
+               }
+
+               $this->mCache = ( $params['masterCache'] instanceof BagOStuff )
+                       ? $params['masterCache']
+                       : ObjectCache::newFromParams( $params['masterCache'] );
+               $this->sCache = ( $params['slaveCache'] instanceof BagOStuff )
+                       ? $params['slaveCache']
+                       : ObjectCache::newFromParams( $params['slaveCache'] );
+       }
+
+       public function setDebug( $debug ) {
+               $this->mCache->setDebug( $debug );
+               $this->sCache->setDebug( $debug );
+       }
+
+       public function get( $key, &$casToken = null ) {
+               return $this->sCache->get( $key, $casToken );
+       }
+
+       public function getMulti( $keys ) {
+               return $this->sCache->getMulti( $keys );
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               return $this->mCache->set( $key, $value, $exptime );
+       }
+
+       public function delete( $key ) {
+               return $this->mCache->delete( $key );
+       }
+
+       public function add( $key, $value, $exptime = 0 ) {
+               return $this->mCache->add( $key, $value, $exptime );
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return $this->mCache->incr( $key, $value );
+       }
+
+       public function decr( $key ) {
+               return $this->mCache->decr( $key );
+       }
+
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               return $this->mCache->lock( $key, $timeout, $expiry );
+       }
+
+       public function unlock( $key ) {
+               return $this->mCache->unlock( $key );
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mCache->merge( $key, $callback, $exptime, $attempts );
+       }
+
+       public function getLastError() {
+               return ( $this->mCache->getLastError() != self::ERR_NONE )
+                       ? $this->mCache->getLastError()
+                       : $this->sCache->getLastError();
+       }
+
+       public function clearLastError() {
+               $this->mCache->clearLastError();
+               $this->sCache->clearLastError();
+       }
+}
index b9a9985..2fb9ff9 100644 (file)
@@ -514,6 +514,14 @@ class SqlBagOStuff extends BagOStuff {
                return $newValue;
        }
 
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * @param DatabaseBase $db
         * @param string $exptime
@@ -723,9 +731,11 @@ class SqlBagOStuff extends BagOStuff {
                        $this->markServerDown( $exception, $serverIndex );
                }
                if ( $exception->db && $exception->db->wasReadOnlyError() ) {
-                       try {
-                               $exception->db->rollback( __METHOD__ );
-                       } catch ( DBError $e ) {
+                       if ( $exception->db->trxLevel() ) {
+                               try {
+                                       $exception->db->rollback( __METHOD__ );
+                               } catch ( DBError $e ) {
+                               }
                        }
                }
 
diff --git a/includes/objectcache/WinCacheBagOStuff.php b/includes/objectcache/WinCacheBagOStuff.php
deleted file mode 100644 (file)
index f59ed4e..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * Object caching using WinCache.
- *
- * 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 Cache
- */
-
-/**
- * Wrapper for WinCache object caching functions; identical interface
- * to the APC wrapper
- *
- * @ingroup Cache
- */
-class WinCacheBagOStuff extends BagOStuff {
-
-       /**
-        * Get a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param int $casToken [optional] Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               $val = wincache_ucache_get( $key );
-
-               $casToken = $val;
-
-               if ( is_string( $val ) ) {
-                       $val = unserialize( $val );
-               }
-
-               return $val;
-       }
-
-       /**
-        * Store a value in the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Value to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
-       public function set( $key, $value, $expire = 0 ) {
-               $result = wincache_ucache_set( $key, serialize( $value ), $expire );
-
-               /* wincache_ucache_set returns an empty array on success if $value
-                  was an array, bool otherwise */
-               return ( is_array( $result ) && $result === array() ) || $result;
-       }
-
-       /**
-        * Store a value in the WinCache object cache, race condition-safe
-        *
-        * @param int $casToken Cas token
-        * @param string $key Cache key
-        * @param int $value Object to store
-        * @param int $exptime Expiration time
-        * @return bool
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
-       }
-
-       /**
-        * Remove a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
-       public function delete( $key ) {
-               wincache_ucache_delete( $key );
-
-               return true;
-       }
-}
diff --git a/includes/objectcache/XCacheBagOStuff.php b/includes/objectcache/XCacheBagOStuff.php
deleted file mode 100644 (file)
index 9be6624..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/**
- * Object caching using XCache.
- *
- * 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 Cache
- */
-
-/**
- * Wrapper for XCache object caching functions; identical interface
- * to the APC wrapper
- *
- * @ingroup Cache
- */
-class XCacheBagOStuff extends BagOStuff {
-       /**
-        * Get a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $casToken Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               $val = xcache_get( $key );
-
-               if ( is_string( $val ) ) {
-                       if ( $this->isInteger( $val ) ) {
-                               $val = intval( $val );
-                       } else {
-                               $val = unserialize( $val );
-                       }
-               } elseif ( is_null( $val ) ) {
-                       return false;
-               }
-
-               return $val;
-       }
-
-       /**
-        * Store a value in the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Object to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
-       public function set( $key, $value, $expire = 0 ) {
-               if ( !$this->isInteger( $value ) ) {
-                       $value = serialize( $value );
-               }
-
-               xcache_set( $key, $value, $expire );
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        * @throws MWException
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               // Can't find any documentation on xcache cas
-               throw new MWException( "CAS is not implemented in " . __CLASS__ );
-       }
-
-       /**
-        * Remove a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
-       public function delete( $key ) {
-               xcache_unset( $key );
-               return true;
-       }
-
-       /**
-        * Merge an item.
-        * XCache does not seem to support any way of performing CAS - this however will
-        * provide a way to perform CAS-like functionality.
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
-       }
-
-       public function incr( $key, $value = 1 ) {
-               return xcache_inc( $key, $value );
-       }
-
-       public function decr( $key, $value = 1 ) {
-               return xcache_dec( $key, $value );
-       }
-}
index 59f2ae7..817b4b6 100644 (file)
@@ -707,7 +707,7 @@ class Article implements Page {
                }
 
                # Get the ParserOutput actually *displayed* here.
-               # Note that $this->mParserOutput is the *current* version output.
+               # Note that $this->mParserOutput is the *current*/oldid version output.
                $pOutput = ( $outputDone instanceof ParserOutput )
                        ? $outputDone // object fetched by hook
                        : $this->mParserOutput;
@@ -958,9 +958,10 @@ class Article implements Page {
         */
        public function showRedirectedFromHeader() {
                global $wgRedirectSources;
-               $outputPage = $this->getContext()->getOutput();
 
-               $request = $this->getContext()->getRequest();
+               $context = $this->getContext();
+               $outputPage = $context->getOutput();
+               $request = $context->getRequest();
                $rdfrom = $request->getVal( 'rdfrom' );
 
                // Construct a URL for the current page view, but with the target title
@@ -985,7 +986,7 @@ class Article implements Page {
                                );
 
                                $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
-                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                                       $context->msg( 'redirectedfrom' )->rawParams( $redir )->parse()
                                . "</span>" );
 
                                // Add the script to update the displayed URL and
@@ -1009,7 +1010,7 @@ class Article implements Page {
                        if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
                                $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
                                $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
-                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                                       $context->msg( 'redirectedfrom' )->rawParams( $redir )->parse()
                                . "</span>" );
 
                                // Add the script to update the displayed URL
@@ -1495,7 +1496,7 @@ class Article implements Page {
                }
                $html .= '</ul>';
 
-               $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->text();
+               $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->escaped();
 
                return '<div class="redirectMsg">' .
                        '<p>' . $redirectToText . '</p>' .
index d30f589..fe61f6f 100644 (file)
@@ -3378,70 +3378,35 @@ class WikiPage implements Page, IDBAccessObject {
        }
 
        /**
-        * Updates cascading protections
+        * Opportunistically enqueue link update jobs given fresh parser output if useful
         *
-        * @param ParserOutput $parserOutput ParserOutput object for the current version
+        * @param ParserOutput $parserOutput Current version page output
+        * @return bool Whether a job was pushed
+        * @since 1.25
         */
-       public function doCascadeProtectionUpdates( ParserOutput $parserOutput ) {
-               if ( wfReadOnly() || !$this->mTitle->areRestrictionsCascading() ) {
-                       return;
-               }
-
-               // templatelinks or imagelinks tables may have become out of sync,
-               // especially if using variable-based transclusions.
-               // For paranoia, check if things have changed and if
-               // so apply updates to the database. This will ensure
-               // that cascaded protections apply as soon as the changes
-               // are visible.
-
-               // Get templates from templatelinks and images from imagelinks
-               $id = $this->getId();
-
-               $dbLinks = array();
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'templatelinks' ),
-                       array( 'tl_namespace', 'tl_title' ),
-                       array( 'tl_from' => $id ),
-                       __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $dbLinks["{$row->tl_namespace}:{$row->tl_title}"] = true;
+       public function triggerOpportunisticLinksUpdate( ParserOutput $parserOutput ) {
+               if ( wfReadOnly() ) {
+                       return false;
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'imagelinks' ),
-                       array( 'il_to' ),
-                       array( 'il_from' => $id ),
-                       __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $dbLinks[NS_FILE . ":{$row->il_to}"] = true;
+               if ( $this->mTitle->areRestrictionsCascading() ) {
+                       // If the page is cascade protecting, the links should really be up-to-date
+                       $params = array( 'prioritize' => true );
+               } elseif ( $parserOutput->hasDynamicContent() ) {
+                       // Assume the output contains time/random based magic words
+                       $params = array();
+               } else {
+                       // If the inclusions are deterministic, the edit-triggered link jobs are enough
+                       return false;
                }
 
-               // Get templates and images from parser output.
-               $poLinks = array();
-               foreach ( $parserOutput->getTemplates() as $ns => $templates ) {
-                       foreach ( $templates as $dbk => $id ) {
-                               $poLinks["$ns:$dbk"] = true;
-                       }
-               }
-               foreach ( $parserOutput->getImages() as $dbk => $id ) {
-                       $poLinks[NS_FILE . ":$dbk"] = true;
+               // Check if the last link refresh was before page_touched
+               if ( $this->getLinksTimestamp() < $this->getTouched() ) {
+                       JobQueueGroup::singleton()->push( new RefreshLinksJob( $this->mTitle, $params ) );
+                       return true;
                }
 
-               // Get the diff
-               $links_diff = array_diff_key( $poLinks, $dbLinks );
-
-               if ( count( $links_diff ) > 0 ) {
-                       // Whee, link updates time.
-                       // Note: we are only interested in links here. We don't need to get
-                       // other DataUpdate items from the parser output.
-                       $u = new LinksUpdate( $this->mTitle, $parserOutput, false );
-                       $u->doUpdate();
-               }
+               return false;
        }
 
        /**
index 191ee01..f249017 100644 (file)
@@ -53,8 +53,6 @@ class ParserOutput extends CacheTime {
                $mTOCEnabled = true;          # Whether TOC should be shown, can't override __NOTOC__
        private $mIndexPolicy = '';       # 'index' or 'noindex'?  Any other value will result in no change.
        private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
-       private $mSecondaryDataUpdates = array(); # List of DataUpdate, used to save info from the page somewhere else.
-       private $mCustomDataUpdateCount = 0; # Number of custom updaters in $mSecondaryDataUpdates.
        private $mExtensionData = array(); # extra data used by extensions
        private $mLimitReportData = array(); # Parser limit report data
        private $mParseStartTime = array(); # Timestamps for getTimeSinceStart()
@@ -677,73 +675,57 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * Adds an update job to the output. Any update jobs added to the output will
-        * eventually be executed in order to store any secondary information extracted
-        * from the page's content. This is triggered by calling getSecondaryDataUpdates()
-        * and is used for forward links updates on edit and backlink updates by jobs.
+        * @deprecated since 1.25. Instead, store any relevant data using setExtensionData,
+        *    and implement Content::getSecondaryDataUpdates() if possible, or use the
+        *    'SecondaryDataUpdates' hook to construct the necessary update objects.
         *
-        * @note: custom DataUpdates do not survive serialization of the ParserOutput!
-        * This is especially relevant when using a cached ParserOutput for updating
-        * the database, as WikiPage does if $wgAjaxEditStash is enabled. For this
-        * reason, ApiStashEdit will skip any ParserOutput that has custom DataUpdates.
+        * @note Hard deprecation and removal without long deprecation period, since there are no
+        *       known users, but known conceptual issues.
         *
-        * @since 1.20
+        * @todo remove in 1.26
         *
         * @param DataUpdate $update
+        *
+        * @throws MWException
         */
        public function addSecondaryDataUpdate( DataUpdate $update ) {
-               $this->mSecondaryDataUpdates[] = $update;
-               $this->mCustomDataUpdateCount = count( $this->mSecondaryDataUpdates );
+               wfDeprecated( __METHOD__, '1.25' );
+               throw new MWException( 'ParserOutput::addSecondaryDataUpdate() is no longer supported. Override Content::getSecondaryDataUpdates() or use the SecondaryDataUpdates hook instead.' );
        }
 
        /**
-        * Whether this ParserOutput contains custom DataUpdate objects that may not survive
-        * serialization of the ParserOutput.
+        * @deprecated since 1.25.
         *
-        * @see __sleep()
+        * @note Hard deprecation and removal without long deprecation period, since there are no
+        *       known users, but known conceptual issues.
         *
-        * @return bool
+        * @todo remove in 1.26
+        *
+        * @return bool false (since 1.25)
         */
        public function hasCustomDataUpdates() {
-               return ( $this->mCustomDataUpdateCount > 0 );
+               wfDeprecated( __METHOD__, '1.25' );
+               return false;
        }
 
        /**
-        * Returns any DataUpdate jobs to be executed in order to store secondary information
-        * extracted from the page's content, including a LinksUpdate object for all links stored in
-        * this ParserOutput object.
+        * @deprecated since 1.25. Instead, store any relevant data using setExtensionData,
+        *    and implement Content::getSecondaryDataUpdates() if possible, or use the
+        *    'SecondaryDataUpdates' hook to construct the necessary update objects.
         *
-        * @note Avoid using this method directly, use ContentHandler::getSecondaryDataUpdates()
-        *   instead! The content handler may provide additional update objects.
+        * @note Hard deprecation and removal without long deprecation period, since there are no
+        *       known users, but known conceptual issues.
         *
-        * @since 1.20
+        * @todo remove in 1.26
         *
-        * @param Title $title The title of the page we're updating. If not given, a title object will
-        *    be created based on $this->getTitleText()
-        * @param bool $recursive Queue jobs for recursive updates?
-        *
-        * @throws MWException if called on a ParserOutput instance that was restored from serialization.
-        *         DataUpdates are generally not serializable, so after serialization, they are undefined.
+        * @param Title $title
+        * @param bool $recursive
         *
         * @return array An array of instances of DataUpdate
         */
        public function getSecondaryDataUpdates( Title $title = null, $recursive = true ) {
-               if ( is_null( $title ) ) {
-                       $title = Title::newFromText( $this->getTitleText() );
-               }
-
-               if ( count( $this->mSecondaryDataUpdates ) !== $this->mCustomDataUpdateCount ) {
-                       // NOTE: This happens when mSecondaryDataUpdates are lost during serialization
-                       // (see __sleep below). After (un)serialization, getSecondaryDataUpdates()
-                       // has no defined behavior in that case, and should throw an exception.
-                       throw new MWException( 'getSecondaryDataUpdates() must not be called on ParserOutput restored from serialization.' );
-               }
-
-               // NOTE: ApiStashEdit knows about this "magic" update object. If this goes away,
-               // ApiStashEdit::buildStashValue needs to be adjusted.
-               $linksUpdate = new LinksUpdate( $title, $this, $recursive );
-
-               return array_merge( $this->mSecondaryDataUpdates, array( $linksUpdate ) );
+               wfDeprecated( __METHOD__, '1.25' );
+               return array();
        }
 
        /**
@@ -879,6 +861,22 @@ class ParserOutput extends CacheTime {
                $this->mLimitReportData[$key] = $value;
        }
 
+       /**
+        * Check whether the cache TTL was lowered due to dynamic content
+        *
+        * When content is determined by more than hard state (e.g. page edits),
+        * such as template/file transclusions based on the current timestamp or
+        * extension tags that generate lists based on queries, this return true.
+        *
+        * @return bool
+        * @since 1.25
+        */
+       public function hasDynamicContent() {
+               global $wgParserCacheExpireTime;
+
+               return $this->getCacheExpiry() < $wgParserCacheExpireTime;
+       }
+
        /**
         * Get or set the prevent-clickjacking flag
         *
@@ -897,7 +895,7 @@ class ParserOutput extends CacheTime {
        public function __sleep() {
                return array_diff(
                        array_keys( get_object_vars( $this ) ),
-                       array( 'mSecondaryDataUpdates', 'mParseStartTime' )
+                       array( 'mParseStartTime' )
                );
        }
 }
index da20f94..54cbb27 100644 (file)
@@ -159,7 +159,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                }
 
                if ( $isCurrent ) {
-                       $this->page->doCascadeProtectionUpdates( $this->parserOutput );
+                       $this->page->triggerOpportunisticLinksUpdate( $this->parserOutput );
                }
 
                return true;
index b4ac628..840fd77 100644 (file)
@@ -250,13 +250,19 @@ abstract class RevDelList extends RevisionListBase {
                // Add params for affected page and ids
                $logParams = $this->getLogParams( $params );
                // Actually add the deletion log entry
-               $log = new LogPage( $logType );
-               $logid = $log->addEntry( $this->getLogAction(), $params['title'],
-                       $params['comment'], $logParams, $this->getUser() );
+               $logEntry = new ManualLogEntry( $logType, $this->getLogAction() );
+               $logEntry->setTarget( $params['title'] );
+               $logEntry->setComment( $params['comment'] );
+               $logEntry->setParameters( $logParams );
+               $logEntry->setPerformer( $this->getUser() );
                // Allow for easy searching of deletion log items for revision/log items
-               $log->addRelations( $field, $params['ids'], $logid );
-               $log->addRelations( 'target_author_id', $params['authorIds'], $logid );
-               $log->addRelations( 'target_author_ip', $params['authorIPs'], $logid );
+               $logEntry->setRelations( array(
+                       $field => $params['ids'],
+                       'target_author_id' => $params['authorIds'],
+                       'target_author_ip' => $params['authorIPs'],
+               ) );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
        }
 
        /**
@@ -274,10 +280,10 @@ abstract class RevDelList extends RevisionListBase {
         */
        public function getLogParams( $params ) {
                return array(
-                       $this->getType(),
-                       implode( ',', $params['ids'] ),
-                       "ofield={$params['oldBits']}",
-                       "nfield={$params['newBits']}"
+                       '4::type' => $this->getType(),
+                       '5::ids' => $params['ids'],
+                       '6::ofield' => $params['oldBits'],
+                       '7::nfield' => $params['newBits'],
                );
        }
 
index 86c5af3..d8bd2f7 100644 (file)
@@ -95,9 +95,9 @@ class RevDelLogList extends RevDelList {
 
        public function getLogParams( $params ) {
                return array(
-                       implode( ',', $params['ids'] ),
-                       "ofield={$params['oldBits']}",
-                       "nfield={$params['newBits']}"
+                       '4::ids' => $params['ids'],
+                       '5::ofield' => $params['oldBits'],
+                       '6::nfield' => $params['newBits'],
                );
        }
 }
diff --git a/includes/site/HashSiteStore.php b/includes/site/HashSiteStore.php
new file mode 100644 (file)
index 0000000..38528d6
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+/**
+ * In-memory implementation of SiteStore.
+ *
+ * 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
+ */
+
+/**
+ * In-memory SiteStore implementation, storing sites in an associative array.
+ *
+ * @author Daniel Kinzler
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ *
+ * @since 1.25
+ * @ingroup Site
+ */
+class HashSiteStore implements SiteStore {
+
+       /**
+        * @var Site[]
+        */
+       private $sites = array();
+
+       /**
+        * @param array $sites
+        */
+       public function __construct( $sites = array() ) {
+               $this->saveSites( $sites );
+       }
+
+       /**
+        * Saves the provided site.
+        *
+        * @since 1.25
+        *
+        * @param Site $site
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSite( Site $site ) {
+               $this->sites[$site->getGlobalId()] = $site;
+       }
+
+       /**
+        * Saves the provided sites.
+        *
+        * @since 1.25
+        *
+        * @param Site[] $sites
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSites( array $sites ) {
+               foreach ( $sites as $site ) {
+                       $this->saveSite( $site );
+               }
+       }
+
+       /**
+        * Returns the site with provided global id, or null if there is no such site.
+        *
+        * @since 1.25
+        *
+        * @param string $globalId
+        * @param string $source either 'cache' or 'recache'.
+        *                       If 'cache', the values can (but not obliged) come from a cache.
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId, $source = 'cache' ) {
+               if ( isset( $this->sites[$globalId] ) ) {
+                       return $this->sites[$globalId];
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Returns a list of all sites. By default this site is
+        * fetched from the cache, which can be changed to loading
+        * the list from the database using the $useCache parameter.
+        *
+        * @since 1.25
+        *
+        * @param string $source either 'cache' or 'recache'.
+        *                       If 'cache', the values can (but not obliged) come from a cache.
+        *
+        * @return SiteList
+        */
+       public function getSites( $source = 'cache' ) {
+               return new SiteList( $this->sites );
+       }
+
+       /**
+        * Deletes all sites from the database. After calling clear(), getSites() will return an empty
+        * list and getSite() will return null until saveSite() or saveSites() is called.
+        */
+       public function clear() {
+               $this->sites = array();
+       }
+
+}
index 26ee164..530338a 100644 (file)
@@ -1587,7 +1587,7 @@ abstract class Skin extends ContextSource {
 
                $links = array(
                        'editsection' => array(
-                               'text' => wfMessage( 'editsection' )->inLanguage( $lang )->text(),
+                               'text' => wfMessage( 'editsection' )->inLanguage( $lang )->escaped(),
                                'targetTitle' => $nt,
                                'attribs' => $attribs,
                                'query' => array( 'action' => 'edit', 'section' => $section ),
index 3476c26..b1ed63c 100644 (file)
@@ -65,6 +65,12 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $batch->add( NS_USER, $row->rc_user_text );
                        $batch->add( NS_USER_TALK, $row->rc_user_text );
                        $batch->add( $row->rc_namespace, $row->rc_title );
+                       if ( $row->rc_source === RecentChange::SRC_LOG ) {
+                               $formatter = LogFormatter::newFromRow( $row );
+                               foreach ( $formatter->getPreloadTitles() as $title ) {
+                                       $batch->addObj( $title );
+                               }
+                       }
                }
                $batch->execute();
 
index 1d4a860..c672817 100644 (file)
@@ -236,6 +236,14 @@ class SpecialBlock extends FormSpecialPage {
                # This will be overwritten by request data
                $fields['Target']['default'] = (string)$this->target;
 
+               if ( $this->target ) {
+                       $status = self::validateTarget( $this->target, $this->getUser() );
+                       if ( !$status->isOK() ) {
+                               $errors = $status->getErrorsArray();
+                               $this->preErrors = array_merge( $this->preErrors, $errors );
+                       }
+               }
+
                # This won't be
                $fields['PreviousTarget']['default'] = (string)$this->target;
 
@@ -784,22 +792,21 @@ class SpecialBlock extends FormSpecialPage {
 
                # Prepare log parameters
                $logParams = array();
-               $logParams[] = $data['Expiry'];
-               $logParams[] = self::blockLogFlags( $data, $type );
+               $logParams['5::duration'] = $data['Expiry'];
+               $logParams['6::flags'] = self::blockLogFlags( $data, $type );
 
                # Make log entry, if the name is hidden, put it in the oversight log
                $log_type = $data['HideUser'] ? 'suppress' : 'block';
-               $log = new LogPage( $log_type );
-               $log_id = $log->addEntry(
-                       $logaction,
-                       Title::makeTitle( NS_USER, $target ),
-                       $data['Reason'][0],
-                       $logParams,
-                       $performer
-               );
+               $logEntry = new ManualLogEntry( $log_type, $logaction );
+               $logEntry->setTarget( Title::makeTitle( NS_USER, $target ) );
+               $logEntry->setComment( $data['Reason'][0] );
+               $logEntry->setPerformer( $performer );
+               $logEntry->setParameters( $logParams );
                # Relate log ID to block IDs (bug 25763)
                $blockIds = array_merge( array( $status['id'] ), $status['autoIds'] );
-               $log->addRelations( 'ipb_id', $blockIds, $log_id );
+               $logEntry->setRelations( array( 'ipb_id' => $blockIds ) );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
 
                # Report to the user
                return true;
index 38c52a0..c30d962 100644 (file)
@@ -182,13 +182,20 @@ class SpecialExport extends SpecialPage {
                $out = $this->getOutput();
                $out->addWikiMsg( 'exporttext' );
 
+               if ( $page == '' ) {
+                       $categoryName = $request->getText( 'catname' );
+               } else {
+                       $categoryName = '';
+               }
+
                $form = Xml::openElement( 'form', array( 'method' => 'post',
                        'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ) ) );
                $form .= Xml::inputLabel(
                        $this->msg( 'export-addcattext' )->text(),
                        'catname',
                        'catname',
-                       40
+                       40,
+                       $categoryName
                ) . '&#160;';
                $form .= Xml::submitButton(
                        $this->msg( 'export-addcat' )->text(),
index 760704d..d4b45fb 100644 (file)
@@ -425,7 +425,7 @@ class ImageListPager extends TablePager {
        function formatValue( $field, $value ) {
                switch ( $field ) {
                        case 'thumb':
-                               $opt = array( 'time' => $this->mCurrentRow->img_timestamp );
+                               $opt = array( 'time' => wfTimestamp( TS_MW, $this->mCurrentRow->img_timestamp ) );
                                $file = RepoGroup::singleton()->getLocalRepo()->findFile( $value, $opt );
                                // If statement for paranoia
                                if ( $file ) {
index 1056cda..b62de5d 100644 (file)
@@ -73,6 +73,10 @@ class MediaStatisticsPage extends QueryPage {
                                'namespace' => NS_MEDIA, /* needs to be something */
                                'value' => '1'
                        ),
+                       'conds' => array(
+                               // WMF has a random null row in the db
+                               'img_media_type IS NOT NULL'
+                       ),
                        'options' => array(
                                'GROUP BY' => array(
                                        'img_media_type',
index cac324a..86aad12 100644 (file)
@@ -537,7 +537,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        if ( $nt->getNamespace() == NS_FILE ) {
                                $file = wfLocalFile( $nt );
                                if ( $file->exists() ) {
-                                       $file->delete( $reason, false );
+                                       $file->delete( $reason, false, $user );
                                }
                        }
 
index 71b1893..6cea158 100644 (file)
@@ -80,6 +80,11 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
                        return null;
                }
 
+               if ( $base->isRedirect() ) {
+                       $page = new WikiPage( $base );
+                       $base = $page->getRedirectTarget();
+               }
+
                $uiCode = $this->getLanguage()->getCode();
                $proposed = $base->getSubpage( $uiCode );
                if ( $uiCode !== $this->getConfig()->get( 'LanguageCode' ) && $proposed && $proposed->exists() ) {
index 192dc96..f81f1c3 100644 (file)
@@ -227,8 +227,12 @@ class SpecialUnblock extends SpecialPage {
                }
 
                # Make log entry
-               $log = new LogPage( 'block' );
-               $log->addEntry( 'unblock', $page, $data['Reason'], array(), $performer );
+               $logEntry = new ManualLogEntry( 'block', 'unblock' );
+               $logEntry->setTarget( $page );
+               $logEntry->setComment( $data['Reason'] );
+               $logEntry->setPerformer( $performer );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
 
                return true;
        }
index cad2348..dd4eb0a 100644 (file)
@@ -72,7 +72,10 @@ class WantedPagesPage extends WantedQueryPage {
                                "pg2.page_namespace != '" . NS_MEDIAWIKI . "'"
                        ),
                        'options' => array(
-                               'HAVING' => "COUNT(*) > $count",
+                               'HAVING' => array(
+                                       "COUNT(*) > $count",
+                                       "COUNT(*) > SUM(pg2.page_is_redirect)"
+                               ),
                                'GROUP BY' => array( 'pl_namespace', 'pl_title' )
                        ),
                        'join_conds' => array(
index 8a4616c..5457949 100644 (file)
@@ -31,7 +31,7 @@
                                <p>Please <a href="{{path}}mw-config/index.{{ext}}">complete the installation</a> and download LocalSettings.php.</p>
                        {{/installerStarted}}
                        {{^installerStarted}}
-                               <p>Please <a href="{{path}}mw-config/index.{{ext}}">set up the wiki</a> first!</p>
+                               <p>Please <a href="{{path}}mw-config/index.{{ext}}">set up the wiki</a> first.</p>
                        {{/installerStarted}}
                {{/localSettingsExists}}
                </div>
index 43bab0e..dc9da63 100644 (file)
@@ -218,7 +218,7 @@ class UsercreateTemplate extends BaseTemplate {
                                                                                echo 'checked="checked"';
                                                                        } ?>
                                                                ><label for="<?php echo htmlspecialchars( $inputItem['name'] ); ?>">
-                                                                       <?php $this->msgHtml( $inputItem['msg'] ); ?>
+                                                                       <?php $this->msg( $inputItem['msg'] ); ?>
                                                                </label>
                                                        </div>
                                                <?php
index 14a6da6..3d410b1 100644 (file)
@@ -231,12 +231,18 @@ class UploadFromUrl extends UploadBase {
         * @return int Number of bytes handled
         */
        public function saveTempFileChunk( $req, $buffer ) {
+               wfDebugLog( 'fileupload', 'Received chunk of ' . strlen( $buffer ) . ' bytes' );
                $nbytes = fwrite( $this->mTmpHandle, $buffer );
 
                if ( $nbytes == strlen( $buffer ) ) {
                        $this->mFileSize += $nbytes;
                } else {
                        // Well... that's not good!
+                       wfDebugLog(
+                               'fileupload',
+                               'Short write ' . $this->nbytes . '/' . strlen( $buffer ) .
+                                       ' bytes, aborting with '  . $this->mFileSize . ' uploaded so far'
+                       );
                        fclose( $this->mTmpHandle );
                        $this->mTmpHandle = false;
                }
@@ -262,6 +268,7 @@ class UploadFromUrl extends UploadBase {
                if ( !$this->mTmpHandle ) {
                        return Status::newFatal( 'tmp-create-error' );
                }
+               wfDebugLog( 'fileupload', 'Temporary file created "' . $this->mTempPath . '"' );
 
                $this->mRemoveTempFile = true;
                $this->mFileSize = 0;
@@ -275,6 +282,11 @@ class UploadFromUrl extends UploadBase {
                if ( $wgCopyUploadTimeout && !isset( $options['timeout'] ) ) {
                        $options['timeout'] = $wgCopyUploadTimeout;
                }
+               wfDebugLog(
+                       'fileupload',
+                       'Starting download from "' . $this->mUrl . '" ' .
+                               '<' . implode( ',', array_keys( array_filter( $options ) ) ) . '>'
+               );
                $req = MWHttpRequest::factory( $this->mUrl, $options );
                $req->setCallback( array( $this, 'saveTempFileChunk' ) );
                $status = $req->execute();
@@ -288,8 +300,14 @@ class UploadFromUrl extends UploadBase {
                        return Status::newFatal( 'tmp-write-error' );
                }
 
-               if ( !$status->isOk() ) {
-                       return $status;
+               wfDebugLog( 'fileupload', $status );
+               if ( $status->isOk() ) {
+                       wfDebugLog( 'fileupload', 'Download by URL completed successfuly.' );
+               } else {
+                       wfDebugLog(
+                               'fileupload',
+                               'Download by URL completed with HTTP status ' . $req->getStatus()
+                       );
                }
 
                return $status;
index c8e4bf0..f75f2ea 100644 (file)
        "cur": "nū",
        "next": "nīehst",
        "last": "ǣr",
-       "page_first": "ærost",
-       "page_last": "sƿift",
+       "page_first": "ǣrost",
+       "page_last": "ǣrra",
        "history-fieldset-title": "Sēcan stǣr",
        "histfirst": "ieldeste",
        "histlast": "nīwoste",
index 5b3dc29..c0d32e8 100644 (file)
        "thumbnail_image-missing": "الملف يبدو أنه مفقود: $1",
        "thumbnail_image-failure-limit": "هناك الكثير من المحاولات الفاشلة مؤخراً ($1 أو أكثر) لتَصْيير هذه الصورة المصغرة. الرجاء المحاولة مرة أخرى لاحقاً.",
        "import": "استيراد صفحات",
-       "importinterwiki": "استÙ\8aراد ØªØ±Ø§Ù\86سÙ\88Ù\8aÙ\83Ù\8a",
+       "importinterwiki": "استÙ\88رد Ù\85Ù\86 Ù\88Ù\8aÙ\83Ù\8a Ø£Ø®Ø±Ù\89",
        "import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد عبر الويكي يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
        "import-interwiki-sourcewiki": "الويكي المصدر:",
        "import-interwiki-sourcepage": "الصفحة المصدر:",
        "tags-tag": "اسم الوسم",
        "tags-display-header": "الظهور في قوائم التغييرات",
        "tags-description-header": "وصف كامل للمعنى",
+       "tags-source-header": "المصدر",
        "tags-active-header": "نشط؟",
        "tags-hitcount-header": "تغييرات موسومة",
        "tags-active-yes": "نعم",
        "tags-active-no": "لا",
        "tags-edit": "عدل",
+       "tags-delete": "احذف",
+       "tags-activate": "نشط",
        "tags-hitcount": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
+       "tags-create-tag-name": "اسم الوسم:",
+       "tags-create-reason": "السبب:",
+       "tags-create-submit": "أنشئ",
        "comparepages": "قارن صفحات",
        "compare-page1": "صفحة 1",
        "compare-page2": "صفحة 2",
index 5cbed2e..801aad3 100644 (file)
@@ -38,7 +38,7 @@
        "tog-shownumberswatching": "Amosar el númberu d'usuarios que tán vixilando la páxina",
        "tog-oldsig": "Firma esistente:",
        "tog-fancysig": "Tratar la firma como testu wiki (ensin enllaz automáticu)",
-       "tog-uselivepreview": "Usar vista previa en tiempu real (experimental)",
+       "tog-uselivepreview": "Usar vista previa en tiempu real",
        "tog-forceeditsummary": "Avisame cuando grabe col resume d'edición en blanco",
        "tog-watchlisthideown": "Anubrir les mios ediciones na llista de siguimientu",
        "tog-watchlisthidebots": "Anubrir les ediciones de bots na llista de siguimientu",
        "pool-queuefull": "La cola de trabayu ta enllena",
        "pool-errorunknown": "Fallu desconocíu",
        "pool-servererror": "El serviciu de contador de recursos compartíos nun ta disponible ($1).",
+       "poolcounter-usage-error": "Error d'usu: $1",
        "aboutsite": "Tocante a {{SITENAME}}",
        "aboutpage": "Project:Tocante a",
        "copyright": "El conteníu ta disponible baxo los términos de la $1 si nun s'indica otra cosa.",
        "readonly_lag": "La base de datos candóse automáticamente mentes los sirvidores de la base de datos esclava se sincronicen cola maestra",
        "internalerror": "Fallu internu",
        "internalerror_info": "Fallu internu: $1",
+       "internalerror-fatal-exception": "Escepción fatal de tipu «$1»",
        "filecopyerror": "Nun se pudo copiar el ficheru «$1» como «$2».",
        "filerenameerror": "Nun se pudo renomar el ficheru «$1» como «$2».",
        "filedeleteerror": "Nun se pudo desaniciar el ficheru «$1».",
        "directorycreateerror": "Nun se pudo crear el direutoriu «$1».",
+       "directoryreadonlyerror": "El direutoriu «$1» ye de sólo llectura.",
+       "directorynotreadableerror": "El direutoriu \"$1\" nun ye lleíble.",
        "filenotfound": "Nun pudo atopase'l ficheru «$1».",
        "unexpected": "Valor inesperáu: «$1»=«$2».",
        "formerror": "Fallu: Nun se pudo unviar el formulariu.",
        "viewsourcetext": "Pues ver y copiar la fonte d'esta páxina:",
        "viewyourtext": "Pues ver y copiar la fonte de '''les tos ediciones''' d'esta páxina:",
        "protectedinterface": "Esta páxina proporciona'l testu de la interfaz del software d'esta wiki, y ta candada pa torgar abusos.\nP'amestar o cambiar les traducciones de toles wikis, por favor usa [//translatewiki.net/translatewiki.net], el proyeutu de llocalización de MediaWiki.",
-       "editinginterface": "'''Avisu:''' Tas editando una páxina que s'usa pa proporcionar el testu d'interfaz del programa.\nLos cambeos nesta páxina van afeutar l'apariencia de la interfaz pa otros usuarios d'esta wiki.\nP'amestar o camudar traducciones pa toles wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
+       "editinginterface": "<strong>Avisu:</strong> Tas editando una páxina que s'usa pa proporcionar el testu de la interfaz del programa.\nLos cambeos nesta páxina afeutarán al aspeutu de la interfaz pa otros usuarios d'esta wiki.",
+       "translateinterface": "P'amestar o camudar les traducciones pa toles wikis, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
        "cascadeprotected": "Esta páxina ta protexida d'ediciones porque ta inxerta {{PLURAL:$1|na siguiente páxina, protexida|nes siguientes páxines, protexíes}} cola opción «en cascada» activada:\n$2",
        "namespaceprotected": "Nun tienes permisu pa editar páxines nel espaciu de nomes '''$1'''.",
        "customcssprotected": "Nun tienes permisu pa editar esta páxina CSS porque contién preferencies personales d'otru usuariu.",
        "anoneditwarning": "<strong>Avisu:</strong> Nun aniciasti sesión. La direición IP sedrá visible en público si faes dalguna edición. Si <strong>[$1 anicies sesión]</strong> o <strong>[$2 crees una cuenta]</strong>, les ediciones atribuiránse al to nome d'usuariu, xunto con otros beneficios.",
        "anonpreviewwarning": "''Nun aniciasti sesión. Al guardar quedará rexistrada la to direición IP nel historial d'edición d'esta páxina.''",
        "missingsummary": "'''Recordatoriu:''' Nun conseñasti un resume d'edición.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin nengún resume.",
+       "selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nSeique conseñaras un oxetivu enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a facer clic en «{{int:savearticle}}», crearáse la redireición de toles maneres.",
        "missingcommenttext": "Por favor, escribi un comentariu abaxo.",
        "missingcommentheader": "'''Recordatoriu:''' Nun conseñasti un asuntu/titular pa esti comentariu.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin dengún.",
        "summary-preview": "Vista previa del resume:",
        "content-model-text": "testu simple",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Oxetu baleru",
+       "content-json-empty-array": "Matriz balera",
+       "duplicate-args-category": "Páxines con argumentos duplicaos nes llamaes a plantíes",
+       "duplicate-args-category-desc": "La páxina contién llamaes a plantíes qu'usen argumentos duplicaos, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Avisu:''' Esta páxina contién demasiaes llamaes costoses a funciones d'análisis sintáuticu.\n\nHabría tener menos de $2 {{PLURAL:$2|llamada|llamaes}}, y agora tien $1 {{PLURAL:$1|llamada|llamaes}}.",
        "expensive-parserfunction-category": "Páxines con demasiaes llamaes costoses a funciones analítiques",
        "post-expand-template-inclusion-warning": "'''Avisu:''' El tamañu de les plantíes incluyíes ye demasiao grande.\nDelles plantíes nun se van incluir.",
        "history-feed-empty": "La páxina solicitada nun esiste.\nSeique fuera desaniciada de la wiki, o renomada.\nPrueba a [[Special:Search|buscar na wiki]] otres páxines nueves.",
        "rev-deleted-comment": "(resume d'edición desaniciáu)",
        "rev-deleted-user": "(nome d'usuariu desaniciáu)",
-       "rev-deleted-event": "(aición del rexistru desaniciada)",
+       "rev-deleted-event": "(detalles del rexistru desaniciaos)",
        "rev-deleted-user-contribs": "[nome d'usuariu o direición IP desaniciáu - ediciones anubríes en contribuciones]",
        "rev-deleted-text-permission": "Esta revisión de la páxina se '''desanició'''.\nLos detalles s'alcuentren nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistru de desanicios].",
        "rev-suppressed-text-permission": "Esta revisión de la páxina <strong>suprimióse</strong>.\nLos detalles s'alcuentren nel [{{fullurl:{{#Special:Log}}/supress|page={{FULLPAGENAMEE}}}} rexistru de supresiones].",
        "revdelete-legend": "Establecer torgues de visibilidá",
        "revdelete-hide-text": "Testu de la revisión",
        "revdelete-hide-image": "Tapecer el conteníu del ficheru",
-       "revdelete-hide-name": "Tapecer aición y oxetivu",
+       "revdelete-hide-name": "Tapecer el destín y los parámetros",
        "revdelete-hide-comment": "Resume d'edición",
        "revdelete-hide-user": "Nome del editor/Direición IP",
        "revdelete-hide-restricted": "Desaniciar datos de los alministradores y d'otros",
        "search-result-category-size": "{{PLURAL:$1|1 miembru|$1 miembros}} ({{PLURAL:$2|1 subcategoría|$2 subcategories}}, {{PLURAL:$3|1 ficheru|$3 ficheros}})",
        "search-redirect": "(redireición de $1)",
        "search-section": "(seición $1)",
+       "search-category": "(categoría $1)",
        "search-file-match": "(casa col conteníu del ficheru)",
        "search-suggest": "Quixisti dicir: $1",
        "search-interwiki-caption": "Proyeutos hermanos",
        "prefs-personal": "Perfil del usuariu",
        "prefs-rc": "Cambios recientes",
        "prefs-watchlist": "Llista de siguimientu",
+       "prefs-editwatchlist": "Editar la llista de siguimientu",
+       "prefs-editwatchlist-label": "Editar les entraes de la to llista de siguimientu:",
+       "prefs-editwatchlist-edit": "Ver y desaniciar los títulos de la to llista de siguimientu",
+       "prefs-editwatchlist-raw": "Editar la llista de siguimientu (ensin formatu)",
+       "prefs-editwatchlist-clear": "Llimpiar la to llista de siguimientu",
        "prefs-watchlist-days": "Númberu de díes qu'amosar na llista de siguimientu:",
        "prefs-watchlist-days-max": "Máximo $1 {{PLURAL:$1|día|díes}}",
        "prefs-watchlist-edits": "Númberu máximu d'ediciones qu'amosar na llista de siguimientu espandida:",
        "gender-female": "Ella edita páxines wiki",
        "prefs-help-gender": "Configurar esta preferencia ye opcional. El software usa esti valor pa dirixise a ti y pa mentate a terceros col xéneru gramatical correchu.\nEsta información sedrá pública.",
        "email": "Corréu",
-       "prefs-help-realname": "El nome real ye opcional y si decides conseñalu va ser usáu p'atribuyite'l to trabayu.",
+       "prefs-help-realname": "El nome real ye opcional.\nSi se da, pue usase pa date reconocimientu pol to trabayu.",
        "prefs-help-email": "La direición de corréu ye opcional, pero ye necesaria pa unviate una conseña nueva si escaeces la tuya.",
        "prefs-help-email-others": "Tamién pues escoyer permitir qu'otres persones contauten contigo pela to páxina d'usuariu o la d'alderique ensin necesidá de revelar la to identidá.",
        "prefs-help-email-required": "Necesítase una direición de corréu electrónicu.",
        "right-protect": "Camudar los niveles de proteición y editar páxines protexíes en cascada",
        "right-editprotected": "Editar les páxines protexíes como \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Editar les páxines protexíes como \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Editar el modelu de conteníu d'una páxina",
        "right-editinterface": "Editar la interfaz d'usuariu",
        "right-editusercssjs": "Editar los archivos CSS y JS d'otros usuarios",
        "right-editusercss": "Editar los archivos CSS d'otros usuarios",
        "right-override-export-depth": "Esportar páxines, incluyendo páxines enllazaes fasta una fondura de 5",
        "right-sendemail": "Unviar corréu a otros usuarios",
        "right-passwordreset": "Ver los correos de reestablecimientu de conseña",
+       "right-managechangetags": "Crear y desaniciar [[Special:Tags|etiquetes]] dende la base de datos",
        "newuserlogpage": "Rexistru de creación d'usuarios",
        "newuserlogpagetext": "Esti ye un rexistru de creación d'usuarios.",
        "rightslog": "Rexistru de perfil d'usuariu",
        "action-viewmywatchlist": "ver la llista de vixilancia propia",
        "action-viewmyprivateinfo": "ver la so información privada",
        "action-editmyprivateinfo": "editar la so información privada",
+       "action-editcontentmodel": "editar el modelu de conteníu d'una páxina",
+       "action-managechangetags": "crear y desaniciar etiquetes dende la base de datos",
        "nchanges": "{{PLURAL:$1|un cambiu|$1 cambios}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dende la última visita}}",
        "enhancedrc-history": "historial",
        "uploaderror": "Error de xubida",
        "upload-recreate-warning": "'''Avisu: Se desanició o treslladó un ficheru con esi nome.'''\n\nEquí s'ufre'l rexistru de desaniciu y treslláu d'esta páxina por comodidá:",
        "uploadtext": "Usa'l formulariu de más abaxo pa xubir ficheros.\nPa ver o buscar ficheros xubíos previamente, vete a la [[Special:FileList|llista de ficheros xubíos]]. Les (re)xubíes tamién queden conseñaes nel [[Special:Log/upload|rexistru de xubíes]], y los desanicios nel [[Special:Log/delete|rexistru de desanicios]].\n\nPa incluir un ficheru nuna páxina, usa un enllaz con ún de los siguientes formatos:\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.jpg]]</nowiki></code></strong> pa usar la versión completa del ficheru\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.png|200px|thumb|left|testu alternativu]]</nowiki></code></strong> pa usar una versión de 200 píxeles d'anchu nun cuadru nel marxe izquierdu con «testu alternativu» como descripción\n*<strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Ficheru.ogg]]</nowiki></code></strong> pa enllazar al ficheru direutamente ensin amosalu",
-       "upload-permitted": "Menes d'archivu permitíes: $1.",
-       "upload-preferred": "Menes d'archivu preferíes: $1.",
-       "upload-prohibited": "Menes d'archivu prohibíes: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipu de ficheru permitíu|Tipos de ficheros permitíos}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipu de ficheru preferíu|Tipos de ficheros preferíos}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipu de ficheru torgáu|Tipos de ficheros torgaos}}: $1.",
        "uploadlogpage": "Rexistru de xubíes",
        "uploadlogpagetext": "Abaxo amuésase una llista de les xubíes d'archivos más recientes.\nMira la [[Special:NewFiles|galería d'archivos nuevos]] pa una güeyada más visual.",
        "filename": "Nome del ficheru",
        "unusedimages": "Imáxenes non usaes",
        "wantedcategories": "Categoríes buscaes",
        "wantedpages": "Páxines buscaes",
+       "wantedpages-summary": "Llista de páxines inesistentes con más enllaces a elles, escluyendo les páxines que sólo tienen redireiciones qu'enllacen con elles. Pa ver la llista de páxines inesistentes que tienen redireiciones qu'enllacen con elles, ver [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Títulu inválidu nel conxuntu de resultaos: $1",
        "wantedfiles": "Archivos buscaos",
        "wantedfiletext-cat": "Los ficheros siguientes tan usándose, pero nun esisten. Ye posible qu'apaezan ficheros de repositorios esternos ensin qu'esistan. Cualesquier falsu positivu tará <del>tacháu</del>. Amás, les páxines qu'inxerten ficheros que nun esisten apaecen na llista de [[:$1]].",
        "pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
        "suppress": "Güeyador",
        "querypage-disabled": "Esta páxina especial ta desactivada por razones de rindimientu.",
+       "apihelp": "Ayuda de la API",
+       "apihelp-no-such-module": "Nun s'alcuentra'l módulu «$1».",
        "booksources": "Fontes de llibros",
        "booksources-search-legend": "Busca de fontes de llibros",
        "booksources-search": "Buscar",
        "namespace": "Espaciu de nomes:",
        "invert": "Invertir seleición",
        "tooltip-invert": "Marca esta caxella p'anubrir los cambios de les páxines pertenecientes al espaciu de nomes seleicionáu (y al espaciu de nomes asociáu si se marcó)",
+       "tooltip-whatlinkshere-invert": "Marca esta caxella pa tapecer los enllaces de páxines que tean nel espaciu de nomes seleicionáu.",
        "namespace_association": "Espaciu de nome asociáu",
        "tooltip-namespace_association": "Marca esta caxella p'amestar tamién l'espaciu de nombres d'alderique o asuntu asociaos col espaciu de nomes seleicionáu",
        "blanknamespace": "(Principal)",
        "thumbnail-temp-create": "Nun se pudo crear el ficheru temporal de miniatura",
        "thumbnail-dest-create": "Nun se pudo guardar la miniatura nel destín",
        "thumbnail_invalid_params": "Parámetros de miniatura non válidos",
+       "thumbnail_toobigimagearea": "Ficheru con dimensiones mayores que $1",
        "thumbnail_dest_directory": "Nun se pue crear el direutoriu de destín",
        "thumbnail_image-type": "Triba d'imaxe ensin sofitu",
        "thumbnail_gd-library": "Configuración incompleta de la biblioteca GD: falta la función $1",
        "thumbnail_image-missing": "Paez que falta'l ficheru: $1",
        "thumbnail_image-failure-limit": "Hebo demasiaos intentos recientes que fallaron ($1 o más) al representar esta miniatura. Vuelva a intentalo más sero.",
        "import": "Importar páxines",
-       "importinterwiki": "Importación treswiki",
-       "import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nLes feches de revisión y los nomes de los editores caltendránse.\nToles aiciones d'importación treswiki queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].",
+       "importinterwiki": "Importar d'otra wiki",
+       "import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nVan caltenese les feches de revisión y los nomes de los editores.\nToles importaciones d'otres wikis queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].",
        "import-interwiki-sourcewiki": "Wiki d'orixe:",
        "import-interwiki-sourcepage": "Páxina d'orixe:",
        "import-interwiki-history": "Copiar toles versiones d'historial d'esta páxina",
        "importcantopen": "Nun se pudo abrir el ficheru d'importación",
        "importbadinterwiki": "Enllaz interwiki incorreutu",
        "importsuccess": "¡Importación finalizada!",
-       "importnosources": "Nun se definió l'orixe de la importación treswiki y les xubíes direutes del historial tán deshabilitaes.",
+       "importnosources": "Nun se definieron wikis de onde importar y les xubíes direutes del historial tán desactivaes.",
        "importnofile": "Nun se xubió nengún archivu d'importación.",
        "importuploaderrorsize": "Falló la xubida del archivu d'importación. L'archivu ye más grande que'l tamañu permitíu de xubida.",
        "importuploaderrorpartial": "Falló la xubida del archivu d'importación. L'archivu xubióse solo parcialmente.",
        "javascripttest": "Prueba de JavaScript",
        "javascripttest-pagetext-noframework": "Esta páxina ta acutada pa executar pruebes de javascript.",
        "javascripttest-pagetext-unknownframework": "L'entornu de pruebes «$1» ye desconocíu.",
+       "javascripttest-pagetext-unknownaction": "Aición desconocida «$1».",
        "javascripttest-pagetext-frameworks": "Escueyi un de los siguientes entornos de pruebes: $1",
        "javascripttest-pagetext-skins": "Escueyi una apariencia pa executar les pruebes:",
        "javascripttest-qunit-intro": "Ver la [$1 documentación de les pruebes] en mediawiki.org.",
        "tooltip-pt-mycontris": "Llista de les tos collaboraciones",
        "tooltip-pt-login": "T'encamentamos que t'identifiques, anque nun ye obligatorio",
        "tooltip-pt-logout": "Salir",
+       "tooltip-pt-createaccount": "Encamentámoste que crees una cuenta y qu'anicies sesión; sicasí, nun ye obligatorio",
        "tooltip-ca-talk": "Alderique tocante al conteníu de la páxina",
        "tooltip-ca-edit": "Pues editar esta páxina. Por favor usa'l botón de vista previa enantes de guardar los cambios.",
        "tooltip-ca-addsection": "Emprima una seición nueva",
        "tooltip-feed-atom": "Canal Atom pa esta páxina",
        "tooltip-t-contributions": "Llista de collaboraciones d'esti usuariu",
        "tooltip-t-emailuser": "Unvia un corréu a esti usuariu",
+       "tooltip-t-info": "Más información sobro esta páxina",
        "tooltip-t-upload": "Xubir ficheros",
        "tooltip-t-specialpages": "Llista de toles páxines especiales",
        "tooltip-t-print": "Versión imprentable d'esta páxina",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|alderique]])",
        "duplicate-defaultsort": "Avisu: La clave d'ordenación predeterminada \"$2\" anula la clave d'ordenación anterior \"$1\".",
        "duplicate-displaytitle": "<strong>Avisu:</strong> El títulu a amosar \"$2\" anula el títulu anterior \"$1\".",
+       "invalid-indicator-name": "<strong>Error:</strong> L'atributu <code>name</code> de los indicadores d'estáu de la páxina nun pue tar baleru.",
        "version": "Versión",
        "version-extensions": "Estensiones instalaes",
        "version-skins": "Temes instalaos",
        "version-entrypoints": "URLs del puntu d'entrada",
        "version-entrypoints-header-entrypoint": "Puntu d'entrada",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Biblioteques instalaes",
+       "version-libraries-library": "Biblioteca",
+       "version-libraries-version": "Versión",
        "redirect": "Redireición por ficheru, usuariu, páxina o ID de revisión",
        "redirect-legend": "Redirixir a un ficheru o una páxina",
        "redirect-summary": "Esta páxina especial redirixe a un ficheru (dando'l so nome), una páxina (dando una ID de revisión o de páxina) o una páxina d'usuariu (dando un númberu d'ID d'usuariu). Usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],  [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
        "specialpages-group-wiki": "Datos y ferramientes",
        "specialpages-group-redirects": "Páxines especiales de redireición",
        "specialpages-group-spam": "Ferramientes pa spam",
+       "specialpages-group-developer": "Ferramientes pa desendolcadores",
        "blankpage": "Páxina en blanco",
        "intentionallyblankpage": "Esta páxina ta en blanco arrémente",
        "external_image_whitelist": "#Dexa esta llinia exautamente como ta<pre>\n#Pon los fragmentos d'espresiones regulares (namái la parte que va ente les //) debaxo\n#Esto va ser comprobao coles URLs d'imáxenes esternes (hotlinked)\n#Les que concuayen se van amosar como imáxenes; si nun concuayen, namái se va amosar un enllaz a la imaxe\n#Les llinies qu'emprimen con # se traten como comentarios\n#Esto nun ye sensible a la capitalización\n\n#Pon tolos fragmentos regex enantes d'esta llinia. Dexa esta llinia exautamente como ta</pre>",
        "tags-tag": "Nome d'etiqueta",
        "tags-display-header": "Aspeutu nes llistes de cambios",
        "tags-description-header": "Descripción completa del significáu",
+       "tags-source-header": "Fonte",
        "tags-active-header": "¿Activu?",
        "tags-hitcount-header": "Cambios etiquetaos",
+       "tags-actions-header": "Aiciones",
        "tags-active-yes": "Sí",
        "tags-active-no": "Non",
+       "tags-source-extension": "Definida por una estensión",
+       "tags-source-manual": "Aplicada a mano polos usuarios y bots",
+       "tags-source-none": "Yá nun s'usa",
        "tags-edit": "editar",
+       "tags-delete": "desaniciar",
+       "tags-activate": "activar",
+       "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|cambiu|cambios}}",
+       "tags-manage-no-permission": "Nun tienes permisu p'alministrar etiquetes de cambiu.",
+       "tags-create-heading": "Crear una etiqueta nueva",
+       "tags-create-explanation": "De mou predetermináu, les etiquetes nueves que se creen tarán disponibles pa que les usen los usuarios y bots.",
+       "tags-create-tag-name": "Nome de la etiqueta:",
+       "tags-create-reason": "Motivu:",
+       "tags-create-submit": "Crear",
+       "tags-create-no-name": "Tienes d'especificar un nome d'etiqueta.",
+       "tags-create-invalid-chars": "Los nomes d'etiqueta nun tienen de contener comes (<code>,</code>) o barres (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Los nomes d'etiqueta nun puen contener caráuteres que nun puedan usase nos títulos de páxina",
+       "tags-create-already-exists": "La etiqueta «$1» yá esiste.",
+       "tags-create-warnings-above": "{{PLURAL:$2|Alcontróse'l siguiente avisu|Alcontráronse los siguientes avisos}} al intentar crear la etiqueta «$1»:",
+       "tags-create-warnings-below": "¿Quies siguir creando de la etiqueta?",
+       "tags-delete-title": "Desaniciar etiqueta",
+       "tags-delete-explanation-initial": "Tas a piques de desaniciar la etiqueta «$1» de la base de datos.",
+       "tags-delete-explanation-in-use": "Desaniciaráse de {{PLURAL:$2|la revisión o entrada|les $2 revisiones y/o entraes}} del rexistru a {{PLURAL:$2|la|les}} que s'aplica actualmente.",
+       "tags-delete-explanation-warning": "Esta aición ye <strong>irreversible</strong> y <strong>nun podrán desfacela</strong> siquiera los alministradores de la base de datos. Confirma qu'esta ye la etiqueta que quies desaniciar.",
+       "tags-delete-explanation-active": "<strong>La etiqueta «$1» sigue activa y siguirá aplicándose nel futuru.</strong> Pa que dexe d'asoceder, vete al llugar(es) onde ta configurada la aplicación d'esta etiqueta y desactívala allí.",
+       "tags-delete-reason": "Motivu:",
+       "tags-delete-submit": "Desaniciar esta etiqueta de mou irreversible",
+       "tags-delete-not-allowed": "Les etiquetes definíes por una estensión nun puen desaniciase mentanto la estensión nun lo permita específicamente.",
+       "tags-delete-not-found": "La etiqueta «$1» nun esiste.",
+       "tags-activate-reason": "Motivu:",
+       "tags-activate-submit": "Activar",
+       "tags-deactivate-title": "Desactivar etiqueta",
+       "tags-deactivate-reason": "Motivu:",
+       "tags-deactivate-submit": "Desactivar",
        "comparepages": "Comparar páxines",
        "compare-page1": "Páxina 1",
        "compare-page2": "Páxina 2",
        "compare-revision-not-exists": "La revisión que conseñasti nun esiste.",
        "dberr-problems": "¡Sentímoslo! Esti sitiu ta esperimentando dificultaes téuniques.",
        "dberr-again": "Tenta esperar dellos minutos y recargar.",
-       "dberr-info": "(Nun se pue contautar cola base de datos del sirvidor: $1)",
-       "dberr-info-hidden": "(Nun se pue comunicar col sirvidor de base de datos)",
+       "dberr-info": "(Nun se pue entrar na base de datos: $1)",
+       "dberr-info-hidden": "(Nun se pue entrar na base de datos)",
        "dberr-usegoogle": "Pue probar a buscar con Google mentanto.",
        "dberr-outofdate": "Atalanta que los sos índices del nuesu conteníu seique nun tean actualizaos.",
        "dberr-cachederror": "Esta ye una copia na caché de la páxina que se pidiera, y pue que nun tea actualizada.",
        "revdelete-uname-unhid": "nome d'usuariu non anubríu",
        "revdelete-restricted": "aplicaes les restricciones a los alministradores",
        "revdelete-unrestricted": "eliminaes les restricciones a los alministradores",
+       "logentry-block-block": "$1 {{GENDER:$2|bloquió}} a {{GENDER:$4|$3}} con un tiempu de duración de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|desbloquió a}} {{GENDER:$4|$3}}",
        "logentry-move-move": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\"",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\" ensin dexar una redireición",
        "logentry-move-move_redir": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\" sobre una redireición",
        "log-name-pagelang": "Rexistru de cambios de llingua",
        "log-description-pagelang": "Esti ye un rexistru de los cambios de llingua de les páxines.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} la llingua de la páxina $3 del $4 al $5.",
-       "default-skin-not-found": "L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa to instalación paez qu'incluye los siguientes aspeutos. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activalos y escoyer el predetermináu.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar les llinies siguientes en <code>LocalSettings.php</code> p'activar tolos aspeutos instalaos actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
-       "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
+       "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye los siguientes aspeutos. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activalos y escoyer el predetermináu.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar les llinies siguientes en <code>LocalSettings.php</code> p'activar tolos aspeutos instalaos actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
+       "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activáu)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')",
        "mediastatistics": "Estadístiques de multimedia",
        "json-error-utf8": "Carauteres UTF-8 con errores de formatu, seique codificaos incorreutamente",
        "json-error-recursion": "Una o más referencies recursives nel valor a codificar",
        "json-error-inf-or-nan": "Unu o más valores NAN (númberu nun conseñáu) o INF (infinitu) nel valor a codificar",
-       "json-error-unsupported-type": "Diose un valor d'un tipu que nun pue codificase"
+       "json-error-unsupported-type": "Diose un valor d'un tipu que nun pue codificase",
+       "headline-anchor-title": "Enllaz a esta sección"
 }
index 6248807..b4117f9 100644 (file)
        "edit-no-change": "Sizin redaktələr qeydə alınmamışdır. Belə ki, mətndə heç bir düzəliş edilməmişdir.",
        "postedit-confirmation-saved": "Redaktəniz qeyd edildi.",
        "edit-already-exists": "Yeni səhifəni yaratmaq mümkün deyil.\nBelə ki, bu adda səhifə artıq mövcuddur.",
+       "content-not-allowed-here": "\"$1\" tərkibi [[$2]] səhifəsi üçün icazə verilmir.",
+       "content-model-wikitext": "vikimətn",
+       "content-model-text": "adi mətn",
        "content-model-javascript": "JavaScript",
        "expensive-parserfunction-category": "Kifayət qədər böyük sayda genişresurslu funksiyaların müraciət olunduğu səhifələr",
        "post-expand-template-inclusion-warning": "'''DİQQƏT!''' Daxil edilən şablonların həcmi həddindən artıq böyükdür.\nBəzi şablonlar əlavə olunmayacaq.",
        "immobile-target-namespace-iw": "İntervikilər səhifə adının dəyişməsi üçün əsas ola bilməz.",
        "immobile-source-page": "Bu səhifənin adı dəyişdirilə bilməz.",
        "immobile-target-page": "Bu hədəf başlığına daşınmır.",
+       "bad-target-model": "İstənilən hədəf fərqli bir məzmun modeli istifadə edir. $1 modelindən $2 modelinə çevrilmir.",
        "imageinvalidfilename": "Seçilmiş fayl adı keçərsizdir.",
        "protectedpagemovewarning": "'''Xəbərdarlıq:''' Bu səhifə mühafizə edildiyi üçün onun adını yalnız idarəçilər dəyişə bilərlər.",
        "export": "Səhifələri ixrac et",
        "pageinfo-header-restrictions": "Səhifə mühafizəsi",
        "pageinfo-header-properties": "Səhifə xüsusiyyətləri",
        "pageinfo-display-title": "Göstərilən başlıq",
+       "pageinfo-default-sort": "Susmaya görə çeşidləmə açarı",
        "pageinfo-length": "Səhifənin ölçüsü (baytla)",
        "pageinfo-article-id": "Səhifə ID-si",
        "pageinfo-language": "Səhifənin dili",
        "pageinfo-content-model": "Səhifə məzmunu modeli",
+       "pageinfo-robot-policy": "Robotlar tərəfindən indeksləşmə",
+       "pageinfo-robot-index": "İcazə verilir",
        "pageinfo-robot-noindex": "İcazə verilmədi",
        "pageinfo-watchers": "Səhifəyə baxışların sayı",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|izləyicidən|izləyicilərdən}} az",
index 0c8cbce..46959a5 100644 (file)
        "userlogin-loggedin": "Вы ўжо ўвайшлі як {{GENDER:$1|$1}}.\nДля ўваходу пад іншым удзельнікам скарыстайцеся формай унізе.",
        "userlogin-createanother": "Стварыць іншы рахунак",
        "createacct-emailrequired": "Адрас электроннай пошты",
-       "createacct-emailoptional": "E-mail адрас (неабавязкова)",
-       "createacct-email-ph": "Увядзіце ваш e-mail адрас",
-       "createacct-another-email-ph": "Увядзіце адрас e-mail",
-       "createaccountmail": "Стварыць часовы адвольны пароль і даслаць яго на e-mail адрас, пазначаны ніжэй",
+       "createacct-emailoptional": "Адрас электроннай пошты (неабавязкова)",
+       "createacct-email-ph": "Увядзіце ваш адрас электроннай пошты",
+       "createacct-another-email-ph": "Увядзіце адрас электроннай пошты",
+       "createaccountmail": "Стварыць часовы адвольны пароль і даслаць яго на пазначаны адрас электроннай пошты",
        "createacct-realname": "Сапраўднае імя (неабавязкова)",
        "createaccountreason": "Прычына:",
        "createacct-reason": "Прычына",
        "thumbnail_image-missing": "Верагодна няма файла $1",
        "thumbnail_image-failure-limit": "Было зроблена зашмат няўдалых спробаў ($1 ці болей) сфармаваць гэтую мініятуру. Калі ласка, паспрабуйце пазьней.",
        "import": "Імпартаваць старонкі",
-       "importinterwiki": "Імпартаваньне зь іншых вікі",
+       "importinterwiki": "Імпартаваньне зь іншай вікі",
        "import-interwiki-text": "Абярыце вікі і назву старонкі для імпартаваньня.\nДаты зьменаў і імёны аўтараў будуць захаваныя.\nУсе дзеяньні імпартаваньня паміж вікі запісваюцца ў [[Special:Log/import|журнал імпартаваньняў]].",
        "import-interwiki-sourcewiki": "Крынічная вікі:",
        "import-interwiki-sourcepage": "Крынічная старонка:",
        "importcantopen": "Немагчыма адкрыць файл імпарту",
        "importbadinterwiki": "Няслушная спасылка на іншую моўную вэрсію",
        "importsuccess": "Імпартаваньне скончанае!",
-       "importnosources": "Ð\9aÑ\80Ñ\8bнÑ\96Ñ\86Ñ\8b Ñ\96мпаÑ\80Ñ\82Ñ\83 Ð¿Ð°Ð¼Ñ\96ж Ð²Ñ\96кÑ\96 не былі вызначаныя і наўпроставая загрузка гісторыі адключаная.",
+       "importnosources": "Ð\92Ñ\96кÑ\96 Ð´Ð»Ñ\8f Ñ\96мпаÑ\80Ñ\82Ñ\83 не былі вызначаныя і наўпроставая загрузка гісторыі адключаная.",
        "importnofile": "Файл для імпартаваньня ня быў загружаны.",
        "importuploaderrorsize": "Не атрымалася загрузіць файл імпартаваньня.\nПамер файла болей за дазволены для загрузкі.",
        "importuploaderrorpartial": "Не атрымалася загрузіць файл імпартаваньня.\nЁн быў загружаны толькі часткова.",
index a4f2cd5..15759a5 100644 (file)
        "user-mail-no-addy": "کوشش په دیم داتین یک خط بی شه گوجام ایمیل ادرسئ  ئا.",
        "user-mail-no-body": "کوشش په دیم داتین ئا یک گونڈین یا خالی ئین ایمیل ئی ئا.",
        "changepassword": "پاسوردی تغیر داتین",
+       "resetpass_announce": "شما باید په لوگین ئی الاسی ئا، نۆکین چیهرگالی ئی تنظیم بکنیت.",
        "resetpass_header": "پاسوردئ تغیر داتین",
        "oldpassword": "دیمئ پاسورد:",
        "newpassword": "نوکین پاسورد:",
        "retypenew": "نوکین پاسوردا پدا داخل کورتین",
        "resetpass_submit": "پاسوردی تنظیم و داخل بوتین",
        "changepassword-success": "شمی پاسوردئ تغیر کامیاب بوت و پاسورد تغیر کورت",
+       "changepassword-throttled": "شما بیخی باز وار په لوگین بوتینا کوشش کورته ایت.\nمهربانئ بکنیت دیم شه آیی که پدا کوشش بکنیت $1 صبر کنیت.",
        "resetpass_forbidden": "نه توانیت که پاسوردا تغیر بدهیت",
        "resetpass-no-info": "په ای تاکدیمی دسترسی ئی خاتیرا داخل بئیت.",
        "resetpass-submit-loggedin": "پاسوردی تغیر داتین",
        "resetpass-submit-cancel": "کنسیل",
+       "resetpass-recycled": "مهربانی بکینت دیگه پاسورد یا چیهرگالی غیر شه انونین چیهرگال ئا تنظیم بکنیت.",
+       "resetpass-temp-emailed": "شما گۆ یک موقتین ایمیل بوته ئین کود ئا لوگین بوته ئیت.\nپه لوگین ئی الاسی ئا شما باید نوکین چیهرگالی ایدا داخل بکنیت:",
        "resetpass-temp-password": "موقیئتین پاسورد:",
+       "resetpass-expired": "شمی چیهرگالی ئی وخت الاس بوته. مهربانی په لوگین بوتینا نۆکین چیهرگالی تنظیم بکنیت.",
        "passwordreset": "پاک کورتین پاسوردئ",
        "passwordreset-text-one": "په پدا نادینتین ایمیلی پاسوردی خاتیرا ای فرم ئا پر کنیت.",
        "passwordreset-text-many": "{{PLURAL:$1|په موقتی ئین چیهرگال ئی گیپتین شه ایمیلئ راه ئا، یکی شه زمینه‌هان ئا پر کنیت.}}",
        "resettokens-tokens": "نشانگان:",
        "resettokens-token-label": "$1 (انونین اندازه گ: $2)",
        "resettokens-done": "بیئر گردینتین نشانگ ئان.",
+       "resettokens-resetbutton": "نشانی بوته ئین وسایلانی بیئرگردینتین.",
        "bold_sample": "پر رنگین متن",
        "bold_tip": "پر رنگین متن",
        "italic_sample": "مورب متن",
        "anonpreviewwarning": "<em>شما لوگین نه بوته ئیت. ذخیره کورتین باعث ئه بیئت که شمی آی پی ادرس بی ای تاکدیمی تاریخچه ئی تا ثبت بیئت.</em>",
        "missingcommenttext": "مهربانی بکنیت جهلگا توضیح دهیت.",
        "summary-preview": "دیم دیست ئی خلاصه:",
+       "subject-preview": "موضو ئی دیم دیست/ئنوان:",
        "blockedtitle": "کار زوروک بسته بوته",
        "blockednoreason": "دلیلی مشخص نه بوته",
        "whitelistedittext": "په مقاله ئانی ایڈیٹ ئا باید $1.",
        "storedversion": "ذخیره بوته ئین نخسه",
        "yourdiff": "تفاوت‌هان",
        "templatesused": "{{PLURAL:$1|تراشوان|تراشوانان}} استفاده بوته انت بی ای تاکدیمئ تا:",
+       "templatesusedpreview": "ای دیم دیست ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
+       "templatesusedsection": "ای بخش ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
        "template-protected": "(قُلپ بوته)",
        "template-semiprotected": "(نیمه‌ گ قُلپ بوته)",
        "hiddencategories": "ای تاکدیم بی {{PLURAL:$1|یک چیهرین تهر|$1 چیهرین تهر}} تا قرار داریت:",
+       "nocreate-loggedin": "شما نوکین دیم ئی جۆڑ کورتین ئی اجازه ئا نداریت.",
+       "sectioneditnotsupported-title": "بخش ئانی ایڈیٹ پشتیوانی ئه نه بیئنت",
        "sectioneditnotsupported-text": "ای تاکدیم شه بخشانی ایڈیٹ ئا پُشتوانی ئه نه کنت.",
        "permissionserrors": "دسترسی ئی خطا",
        "permissionserrorstext": "شما ای کارئ اجازه ئا په ای {{PLURAL:$1|دلیلا|دلیلان}} نداریت:",
        "postedit-confirmation-saved": "شمی ایڈ\tیٹ ذخیره بوت.",
        "edit-already-exists": "نوکین تاکدیمئ جوڑ کورتین امکان نه داریت.\nای تاکدیم شه دیما وجود داشتت.",
        "defaultmessagetext": "پیامی پیش فرضین متن",
+       "invalid-content-data": "ناموتبرین دیتایی کانتکت",
        "content-not-allowed-here": "«$1» ئی محتوا بئ [[$2]] ئی دیمی تا جایز نه اینت",
+       "editpage-notsupportedcontentformat-title": "پشتیوانی نه بوته ئین دیتا کانتکت ئی فورمت کورتین",
        "content-model-wikitext": "ویکی‌متن",
        "content-model-text": "ساده گین متن",
        "content-model-javascript": "جاوااسکریپت",
index 0b2bd34..daa129e 100644 (file)
        "thumbnail_gd-library": "অসম্পূর্ণ জিডি লাইব্রেরী কনফিগারেশন: $1 ফাংশন নেই",
        "thumbnail_image-missing": "ফাইলটি খুজে পাওয়া যাচ্ছে না: $1",
        "import": "পাতা আমদানি",
-       "importinterwiki": "à¦\86নà§\8dতà¦\83à¦\89à¦\87à¦\95ি à¦\86মদানি",
+       "importinterwiki": "à¦\85নà§\8dয à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 à¦\86মদানà§\80",
        "import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nসমস্ত আন্তঃউইকি আমদানিগুলি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
        "import-interwiki-sourcewiki": "উত্স উইকি:",
        "import-interwiki-sourcepage": "উৎস পাতা:",
index fd88aa5..c5d6c7a 100644 (file)
        "december": "desembre",
        "january-gen": "gener",
        "february-gen": "febrer",
-       "march-gen": "de març",
+       "march-gen": "març",
        "april-gen": "d'abril",
        "may-gen": "de maig",
        "june-gen": "de juny",
        "september-gen": "de setembre",
        "october-gen": "d'octubre",
        "november-gen": "de novembre",
-       "december-gen": "de desembre",
+       "december-gen": "desembre",
        "jan": "gen",
        "feb": "feb",
        "mar": "març",
        "currentevents-url": "Project:Actualitat",
        "disclaimers": "Avís general",
        "disclaimerpage": "Project:Avís general",
-       "edithelp": "Ajuda",
+       "edithelp": "Ajuda per a l'edició",
        "mainpage": "Pàgina principal",
        "mainpage-description": "Pàgina principal",
        "policy-url": "Project:Polítiques",
        "enhancedrc-history": "historial",
        "recentchanges": "Canvis recents",
        "recentchanges-legend": "Opcions de canvis recents",
-       "recentchanges-summary": "Seguiu els canvis recents del projecte {{SITENAME}} en aquesta pàgina.",
+       "recentchanges-summary": "Seguiu els canvis més recents del wiki en aquesta pàgina.",
        "recentchanges-noresult": "Cap canvi corresponent a aquests criteris en el període indicat.",
        "recentchanges-feed-description": "Segueix en aquest canal els canvis més recents del wiki.",
        "recentchanges-label-newpage": "Aquesta modificació creà una pàgina",
        "rc-enhanced-expand": "Mostra detalls",
        "rc-enhanced-hide": "Amagar detalls",
        "rc-old-title": "originàriament creada com «$1»",
-       "recentchangeslinked": "Seguiment d'enllaços",
+       "recentchangeslinked": "Canvis relacionats",
        "recentchangeslinked-feed": "Canvis relacionats",
        "recentchangeslinked-toolbox": "Canvis relacionats",
        "recentchangeslinked-title": "Canvis relacionats amb «$1»",
        "imagelinks": "Ús del fitxer",
        "linkstoimage": "{{PLURAL:$1|La pàgina següent enllaça|Les $1 pàgines següents enllacen}} a aquest fitxer:",
        "linkstoimage-more": "Hi ha més de $1 {{PLURAL:$1|pàgina que enllaça|pàgines que enllaçen}} a aquest fitxer.\nLa següent llista només mostra {{PLURAL:$1|la primera d'elles|les primeres $1 d'aquestes pàgines}}.\nPodeu consultar la [[Special:WhatLinksHere/$2|llista completa]].",
-       "nolinkstoimage": "No hi ha pàgines que enllacin aquesta imatge.",
+       "nolinkstoimage": "No hi ha pàgines que enllacin a aquesta imatge.",
        "morelinkstoimage": "Visualitza [[Special:WhatLinksHere/$1|més enllaços]] que porten al fitxer.",
        "linkstoimage-redirect": "$1 (fitxer redirigit) $2",
        "duplicatesoffile": "{{PLURAL:$1|Aquest fitxer és un duplicat del que apareix a continuació|A continuació s'indiquen els $1 duplicats d'aquest fitxer}} ([[Special:FileDuplicateSearch/$2|vegeu-ne més detalls]]):",
        "shared-repo-from": "des de $1",
        "shared-repo": "un repositori compartit",
        "shared-repo-name-wikimediacommons": "Wikimedia Commons",
-       "upload-disallowed-here": "No pot sobreescriure aquest fitxer.",
+       "upload-disallowed-here": "No podeu sobreescriure aquest fitxer.",
        "filerevert": "Reverteix $1",
        "filerevert-legend": "Reverteix el fitxer",
        "filerevert-intro": "Esteu revertint '''[[Media:$1|$1]]''' a la [$4 versió de  $3, $2].",
        "nolinkshere": "Cap pàgina no enllaça amb '''[[:$1]]'''.",
        "nolinkshere-ns": "No s'enllaça cap pàgina a '''[[:$1]]''' en l'espai de noms triat.",
        "isredirect": "pàgina redirigida",
-       "istemplate": "inclosa",
+       "istemplate": "inclusió",
        "isimage": "enllaç a fitxer",
        "whatlinkshere-prev": "{{PLURAL:$1|anterior|anteriors $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|següent|següents $1}}",
        "tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
        "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar-la",
        "tooltip-ca-addsection": "Comença una nova secció",
-       "tooltip-ca-viewsource": "Aquesta pàgina està protegida. Podeu veure el seu codi font.",
+       "tooltip-ca-viewsource": "Aquesta pàgina està protegida.\nPodeu veure'n el codi font.",
        "tooltip-ca-history": "Versions antigues d'aquesta pàgina",
        "tooltip-ca-protect": "Protegeix aquesta pàgina.",
        "tooltip-ca-unprotect": "Desprotegeix aquesta pàgina",
        "tooltip-n-randompage": "Pàgina a l'atzar",
        "tooltip-n-help": "El lloc per saber més coses",
        "tooltip-t-whatlinkshere": "Llista de totes les pàgines wiki que enllacen aquí",
-       "tooltip-t-recentchangeslinked": "Canvis recents a pàgines que enllacen amb aquesta pàgina.",
+       "tooltip-t-recentchangeslinked": "Canvis recents a pàgines enllaçades des d'aquesta pàgina",
        "tooltip-feed-rss": "Canal RSS d'aquesta pàgina",
        "tooltip-feed-atom": "Canal Atom d'aquesta pàgina",
-       "tooltip-t-contributions": "Vegeu la llista de contribucions d'aquest usuari.",
+       "tooltip-t-contributions": "Llista de contribucions d'aquest usuari",
        "tooltip-t-emailuser": "Envia un correu en aquest usuari.",
        "tooltip-t-info": "Més informació sobre aquesta pàgina",
        "tooltip-t-upload": "Carregueu fitxers",
        "tooltip-ca-nstab-help": "Vegeu la pàgina d'ajuda",
        "tooltip-ca-nstab-category": "Vegeu la pàgina de la categoria",
        "tooltip-minoredit": "Marca-ho com una modificació menor",
-       "tooltip-save": "Desa els vostres canvis",
+       "tooltip-save": "Deseu els canvis",
        "tooltip-preview": "Reviseu els vostres canvis, feu-ho abans de desar res!",
        "tooltip-diff": "Mostra quins canvis heu fet al text",
        "tooltip-compareselectedversions": "Vegeu les diferències entre les dues versions seleccionades d'aquesta pàgina.",
        "spam_reverting": "Es reverteix a la darrera versió que no conté enllaços a $1",
        "spam_blanking": "Totes les revisions contenien enllaços $1, s'està deixant en blanc",
        "spam_deleting": "S'estan suprimint totes les revisions que contenien enllaços a $1",
-       "simpleantispam-label": "Comprovació antispam.\n'''NO''' ho ompliu!",
+       "simpleantispam-label": "Comprovació antispam.\n<strong>NO</strong> ho ompliu!",
        "pageinfo-title": "Informació de «$1»",
        "pageinfo-not-current": "Només es pot visualitzar la informació de la revisió actual.",
        "pageinfo-header-basic": "Informació bàsica",
        "tags-create-invalid-chars": "Els noms d'etiqueta no han de contenir comes (<code>,</code>) o barres (<code>/</code>).",
        "tags-create-invalid-title-chars": "Els noms d'etiqueta no poden contenir caracters que no es poden usar en els títols de pàgina",
        "tags-create-already-exists": "L'etiqueta \"$1\" ja existeix.",
+       "tags-create-warnings-below": "Voleu continuar creant l'etiqueta?",
+       "tags-delete-title": "Elimina l'etiqueta",
+       "tags-delete-explanation-initial": "Esteu a punt d'eliminar l'etiqueta «$1» de la base de dades.",
        "tags-delete-reason": "Motiu:",
+       "tags-delete-not-found": "L'etiqueta «$1» no existeix.",
+       "tags-delete-too-many-uses": "L'etiqueta «$1» s'aplica a més {{PLURAL:$2|d'$2 revisió|de $2 revisions}} i, per tant, no pot eliminar-se.",
+       "tags-activate-title": "Activa l'etiqueta",
+       "tags-activate-question": "Esteu a punt d'activar l'etiqueta «$1».",
        "tags-activate-reason": "Motiu:",
+       "tags-activate-not-allowed": "No és possible activar l'etiqueta «$1».",
+       "tags-activate-not-found": "L'etiqueta «$1» no existeix.",
        "tags-activate-submit": "Activa",
+       "tags-deactivate-title": "Desactiva l'etiqueta",
        "tags-deactivate-reason": "Motiu:",
        "tags-deactivate-submit": "Desactiva",
        "comparepages": "Comparar pàgines",
        "htmlform-cloner-required": "Cal com a mínim un valor.",
        "sqlite-has-fts": "$1, amb suport de búsqueda de text íntegre",
        "sqlite-no-fts": "$1, sense supor de búsqueda de text íntegre",
-       "logentry-delete-delete": "$1 ha esborrat $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ha esborrat}} la pàgina $3",
        "logentry-delete-restore": "$1 ha restaurat $3",
        "logentry-delete-event": "$1 {{GENDER:$2|ha canviat}} la visibilitat {{PLURAL:$5|d'un esdeveniment al registre|de $5 esdeveniments al registre}} de $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|ha canviat}} la visibilitat {{PLURAL:$5|d'una revisió|de $5 revisions}} a la pàgina $3: $4",
        "logentry-upload-upload": "$1 {{GENDER:$2|ha carregat}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ha carregat}} una nova versió de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha carregat}} $3",
+       "log-name-managetags": "Registre de gestió d'etiquetes",
        "rightsnone": "(cap)",
        "revdelete-summary": "el resum d'edició",
        "feedback-bugornote": "Si podeu descriure un problema tècnic en detall, [$1 informeu-ne].\nAltrament, podeu fer servir un senzill formulari a continuació. El vostre comentari s'afegirà a la pàgina «[$3 $2]», juntament amb el vostre nom d'usuari i el navegador que esteu emprant.",
index 98abb5d..1b38eb0 100644 (file)
        "mimesearch-summary": "ХӀокху агӀоно йиш хуьлуьйту MIME-тайпан файлаш харжа. Яздеш долу формат: чулацаман тайп/бухара тайп, масала  <code>image/jpeg</code>.",
        "mimetype": "MIME-тайп:",
        "download": "чуяккха",
-       "unwatchedpages": "Цхьамо тергам ца беш йолу агӀонаш",
+       "unwatchedpages": "Цхьам терго цайо агӀонаш",
        "listredirects": "ДIасахьажоран могIам",
        "listduplicatedfiles": "Файлийн могӀам дубликатшца",
        "listduplicatedfiles-summary": "ХӀара файлийн могӀам бу, кхузахь тӀехьарчу файлан верси цхьайолу тӀехьарчу файлийн версийн дубликат лоруш ю. Локальни файлаш бен лоруш яц.",
        "actionfailed": "Кхочушъ дина дац",
        "deletedtext": "«$1» дӀаяьккхина яра.\nХьажа. $2 хьажарна оцу тӀаьхьара дӀаяхначара могӀаме.",
        "dellogpage": "ДӀадаьхнарш долу тéптар",
-       "dellogpagetext": "Лахахь гойтуш ду дӀадахаршан тептар.",
+       "dellogpagetext": "Лахахь гойтуш ю тӀаьххьара дӀаяьхнарш.",
        "deletionlog": "дӀадаьхнарш долу тéптар",
        "deletecomment": "Бахьна:",
        "deleteotherreason": "Кхин бахьна/тӀетохар:",
        "revdelete-uname-unhid": "декъашхочун цӀе гуча яьккхина",
        "revdelete-restricted": "куьйгалхойн доза туху",
        "revdelete-unrestricted": "куьйгалхойн доза тохар дӀаяьккхина",
+       "logentry-block-block": "$1 {{GENDER:$2|блоктоьхна}} {{GENDER:$4|$3}} $5 $6 хан чекхйолу",
+       "logentry-block-unblock": "$1 {{GENDER:$2|блокдаяьккхина}} {{GENDER:$4|$3}}",
+       "logentry-suppress-block": "$1 {{GENDER:$2|блоктоьхна}} {{GENDER:$4|$3}} $5 $6 хан чекхйолу",
        "logentry-merge-merge": "$1 {{GENDER:$2|вовшахтоьхна}} $3 $4 чохь ($5 кхаччалц версеш)",
        "logentry-move-move": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажийнарг цаюьтуш",
index 6d81102..56ba1ce 100644 (file)
        "readonly_lag": "Databáze byla automaticky dočasně uzamčena kvůli zpoždění ostatních databázových serverů oproti hlavnímu",
        "internalerror": "Vnitřní chyba",
        "internalerror_info": "Vnitřní chyba: $1",
+       "internalerror-fatal-exception": "Kritická výjimka typu „$1“",
        "filecopyerror": "Nebylo možné zkopírovat soubor  „$1“ na „$2“.",
        "filerenameerror": "Nebylo možné přejmenovat soubor „$1“ na „$2“.",
        "filedeleteerror": "Nebylo možné smazat soubor „$1“.",
        "unusedimages": "Nepoužívané soubory",
        "wantedcategories": "Chybějící kategorie",
        "wantedpages": "Chybějící stránky",
+       "wantedpages-summary": "Seznam neexistujících stránek, na které vede nejvíce odkazů, kromě stránek, na které odkazují jen přesměrování. Pro seznam neexistujících stránek, na které odkazují přesměrování, vizte stránku [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Výsledky obsahují neplatný název: $1",
        "wantedfiles": "Chybějící soubory",
        "wantedfiletext-cat": "Následující soubory se používají, ale neexistují. Soubory ze vzdálených úložišť zde mohou být uvedeny, přestože existují. Taková falešná pozitiva budou zobrazena <del>přeškrtnutě</del>. Stránky, které vkládají neexistující soubory, jsou navíc uvedeny v [[:$1]].",
        "thumbnail_image-missing": "Soubor patrně chybí: $1",
        "thumbnail_image-failure-limit": "V poslední době došlo k příliš mnoha neúspěšným pokusům (nejméně $1) o vytvoření tohoto náhledu. Zkuste to později.",
        "import": "Import stránek",
-       "importinterwiki": "Import mezi wiki",
-       "import-interwiki-text": "Pro import zvolte zdrojovou wiki a název stránky. Data revizí a jména autorů budou zachována. Všechny importy se zaznamenávají do [[Special:Log/import|knihy importů]].",
+       "importinterwiki": "Import z jiné wiki",
+       "import-interwiki-text": "Zvolte zdrojovou wiki a název stránky, která se má importovat.\nZachovají se data revizí a jména autorů.\nVšechny importy z jiných wiki se zaznamenávají do [[Special:Log/import|knihy importů]].",
        "import-interwiki-sourcewiki": "Zdrojová wiki:",
        "import-interwiki-sourcepage": "Zdrojová stránka:",
        "import-interwiki-history": "Zkopírovat všechny historické verze této stránky",
        "importcantopen": "Nepodařilo se otevřít importní soubor",
        "importbadinterwiki": "Neplatný interwiki odkaz",
        "importsuccess": "Import skončil!",
-       "importnosources": "Nebyly definovány žádné zdroje pro import mezi wiki a přímé načítání historie je vypnuto.",
+       "importnosources": "Nebyly definovány žádné wiki, ze kterých by šlo importovat, a přímé načítání historie je vypnuto.",
        "importnofile": "Nebyl načten importní soubor.",
        "importuploaderrorsize": "Nepodařilo se načíst importní soubor. Soubor je větší než povolená velikost.",
        "importuploaderrorpartial": "Nepodařilo se načíst importní soubor. Soubor byl načten jen částečně.",
        "revdelete-uname-unhid": "odkryto uživatelské jméno",
        "revdelete-restricted": "omezení správců použito",
        "revdelete-unrestricted": "omezení správců odstraněno",
+       "logentry-block-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživatele|uživatelku}} „$3“ s časem vypršení $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|odblokoval|odblokovala|odblokovává}} {{GENDER:$4|uživatele|uživatelku}} „$3“",
+       "logentry-block-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} nastavení bloku {{GENDER:$4|uživatele|uživatelky}} „$3“ s časem vypršení $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživatele|uživatelku}} „$3“ s časem vypršení $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} nastavení bloku {{GENDER:$4|uživatele|uživatelky}} „$3“ s časem vypršení $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|sloučil|sloučila}} stránku $3 do $4 (revize po $5)",
        "logentry-move-move": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 bez založení přesměrování",
index 7c50e91..40befca 100644 (file)
        "readonly_lag": "Die Datenbank wurde automatisch für Schreibzugriffe gesperrt, damit sich die verteilten Datenbankserver (slaves) mit dem Hauptdatenbankserver (master) abgleichen können.",
        "internalerror": "Interner Fehler",
        "internalerror_info": "Interner Fehler: $1",
+       "internalerror-fatal-exception": "Fataler Ausnahmefehler des Typs „$1“",
        "filecopyerror": "Die Datei „$1“ konnte nicht nach „$2“ kopiert werden.",
        "filerenameerror": "Die Datei „$1“ konnte nicht nach „$2“ umbenannt werden.",
        "filedeleteerror": "Die Datei „$1“ konnte nicht gelöscht werden.",
        "showpreview": "Vorschau zeigen",
        "showdiff": "Änderungen zeigen",
        "blankarticle": "<strong>Warnung:</strong> Die Seite, die du erstellst, ist leer.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Seite ohne Inhalt erstellt.",
-       "anoneditwarning": "<strong>Warnung:</strong> Du bist nicht angemeldet. Deine IP-Adresse wird öffentlich sichtbar, falls du Bearbeitungen durchführst. Wenn du dich <strong>[$1 anmeldest]</strong> oder <strong>[$2 ein Benutzerkonto erstellst]</strong>, werden deine Bearbeitungen zusammen mit anderen Beiträgen deinem Benutzernamen zugeordnet.",
+       "anoneditwarning": "<strong>Warnung:</strong> Du bist nicht angemeldet. Deine IP-Adresse wird öffentlich sichtbar, falls du Bearbeitungen durchführst. Sofern du dich <strong>[$1 anmeldest]</strong> oder <strong>[$2 ein Benutzerkonto erstellst]</strong>, werden deine Bearbeitungen zusammen mit anderen Beiträgen deinem Benutzernamen zugeordnet.",
        "anonpreviewwarning": "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
        "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
        "selfredirect": "<strong>Warnung:</strong> Du leitest auf diese Seite selbst weiter.\nDu hast vermutlich das falsche Weiterleitungsziel angegeben oder du bearbeitest die falsche Seite.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Weiterleitung dennoch erstellt.",
        "newarticletext": "Du bist einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, trage deinen Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [$1 Hilfeseite]).\nSofern du fälschlicherweise hier bist, klicke auf die Schaltfläche '''Zurück''' deines Browsers.",
        "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn du mit den Kommentaren auf dieser Seite nichts anfangen kannst, richten sie sich vermutlich an einen früheren Inhaber deiner IP-Adresse und du kannst sie ignorieren. Du kannst dir auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder dich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
        "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nDu kannst sie <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>,\nihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]\noder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.",
-       "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text, du bist auch nicht berechtigt diese Seite zu erstellen.\nDu kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
+       "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text und du bist auch nicht berechtigt diese Seite zu erstellen.\nDu kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
        "missing-revision": "Die Version $1 der Seite namens „{{FULLPAGENAME}}“ ist nicht vorhanden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] einsehbar.",
        "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
        "userpage-userdoesnotexist-view": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
        "templatesusedsection": "{{PLURAL:$1|Die folgende Vorlage wird|Folgende Vorlagen werden}} in diesem Abschnitt verwendet:",
        "template-protected": "(schreibgeschützt)",
        "template-semiprotected": "(schreibgeschützt für unangemeldete und neue Benutzer)",
-       "hiddencategories": "Diese Seite ist Mitglied von {{PLURAL:$1|1 versteckter Kategorie|$1 versteckten Kategorien}}:",
+       "hiddencategories": "Diese Seite ist in {{PLURAL:$1|1 versteckter Kategorie|$1 versteckten Kategorien}} enthalten:",
        "edittools": "<!-- Dieser Text wird unter dem „Bearbeiten“-Formular sowie dem „Hochladen“-Formular angezeigt. -->",
        "nocreatetext": "Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Du kannst bestehende Seiten ändern oder dich [[Special:UserLogin|anmelden]].",
        "nocreate-loggedin": "Du hast nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
        "right-bot": "Behandlung als automatischer Prozess",
        "right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner „Neue Nachrichten“-Anzeige",
        "right-apihighlimits": "Höhere Limits in API-Abfragen",
-       "right-writeapi": "Benutzung der writeAPI",
+       "right-writeapi": "Benutzung der API mit Schreibzugriff",
        "right-delete": "Seiten löschen",
        "right-bigdelete": "Seiten mit großer Versionsgeschichte löschen",
        "right-deletelogentry": "Einzelne Logbuch-Einträge löschen und wiederherstellen",
        "recentchangeslinked-feed": "Änderungen an verlinkten Seiten",
        "recentchangeslinked-toolbox": "Änderungen an verlinkten Seiten",
        "recentchangeslinked-title": "Änderungen an Seiten, die von „$1“ verlinkt sind",
-       "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie). Seiten auf deiner [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
+       "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. an in dieser Kategorie enthaltenen Kategorien). Seiten auf deiner [[Special:Watchlist|Beobachtungsliste]] sind <strong>fett</strong> dargestellt.",
        "recentchangeslinked-page": "Seite:",
-       "recentchangeslinked-to": "Zeige nur Änderungen auf Seiten, die auf diese Seite verlinken",
+       "recentchangeslinked-to": "Zeige nur Änderungen an Seiten, die auf diese Seite verlinken",
        "upload": "Datei hochladen",
        "uploadbtn": "Datei hochladen",
        "reuploaddesc": "Abbrechen und zurück zur Hochladen-Seite",
        "imagelinks": "Dateiverwendung",
        "linkstoimage": "Die {{PLURAL:$1|folgende Seite verwendet|folgenden $1 Seiten verwenden}} diese Datei:",
        "linkstoimage-more": "Mehr als {{PLURAL:$1|eine Seite verlinkt|$1 Seiten verlinken}} auf diese Datei.\nDie folgende Liste zeigt nur {{PLURAL:$1|den ersten Link|die ersten $1 Links}} auf diese Datei.\nEine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.",
-       "nolinkstoimage": "Keine Seite benutzt diese Datei.",
+       "nolinkstoimage": "Diese Datei wird auf keiner Seite verwendet.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Weitere Links]] auf diese Datei.",
        "linkstoimage-redirect": "$1 (Dateiweiterleitung) $2",
        "duplicatesoffile": "Die {{PLURAL:$1|folgende Datei ist ein Duplikat|folgenden $1 Dateien sind Duplikate}} dieser Datei ([[Special:FileDuplicateSearch/$2|weitere Details]]):",
        "unusedimages": "Verwaiste Dateien",
        "wantedcategories": "Gewünschte Kategorien",
        "wantedpages": "Gewünschte Seiten",
+       "wantedpages-summary": "Liste nicht vorhandener Seiten mit den meisten Links auf diese Seiten, ausschließlich solche, die nur Weiterleitungen haben. Für eine Liste nicht vorhandener Seiten mit Weiterleitungen, siehe [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ungültiger Titel im Ergebnis: $1",
        "wantedfiles": "Gewünschte Dateien",
        "wantedfiletext-cat": "Die folgenden Dateien werden verwendet, sind jedoch nicht vorhanden. Vorhandene Dateien aus fremden Repositorien können dennoch hier aufgelistet sein und werden <del>durchgestrichen</del> dargestellt. Zusätzlich werden Seiten, die nicht vorhandene Dateien enthalten, in die [[:$1]] eingeordnet.",
        "whatlinkshere": "Links auf diese Seite",
        "whatlinkshere-title": "Seiten, die auf „$1“ verlinken",
        "whatlinkshere-page": "Seite:",
-       "linkshere": "Die folgenden Seiten verlinken auf '''„[[:$1]]“''':",
+       "linkshere": "Die folgenden Seiten verlinken auf <strong>[[:$1]]</strong>:",
        "nolinkshere": "Keine Seite verlinkt auf '''„[[:$1]]“'''.",
        "nolinkshere-ns": "Keine Seite verlinkt auf '''„[[:$1]]“''' im gewählten Namensraum.",
        "isredirect": "Weiterleitungsseite",
        "blockipsuccesstext": "Der Benutzer / die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />\nZur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperren]].",
        "ipb-blockingself": "Du bist gerade dabei, dich selbst zu sperren! Möchtest du das wirklich tun?",
        "ipb-confirmhideuser": "Du bist gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?",
-       "ipb-confirmaction": "Wenn du dir sicher bist, dass du dies wirklich tun möchtest, überprüfe bitte unten das Feld „{{int:ipb-confirm}}“.",
+       "ipb-confirmaction": "Wenn du dir sicher bist, dass du dies wirklich tun möchtest, kreuze bitte unten das Feld „{{int:ipb-confirm}}“ an.",
        "ipb-edit-dropdown": "Sperrgründe bearbeiten",
        "ipb-unblock-addr": "„$1“ freigeben",
        "ipb-unblock": "IP-Adresse/Benutzer freigeben",
        "thumbnail_image-missing": "Datei scheint fehlend zu sein: $1",
        "thumbnail_image-failure-limit": "Es wurden in letzter Zeit zu viele Versuche ($1 oder mehr) unternommen, dieses Vorschaubild zu rendern. Bitte versuche es später erneut.",
        "import": "Seiten importieren",
-       "importinterwiki": "Transwiki-Import",
-       "import-interwiki-text": "Wähle ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
+       "importinterwiki": "Von einem anderen Wiki importieren",
+       "import-interwiki-text": "Wähle ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Importe von anderen Wikis werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
        "import-interwiki-sourcewiki": "Quellwiki:",
        "import-interwiki-sourcepage": "Quellseite:",
        "import-interwiki-history": "Alle Versionen dieser Seite importieren",
        "importcantopen": "Importdatei konnte nicht geöffnet werden",
        "importbadinterwiki": "Falscher Interwiki-Link",
        "importsuccess": "Import abgeschlossen.",
-       "importnosources": "Für den Transwiki-Import sind keine Quellen definiert. Das direkte Hochladen von Versionen ist gesperrt.",
+       "importnosources": "Es wurden keine Wikis angegeben, von denen importiert werden soll. Das direkte Hochladen von Versionsgeschichten ist deaktiviert.",
        "importnofile": "Es ist keine Importdatei ausgewählt worden.",
        "importuploaderrorsize": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist größer als die maximal erlaubte Dateigröße.",
        "importuploaderrorpartial": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei wurde nur teilweise hochgeladen.",
        "tooltip-pt-preferences": "Eigene Einstellungen",
        "tooltip-pt-watchlist": "Liste der beobachteten Seiten",
        "tooltip-pt-mycontris": "Liste eigener Beiträge",
-       "tooltip-pt-login": "Sich anzumelden wird zwar gerne gesehen, ist aber keine Pflicht.",
+       "tooltip-pt-login": "Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich.",
        "tooltip-pt-logout": "Abmelden",
-       "tooltip-pt-createaccount": "Du wirst ermuntert, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht verpflichtend.",
+       "tooltip-pt-createaccount": "Wir ermutigen dich ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich.",
        "tooltip-ca-talk": "Diskussion zum Seiteninhalt",
-       "tooltip-ca-edit": "Seite bearbeiten. Bitte vor dem Speichern die Vorschaufunktion benutzen.",
+       "tooltip-ca-edit": "Du kannst diese Seite bearbeiten. Bitte nutze auch die Vorschaufunktion vor dem Speichern.",
        "tooltip-ca-addsection": "Neuen Abschnitt beginnen",
        "tooltip-ca-viewsource": "Diese Seite ist geschützt. Ihr Quelltext kann dennoch angesehen und kopiert werden.",
        "tooltip-ca-history": "Frühere Versionen dieser Seite",
        "tooltip-n-mainpage-description": "Hauptseite besuchen",
        "tooltip-n-portal": "Über das Projekt, was du tun kannst, wo was zu finden ist",
        "tooltip-n-currentevents": "Hintergrundinformationen zu aktuellen Ereignissen",
-       "tooltip-n-recentchanges": "Liste der letzten Änderungen in {{SITENAME}}",
+       "tooltip-n-recentchanges": "Liste der letzten Änderungen in diesem Wiki",
        "tooltip-n-randompage": "Zufällige Seite aufrufen",
        "tooltip-n-help": "Hilfeseite anzeigen",
        "tooltip-t-whatlinkshere": "Liste aller Seiten, die hierher verlinken",
        "tooltip-t-recentchangeslinked": "Letzte Änderungen an Seiten, die von hier verlinkt sind",
        "tooltip-feed-rss": "RSS-Feed dieser Seite",
        "tooltip-feed-atom": "Atom-Feed dieser Seite",
-       "tooltip-t-contributions": "Liste der Beiträge von diesem Benutzer ansehen",
+       "tooltip-t-contributions": "Liste der Beiträge dieses Benutzers ansehen",
        "tooltip-t-emailuser": "Eine E-Mail an diesen Benutzer senden",
        "tooltip-t-info": "Weitere Informationen über diese Seite",
        "tooltip-t-upload": "Dateien hochladen",
        "spam_reverting": "Letzte Version ohne Links zu $1 wiederhergestellt.",
        "spam_blanking": "Alle Versionen mit einem Link zu $1 wurden bereinigt.",
        "spam_deleting": "Alle Versionen mit einem Link zu $1 wurden gelöscht.",
-       "simpleantispam-label": "Spamschutzprüfung.\nHier '''NICHTS''' eintragen!",
+       "simpleantispam-label": "Spamschutzprüfung.\nHier <strong>NICHTS</strong> eintragen!",
        "pageinfo-title": "Informationen zu „$1“",
        "pageinfo-not-current": "Diese Information kann leider nicht für alte Versionen zur Verfügung gestellt werden.",
        "pageinfo-header-basic": "Basisinformationen",
        "pageinfo-hidden-categories": "Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)",
        "pageinfo-templates": "Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)",
        "pageinfo-transclusions": "Eingebunden in {{PLURAL:$1|1 Seite|$1 Seiten}}",
-       "pageinfo-toolboxlink": "Seiteninformationen",
+       "pageinfo-toolboxlink": "Informationen zur Seite",
        "pageinfo-redirectsto": "Weiterleitungen nach",
        "pageinfo-redirectsto-info": "Information",
        "pageinfo-contentpage": "Gezählt als eine Inhaltsseite",
        "file-info": "Dateigröße: $1, MIME-Typ: $2",
        "file-info-size": "$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4",
        "file-info-size-pages": "$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}",
-       "file-nohires": "Keine höhere Auflösung vorhanden.",
+       "file-nohires": "Es ist keine höhere Auflösung vorhanden.",
        "svg-long-desc": "SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3",
        "svg-long-desc-animated": "Animierte SVG-Datei, Basisgröße $1 × $2 Pixel, Dateigröße: $3",
        "svg-long-error": "Ungültige SVG-Datei: $1",
        "revdelete-uname-unhid": "Benutzername freigegeben",
        "revdelete-restricted": "Einschränkungen gelten auch für Administratoren",
        "revdelete-unrestricted": "Einschränkungen für Administratoren aufgehoben",
+       "logentry-block-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|hat}} die Sperre von {{GENDER:$4|$3}} aufgehoben",
+       "logentry-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|vereinigte}} $3 in die Seite „$4“ (Versionen bis zum $5)",
        "logentry-move-move": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen",
        "log-name-pagelang": "Sprachenänderungs-Logbuch",
        "log-description-pagelang": "Dies ist ein Logbuch mit Änderungen an Seitensprachen.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|änderte}} die Seitensprache für $3 von $4 nach $5.",
-       "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDie folgende(n) Benutzeroberfläche(n) scheinen vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neuere Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
+       "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDie folgende(n) Benutzeroberfläche(n) scheinen vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neueren Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
        "default-skin-not-found-no-skins": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDu hast keine Benutzeroberfläche installiert.\n\n; Sofern du MediaWiki gerade installiert oder aktualisiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten, da MediaWiki 1.24 und neuere Versionen keine Benutzeroberflächen im Hauptrepositorium enthalten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n: Siehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
index 56936bb..f249013 100644 (file)
        "uploaderror": "Σφάλμα στο ανέβασμα αρχείου",
        "upload-recreate-warning": "'''Προειδοποίηση: Ένα αρχείο με αυτό το όνομα έχει διαγραφεί ή μετακινηθεί.'''\n\nΤο αρχείο διαγραφών και μετακινήσεων για αυτή τη σελίδα παρέχεται εδώ για διευκόλυνση:",
        "uploadtext": "Μπορείτε να χρησιμοποιήσετε την παρακάτω φόρμα για να επιφορτώσετε αρχεία. Για να δείτε ήδη επιφορτωμένα αρχεία, πηγαίνετε στη [[Special:FileList|λίστα επιφορτωμένων αρχείων]] ή στο [[Special:Log/upload|ιστορικό επιφορτώσεων]]. Οι διαγραφές έχουν καταγραφεί στη σελίδα [[Special:Log/delete|αρχείο διαγραφών]].\n\nΓια να συμπεριληφθεί μια εικόνα σε μια σελίδα, χρησιμοποιήστε συνδέσμους της μορφής:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' (χρήση της πλήρους εκδοχής του αρχείου)\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' (χρήση μίας εκδοχής 200 pixel σε πλάτος σε ένα κουτάκι στο αριστερό περιθώριο με περιγραφή 'alt text')\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' (άμεση σύνδεση με το αρχείο χωρίς εμφάνιση του ίδιου του αρχείου)",
-       "upload-permitted": "Επιτρεπτοί τύποι αρχείων: $1.",
-       "upload-preferred": "Τύποι αρχείων που προτιμούνται: $1.",
-       "upload-prohibited": "Απαγορευμένοι τύποι αρχείου: $1.",
+       "upload-permitted": "{{PLURAL:$2|Επιτρεπτός τύπος αρχείων|Επιτρεπτοί τύποι αρχείων}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Τύπος αρχείων που προτιμάται|Τύποι αρχείων που προτιμούνται}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Απαγορευμένος τύπος αρχείων|Απαγορευμένοι τύποι αρχείων}}: $1.",
        "uploadlogpage": "Αρχείο καταγραφών ανεβάσματος αρχείων",
        "uploadlogpagetext": "Παρακάτω είναι ο κατάλογος με τις πιο πρόσφατες αποθηκεύσεις αρχείων. Επισκεφθείτε τον [[Special:NewFiles|πίνακα νέων αρχείων]] για μία πιο οπτική επισκόπηση.",
        "filename": "Όνομα αρχείου",
        "deleteprotected": "Δεν μπορείτε να διαγράψετε αυτή τη σελίδα επειδή είναι προστατευόμενη.",
        "deleting-backlinks-warning": "\"'Προσοχή:\"' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Άλλες σελίδες]] συνδέουν ή ενσωματώνουν τη σελίδα που πρόκειται να διαγράψετε.",
        "rollback": "Επαναφορά επεξεργασιών",
-       "rollback_short": "Επαναφορά",
        "rollbacklink": "αναστροφή",
        "rollbacklinkcount": "Επαναφορά $1 {{PLURAL:$1|επεξεργασίας|επεξεργασιών}}",
        "rollbacklinkcount-morethan": "επαναφορά περισσότερων από $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}",
        "thumbnail_gd-library": "Ατελής ενεργοποίηση της βιβλιοθήκης GD: αγνοούμενη λειτουργία $1",
        "thumbnail_image-missing": "Το αρχείο φαίνεται να λείπει: $1",
        "import": "Εισαγωγή σελίδων",
-       "importinterwiki": "Εισαγωγή από άλλο Wiki",
-       "import-interwiki-text": "Î\95Ï\80ιλέξÏ\84ε Î­Î½Î± wiki ÎºÎ±Î¹ Ï\84ίÏ\84λο Ï\83ελίδαÏ\82 Î³Î¹Î± Ï\84ην ÎµÎ¹Ï\83αγÏ\89γή.\nÎ\9fι Î·Î¼ÎµÏ\81ομηνίεÏ\82 Ï\84Ï\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν ÎºÎ±Î¹ Ï\84α Î¿Î½Ï\8cμαÏ\84α Ï\84Ï\89ν Ï\83Ï\85νÏ\84ακÏ\84Ï\8eν Î¸Î± Î´Î¹Î±Ï\84ηÏ\81ηθοÏ\8dν.\nÎ\8cλεÏ\82 Î¿Î¹ ÎµÎ½Î­Ï\81γειεÏ\82 ÎµÎ¹Ï\83αγÏ\89γήÏ\82 Î¼ÎµÏ\84αξÏ\8d wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
+       "importinterwiki": "Εισαγωγή από άλλο wiki",
+       "import-interwiki-text": "Î\95Ï\80ιλέξÏ\84ε Î­Î½Î± wiki ÎºÎ±Î¹ Ï\84ίÏ\84λο Ï\83ελίδαÏ\82 Î³Î¹Î± Ï\84ην ÎµÎ¹Ï\83αγÏ\89γή.\nÎ\9fι Î·Î¼ÎµÏ\81ομηνίεÏ\82 Ï\84Ï\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν ÎºÎ±Î¹ Ï\84α Î¿Î½Ï\8cμαÏ\84α Ï\84Ï\89ν Ï\83Ï\85νÏ\84ακÏ\84Ï\8eν Î¸Î± Î´Î¹Î±Ï\84ηÏ\81ηθοÏ\8dν.\nÎ\8cλεÏ\82 Î¿Î¹ ÎµÎ½Î­Ï\81γειεÏ\82 ÎµÎ¹Ï\83αγÏ\89γήÏ\82 Î±Ï\80Ï\8c Î¬Î»Î»Î± wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
        "import-interwiki-sourcewiki": "Πηγαίο wiki:",
        "import-interwiki-sourcepage": "Πηγαία σελίδα:",
        "import-interwiki-history": "Αντιγραφή όλων των εκδόσεων του ιστορικού για αυτή τη σελίδα",
        "importcantopen": "Το αρχείο εισαγωγής δεν ήταν δυνατόν να ανοιχθεί",
        "importbadinterwiki": "Εσφαλμένος διαγλωσσικός σύνδεσμος",
        "importsuccess": "Η εισαγωγή πέτυχε!",
-       "importnosources": "Δεν έχουν καθοριστεί πηγές για την εισαγωγή από άλλο Wiki και η απευθείας φόρτωση στο ιστορικό έχει απενεργοποιηθεί.",
+       "importnosources": "Δεν έχουν καθοριστεί wiki από τα οποία μπορεί να γίνει εισαγωγή και η απευθείας φόρτωση στο ιστορικό έχει απενεργοποιηθεί.",
        "importnofile": "Δεν επιφορτώθηκε κανένα αρχείο εισαγωγής.",
        "importuploaderrorsize": "Το ανέβασμα του αρχείου εισαγωγής απέτυχε. Το μέγεθος του αρχείου ξεπερνά το επιτρεπόμενο όριο.",
        "importuploaderrorpartial": "Το ανέβασμα του αρχείου εισαγωγής απέτυχε. Το αρχείο ανέβηκε μόνο εν μέρει.",
        "tooltip-pt-mycontris": "Κατάλογος των συνεισφορών σας",
        "tooltip-pt-login": "Σας ενθαρρύνουμε να συνδεθείτε&middot; ωστόσο δεν είναι υποχρεωτικό",
        "tooltip-pt-logout": "Έξοδος",
+       "tooltip-pt-createaccount": "Σας ενθαρρύνουμε να δημιουργήσετε ένα λογαριασμό και να συνδεθείτε· ωστόσο, δεν είναι υποχρεωτικό",
        "tooltip-ca-talk": "Συζήτηση για τη σελίδα περιεχομένου",
        "tooltip-ca-edit": "Μπορείτε να επεξεργαστείτε αυτή τη σελίδα. Παρακαλούμε χρησιμοποιήστε το κουμπί προεπισκόπησης πριν την αποθήκευση.",
        "tooltip-ca-addsection": "Ξεκίνημα νέας ενότητας",
        "compare-revision-not-exists": "Η αναθεώρηση που καθορίσατε δεν υπάρχει.",
        "dberr-problems": "Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.",
        "dberr-again": "Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.",
-       "dberr-info": "(Î\94εν Î¼Ï\80οÏ\81εί Î½Î± ÎµÏ\80ικοινÏ\89νήÏ\83ει Î¼Îµ Ï\84ον ÎµÎ¾Ï\85Ï\80ηÏ\81εÏ\84ηÏ\84ή Ï\84ηÏ\82 Î²Î¬Ï\83ηÏ\82 δεδομένων: $1)",
-       "dberr-info-hidden": "(Δεν είναι δυνατή η επικοινωνία με τον εξυπηρετητή της βάσης δεδομένων)",
+       "dberr-info": "(Î\94εν ÎµÎ¯Î½Î±Î¹ Î´Ï\85ναÏ\84ή Î· Ï\80Ï\81Ï\8cÏ\83βαÏ\83η Ï\83Ï\84η Î²Î¬Ï\83η δεδομένων: $1)",
+       "dberr-info-hidden": "(Δεν είναι δυνατή η πρόσβαση στη βάση δεδομένων)",
        "dberr-usegoogle": "Μπορείτε να δοκιμάσετε να ψάξετε στο Google εν τω μεταξύ.",
        "dberr-outofdate": "Σημειώστε ότι οι ενδείξεις τους περί του περιεχομένου μας ενδέχεται να μην είναι ενημερωμένες.",
        "dberr-cachederror": "Το ακόλουθο είναι ένα αντίγραφο από την μνήμη της σελίδας που ζητήσατε και ενδέχεται να μην είναι ενημερωμένο.",
index 7bc5a9d..31c766f 100644 (file)
        "readonly_lag": "The database has been automatically locked while the slave database servers catch up to the master",
        "internalerror": "Internal error",
        "internalerror_info": "Internal error: $1",
+       "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
        "filecopyerror": "Could not copy file \"$1\" to \"$2\".",
        "filerenameerror": "Could not rename file \"$1\" to \"$2\".",
        "filedeleteerror": "Could not delete file \"$1\".",
        "wantedcategories": "Wanted categories",
        "wantedcategories-summary": "",
        "wantedpages": "Wanted pages",
-       "wantedpages-summary": "",
+       "wantedpages-summary": "List of non-existing pages with the most links to them, excluding pages which only have redirects linking to them. For a list of non-existent pages that have redirects linking to them, see [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Invalid title in result set: $1",
        "wantedfiles": "Wanted files",
        "wantedfiles-summary": "",
        "thumbnail_image-failure-limit": "There have been too many recent failed attempts ($1 or more) to render this thumbnail. Please try again later.",
        "import": "Import pages",
        "import-summary": "",
-       "importinterwiki": "Transwiki import",
-       "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll transwiki import actions are logged at the [[Special:Log/import|import log]].",
+       "importinterwiki": "Import from another wiki",
+       "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll imports from other wikis are logged at the [[Special:Log/import|import log]].",
        "import-interwiki-sourcewiki": "Source wiki:",
        "import-interwiki-sourcepage": "Source page:",
        "import-interwiki-history": "Copy all history revisions for this page",
        "importcantopen": "Could not open import file",
        "importbadinterwiki": "Bad interwiki link",
        "importsuccess": "Import finished!",
-       "importnosources": "No transwiki import sources have been defined and direct history uploads are disabled.",
+       "importnosources": "No wikis from which to import have been defined and direct history uploads are disabled.",
        "importnofile": "No import file was uploaded.",
        "importuploaderrorsize": "Upload of import file failed.\nThe file is bigger than the allowed upload size.",
        "importuploaderrorpartial": "Upload of import file failed.\nThe file was only partially uploaded.",
        "revdelete-uname-unhid": "username unhidden",
        "revdelete-restricted": "applied restrictions to administrators",
        "revdelete-unrestricted": "removed restrictions for administrators",
+       "logentry-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|unblocked}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an 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",
        "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect",
index 12db5d6..6969629 100644 (file)
        "category-empty": "<em>Esta categoría no contiene ninguna página o archivo.</em>",
        "hidden-categories": "{{PLURAL:$1|Categoría oculta|Categorías ocultas}}",
        "hidden-category-category": "Categorías ocultas",
-       "category-subcat-count": "{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|{{PLURAL:$1|La siguiente subcategoría pertenece|Las siguientes $1 subcategorías pertenecen}} a esta categoría, de un total de $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}",
        "category-subcat-count-limited": "Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}.",
        "category-article-count": "{{PLURAL:$2|Esta categoría incluye solamente la siguiente página.|{{PLURAL:$1|La siguiente página pertenece|Las siguientes $1 páginas pertenecen}} a esta categoría, de un total de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|La siguiente página pertenece|Las siguientes $1 páginas pertenecen}} a esta categoría.",
        "readonly_lag": "La base de datos se ha bloqueado automáticamente mientras sus servidores esclavos se sincronizan con el maestro.",
        "internalerror": "Error interno",
        "internalerror_info": "Error interno: $1",
+       "internalerror-fatal-exception": "Excepción grave de tipo \"$1\"",
        "filecopyerror": "No se ha podido copiar el archivo «$1» a «$2».",
        "filerenameerror": "No se ha podido renombrar el archivo «$1» a «$2».",
        "filedeleteerror": "No se ha podido borrar el archivo «$1».",
        "newarticle": "(Nuevo)",
        "newarticletext": "Has seguido un enlace a una página que aún no existe.\nPara crear esta página, escribe en el cuadro que aparece a continuación. Para más información, consulta la [$1 página de ayuda].\nSi llegaste aquí por error, vuelve a la página anterior.",
        "anontalkpagetext": "---- ''Esta es la página de discusión de un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su dirección IP para identificarlo. Puede que varios usuarios compartan una misma dirección IP. Si eres un usuario anónimo y crees que se han dirigido a ti con comentarios improcedentes, por favor [[Special:UserLogin/signup|crea una cuenta]] o, si ya la tienes, [[Special:UserLogin|identifícate]] para evitar confusiones futuras con otros usuarios anónimos.''",
-       "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
+       "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
        "noarticletext-nopermission": "Actualmente no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>, pero no tienes permiso para crear esta página.",
        "missing-revision": "La revisión n.º $1 de la página «{{FULLPAGENAME}}» no existe.\n\nEsto suele ocurrir cuando se sigue un enlace de historial obsoleto que apunta a una página ya borrada.\nPuedes encontrar detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
        "userpage-userdoesnotexist": "El usuario «$1» no está registrado. Por favor, asegúrate de que realmente quieres crear o editar esta página.",
        "diff": "dif",
        "hist": "hist",
        "hide": "Ocultar",
-       "show": "mostrar",
+       "show": "Mostrar",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
        "ignorewarning": "Ignorar aviso y guardar de todos modos",
        "ignorewarnings": "Ignorar todos los avisos",
        "minlength1": "Los nombres de archivo deben tener al menos una letra.",
-       "illegalfilename": "El nombre de archivo «$1» contiene caracteres que no están permitidos en títulos de página. Por favor, renombra el archivo e intenta subirlo de nuevo.",
+       "illegalfilename": "El nombre de archivo «$1» contiene caracteres que no están permitidos en títulos de página. Cambia el nombre del archivo e intenta subirlo de nuevo.",
        "filename-toolong": "Los nombres de archivo no pueden tener más de 240 bytes.",
        "badfilename": "Se ha cambiado el nombre del archivo a «$1».",
        "filetype-mime-mismatch": "La extensión de archivo «.$1» no coincide con el tipo MIME detectado en el archivo ($2).",
        "filehist-deleteall": "borrar todo",
        "filehist-deleteone": "borrar",
        "filehist-revert": "revertir",
-       "filehist-current": "act",
+       "filehist-current": "actual",
        "filehist-datetime": "Fecha y hora",
        "filehist-thumb": "Miniatura",
-       "filehist-thumbtext": "Miniatura de la versión de $1",
+       "filehist-thumbtext": "Miniatura de la versión del $1",
        "filehist-nothumb": "Sin miniatura",
        "filehist-user": "Usuario",
        "filehist-dimensions": "Dimensiones",
        "duplicatesoffile": "{{PLURAL:$1|El siguiente archivo es un duplicado|Los siguientes $1 archivos son duplicados}} de éste ([[Special:FileDuplicateSearch/$2|más detalles]]):",
        "sharedupload": "Este archivo es de $1 y puede ser usado por otros proyectos.",
        "sharedupload-desc-there": "Este archivo es de $1 y puede ser usado por otros proyectos.\nPor favor mira la [$2 página de descripción del archivo] para información adicional.",
-       "sharedupload-desc-here": "Este archivo es de $1 y puede ser usado por otros proyectos.\nLa descripción en su [$2 página de descripción del archivo] está mostrada debajo.",
+       "sharedupload-desc-here": "Este archivo es de $1 y puede usarse en otros proyectos.\nLa descripción en su [$2 página de descripción del archivo] se muestra debajo.",
        "sharedupload-desc-edit": "Este archivo es de $1 y puede ser utilizado por otros proyectos.\nTal vez desee editar la descripción de su [$2  página de descripción del archivo] allí.",
        "sharedupload-desc-create": "Este archivo es de $1 y puede ser utilizado por otros proyectos.\nTal vez desee editar la descripción de su [$2 página de descripción del archivo] allí.",
        "filepage-nofile": "No existe ningún archivo con este nombre.",
        "prevpage": "Página anterior ($1)",
        "allpagesfrom": "Mostrar páginas que empiecen por:",
        "allpagesto": "Mostrar páginas terminadas con:",
-       "allarticles": "Todos los artículos",
+       "allarticles": "Todas las páginas",
        "allinnamespace": "Todas las páginas (espacio de nombres $1)",
        "allpagessubmit": "Mostrar",
        "allpagesprefix": "Mostrar páginas con el prefijo:",
        "viewdeletedpage": "Ver páginas borradas",
        "undeletepagetext": "{{PLURAL:$1|La siguiente página ha sido borrada pero aún está en el archivo y puede ser restaurada.|Las siguientes $1 páginas han sido borradas pero aún están en el archivo y pueden ser restauradas.}}\nPuede que el archivo se limpie periódicamente.",
        "undelete-fieldset-title": "Restaurar revisiones",
-       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa '''''{{int:undeletebtn}}'''''. Para realizar una restauración selectiva, marca las revisiones a ser restauradas y pulsa '''''{{int:undeletebtn}}'''''.",
+       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>. Para realizar una restauración selectiva, marca las revisiones que deban restaurarse y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "$1 {{PLURAL:$1|revisión|revisiones}} archivadas",
        "undeletehistory": "Si restauras una página, todas sus revisiones serán restauradas al historial.\nSi una nueva página con el mismo nombre ha sido creada desde que se borró la original, las versiones restauradas aparecerán como historial anterior, y la revisión actual de la página actual no se reemplazará automáticamente.",
        "undeleterevdel": "No se deshará el borrado si éste resulta en el borrado parcial de la última revisión de la página. En tal caso, desmarque o muestre las revisiones borradas más recientes. Las revisiones de archivos que no tiene permitido ver no se restaurarán.",
        "whatlinkshere": "Lo que enlaza aquí",
        "whatlinkshere-title": "Páginas que enlazan con «$1»",
        "whatlinkshere-page": "Página:",
-       "linkshere": "Las siguientes páginas enlazan a '''[[:$1]]''':",
+       "linkshere": "Las siguientes páginas enlazan a <strong>[[:$1]]</strong>:",
        "nolinkshere": "Ninguna página enlaza con '''[[:$1]]'''.",
        "nolinkshere-ns": "Ninguna página enlaza con '''[[:$1]]''' en el espacio de nombres elegido.",
        "isredirect": "página redirigida",
        "istemplate": "inclusión",
-       "isimage": "Enlace de imagen",
+       "isimage": "enlace de archivo",
        "whatlinkshere-prev": "{{PLURAL:$1|previa|previas $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|siguiente|siguientes $1}}",
        "whatlinkshere-links": "← enlaces",
        "thumbnail_image-missing": "El fichero parece no existir: $1",
        "thumbnail_image-failure-limit": "Ha habido muchos intentos recientes ($1 o más) para representar esta miniatura. Inténtalo de nuevo más tarde.",
        "import": "Importar páginas",
-       "importinterwiki": "Importación transwiki",
+       "importinterwiki": "Importar desde otro wiki",
        "import-interwiki-text": "Selecciona un wiki y un título de página para importar.\nLas fechas de revisiones y los nombres de editores se preservarán.\nTodas las importaciones transwiki se registran en el [[Special:Log/import|registro de importaciones]].",
        "import-interwiki-sourcewiki": "Wiki de origen:",
        "import-interwiki-sourcepage": "Página de origen:",
        "tooltip-ca-watch": "Añadir esta página a tu lista de seguimiento",
        "tooltip-ca-unwatch": "Borrar esta página de su lista de seguimiento",
        "tooltip-search": "Buscar en {{SITENAME}}",
-       "tooltip-search-go": "Ir al artículo con este nombre exacto si existe",
+       "tooltip-search-go": "Ir a la página con este nombre exacto si existe",
        "tooltip-search-fulltext": "Buscar este texto en las páginas",
        "tooltip-p-logo": "Visitar la página principal",
        "tooltip-n-mainpage": "Visitar la página principal",
        "tooltip-t-specialpages": "Lista de todas las páginas especiales",
        "tooltip-t-print": "Versión imprimible de esta página",
        "tooltip-t-permalink": "Enlace permanente a esta versión de la página",
-       "tooltip-ca-nstab-main": "Ver el artículo",
-       "tooltip-ca-nstab-user": "Ver la página de usuario",
+       "tooltip-ca-nstab-main": "Ver la página de contenido",
+       "tooltip-ca-nstab-user": "Ver la página del usuario",
        "tooltip-ca-nstab-media": "Ver la página de multimedia",
        "tooltip-ca-nstab-special": "Esta es una página especial, no se puede editar la página en sí",
-       "tooltip-ca-nstab-project": "Ver la página de proyecto",
+       "tooltip-ca-nstab-project": "Ver la página del proyecto",
        "tooltip-ca-nstab-image": "Ver la página del archivo",
        "tooltip-ca-nstab-mediawiki": "Ver el mensaje de sistema",
        "tooltip-ca-nstab-template": "Ver la plantilla",
        "tooltip-ca-nstab-category": "Ver la página de categoría",
        "tooltip-minoredit": "Marcar este cambio como menor",
        "tooltip-save": "Guardar los cambios",
-       "tooltip-preview": "Previsualiza los cambios realizados. ¡Por favor, hazlo antes de grabar!",
-       "tooltip-diff": "Muestra los cambios que ha introducido en el texto.",
+       "tooltip-preview": "Previsualiza tus cambios. ¡Hazlo antes de grabar!",
+       "tooltip-diff": "Mostrar los cambios que has hecho en el texto.",
        "tooltip-compareselectedversions": "Ver las diferencias entre las dos versiones seleccionadas de esta página.",
        "tooltip-watch": "Añadir esta página a tu lista de seguimiento",
        "tooltip-watchlistedit-normal-submit": "Borrar páginas",
        "tooltip-watchlistedit-raw-submit": "Actualizar lista de seguimiento",
        "tooltip-recreate": "Recupera una página que ha sido borrada",
        "tooltip-upload": "Empieza la subida",
-       "tooltip-rollback": "«Revertir» revierte todas las ediciones del último usuario con un solo clic.",
+       "tooltip-rollback": "«Revertir» revierte todas las ediciones del último usuario a esta página con un solo clic.",
        "tooltip-undo": "«Deshacer» revierte la edición seleccionada y abre la página de edición en el modo de previsualización.\nPermite añadir una razón al resumen de edición.",
        "tooltip-preferences-save": "Guardar las preferencias",
-       "tooltip-summary": "Introduce un breve resumen",
+       "tooltip-summary": "Escribe un breve resumen",
        "interlanguage-link-title": "$1 ($2)",
        "common.css": "/* El CSS colocado en esta página será aplicado a todas las apariencias */",
        "print.css": "/* Los estilos CSS colocados aquí afectarán la impresión */",
        "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
        "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
        "spam_deleting": "Todas las revisiones que contienen enlaces a $1, en proceso de eliminación",
-       "simpleantispam-label": "Comprobación anti-spam\n¡NO rellenes esto!",
+       "simpleantispam-label": "Comprobación anti-spam.\n¡<strong>NO</strong> rellenes esto!",
        "pageinfo-title": "Información de «$1»",
        "pageinfo-not-current": "Lo sentimos, no es posible mostrar esta información para las revisiones antiguas.",
        "pageinfo-header-basic": "Información básica",
        "file-info": "tamaño de archivo: $1; tipo MIME: $2",
        "file-info-size": "$1 × $2 píxeles; tamaño de archivo: $3; tipo MIME: $4",
        "file-info-size-pages": "$1 × $2 píxeles, tamaño de archivo: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}",
-       "file-nohires": "No disponible a mayor resolución.",
+       "file-nohires": "No disponible en mayor resolución.",
        "svg-long-desc": "archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3",
        "svg-long-desc-animated": "Archivo SVG animado, nominalmente de $1 × $2 píxeles, tamaño del archivo: $3",
        "svg-long-error": "Archivo SVG no válido: $1",
        "yesterday-at": "Ayer a las $1",
        "bad_image_list": "El formato es el siguiente:\n\nSolo se reconocen elementos de lista (líneas que comienzan con «*»).\nEl primer enlace de cada línea debe ser un enlace al archivo que se quiere bloquear.\nTodos los demás enlaces en la misma línea se tomarán como excepciones (es decir, páginas donde sí se puede usar el archivo).",
        "metadata": "Metadatos",
-       "metadata-help": "Este archivo contiene información adicional (metadatos), probablemente añadida por la cámara digital, el escáner o el programa usado para crearlo o digitalizarlo. Si el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.",
+       "metadata-help": "Este archivo contiene información adicional, probablemente añadida por la cámara digital o el escáner usado para crearlo o digitalizarlo.\nSi el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.",
        "metadata-expand": "Mostrar datos detallados",
        "metadata-collapse": "Ocultar datos detallados",
        "metadata-fields": "Los campos de metadatos que se listan en este mensaje se mostrarán en la página de descripción de la imagen aún cuando la tabla de metadatos esté plegada.\nExisten otros campos que se mantendrán ocultos por defecto.\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-software": "Software usado",
        "exif-artist": "Autor",
        "exif-copyright": "Titular de los derechos de autor",
-       "exif-exifversion": "Versión Exif",
+       "exif-exifversion": "Versión de Exif",
        "exif-flashpixversion": "Versión admitida de Flashpix",
        "exif-colorspace": "Espacio de color",
        "exif-componentsconfiguration": "Significado de cada componente",
        "exif-gpslongitude-w": "Longitud oeste",
        "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metro|metros}} sobre el nivel del mar",
        "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metro|metros}} bajo el nivel del mar",
-       "exif-gpsstatus-a": "Medida en progreso",
+       "exif-gpsstatus-a": "Medida en proceso",
        "exif-gpsstatus-v": "Interoperabilidad de medida",
        "exif-gpsmeasuremode-2": "Medición bidimensional",
        "exif-gpsmeasuremode-3": "Medición tridimensional",
        "json-error-utf8": "Los caracteres UTF-8 tienen errores de formato; probablemente la codificación es incorrecta.",
        "json-error-recursion": "Una o más referencias recursivas en el valor por codificar",
        "json-error-inf-or-nan": "Hay uno o más valores «NAN» o «INF» en el valor que se codificará",
-       "json-error-unsupported-type": "Se proporcionó un valor en un tipo que no se puede codificar"
+       "json-error-unsupported-type": "Se proporcionó un valor en un tipo que no se puede codificar",
+       "headline-anchor-title": "Enlazar a esta sección"
 }
index 4aa7182..338aab2 100644 (file)
        "readonly_lag": "Andmebaas on automaatselt lukustatud, seniks kuni ''slave''-andmebaasid on uuendatud.",
        "internalerror": "Sisemine viga",
        "internalerror_info": "Sisemine viga: $1",
+       "internalerror-fatal-exception": "Saatuslik erandtöötluse tõrge: $1",
        "filecopyerror": "Ei saanud faili \"$1\" kopeerida nimega \"$2\".",
        "filerenameerror": "Ei saanud faili \"$1\" failiks \"$2\" ümber nimetada.",
        "filedeleteerror": "Faili nimega \"$1\" ei ole võimalik kustutada.",
        "unusedimages": "Kasutamata failid",
        "wantedcategories": "Kõige oodatumad kategooriad",
        "wantedpages": "Kõige oodatumad leheküljed",
+       "wantedpages-summary": "Loend puuduvatest lehekülgedest, millele viitab kõige rohkem linke, välja arvatud leheküljed, millele viitavad ainult ümbersuunamised. Puuduvad leheküljed, millele viitavad ümbersuunamised, on loetletud leheküljel [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Tulemuste seas on vigane pealkiri: $1",
        "wantedfiles": "Kõige oodatumad failid",
        "wantedfiletext-cat": "Järgmised failid puuduvad, aga on lehekülgedel kasutuses. Siin võivad olla loetletud ka välistes hoidlates asuvad failid, hoolimata sellest, et nad tegelikult olemas on. Loendi sellised valeliikmed on <del>läbi kriipsutatud</del>. Lisaks on puuduvaid faile sisaldavad leheküljed loetletud asukohas [[:$1]].",
        "thumbnail_image-missing": "Fail näib puuduvat: $1",
        "thumbnail_image-failure-limit": "Selle pisipildi viimistlemine on hiljuti liiga palju kordi ($1 või rohkem) ebaõnnestunud. Palun proovi hiljem uuesti.",
        "import": "Lehekülgede import",
-       "importinterwiki": "Vikidevaheline import",
-       "import-interwiki-text": "Vali importimiseks viki ja lehekülje pealkiri.\nRedigeerimisajad ja kaastööliste nimed säilitatakse.\nKõik vikidevahelised toimingud on [[Special:Log/import|impordilogis]].",
+       "importinterwiki": "Importimine teisest vikist",
+       "import-interwiki-text": "Vali importimiseks viki ja lehekülje pealkiri.\nRedigeerimisajad ja kaastööliste nimed säilitatakse.\nKõik teisest vikist importimised on [[Special:Log/import|impordilogis]].",
        "import-interwiki-sourcewiki": "Lähteviki:",
        "import-interwiki-sourcepage": "Alliklehekülg:",
        "import-interwiki-history": "Kopeeri selle lehekülje kogu ajalugu",
        "importcantopen": "Ei saa imporditavat faili avada",
        "importbadinterwiki": "Vigane vikidevaheline link",
        "importsuccess": "Importimine edukalt lõpetatud!",
-       "importnosources": "Ühtegi vikidevahelist impordiallikat pole määratletud ja otsene ajaloo üleslaadimine on keelatud.",
+       "importnosources": "Määratletud pole ühtegi vikit, kust importida, ja otsene ajaloo üleslaadimine on keelatud.",
        "importnofile": "Ühtegi imporditavat faili ei laaditud üles.",
        "importuploaderrorsize": "Üleslaaditava faili import ebaõnnestus.\nFail on lubatust suurem.",
        "importuploaderrorpartial": "Imporditava faili üleslaadimine ebaõnnestus.\nFail oli vaid osaliselt üleslaaditud.",
        "revdelete-uname-unhid": "nähtavaks tehti kasutajanimi",
        "revdelete-restricted": "kehtestati piirangud administraatoritele",
        "revdelete-unrestricted": "eemaldati administraatoritelt piirangud",
+       "logentry-block-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}}; aegumistähtaeg $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|eemaldas}} kasutaja {{GENDER:$4|$3}} blokeeringu",
+       "logentry-block-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut; aegumistähtaeg $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}}; aegumistähtaeg $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut; aegumistähtaeg $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|liitis}} lehekülje $3 leheküljega $4 (kuni redaktsioonini $5)",
        "logentry-move-move": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata",
        "json-error-utf8": "Väärdunud UTF-8 märgid; need võivad olla valesti kodeeritud",
        "json-error-recursion": "Vähemalt üks rekursiivne viide kodeeritavas väärtuses",
        "json-error-inf-or-nan": "Vähemalt üks NAN- või INF-väärtus kodeeritavas väärtuses",
-       "json-error-unsupported-type": "Ette tuli tüüp, mille väärtust ei saa kodeerida"
+       "json-error-unsupported-type": "Ette tuli tüüp, mille väärtust ei saa kodeerida",
+       "headline-anchor-title": "Lingi selle alaosa juurde"
 }
index 1a90601..701f154 100644 (file)
@@ -43,7 +43,8 @@
                        "Hosseinblue",
                        "فلورانس",
                        "Saeidpourbabak",
-                       "Arash.pt"
+                       "Arash.pt",
+                       "Signal89"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
@@ -60,7 +61,7 @@
        "tog-watchdefault": "صفحه‌ها و پرونده‌هایی که ویرایش می‌کنم به فهرست پیگیری‌هایم افزوده شود",
        "tog-watchmoves": "صفحه‌ها و پرونده‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
        "tog-watchdeletion": "صفحات و پرونده‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
-       "tog-watchrollback": "اÙ\81زÙ\88دÙ\86 ØµÙ\81حاتÛ\8c Ú©Ù\87 Ù\88اگرداÙ\86Û\8c Ú©Ø±Ø¯Ù\85 Ø¨Ø±Ø§Û\8c Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87اÛ\8cÙ\85",
+       "tog-watchrollback": "صÙ\81حاتÛ\8c Ú©Ù\87 Ù\88اگرداÙ\86Û\8c Ù\85Û\8câ\80\8cÚ©Ù\86Ù\85 Ø¨Ù\87 Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87اÛ\8cÙ\85 Ø§Ù\81زÙ\88دÙ\87 Ø´Ù\88د",
        "tog-minordefault": "همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت بخورد",
        "tog-previewontop": "پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد",
        "tog-previewonfirst": "پیش‌نمایش هنگام اولین ویرایش نمایش یابد",
        "readonly_lag": "پایگاه داده به طور خودکار قفل شده‌است تا نسخه‌های پشتیبان با نسخهٔ اصلی هماهنگ شوند",
        "internalerror": "خطای داخلی",
        "internalerror_info": "خطای داخلی: $1",
+       "internalerror-fatal-exception": "نوع استثنای مخرب \"$1\"",
        "filecopyerror": "نشد از پروندهٔ «$1» روی «$2» نسخه‌برداری شود.",
        "filerenameerror": "نشد پروندهٔ «$1» به «$2» تغییر نام یابد.",
        "filedeleteerror": "نشد پروندهٔ «$1» حذف شود.",
        "action-viewmyprivateinfo": "اطلاعات خصوصی خود را ببینید",
        "action-editmyprivateinfo": "اطلاعات خصوصی خود را ویرایش کنید",
        "action-editcontentmodel": "ویرایش مدل محتوای یک صفحه",
+       "action-managechangetags": "ایجاد و حذف تگ‌ها از پایگاه داده",
        "nchanges": "$1 تغییر",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|از آخرین بازدید}}",
        "enhancedrc-history": "تاریخچه",
        "unusedimages": "پرونده‌های استفاده‌نشده",
        "wantedcategories": "رده‌های مورد نیاز",
        "wantedpages": "صفحه‌های مورد نیاز",
+       "wantedpages-summary": "فهرست صفحه‌های ناموجود با بیشترین پیوند به آنها، به استثنای صفحه‌هایی که فقط تغییرمسیر به آنها دارند. برای یک فهرست از صفحه‌های ناموجود که تغییرمسیر به آنها دارند، [[{{#special:BrokenRedirects}}]] را ببینید.",
        "wantedpages-badtitle": "عنوان نامجاز در مجموعهٔ نتایج: $1",
        "wantedfiles": "پرونده‌های مورد نیاز",
        "wantedfiletext-cat": "پرونده‌های زیر استفاده می‌شوند اما موجود نیستند. همچنین ممکن است پرونده‌های مخازن خارجی با وجود موجود بودن در اینجا فهرست شوند. هرگونه رتبه مثبت کاذب <del>خط خواهد خورد.</del> علاوه بر این، صفحاتی که پرونده‌هایی ناموجود را در خود جای داده‌اند در [[:$1]] فهرست شده‌اند.",
        "thumbnail_image-missing": "پرونده به نظر گم شده‌است: $1",
        "thumbnail_image-failure-limit": "تلاش‌های ناموفق اخیر بسیاری ($1 یا بیشتر) برای ارائهٔ این تصویر کوچک وجود داشته‌ است. لطفأ بعداً دوباره تلاش کنید.",
        "import": "درون‌ریزی صفحات",
-       "importinterwiki": "درÙ\88Ù\86â\80\8cرÛ\8cزÛ\8c ØªØ±Ø§Ù\88Û\8cÚ©Û\8c",
-       "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحات در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.",
+       "importinterwiki": "درÙ\88Ù\86â\80\8cرÛ\8cزÛ\8c Ø§Ø² Û\8cÚ© Ù\88Û\8cÚ©Û\8c Ø¯Û\8cگر",
+       "import-interwiki-text": "Û\8cÚ© Ù\88Û\8cÚ©Û\8c Ù\88 Û\8cÚ© Ù\86اÙ\85 ØµÙ\81Ø­Ù\87 Ø±Ø§ Ø§Ù\86تخاب Ú©Ù\86Û\8cد ØªØ§ Ø§Ø·Ù\84اعات Ø§Ø² Ø¢Ù\86 Ø¯Ø±Ù\88Ù\86â\80\8cرÛ\8cزÛ\8c Ø´Ù\88د.\nتارÛ\8cØ® Ù\86سخÙ\87â\80\8cÙ\87ا Ù\88 Ù\86اÙ\85 Ù\88Û\8cراÛ\8cØ´â\80\8cÚ©Ù\86Ù\86دگاÙ\86 Ø«Ø§Ø¨Øª Ø®Ù\88اÙ\87د Ù\85اÙ\86د.\nاطÙ\84اعات Ù\85ربÙ\88Ø· Ø¨Ù\87 Ø¯Ø±Ù\88Ù\86â\80\8cرÛ\8cزÛ\8c ØµÙ\81حات Ø§Ø² Ù\88Û\8cÚ©Û\8c Ø¯Û\8cگر Ø¯Ø± [[Special:Log/import|سÛ\8cاÙ\87Ù\87Ù\94 Ø¯Ø±Ù\88Ù\86â\80\8cرÛ\8cزÛ\8câ\80\8cÙ\87ا]] Ø¯Ø±Ø¬ Ø®Ù\88اÙ\87د Ø´Ø¯.",
        "import-interwiki-sourcewiki": "ویکی منبع:",
        "import-interwiki-sourcepage": "صفحهٔ مبدأ:",
        "import-interwiki-history": "تمام نسخه‌های تاریخچهٔ این صفحه انتقال داده شود",
        "importcantopen": "پروندهٔ درون‌ریزی صفحات باز نشد",
        "importbadinterwiki": "پیوند میان‌ویکی نادرست",
        "importsuccess": "درون‌ریزی با موفقیت انجام شد!",
-       "importnosources": "هیچ منبعی برای درون‌ریزی اطلاعات از ویکی دیگر تعریف نشده‌است.",
+       "importnosources": "هیچ منبعی برای درون‌ریزی اطلاعات از ویکی‌های دیگر تعریف نشده‌است.",
        "importnofile": "هیچ پرونده‌ای برای درون‌ریزی بارگذاری نشده‌است.",
        "importuploaderrorsize": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد.\nاندازهٔ پرونده بیشتر از حداکثر اندازهٔ مجاز است.",
        "importuploaderrorpartial": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد. پرونده به طور ناقص بارگذاری شده‌است.",
        "tags-tag": "نام برچسب",
        "tags-display-header": "نمایش در فهرست‌های تغییرات",
        "tags-description-header": "توضیح کامل معنی",
+       "tags-source-header": "منبع",
        "tags-active-header": "فعال؟",
        "tags-hitcount-header": "تغییرهای برچسب‌دار",
+       "tags-actions-header": "فعالیت‌ها",
        "tags-active-yes": "بله",
        "tags-active-no": "خیر",
+       "tags-source-extension": "تعریف‌شده بر پایه افزونه",
+       "tags-source-manual": "اعمال شده به صورت دستی توسط ربات‌ها یا کاربرها",
+       "tags-source-none": "دیگر استفاده نمی‌شود",
        "tags-edit": "ویرایش",
+       "tags-delete": "حذف",
+       "tags-activate": "فعال‌سازی",
+       "tags-deactivate": "غیرفعال‌سازی",
        "tags-hitcount": "$1 {{PLURAL:$1|تغییر|تغییر}}",
+       "tags-manage-no-permission": "شما اجازه مدیریت تغییر تگ‌ها را ندارید.",
+       "tags-create-heading": "ایجاد یک برچسب جدید",
+       "tags-create-explanation": "به طور پیش‌فرض، تگ‌های تازه ایجاد شده برای استفاده کاربران و ربات‌ها در دسترس قرار می‌گیرند.",
+       "tags-create-tag-name": "نام برچسب:",
+       "tags-create-reason": "دلیل:",
+       "tags-create-submit": "ایجاد",
+       "tags-create-no-name": "نام تگ باید مشخص شود.",
+       "tags-create-invalid-chars": "نام تگ‌ها نباید حاوی کاما (<code>,</code>) یا خط مورب (<code>/</code>) باشد.",
+       "tags-create-invalid-title-chars": "نام تگ‌ها نباید شامل حروفی شود که نمی‌توان از آن‌ها در عنوان صفحات استفاده کرد.",
+       "tags-create-already-exists": "تگ \"$1\" هم‌اکنون موجود است.",
+       "tags-create-warnings-above": "در هنگام ایجاد تگ \"$1\" با {{PLURAL:$2|هشدار|هشدارهای}} زیر پیش آمد:",
+       "tags-create-warnings-below": "آیا مایل به ادامه ایجاد تگ هستید؟",
+       "tags-delete-title": "حذف برچسب",
+       "tags-delete-explanation-initial": "شما در حال حذف تگ «$1» از پایگاه داده هستید.",
+       "tags-delete-explanation-warning": "این عمل <strong>غیر قابل بازگشت</strong> است، حتی توسط مدیران پایگاه داده. مطمئن باشید که این همان تگی است که می‌خواهید آن‌را حذف کنید.",
+       "tags-delete-reason": "دلیل:",
+       "tags-delete-submit": "این تگ را به‌صورت غیرقابل بازگشت حذف کن",
+       "tags-delete-not-found": "تگ «$1» وجود ندارد.",
+       "tags-activate-title": "فعال‌سازی برچسب",
+       "tags-activate-question": "شما در حال فعال‌سازی تگ «$1» هستید.",
+       "tags-activate-reason": "دلیل:",
+       "tags-activate-not-allowed": "فعال‌سازی تگ «$1» ممکن نیست.",
+       "tags-activate-not-found": "تگ «$1» وجود ندارد.",
+       "tags-activate-submit": "فعال‌سازی",
+       "tags-deactivate-title": "غیرفعال‌سازی برچسب",
+       "tags-deactivate-question": "شما در حال غیرفعال‌سازی تگ «$1» هستید.",
+       "tags-deactivate-reason": "دلیل:",
+       "tags-deactivate-not-allowed": "غیرفعال‌سازی تگ «$1» ممکن نیست.",
+       "tags-deactivate-submit": "غیرفعال‌سازی",
        "comparepages": "مقایسهٔ صفحات",
        "compare-page1": "صفحهٔ ۱",
        "compare-page2": "صفحهٔ ۲",
        "logentry-upload-upload": "$1 $3 را {{GENDER:$2|بارگذاری کرد}}",
        "logentry-upload-overwrite": "$1 نسخهٔ تازه‌ای از $3 را {{GENDER:$2|بارگذاری کرد}}",
        "logentry-upload-revert": "$1 {{GENDER:$2|بارگذاری کرد}} $3",
+       "log-name-managetags": "تاریخچه مدیریت تگ",
+       "logentry-managetags-create": "$1 برچسب «$4» را {{GENDER:$2|ایجاد کرد}}",
        "rightsnone": "(هیچ)",
        "revdelete-summary": "خلاصه ویرایش",
        "feedback-bugornote": "اگر آماده‌اید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت می‌توانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$3 $2]» افزوده خواهد شد.",
        "json-error-utf8": "نویسه‌های نادرست یوتی‌اف-۸، احتمالاً نادرست کدگذاری شده است",
        "json-error-recursion": "ارجاع بازگشتی یک یا بیشتر در مقداری که کذگذاری می‌شود",
        "json-error-inf-or-nan": "مقادیر INF یا NAN یک یا بیشتر در مقداری که کدگذاری می‌شود",
-       "json-error-unsupported-type": "یک مقداری نوعی که نمی‌تواند کدگذاری شود داده شده است"
+       "json-error-unsupported-type": "یک مقداری نوعی که نمی‌تواند کدگذاری شود داده شده است",
+       "headline-anchor-title": "پیوند به این قسمت"
 }
index c9e210a..d04ae36 100644 (file)
        "readonly_lag": "Tietokanta on automaattisesti lukittu, jotta kaikki tietokantapalvelimet saisivat kaikki tuoreet muutokset",
        "internalerror": "Sisäinen virhe",
        "internalerror_info": "Sisäinen virhe: $1",
+       "internalerror-fatal-exception": "Vakava virhe, jonka tyyppi on \"$1\"",
        "filecopyerror": "Tiedostoa <b>$1</b> ei voitu kopioida tiedostoksi <b>$2</b>.",
        "filerenameerror": "Tiedostoa <b>$1</b> ei voitu nimetä uudelleen nimellä <b>$2</b>.",
        "filedeleteerror": "Tiedostoa <b>$1</b> ei voitu poistaa.",
        "thumbnail_image-missing": "Tiedosto näyttää puuttuvan: $1",
        "thumbnail_image-failure-limit": "Tätä kuvaketta on yritetty tulkita epäonnistuneesti liian monta kertaa ($1 tai enemmän). Ole hyvä ja yritä myöhemmin uudelleen.",
        "import": "Tuo sivuja",
-       "importinterwiki": "Tuo sivuja muista wikeistä (transwiki import)",
-       "import-interwiki-text": "Valitse wiki ja sivun nimi tuontia varten.\nVersioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. \nKaikki wikienväliset tuontitapahtumat kirjataan [[Special:Log/import|tuontilokiin]].",
+       "importinterwiki": "Tuo sivuja toisesta wikeistä",
+       "import-interwiki-text": "Valitse wiki ja sivun nimi tuontia varten.\nVersioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. \nKaikki tuonnit muista wikeistä kirjataan [[Special:Log/import|tuontilokiin]].",
        "import-interwiki-sourcewiki": "Lähdewiki:",
        "import-interwiki-sourcepage": "Lähdesivu:",
        "import-interwiki-history": "Kopioi sivun koko historia ja kaikki versiot",
        "importcantopen": "Tuontitiedoston avaus epäonnistui",
        "importbadinterwiki": "Kelpaamaton wikienvälinen linkki",
        "importsuccess": "Tuonti onnistui!",
-       "importnosources": "Wikienvälisiä tuontilähteitä ei ole määritelty ja suorat historiatallennukset on poistettu käytöstä.",
+       "importnosources": "Ei ole määritetty yhtään sellaista wikiä, josta voisi tuoda aineistoa. Tämän lisäksi sivuhistorioiden suorat tuontitallennukset on poistettu käytöstä.",
        "importnofile": "Mitään tuotavaa tiedostoa ei lähetetty.",
        "importuploaderrorsize": "Tuontitiedoston tallennus epäonnistui. Tiedosto on suurempi kuin sallittu yläraja.",
        "importuploaderrorpartial": "Tuontitiedoston tallennus epäonnistui. Tiedostosta oli lähetetty vain osa.",
        "tags-delete-title": "Hävitä merkkaus pysyvästi",
        "tags-delete-explanation-initial": "Olet parhaillaan poistamassa (eli tuhoamassa pysyvästi) merkkauksen \"$1\" tietokannasta.",
        "tags-delete-explanation-in-use": "Se poistuu {{PLURAL:$2|$2 sivun versiosta tai lokimerkinnästä|kaikista $2 sivuversiosta tai lokimerkinnöistä}}, joissa se tällä hetkellä on käytössä.",
-       "tags-delete-explanation-warning": "Tämä toimenpide on <strong>peruuttamaton</strong> and <strong>poistettua merkkausta ei voida palauttaa takaisin</strong>. Siihen eivät pysty edes tietokannan ylläpito. Sinun pitää olla täysin varma, että haluat poistettavaksi juuri tämän merkkauksen.",
+       "tags-delete-explanation-warning": "Tämä toimenpide on <strong>peruuttamaton</strong> ja <strong>poistettua ei merkkausta voida palauttaa takaisin</strong>. Siihen ei pysty edes tietokannan ylläpitohenkilöstö. Sinun pitää olla täysin varma, että haluat poistettavaksi juuri tämän merkkauksen.",
        "tags-delete-explanation-active": "<stron>Merkkaus \"$1\" on edelleen käytössä ja sitä käytetään myös jatkossa.</strong>. Jos haluat merkkauksen pois käytöstä, mene sinne missä merkkaus on asetettu ja ota se pois siellä.",
        "tags-delete-reason": "Syy:",
        "tags-delete-submit": "Tuhoa tämä merkkaus peruuttamattomasti ja pysyvästi",
        "json-error-utf8": "Huonosti muotoiltuja UTF-8 merkkejä; mahdollisesti koodattu virheellisesti",
        "json-error-recursion": "Joku arvossa (value) oleva rekursiivinen viite pitää vielä muuttaa koodiksi",
        "json-error-inf-or-nan": "Joku NAN- tai INF-arvo arvossa (value) pitää muuttaa koodiksi",
-       "json-error-unsupported-type": "On annettu sellainen tyypin arvo, jota ei voi muuttaa koodiksi"
+       "json-error-unsupported-type": "On annettu sellainen tyypin arvo, jota ei voi muuttaa koodiksi",
+       "headline-anchor-title": "Linkitä tähän osioon"
 }
index f0f0fbe..51a7642 100644 (file)
                        "Macofe",
                        "Sam",
                        "JackPotte",
-                       "Weft"
+                       "Weft",
+                       "Raulel",
+                       "Nicolapps"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "unprotectthispage": "Changer la protection de cette page",
        "newpage": "Nouvelle page",
        "talkpage": "Discussion sur cette page",
-       "talkpagelinktext": "discuter",
+       "talkpagelinktext": "Discussion",
        "specialpage": "Page spéciale",
        "personaltools": "Outils personnels",
        "articlepage": "Voir la page de contenu",
        "hidetoc": "masquer",
        "collapsible-collapse": "masquer",
        "collapsible-expand": "afficher",
-       "confirmable-confirm": "Êtes-vous sûr{{GENDER:$1||e|(e)}} ?",
+       "confirmable-confirm": "Êtes-vous sûr{{GENDER:$1||e}} ?",
        "confirmable-yes": "Oui",
        "confirmable-no": "Non",
        "thisisdeleted": "Désirez-vous afficher ou restaurer $1 ?",
        "readonly_lag": "La base de données a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.",
        "internalerror": "Erreur interne",
        "internalerror_info": "Erreur interne : $1",
+       "internalerror-fatal-exception": "Erreur fatale de type \"$1\"",
        "filecopyerror": "Impossible de copier le fichier « $1 » vers « $2 ».",
        "filerenameerror": "Impossible de renommer le fichier « $1 » en « $2 ».",
        "filedeleteerror": "Impossible de supprimer le fichier « $1 ».",
        "virus-badscanner": "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
        "virus-scanfailed": "Échec de la recherche (code $1)",
        "virus-unknownscanner": "antivirus inconnu :",
-       "logouttext": "'''Vous êtes à présent déconnecté{{GENDER:||e|(e)}}.'''\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.",
+       "logouttext": "'''Vous êtes à présent déconnecté{{GENDER:||e}}.'''\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.",
        "welcomeuser": "Bienvenue, $1&nbsp;!",
        "welcomecreation-msg": "Votre compte a été créé.\nN'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]].",
        "yourname": "Nom d'utilisateur :",
        "userlogin-signwithsecure": "Utiliser une connexion sécurisée",
        "yourdomainname": "Votre domaine :",
        "password-change-forbidden": "Vous ne pouvez pas modifier les mots de passe sur ce wiki.",
-       "externaldberror": "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous n'êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.",
+       "externaldberror": "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous ne pouvez pas mettre à jour votre compte externe.",
        "login": "Connexion",
        "nav-login-createaccount": "Créer un compte ou se connecter",
        "userlogin": "Créer un compte ou se connecter",
        "loginerror": "Erreur de connexion",
        "createacct-error": "Erreur lors de la création du compte",
        "createaccounterror": "Impossible de créer le compte : $1",
-       "nocookiesnew": "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
+       "nocookiesnew": "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
        "nocookieslogin": "{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.",
        "nocookiesfornew": "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et réessayez.",
        "noname": "Vous n'avez pas saisi un nom d'utilisateur valide.",
        "loginsuccesstitle": "Connexion réussie",
-       "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».",
+       "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e}} à {{SITENAME}} en tant que « $1 ».",
        "nosuchuser": "L'utilisateur « $1 » n'existe pas.\nLes noms d'utilisateurs sont sensibles à la casse.\nVérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
        "nosuchusershort": "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
        "nouserspecified": "Vous devez saisir un nom d'utilisateur.",
        "resetpass-submit-cancel": "Annuler",
        "resetpass-wrong-oldpass": "Mot de passe actuel ou temporaire invalide.\nVous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mot de passe temporaire.",
        "resetpass-recycled": "Veuillez réinitialiser votre mot de passe à quelque chose d’autre que l’actuel.",
-       "resetpass-temp-emailed": "Vous êtes connecté{{GENDER:||e|(e)}} avec un code temporaire fourni par courriel.\nPour terminer la connexion, vous devez fournir un nouveau mot de passe ici :",
+       "resetpass-temp-emailed": "Vous êtes connecté{{GENDER:||e}} avec un code temporaire fourni par courriel.\nPour terminer la connexion, vous devez fournir un nouveau mot de passe ici :",
        "resetpass-temp-password": "Mot de passe temporaire :",
        "resetpass-abort-generic": "La modification du mot de passe a été annulée par une extension.",
        "resetpass-expired": "Votre mot de passe a expiré. Veuillez en fournir un nouveau pour vous connecter.",
        "passwordreset-capture-help": "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu'il sera envoyé à l'utilisateur.",
        "passwordreset-email": "Adresse de courriel :",
        "passwordreset-emailtitle": "Détails du compte sur {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu{{GENDER:||e|(e)}} de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
-       "passwordreset-emailtext-user": "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu{{GENDER:||e|(e)}} de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+       "passwordreset-emailtext-ip": "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+       "passwordreset-emailtext-user": "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
        "passwordreset-emailelement": "Nom d'utilisateur : $1\nMot de passe temporaire : $2",
        "passwordreset-emailsent": "Un courriel de réinitialisation de mot de passe a été envoyé.",
        "passwordreset-emailsent-capture": "Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.",
        "showdiff": "Voir les modifications",
        "blankarticle": "<strong>Attention :</strong> La page que vous créez est vide.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la page sera créée sans aucun contenu.",
        "anoneditwarning": "<strong>Attention :</strong> Vous n’êtes pas connecté. Votre adresse IP sera visible de tout le monde si vous faites des modifications. Si vous <strong>[$1 vous connectez]</strong> ou <strong>[$2 créez un compte]</strong>, vos modifications seront attribuées à votre nom d’utilisateur, entre autres avantages.",
-       "anonpreviewwarning": "''Vous n’êtes pas identifié(e). Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
+       "anonpreviewwarning": "''Vous n’êtes pas identifié{{GENDER:||e}}. Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
        "missingsummary": "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.\nSi vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
        "selfredirect": "<strong>Attention :</strong> Vous êtes en train de rediriger la page vers elle-même.\nVous pouvez avoir spécifié la mauvaise cible pour la redirection, ou vous modifiez peut-être la mauvaise page.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la redirection sera créée tout de même.",
        "missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
        "accmailtitle": "Mot de passe envoyé.",
        "accmailtext": "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.\nIl peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après connexion.",
        "newarticle": "(Nouveau)",
-       "newarticletext": "Vous avez suivi un lien vers une page qui n’existe pas encore. \nAfin de créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [$1 la page d’aide] pour plus d’informations). \nSi vous êtes arrivé{{GENDER:||e|(e)}} ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
+       "newarticletext": "Vous avez suivi un lien vers une page qui n’existe pas encore. \nAfin de créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [$1 la page d’aide] pour plus d’informations). \nSi vous êtes arrivé{{GENDER:||e}} ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
        "anontalkpagetext": "---- ''Vous êtes sur la page de discussion d'un utilisateur anonyme qui n'a pas encore créé de compte ou qui n'en utilise pas. Pour cette raison, nous devons utiliser son adresse IP pour l'identifier. Une adresse IP peut être partagée par plusieurs utilisateurs. Si vous êtes un{{GENDER:||e|}} utilisat{{GENDER:|eur|rice|eur}} anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:UserLogin/signup|créer un compte]] ou [[Special:UserLogin|vous connecter]] afin d'éviter toute confusion future avec d'autres contributeurs anonymes.''",
        "noarticletext": "Il n’y a pour l’instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|lancer une recherche sur ce titre]] dans les autres pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les opérations liées]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} créer cette page]</span>.",
        "noarticletext-nopermission": "Il n'y a pour l'instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|faire une recherche sur ce titre]] dans les autres pages,\nou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les journaux associés]</span>.",
        "sectioneditnotsupported-text": "La modification d'une section n'est pas prise en charge pour cette page.",
        "permissionserrors": "Erreur de permissions",
        "permissionserrorstext": "Vous n'avez pas la permission d'effectuer l'opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
-       "permissionserrorstext-withaction": "Vous n'êtes pas autorisé{{GENDER:||e|(e)}} à $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
+       "permissionserrorstext-withaction": "Vous ne pouvez pas $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
        "recreate-moveddeleted-warn": "'''Attention : vous êtes en train de recréer une page qui a été précédemment supprimée.'''\n\nAssurez-vous qu'il est pertinent de poursuivre les modifications sur cette page. Le journal des suppressions et des déplacements est affiché ci-dessous :",
        "moveddeleted-notice": "Cette page a été supprimée. Le journal des suppressions et des déplacements est affiché ci-dessous pour référence.",
        "log-fulllog": "Voir le journal complet",
        "content-failed-to-parse": "Échec de l’analyse syntaxique du contenu de $2 pour le modèle $1: $3",
        "invalid-content-data": "Données du contenu non valides",
        "content-not-allowed-here": "Le contenu « $1 » n’est pas autorisé sur la page [[$2]]",
-       "editwarning-warning": "Quitter cette page vous fera perdre toutes les modifications que vous avez faites.\nSi vous êtes connecté{{GENDER:||e|(e)}}, vous pouvez désactiver cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.",
+       "editwarning-warning": "Quitter cette page vous fera perdre toutes les modifications que vous avez faites.\nSi vous êtes connecté{{GENDER:||e}}, vous pouvez désactiver cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.",
        "editpage-notsupportedcontentformat-title": "Format de contenu non pris en charge",
        "editpage-notsupportedcontentformat-text": "Le format de contenu $1 n'est pas pris en charge par le modèle de contenu $2 .",
        "content-model-wikitext": "wikitexte",
        "listusersfrom": "Afficher les utilisateurs à partir de :",
        "listusers-submit": "Lister",
        "listusers-noresult": "Aucun utilisateur trouvé. Vérifiez aussi les variantes de casse.",
-       "listusers-blocked": "(bloqué{{GENDER:$1||e|(e)}})",
+       "listusers-blocked": "(bloqué{{GENDER:$1||e}})",
        "activeusers": "Liste des utilisateurs actifs",
        "activeusers-intro": "Ceci est une liste des utilisateurs qui ont exercé une quelconque activité au cours {{PLURAL:$1|de la dernière journée|des $1 derniers jours}}.",
        "activeusers-count": "$1 {{PLURAL:$1|action|actions}} lors {{PLURAL:$3|du dernier jour|des $3 derniers jours}}",
        "protect_expiry_old": "La date d'expiration est déjà passée.",
        "protect-unchain-permissions": "Déverrouiller davantage d’options de protection",
        "protect-text": "Vous pouvez consulter et modifier le niveau de protection de la page '''$1'''.",
-       "protect-locked-blocked": "Vous ne pouvez pas modifier les niveaux de protection tant que vous êtes bloqué{{GENDER:||e|(e)}}.\nVoici les réglages actuels de la page '''$1''' :",
+       "protect-locked-blocked": "Vous ne pouvez pas modifier les niveaux de protection durant votre blocage.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-locked-dblock": "Le niveau de protection ne peut pas être modifié car la base de données est verrouillée.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-locked-access": "Vous n'avez pas les droits nécessaires pour modifier les niveaux de protection de pages.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-cascadeon": "Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n'affecte la protection en cascade.",
        "undelete-error": "Page d’erreur d’annulation",
        "undelete-error-short": "Erreur lors de la restauration du fichier : $1",
        "undelete-error-long": "Des erreurs ont été rencontrées lors de la restauration du fichier :\n\n$1",
-       "undelete-show-file-confirm": "Êtes-vous sûr{{GENDER:||e|(e)}} de vouloir visionner une version supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
+       "undelete-show-file-confirm": "Êtes-vous sûr{{GENDER:||e}} de vouloir consulter une version supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
        "undelete-show-file-submit": "Oui",
        "undelete-revision-row": "$1 $2 ($3) $4 — $5 $6 $7 $8 $9",
        "namespace": "Espace de noms :",
        "ipb-confirm": "Confirmer le blocage",
        "badipaddress": "Adresse IP incorrecte",
        "blockipsuccesssub": "Blocage réussi",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />\nConsultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e}}.<br />\nConsultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.",
        "ipb-blockingself": "Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain{{GENDER:||e}} de vouloir faire cela ?",
-       "ipb-confirmhideuser": "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr{{GENDER:||e|(e)}} de vouloir le faire ?",
+       "ipb-confirmhideuser": "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr{{GENDER:||e}} de vouloir le faire ?",
        "ipb-confirmaction": "Si vous êtes sûr{{GENDER:||e|(e)}} de vraiment vouloir le faire, veuillez cocher le champ « {{int:ipb-confirm}} » en bas.",
        "ipb-edit-dropdown": "Modifier les motifs de blocage par défaut",
        "ipb-unblock-addr": "Débloquer $1",
        "sorbs_create_account_reason": "Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.\nVous ne pouvez pas créer un compte.",
        "xffblockreason": "Une adresse IP dans l'en-tête X-Forwarded-For, soit la vôtre ou celle d'un serveur proxy que vous utilisez, a été bloquée. La raison du blocage initial est : $1",
        "cant-see-hidden-user": "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
-       "ipbblocked": "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué{{GENDER:||e|}}.",
+       "ipbblocked": "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué{{GENDER:||e}}.",
        "ipbnounblockself": "Vous n'êtes pas autorisé{{GENDER:||e}} à vous débloquer vous-même",
        "lockdb": "Verrouiller la base de données",
        "unlockdb": "Déverrouiller la base de données",
        "movearticle": "Renommer la page :",
        "moveuserpage-warning": "'''Attention :''' Vous êtes sur le point de renommer une page d’utilisateur. Veuillez noter que seule la page sera renommée et que l’utilisateur '''ne''' sera '''pas''' renommé.",
        "movecategorypage-warning": "<strong>Avertissement :</strong> Vous êtes sur le point de renommer une page de catégorie. Veuillez noter que seule la page sera renommée et que toutes les pages dans l'ancienne catégorie ne seront <em>pas</em> transférées dans la nouvelle.",
-       "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
+       "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
        "movenotallowed": "Vous n'avez pas la permission de renommer les pages.",
        "movenotallowedfile": "Vous n'avez pas la permission de renommer les fichiers.",
        "cant-move-user-page": "Vous n’avez pas la permission de renommer les pages principales d’utilisateurs.",
        "thumbnail_image-missing": "Le fichier suivant est introuvable : $1",
        "thumbnail_image-failure-limit": "Il y a eu récemment trop de tentatives échouées ($1 ou plus) pour restituer cette vignette. Veuillez réessayer ultérieurement.",
        "import": "Importer des pages",
-       "importinterwiki": "Importation inter-wiki",
-       "import-interwiki-text": "Sélectionnez un wiki et un titre de page à importer.\nLes dates des versions et les noms des contributeurs seront préservés.\nToutes les actions d'importation inter-wiki sont consignées dans l'[[Special:Log/import|historique des importations]].",
+       "importinterwiki": "Importer à partir d'un autre wiki",
+       "import-interwiki-text": "Sélectionnez un wiki et un titre de page à importer.\nLes dates des versions et les noms des contributeurs seront préservés.\nToutes les actions d'importation à partir d'autres wikis sont consignées dans l'[[Special:Log/import|historique des importations]].",
        "import-interwiki-sourcewiki": "Wiki source :",
        "import-interwiki-sourcepage": "Page source :",
        "import-interwiki-history": "Copier toutes les versions de l’historique de cette page",
        "importcantopen": "Impossible d'ouvrir le fichier à importer",
        "importbadinterwiki": "Mauvais lien inter-wiki",
        "importsuccess": "L'importation a réussi !",
-       "importnosources": "Aucune source d'importation inter-wiki n'a été définie et l'import direct d'historiques est désactivé.",
+       "importnosources": "Aucun wiki source n'a été défini et l'import direct d'historiques est désactivé.",
        "importnofile": "Aucun fichier d'importation n'a été envoyé.",
        "importuploaderrorsize": "L'import du fichier a échoué.\nSa taille est supérieure au maximum autorisé pour l'import de fichier.",
        "importuploaderrorpartial": "L'import du fichier échoué.\nSon contenu n'a été transféré que partiellement.",
        "tooltip-pt-preferences": "Vos préférences",
        "tooltip-pt-watchlist": "La liste des pages dont vous suivez les modifications",
        "tooltip-pt-mycontris": "La liste de vos contributions",
-       "tooltip-pt-login": "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n'est cependant pas obligatoire.",
+       "tooltip-pt-login": "Il est recommandé de vous identifier ; ce n'est cependant pas obligatoire.",
        "tooltip-pt-logout": "Se déconnecter",
        "tooltip-pt-createaccount": "Il vous est conseillé de créer un compte et de vous connecter ; cependant, ce n’est pas obligatoire",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
        "revdelete-uname-unhid": "nom d'utilisateur affiché",
        "revdelete-restricted": "restrictions appliquées aux administrateurs",
        "revdelete-unrestricted": "restrictions retirées pour les administrateurs",
+       "logentry-block-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} pour un temps d'expiration de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|a débloqué}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} avec un temps d'expiration de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} pour une durée de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} avec un temps d'expiration de $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|a fusionné}} $3 en $4 (révisions jusqu’à $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 sans laisser de redirection",
        "json-error-utf8": "Caractères UTF-8 mal formés, peut-être mal encodé",
        "json-error-recursion": "Une ou plusieurs références récursives dans la valeur à encoder",
        "json-error-inf-or-nan": "Une une plusieurs valeurs NaN ou INF dans la valeur à encoder",
-       "json-error-unsupported-type": "Une valeur a été donnée dans un type ne pouvant pas être encodé"
+       "json-error-unsupported-type": "Une valeur a été donnée dans un type ne pouvant pas être encodé",
+       "headline-anchor-title": "Lien vers cette section"
 }
index 014f1e6..f5e4182 100644 (file)
        "thu": "Tö",
        "fri": "Fr",
        "sat": "Se",
-       "january": "Januar",
-       "february": "Feebruar",
+       "january": "Janewoore",
+       "february": "Febrewoore",
        "march": "Marts",
        "april": "April",
-       "may_long": "Moi",
-       "june": "Juuni",
+       "may_long": "Mei",
+       "june": "Jüüne",
        "july": "Juuli",
        "august": "August",
-       "september": "Septämber",
+       "september": "September",
        "october": "Oktoober",
-       "november": "Nomber",
-       "december": "Detsämber",
-       "january-gen": "Januar",
-       "february-gen": "Feebruar",
+       "november": "Nofember",
+       "december": "Detsember",
+       "january-gen": "Janewoore",
+       "february-gen": "Febrewoore",
        "march-gen": "Marts",
        "april-gen": "April",
-       "may-gen": "Moi",
+       "may-gen": "Mei",
        "june-gen": "Juuni",
        "july-gen": "Juuli",
        "august-gen": "August",
-       "september-gen": "Septämber",
+       "september-gen": "September",
        "october-gen": "Oktoober",
        "november-gen": "Nowämber",
-       "december-gen": "Detsämber",
+       "december-gen": "Detsember",
        "jan": "Jan.",
        "feb": "Feb.",
        "mar": "Mar.",
        "apr": "Apr.",
-       "may": "Moi",
+       "may": "Mei",
        "jun": "Jun.",
        "jul": "Jul.",
        "aug": "Aug.",
        "sep": "Sep.",
        "oct": "Okt.",
-       "nov": "Now.",
+       "nov": "Nof.",
        "dec": "Det.",
        "january-date": "$1. Janewoore",
        "february-date": "$1. Febrewoore",
        "accmailtitle": "Paaswurd as ferschüürd wurden.",
        "accmailtext": "En tufelag iinracht paaswurd för [[User talk:$1|$1]] as tu $2 ferschüürd wurden. Det koon üüb det spezial-sidj ''[[Special:ChangePassword|Paaswurd anre]]'' feranert wurd, wan dü uunmeldet beest.",
        "newarticle": "(Nei)",
-       "newarticletext": "Dü beest en ferwisang tu en sidj fulagt, diar't noch ei jaft.\nAm det sidj iinturachten, skriiw dan tekst uun det fial för't bewerkin iin.\nÜüb det [$1 halepsidj] fanjst dü halep.\nWan dü ütj fersen heer beest, trak ianfach üüb di '''turag'''-knoop faan dan browser.",
+       "newarticletext": "Dü beest en ferwisang tu en sidj fulagt, diar't noch ei jaft.\nAm det sidj iinturachten, skriiw dan tekst uun det fial för't bewerkin iin.\nÜüb det [$1 halepsidj] fanjst dü halep.\nWan dü ütj fersen heer beest, trak ianfach üüb di <strong>turag</strong>-knoop faan dan browser.",
        "anontalkpagetext": "----''Üüb detheer sidj könst dü en ünbekäänden brüker en nooracht du. Det lääpt auer sin IP adres. IP adresen kön faan flook brükern brükt wurd. Wan dü mä detheer nooracht niks began könst, do as det ferlicht för hoker ööders mend weesen. Dü säärst niks widjer onernem. Wan dü en aanj [[Special:UserLogin/signup|brükerkonto iinrachst]] of di [[Special:UserLogin|uunmeldest]], komt sowat ei weder föör.",
        "noarticletext": "Üüb detdiar sidj stäänt noch niks.\nDü könst didiar tiitel üüb ööder sidjen [[Special:Search/{{PAGENAME}}|schük]],\n<span class=\"plainlinks\">uun [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logbuken schük] of detdiar sidj [{{fullurl:{{FULLPAGENAME}}|action=edit}} bewerke]</span>.",
        "noarticletext-nopermission": "Üüb detdiar sidj stäänt noch niks, oober dü mutst diar uk niks iinskriiw.\nDü könst diar üüb ööder sidjen efter [[Special:Search/{{PAGENAME}}|schük]] of a <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAME}}}} logbuken uunluke].</span>",
        "javascripttest-qunit-intro": "Luke efter bi [$1 test dokumentatjuun] üüb mediawiki.org",
        "tooltip-pt-userpage": "Din brükersidj",
        "tooltip-pt-anonuserpage": "Brükersidj faan det IP-adres, faan huar ütj dü werkest",
-       "tooltip-pt-mytalk": "Din diskusjuunssidj",
+       "tooltip-pt-mytalk": "Din diskuschuunssidj",
        "tooltip-pt-anontalk": "Diskuschuun auer feranrangen faan detdiar IP-adres",
        "tooltip-pt-preferences": "Min iinstelangen",
        "tooltip-pt-watchlist": "Sidjen, diar dü uun't uug behual wel",
index fc967f5..3ed2027 100644 (file)
        "faqpage": "Project:Faak stelde fragen",
        "namespaces": "Nammeromten",
        "variants": "Farianten",
+       "navigation-heading": "Navigaasjemenu",
        "errorpagetitle": "Flater",
        "returnto": "Werom nei \"$1\".",
        "tagline": "Ut {{SITENAME}}",
        "view": "Lêze",
        "edit": "Bewurkje",
        "create": "Oanmeitsje",
+       "create-local": "Lokale beskriuwing tafoegje",
        "editthispage": "Side bewurkje",
        "create-this-page": "Dizze side oanmeitsje",
        "delete": "Wiskje",
        "currentrev": "Aktuele ferzje",
        "currentrev-asof": "Hjoeddeiske ferzje sûnt $1",
        "revisionasof": "Ferzje op $1",
-       "revision-info": "Ferzje op $1 fan $2",
-       "previousrevision": "← Eardere ferskillen",
+       "revision-info": "Ferzje op $1 troch {{GENDER:$6|$2}}$7",
+       "previousrevision": "← Eardere ferzje",
        "nextrevision": "Nijere ferzje→",
        "currentrevisionlink": "Rinnende ferzje",
        "cur": "no",
        "mergelog": "Gearfoegingslogboek",
        "revertmerge": "Gearfoeging ûngedien meitsje",
        "mergelogpagetext": "Hjirûnder stiet in list fan resinte gearfoegings fan ien side-skiednis nei in oaren.",
-       "history-title": "Sideskiednis fan \"$1\"",
+       "history-title": "$1: ferzjeskiednis",
        "lineno": "Rigel $1:",
        "compareselectedversions": "Ferlykje selektearre ferzjes",
        "showhideselectedversions": "Oantikke ferzjes wol/net sjen litte",
        "searchrelated": "besibbe",
        "searchall": "alle",
        "showingresults": "{{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1</strong> resultaten}} fan #<strong>$2</strong> ôf.",
+       "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> fan <strong>$3</strong>|Resultaten <strong>$1 - $2</strong> fan <strong>$3</strong>}}",
        "search-nonefound": "Der binne gjin resultaten foar Jo sykopdracht.",
        "powersearch-legend": "Sykje",
        "powersearch-ns": "Sykje op nammeromten:",
        "rc_categories": "Alline kategoryen (skiede mei in \"|\")",
        "rc_categories_any": "Elk",
        "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} nei de wiziging",
        "newsectionsummary": "/* $1 */ nije seksje",
        "rc-enhanced-expand": "Details werjaan",
        "rc-enhanced-hide": "Details ferskûlje",
        "whatlinkshere-hideredirs": "$1 trochferwizings",
        "whatlinkshere-hidetrans": "$1 trânsklúzjes",
        "whatlinkshere-hidelinks": "$1 keppelings",
+       "whatlinkshere-filters": "Filters",
        "blockip": "Slút {{GENDER:$1|meidogger}} út",
        "blockip-legend": "Slút brûker út",
        "blockiptext": "Brûk dizze fjilden om in meidogger fan skriuwtagong út te sluten.\nDat soe allinnich fanwege fandalisme dien wurde moatte, sa't de\n[[{{MediaWiki:Policy-url}}|útslut-rie]] it oanjout.\nMeld de krekte reden! Neam bygelyks de siden dy't oantaaste waarden.",
        "spamprotectiontext": "De side dy't jo fêstlizze woene is blokkearre troch in spam filter. Dit wurdt wierskynlik feroarsake troch in ferwizing nei in ekstern webstee.",
        "spamprotectionmatch": "De neikommende tekst hat it spam filter aktivearre: $1",
        "pageinfo-redirects-value": "$1",
+       "pageinfo-toolboxlink": "Sidegegevens",
        "pageinfo-contentpage-yes": "Ja",
        "pageinfo-protect-cascading-yes": "Ja",
        "markaspatrolleddiff": "Markearje as kontroleare",
        "file-info-size-pages": "$1 × $2 pixels, triemgrutte: $3, MIME-type: $4, $5 {{PLURAL:$5|side|siden}}",
        "file-nohires": "Gjin hegere resolúsje beskikber.",
        "svg-long-desc": "SVG-triem, nominaal $1 × $2 pixels, triemgrutte: $3",
-       "show-big-image": "Hegere resolúsje",
+       "show-big-image": "Oarspronklike triem",
        "show-big-image-size": "$1 × $2 pixels",
        "newimages": "Nije ôfbylden",
        "imagelisttext": "Dit is in list fan '''$1''' {{PLURAL:$1|triem|triemen}}, op $2.",
        "metadata-collapse": "Ferskûlje útwreide details",
        "metadata-fields": "De EXIF-metadatafjilden yn dit berjocht steane op in ôfbyldingsside as de metadatatabel ynklapt is. Oare fjilden wurde ferburgen.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "metadata-langitem-default": "$1",
+       "exif-orientation": "Oriïntaasje",
        "exif-samplesperpixel": "Oantal komponinten",
        "exif-xresolution": "Horizontale resolúsje",
        "exif-yresolution": "Fertikale resolúsje",
        "exif-imagedescription": "Ofbylding titel",
        "exif-make": "Kamera makker",
+       "exif-model": "Kameramodel",
+       "exif-software": "Brûkte software",
        "exif-artist": "Auteur",
        "exif-exifversion": "Exif-ferzje",
        "exif-colorspace": "Kleurromte",
        "exif-compressedbitsperpixel": "Ofbylding kompresjemetoade",
        "exif-usercomment": "Opmerkings",
        "exif-relatedsoundfile": "Besibbe audiotriem",
+       "exif-datetimeoriginal": "Tiidstip gegevensoanmaak",
+       "exif-datetimedigitized": "Tiidstip digitalisearring",
        "exif-exposuretime-format": "$1 sek ($2)",
        "exif-fnumber-format": "f/$1",
        "exif-shutterspeedvalue": "APEX-slutertiid",
        "watchlisttools-view": "Folchlist besjen",
        "watchlisttools-edit": "Folchlist besjen en bewurkje",
        "watchlisttools-raw": "Rûge folchlist bewurkje",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|oerlis]])",
        "version": "Ferzje",
        "version-extensions": "Ynstallearre útwreidings",
        "version-specialpages": "Bysûndere siden",
index 8096ff6..4b1b64d 100644 (file)
        "readonly_lag": "A base de datos bloqueouse automaticamente mentres os servidores levan a cabo a sincronización co servidor principal",
        "internalerror": "Erro interno",
        "internalerror_info": "Erro interno: $1",
+       "internalerror-fatal-exception": "Excepción grave de tipo \"$1\"",
        "filecopyerror": "Non se puido copiar o ficheiro \"$1\" en \"$2\".",
        "filerenameerror": "Non se puido cambiar o nome do ficheiro \"$1\" a \"$2\".",
        "filedeleteerror": "Non se deu borrado o ficheiro \"$1\".",
        "showpreview": "Mostrar a vista previa",
        "showdiff": "Mostrar os cambios",
        "blankarticle": "<strong>Advertencia:</strong> A páxina que está a piques de crear está baleira.\nSe preme no botón \"{{int:savearticle}}\" outra vez, a páxina crearase sen contido.",
-       "anoneditwarning": "<strong>Aviso:</strong> Non accedeu ao sistema. O seu enderezo IP será rexistado no histórico de edicións desta páxina. Se <strong>[$1 accede ao sistema]</strong> ou <strong>[$2 crea unha conta]</strong>, as súas edicións serán rexistadas co seu nome de usuario, ademais doutros beneficios.",
+       "anoneditwarning": "<strong>Aviso:</strong> Non accedeu ao sistema. O seu enderezo IP será visible se fai algunha edición. Se <strong>[$1 accede ao sistema]</strong> ou <strong>[$2 crea unha conta]</strong>, as súas edicións serán atribuídas ao seu nome de usuario e obterá outros beneficios.",
        "anonpreviewwarning": "''Non accedeu ao sistema. Se garda a páxina, o seu enderezo IP quedará rexistrado no historial de edicións.''",
        "missingsummary": "'''Aviso:''' Esqueceu incluír o texto do campo resumo.\nSe preme en \"{{int:savearticle}}\" a súa edición gardarase sen ningunha descrición da edición.",
        "selfredirect": "<strong>Atención:</strong> Está redirecionando esta páxina a ela mesma. Vostede pode ter especificado a páxina incorrecta para a redireción, ou pode que estea a editar a páxina incorrecta. Se preme \"{{int:savearticle}}\" de novo, crearase a redireción de tódolos xeitos.",
        "unusedimages": "Imaxes sen uso",
        "wantedcategories": "Categorías requiridas",
        "wantedpages": "Páxinas requiridas",
+       "wantedpages-summary": "Lista de páxinas inexistentes con máis ligazóns cara a elas, excluíndo as páxinas que só teñen redireccións cara a elas. Para consultar a lista de páxinas inexistentes que teñen redireccións cara a elas, véxase [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Título inválido fixado nos resultados: $1",
        "wantedfiles": "Ficheiros requiridos",
        "wantedfiletext-cat": "Os seguintes ficheiros están en uso, pero non existen. É posible que aparezan ficheiros de repositoroios externos, malia que existan. Calquera falso positivo estará <del>riscado</del>. Ademais, as páxinas que inclúen ficheiros que non existen están listadas en [[:$1]].",
        "thumbnail_image-missing": "Parece que falta o ficheiro: $1",
        "thumbnail_image-failure-limit": "Producíronse demasiados ($1 ou máis) intentos fallidos recentes de renderizar esta miniatura. Inténteo de novo máis tarde.",
        "import": "Importar páxinas",
-       "importinterwiki": "Importación transwiki",
-       "import-interwiki-text": "Seleccione o wiki e o título da páxina que queira importar.\nAs datas das revisións e os nomes dos editores manteranse.\nTodas as accións relacionadas coa importación entre wikis poden verse no [[Special:Log/import|rexistro de importacións]].",
+       "importinterwiki": "Importar doutro wiki",
+       "import-interwiki-text": "Seleccione o wiki e o título da páxina que queira importar.\nAs datas das revisións e os nomes dos editores manteranse.\nTodas as importacións doutros wikis poden consultarse no [[Special:Log/import|rexistro de importacións]].",
        "import-interwiki-sourcewiki": "Wiki de orixe:",
        "import-interwiki-sourcepage": "Páxina de orixe:",
        "import-interwiki-history": "Copiar todas as versións que hai no historial desta páxina",
        "importcantopen": "Non se pode abrir o ficheiro importado",
        "importbadinterwiki": "Ligazón interwiki incorrecta",
        "importsuccess": "A importación rematou!",
-       "importnosources": "Non se defininiu ningunha fonte de importación transwiki e os envíos directos dos historiais están desactivados.",
+       "importnosources": "Non se defininiu ningún wiki desde o que importar e os envíos directos dos historiais están desactivados.",
        "importnofile": "Non se enviou ningún ficheiro de importación.",
        "importuploaderrorsize": "Fallou o envío do ficheiro de importación. O ficheiro é máis grande que o tamaño de envío permitido.",
        "importuploaderrorpartial": "Fallou o envío do ficheiro de importación. O ficheiro só se enviou parcialmente.",
        "tags-create-invalid-chars": "Os nomes das etiquetas non poden conter nin comas (<code>,</code>) nin barras (<code>/</code>).",
        "tags-create-invalid-title-chars": "As páxinas non deben conter caracteres que non se poidan usar nos títulos das páxinas.",
        "tags-create-already-exists": "A páxina \"$1\" xa existe.",
+       "tags-create-warnings-above": "{{PLURAL:$2|Atopouse o seguinte erro|Atopáronse os seguintes erros}} ao intentar crear a etiqueta \"$1\":",
        "tags-create-warnings-below": "Desexa continuar creando a etiqueta?",
        "tags-delete-title": "Borrar etiqueta",
        "tags-delete-explanation-initial": "Está a piques de borrar a etiqueta \"$1\" da base de datos.",
+       "tags-delete-explanation-in-use": "Ha eliminarse {{PLURAL:$2|dunha revisión ou entrada|das $2 revisións e/ou entradas}} de rexistro {{PLURAL:$2|á|ás}} que actualmente se aplica.",
        "tags-delete-explanation-warning": "Esta acción é <strong>irreversible</strong> e nin sequera os administradores da base de datos poderán desfacela. Asegúrese de que é esta a etiqueta que desexa borrar.",
        "tags-delete-explanation-active": "<strong>A etiqueta \"$1\" segue activa e continuará aplicándose no futuro.</strong> Para evitalo, vaia ao(s) lugar(es) onde se establece a aplicación desta etiqueta e desactívea alí.",
        "tags-delete-reason": "Motivo:",
        "tags-delete-submit": "Eliminar esta etiqueta irreversiblemente",
        "tags-delete-not-allowed": "As etiquetas definidas por unha extensión non se poden borrar, agás que a extensión específica o permita.",
        "tags-delete-not-found": "A páxina \"$1\" non existe.",
-       "tags-delete-too-many-uses": "A etiqueta \"$1\" aplícase a máis de $2 {{PLURAL:$2|revision|revisions}}, polo que non pode borrarse.",
+       "tags-delete-too-many-uses": "A etiqueta \"$1\" aplícase a máis de $2 {{PLURAL:$2|revisión|revisións}}; isto significa que non se pode borrar.",
+       "tags-delete-warnings-after-delete": "A etiqueta \"$1\" borrouse correctamente; con todo, {{PLURAL:$2|atopouse o seguinte erro|atopáronse os seguintes erros}}:",
        "tags-activate-title": "Activar etiqueta",
        "tags-activate-question": "Está a piques de activar a etiqueta\"$1\".",
        "tags-activate-reason": "Motivo:",
        "revdelete-uname-unhid": "descubriu o nome de usuario",
        "revdelete-restricted": "aplicou restricións aos administradores",
        "revdelete-unrestricted": "eliminou restricións aos administradores",
+       "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} a {{GENDER:$4|$3}} cun tempo de duración de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} a {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|cambiou}} as configuracións do bloqueo de {{GENDER:$4|$3}} cunha caducidade de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} a {{GENDER:$4|$3}} cun tempo de duración de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|cambiou}} as configuracións do bloqueo de {{GENDER:$4|$3}} cunha caducidade de $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|fusionou}} \"$3\" con \"$4\" (revisións ata o $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\"",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\" sen deixar unha redirección",
        "log-name-managetags": "Rexistro de xestión de etiquetas",
        "log-description-managetags": "Esta páxina contén unha lista das tarefas de xestión relacionadas con [[Special:Tags|tags]]. No rexistro figuran só aquelas accións realizadas de forma manual por un administrador; pódense crear ou borrar etiquetas por medio do software wiki sen que se engada unha nova entrada ao rexistro.",
        "logentry-managetags-create": "$1 {{GENDER:$2|created}} a etiqueta \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|borrou}} a etiqueta \"$4\" (eliminouse de $5 {{PLURAL:$5|revisión ou entrada de rexistro|revisións e/ou entradas de rexistro}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|activou}} a etiqueta \"$4\" para o seu uso por usuarios e bots",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|desactivou}} a etiqueta \"$4\" para impedir o seu uso por usuarios e bots",
        "rightsnone": "(ningún)",
        "revdelete-summary": "o resumo de edición",
        "feedback-bugornote": "Se está listo para describir un problema técnico en detalle, [$1 informe do erro].\nEn caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario aparecerá na páxina \"[$3 $2]\" xunto ao seu nome de usuario e o navegador que está usando.",
        "json-error-utf8": "Hai caracteres UTF-8 incorrectos, trátase probablemente dun problema de codificación.",
        "json-error-recursion": "Atopáronse unha ou máis referencias recursivas no valor para codificar.",
        "json-error-inf-or-nan": "Atopáronse un ou máis valores NAN ou INF no valor para codificar.",
-       "json-error-unsupported-type": "Indicouse un valor dun tipo que non se pode codificar."
+       "json-error-unsupported-type": "Indicouse un valor dun tipo que non se pode codificar.",
+       "headline-anchor-title": "Ligazón a esta sección"
 }
index 72adfca..3723585 100644 (file)
@@ -21,7 +21,8 @@
                        "RaviC",
                        "Sushant savla",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Vyom"
                ]
        },
        "tog-underline": "કડીઓની નીચે લીટી (અંડરલાઇન):",
@@ -48,7 +49,7 @@
        "tog-shownumberswatching": "ધ્યાન રાખતા સભ્યોની સંખ્યા બતાવો",
        "tog-oldsig": "હાલના હસ્તાક્ષર:",
        "tog-fancysig": "હસ્તાક્ષરનો વિકિલખાણ તરીકે ઉપયોગ કરો (સ્વચાલિત કડી વગર)",
-       "tog-uselivepreview": "જીવંત પૂર્વદર્શન વાપરો (પ્રાયોગીક)",
+       "tog-uselivepreview": "જીવંત પૂર્વદર્શન વાપરો",
        "tog-forceeditsummary": "કોરો 'ફેરફાર સારાંશ' ઉમેરતા પહેલા મને ચેતવો",
        "tog-watchlisthideown": "'મારી ધ્યાનસુચી'માં મે કરેલા ફેરફારો છુપાવો",
        "tog-watchlisthidebots": "ધ્યાનસુચીમાં બોટ દ્વારા થયેલા ફેરફાર સંતાડો.",
        "otherlanguages": "અન્ય ભાષાઓમાં",
        "redirectedfrom": "($1 થી અહીં વાળેલું)",
        "redirectpagesub": "પાનું અન્યત્ર વાળો",
+       "redirectto": "દિશાનિર્દેશિત",
        "lastmodifiedat": "આ પાનામાં છેલ્લો ફેરફાર $1ના રોજ $2 વાગ્યે થયો.",
        "viewcount": "આ પાનું {{PLURAL:$1|એક|$1}} વખત જોવામાં આવ્યું છે.",
        "protectedpage": "સંરક્ષિત પાનું",
        "pool-timeout": "સમય સમાપ્ત -  સ્થગિતતા પ્રતિક્ષીત",
        "pool-queuefull": "(Pool) કતાર પૂરી ભરેલી છે",
        "pool-errorunknown": "અજ્ઞાત ત્રુટિ",
+       "poolcounter-usage-error": "વપરાશ ક્ષતિ: $1",
        "aboutsite": "{{SITENAME}} વિષે",
        "aboutpage": "Project:વિષે",
        "copyright": "અલગથી ઉલ્લેખ ન કરાયો હોય ત્યાં સુધી માહિતી $1 હેઠળ ઉપલબ્ધ છે.",
        "gotaccountlink": "પ્રવેશ કરો",
        "userlogin-resetlink": "પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?",
        "userlogin-resetpassword-link": "તમારો પાસવર્ડ ભૂલી ગયા છો?",
+       "userlogin-helplink2": "પ્રવેશ કરવા માટે મદદ",
        "userlogin-loggedin": "તમે પહેલેથી {{GENDER:$1|$1}} તરીકે પ્રવેશ કરેલો જ છે.\nબીજા સભ્ય તરીકે પ્રવેશ કરવા માટે નીચેનું ફોર્મ વાપરો.",
        "userlogin-createanother": "બીજું ખાતું બનાવો",
        "createacct-emailrequired": "ઇમેલ સરનામું",
        "preview": "પૂર્વાવલોકન",
        "showpreview": "ઝલક દર્શાવો",
        "showdiff": "ફેરફારો દર્શાવો",
-       "anoneditwarning": "'''ચેતવણી:''' તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે.",
+       "anoneditwarning": "<strong>ચેતવણી:</strong> તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે અને તમારૂં આઈ.પી. લોકો જાહેર રીતે જોઈ શકશે. માટે <strong>[$1 પ્રવેશ કરો]</strong> અથવા તમે <strong>[$2 ખાતું બનાવો]</strong> તો ફેરફારો તમારા સભ્યનામ હેઠળ થશે અને અન્ય ફાયદાઓ પણ મળશે.",
        "anonpreviewwarning": "તમે સભ્યનામથી પ્રવેશ કર્યો નથી,આ પાનું ઈતિહાસમાંતમારા IP સરનામાના નામે  સાચવવામાં આવશે",
        "missingsummary": "'''ચેતવણી:''' તમે ફેરફારનો સારંશ નથી આપ્યો.\nજો તમે \"{{int:savearticle}}\"  પર ક્લીક કરશો તો તમરો ફેરફારા સારાઁશાવગરાસાચવવામાં આવશે",
        "missingcommenttext": "કૃપા કરી નીચે ટીપ્પણી લખો.",
        "rev-deleted-event": "(લોગ ક્રિયા હટાવાઈ)",
        "rev-deleted-user-contribs": "[સભ્યનામ કે IP સરનામું  હટાવી દેવાયું છે - યોગદાનામાં આ ફેરફાર અદ્રશ્ય છે]",
        "rev-deleted-text-permission": "આ પુનરાવર્તન હટાવી દેવાયું છે\nઆની વિસ્તરીત માહિતી અહીં મળશે [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-text-permission": "આ પાનાં પરનું પુનરાવર્તન <strong>છુપાવવામાં</strong> આવ્યું છે. તેની વધુ વિગત [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} છુપાવાયેલના લોગ] પરથી મળશે.",
        "rev-deleted-text-unhide": "આ પાનાની નવી આવૃત્તિ ''હટાવી છે '''.\nવિગતો શોધી શકાય છે [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nતમે હજુ પણ [$1 view this revision] આ આવૃત્તિ જોવા શકો છો જો તમે આગલ વધવા  માંગો તો.",
        "rev-suppressed-text-unhide": "આ પાના ફેરફારો ''' સંતાડવામાં ''' આવ્યાં છે.\nતેની વિગતો અહીં શોધી શકાય છે [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nતમે હજુ પણ [$1 view this revision] આ આવૃત્તિ જોઈશકો છો જો તમે આગળ વધવા માંગો તો.",
        "rev-deleted-text-view": "આ પાનું આવૃત્તિ''ગયેલ છે '''કાઢી.\nતમે તેને જોઈ શકે છે; વિગતો શોધી શકાય છે [{{fullurl: {{# વિશેષ:}} લોગ / કાઢી | પાનું = {{FULLPAGENAMEE}}}} કાઢી નાંખવાનું લોગ].",
        "revdelete-no-file": "વર્ણવેલી ફાઈલ અસ્તિત્વમાં નથી",
        "revdelete-show-file-confirm": "શું તમને ખાત્રી છે કેતમે $2 તારીખ $3 વાગ્યા સુધીના \"<nowiki>$1</nowiki>\" ફાઇલ ના ફેરફાર જોવા માંગો છો?",
        "revdelete-show-file-submit": "હા",
+       "revdelete-selected-text": "[[:$2]]: નું {{PLURAL:$1|Selected revision|પસંદ કરાયેલ પુનરાવર્તન}}",
        "logdelete-selected": "{{PLURAL:$1|પસંદગી કરેલ લોગ ઘટના | પસંદગી કરેલ લોગ ઘટનાઓ }}:",
        "revdelete-confirm": "કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું  [[{{MediaWiki:Policy-url}}|the policy]] અ6તર્ગત કરી રહ્યાં છો.",
        "revdelete-suppress-text": "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:\n* સંભવતઃ ભયાજનક માહિતી \n* અયોગ્ય નિજી માહિતી \n*: ''ઘરનું સરનામું અને ટેલિફોન નંબર, રાષ્ટ્રીય ઓળખ ક્રમાંકો વગેરે.''",
        "revdelete-unsuppress": "સમા કરાયેલા પુનરાવર્તનો પરના પ્રતિબંધ હટાવો",
        "revdelete-log": "કારણ:",
        "revdelete-submit": "પસંદ કરેલા {{PLURAL:$1|ફેરફાર|ફેરફારો}} પર લગાડો",
-       "revdelete-success": "પà«\81નરવરà«\8dતન àª¦à«\8dરશà«\8dયતાસફળતા પૂર્વક અદ્યતન બનાવાઈ",
+       "revdelete-success": "પà«\81નરાવરà«\8dતન àª¦à«\8dરશà«\8dયતા સફળતા પૂર્વક અદ્યતન બનાવાઈ",
        "revdelete-failure": "'''પુનરાવર્તનની દ્રશ્યતા બદલીન શકાઈ:'''\n$1",
-       "logdelete-success": "'''લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ'''",
+       "logdelete-success": "<strong>લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ</strong>",
        "logdelete-failure": "'''લોગની દ્રશ્યતા ગોઠવી ન શકાઈ :'''\n$1",
        "revdel-restore": "દૃષ્ટિક્ષમતા બદલો",
        "pagehist": "પાનાનો ઇતિહાસ",
        "license-nopreview": "(ઝલક મોજુદ નથી)",
        "upload_source_url": "(યોગ્ય, જાહેર URL માંથી તમે પસંદ કરેલ ફાઇલ)",
        "upload_source_file": "(તમારા કોમ્પ્યુટર પરની તમે પસંદ કરેલી એક ફાઇલ)",
+       "listfiles-delete": "દૂર કરો",
        "listfiles-summary": "આ વિશિષ્ટ પાનું બધી અપલોડ કરાયેલી ફાઈલો દર્શાવે છે.",
        "listfiles_search_for": "મિડિયા નામ શોધો:",
        "imgfile": "ફાઇલ",
        "randomincategory": "શ્રેણીમાં ગમે તે પાનું",
        "randomincategory-invalidcategory": "\"$1\" એ યોગ્ય શ્રેણી નામ નથી.",
        "randomincategory-nopages": "[[:Category:$1|$1]] વર્ગમાં કોઇ પાનું નથી.",
+       "randomincategory-category": "શ્રેણી:",
        "randomredirect": "દિશાહીન  નિર્દેશન",
        "randomredirect-nopages": "નામ સ્થળ \"$1\" માં કોઇ દિશા નિર્દેશન નથી",
        "statistics": "આંકડાકીય માહિતી",
        "logentry-delete-restore": "$1 {{GENDER:$2|પુનઃસંગ્રહ}} પાનું $3",
        "logentry-delete-event": "$1 એ {{PLURAL:$5|લૉગ ઘટના|$5 લૉગ ઘટનાઓ}} ની દ્રશ્યતા $3 પર {{GENDER:$2|બદલેલ}} છે: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | સુધારણા | $5 આવૃત્તિઓ}} $3 પાનાં પર: $4",
-       "logentry-delete-event-legacy": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ $3 પર લોગ ઘટનાઓ દૃશ્યતા",
+       "logentry-delete-event-legacy": "$1 એ $3 પર ફેરફારની દૃશ્યતા બદલી",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
        "logentry-suppress-delete": "$1 એ $3 પાનું {{GENDER:$2|દબાવ્યું}}",
-       "logentry-suppress-event": "$1  (છાની માહિતી) {{GENDER:$2|બદલેલ}} બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}} ની દ્રશ્યતા $3 : $4",
+       "logentry-suppress-event": "$1  ખાનગી રીતે {{GENDER:$2|દ્વારા માહિતીની દૃશ્યતા}} $3 : $4 પર બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}}",
        "logentry-suppress-revision": "$1 છાની માહિતી {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | આવૃત્તિ એ | $5 આવૃત્તિઓ}}: $4 $3 પાનાં પર",
-       "logentry-suppress-event-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલો $3 પર લોગ ઘટનાઓ દૃશ્યતા",
+       "logentry-suppress-event-legacy": "$1એ ગુપ્ત રીતે $3 પર લોગ ઘટનાઓની દૃશ્યતા બદલી",
        "logentry-suppress-revision-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
-       "revdelete-content-hid": "સામàª\97à«\8dરà«\80 àª\9bà«\81પાયà«\87લા",
-       "revdelete-summary-hid": "ફેરફાર સાર છુપાયેલા",
+       "revdelete-content-hid": "માહિતà«\80 àª\9bà«\81પાવà«\80",
+       "revdelete-summary-hid": "ફેરફારનો સારાંશ છુપાવ્યો",
        "revdelete-uname-hid": "વપરાશકર્તા નામ છુપાયેલા",
-       "revdelete-content-unhid": "સામàª\97à«\8dરી છુપાવેલ નથીં",
-       "revdelete-summary-unhid": "ફેરફાર સાર છુપાવેલ નથીં",
+       "revdelete-content-unhid": "માહિતી છુપાવેલ નથીં",
+       "revdelete-summary-unhid": "ફેરફાર સારાંશ છુપાવેલ નથીં",
        "revdelete-uname-unhid": "વપરાશકર્તા નામ છુપાવેલ નથીં",
        "revdelete-restricted": "પ્રબઁધકોના ફેરફાર કરવા પર પ્રતિબંધ મુકાયો",
        "revdelete-unrestricted": "પ્રબંધકોના ફેરફાર કરવા પર પ્રતિબંધ હટાવાયો.",
index 4fdf7a0..23529df 100644 (file)
        "readonly_lag": "בסיס הנתונים ננעל אוטומטית כדי לאפשר לבסיסי הנתונים המשניים להתעדכן מהבסיס הראשי.",
        "internalerror": "שגיאה פנימית",
        "internalerror_info": "שגיאה פנימית: $1",
+       "internalerror-fatal-exception": "שגיאה חמורה מסוג \"$1\"",
        "filecopyerror": "העתקת \"$1\" ל־\"$2\" נכשלה.",
        "filerenameerror": "שינוי השם של \"$1\" ל־\"$2\" נכשל.",
        "filedeleteerror": "מחיקת \"$1\" נכשלה.",
        "viewsource": "הצגת מקור",
        "viewsource-title": "הצגת המקור של $1",
        "actionthrottled": "הפעולה הוגבלה",
-       "actionthrottledtext": "×\9b×\90×\9eצע×\99 × ×\92×\93 ×¡×¤×\90×\9d, ×§×\99×\99×\9eת ×\9e×\92×\91×\9c×\94 ×¢×\9c ×\91×\99צ×\95×¢ ×¤×¢×\95×\9c×\94 ×\96×\95 ×¤×¢×\9e×\99×\9d ×¨×\91×\95ת ×\9e×\93×\99 ×\91×\96×\9e×\9f ×§×¦×¨, ×\95×\97ר×\92ת ×\9e×\94×\9e×\92×\91×\9c×\94 ×\94×\96×\95.\nנא לנסות שוב בעוד מספר דקות.",
+       "actionthrottledtext": "×\9b×\90×\9eצע×\99 × ×\92×\93 ×¡×¤×\90×\9d, ×§×\99×\99×\9eת ×\9e×\92×\91×\9c×\94 ×¢×\9c ×\91×\99צ×\95×¢ ×¤×¢×\95×\9c×\94 ×\96×\95 ×¤×¢×\9e×\99×\9d ×¨×\91×\95ת ×\9e×\93×\99 ×\91×\96×\9e×\9f ×§×¦×¨, ×\95×\97ר×\92ת ×\9e×\94×\9e×\92×\91×\9c×\94 ×\94×\96×\90ת.\nנא לנסות שוב בעוד מספר דקות.",
        "protectedpagetext": "דף זה מוגן כדי למנוע עריכה ופעולות אחרות.",
        "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו:",
        "viewyourtext": "באפשרותך לצפות בטקסט המקור של <strong>העריכות שלך</strong> בדף הזה ולהעתיקו:",
        "invalidtitle-knownnamespace": "כותרת בלתי־תקינה עם מרחב השם \"$2\" ושם דף \"$3\"",
        "invalidtitle-unknownnamespace": "כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף \"$2\"",
        "exception-nologin": "לא בחשבון",
-       "exception-nologin-text": "×\90× ×\90 ×\94×\99×\9bנס×\95 ×\9c×\97ש×\91×\95×\9f ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\95.",
-       "exception-nologin-text-manual": "× ×\93רשת $1 ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\95.",
+       "exception-nologin-text": "× ×\93רשת ×\9b× ×\99ס×\94 ×\9c×\97ש×\91×\95×\9f ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\90ת.",
+       "exception-nologin-text-manual": "× ×\93רשת $1 ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\90ת.",
        "virus-badscanner": "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
        "virus-scanfailed": "הסריקה נכשלה (קוד: $1)",
        "virus-unknownscanner": "אנטי־וירוס בלתי ידוע:",
        "eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.",
        "throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.",
        "mailerror": "שגיאה בשליחת דואר: $1",
-       "acct_creation_throttle_hit": "×\9e×\91קר×\99×\9d ×\91×\90תר ×\96×\94 ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9b×\9d ×\9b×\91ר ×\99צר×\95 {{PLURAL:$1|×\97ש×\91×\95×\9f ×\90×\97×\93|$1 ×\97ש×\91×\95× ×\95ת}} ×\91×\99×\95×\9d ×\94×\90×\97ר×\95×\9f. ×\96×\94×\95 ×\94×\9eקס×\99×\9e×\95×\9d ×\94×\9e×\95תר ×\91תק×\95פ×\94 ×\96×\95.\n×\9cפ×\99×\9b×\9a, ×\9e×\91קר×\99×\9d ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95 לא יכולים ליצור חשבונות נוספים ברגע זה.",
+       "acct_creation_throttle_hit": "×\9e×\91קר×\99×\9d ×\91×\90תר ×\96×\94 ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9b×\9d ×\9b×\91ר ×\99צר×\95 {{PLURAL:$1|×\97ש×\91×\95×\9f ×\90×\97×\93|$1 ×\97ש×\91×\95× ×\95ת}} ×\91×\99×\95×\9d ×\94×\90×\97ר×\95×\9f. ×\96×\94×\95 ×\94×\9eקס×\99×\9e×\95×\9d ×\94×\9e×\95תר ×\91תק×\95פ×\94 ×\96×\95.\n×\9cפ×\99×\9b×\9a, ×\9e×\91קר×\99×\9d ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת לא יכולים ליצור חשבונות נוספים ברגע זה.",
        "emailauthenticated": "כתובת הדוא\"ל שלך אומתה ב־$3, $2.",
        "emailnotauthenticated": "כתובת הדוא\"ל שלכם עדיין לא אומתה.\nלא יישלח אליכם דוא\"ל עבור אף אחת מהתכונות הבאות.",
        "noemailprefs": "יש לציין כתובת דוא\"ל בהעדפות שלך כדי שתכונות אלה יעבדו.",
        "passwordreset-capture-help": "אם תסמנו תיבה זו, הדואר האלקטרוני (יחד עם הסיסמה הזמנית) יוצג לכם במקביל לשליחתו למשתמש.",
        "passwordreset-email": "כתובת דוא\"ל:",
        "passwordreset-emailtitle": "פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}",
-       "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}\nשייכים לכתובת הדואר האלקטרוני הזו:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
-       "passwordreset-emailtext-user": "ה{{GENDER:$1|משתמש|משתמשת}} $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} {{GENDER:$1|ביקש|ביקשה}} איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזו:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+       "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}}\nלכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+       "passwordreset-emailtext-user": "{{GENDER:$1|המשתמש|המשתמשת}} $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} {{GENDER:$1|ביקש|ביקשה}} איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
        "passwordreset-emailelement": "שם משתמש: $1\nסיסמה זמנית: $2",
        "passwordreset-emailsent": "נשלח דואר אלקטרוני לאיפוס הסיסמה.",
        "passwordreset-emailsent-capture": "נשלח דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן.",
        "cascadeprotectedwarning": "'''אזהרה:''' דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו, כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
        "titleprotectedwarning": "'''אזהרה: דף זה מוגן כך שדרושות [[Special:ListGroupRights|הרשאות מסוימות]] כדי ליצור אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "templatesused": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בדף זה:",
-       "templatesusedpreview": "{{PLURAL:$1|ת×\91× ×\99ת ×\94×\9e×\95פ×\99×¢×\94|ת×\91× ×\99×\95ת ×\94×\9e×\95פ×\99×¢×\95ת}} ×\91תצ×\95×\92×\94 ×\94×\9eק×\93×\99×\9e×\94 ×\94×\96×\95:",
+       "templatesusedpreview": "{{PLURAL:$1|ת×\91× ×\99ת ×\94×\9e×\95פ×\99×¢×\94|ת×\91× ×\99×\95ת ×\94×\9e×\95פ×\99×¢×\95ת}} ×\91תצ×\95×\92×\94 ×\94×\9eק×\93×\99×\9e×\94 ×\94×\96×\90ת:",
        "templatesusedsection": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בפסקה זו:",
        "template-protected": "(מוגנת)",
        "template-semiprotected": "(מוגנת חלקית)",
        "undo-summary": "ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])",
        "undo-summary-username-hidden": "ביטול גרסה $1 של משתמש מוסתר",
        "cantcreateaccounttitle": "לא ניתן ליצור את החשבון",
-       "cantcreateaccount-text": "×\90פשר×\95ת ×\99צ×\99רת ×\94×\97ש×\91×\95× ×\95ת ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95 ('''$1''') נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
+       "cantcreateaccount-text": "×\90פשר×\95ת ×\99צ×\99רת ×\94×\97ש×\91×\95× ×\95ת ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת (<strong>$1</strong>) נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
        "cantcreateaccount-range-text": "אפשרות יצירת החשבונות מכתובות IP בתוך הטווח '''$1''', כולל כתובת ה־IP שלך ('''$4'''), נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
        "viewpagelogs": "הצגת יומנים עבור דף זה",
        "nohistory": "אין היסטוריית שינויים עבור דף זה.",
        "rev-deleted-user": "(שם המשתמש הוסר)",
        "rev-deleted-event": "(פרטים מהיומן הוסרו)",
        "rev-deleted-user-contribs": "[שם המשתמש או כתובת ה־IP הוסרו – העריכה הוסתרה מדף התרומות]",
-       "rev-deleted-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
-       "rev-suppressed-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
-       "rev-deleted-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>× ×\9e×\97ק×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\9e×\97×\99ק×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\95] אם ברצונכם להמשיך.",
-       "rev-suppressed-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>×\94×\95×¢×\9c×\9e×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\94×¢×\9c×\9e×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\95] אם ברצונכם להמשיך.",
-       "rev-deleted-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\95 '''× ×\9e×\97ק×\94'''.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
-       "rev-suppressed-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>הועלמה</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
+       "rev-deleted-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
+       "rev-suppressed-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
+       "rev-deleted-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>× ×\9e×\97ק×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\9e×\97×\99ק×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\90ת] אם ברצונכם להמשיך.",
+       "rev-suppressed-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>×\94×\95×¢×\9c×\9e×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\94×¢×\9c×\9e×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\90ת] אם ברצונכם להמשיך.",
+       "rev-deleted-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>× ×\9e×\97ק×\94</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
+       "rev-suppressed-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>הועלמה</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
        "rev-deleted-no-diff": "אינכם יכולים לצפות בהבדלים בין הגרסאות שציינתם משום שאחת מהן '''נמחקה'''.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
        "rev-suppressed-no-diff": "אינכם יכולים לצפות בהבדלים בין הגרסאות שציינתם משום שאחת מהן '''נמחקה'''.",
        "rev-deleted-unhide-diff": "אחת מהגרסאות שביקשתם להשוות '''נמחקה'''.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].\nאתם עדיין יכולים [$1 לצפות בהבדלים בין הגרסאות] אם ברצונכם להמשיך.",
        "unusedimages": "קבצים שאינם בשימוש",
        "wantedcategories": "קטגוריות מבוקשות",
        "wantedpages": "דפים מבוקשים",
+       "wantedpages-summary": "רשימת דפים לא קיימים שמספר הקישורים אליהם הוא הגדול ביותר, למעט דפים שרק הפניות מקשרות אליהם. לרשימת דפים לא קיימים שיש הפניות המקשרות אליהם, ר' [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "כותרת בלתי תקינה ברשימת התוצאות: $1",
        "wantedfiles": "קבצים מבוקשים",
        "wantedfiletext-cat": "הקבצים הבאים נמצאים בשימוש, אך אינם קיימים. ייתכן שקבצים ממאגרים חיצוניים יהיו רשומים אף על פי שהם קיימים, אך שגיאות כאלה יהיו <del>מחוקות</del>. בנוסף, דפים שמשתמשים בקבצים שאינם קיימים רשומים בדף [[:$1]].",
        "thumbnail_image-type": "סוג התמונה אינו נתמך",
        "thumbnail_gd-library": "הגדרת הספריה GD אינה שלמה: חסרה הפונקציה $1",
        "thumbnail_image-missing": "נראה שהקובץ הבא חסר: $1",
-       "thumbnail_image-failure-limit": "×\94×\99×\95 ×\9c×\90×\97ר×\95× ×\94 × ×\99ס×\99×\95× ×\95ת ×¨×\91×\99×\9d ×\9e×\93×\99 ($1 ×\90×\95 ×\99×\95תר) ×\9c×\99צ×\95ר ×\90ת ×\94ת×\9e×\95× ×\94 ×\94×\9e×\9e×\95×\96ערת ×\94×\96×\95. ×\90× ×\95 × ×¡×\95 שוב מאוחר יותר.",
+       "thumbnail_image-failure-limit": "×\94×\99×\95 ×\9c×\90×\97ר×\95× ×\94 × ×\99ס×\99×\95× ×\95ת ×¨×\91×\99×\9d ×\9e×\93×\99 ($1 ×\90×\95 ×\99×\95תר) ×\9c×\99צ×\95ר ×\90ת ×\94ת×\9e×\95× ×\94 ×\94×\9e×\9e×\95×\96ערת ×\94×\96×\90ת. × ×\90 ×\9cנס×\95ת שוב מאוחר יותר.",
        "import": "ייבוא דפים",
-       "importinterwiki": "×\99×\99×\91×\95×\90 ×\91×\99×\9fÖ¾×\90תר×\99",
-       "import-interwiki-text": "×\90× ×\90 ×\91×\97ר×\95 ×\90תר ×\95×\99ק×\99 ×\95×\9b×\95תרת ×\93×£ ×\9c×\99×\99×\91×\95×\90.\nת×\90ר×\99×\9b×\99 ×\94ער×\99×\9b×\95ת ×\95ש×\9e×\95ת ×\94×¢×\95ר×\9b×\99×\9d ×\99×\99ש×\9eר×\95.\n×\9b×\9c ×¤×¢×\95×\9c×\95ת ×\94×\99×\99×\91×\95×\90 ×\94×\91×\99×\9fÖ¾×\90תר×\99 נשמרות ב[[Special:Log/import|יומן הייבוא]].",
+       "importinterwiki": "×\99×\99×\91×\95×\90 ×\9e×\90תר ×\95×\99ק×\99 ×\90×\97ר",
+       "import-interwiki-text": "×\90× ×\90 ×\91×\97ר×\95 ×\90תר ×\95×\99ק×\99 ×\95×\9b×\95תרת ×\93×£ ×\9c×\99×\99×\91×\95×\90.\nת×\90ר×\99×\9b×\99 ×\94ער×\99×\9b×\95ת ×\95ש×\9e×\95ת ×\94×¢×\95ר×\9b×\99×\9d ×\99×\99ש×\9eר×\95.\n×\9b×\9c ×¤×¢×\95×\9c×\95ת ×\94×\99×\99×\91×\95×\90 ×\9e×\90תר×\99 ×\95×\99ק×\99 ×\90×\97ר×\99×\9d נשמרות ב[[Special:Log/import|יומן הייבוא]].",
        "import-interwiki-sourcewiki": "אתר המקור:",
        "import-interwiki-sourcepage": "דף המקור:",
        "import-interwiki-history": "העתקת כל היסטוריית העריכות של דף זה",
        "importcantopen": "פתיחת קובץ הייבוא נכשלה",
        "importbadinterwiki": "קישור בינוויקי שגוי",
        "importsuccess": "הייבוא הושלם בהצלחה!",
-       "importnosources": "×\90×\99×\9f ×\9eק×\95ר×\95ת ×\9c×\99×\99×\91×\95×\90 ×\91×\99×\9fÖ¾×\90תר×\99, ×\95×\99×\99×\91×\95×\90 ×\99ש×\99ר ×©×\9c ×\93×£ ×¢×\9d ×\94×\99ס×\98×\95ר×\99×\94 ×\90×\99× ×\95 ×\9e×\90×\95פשר ×\9b×¢ת.",
+       "importnosources": "×\9c×\90 ×\94×\95×\92×\93ר×\95 ×\90תר×\99 ×\95×\99ק×\99 ×©×\9e×\94×\9d × ×\99ת×\9f ×\9c×\99×\99×\91×\90, ×\95×\90פשר×\95ת ×\94×\94×¢×\9c×\90×\94 ×\94×\99ש×\99ר×\94 ×©×\9c ×\93×£ ×¢×\9d ×\94×\99ס×\98×\95ר×\99×\94 ×\9e×\91×\95×\98×\9cת.",
        "importnofile": "לא הועלה קובץ ייבוא.",
        "importuploaderrorsize": "העלאת קובץ הייבוא נכשלה. הקובץ היה גדול יותר מגודל ההעלאה המותר.",
        "importuploaderrorpartial": "העלאת קובץ הייבוא נכשלה. הקובץ הועלה באופן חלקי בלבד.",
        "confirmemail_success": "כתובת הדוא\"ל שלך אושרה.\nכעת באפשרותך [[Special:UserLogin|להיכנס לחשבון שלך]] וליהנות מהאתר.",
        "confirmemail_loggedin": "כתובת הדוא\"ל שלך אושרה כעת.",
        "confirmemail_subject": "קוד אימות דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}}",
-       "confirmemail_body": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95: $1),\nרש×\9d ×\90ת ×\94×\97ש×\91×\95×\9f \"$2\" ×¢×\9d ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×\94×\96×\95 ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם *לא* אתם רשמתם את החשבון, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
-       "confirmemail_body_changed": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95: $1),\nש×\99× ×\94 ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\95 ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
-       "confirmemail_body_set": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95: $1),\n×\94×\92×\93×\99ר ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\95 ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+       "confirmemail_body": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת: $1),\nרש×\9d ×\90ת ×\94×\97ש×\91×\95×\9f \"$2\" ×¢×\9d ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×\94×\96×\90ת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם *לא* אתם רשמתם את החשבון, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+       "confirmemail_body_changed": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת: $1),\nש×\99× ×\94 ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\90ת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+       "confirmemail_body_set": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת: $1),\n×\94×\92×\93×\99ר ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\90ת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
        "confirmemail_invalidated": "אימות כתובת הדוא\"ל בוטל",
        "invalidateemail": "ביטול האימות של כתובת הדוא\"ל",
        "scarytranscludedisabled": "[הכללת דפים בין אתרים מבוטלת]",
        "revdelete-uname-unhid": "הסתרת שם המשתמש בוטלה",
        "revdelete-restricted": "נוספו הגבלות למפעילי מערכת",
        "revdelete-unrestricted": "הוסרו הגבלות ממפעילי מערכת",
+       "logentry-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|שחרר|שחררה}} את החסימה של {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|מיזג|מיזגה}} את $3 לתוך $4 (גרסאות עד $5)",
        "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה",
        "json-error-utf8": "תווי UTF-8 פגומים, ייתכן שהקידוד שגוי",
        "json-error-recursion": "הפניה רקורסיבית אחת או יותר בערך שנועד לקידוד",
        "json-error-inf-or-nan": "ערך NAN או INF אחד או יותר בערך שנועד לקידוד",
-       "json-error-unsupported-type": "ניתן ערך מסוג שלא יכול להיות מקודד"
+       "json-error-unsupported-type": "ניתן ערך מסוג שלא יכול להיות מקודד",
+       "headline-anchor-title": "קישור לפסקה זו"
 }
index 1ac3c47..c4529fd 100644 (file)
        "preview": "झलक",
        "showpreview": "झलक दिखाएँ",
        "showdiff": "बदलाव दिखाएँ",
-       "anoneditwarning": "'''सावधान:''' आपने सत्रारंभ नहीं किया है। इस पृष्ठ के संपादन इतिहास में आपका आइ॰पी पता अंकित किया जाएगा।",
+       "anoneditwarning": "<strong>सावधान:</strong> आपने सत्रारंभ नहीं किया है। यदि आप सम्पादन करते हैं तो इस पृष्ठ के संपादन इतिहास में आपका आइ॰पी पता अंकित किया जाएगा। यदि आप <strong>[$1 लॉगिन]</strong> करते हैं अथवा <strong>[$2 खाता बनाते हैं]</strong> तो अन्य सुविधाओं के साथ-साथ आपके संपादनों का श्रेय आपके सदस्यनाम पर दिया जाएगा।",
        "anonpreviewwarning": "''आप लॉग्ड इन नहीं हैं। पृष्ठ सहेजने पर आपका आइ॰पी पता इस पृष्ठ के इतिहास में दर्ज किया जायेगा।''",
        "missingsummary": "'''अनुस्मारक:''' आपने संपादन सारांश नहीं दिया है।\nअगर आप दुबारा \"{{int:savearticle}}\" पर क्लिक करते हैं तो आपका संपादन बिना सारांश के संजोया जायेगा।",
        "missingcommenttext": "कृपया नीचे टिप्पणी दें।",
        "parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
        "language-converter-depth-warning": "भाषा कन्वर्टर गहराई सीमा से बाहर गया ( $1 )",
        "node-count-exceeded-category": "पृष्ठ जिनमें नोड-संख्या सीमा पार की गई है",
-       "node-count-exceeded-category-desc": "यह à¤\89न à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95à¥\80 à¤¶à¥\8dरà¥\87णà¥\80 à¤¹à¥\88 à¤\9cिनमà¥\87à¤\82 à¤¨à¥\8bड-सà¤\82à¤\96à¥\8dया à¤¸à¥\80मा à¤ªà¤¾à¤° à¤\95à¥\80 à¤\97यà¥\80 है।",
-       "node-count-exceeded-warning": "पृष्ठ ने नोड-संख्या पार की है",
+       "node-count-exceeded-category-desc": "यह à¤ªà¥\83षà¥\8dठ à¤¨à¥\8bड-सà¤\82à¤\96à¥\8dया à¤¸à¥\80मा à¤ªà¤¾à¤° à¤\95रता है।",
+       "node-count-exceeded-warning": "पृष्ठ ने नोड संख्या पार की है",
        "expansion-depth-exceeded-category": "पृष्ठ जिनमें विस्तार गहराई पार की गई है",
        "expansion-depth-exceeded-category-desc": "यह पृष्ठ विस्तार गहराई पार करता है।",
        "expansion-depth-exceeded-warning": "पृष्ठ में विस्तार गहराई पार की गई है",
        "history-feed-empty": "अनुरोधित पृष्ठ अस्तित्व में नहीं है।\nयह पृष्ठ या तो हटाया गया है या फिर इसका नाम बदल दिया गया है।\n[[Special:Search|विकि पर खोज]] का प्रयोग करें।",
        "rev-deleted-comment": "(सम्पादन सारांश हटाया)",
        "rev-deleted-user": "(सदस्यनाम हटाया)",
-       "rev-deleted-event": "(लà¥\89à¤\97 à¤\95ारà¥\8dय हटाया)",
+       "rev-deleted-event": "(लà¥\89à¤\97 à¤µà¤¿à¤µà¤°à¤£ हटाया)",
        "rev-deleted-user-contribs": "[सदस्यनाम अथवा आइ॰पी पता छुपाया गया - सम्पादन योगदानों में से छुपाया गया]",
        "rev-deleted-text-permission": "यह पृष्ठ अवतरण हटाया गया है।\nइसकी अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग] में पाई जा सकती है।",
        "rev-deleted-text-unhide": "यह पृष्ठ अवतरण हटाया गया है।\nइसकी अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग] में पाई जा सकती है।\nयदि आप चाहें तो इस अवतरण को [$1 देख सकते हैं]।",
        "revdelete-legend": "दृश्य प्रतिबंध निश्चित करें",
        "revdelete-hide-text": "अवरतण पाठ",
        "revdelete-hide-image": "फ़ाइल का पाठ छुपाएँ",
-       "revdelete-hide-name": "à¤\95à¥\8dरिया à¤\94र à¤²à¤\95à¥\8dषà¥\8dय को छुपाएँ",
+       "revdelete-hide-name": "लà¤\95à¥\8dषà¥\8dय à¤\94र à¤ªà¥\8dराà¤\9aलà¥\8bà¤\82 को छुपाएँ",
        "revdelete-hide-comment": "संपादन सारांश",
        "revdelete-hide-user": "संपादक का सदस्यनाम/आइ॰पी॰ पता",
        "revdelete-hide-restricted": "प्रबंधक सहित सभी सदस्यों से डाटा छुपाएँ",
        "searchrelated": "सम्बंधित",
        "searchall": "सभी",
        "showingresults": "नीचे क्रमांक '''$2''' से प्रारंभ कर के अधिकतम '''$1''' परिणाम {{PLURAL:$1|दिखाया गया है|दिखाए गए हैं}}।",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> में से <strong>$1</strong> परिणाम|<strong>$3</strong> में से परिणाम <strong>$1 - $2</strong>}}",
        "search-nonefound": "आपकी खोज से मेल खाते कोई परिणाम नहीं मिले।",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "नामस्थानों में खोजें:",
        "preferences": "मेरी वरीयताएँ",
        "mypreferences": "पसंद",
        "prefs-edits": "संपादन संख्या:",
-       "prefsnologintext2": "अपनी वरीयताओं को बदलने के लिए कृपया $1 करें।",
+       "prefsnologintext2": "अपनी वरीयताओं को बदलने के लिए कृपया लॉग इन करें।",
        "prefs-skin": "त्वचा",
        "skin-preview": "झलक",
        "datedefault": "खा़स पसंद नहीं",
        "gender-female": "मैं सम्पादन करती हूँ।",
        "prefs-help-gender": "यह जानकारी देना वैकल्पिक है।\nयह सॉफ़्टवेयर में लिंग के आधार पर आपके लिए सही संबोधन हेतु प्रयुक्त होता है।\nयह जानकारी सार्वजनिक होगी।",
        "email": "ई-मेल",
-       "prefs-help-realname": "à¤\86पà¤\95ा à¤\85सलà¥\80 à¤¨à¤¾à¤® à¤¦à¥\87ना à¤\86वशà¥\8dयà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88।\nयदि à¤\86प à¤ªà¥\8dरदान à¤\95रतà¥\87 à¤¹à¥\88à¤\82 à¤¤à¥\8b à¤\87सà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\86पà¤\95à¥\87 à¤¯à¥\8bà¤\97दानà¥\8bà¤\82 à¤\95à¥\87 à¤²à¤¿à¤¯à¥\87 à¤\86पà¤\95à¥\8b à¤¶à¥\8dरà¥\87य (attribution) à¤¦à¥\87नà¥\87 à¤\95à¥\87 à¤²à¤¿à¤¯à¥\87 à¤\95िया à¤\9cायà¥\87à¤\97ा।",
+       "prefs-help-realname": "असली नाम देना आवश्यक नहीं है।\nयदि आप प्रदान करते हैं तो इसका प्रयोग आपके योगदानों के लिये आपको श्रेय (attribution) देने के लिये किया जायेगा।",
        "prefs-help-email": "ई-मेल पता वैकल्पिक है, पर यदि आप अपना कूटशब्द भूल जाएँ तो इसके ज़रिए रीसेट किया जा सकता है।",
        "prefs-help-email-others": "आप अपनी पहचान उजागर किए बिना अन्य सदस्यों को अपने सदस्य या वार्ता पृष्ठ के द्वारा स्वयं से सम्पर्क करने दे सकते हैं।",
        "prefs-help-email-required": "ई-मेल पता आवश्यक है।",
        "right-deletedtext": "हटाया गया पाठ और हटाए गए अवतरणों के बीच अंतर देखें",
        "right-browsearchive": "हटाए गए पृष्ठ खोजें",
        "right-undelete": "पृष्ठ पुनर्स्थापित करें",
-       "right-suppressrevision": "पà¥\8dरबà¤\82धà¤\95à¥\8bà¤\82 à¤¸à¥\87 à¤\9bà¥\81पà¥\87 à¤¹à¥\81à¤\8f à¤\85वतरण à¤¦à¥\87à¤\96ें और पुनर्स्थापित करें",
+       "right-suppressrevision": "à¤\95िसà¥\80 à¤­à¥\80 à¤¸à¤¦à¤¸à¥\8dय à¤¸à¥\87 à¤\9bà¥\81पà¥\87 à¤¹à¥\81à¤\8f à¤\85वतरण à¤¦à¥\87à¤\96à¥\87à¤\82, à¤\9bà¥\81पायें और पुनर्स्थापित करें",
        "right-suppressionlog": "खासगी लॉग देखें",
        "right-block": "अन्य सदस्यों को सम्पादन करने से ब्लॉक करें",
        "right-blockemail": "सदस्यों को ई-मेल भेजने से ब्लॉक करें",
        "recentchanges-label-plusminus": "पृष्ठ आकार इस बाइट संख्या से बदला",
        "recentchanges-legend-heading": "'''कुंजी:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)",
-       "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) हुए बदलाव दर्शाए गये हैं।",
+       "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
        "rclistfrom": "$3 $2 से नये बदलाव दिखाएँ",
        "rcshowhideminor": "छोटे बदलाव $1",
        "rcshowhideminor-show": "दिखाएँ",
        "uploaderror": "अपलोड त्रुटि",
        "upload-recreate-warning": "'''चेतावनी: उस नाम की फ़ाइल हटाई या स्थानान्तरित की जा चुकी है।'''\n\nइस पृष्ठ के हटाने और स्थानान्तरण के लॉग यहाँ सन्दर्भ के लिए दिये हैं:",
        "uploadtext": "फ़ाइल अपलोड करने के लिए नीचे दिए फ़ॉर्म का प्रयोग करें।\n[[Special:FileList|अपलोड की गई फ़ाइलों की सूची]] से आप पहले पहले अपलोड की गई फ़ाइलों को देख सकते हैं और उनमें खोज सकते हैं। दोबारा अपलोड की गई फ़ाइलों को [[Special:Log/upload|अपलोड सूची]] में देखें, और मिटाई फ़ाइलों के लिए [[Special:Log/delete|हटाने की सूची]] देखें।\n\nकिसी पृष्ठ में फ़ाइल का प्रयोग करने के लिए नीचे दिए गये उदाहरणों के अनुसार कड़ियाँ बनाएँ।\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' फ़ाइल का पूरा आकार प्रयोग करने के लिये\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' पृष्ठ में बाईं ओर फ़ाइल का 200 पिक्सेल चौड़ा अवतरण \"alt text\" विवरण के साथ एक बक्से में प्रयोग करने के लिये\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' बिना फ़ाइल का प्रयोग किये केवल उसकी कड़ी जोड़ने के लिये",
-       "upload-permitted": "अनुमतित फ़ाइल प्रकार: $1।",
-       "upload-preferred": "पसंदीदा फ़ाइल प्रकार: $1।",
-       "upload-prohibited": "प्रतिबंधिक फ़ाइल प्रकार: $1।",
+       "upload-permitted": "अनुमतित फ़ाइल  {{PLURAL:$2|प्रकार}}: $1।",
+       "upload-preferred": "पसंदीदा फ़ाइल {{PLURAL:$2|प्रकार}}: $1।",
+       "upload-prohibited": "प्रतिबंधिक फ़ाइल {{PLURAL:$2|प्रकार}}: $1।",
        "uploadlogpage": "अपलोड लॉग",
        "uploadlogpagetext": "नीचे हाल ही में अपलोड की गई फ़ाइलों की सूची है।\nकृपया और द्रैश्यिक विवरण के लिए [[Special:NewFiles|नई फ़ाइलों की गैलरी]] देखें।",
        "filename": "फ़ाइल का नाम",
        "nolicense": "कुछ भी नहीं चुना",
        "licenses-edit": "लाइसेंस विकल्प सम्पादन",
        "license-nopreview": "(झलक उपलब्ध नहीं है)",
-       "upload_source_url": " (एक वैध, सभी जगहों से उपलब्ध यू॰आर॰एल)",
-       "upload_source_file": " (आपके कम्प्यूटर से फ़ाइल)",
+       "upload_source_url": "(आपकी चुनी फ़ाइल एक वैध, सार्वजनिक रूप से उपलब्ध यू॰आर॰एल से)",
+       "upload_source_file": "(आपके कम्प्यूटर से चुनी आपकी फ़ाइल)",
        "listfiles-delete": "हटाएँ",
        "listfiles-summary": "यह विशेष पृष्ठ सभी अपलोड की गई फ़ाइलें दर्शाता है।",
        "listfiles_search_for": "मीडिया नाम के लिये खोजें:",
        "pageswithprop-submit": "खोजें",
        "doubleredirects": "दुगुने पुनर्निर्देश",
        "doubleredirectstext": "यह पृष्ठ उन पृष्ठों की सूची देता है जो अन्य पुनर्निर्देशित पृष्ठों की ओर पुनर्निर्देशित हैं।\nहर कतार में पहले और दूसरे पुनर्निर्देशन की कड़ियाँ, तथा दूसरे पुनर्निर्देशन का लक्ष्य भी है, आमतौर पर यही \"वास्तविक\" लक्ष्यित पृष्ठ होगा, और पहला पुनर्देशन वास्तव में इसी को लक्ष्यित होना चाहिए।\n<del>काटी गई</del> प्रविष्टियाँ सुलझा दी गई हैं।",
-       "double-redirect-fixed-move": "[[$1]] की जगह बदली जा चुकी है।\nअब यह [[$2]] की ओर पुनर्निर्देशित होता है।",
-       "double-redirect-fixed-maintenance": "[[$1]] à¤¸à¥\87 [[$2]] à¤\95à¥\8b à¤¦à¥\81à¤\97à¥\81नà¥\87 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87श à¤\95à¥\8b ठीक कर रहा है।",
-       "double-redirect-fixer": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन मिस्त्री",
+       "double-redirect-fixed-move": "[[$1]] की जगह बदली जा चुकी है।\nअब यह स्वतः [[$2]] की ओर पुनर्प्रेषित होता है।",
+       "double-redirect-fixed-maintenance": "[[$1]] à¤¸à¥\87 [[$2]] à¤\95à¥\8b à¤¦à¥\81à¤\97à¥\81नà¥\87 à¤ªà¥\81नरà¥\8dपà¥\8dरà¥\87षण à¤\95à¥\8b à¤°à¤\96रà¤\96ाव à¤\95ारà¥\8dय à¤®à¥\87à¤\82 à¤¸à¥\8dवतà¤\83 ठीक कर रहा है।",
+       "double-redirect-fixer": "पà¥\81नरà¥\8dपà¥\8dरà¥\87षण मिस्त्री",
        "brokenredirects": "टूटे हुए पुनर्निर्देशन पृष्ठ",
        "brokenredirectstext": "निम्नोक्त पुनर्निर्देशन नामौजूद पृष्ठों की ओर ले जाते हैं:",
        "brokenredirects-edit": "संपादित करें",
        "mywatchlist": "ध्यानसूची",
        "watchlistfor2": "$1 $2 के लिए",
        "nowatchlist": "आपकी ध्यानसूची में कोई भी पृष्ठ नहीं हैं।",
-       "watchlistanontext": "अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया $1 करें।",
+       "watchlistanontext": "अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया लॉग इन करें।",
        "watchnologin": "लॉग इन नहीं किया है",
        "addwatch": "ध्यानसूची में जोड़ें",
        "addedwatchtext": "आपकी [[Special:Watchlist|ध्यानसूची]] में \"[[:$1]]\" पृष्ठ जोड़ दिया गया है।\nभविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे।",
        "watchlist-details": "वार्ता पृष्ठों के अलावा {{PLURAL:$1|$1 पृष्ठ}} आपकी ध्यानसूची में हैं।",
        "wlheader-enotif": "ई-मेल नोटिफ़िकेशन सक्षम हैं।",
        "wlheader-showupdated": "पृष्ठ जो आपके द्वारा देखे जाने के बाद बदले गये हैं '''बोल्ड''' दिखेंगे।",
-       "wlnote": "$3 को $4 बजे तक पिछले '''$2''' {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए '''$1'''}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
+       "wlnote": "$3 को $4 बजे तक पिछले <strong>$2</strong> {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए <strong>$1</strong>}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
        "wlshowlast": "पिछले $1 घंटे $2 दिन  देखें",
        "watchlist-options": "ध्यानसूची विकल्प",
        "watching": "ध्यान दे रहे हैं...",
        "exbeforeblank": "खाली करने से पहले पाठ था: '$1'",
        "delete-confirm": "\"$1\" को हटाएँ",
        "delete-legend": "हटाएँ",
-       "historywarning": "''' चेतावनी: ''' आप जो पृष्ठ हटाने जा रहे हैं उसके इतिहास में लगभग $1 {{PLURAL:$1|अवतरण}} हैं:",
+       "historywarning": "<strong>चेतावनी:<strong> आप जो पृष्ठ हटाने जा रहे हैं उसके इतिहास में $1 {{PLURAL:$1|अवतरण}} हैं:",
        "confirmdeletetext": "आप एक पृष्ठ को उसके सभी अवतरणों सहित हटाने जा रहे हैं।\nजाँच लें कि आप ये करना चाहते हैं, आप इसके पर्निआमों से अवगत हैं, और आप ये [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार कर रहे हैं।",
        "actioncomplete": "कार्य पूर्ण",
        "actionfailed": "क्रिया विफल",
        "autoblockid": "स्वतः अवरोध #$1",
        "block": "उपयोक्ता को अवरोधित करें।",
        "unblock": "उपयोक्ता पर अवरोधण हटाएँ",
-       "blockip": "अवरोधित करें",
+       "blockip": "{{GENDER:$1|सदस्य|सदस्या}} अवरोधित करें",
        "blockip-legend": "सदस्य को ब्लॉक करें",
        "blockiptext": "विशिष्ठ IP पते अथवा सदस्य नाम को लिखने के अधिकार से बाध्य करने के लिए निम्न पत्र का प्रयोग करें।\nयह सिर्फ बर्बरता को रोकने के लिए ही किया जाना चाहिए, और [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार ही करना चाहिए।\nनीचे विशिष्ठ कारण भी लिखें (उदाहरण के लिए, सटीक पृष्ठों को दर्शाते हुए, जिनमें बर्बरता की गई हो)।",
        "ipaddressorusername": "आईपी एड्रेस या सदस्यनाम:",
        "ipb-unblock-addr": "$1 को अनब्लॉक करें",
        "ipb-unblock": "सदस्य अथवा आईपी एड्रेस को अनब्लॉक करें",
        "ipb-blocklist": "सद्य ब्लॉक देखें",
-       "ipb-blocklist-contribs": "$1 के लिए योगदान",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} के लिए योगदान",
        "unblockip": "सदस्य को अनब्लॉक करें",
        "unblockiptext": "पहले ब्लॉक किये हुए आईपी एड्रेस या सदस्यनाम को अनब्लॉक करने के लिये नीचे दिया गया फार्म भरें।",
        "ipusubmit": "यह अवरोध हटाएँ",
        "import-upload": "XML डाटा अपलोड करें",
        "import-token-mismatch": "सत्र सामग्री खो गई है। \nकृपया पुनः प्रयास करें।",
        "import-invalid-interwiki": "इस विकि से आयात नहीं हो सकता है।",
-       "import-error-edit": "पृष्ठ \" $1 \" आयातित नहीं किया जासकता है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
-       "import-error-create": "पृष्ठ \" $1 \" आयातित नहीं है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
+       "import-error-edit": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
+       "import-error-create": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
        "import-error-interwiki": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि इसका नाम अंतरविकी कड़ियाँ बनाने के लिए आरक्षित है।",
        "import-error-special": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि यह एक ऐसे विशेष नामस्थान के अंतर्गत आता है जिसमें पृष्ठ नहीं बनाए जा सकते हैं।",
-       "import-error-invalid": "पà¥\83षà¥\8dठ \"$1\" à¤\86यात à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\97या à¤¹à¥\88 à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤\87सà¤\95ा à¤¨à¤¾à¤® अमान्य है।",
+       "import-error-invalid": "पà¥\83षà¥\8dठ \"$1\" à¤\86यात à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\97या à¤¹à¥\88 à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤\87सà¤\95ा à¤\86यात à¤ªà¤¶à¥\8dà¤\9aात à¤\9cà¥\8b à¤¨à¤¾à¤® à¤¹à¥\8bता à¤µà¤¹ à¤\87स à¤µà¤¿à¤\95à¥\80 à¤ªà¤° अमान्य है।",
        "import-options-wrong": "गलत {{PLURAL:$2|विकल्प}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "दिया गया उपसर्ग पृष्ठ शीर्षक अमान्य है।",
        "import-rootpage-nosubpage": "दिए गए उपसर्ग पृष्ठ \"$1\" के नामस्थान में उप-पृष्ठ नहीं बनाए जा सकते।",
        "importlogpage": "आयात सूची",
        "importlogpagetext": "अन्य विकियों से प्रबन्धकों द्वारा किए गए सम्पादन इतिहास के साथ होने वाले पृष्ठों का आयात।",
        "import-logentry-upload": "सञ्चिका अपलोड करके [[$1]] का आयात किया",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|अवतरण|अवतरण}}",
+       "import-logentry-upload-detail": "$1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
        "import-logentry-interwiki": "ट्रान्सविकि कर दिया $1",
-       "import-logentry-interwiki-detail": "$2 से $1 {{PLURAL:$1|अवतरण|अवतरण}}",
+       "import-logentry-interwiki-detail": "$2 से $1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
        "javascripttest": "जावास्क्रिप्ट परीक्षण",
        "javascripttest-pagetext-noframework": "यह पृष्ठ जावास्क्रिप्ट परीक्षण चलाने के लिए है।",
        "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
        "tooltip-pt-mycontris": "आपके योगदानों की सूची",
        "tooltip-pt-login": "आपको सत्रारम्भ करने के लिए प्रोत्साहित किया जाता है; लेकिन यह अनिवार्य नहीं है",
        "tooltip-pt-logout": "सत्रांत",
+       "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
        "tooltip-ca-talk": "सामग्री पृष्ठ के बारे में वार्तालाप",
        "tooltip-ca-edit": "आप यह पृष्ठ बदल सकते हैं।\nकृपया बदलाव संजोने से पहले झलक देखें।",
        "tooltip-ca-addsection": "नया विभाग आरम्भ करें",
        "tooltip-ca-unwatch": "यह पृष्ठ अपने ध्यानसूचीसे हटाएं",
        "tooltip-search": "{{SITENAME}} में खोजें",
        "tooltip-search-go": "अगर इस शीर्षक का पृष्ठ हैं तो उसपर चलें",
-       "tooltip-search-fulltext": "à¤\87स à¤µà¤¾à¤\95à¥\8dयाà¤\82श à¤\95à¥\8b à¤ªà¤¨à¥\8dनों में खोजें",
-       "tooltip-p-logo": "मुख पृष्ठ",
+       "tooltip-search-fulltext": "à¤\87स à¤ªà¤¾à¤  à¤\95à¥\8b à¤ªà¥\83षà¥\8dठों में खोजें",
+       "tooltip-p-logo": "मुख पृष्ठ पर जाएँ",
        "tooltip-n-mainpage": "मुखपृष्ठ पर जाएँ",
        "tooltip-n-mainpage-description": "मुखपृष्ठ पर जाएँ",
        "tooltip-n-portal": "परियोजना के बारे में, आप क्या कर सकतें हैं, सहायता कहाँ से लें",
        "tooltip-feed-atom": "इस पृष्ठ की अणु फ़ीड",
        "tooltip-t-contributions": "इस सदस्यके योगदानकी सूची देखियें",
        "tooltip-t-emailuser": "इस सदस्य को इमेल भेजें",
-       "tooltip-t-upload": "सà¤\82à¤\9aिà¤\95ा à¤\9aढ़ाà¤\8fà¤\81",
+       "tooltip-t-upload": "फ़ाà¤\87ल à¤\85पलà¥\8bड à¤\95रà¥\87à¤\82",
        "tooltip-t-specialpages": "सभी विशेष पृष्ठों की सूची",
        "tooltip-t-print": "इस पृष्ठका छपानेलायक अवतरण",
        "tooltip-t-permalink": "पृष्ठ के इस संस्करण की स्थायी कड़ी",
        "version-license": "मीडियाविकि अनुज्ञापत्र",
        "version-ext-license": "लाइसेंस",
        "version-ext-colheader-name": "एक्सटेंशन",
+       "version-skin-colheader-name": "त्वचा",
        "version-ext-colheader-version": "संस्करण",
        "version-ext-colheader-license": "लाइसेंस",
        "version-ext-colheader-description": "विवरण",
        "version-poweredby-credits": "यह विकि  '''[https://www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1  $2 ।",
        "version-poweredby-others": "अन्य",
        "version-poweredby-translators": "translatewiki.net अनुवादक",
+       "version-credits-summary": "हम निम्न व्यक्तियों द्वारा [[Special:Version|मीडियाविकि]] में किये गए योगदानों को सराहते हैं।",
        "version-software": "इन्स्टॉल की हुई प्रणाली",
        "version-software-product": "प्रोडक्ट",
        "version-software-version": "अवतरण",
        "version-entrypoints-header-url": "यू॰आर॰एल",
+       "version-libraries-version": "संस्करण",
        "redirect-submit": "जायें",
        "redirect-lookup": "ढूँढें:",
        "redirect-value": "मूल्य:",
        "compare-revision-not-exists": "आपके द्वारा निर्दिष्ट संशोधन मौजूद नहीं है।",
        "dberr-problems": "क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।",
        "dberr-again": "कुछ मिनट रुकने के बाद फिर से चढ़ाएँ।",
-       "dberr-info": "(à¤\86à¤\81à¤\95ड़ाà¤\95à¥\8bष à¤¸à¥\87वà¤\95 à¤¸à¥\87 à¤¸à¤\82परà¥\8dà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤ªà¤¾ à¤°à¤¹à¤¾:$1)",
-       "dberr-info-hidden": "(डाà¤\9fाबà¥\87स à¤¸à¤°à¥\8dवर à¤¸à¥\87 à¤¸à¤\82परà¥\8dà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\9cा à¤¸à¤\95ा)",
+       "dberr-info": "(डाà¤\9fाबà¥\87स à¤¸à¥\87 à¤¸à¤\82परà¥\8dà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤ªà¤¾ à¤°à¤¹à¤¾: $1)",
+       "dberr-info-hidden": "(डाटाबेस से संपर्क नहीं किया जा सका)",
        "dberr-usegoogle": "इस बीच आप गूगल से खोज करने की कोशिश कर सकते हैं।",
        "dberr-outofdate": "ध्यान दे, हो सकता है कि हमारी सामग्री से संबंधित उनकी सूची बासी हो।",
        "dberr-cachederror": "यह अनुरोधित पन्ने की संचित प्रति है, हो सकता है यह ताज़ी न हो।",
        "logentry-rights-rights": "$1 ने $3 के सदस्य समूह $4 से बदलकर $5 {{GENDER:$2|किये}}",
        "logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
        "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
        "rightsnone": "(कोई नहीं)",
        "revdelete-summary": "संपादन सारांश",
        "feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।",
index 4fd9066..d77db57 100644 (file)
@@ -11,7 +11,8 @@
                        "Thakurji",
                        "아라",
                        "Soul Train",
-                       "Filipinayzd"
+                       "Filipinayzd",
+                       "SNN95"
                ]
        },
        "tog-underline": "Jorr ke niche line khicho:",
        "readonly_lag": "Database apne se band hoi gais hai jab tak ki duusra database, khaas database ke sanghe kaam nai kare lage.",
        "internalerror": "Bhitri galti",
        "internalerror_info": "Bhitri galti: $1",
+       "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
        "filecopyerror": "File \"$1\" ke \"$2\" pe copy nai kare sakaa.",
        "filerenameerror": "File \"$1\" ke naam badal ke \"$2\" nai kare sakaa.",
        "filedeleteerror": "File \"$1\" ke nai mitae sakaa.",
        "unusedimages": "Bina use bhae files",
        "wantedcategories": "Maange waala vibhag",
        "wantedpages": "Jaruri panna",
+       "wantedpages-summary": "List of non-existing pages with the most links to them, excluding pages which only have redirects linking to them. For a list of non-existent pages that have redirects linking to them, see [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Result set me kharaa title hai: $1",
        "wantedfiles": "Maange waala files",
        "wantedfiletext-cat": "Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>. Aur, uu panna jon ki non-existent files ke embed kare hae ke [[:$1]] me list karaa gais hae.",
        "thumbnail_image-missing": "Ii naam ke file nai hae: $1",
        "thumbnail_image-failure-limit": "Ii thumbnail ke render kare ke bahut dher unsuccessful kosis ($1 or more) rahaa. Meharbaani kar ke baad me fir kosis karna.",
        "import": "Panna ke import karo",
-       "importinterwiki": "Transwiki se ayaat",
-       "import-interwiki-text": "Ek wiki aur panna ke title ke select karo.\nBadalo ke tarik aur badle waala sadasya ke naam wahii rakam rahii.\nSab transwiki import actions ke [[Special:Log/import|import log]] pe log karaa jaawe hai.",
+       "importinterwiki": "Duusra wiki se ayaat",
+       "import-interwiki-text": "Ek wiki aur panna ke title ke, import kare ke khatir, select karo.\nBadalo ke tarik aur badle waala sadasya ke naam wahii rakam rahii.\nSab transwiki import actions ke [[Special:Log/import|import log]] pe log karaa jaawe hai.",
        "import-interwiki-sourcewiki": "Source wiki:",
        "import-interwiki-sourcepage": "Source panna:",
        "import-interwiki-history": "Ii panna ke sab badlao ke itihaas ke copy karo",
        "importcantopen": "Import file ke khole nai sakaa",
        "importbadinterwiki": "Kharaab interwiki jorr",
        "importsuccess": "Import khalaas hoe gais hai!",
-       "importnosources": "Koi interwiki import source ke define nai karaa gais hai aur direct itihass ke upload ke rok dewa gais hai.",
+       "importnosources": "Koi interwiki import source ke define nai karaa gais hai aur directory itihass ke upload ke rok dewa gais hai.",
        "importnofile": "Koi import file ke upload nai karaa gais hai.",
        "importuploaderrorsize": "Import file ke upload nai kare sakaa hai.\nIi file ke size allowed upload size se barraa hai.",
        "importuploaderrorpartial": "Import file ke upload nai kare sakaa hai.\nIi file ke khaali thora hissa ke upload karaa gais hai.",
        "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moved}} panna $3 se $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} panna $3 se $4 without leaving a redirect",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|moved}} panna $3 se $4 over redirect",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|moved}} panna $3 se $4 over a redirect without leaving a redirect",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|memindahkan}} laman $3 kepada $4 menggunakan lencongan",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|memindahkan}} laman $3 kepada $4 melalui lencongan tanpa meninggalkan perlencongan",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|marked}} revision $4 panna $3 ke patrol karaa gais hae",
        "logentry-patrol-patrol-auto": "$1 automatically {{GENDER:$2|marked}} revision $4 panna $3 ke patrol karis hae",
        "logentry-newusers-newusers": "Sadasya $1 ke account  {{GENDER:$2|created}} ke banawa gais hae",
index 0741423..0fd4291 100644 (file)
        "prefs-personal": "Podaci o suradniku",
        "prefs-rc": "Nedavne promjene i kratki članci",
        "prefs-watchlist": "Praćene stranice",
+       "prefs-editwatchlist": "Uredi popis praćenja",
+       "prefs-editwatchlist-label": "Uredi stavke na popisu praćenja:",
+       "prefs-editwatchlist-edit": "vidi i ukloni stavke s popisa praćenja",
+       "prefs-editwatchlist-raw": "uredi popis praćenih stranica u okviru za uređivanje",
+       "prefs-editwatchlist-clear": "očisti popis praćenja",
        "prefs-watchlist-days": "Broj dana koji će se prikazati na popisu praćenja:",
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "prefs-watchlist-edits": "Broj uređivanja koji će se prikazati na proširenom popisu praćenja:",
        "watchlistedit-raw-done": "Vaš popis praćenja je snimljen.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 stranica je dodana|$1 stranice su dodane}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 stranica je uklonjena|$1 stranice su ukonjene}}:",
+       "watchlistedit-clear-explain": "Sve stavke s popisa praćenja će biti izbrisane",
        "watchlisttools-view": "Pregled promjena praćenih stranica",
        "watchlisttools-edit": "Pregled i uređivanje praćenih stranica",
        "watchlisttools-raw": "Uređivanje praćenih stranica u okviru za uređivanje",
index 4fd1196..44a93f1 100644 (file)
        "previewconflict": "Ez az előnézet a felső szerkesztődobozban levő szöveg mentés utáni megfelelőjét mutatja.",
        "session_fail_preview": "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.\nKérjük próbálkozz újra!\nAmennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!'''",
        "session_fail_preview_html": "'''Az elveszett munkamenetadatok miatt nem tudtuk feldolgozni a szerkesztésedet.'''\n\n''Mivel a wikiben engedélyezett a nyers HTML-kód használata, az előnézet el van rejtve a JavaScript-alapú támadások megakadályozása céljából.''\n\n'''Ha ez egy normális szerkesztési kísérlet, akkor próbálkozz újra. Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!''' (a változtatásaidat mentsd el magadnak, különben elvesznek!)",
-       "token_suffix_mismatch": "'''A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket\na szerkesztési tokenben. A szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.\nEz a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.'''",
+       "token_suffix_mismatch": "<strong>A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket\na szerkesztési tokenben.</strong>\nA szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.\nEz a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.",
        "edit_form_incomplete": "'''A szerkesztési űrlap egyes részei nem érkeztek meg a szerverre; ellenőrizd, hogy a szerkesztés sértetlen-e, majd próbáld újra.'''",
        "editing": "$1 szerkesztése",
        "creating": "$1 létrehozása",
        "enotif_subject_created": "$2 létrehozta a(z) $1 {{SITENAME}} oldalt",
        "enotif_subject_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt.",
        "enotif_subject_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt.",
-       "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}} oldalt",
+       "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}}-oldalt",
        "enotif_body_intro_deleted": "$2 törölte a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd $3.",
        "enotif_body_intro_created": "$2 létrehozta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
        "enotif_body_intro_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
        "enotif_body_intro_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, az aktuális verziót lásd itt: $3.",
        "enotif_lastvisited": "Lásd a $1 lapot az utolsó látogatásod óta történt változtatásokért.",
        "enotif_lastdiff": "Lásd a $1 lapot ezen változtatás megtekintéséhez.",
        "enotif_anon_editor": "$1 névtelen felhasználó",
        "tooltip-pt-mycontris": "A közreműködéseid listája",
        "tooltip-pt-login": "Bejelentkezni javasolt, de nem kötelező.",
        "tooltip-pt-logout": "Kijelentkezés",
+       "tooltip-pt-createaccount": "Arra bíztatunk, hogy hozz létre egy fiókot, és jelentkezz be, azonban ez nem kötelező",
        "tooltip-ca-talk": "Az oldal tartalmának megvitatása",
        "tooltip-ca-edit": "Te is szerkesztheted ezt az oldalt. Mentés előtt használd az előnézet gombot.",
        "tooltip-ca-addsection": "Új szakasz nyitása",
        "logentry-rights-rights": "$1 megváltoztatta $3 csoporttagságát erről: $4 erre: $5",
        "logentry-rights-rights-legacy": "$1 megváltoztatta $3 csoporttagságát",
        "logentry-rights-autopromote": "$1 automatikusan előléptetve erről: $4 erre: $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|feltöltötte}} ezt: $3",
        "rightsnone": "(semmi)",
        "revdelete-summary": "a szerkesztési összefoglalóját",
        "feedback-bugornote": "Ha kész technikai problémát részletesen leírni, akkor kérjük [$1 jelents egy hibát]. Egyébként használd az alábbi űrlapot. A hozzászólásod a „[$3 $2]” laphoz kerül felvételre, a szerkesztő neveddel és böngésződ típusával együtt.",
index 4fb7f1e..b6a6bfb 100644 (file)
        "enhancedrc-history": "historia",
        "recentchanges": "Modificationes recente",
        "recentchanges-legend": "Optiones del modificationes recente",
-       "recentchanges-summary": "Seque le plus recente modificationes a {{SITENAME}} in iste pagina.",
+       "recentchanges-summary": "Seque le modificationes le plus recente in {{SITENAME}} in iste pagina.",
        "recentchanges-noresult": "Nulle modification facite in le periodo specificate que corresponde a iste criterios.",
        "recentchanges-feed-description": "Seque le modificationes le plus recente al wiki in iste syndication.",
        "recentchanges-label-newpage": "Iste modification creava un nove pagina",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam le [[Special:NewPages|lista de nove paginas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "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 de $3 $2",
+       "rclistfrom": "Monstrar nove modificationes a partir del $3 a $2",
        "rcshowhideminor": "$1 modificationes minor",
        "rcshowhideminor-show": "Monstrar",
        "rcshowhideminor-hide": "Celar",
        "undelete-error-long": "Se incontrava errores durante le restauration del file:\n\n$1",
        "undelete-show-file-confirm": "Es tu secur de voler vider un version delite del file \"<nowiki>$1</nowiki>\" del $2 a $3?",
        "undelete-show-file-submit": "Si",
-       "namespace": "Spatio de nomine:",
+       "namespace": "Spatio de nomines:",
        "invert": "Inverter selection",
        "tooltip-invert": "Marca iste quadrato pro celar le modificationes in paginas intra le spatio de nomines seligite (e le spatio de nomines associate, si tal option es seligite)",
        "tooltip-whatlinkshere-invert": "Marca iste quadrato pro celar ligamines de paginas in le spatio de nomines seligite.",
        "sp-contributions-toponly": "Monstrar solmente le versiones recente",
        "sp-contributions-newonly": "Monstrar solmente le modificationes que es creationes de pagina",
        "sp-contributions-submit": "Cercar",
-       "whatlinkshere": "Referentias a iste pagina",
+       "whatlinkshere": "Paginas ligate a iste",
        "whatlinkshere-title": "Paginas con ligamines verso $1",
        "whatlinkshere-page": "Pagina:",
        "linkshere": "Le sequente paginas contine ligamines a '''[[:$1]]''':",
        "tooltip-search": "Cercar in {{SITENAME}}",
        "tooltip-search-go": "Visitar un pagina con iste nomine exacte si existe",
        "tooltip-search-fulltext": "Cercar iste texto in le paginas",
-       "tooltip-p-logo": "Pagina principal",
+       "tooltip-p-logo": "Visitar le pagina principal",
        "tooltip-n-mainpage": "Visitar le pagina principal",
        "tooltip-n-mainpage-description": "Visitar le pagina principal",
        "tooltip-n-portal": "A proposito del projecto, que tu pote facer, ubi trovar cosas",
        "thumbsize": "Dimension del miniaturas:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pagina|paginas}}",
        "file-info": "grandor del file: $1, typo MIME: $2",
-       "file-info-size": "$1 × $2 pixel, grandor del file: $3, typo MIME: $4",
+       "file-info-size": "$1 × $2 pixels, dimension del file: $3, typo MIME: $4",
        "file-info-size-pages": "$1 × $2 pixels, dimension del file: $3, typo MIME: $4, $5 {{PLURAL:$5|pagina|paginas}}",
        "file-nohires": "Non disponibile in resolution plus alte.",
        "svg-long-desc": "File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3",
index b3e3d0f..0fd7e40 100644 (file)
        "search": "Pencarian",
        "searchbutton": "Cari",
        "go": "Tuju ke",
-       "searcharticle": "Tuju ke",
+       "searcharticle": "Lanjut",
        "history": "Riwayat halaman",
        "history_short": "Versi terdahulu",
        "updatedmarker": "diubah sejak kunjungan terakhir saya",
        "talkpage": "Bicarakan halaman ini",
        "talkpagelinktext": "bicara",
        "specialpage": "Halaman istimewa",
-       "personaltools": "Peralatan pribadi",
+       "personaltools": "Perkakas pribadi",
        "articlepage": "Lihat halaman isi",
        "talk": "Pembicaraan",
        "views": "Tampilan",
-       "toolbox": "Peralatan",
+       "toolbox": "Perkakas",
        "userpage": "Lihat halaman pengguna",
        "projectpage": "Lihat halaman proyek",
        "imagepage": "Lihat halaman berkas",
        "redirectedfrom": "(Dialihkan dari $1)",
        "redirectpagesub": "Halaman pengalihan",
        "redirectto": "Mengalihkan ke:",
-       "lastmodifiedat": "Halaman ini terakhir diubah pada $2, $1.",
+       "lastmodifiedat": "Halaman ini terakhir diubah pada $1, pukul $2.",
        "viewcount": "Halaman ini telah diakses sebanyak {{PLURAL:$1|$1 kali}}.<br />",
        "protectedpage": "Halaman yang dilindungi",
-       "jumpto": "Langsung ke:",
+       "jumpto": "Lompat ke:",
        "jumptonavigation": "navigasi",
        "jumptosearch": "cari",
        "view-pool-error": "Maaf, server sedang sibuk pada saat ini.\nTerlalu banyak pengguna berusaha melihat halaman ini.\nTunggu sebentar sebelum Anda mencoba lagi mengakses halaman ini.\n\n$1",
        "nstab-main": "Halaman",
        "nstab-user": "Pengguna",
        "nstab-media": "Media",
-       "nstab-special": "Istimewa",
+       "nstab-special": "Halaman Istimewa",
        "nstab-project": "Proyek",
        "nstab-image": "Berkas",
        "nstab-mediawiki": "Pesan",
        "viewyourtext": "Anda dapat melihat atau menyalin sumber dari '''suntingan Anda''' ke halaman ini:",
        "protectedinterface": "Halaman ini memuat teks antarmuka untuk perangkat lunak pada wiki ini, dan dilindungi terhadap penyalahgunaan. Untuk menambah atau mengubah terjemahan pada semua wiki, harap gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
        "editinginterface": "<strong>Peringatan:</strong> Anda menyunting suatu halaman yang digunakan untuk menyediakan teks antarmuka bagi perangkat lunak.\nPerubahan pada halaman ini akan memengaruhi tampilan pada antarmuka pengguna untuk pengguna lain pada wiki ini.",
-       "translateinterface": "Untuk menambah atau mengubah terjemahan semua wiki, mohon gunakan [//translatewiki.net/ translatewiki.net], Proyek pelokalan MediaWiki.",
+       "translateinterface": "Untuk menambah atau mengubah terjemahan semua wiki, mohon gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
        "cascadeprotected": "Halaman ini telah dilindungi dari penyuntingan karena disertakan di {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan opsi \"runtun\":\n$2",
        "namespaceprotected": "Anda tak memiliki hak akses untuk menyunting halaman di ruang nama '''$1'''.",
        "customcssprotected": "Anda tidak memiliki izin untuk menyunting halaman CSS ini, karena berisi pengaturan pribadi pengguna lain.",
        "userlogin-loggedin": "Andan telah masuk log sebagai $1.\nGunakan formulir di bawah untuk masuk log sebagai pengguna lain.",
        "userlogin-createanother": "Buat akun lain",
        "createacct-emailrequired": "Alamat surel",
-       "createacct-emailoptional": "Alamat surel/email (dianjurkan untuk diisi)",
+       "createacct-emailoptional": "Alamat surel/email (sebaiknya diisi)",
        "createacct-email-ph": "Masukkan alamat surel Anda",
        "createacct-another-email-ph": "Masukkan alamat surel",
        "createaccountmail": "Gunakan kata sandi acak sementara dan kirimkan ke surel yang diinginkan",
        "preview": "Pratayang",
        "showpreview": "Lihat pratayang",
        "showdiff": "Lihat perubahan",
-       "blankarticle": "<strong>Peringatan:</strong> Halaman yang akan Anda buat tidak berisi apa-apa.\nJika Anda mengeklik \"{{int:savearticle}}\" sekali lagi, halaman ini akan dibuat tanpa adanya isi.",
+       "blankarticle": "<strong>Peringatan:</strong> Halaman yang akan Anda buat tidak berisi apa-apa.\nJika Anda mengklik \"{{int:savearticle}}\" sekali lagi, halaman ini akan dibuat tanpa ada isi.",
        "anoneditwarning": "<strong>Peringatan:</strong> Anda sedang tidak masuk log. Alamat IP Anda akan terlihat oleh publik jika Anda melakukan suatu perubahan. Jika Anda <strong>[$1 masuk log]</strong> atau <strong>[$2 membuat akun]</strong>, suntingan Anda akan diatribusikan kepada nama pengguna Anda, beserta berbagai keuntungan lainnya.",
        "anonpreviewwarning": "''Anda belum masuk log. Menyimpan halaman akan menyebabkan alamat IP Anda tercatat pada riwayat suntingan laman ini.''",
        "missingsummary": "'''Peringatan:''' Anda tidak memasukkan ringkasan penyuntingan. Jika Anda kembali menekan tombol Simpan, suntingan Anda akan disimpan tanpa ringkasan penyuntingan.",
-       "selfredirect": "<strong>Peringatan:</strong> Anda akan mengalihkan halaman ini balik ke halaman ini.\nAnda bisa jadi telah menuliskan tujuan pengalihan yang salah, atau telah menyunting halaman yang salah.\nJika Anda mengeklik \"{{int:savearticle}}\" sekali lagi, halaman pengalihan akan dibuat.",
+       "selfredirect": "<strong>Peringatan:</strong> Anda mengalihkan halaman ini kembali ke halaman semula.\nAnda bisa jadi telah memberikan tujuan pengalihan yang salah, atau telah menyunting halaman yang salah.\nJika Anda mengeklik \"{{int:savearticle}}\" sekali lagi, halaman pengalihan akan dibuat.",
        "missingcommenttext": "Harap masukkan komentar di bawah ini.",
        "missingcommentheader": "''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan \"{{int:savearticle}}\", suntingan Anda akan disimpan tanpa komentar tersebut.",
        "summary-preview": "Pratayang ringkasan:",
        "currentrev-asof": "Revisi terkini pada $1",
        "revisionasof": "Revisi per $1",
        "revision-info": "Revisi per $1 oleh {{GENDER:$6|$2}}$7",
-       "previousrevision": "←Revisi sebelumnya",
-       "nextrevision": "Revisi selanjutnya→",
+       "previousrevision": "← Revisi sebelumnya",
+       "nextrevision": "Revisi selanjutnya →",
        "currentrevisionlink": "Revisi terkini",
        "cur": "skr",
        "next": "selanjutnya",
        "showhideselectedversions": "Tampilkan/sembunyikan versi terpilih",
        "editundo": "balikkan",
        "diff-empty": "(Tidak ada perbedaan)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
+       "diff-multi-sameuser": "({{PLURAL:$1|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
        "diff-multi-otherusers": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh {{PLURAL:$2|satu pengguna lainnya|$2 pengguna}} tidak ditampilkan)",
        "diff-multi-manyusers": "({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)",
        "difference-missing-revision": "{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.\n\nHal ini biasanya disebabkan oleh tautan diff yang kedaluwarsa ke halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "nextn": "{{PLURAL:$1|$1}} selanjutnya",
        "prevn-title": "$1 {{PLURAL:$1|hasil|hasil}} sebelumnya",
        "nextn-title": "$1 {{PLURAL:$1|hasil|hasil}} selanjutnya",
-       "shown-title": "Tampilkan $1 {{PLURAL:$1|hasil|hasil}} per halaman",
+       "shown-title": "Tampilkan $1 {{PLURAL:$1|hasil}} per halaman",
        "viewprevnext": "Lihat ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "* Halaman '''[[$1]]'''",
        "searchmenu-new": "<strong>Buat halaman \"[[:$1]]\" di wiki ini!</strong> {{PLURAL:$2|0=|Lihat pula halaman yang ditemukan dari pencarian Anda.|Lihat pula hasil pencarian yang ditemukan.}}",
        "searchprofile-images-tooltip": "Pencarian berkas",
        "searchprofile-everything-tooltip": "Pencarian di seluruh situs (termasuk halaman pembicaraan)",
        "searchprofile-advanced-tooltip": "Pencarian di ruang nama tertentu",
-       "search-result-size": "$1 ({{PLURAL:$2|1 kata|$2 kata}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 kata}})",
        "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
        "search-redirect": "(pengalihan $1)",
        "search-section": "(bagian $1)",
        "recentchanges-label-bot": "Suntingan ini dilakukan oleh bot",
        "recentchanges-label-unpatrolled": "Suntingan ini belum terpatroli",
        "recentchanges-label-plusminus": "Perubahan ukuran halaman dalam bita",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "'''Keterangan:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat pula [[Special:NewPages|daftar halaman baru]])",
        "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
        "rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
        "rcshowhidebots": "$1 bot",
        "rcshowhidebots-show": "Tampilkan",
        "rcshowhidebots-hide": "Sembunyikan",
-       "rcshowhideliu": "$1 pengguna-pengguna terdaftar",
+       "rcshowhideliu": "$1 pengguna terdaftar",
        "rcshowhideliu-show": "Tampilkan",
        "rcshowhideliu-hide": "Sembunyikan",
        "rcshowhideanons": "$1 pengguna anon",
        "rc_categories": "Batasi sampai kategori (dipisah dengan \"|\")",
        "rc_categories_any": "Apa pun",
        "rc-change-size": "$1",
-       "rc-change-size-new": "$1 {{PLURAL:$1|bita|bita}} setelah perubahan",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bita}} setelah perubahan",
        "newsectionsummary": "/* $1 */ bagian baru",
        "rc-enhanced-expand": "Tampilkan rincian",
        "rc-enhanced-hide": "Sembunyikan rincian",
        "recentchangeslinked-feed": "Perubahan terkait",
        "recentchangeslinked-toolbox": "Perubahan terkait",
        "recentchangeslinked-title": "Perubahan yang terkait dengan \"$1\"",
-       "recentchangeslinked-summary": "Halaman istimewa ini memberikan daftar perubahan terakhir pada halaman-halaman terkait. Halaman yang Anda pantau ditandai dengan '''cetak tebal'''.",
+       "recentchangeslinked-summary": "Ini adalah daftar perubahan pada halaman yang terkait ke halaman yang spesifik (atau bagian dari kategori yang spesifik).\nHalaman pada [[Special:Watchlist|daftar pantauan Anda]] terlihat <strong>dicetak tebal</strong>.",
        "recentchangeslinked-page": "Nama halaman:",
        "recentchangeslinked-to": "Perlihatkan perubahan dari halaman-halaman yang terhubung dengan halaman yang disajikan",
        "upload": "Unggah berkas",
        "license": "Jenis lisensi:",
        "license-header": "Jenis lisensi",
        "nolicense": "Tidak ada yang dipilih",
-       "licenses-edit": "Sunting opsi lisensi",
+       "licenses-edit": "Sunting pilihan lisensi",
        "license-nopreview": "(Pratayang tak tersedia)",
        "upload_source_url": "(Anda pilih berkas dari URL valid yang dapat diakses publik)",
        "upload_source_file": "(Anda pilih berkas dari komputer Anda)",
        "filehist-filesize": "Besar berkas",
        "filehist-comment": "Komentar",
        "imagelinks": "Pranala berkas",
-       "linkstoimage": "{{PLURAL:$1||}}$1 halaman berikut memiliki pranala ke berkas ini:",
+       "linkstoimage": "{{PLURAL:$1|Halaman berikut}} memiliki pranala ke berkas ini:",
        "linkstoimage-more": "Lebih dari $1 {{PLURAL:$1|halaman|halaman}} memiliki pranala ke berkas ini.\nDaftar berikut menampilkan {{PLURAL:$1|halaman dengan pranala langsung|$1 halaman dengan pranala langsung}} ke berkas ini.\nJuga tersedia [[Special:WhatLinksHere/$2|daftar selengkapnya]].",
        "nolinkstoimage": "Tidak ada halaman yang memiliki pranala ke berkas ini.",
        "morelinkstoimage": "Lihat [[Special:WhatLinksHere/$1|pranala lainnya]] ke berkas ini.",
        "withoutinterwiki-legend": "Prefiks",
        "withoutinterwiki-submit": "Tampilkan",
        "fewestrevisions": "Halaman dengan perubahan tersedikit",
-       "nbytes": "$1 {{PLURAL:$1|bita|bita}}",
+       "nbytes": "$1 {{PLURAL:$1|bita}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategori}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwiki}}",
        "nlinks": "$1 {{PLURAL:$1|pranala|pranala}}",
-       "nmembers": "$1 {{PLURAL:$1|isi|isi}}",
+       "nmembers": "$1 {{PLURAL:$1|isi}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}",
        "nrevisions": "$1 {{PLURAL:$1|revisi|revisi}}",
        "nviews": "dilihat $1 {{PLURAL:$1|kali|kali}}",
        "nopagetitle": "Halaman tujuan tidak ditemukan",
        "nopagetext": "Halaman yang Anda tuju tidak ditemukan.",
        "pager-newer-n": "{{PLURAL:$1|1 lebih baru|$1 lebih baru}}",
-       "pager-older-n": "{{PLURAL:$1|1 lebih lama|$1 lebih lama}}",
+       "pager-older-n": "{{PLURAL:$1|$1 lebih lama}}",
        "suppress": "Pengawas",
        "querypage-disabled": "Halaman istimewa ini dinonaktifkan demi alasan kinerja.",
        "apihelp": "Bantuan API",
        "deleting-backlinks-warning": "'''Peringatan:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Halaman lain]] mengarah atau memiliki transklusi ke halaman yang akan Anda hapus.",
        "rollback": "Kembalikan suntingan",
        "rollbacklink": "kembalikan",
-       "rollbacklinkcount": "kembalikan $1 {{PLURAL:$1|suntingan|suntingan}}",
+       "rollbacklinkcount": "kembalikan $1 {{PLURAL:$1|suntingan}}",
        "rollbacklinkcount-morethan": "kembalikan lebih dari $1 {{PLURAL:$1|suntingan|suntingan}}",
        "rollbackfailed": "Pengembalian gagal dilakukan",
        "cantrollback": "Tidak dapat membatalkan suntingan;\nkontributor terakhir adalah satu-satunya penulis halaman ini.",
        "nolinkshere": "Tidak ada halaman yang memiliki pranala ke '''[[:$1]]'''.",
        "nolinkshere-ns": "Tidak ada halaman yang memiliki pranala ke '''[[:$1]]''' pada ruang nama yang dipilih.",
        "isredirect": "halaman pengalihan",
-       "istemplate": "dengan templat",
+       "istemplate": "tranklusi",
        "isimage": "pranala berkas",
-       "whatlinkshere-prev": "$1 {{PLURAL:$1|sebelumnya|sebelumnya}}",
-       "whatlinkshere-next": "$1 {{PLURAL:$1|selanjutnya|selanjutnya}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|sebelumnya $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|selanjutnya $1}}",
        "whatlinkshere-links": "← pranala",
        "whatlinkshere-hideredirs": "$1 pengalihan",
        "whatlinkshere-hidetrans": "$1 transklusi",
        "autoblockid": "Blokir otomatis #$1",
        "block": "Blokir pengguna",
        "unblock": "Buka blokir pengguna",
-       "blockip": "Blokir pengguna",
+       "blockip": "Blokir {{GENDER:$1|pengguna}}",
        "blockip-legend": "Blokir pengguna",
        "blockiptext": "Gunakan formulir di bawah untuk memblokir akses penulisan dari sebuah alamat IP atau pengguna tertentu.\nIni hanya boleh dilakukan untuk mencegah vandalisme, dan sejalan dengan [[{{MediaWiki:Policy-url}}|kebijakan]].\nMasukkan alasan Anda di bawah (contoh, menuliskan nama halaman yang telah divandalisasi).",
        "ipaddressorusername": "Alamat IP atau nama pengguna:",
        "ipb-unblock-addr": "Hilangkan blokir $1",
        "ipb-unblock": "Hilangkan blokir seorang pengguna atau suatu alamat IP",
        "ipb-blocklist": "Lihat blokir yang diterapkan",
-       "ipb-blocklist-contribs": "Kontribusi untuk $1",
+       "ipb-blocklist-contribs": "Kontribusi untuk {{GENDER:$1|$1}}",
        "unblockip": "Hilangkan blokir terhadap alamat IP atau pengguna",
        "unblockiptext": "Gunakan formulir di bawah untuk mengembalikan kemampuan menulis sebuah alamat IP atau pengguna yang sebelumnya telah diblokir.",
        "ipusubmit": "Hilangkan blokir ini",
        "tooltip-pt-mycontris": "Daftar kontribusi Anda",
        "tooltip-pt-login": "Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.",
        "tooltip-pt-logout": "Keluar log",
+       "tooltip-pt-createaccount": "Anda dianjurkan untuk membuat akun dan masuk log; meskipun, hal itu tidak diwajibkan",
        "tooltip-ca-talk": "Pembicaraan halaman isi",
        "tooltip-ca-edit": "Anda dapat menyunting halaman ini. Gunakan tombol pratayang sebelum menyimpan",
        "tooltip-ca-addsection": "Mulai bagian baru",
        "tooltip-ca-viewsource": "Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.",
-       "tooltip-ca-history": "Revisi-revisi sebelumnya dari halaman ini.",
+       "tooltip-ca-history": "Revisi sebelumnya dari halaman ini.",
        "tooltip-ca-protect": "Lindungi halaman ini",
        "tooltip-ca-unprotect": "Ubah perlindungan halaman ini",
        "tooltip-ca-delete": "Hapus halaman ini",
        "tooltip-ca-move": "Pindahkan halaman ini",
        "tooltip-ca-watch": "Tambahkan halaman ini ke daftar pantauan Anda",
        "tooltip-ca-unwatch": "Hapus halaman ini dari daftar pantauan Anda",
-       "tooltip-search": "Cari dalam wiki ini",
+       "tooltip-search": "Cari di {{SITENAME}}",
        "tooltip-search-go": "Cari suatu halaman dengan nama yang persis seperti ini jika tersedia",
        "tooltip-search-fulltext": "Cari halaman yang memiliki teks seperti ini",
        "tooltip-p-logo": "Kunjungi Halaman Utama",
        "tooltip-feed-atom": "Umpan Atom untuk halaman ini",
        "tooltip-t-contributions": "Lihat daftar kontribusi pengguna ini",
        "tooltip-t-emailuser": "Kirimkan surel kepada pengguna ini",
-       "tooltip-t-upload": "Muatkan gambar atau berkas media",
+       "tooltip-t-upload": "Unggah berkas",
        "tooltip-t-specialpages": "Daftar semua halaman istimewa",
        "tooltip-t-print": "Versi cetak halaman ini",
        "tooltip-t-permalink": "Pranala permanen untuk revisi halaman ini",
        "tooltip-watchlistedit-raw-submit": "Perbarui daftar pantauan",
        "tooltip-recreate": "Buat ulang halaman walaupun sebenarnya telah dihapus",
        "tooltip-upload": "Mulai pemuatan",
-       "tooltip-rollback": "\"Kembalikan\" membatalkan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.",
+       "tooltip-rollback": "\"Pengembali\" membatalkan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.",
        "tooltip-undo": "\"Balikkan\" membatalkan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.",
        "tooltip-preferences-save": "Simpan preferensi",
        "tooltip-summary": "Masukkan sebuah ringkasan pendek",
        "svg-long-error": "Berkas SVG tidak sah: $1",
        "show-big-image": "Ukuran asli",
        "show-big-image-preview": "Ukuran pratayang ini: $1.",
-       "show-big-image-other": "{{PLURAL:$2|Resolusi|Resolusi}} lain: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Resolusi}} lain: $1.",
        "show-big-image-size": "$1 × $2 piksel",
        "file-info-gif-looped": "melingkar",
        "file-info-gif-frames": "$1 {{PLURAL:$1||}}frame",
        "metadata-help": "Berkas ini mengandung informasi tambahan yang mungkin ditambahkan oleh kamera digital atau pemindai yang digunakan untuk membuat atau mendigitalisasi berkas. Jika berkas ini telah mengalami modifikasi, rincian yang ada mungkin tidak secara penuh merefleksikan informasi dari gambar yang sudah dimodifikasi ini.",
        "metadata-expand": "Tampilkan rincian tambahan",
        "metadata-collapse": "Sembunyikan rincian tambahan",
-       "metadata-fields": "Bidang metadata gambar yang tercantum dalam pesan ini akan dimasukkan pada tampilan halaman gambar ketika tabel metadata diciutkan.\nData lain akan disembunyikan secara bawaan.\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": "Bidang metadata gambar yang tercantum dalam pesan ini akan dimasukkan pada tampilan halaman gambar ketika tabel metadata diciutkan.\nData lain akan disembunyikan secara bawaan.\n* pembuat\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* hak cipta\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "metadata-langitem": "'''$2:''' $1",
        "metadata-langitem-default": "$1",
        "exif-imagewidth": "Lebar",
index 0f0685b..f430336 100644 (file)
        "readonly_lag": "Il database è stato bloccato automaticamente per consentire ai server con i database slave di sincronizzarsi con il master",
        "internalerror": "Errore interno",
        "internalerror_info": "Errore interno: $1",
+       "internalerror-fatal-exception": "Errore irreversibile di tipo \"$1\"",
        "filecopyerror": "Impossibile copiare il file \"$1\" in \"$2\".",
        "filerenameerror": "Impossibile rinominare il file \"$1\" in \"$2\".",
        "filedeleteerror": "Impossibile cancellare il file \"$1\".",
        "thumbnail_image-missing": "Sembra essere mancante il file: $1",
        "thumbnail_image-failure-limit": "Ci sono stati recentemente troppi tentativi falliti ($1 o più) di generare questa miniatura. Riprova più tardi.",
        "import": "Importa pagine",
-       "importinterwiki": "Importazione transwiki",
-       "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log/import|log di importazione]].",
+       "importinterwiki": "Importazione da un altro wiki",
+       "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione da altri wiki sono registrate nel [[Special:Log/import|registro di importazione]].",
        "import-interwiki-sourcewiki": "Wiki di origine:",
        "import-interwiki-sourcepage": "Pagina di origine:",
        "import-interwiki-history": "Copia l'intera cronologia di questa pagina",
        "importcantopen": "Impossibile aprire il file di importazione",
        "importbadinterwiki": "Collegamento inter-wiki errato",
        "importsuccess": "Importazione riuscita.",
-       "importnosources": "Non è stata definita una fonte per l'importazione transwiki; l'importazione diretta della cronologia non è attiva.",
+       "importnosources": "Non è stata definita una fonte per l'importazione da un altro wiki e l'importazione diretta della cronologia non è attiva.",
        "importnofile": "Non è stato caricato nessun file per l'importazione.",
        "importuploaderrorsize": "Caricamento del file per l'importazione non riuscito. Il file supera le dimensioni massime consentite per l'upload.",
        "importuploaderrorpartial": "Caricamento del file per l'importazione non riuscito. Il file è stato caricato solo in parte.",
        "revdelete-uname-unhid": "nome utente ripristinato",
        "revdelete-restricted": "limitazioni ai soli amministratori attivate",
        "revdelete-unrestricted": "limitazioni ai soli amministratori rimosse",
+       "logentry-block-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|ha sbloccato}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|ha unito}} $3 in $4 (versioni fino al $5)",
        "logentry-move-move": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 senza lasciare redirect",
        "json-error-utf8": "Caratteri UTF-8 non validi, possibile codifica errata",
        "json-error-recursion": "Uno o più riferimenti ricorsivi nel valore da codificare",
        "json-error-inf-or-nan": "Uno o più valori NAN o INF nel valore da codificare",
-       "json-error-unsupported-type": "È stato fornito un valore di un tipo che non può essere codificato"
+       "json-error-unsupported-type": "È stato fornito un valore di un tipo che non può essere codificato",
+       "headline-anchor-title": "Collegamento a questa sezione"
 }
index c27d17c..98ea5c2 100644 (file)
        "movepagetalktext": "დაკავშირებული განხილვის გვერდი ავტომატურად გადავა მასთან ერთად, '''გარდა იმ შემთხვევისა, თუ''':\n*განხილვის გვერდი ახალი სათაურით და გარკვეული შინაარსით უკვე არსებობს, ან\n*თქვენ მოხსნით ნიშნულს ქვევით დაფაზე.\n\nამ შემთხვევებში, თქვენ თავად მოგიწევთ ამ გვერდის გადატანა, სურვილისამებრ.",
        "movearticle": "გვერდის გადატანა",
        "moveuserpage-warning": "'''გაფრთხილება:''' თქვენ გადაგაქვთ მომხმარებლის გვერდი. გთხოვთ გაითვალისწინეთ, რომ გადატანა შესრულდება, მომხმარებლის სახელის გადარქმევა კი ''არა''.",
+       "movecategorypage-warning": "<strong>გაფრთხილება:</strong> თქვენ გადაგაქვთ კატეგორიის გვერდი. გაითვალისწინეთ, რომ გვერდი გადავა, თუმცა მასში შემავალი გვერდები <em>დარჩება</em> ძველ კატეგორიაში. საჭირო იქნება კატეგორიის ჩასწორება სტატიებში ინდივიდუალურად.",
        "movenologintext": "თქვენ უნდა [[Special:UserLogin|წარუდგინოთ თავი]],\nსისტემას რათა გადაიტანოთ გვერდები.",
        "movenotallowed": "თქვენ არ გაქვთ გვერდების გადატანის უფლება.",
        "movenotallowedfile": "თქვენ ვერ გადაიტანთ ფაილებს.",
index 2a8192d..0db2e8c 100644 (file)
@@ -24,6 +24,7 @@
        "tog-watchdefault": "Donn Sigge beim Ändere automattesch för ming Oppaßlėß vörschlonn",
        "tog-watchmoves": "Donn Sigge beim Ömnänne automattesch för ming Oppaßlėß vörschlonn",
        "tog-watchdeletion": "Donn Sigge beim Fottschmiiße automattesch för ming Oppaßlėß vörschlonn",
+       "tog-watchrollback": "Donn Sigge beim schtantepee retuur Nämme vun Änderonge automattesch för ming Oppaßlėß vörschlonn",
        "tog-minordefault": "Dun all ming Änderunge jedes Mol als klein Mini-Änderunge vürschlage",
        "tog-previewontop": "Zeisch de Vör-Aanseesch övver däm Fäld för der Täx enzejävve aan.",
        "tog-previewonfirst": "Zeich de Vör-Aansich tirek för et eetste Mol beim Bearbeide aan",
        "pool-timeout": "Zick zem Waade affjeloufe, diweil mer op en Sperr am Waade wohre",
        "pool-queuefull": "De Schlang zom Waade op ene freie Prozäß zom Beärbeide es vull",
        "pool-errorunknown": "Dä Fähler kenne mer nit",
+       "pool-servererror": "Dä <i lang=\"en\" xml:lang=\"en\">pool counter</i> Deens schteiht nit zor Verföhjong ($1).",
        "poolcounter-usage-error": "Fähler beim Aanwände: $1",
        "aboutsite": "Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
        "aboutpage": "Project:Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
        "readonly_lag": "De Daatebank es för en koote Zigg automattesch jesperrt, för de Daate vun de ongerjeodente Rääschner mem Houprääschner avzejliiche.",
        "internalerror": "De Wiki-Soffwär hät ene Fähler jefunge",
        "internalerror_info": "Enne ennere Fäähler en de ẞoffwäer es opjetrodde: $1",
+       "internalerror-fatal-exception": "Ene schlemme Fähler vun dä Zoot „$1“ es opjetrodde.",
        "filecopyerror": "Kunnt de Datei „$1“ nit noh „$2“ kopeere.",
        "filerenameerror": "Kunnt de Datei „$1“ nit op „$2“ ömdäufe.",
        "filedeleteerror": "Kunnt de Datei „$1“ nit fottschmieße.",
        "createaccount-text": "Einer hät Desch als Medmaacher „$2“ {{GRAMMAR:em|{{SITENAME}}}} aanjemelldt.\nDat es e Wiki, un De fengks et onger däm URL:\n $4\nDat Passwoot „$3“ hät sesch dat Wiki för Disch usjewörfelt.\nDon jlisch enlogge un donn et ändere.\n\nWann Dat all böömesch Dörver för Desch sin, da fojeß heh di\ne-mail eijfach. Wann De en däm Wikki nit metmaache wells, och.",
        "login-throttled": "Do häs zo öff, zo vill, un zo lang en de letzde Zick probeet, ennzelogge.\nWaad e Wielsche ävver $1, ih dat De et wider versöhks.",
        "login-abort-generic": "Dat Enlogge hät nit jeflup.",
+       "login-migrated-generic": "Dinge Zohjang zom Wikki es verändert woode un Dinge Metmaacher_Nahme jidd_et heh nit mieh.",
        "loginlanguagelabel": "Schprohch: $1",
        "suspicious-userlogout": "Do bes '''nit''' ußjelogg.\nEt süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.",
        "createacct-another-realname-tip": "Dä reschteje Nahme kam_mer fott lohße.\n\nWann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidrääsch ze nänne.",
        "preview": "Vör-Ansich",
        "showpreview": "Vör-Aansich zeije",
        "showdiff": "De Ungerscheide zeije",
+       "blankarticle": "<strong>Opjepaß:</strong> Di Sigg, di De jrahd aanlähje wells, es läddesch. Wann De jäz norr_ens op „{{int:savearticle}}“ jehß, weed di Sigg och ohne jät dren aanjelaat.",
        "anoneditwarning": "'''Opjepaß:''' Weil De nit enjelogg bes, weed Ding <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß en heh dä Sigg ier Leß met de Väsiohne faßjehallde wääde.\nWann De [$1 enlogge deihs] udder [$2 desch aanmällds], dann wääde Ding Änderonge met dingem Nahme als Metmaacher opjevöhrt.",
        "anonpreviewwarning": "''Weil De nit enjlogg bes, weed Ding <code lang=\"en\">IP</code>-Addräß zoamme met dä neue Version faßjehallde, wann de heh di Sigg avspeichere deihß.''",
        "missingsummary": "<strong>Opjepass:</strong> Do häs nix bei „{{int:summary}}“ enjejovve. Dun noch ens op „{{int:savearticle}}“ klicke, öm Ding Änderunge ohne de Zosammefassung ze Speichere. Ävver besser jiss De do jetz tirek ens jet en!",
        "postedit-confirmation-saved": "Ding Änderunge sin nit faßjehallde.",
        "edit-already-exists": "Kunnt kei neu Sigg aanlääje. Di Sigg jidd_et ald.",
        "defaultmessagetext": "Dä standaadmäßije Tex",
-       "content-failed-to-parse": "Et wohr nit müjjelesch, dä Enhalld met däm <i lang=\"en\">MIME-Typ</i> $2 för en Dattei met $1 dren ze verwooschte: $3.",
+       "content-failed-to-parse": "Et wohr nit müjjelesch, dä Enhalld met däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\" >$2</code> för en Dattei met $1 dren ze verwooschte: $3.",
        "invalid-content-data": "Di Daate en dä Sigg sen onjöltesch.",
        "content-not-allowed-here": "Ene Enhalld vun dä Zoot „$1“ es op dä Sigg „[[$2]]“ nit zohjelohße.",
        "editwarning-warning": "Wann de vun hee dä Sigg fott jeihß, doh künnte all Ding Änderonge aan dä Sigg verschött jonn.\nDo kanns heh di Warnung affschallde, wann de aanjemelldt un enjelogg bes, dann kriß de se nieh mieh wider. Jangk doför en dä Afschnett „{{int:prefs-editing}}“ en Dinge Enschtellonge.",
        "right-override-export-depth": "Beim Sigge Expoteere de Sigge metnämme, woh Lingks drop jon — beß fönef Schredde wigk",
        "right-sendemail": "<i lang=\"en\">e-mail</i> aan ander Metmaacher schecke",
        "right-passwordreset": "De <i lang=\"en\">e-mails</i> vum Paßwoot neu Säze aanloore",
+       "right-managechangetags": "[[Special:Tags|Kännzeijsche]] en de Dahtebangk aanlähje udder fottschmiiße",
        "newuserlogpage": "Logboch för neu Metmaachere",
        "newuserlogpagetext": "He sin de Metmaacher opjelėßß, di sesh nöü aanjemäldt han.",
        "rightslog": "Logboch för Änderunge aan Metmaacher-Räächde",
        "action-viewmyprivateinfo": "de eije päsöönlesche Aanjaabe ze belooere",
        "action-editmyprivateinfo": "Ding päsöönlesche Aanjaabe ze ändere",
        "action-editcontentmodel": "et Modäll vum Ennhald vun Sigge ze verändere",
+       "action-managechangetags": "Kännzeijsche en de Dahtebangk aanlähje udder fottschmiiße",
        "nchanges": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderong}}",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|Ein|$1|Kein}} zigg_em läzde Aanloore",
        "enhancedrc-history": "Väsjohne",
        "pageswithprop-text": "Heh di Sigg zeisch Sigge, di en beschtemmpte Eijeschaff han.",
        "pageswithprop-prop": "Dä name vun dä Eijeschaff:",
        "pageswithprop-submit": "Lohß Jonn!",
+       "pageswithprop-prophidden-long": "en Eijeschaff med enem janz lange Täx als Wäät weed nit aanjezeisch ($1)",
+       "pageswithprop-prophidden-binary": "en Eijeschaff med enem benähre Wäät weed nit aanjezeisch ($1)",
        "doubleredirects": "Ömleitunge op Ömleitunge",
        "doubleredirectstext": "Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de\nzweite Ömleitung hin jeiht. För jewöhnlich es dat dann och de richtije Sigg, wo de iertste Ömleitung ald hen jonn sullt.\n<del>Ußjeshtreshe</del> Reije sin ald äleedesh.\nMet däm „(Ändere)“-Link kanns De de eetste Sigg tirek aanpacke.\nTipp: Merk Der dä Tittel vun dä Sigg dovör.",
        "double-redirect-fixed-move": "Di Sigg [[$1]] es ömjenannt un längk jäz autmattesch öm op di Sigg [[$2]].",
        "unusedimages": "Dateie, die nit en Sigge dren stäche",
        "wantedcategories": "Saachjruppe, die mer noch nit han, die noch jebruch wääde",
        "wantedpages": "Sigge, die mer noch nit han, die noch jebruch wääde",
+       "wantedpages-summary": "He sin Sigge opjeliss, die et noch nit jitt, wo ävver Hyperlinks vun andere Sigge drop jon. en leß met Sigge met Ömleidonge drop fengk mer op dä Sigg [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ene onjöltijje Tittel för en Sigg: $1",
        "wantedfiles": "Dateie, di onß noch fähle",
        "wantedfiletext-cat": "Heh di Datteije sin nit doh. Se wääde ävver jebruch, wi wann se doh wööre.\nDatteije uß frembde Sammlonge künne heh opjeleß sin, och wann et se jitt.\nDi sin dann <del>dorschjeschtresche</del>. \nSigge, woh Datteije jebruch wääde sulle, die mer jaa nit han, fengk mer och en dä [[:$1]].",
        "thumbnail_image-missing": "Di Datei schingk nit doh ze sin: <code>$1</code>",
        "thumbnail_image-failure-limit": "Mieh wi {{PLURAL:$1|eine Versohch|$1 Versohche|keine Versohch}} dat Minnibelldsche ze zeije. Versöhg_et schpääder widder.",
        "import": "Sigge Emporteere",
-       "importinterwiki": "Trans Wiki Emport",
-       "import-interwiki-text": "Wähl en Wiki un en Sigg zem Emporteere us.\nEt Datum vun de Versione un de Metmaacher Name vun de Schriever wääde dobei metjenomme.\nAll de Trans Wiki Emporte wääde em [[Special:Log/import|Emport_Logboch]] fassjehallde.",
+       "importinterwiki": "Empottehre uss_enem andere Wikki",
+       "import-interwiki-text": "Wähl e Wikki un en Sigg zem Emportehre uß.\nEt Dattum vun de Väsiohne un de Metmaacher_Nahme vun de Schriever wähde dobei metjenomme.\nAll de Empochte vun andere Wikkis wähde em [[Special:Log/import|Logbohch vum Empottehre]] faßjehallde.",
        "import-interwiki-sourcewiki": "Vum Wikki:",
        "import-interwiki-sourcepage": "Vun dä Sigg:",
        "import-interwiki-history": "All de Versione vun dä Sigg heh kopeere",
        "importcantopen": "Kunnt op de Datei för dä Emport nit zojriefe",
        "importbadinterwiki": "Verkihrte Interwiki Link",
        "importsuccess": "Dat Emporteere hät jeflupp!",
-       "importnosources": "Heh es kein Quell för dä Tikek-Emport vun ander Wikis enjerich.\nDat ahle Versione Huhlade es avjeschalt, un es nit müjjelich.",
+       "importnosources": "Heh es kein Wikki för_enne tiräkte Empoot enjereesch.\nÄllder Väsjohne huhzelade es nit zohjelohße.",
        "importnofile": "Et wood kein Datei huhjelade för ze Emporteere.",
        "importuploaderrorsize": "De Import-Datei huhzelade jingk scheif, weil dat Denge jrößer wi äloup es.",
        "importuploaderrorpartial": "De Import-Datei huhzelade jingk scheif, weil dat Denge nit komplett zo eng transpotteet woode es. Do fäählt jet.",
        "tooltip-watchlistedit-raw-submit": "Oppassliss neu fasshallde",
        "tooltip-recreate": "En fottjeschmesse Sigg widder zeröckholle",
        "tooltip-upload": "Mem Dattei-Huhlaade loßlääje",
-       "tooltip-rollback": "Nemmp alle Änderunge zeröck, di dä Läzde jemaat hät, dä aan dä Sigg övverhoup jet jedonn hät. Deit nimmieh frore un määd ene automattesche Endraach en „{{int:Summary}}“",
+       "tooltip-rollback": "Nemmp alle Änderonge zeröck, di dä Läzde jemaat hät, dä aan dä heh Sigg övverhoup jet jedonn hät. Deiht nimmieh frohre, un mähd automattesch ene Endraach onger „{{int:Summary}}“ en et Logbohch eren.",
        "tooltip-undo": "„{{UCfirst:{{int:editundo}}}}“ määt der förije Zostand\nfun dä Sigg op, zom Beärbeide un widder Afspeichere.\nEsu kam_mer noch en Aanmärkong en „{{int:summary}}“ maache.",
        "tooltip-preferences-save": "Enstellunge faßhallde",
        "tooltip-summary": "Jif en koote Zesammefassung en",
        "tags": "De jöltijje Makeerunge för Änderunge",
        "tag-filter": "[[Special:Tags|Makeerunge]] ußsöke:",
        "tag-filter-submit": "Beschränke!",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ein|$1|Kein}} Kännzeijsche]]: $2)",
        "tags-title": "Makeeronge",
        "tags-intro": "Heh sin alle de Makeerunge opjeliß, die et Wiki för Änderunge verjevve kann, un wat se bedügge.",
        "tags-tag": "Dä Makeerung iere Name",
        "tags-activate": "aanschallde",
        "tags-deactivate": "ußschallde",
        "tags-hitcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}}",
+       "tags-manage-no-permission": "Do häs nit et Rääsch Kännzeijsche ze verwallde.",
+       "tags-create-heading": "E neu Kännzeijsche aanlähje",
+       "tags-create-explanation": "Neu aanjelahte Kännzeijsche schtonn schtandattmähßesch för de Metmaacher un de Bots parraht.",
+       "tags-create-tag-name": "Däm Kännzeijsche singe Nahme:",
        "tags-create-reason": "Jrond:",
        "tags-create-submit": "Lohß Jonn!",
-       "tags-delete-explanation-in-use": "It will vun {{PLURAL:$2|eine Väsjohn udder einem Enndrahch|alle $2 Väsjohn udder Endrähsch|keine Väsjohn udder keinem Endrahsch}} em Logbohch, woh dat to which it is currently applied.",
+       "tags-create-no-name": "Do moß der Nahme vun enem Kännzeijsche aanjävve",
+       "tags-create-invalid-chars": "En de Nahme för Kännzeijsche dörve kein Kommas (<code>,</code>) un kein scheive Schtresche (<code>/</code>) dren sin.",
+       "tags-create-invalid-title-chars": "En de Nahme för Kännzeijsche dörve kein Zeische dren sin, di em nit en de Övverschreffte vun Sigg bruche darref.",
+       "tags-create-already-exists": "Dat Kännzeijsche „$1“ jidd_et ald.",
+       "tags-create-warnings-above": "Opjepaß: Beim Kännzeijsche „$1“ aanlähje \n{{PLURAL:$2|es ene|sinner $1|es keine}} Fähler opjetrodde:",
+       "tags-create-warnings-below": "Wells De wigger maache un dat Kännzeijsche aanlähje?",
+       "tags-delete-title": "Kännzeijsche fottschmiiße",
+       "tags-delete-explanation-initial": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ us de Dahtebangk ze wärfe.",
+       "tags-delete-explanation-in-use": "Et weed vun {{PLURAL:$2|eine Väsjohn udder einem Enndrahch|alle $2 Väsjohn udder Endrähsch|keine Väsjohn udder keinem Endrahsch}} em Logbohch fott jenumme, woh dat em Momang noch dren es.",
+       "tags-delete-explanation-warning": "Dat kam_mer <strong>nit retuur</strong> maache.\nOch wä tiräk en de Dahtebangk met alle Rääschte werreke darf, kann dat nit. Alsu bes sescher, dat dat Kännzeijsche es, wat De fottschmiiße wells.",
+       "tags-delete-explanation-active": "<strong>Dat Kännzeijsche „$1“ es noch aanjeschalldt un weed wigger jebruch wähde.</strong> Öm dat ze verhendere, jangk aan dä Plaz udder all de Pläz, woh dat noch aanjeschalldt es, un donn et doh affschallde.",
        "tags-delete-reason": "Jrond:",
+       "tags-delete-submit": "Onzeröckhollbaa fottschmiiße!",
+       "tags-delete-not-allowed": "Kännzeijsche, di övver Zohsazprojramme faßjelaat wääde, kam_mer blß fottschmiiße, wann dat Zohsazprojramm et zohlöht.",
+       "tags-delete-not-found": "E Kännzeijsche „$1“ jidd_et nit.",
+       "tags-delete-too-many-uses": "Dat Kännzeijsche „$1“ es för {{PLURAL:$2|mieh wi ein Väsjohn|övver $2 Väsjohn|kein Väsjohn}} em jebruch, dröm kam_mer et nit fottschmiiße.",
+       "tags-delete-warnings-after-delete": "Dat Kännzeijsche „$1“ es fottjeschmeße, ävver {{PLURAL:$2|ei Problem|$2 Probleme|kein Problem}} es opjevalle:",
+       "tags-activate-title": "Kännzeijsche aanschallde",
+       "tags-activate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ aanzeschallde.",
        "tags-activate-reason": "Jrond:",
+       "tags-activate-not-allowed": "Ed es nit müjjelesch, et Kännzeijsche „$1“ aanzeschallde.",
+       "tags-activate-not-found": "Dat Kännzeijsche „$1“ jidd_et nit.",
        "tags-activate-submit": "Aktivehre",
+       "tags-deactivate-title": "Kännzeijsche afschallde",
+       "tags-deactivate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ afzeschallde.",
        "tags-deactivate-reason": "Jrond:",
+       "tags-deactivate-not-allowed": "Ed es nit müjjelesch, et Kännzeijsche „$1“ afzeschallde.",
        "tags-deactivate-submit": "Ußschallde",
        "comparepages": "Sigge verjliesche",
        "compare-page1": "De ein Sigg",
        "revdelete-uname-unhid": "der Name vum Metmaacher öffentlesh jemaat",
        "revdelete-restricted": ", och för de Wiki-Köbesse",
        "revdelete-unrestricted": ", och för de Wiki-Köbesse",
-       "logentry-merge-merge": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ met dä Sigg „$4“ zersamme jelaat &emdash; Väsjohne bes  $5",
+       "logentry-block-block": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|dä|dat|dä Metmaacher|de|dat}} $3 för en Zigg vun $5 jeschpächt. $6",
+       "logentry-block-unblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr opjehovve.",
+       "logentry-block-reblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr för di Zigg vun $5 verändert. $6",
+       "logentry-suppress-block": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|dä|dat|dä Metmaacher|de|dat}} $3 för en Zigg vun $5 jespächt. $6",
+       "logentry-suppress-reblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr för di Zigg vun $5 verändert. $6",
+       "logentry-merge-merge": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ met dä Sigg „$4“ zersamme jelaat, jenou jenumme de Väsjohne bes $5",
        "logentry-move-move": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt.",
        "logentry-move-move-noredirect": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei kein Ömleidong aanjelaat.",
        "logentry-move-move_redir": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleindongßsigg fottjeschmeße.",
        "logentry-upload-upload": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Dattei „$3“ huhjelahe.",
        "logentry-upload-overwrite": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät en neue Väsjohn vun dä Dattei „$3“ huhjelahe.",
        "logentry-upload-revert": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Dattei „$3“ huhjelahe.",
+       "log-name-managetags": "Logbohch vun de Kännzeijsche_Verwaldong",
+       "log-description-managetags": "Heh sin de Veränderonge em Zersammehang vun de [[Special:Tags|Kännzeijsche]] faßjehallde. En däm Logbohch schteiht blohß de Wikki_Köhbeße händesch jedonn han. Kännzeijsche künne och vum Wikki automattesch aanjelaat un fott jemaat wääde, un douche dann heh nit op.",
+       "logentry-managetags-create": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ aanjelaat.",
+       "logentry-managetags-delete": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ fottjeschmeße un derbei uß {{PLURAL:$5|eine Väsjohn udder einem Enndraach|$5 Väsjohne udder $5 Enndrähsch|keine Väsjohn udder keinem Enndraach}} vum Logbohch eruß jenumme.",
+       "logentry-managetags-activate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ aanjeschalldt för de Metmaacher un de Bots.",
+       "logentry-managetags-deactivate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ för de Metmaacher un de Bots afjeschalldt.",
        "rightsnone": "(nix)",
        "revdelete-summary": "dä Täx en „{{int:summary}}“",
        "feedback-bugornote": "Wann de em Bejreff bes, övver e täschesch Probleem ze schrieve, bes esu jood un donn dat als en [$1 Fählermäldong].\nSöns, nemm dat koote Fommulaa heh dronger.\nWat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg „[$3 $2]“ drop.",
        "api-error-overwrite": "En Dattei ze övverschrieve es nit zohjelohße.",
        "api-error-stashfailed": "Fähler: Dä ẞööver hät kein Datteije zweschejeschpeischert.",
        "api-error-publishfailed": "Ene Fähler es em ẞööver opjetrodde. En zweschejescheischerte Dattei kunnt nit öffentlesch jemaat wääde.",
+       "api-error-stasherror": "Ene Fähler es opjetrodd, wi mer di Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> huh aam lahde wohre.",
+       "api-error-stashedfilenotfound": "Di Dattei wohd em <i lang=\"en\" xml:lang=\"en\">stash</i> nit jefonge, wi mer se vun doh huh lahde wullte.",
+       "api-error-stashpathinvalid": "Di Dattei wohd em <i lang=\"en\" xml:lang=\"en\">stash</i> nit jefonge, weil dä Pad do hen nit jeschtemmp hät.",
+       "api-error-stashfilestorage": "Ene Fähler es opjetrodd, wi mer di Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> donn wullte.",
+       "api-error-stashzerolength": "Dä ẞööver kunnt di Dattei nit en der <i lang=\"en\" xml:lang=\"en\">stash</i> donn, weil en dä Dattei nix dren schtund.",
+       "api-error-stashnotloggedin": "Do moß enjelogg sin, öm en Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> huh ze lahde.",
+       "api-error-stashwrongowner": "Di Dattei em <i lang=\"en\" xml:lang=\"en\">stash</i> woh De draan wells, jehürt Der nit.",
+       "api-error-stashnosuchfilekey": "Di Dattei em <i lang=\"en\" xml:lang=\"en\">stash</i> woh De draan wells, jidd_et nit.",
        "api-error-timeout": "Dä ẞööver hät en dä jewennde Zick nit jeantwoot.",
        "api-error-unclassified": "Ene Fähler es opjetrodde, der mer nit kenne.",
        "api-error-unknown-code": "Nit bekannte Fähler: „$1“",
        "log-name-pagelang": "Logbooch vum Tuusche vun Sige iehr Schprohche",
        "log-description-pagelang": "Dat heh es et Logbohch vun de Veränderonge aan de Schprohch vun de Sigge.",
        "logentry-pagelang-pagelang": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Schprohch vun dä Sigg „$3“ vun $4 op $5 verändert.",
+       "default-skin-not-found": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndraach <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\nHeh di Bedehnbovverfläsche sin doh:\n\n$2\n\nLohr och en et [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Handbohch övver et Enschtälle vun Bedehnbovverfläsche].\n\n*'''Falls dat heh e fresch enjereesch MeedijaWikki es:'''\n*: MeedijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> eschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier eschtallehrt. Met däm Problehm heh wohr ze rääschne. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche vum MeedijaWikki] enschtallehre. Dat jeihd, endämm dat De:\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MeedijaWikki_Enschtallazuhn holls,\n*:* winneschsdens eins vun dä Verzeischneße us <code lang=\"en\" xml:lang=\"en\">mediawiki/skins/*</code> met <i lang=\"en\" xml:lang=\"en\">Git</i> en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MeedijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MeedijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MeedijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MeedijaWikki bes.\n*'''Falls dat MeedijaWikki heh jrahd obb ene neue Schtand jebraht wood:'''\n*: Bei MeedijaWikki en dä Väsjohn 1.24 un hüüter wääde de enschtallehrte Bedehnbovverfläsche nit mieh automattesch alle aanjemaat; süsch och em [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handbohch] derhoh. Do kanns heh di Reihje e de Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> eren koppehre, öm alle enschtallehrte Bedehnbovverfläsche aanzemaache:\n*:<pre lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3</pre>\n* '''Falls de jrahd aan dä Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> jät geändert häs:'''\n*: Donn de Nahme vun de Bedehnbovverfläsche en dä Dattei pröhve. Se künnte verhehrt jeschrevve sin.",
+       "default-skin-not-found-no-skins": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndraach <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\nEt sinn_er kein Bedehnbovverfläsche doh.\n\n*'''Falls dat heh e fresch enjereesch MeedijaWikki, es udder jrahd obb ene neue Schtand jebraht wood:'''\n*: MeedijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> eschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier eschtallehrt. Met däm Problehm heh wohr ze rääschne. Bei MeedijaWikki en dä Väsjohn 1.24 un hüüter sin kein Bedehnbovverfläsche mieh automattesch derbei. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche] enschtallehre. Dat jeihd, endämm dat De:\n*:* winneschsdens eins vun dä Verzeischneße us <code lang=\"en\" xml:lang=\"en\">mediawiki/skins/*</code> met <i lang=\"en\" xml:lang=\"en\">Git</i> en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MeedijaWikki_Enschtallazuhn holls,\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MeedijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MeedijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz dder derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge vun dä MeedijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">Git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MeedijaWikki bes. Loor em [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handbohch] derhoh, wi mer Bedehnbovverfläsche aanmääd un ene Schtandatt faßlähsch.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enjeschalldt)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ußjeschalldt''')",
        "mediastatistics": "Schtateßteke övver de Meedije",
        "mediastatistics-summary": "Schtatißteke övver de huhjelahde Zoote Datteije. Von de Datteije weed bloß de jeweils neuste Väsjohn jezallt. Fottjeschmeße un övverhollte Datteije wähde nit metjezallt.",
+       "mediastatistics-nfiles": "$1 ($2%)",
        "mediastatistics-nbytes": "{{PLURAL:$1|Ei Byte|$1 Bytes|Nix}} ($2; $3%)",
        "mediastatistics-table-mimetype": "<i lang=\"en\" xml:lang=\"en\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp",
        "mediastatistics-table-extensions": "Müjjelesche Datteizoote",
        "mediastatistics-header-archive": "Kumpremeerte Dahtefommahte",
        "json-warn-trailing-comma": "{{PLURAL:$1|0=Kei Komma wood|1=Ei Komma woodt|$1 Kommas woodte}} aam Ängk vum <i lang=\"en\" xml:lang=\"en\">JSON</i> fott jenumme.",
        "json-error-unknown": "Mem <i lang=\"en\" xml:lang=\"en\">JSON</i> es jät scheif jeloufe: $1",
+       "json-error-depth": "Der ẞtägg eß övverjeloufe",
        "json-error-state-mismatch": "Onjöltesch udder kapott <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"JavaScript Object Notation\">JSON</i>-Fommaat",
        "json-error-ctrl-char": "Verkeht Schtührzeijsche. Künnt ene Fähler mem Kodehre sin.",
        "json-error-syntax": "Fähler en de Syntax",
index 0c55c6c..975de0a 100644 (file)
        "createaccount-text": "Aliquis creavit rationem pro inscriptione electronica tua apud {{grammar:accusative|{{SITENAME}}}} ($4). Nomen usoris est \"$2\" et tessera est \"$3\". Conventum aperias et statim tesseram tuam mutes.\n\nHunc nuntium ignorare potes, si nolis hac ratione uti.",
        "login-abort-generic": "Conventum aperire non contigit - Desitum",
        "loginlanguagelabel": "Lingua: $1",
+       "pt-login": "Conventum aperire",
+       "pt-login-button": "Conventum aperire",
+       "pt-createaccount": "Conventum creare",
+       "pt-userlogout": "Conventum concludere",
        "changepassword": "Tesseram mutare",
        "resetpass_header": "Tesseram rationis mutare",
        "oldpassword": "Tessera vetus:",
        "newarticletext": "Per nexum progressus es ad paginam quae nondum exsistit.\nNovam paginam si vis creare, in capsam infra praebitam scribe.\n(Vide [$1 paginam auxilii] si plura cognoscere vis.)\nSi hic es propter errorem, solum '''Retrorsum''' in navigatro tuo preme.",
        "anontalkpagetext": "----''Haec est pagina disputationis usoris anonymi, solum a loco IP suo noti. Memento locos IP aliquando mutaturos, et a usoribus multis fortasse adhibitos. Si es usor ignotus, et tibi querulae sine causa datae sunt, conventum [[Special:UserLogin/signup|crea]] vel [[Special:UserLogin|aperi]] ad confusionem futuram evitendam.''",
        "noarticletext": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre]\naut [{{fullurl:{{FULLPAGENAME}}|action=edit}} hanc paginam creare]</span>.",
+       "noarticletext-nopermission": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]] aut <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre], sed tibi non licet hanc paginam creare.",
        "userpage-userdoesnotexist": "Usor \"<nowiki>$1</nowiki>\" non est. Visne re vera hanc paginam creare vel recensere?",
        "updated": "(Novata)",
        "note": "'''Nota:'''",
        "currentrev": "Emendatio recentissima",
        "currentrev-asof": "Emendatio recentissima ex $1",
        "revisionasof": "Emendatio ex $1",
-       "revision-info": "Emendatio ex $1 ab $2",
+       "revision-info": "Emendatio ex $1 ab $2$7",
        "previousrevision": "← Emendatio senior",
        "nextrevision": "Emendatio novior →",
        "currentrevisionlink": "Emendatio currens",
        "boteditletter": "a",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usor custodiens|usores custodientes}}]",
        "rc_categories_any": "Ulla",
+       "rc-change-size-new": "$1 {{PLURAL:$1|octetus|octeti}} post recensionem",
        "newsectionsummary": "/* $1 */ nova pars",
        "rc-enhanced-expand": "Minima monstrare",
        "rc-enhanced-hide": "Minima celare",
        "deletereason-dropdown": "*Causae deletionum communes\n** Spam\n** Vandalismus\n** Violatio verborum privatorum\n** Desiderium auctoris\n** Redirectio fracta",
        "delete-edit-reasonlist": "Causas deletionum recensere",
        "rollback": "Reverti mutationes",
-       "rollback_short": "Reverti",
        "rollbacklink": "reverti",
        "rollbacklinkcount": "reverti {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "rollbacklinkcount-morethan": "reverti plus quam {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "file-nohires": "Nulla maior resolutio exstat.",
        "svg-long-desc": "fasciculus SVG, nominale $1 × $2 elementa imaginalia, magnitudo fasciculi: $3",
        "show-big-image": "Resolutio completa",
+       "show-big-image-size": "$1 × $2 elementa imaginalia",
        "file-info-gif-frames": "$1 {{PLURAL:$1|replum|repla}}",
        "newimages": "Fasciculi novi",
        "imagelisttext": "Subter est index {{PLURAL:$1|'''unius''' fasciculi|'''$1''' fasciculorum}} digestus $2.",
index af64e28..50db3ef 100644 (file)
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-json-empty-object": "Eidelen Objet",
+       "content-json-empty-array": "Eidel Tabell",
        "expensive-parserfunction-warning": "'''Opgepasst:'' Dës Säit huet ze vill Ufroe vu komplexe Parserfunktiounen.\n\nEt däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|ass et $1 Ufro|sinn et $1 Ufroe}}.",
        "expensive-parserfunction-category": "Säiten, déi komplex Parserfunktiounen ze dacks opruffen",
        "post-expand-template-inclusion-warning": "Opgepasst: D'Gréisst vun den agebonnene Schablounen ass ze grouss, e puer Schabloune kënnen net agebonne ginn.",
        "unusedimages": "Net benotzt Fichieren",
        "wantedcategories": "Gewënscht Kategorien",
        "wantedpages": "Gewënscht Säiten",
+       "wantedpages-summary": "Op dëser Spezialsäit stinn all Säiten, déi nach net existéieren, déi awer scho vu Säiten, déi et scho gëtt, verlinkt sinn.",
        "wantedpages-badtitle": "Net valabelen Titel am Resultat: $1",
        "wantedfiles": "Gewënscht Fichieren",
        "wantedfiletext-cat": "Dës Fichiere gi benotzt awer et gëtt se net. Fichiere aus frieme Repositorie kënnen hei gewise ginn och wann et se gëtt. All sou falsch Positiver ginn <del>duerchgestrach</del>. Zousätzlech gi Säiten an deene Fichieren dra sinn déi et net gëtt op [[:$1]] gewisen.",
        "tags-activate": "aktivéieren",
        "tags-deactivate": "desaktivéieren",
        "tags-hitcount": "$1 {{PLURAL:$1|Ännerung|Ännerungen}}",
+       "tags-create-tag-name": "Numm vun der Markéierung (Tag):",
        "tags-create-reason": "Grond:",
        "tags-create-submit": "Uleeën",
        "tags-create-already-exists": "D'Markéierung (tag) ''$1'' gëtt et schonn.",
        "mediastatistics-header-text": "Textuell",
        "mediastatistics-header-archive": "Kompriméiert Formater",
        "json-error-unknown": "Et gouf e Problem mam JSON. Feeler: $1",
-       "json-error-syntax": "Syntaxfeeler"
+       "json-error-state-mismatch": "JSON den net valabel ass oder Feeler huet",
+       "json-error-syntax": "Syntaxfeeler",
+       "headline-anchor-title": "Link op dësen Abschnitt"
 }
index 13620dd..c498ce1 100644 (file)
@@ -14,7 +14,8 @@
                        "Remember the dot",
                        "Tibor",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Robin0van0der0vliet"
                ]
        },
        "tog-underline": "Links óngersjtriepe",
        "cancel": "Aafbraeke",
        "moredotdotdot": "Miè...",
        "mypage": "Mien gebroekerspagina",
-       "mytalk": "Mien euverlèkpagina",
+       "mytalk": "Euverlèk",
        "anontalk": "Euverlèk veur dit IP adres",
        "navigation": "Navigatie",
        "and": "&#32;en",
        "virus-unknownscanner": "onbekeng antivirus:",
        "logouttext": "'''De bis noe aafgemeld.'''\n\nDe kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of <span class='plainlinks'>[$1 opnuuj aanmelde]</span> ónger dezelfde of 'ne angere naam.\nMäögelik waert nog 'n deil pagina's getuind esofs te nog aangemeld bis pès te de cache van diene browser laeg maaks.",
        "yourname": "Diene gebroekersnaam",
+       "userlogin-yourname": "Gebroekersnaam",
        "yourpassword": "Die wachwaord",
+       "userlogin-yourpassword": "Wachwaord",
        "yourpasswordagain": "Wachwaord opnuuj intype",
        "remembermypassword": "Mien wachwaord onthouwe veur later sessies (hoegstens $1 {{PLURAL:$1|daag|daag}})",
        "yourdomainname": "Die domein",
        "login-abort-generic": "Doe bös neet aangemèldj - Aafgebraoke",
        "loginlanguagelabel": "Taol: $1",
        "suspicious-userlogout": "Dien verzeuk óm aaf te melde is genegeerd, ómdet 't liek esof 't verzeuk is versjik door 'ne browser of cacheproxy dae kepot is.",
+       "pt-login": "Aanmèlde",
+       "pt-login-button": "Aanmèlde",
+       "pt-userlogout": "Aafmelde",
        "php-mail-error-unknown": "Dao haet ziech 'n ónbekénde fout veurgedaon in de mail()-functie van PHP",
        "user-mail-no-addy": "Perbeerdjes 'ne mail te sjikke zónger 'n adres",
        "changepassword": "Wachwaord verangere",
        "search-external": "Extern zeuke",
        "searchdisabled": "Zeuke op {{SITENAME}} is oetgesjakeld vanweige gebrek aan servercapaciteit.\nZoelang as de servers nog neet sjterk genog zunt kins e zeuke bie Google.\nMèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.",
        "preferences": "Veurkäöre",
-       "mypreferences": "Mien veurkäöre",
+       "mypreferences": "Veurkäöre",
        "prefs-edits": "Aantal bewèrkinge:",
        "prefs-skin": "{{SITENAME}}-uterlik",
        "skin-preview": "Veurbesjouwing",
        "action-siteadmin": "de database aaf te sloete of aope te stelle",
        "action-sendemail": "Sjik e-mails",
        "nchanges": "$1 {{PLURAL:$1|bewerking|bewerkinge}}",
+       "enhancedrc-history": "historie",
        "recentchanges": "Lètste verangeringe",
        "recentchanges-legend": "Opties veur recènte verangeringe",
        "recentchanges-summary": "Volg de recènste bewirkinge op deze wiki op dees pagina.",
        "querypage-disabled": "Dees speciaal pagina steit oet veur performanceredene.",
        "booksources": "Bookwinkele",
        "booksources-search-legend": "Zeuk informatie euver 'n book",
+       "booksources-search": "Zeuk",
        "booksources-text": "Hiej onger stuit 'n lies met koppelinge nao anger websites die nuuje of gebroekde beuk verkoupe, en die wellich meer informatie euver 't book detse zeuks höbbe:",
        "booksources-invalid-isbn": "t Ingegaeve ISBN liek neet geldig te zeen.\nControleer of se wellich n fout höbs gemaak bie de inveur.",
        "specialloguserlabel": "Oetveurder:",
        "delete-toobig": "Dees pazjena haet 'ne lange bewerkingsgesjiedenis, mieë es $1 {{PLURAL:$1|versie|versies}}. 't Wisse van dit saort pazjena's is mit rech beperk óm 't próngelök versteure van de werking van {{SITENAME}} te veurkómme.",
        "delete-warning-toobig": "Dees pazjena haet 'ne lange bewerkingsgesjiedenis, mieë es $1 {{PLURAL:$1|versie|versies}}. 't Wisse van dees pazjena kan de werking van de database van {{SITENAME}} versteure. Bön veurzichtig.",
        "rollback": "Verangering ongedaon gemaak",
-       "rollback_short": "Trökdrèjje",
        "rollbacklink": "Trökdrieje",
        "rollbackfailed": "Ongedaon make van wieziginge mislùk.",
        "cantrollback": "Trökdrejje van verangeringe neet meugelik: Dit artikel haet mer einen auteur.",
        "blanknamespace": "(hoofnaamruumde)",
        "contributions": "Biedrages per gebroeker",
        "contributions-title": "Biedrage van $1",
-       "mycontris": "Mien biedrage",
+       "mycontris": "Biedrage",
        "contribsub2": "Veur $1 ($2)",
        "nocontribs": "Gein wijzigingen gevonden die aan de gestelde criteria voldoen.",
        "uctop": "(lèste verangering)",
        "import-logentry-interwiki": "transwiki veur $1 geslaag",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2",
        "javascripttest": "Tes JavaScript",
-       "javascripttest-title": "Veur tes oet veur $1",
        "javascripttest-pagetext-noframework": "Dees pagina is gerizzerveerd veur 't oetveure van JavaScriptteste.",
        "javascripttest-pagetext-unknownframework": "Ónbekèndje testframework \"$1\".",
        "javascripttest-pagetext-frameworks": "Kees ein vanne volgende tesframeworks: $1",
        "javascripttest-pagetext-skins": "Kees 'n oeterlik óm de teste op te laote loupe:",
        "javascripttest-qunit-intro": "Zuuch de [$1 tesdocumentatie] op mediawiki.org.",
-       "javascripttest-qunit-heading": "QUnit tessuite veur MediaWiki JavaScript",
        "tooltip-pt-userpage": "Dien gebroekerspagina",
        "tooltip-pt-anonuserpage": "De gebroekerspazjena veur dit IP adres",
        "tooltip-pt-mytalk": "Dien euverlèkpagina",
        "watchlisttools-edit": "Volglies bekieke en bewirke",
        "watchlisttools-raw": "Roew volglies bewirke",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|euverlègk]])",
-       "unknown_extension_tag": "Ónbekindje tag \"$1\"",
        "duplicate-defaultsort": "Waarsjuwing: De standaardsortering \"$2\" krieg veurrang veur de sortering \"$1\".",
        "version": "Versie",
        "version-extensions": "Geïnstalleerde oetbreijinge",
        "specialpages-group-wiki": "Wikigegaeves en -hölpmiddele",
        "specialpages-group-redirects": "Doorverwiezende speciaal pazjena's",
        "specialpages-group-spam": "Spamhölpmiddele",
+       "specialpages-group-developer": "Hölpmiddele veur óntwikkeleers",
        "blankpage": "Laeg pazjena",
        "intentionallyblankpage": "Deze pagina is bewus laeg gelaote en wurt gebroek veur benchmarks, enzovoort.",
        "external_image_whitelist": " #Laot deze regel onveranderd<pre>\n#Zèt hierónger reguliere expressiefragmente (allein 't deil det tusse de // steit)\n#Deze waere gehaaje taenge de URL's van externe (gehotlinkte) aafbeeldinge\n#Es de reguliere expressie van toegang is, wurd 'n aafbeelding weergegaeve, anges wurd allein 'n verwiezing weergegaeve\n#Regels die beginne met \"#\" waere es opmerking behanjeld\n#Regels in de witte lies zeen neet hooflettergeveulig.\n\n#Zet alle reguliere expressiefragmenten baove deze regel. Laot deze regel onveranderd</pre>",
index 7636ee2..b41d36e 100644 (file)
@@ -15,7 +15,9 @@
                        "LNDDYL",
                        "Jason924tw",
                        "灰太狼Wolffy55",
-                       "RalfX"
+                       "RalfX",
+                       "Davidzdh",
+                       "Nemo bis"
                ]
        },
        "tog-underline": "鏈墊線:",
        "tog-hidepatrolled": "隱近巡",
        "tog-newpageshidepatrolled": "隱新巡",
        "tog-extendwatchlist": "展列見變",
-       "tog-usenewrc": "青出近易(JavaScript)",
+       "tog-usenewrc": "青出近易",
        "tog-numberheadings": "生章數",
-       "tog-showtoolbar": "多寶列見(JavaScript)",
+       "tog-showtoolbar": "多寶列見",
        "tog-editondblclick": "雙擊以纂頁",
-       "tog-editsectiononrightclick": "纂段右擊標(JavaScript)",
+       "tog-editsectiononrightclick": "纂段右擊標",
        "tog-watchcreations": "哨己撰",
        "tog-watchdefault": "哨己纂",
        "tog-watchmoves": "派哨予吾遷之頁",
@@ -42,7 +44,7 @@
        "tog-shownumberswatching": "放哨有",
        "tog-oldsig": "覽原署名:",
        "tog-fancysig": "署以本碼待之(免自連)",
-       "tog-uselivepreview": "即覽嚐鮮(JavaScript)",
+       "tog-uselivepreview": "即覽嚐鮮",
        "tog-forceeditsummary": "漏概醒之",
        "tog-watchlisthideown": "不哨己文",
        "tog-watchlisthidebots": "不哨僕文",
        "newwindow": "啟窗",
        "cancel": "捨",
        "moredotdotdot": "見逾",
-       "morenotlisted": "示未出之項",
+       "morenotlisted": "列未成。",
        "mypage": "寒舍",
        "mytalk": "書房",
        "anontalk": "與(IP)私議",
        "permalink": "恆通",
        "print": "印",
        "view": "察",
+       "view-foreign": "觀於$1",
        "edit": "纂",
        "create": "立",
        "editthispage": "纂",
        "hidetoc": "藏",
        "collapsible-collapse": "摺",
        "collapsible-expand": "展",
+       "confirmable-confirm": "{{GENDER:$1|汝}}無悔?",
        "confirmable-yes": "是",
        "confirmable-no": "否",
        "thisisdeleted": "還$1或閱之?",
        "missingarticle-diff": "(異:$1,$2)",
        "internalerror": "家誤",
        "internalerror_info": "家誤:$1",
-       "filecopyerror": "\"$1\"謄\"$2\",未可為也。",
+       "filecopyerror": "謄\"$1\"至\"$2\",未可為也。",
        "filerenameerror": "\"$2\"替\"$1\"名,未可為也。",
        "filedeleteerror": "\"$1\"未可刪也。",
        "directorycreateerror": "立目\"$1\",未可為也。",
        "boteditletter": "僕",
        "number_of_watching_users_pageview": "[放有$1哨]",
        "rc_categories_any": "任",
+       "rc-change-size-new": "既纂,本文有$1字節",
        "newsectionsummary": "/* $1 */ 新節",
        "rc-enhanced-expand": "示細(要 JavaScript)",
        "rc-enhanced-hide": "藏細",
        "tooltip-pt-mycontris": "刻勛功、追作續、慰苦勞",
        "tooltip-pt-login": "設書齋、錄功績、廣放哨",
        "tooltip-pt-logout": "凡事盡,乘雲飄",
+       "tooltip-pt-createaccount": "勸君增簿以登,然非必須之舉",
        "tooltip-ca-talk": "求異見、辯是非、妥紛擾",
        "tooltip-ca-edit": "拓文意、校誤謬、潤辭藻",
        "tooltip-ca-addsection": "有言議,添新要",
        "specialpages-group-wiki": "Wiki訊與器",
        "specialpages-group-redirects": "轉之特查",
        "specialpages-group-spam": "反垃圾之器",
+       "specialpages-group-developer": "造紙者之器",
        "blankpage": "白頁",
        "intentionallyblankpage": "此頁為白也,試速之用",
        "external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
        "revdelete-summary": "摘",
        "searchsuggest-search": "尋",
        "pagelang-language": "語",
+       "default-skin-not-found": "嚄!君於<code dir=\"ltr\">$wgDefaultSkin</code>所設之膚無以用也。君所用版本,似需含膚下者也。可於MediaWiki之官網[https://www.mediawiki.org/wiki/Manual:Skin_configuration “設膚”]之冊,以知啟而許膚之法。\n\n$2\n\n; 若君安MediaWiki未幾:\n: 君或安自git庫。或以他法徑安自源始碼,若如此甚善。汝可試下者之法,自[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org之膚庫]安膚些許:\n:* 載下[https://www.mediawiki.org/wiki/Download/lzh 群安之器]。若依此道,則將预安膚與拓器些許。君可謄而貼<code>skins/</code>于焉。\n:* 自[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]獨載下安膚包。\n:* 以git徑謄自<code>mediawiki/skins/*</code>儲物库,至君MediaWiki副本之<code dir=\"ltr\">skins/</code>。\n: 若君MediaWiki開發者也,則為之應擾不及君之git儲物庫。\n\n; 若君MediaWiki新矣:\n: 自MediaWiki 1.24版本始,已安之膚不復自啟(見[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 冊])。君可謄而貼字下者,至君圍紀之<code>LocalSettings.php</code>以啟膚已安者:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若君已改<code>LocalSettings.php</code>:\n: 请再查膚名,以保之無誤。",
        "mediastatistics-header-unknown": "未知",
        "mediastatistics-header-video": "映像",
        "json-error-syntax": "語法有誤"
index 081238a..abbd91b 100644 (file)
@@ -20,7 +20,8 @@
                        "아라",
                        "बिप्लब आनन्द",
                        "सरोज कुमार ढकाल",
-                       "Bijay chaurasia"
+                       "Bijay chaurasia",
+                       "Tulsi Bhagat"
                ]
        },
        "tog-underline": "लिंककेँ रेखांकित करू:",
        "shared-repo-from": "$1 सँ",
        "shared-repo": "एकटा साझी बखारी",
        "shared-repo-name-wikimediacommons": "सामान्य विकीमीडिया",
+       "upload-disallowed-here": "अपने यी फ़ाइलके अधिलेखित नै कैरऽ सकै छि।",
        "filerevert": "$1 लग घुरु",
        "filerevert-legend": "घुराएल संचिका",
        "filerevert-intro": "अहाँ संचिका घुराबैले छी '''[[Media:$1|$1]]''' केँ [$4 संस्करण $3, $2 केँ] लग।",
        "deleteprotected": "अहाँ इ पन्ना नै मेटा सकए छी कियाकि ई सुरक्षण कएल गेल अछि",
        "deleting-backlinks-warning": "'''चेतौनी:''' जे पृष्ठ अहाँ हटावए लेल जा रहल छी वोकरा में  [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठ]] जुड़एत अछि अथवा वोकरा ट्रान्सक्ल्युड करएत अछि।",
        "rollback": "प्रत्यावर्तित सम्पादन",
-       "rollback_short": "प्रत्यावर्तन",
        "rollbacklink": "प्रत्यावर्तन",
        "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
        "rollbacklinkcount-morethan": "$1 सँ अधिक {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
        "import-logentry-interwiki": "विकीअन्तरण क देलौ $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}} $2 सँ",
        "javascripttest": "जावास्क्रिप्ट परिक्षण",
-       "javascripttest-title": "$1 परीक्षण चइल रहल अछि",
        "javascripttest-pagetext-noframework": "इ पृष्ठ जावास्क्रिप्ट परीक्षण चलावए के लेल अछि।",
        "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
        "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचा सभ में सँ एक चुनु: $1",
        "javascripttest-pagetext-skins": "परीक्षण करए के लेल त्वचा चुनु:",
        "javascripttest-qunit-intro": "mediawiki.org पर [$1 परीक्षण के प्रलेखन] देखु।",
-       "javascripttest-qunit-heading": "मेडियाविकि जावास्क्रिप्ट क्यू-युनिट परीक्षण ढाँचा",
        "tooltip-pt-userpage": "अहाँक खेसरा पन्ना",
        "tooltip-pt-anonuserpage": "सम्पाद्न कएल जा रहल स्थानक  अनिकेतक प्रयोक्ता पन्ना",
        "tooltip-pt-mytalk": "अहाँक वार्त्ता पृष्ठ",
        "spambot_username": "मीडियाविकी अनिष्ट संकेत सफाइ",
        "spam_reverting": "अन्तिम संशोधन लग घुरल जइमे $1 लागि नै अछि",
        "spam_blanking": "सभटा संशोधन $1 लागिसँ युक्त अि, खतम कऽ रहल छी",
+       "simpleantispam-label": "ऐन्टी-स्पैम जाँच।\nयी मऽ <strong>नै</strong> भरु!",
        "pageinfo-title": "\"$1\"पृष्ठक लेल नब गप",
        "pageinfo-header-basic": "न्यूनतम जानकारी",
        "pageinfo-header-edits": "संपादन",
index 7099fd6..9cfa66d 100644 (file)
        "pool-queuefull": "Feno ny lisitry ny asa hatao",
        "pool-errorunknown": "Tsi-fetezana tsy fantatra",
        "pool-servererror": "Tsy mandeha ny rahraha fanisana ($1).",
+       "poolcounter-usage-error": "Hadisoam-pampiasana : $1",
        "aboutsite": "Mombamomba ny {{SITENAME}}",
        "aboutpage": "Project:Mombamomba",
        "copyright": "Ny lisansa $1 no mamehy ny fampiasana ity voatoatiny ity.",
        "viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
        "protectedinterface": "Ity pejy ity dia manome ny lahatsoratra ho an'ny rindrankajy eto amin'ity Wiki ity, ary narovana mba tsy hisian'ny fanararaotana. Raha tia hanampy na hanova ny dikanteny ho an'ny wiki rehetra, ampiasao [//translatewiki.net/ translatewiki.net], izay tetikasa fandikanan ny rindrankajy Mediawiki.",
        "editinginterface": "<strong> Fampitandremana: <strong> manova pejy ampiasaina amin'ny famoronan-tsoratry ny rindrankajy ianao. Hisy fiatraika amin'ny fisehon'ny interfasim-pikambana ho an'ny mpikambana hafan'ity wiki ity ny fiovana ho atao.",
+       "translateinterface": "Mba hanampy na hanova dikanteny ho an'ny wiki rehetra, dia ampiasao  [//translatewiki.net/ translatewiki.net], na ny tetikasa fandikana Mediawiki.",
        "cascadeprotected": "Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1||$1}}1 mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana \"en cascade\" :\n\n$2",
        "namespaceprotected": "Tsy manana alalàna manova ny toeran'anarana « '''$1''' » ianao.",
        "customcssprotected": "Tsy afaka manova ity pejy CSS ity ianao satria misy ny safidy manokan'ny mpikambana hafa.",
        "prefs-personal": "Mombamomba anao",
        "prefs-rc": "Vao niova",
        "prefs-watchlist": "Lisitry ny pejy arahana-maso",
+       "prefs-editwatchlist": "Hanova ny lisitry ny pejy arahana",
+       "prefs-editwatchlist-label": "Hanova ny iditry ny lisitra arahanao",
+       "prefs-editwatchlist-edit": "Hijery na hanala lohateny ao amin'ny lisitra arahanao",
+       "prefs-editwatchlist-raw": "Hanova ny lisitra arahana amin'ny fomba manta",
+       "prefs-editwatchlist-clear": "Handio ny lisitra arahanao",
        "prefs-watchlist-days": "Isa ny andro haseho anatin'ny lisitra ny pejy arahana-maso",
        "prefs-watchlist-days-max": "$1 {{PLURAL:$1|}} andro farafahabetsany",
        "prefs-watchlist-edits": "Isa ny fanovana aseho eo amin'ny fanaraha-maso navelatra:",
        "recentchangesdays-max": "($1 andro{{PLURAL:$1||}} fara-faha betsany)",
        "recentchangescount": "Isan'ny fanovana haseho (tsipalotra) :",
        "prefs-help-recentchangescount": "Misy ny fiovana farany, ny tantaram-pejy ary ny laogy",
+       "prefs-help-watchlist-token2": "Ity ny lakilen'ny topaka Web ny lisitra arahanao. Afaka mamangy ny lisitra arahanao izay mahalala io lakileo io, ka aza zarazaraina ilay izy. Raha ilainao izany dia afaka [[Special:ResetTokens|manavao izy io ianao]]",
        "savedprefs": "Voatahiry ny mombamomba anao.",
        "timezonelegend": "Faritr'ora :",
        "localtime": "Ora an-toerana",
        "prefs-diffs": "Diff",
        "prefs-help-prefershttps": "Hihatra amin'ny fidiranao manaraka ity safidy ity.",
        "prefswarning-warning": "Efa nanova tamin'ny safidinao tsy mbola voatahiry ianao. Raha miala amin'ity pejy ity amin'ny alalan'ny fanindriana an'i \"$1\" ianao dia tsy ho voavao ny safidinao.",
+       "prefs-tabs-navigation-hint": "Torohevitra: afaka mampiasa ny zana-tsipika havia ary havanana ianao ho an'ny fitetezana ny vakizoro ao amin'ny lisi-bakizoro",
        "email-address-validity-valid": "Adiresy imailaka mameno fepetra",
        "email-address-validity-invalid": "Ilaina ny mametraka adiresy imailaka mameno fepetra",
        "userrights": "Fandrindràna ny fahefahan'ny mpikambana",
        "right-override-export-depth": "Mamoaka ny pejy miaraka amin'ny zana-pejy hatramin'ny ambaratonga fahadimy",
        "right-sendemail": "Mandefa imailaka any amin'ny mpikambana hafa",
        "right-passwordreset": "Hijery ny imailaka famerenana ny tenimiafina",
+       "right-managechangetags": "Mamorona ary mamafa [[Special:Tags|balizy]] ao amin'ny banky angona",
        "newuserlogpage": "Laogim-panokafana kaontim-pikambana",
        "newuserlogpagetext": "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
        "rightslog": "Laogim-piovan'ny zom-pikambana",
        "action-viewmyprivateinfo": "Mijery ny fampahalalana tsy sarababem-bahoakanao",
        "action-editmyprivateinfo": "Mijery ny fampahalalana sarababem-bahoakanao",
        "action-editcontentmodel": "manova ny modelim-botoatin'ny pejy",
+       "action-managechangetags": "hamorona ary hamafa balizy ao amin'ny banky angona",
        "nchanges": "{{PLURAL:$1|fanovana|fanovana}} $1",
        "enhancedrc-since-last-visit": "$1 ({{PLURAL:$1|hatry ny famangiana farany}})",
        "enhancedrc-history": "tantara",
        "uploaddisabledtext": "Tsy afaka andefasana rakitra aloha eto amin'ity wiki ity.",
        "php-uploaddisabledtext": "Ny fampidiran-drakitra dia tsy ampiasaina amin'ny PHP.\nMarino ny option configuration file_uploads.",
        "uploadscripted": "\nMisy kialo HTML na fango script mety tsy ho hain'ny navigateur sasany haseho ity rakitra ity.",
+       "uploadscriptednamespace": "ahitana valan'anarana \"$1\" ny rakitra SVG.",
        "uploadinvalidxml": "Tsy afaka vakiana ny XML tao anatin'ilay rakitra nafaranao.",
        "uploadvirus": "Misy viriosy io rakitra io! Toy izao ny antsipirihany: $1",
        "uploadjava": "Ny rakitra dia rakitra ZIP ahitana rakitra .class Java.\nVoarara ny mandefa rakitra Java satria mety hahavaky ny fepetra mikasika ny antoka ireo rakitra ireo.",
        "backend-fail-readonly": "Amin'izao fotoana dia famakiana ihany ny fitahirizana terminal an'i \"$1\". \"''$2''\" no antony nomena",
        "backend-fail-connect": "Tsy afaka mifandray amin'ny terminal fitahirizana \"$1\".",
        "backend-fail-internal": "Hadisoana tsy fantatra tao anatin'ny terminal fitahirizana \"$1\".",
+       "backend-fail-contenttype": "Tsy afaka maminavina ny karazam-botoatin'ny rakitra hotahirizina ao amin'i \"$1\".",
        "backend-fail-usable": "Tsy afaka nanoratra ny rakitra \"$1\" nohon'ny zo tsy ampy na ny tsy fisian'ny petra-drakitra.",
        "filejournal-fail-dbconnect": "Tsy afaka miantso ilay banky angona laogy ho an'ny terminal fitahirizana \"$1\".",
        "filejournal-fail-dbquery": "Tsy afaka manavao ny banky angona laogy ho an'ilay terminal fitahirizana \"$1\".",
index 6adcfca..49ae37a 100644 (file)
        "readonly_lag": "Базата е автоматски заклучена додека помошните опслужувачи не се усогласат",
        "internalerror": "Внатрешна грешка",
        "internalerror_info": "Внатрешна грешка: $1",
+       "internalerror-fatal-exception": "Кобен исклучок на типот „$1“",
        "filecopyerror": "Не можeв да ја ископирам податотеката „$1“ во „$2“.",
        "filerenameerror": "Не можев да ја преименувам податотеката „$1“ во „$2“.",
        "filedeleteerror": "Не може да се избрише податотеката „$1“.",
        "unusedimages": "Неискористени слики",
        "wantedcategories": "Потребни категории",
        "wantedpages": "Потребни страници",
+       "wantedpages-summary": "Список на непостоечки страници со највеќе врски што водат до нив, исклучувајќи страниците до кои водат само пренасочувања. Список на непостоечки страници до кои водат пренасочувања ќе најдете на [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Невалиден наслов во резултатите: $1",
        "wantedfiles": "Потребни податотеки",
        "wantedfiletext-cat": "Следниве податотеки се користат, но не постојат. Податотеките од други складишта може да се наведени дури и ако постојат. Таквите ќе бидат <del>поништени</del> од списокот. Покрај ова, страниците што содржат податотеки кои не постојат се наведени на [[:$1]].",
        "thumbnail_image-missing": "Изгледа дека податотеката недостасува: $1",
        "thumbnail_image-failure-limit": "Направив премногу обиди ($1 или повеќе) за да ја прикажам минијатурава. Обидете се подоцна.",
        "import": "Увезување на страници",
-       "importinterwiki": "Ð\9cеÑ\93Ñ\83вики Ñ\83воз",
-       "import-interwiki-text": "Избери вики и наслов на страница за увоз.\nДатумите и имињата на уредниците ќе бидат зачувани.\nСите постапки при увозот од другото вики се заведуваат во [[Special:Log/import|дневникот на увезувања]].",
+       "importinterwiki": "Увези Ð¾Ð´ Ð´Ñ\80Ñ\83го Ð²Ð¸ÐºÐ¸",
+       "import-interwiki-text": "Избери вики и наслов на страница за увоз.\nДатумите и имињата на уредниците ќе бидат зачувани.\nСите увози од други викија се заведуваат во [[Special:Log/import|дневникот на увезувања]].",
        "import-interwiki-sourcewiki": "Изворно вики:",
        "import-interwiki-sourcepage": "Изворна страница:",
        "import-interwiki-history": "Копирај ги сите постари верзии за оваа страница",
        "importcantopen": "Не може да се отвори увезената податотека",
        "importbadinterwiki": "Лоша меѓувики-врска",
        "importsuccess": "Увезувањето е завршено!",
-       "importnosources": "Ð\9dема Ð¾Ð¿Ñ\80еделено Ð¼ÐµÑ\93Ñ\83вики-извоÑ\80и Ð·Ð° увоз и непосредните подигања на историја се оневозможени.",
+       "importnosources": "Ð\9dема Ð²Ð¸ÐºÐ¸Ñ\98а Ð¾Ð´ ÐºÐ¾Ð¸ Ð±Ð¸ Ñ\81е Ð¸Ð·Ð²Ñ\80Ñ\88ил увоз и непосредните подигања на историја се оневозможени.",
        "importnofile": "Нема подигнато увозна податотека.",
        "importuploaderrorsize": "Подигањето на увозната податотека не успеа.\nПодатотеката ја надминува допуштената големина.",
        "importuploaderrorpartial": "Подигањето на увозна податотека не успеа.\nПодатотеката е само делумно подигната.",
        "revdelete-uname-unhid": "корисничкото име е скриено",
        "revdelete-restricted": "применети ограничувања на администратори",
        "revdelete-unrestricted": "отстранети ограничувања за систем оператори",
+       "logentry-block-block": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|ја припои}} $3 кон $4 (преработки сè до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4 без да остави пренасочување",
index 3abe657..e6704e3 100644 (file)
        "tagline": "{{SITENAME}} جه",
        "help": "راهنما",
        "search": "بگردستن",
-       "searchbutton": "چرخ‌هایی",
+       "searchbutton": "چرخه‌تو",
        "go": "بـور",
        "searcharticle": "بور",
        "history": "صفحه‌ی تاریخچه",
        "aboutpage": "Project:درباره",
        "copyright": "این صفحه ره بَنوشته‌ئون  $1  زیر شِمه دسـت دَرنه.",
        "copyrightpage": "{{ns:project}}:کـوپـی‌راسـت‌ئون",
-       "currentevents": "اساÛ\8cÛ\8c Ø¯Ú©ØªÙ\87â\80\8cئون",
-       "currentevents-url": "Project:اساÛ\8cÛ\8c Ø¯Ú©ØªÙ\87â\80\8cئون",
+       "currentevents": "Ø®Ù\80Ù\8eÙ\88Ù\90رون",
+       "currentevents-url": "Project:Ø®Ù\88رون",
        "disclaimers": "تکذیب‌نومه‌ئون",
        "disclaimerpage": "Project:تکذیب‌نومه",
        "edithelp": "دچی‌ین رانما",
        "exbeforeblank": "قبل اینکه صفحه محتوا خالی بوه ونه محتوا وِ بیه: «$1»",
        "dellogpage": "وه ره بییته‌ئون گوزارش",
        "rollback": "دچی‌یه‌ئون ره واچی‌ین",
-       "rollback_short": "واچی‌ین",
        "rollbacklink": "واچی‌ین",
        "revertpage": "\"چـیـزونی که [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) دأچـیـه ده‌گـه‌ره‌س بـأیـه هـأمونـتـایی که [[User:$1|$1]] ای وألگ ده‌لـه، پـایـانی بـار هـه‌کـارده\"",
        "revertpage-nouser": "\"چیزونی که (ونـه کـاروری نـوم پـاک بَیّه) دچی‌یه دگـاردسته بیّه همونتایی که [[User:$1|$1]] آخرسری دچی‌ین دلـه هاکرده\"",
        "sp-contributions-newbies": "نـه وا بـأیـه ئـه‌کـانـت‌ئون دأچـیـه‌ن‌ئون ره نـه‌شـون هـاده",
        "sp-contributions-talk": "گپ",
        "sp-contributions-username": "IP نـه‌شـونـی یا کـاروری‌نوم",
-       "sp-contributions-submit": "چـأرخـه‌تـو",
+       "sp-contributions-submit": "چرخه‌تو",
        "whatlinkshere": "لینک‌ئون ِاینتا صفحه",
        "whatlinkshere-title": "وألـگ‌ئونی که \"$1\" ره لـیـنک هه‌دانه",
        "whatlinkshere-page": "صفحه:",
        "tooltip-ca-history": "کهنه دگاردسته‌ئونی که این صفحه دله دکته",
        "tooltip-ca-delete": "این صفحه ره پاک هاکردن",
        "tooltip-ca-watch": "این صفحه ره شه دمبال‌هاکردن لیست دله بی‌یشتن",
-       "tooltip-search": "{{SITENAME}} ره چـأرخـه‌تـو",
+       "tooltip-search": "{{SITENAME}} ره چرخه‌تو",
        "tooltip-search-go": "بـور اتـا ولـگـی کـه وه‌نـه نـوم هـأمـیـنـتـا بـوئـه",
        "tooltip-search-fulltext": "ولـگ‌ئـون ره ایـنـتـا تـه‌کـسـت وه‌سـه چـأرخ بـأزوئـه‌ن",
        "tooltip-p-logo": "گَت صفحه ره بَدی‌ین",
        "tooltip-n-randompage": "اتت شانسی صفحه بَدی‌ین",
        "tooltip-n-help": "أتـا جـا کـه...",
        "tooltip-t-whatlinkshere": "هأمو ولـگ‌ئونی که ایجه ره لینک هه‌دانه",
-       "tooltip-t-recentchangeslinked": "اسایی دگاردسته‌ئون صفحه‌ئونی دله، که این صفحه جه لینک دارنه",
+       "tooltip-t-recentchangeslinked": "اِسایی دِگاردسته‌ئون ِصفحه‌ئون که این صفحه جه لینک دارنه",
        "tooltip-feed-rss": "RSS خوراک این صفحه وسّه",
        "tooltip-feed-atom": "Atom خوراک این صفحه وسّه",
        "tooltip-t-emailuser": "ای کـارور ره اتـا ئـه‌لـه‌کـتـه‌رونـیـکـی‌نـومـه راهـی هـه‌کـارده‌ن",
index 9872ead..74a44dd 100644 (file)
        "readonly_lag": "'O database s'è bloccato automaticamente pe' tramente ca 'e servers 'e database schiave sincronizzano c' 'o server masto.",
        "internalerror": "Errore 'nterno",
        "internalerror_info": "Errore 'nterno: $1",
+       "internalerror-fatal-exception": "Errore irreversibbele 'e tipo \"$1\"",
        "filecopyerror": "Nun se può copiare 'o file \"$1\" int'a \"$2\".",
        "filerenameerror": "Nun se può rinnummenare 'o file \"$1\" into \"$2\".",
        "filedeleteerror": "Nun se pô scancellà 'o file \"$1\"",
        "unusedimages": "File ca nun s'ausano",
        "wantedcategories": "Categurìe addimannate",
        "wantedpages": "Paggene cchiù addemannate",
+       "wantedpages-summary": "Elenco 'e paggene nun esistente ca teneno na parte assaje d' 'e link ca spuntassero a chiste. Pe' na lista 'e paggene nun esistente ca teneno redirect ca spuntassero a chiste, vide [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Titolo invalido mmiez' 'o nzieme 'e risultate: $1",
        "wantedfiles": "File addimannate",
        "wantedfiletext-cat": "Chisti file s'ausano ma nun esisteno. 'E file ca veneno 'e n'archivio 'e fore s'alencano ccà senza cuntrullà l'esistenza suja. Sti fauze pusitive sarranno <del>nzignate</del>. 'E paggene ca teneno sti file ca nun esisteno song'alencate dint'a [[:$1]].",
        "thumbnail_image-missing": "'O file pare ca nun se trova: $1",
        "thumbnail_image-failure-limit": "Se so' fatte troppe tentative senza ngarrata ($1 o cchiù) 'a generà sta miniatura. Pruvate n'ata vota cchiù tarde.",
        "import": "Mpurta paggene",
-       "importinterwiki": "Mpurtazione transkwiki",
-       "import-interwiki-text": "Scigliete na wiki e nu titolo 'e paggena 'a mpurtà.\n'E date e l'editore s'astiparranno.\nTutte l'aziune 'e mpurtaziune nfra 'e wiki songo riggistrate dint' 'e [[Special:Log/import|riggistre 'e mpurtazione]].",
+       "importinterwiki": "Carreca paggene 'a n'ata wiki",
+       "import-interwiki-text": "Scigliete na wiki e nu titolo 'e paggena 'a mpurtà.\n'E date e l'editore s'astiparranno.\nTutt' 'e mpurtaziune 'a n'ati wiki songo riggistrate dint' 'e [[Special:Log/import|riggistre 'e mpurtazione]].",
        "import-interwiki-sourcewiki": "Wiki d'origgene:",
        "import-interwiki-sourcepage": "Paggena d'origgene:",
        "import-interwiki-history": "Copia tutt' 'a storia d' 'e verziune 'e sta paggena",
        "importcantopen": "Nun se può arapì 'o file 'e mpurtaziona",
        "importbadinterwiki": "Cullegamiento interwiki errato",
        "importsuccess": "Mpurtaziona fernuta!",
-       "importnosources": "Nisciuna fonte p' 'a mpurtaziona transwiki è stata definita; 'e carreche dirette 'e cronologgia nun songo attivate.",
+       "importnosources": "Nisciuna wiki, d' 'a quale s'avess'a mpurtà, è stata definita; 'e carreche dirette 'e cronologgia nun songo attivate.",
        "importnofile": "Nisciunu file 'e mpurtazione è stato carrecato.",
        "importuploaderrorsize": "'A carreca d' 'o file 'e mpurtazione nun è riuscita.\n'O file è cchiù gruosso d' 'a dimenziona massima 'e carreca.",
        "importuploaderrorpartial": "'A carreca d' 'o file mpurtato è fallita.\nNa parta d' 'o file file è stata carrecata ma nun a nu piezzo sano sano.",
        "revdelete-uname-unhid": "nomme utente fatto avvedè",
        "revdelete-restricted": "restriziune apprecate a ll'ammenistrature",
        "revdelete-unrestricted": "restriziune luvate a ll'ammenistrature",
+       "logentry-block-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|ave sbluccato}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|ave cagnato}} 'e mpustaziune 'e blocco pe' {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|cagnaje}} 'e mpustaziune 'e blocco 'e {{GENDER:$4|$3}} ch' 'ammaturasse a nu $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|aunito|aunita}} $3 int' 'a $4 (verziune nzin' 'a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|muvette}} paggena $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 senza lassà nu redirezionamiento",
        "json-error-utf8": "'E carattere UTF-8 furmate malamente, probbabilmente nun se songhe ncodifecate bbuone",
        "json-error-recursion": "Uno o cchiù riferimente recurzive dint' 'o valore a codefecare",
        "json-error-inf-or-nan": "Uno o cchiù valure NAN o INF dint' 'o valore 'a codefecare",
-       "json-error-unsupported-type": "S'è dato nu valore pe' nu tipo ca nun se può ncodifecà"
+       "json-error-unsupported-type": "S'è dato nu valore pe' nu tipo ca nun se può ncodifecà",
+       "headline-anchor-title": "Cullega a sta sezziona"
 }
index 1e52c1a..11325a9 100644 (file)
        "newarticletext": "Du har fulgt en lenke til en side som ikke finnes ennå.\nFor å opprette siden, begynn å skrive i boksen under (se [$1 hjelpesiden] for mer informasjon).\nOm du havnet her ved en feil, trykk '''tilbake''' i nettleseren.",
        "anontalkpagetext": "----\n''Dette er en diskusjonsside for en uregistrert bruker som ikke har opprettet konto eller ikke er logget inn.\nVi er derfor nødt til å bruke den numeriske IP-adressen til å identifisere ham eller henne.\nEn IP-adresse kan være delt mellom flere brukere.\nHvis du er en uregistrert bruker og synes at du har fått irrelevante kommentarer på en slik side, [[Special:UserLogin/signup|opprett en konto]] eller [[Special:UserLogin|logg inn]] så vi unngår fremtidige forvekslinger med andre uregistrerte brukere.''",
        "noarticletext": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter denne sidetittelen]] på andre sider,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relaterte logger],\neller [{{fullurl:{{FULLPAGENAME}}|action=edit}} opprette siden]</span>.",
-       "noarticletext-nopermission": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] blant andre sider, eller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>.",
+       "noarticletext-nopermission": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] blant andre sider, eller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>, men du har ikke tillatelse til å opprette denne siden.",
        "missing-revision": "Revisjonen #$1 av siden med navnet \"{{FULLPAGENAME}}\" eksisterer ikke.\n\nDette skyldes som regel at en gammel historikklenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "userpage-userdoesnotexist": "Brukerkontoen «$1» er ikke registrert.\nSjekk om du ønsker å opprette/redigere denne siden.",
        "userpage-userdoesnotexist-view": "Kontoen «$1» er ikke registrert.",
        "showhideselectedversions": "Vis/skjul valgte versjoner",
        "editundo": "fjern",
        "diff-empty": "(Ingen forskjell)",
-       "diff-multi-sameuser": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Én mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
        "diff-multi-otherusers": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)",
        "diff-multi-manyusers": "({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)",
        "difference-missing-revision": "{{PLURAL:$2|En revisjon|$2 revisjoner}} av denne forskjellen ($1) {{PLURAL:$2|ble|ble}} ikke funnet.\n\nDette skyldes som regel at en gammel forskjell-lenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "shown-title": "Vis $1 {{PLURAL:$1|resultat|resultater}} per side",
        "viewprevnext": "Vis ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "* Siden '''[[$1]]'''",
-       "searchmenu-new": "'''Opprett siden ''[[:$1]]'' på denne wikien.'''\n<strong>Opprett siden \"[[:$1]]\" på denne wikien!</strong> {{PLURAL:$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
+       "searchmenu-new": "<strong>Opprett siden \"[[:$1]]\" på denne wikien!</strong> {{PLURAL:$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
        "searchprofile-articles": "Innholdssider",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alt",
        "recentchanges-label-minor": "Dette er en mindre endring",
        "recentchanges-label-bot": "Denne redigeringen ble gjort av en bot",
        "recentchanges-label-unpatrolled": "Denne redigeringen har ikke blitt patruljert ennå",
-       "recentchanges-label-plusminus": "Sidestørrelsen er endra med dette antallet byte",
+       "recentchanges-label-plusminus": "Sidestørrelsen ble endret med dette antallet byte",
        "recentchanges-legend-heading": "'''Tegnforklaring:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste av nye sider]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste over nye sider]])",
        "recentchanges-legend-plusminus": "«(±123)»",
        "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",
        "tooltip-search": "Søk i {{SITENAME}}",
        "tooltip-search-go": "Gå til en side med dette navnet om den finnes",
        "tooltip-search-fulltext": "Søk etter sider som innholder denne teksten",
-       "tooltip-p-logo": "Hovedside",
+       "tooltip-p-logo": "Gå til hovedsiden",
        "tooltip-n-mainpage": "Gå til hovedsiden",
        "tooltip-n-mainpage-description": "Gå til hovedsiden",
        "tooltip-n-portal": "Om prosjektet, hva du kan gjøre, hvor du kan finne ting",
        "json-error-utf8": "Feilaktige UTF-8-tegn, muligens feilkodet",
        "json-error-recursion": "En eller flere rekursive referanser i verdien som skal kodes",
        "json-error-inf-or-nan": "En eller flere NAN- eller INF-verdier i verdien som skal kodes",
-       "json-error-unsupported-type": "En verdi av en type som ikke kan kodes ble angitt"
+       "json-error-unsupported-type": "En verdi av en type som ikke kan kodes ble angitt",
+       "headline-anchor-title": "Lenke til denne seksjonen"
 }
index dbf1d16..090503a 100644 (file)
        "editlink": "bewark",
        "viewsourcelink": "brontekste bekieken",
        "editsectionhint": "Bewarkingsveld: $1",
-       "toc": "Overzicht",
+       "toc": "Inhold",
        "showtoc": "Bekieken",
        "hidetoc": "Verbarg",
        "collapsible-collapse": "Inklappen",
index bc314fc..aa4b6d9 100644 (file)
        "readonly_lag": "De database is automatisch vergrendeld terwijl de ondergeschikte databaseservers synchroniseren met de hoofdserver.",
        "internalerror": "Interne fout",
        "internalerror_info": "Interne fout: $1",
+       "internalerror-fatal-exception": "Fatale fout van type \"$1\"",
        "filecopyerror": "Bestand \"$1\" kon niet naar \"$2\" gekopieerd worden.",
        "filerenameerror": "\"$1\" kon niet hernoemd worden naar \"$2\".",
        "filedeleteerror": "Bestand \"$1\" kon niet verwijderd worden.",
        "uploaderror": "Uploadfout",
        "upload-recreate-warning": "'''Waarschuwing: er is een bestand met deze naam verwijderd of hernoemd.'''\n\nHieronder worden het verwijderingslogboek en het hernoemingslogboek voor deze pagina weergegeven:",
        "uploadtext": "Gebruik het onderstaande formulier om bestanden te uploaden.\nOm eerder toegevoegde bestanden te bekijken of te zoeken kunt u naar de [[Special:FileList|bestandslijst]] gaan.\nUploads en bestanden die na verwijdering opnieuw worden toegevoegd zijn na te zien in het [[Special:Log/upload|uploadlogboek]].\nVerwijderde bestanden worden bijgehouden in het [[Special:Log/delete|verwijderingslogboek]].\n\nOm het bestand in te voegen in een pagina kunt u een van de volgende vormen gebruiken, al naar gelang het bestandsformaat dat van toepassing is:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestand.jpg]]</nowiki>''' om de volledige versie van het bestand te gebruiken;\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestand.png|200px|thumb|left|alternatieve tekst]]</nowiki>''' om een 200-pixels brede afbeelding links weer te geven met een rand en met \"alternatieve tekst\" als beschrijving;\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestand.ogg]]</nowiki>''' om naar het bestand te verwijzen zonder het weer te geven.",
-       "upload-permitted": "Toegelaten bestandstypes: $1.",
-       "upload-preferred": "Aangewezen bestandstypes: $1.",
-       "upload-prohibited": "Verboden bestandstypes: $1.",
+       "upload-permitted": "Toegelaten {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
+       "upload-preferred": "Aangewezen {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
+       "upload-prohibited": "Verboden {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
        "uploadlogpage": "Uploadlogboek",
        "uploadlogpagetext": "Hieronder staan de nieuwste bestanden.\nZie de [[Special:NewFiles|galerij met nieuwe bestanden]] voor een visueler overzicht.",
        "filename": "Bestandsnaam",
        "thumbnail_image-missing": "Het bestand lijkt niet aanwezig te zijn: $1",
        "thumbnail_image-failure-limit": "Het maken van een miniatuurafbeelding is te vaak mislukt ($1 keer of vaker). Probeer het later nog eens.",
        "import": "Pagina's importeren",
-       "importinterwiki": "Transwiki-import",
-       "import-interwiki-text": "Selecteer een wiki en paginanaam om te importeren.\nVersie- en auteursgegevens blijven hierbij bewaard.\nAlle transwiki-importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].",
+       "importinterwiki": "Pagina's importeren vanuit een andere wiki",
+       "import-interwiki-text": "Selecteer een wiki en paginanaam om te importeren.\nVersie- en auteursgegevens blijven hierbij bewaard.\nAlle importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].",
        "import-interwiki-sourcewiki": "Bronwiki:",
        "import-interwiki-sourcepage": "Bronpagina:",
        "import-interwiki-history": "Volledige geschiedenis van deze pagina ook kopiëren",
        "importcantopen": "Kon het importbestand niet openen",
        "importbadinterwiki": "Verkeerde interwikikoppeling",
        "importsuccess": "Import afgerond!",
-       "importnosources": "Er zijn geen transwiki-importbronnen gedefinieerd en directe geschiedenis-uploads zijn uitgeschakeld.",
+       "importnosources": "Er zijn geen wiki's van waaruit geïmporteerd kan worden vastgelegd. Directe geschiedenis-uploads zijn uitgeschakeld.",
        "importnofile": "Er is geen importbestand geüpload.",
        "importuploaderrorsize": "Upload van het importbestand in mislukt.\nHet bestand is groter dan de ingestelde limiet.",
        "importuploaderrorpartial": "Upload van het importbestand in mislukt.\nHet bestand is slechts gedeeltelijk aangekomen.",
        "javascripttest": "JavaScript testen",
        "javascripttest-pagetext-noframework": "Deze pagina is gereserveerd voor het uitvoeren van JavaScripttesten.",
        "javascripttest-pagetext-unknownframework": "Onbekend testframework \"$1\".",
+       "javascripttest-pagetext-unknownaction": "Onbekende actie \"$1\".",
        "javascripttest-pagetext-frameworks": "Kies een van de volgende testframeworks: $1",
        "javascripttest-pagetext-skins": "Kies een vormgeving om de tests mee uit te voeren:",
        "javascripttest-qunit-intro": "Zie de [$1 testdocumentatie] op mediawiki.org.",
        "tags-hitcount": "$1 {{PLURAL:$1|wijziging|wijzigingen}}",
        "tags-manage-no-permission": "U hebt geen rechten om labels te beheren.",
        "tags-create-heading": "Een nieuw label aanmaken",
+       "tags-create-explanation": "Standaard worden nieuw aangemaakte labels beschikbaar gesteld voor gebruik door gebruikers en bots.",
        "tags-create-tag-name": "Labelnaam:",
        "tags-create-reason": "Reden:",
        "tags-create-submit": "Aanmaken",
+       "tags-create-no-name": "U moet een labelnaam opgeven.",
        "tags-create-already-exists": "Het label \"$1\" bestaat al.",
        "tags-delete-title": "Label verwijderen",
        "tags-delete-reason": "Reden:",
        "logentry-rights-rights": "$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5",
-       "logentry-upload-upload": "$1 heeft $3 {{GENDER:$2|geupload}}",
+       "logentry-upload-upload": "$1 heeft $3 {{GENDER:$2|geüpload}}",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|heeft}} een nieuwe versie van $3 geüpload",
        "logentry-upload-revert": "$1 heeft $3 {{GENDER:$2|geupload}}",
        "logentry-managetags-create": "$1 heeft het label \"$4\" {{GENDER:$2|aangemaakt}}",
index b2da7bd..267242d 100644 (file)
@@ -73,7 +73,8 @@
                        "Nanaki",
                        "Alan ffm",
                        "Macofe",
-                       "Devwebtel"
+                       "Devwebtel",
+                       "VerMa"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "prefs-personal": "Dane użytkownika",
        "prefs-rc": "Ostatnie zmiany",
        "prefs-watchlist": "Obserwowane",
+       "prefs-editwatchlist": "Edycja listy obserwowanych",
+       "prefs-editwatchlist-label": "Edytuj wpisy na Twojej liście obserwowanych:",
+       "prefs-editwatchlist-edit": "Przejrzyj i usuń strony z listy obserwowanych",
+       "prefs-editwatchlist-raw": "Tekstowy edytor obserwowanych",
+       "prefs-editwatchlist-clear": "Wyczyść listę obserwowanych",
        "prefs-watchlist-days": "Liczba dni widocznych na liście obserwowanych:",
        "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|dzień|dni}}",
        "prefs-watchlist-edits": "Liczba edycji pokazywanych w rozszerzonej liście obserwowanych:",
        "right-protect": "Zmiana poziomu zabezpieczenia i edycja stron zabezpieczonych kaskadowo",
        "right-editprotected": "Edycja stron zabezpieczonych na poziomie „{{int:protect-level-sysop}}”",
        "right-editsemiprotected": "Edycja stron zabezpieczonych na poziomie „{{int:protect-level-autoconfirmed}}”",
+       "right-editcontentmodel": "Edycja modelu zawartości strony",
        "right-editinterface": "Edycja interfejsu użytkownika",
        "right-editusercssjs": "Edycja plików CSS i JS innych użytkowników",
        "right-editusercss": "Edycja plików CSS innych użytkowników",
        "action-viewmywatchlist": "zobaczenia swojej listy obserwowanych stron",
        "action-viewmyprivateinfo": "zobaczenia swoich prywatnych danych",
        "action-editmyprivateinfo": "edycji swoich prywatnych danych",
+       "action-editcontentmodel": "edycji modelu zawartości strony",
        "action-managechangetags": "utwórz lub usuń znaczniki z bazy danych",
        "nchanges": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od ostatniej wizyty}}",
        "namespace": "Przestrzeń nazw",
        "invert": "odwróć wybór",
        "tooltip-invert": "Zaznacz to pole, aby ukryć zmiany na stronach w wybranych przestrzeniach nazw (oraz związanych z nimi innymi przestrzeniami nazw, jeśli zaznaczono)",
+       "tooltip-whatlinkshere-invert": "Zaznacz to pole, aby ukryć linki do stron z wybranej przestrzeni nazw.",
        "namespace_association": "powiązana przestrzeń nazw",
        "tooltip-namespace_association": "Zaznacz to pole, aby uwzględnić strony dyskusji i tematu związane z wybranymi przestrzeniami nazw",
        "blanknamespace": "(Główna)",
        "thumbnail_image-missing": "Chyba brakuje pliku $1",
        "thumbnail_image-failure-limit": "Ostatnio było zbyt wielu nieudanych prób ($1 lub więcej) utworzenia miniaturki. Spróbuj ponownie później.",
        "import": "Import stron",
-       "importinterwiki": "Import transwiki",
+       "importinterwiki": "Import z innej wiki",
        "import-interwiki-text": "Wybierz wiki i nazwę strony do importowania.\nDaty oraz nazwy autorów zostaną zachowane.\nWszystkie operacje importu transwiki są odnotowywane w [[Special:Log/import|rejestrze importu]].",
        "import-interwiki-sourcewiki": "Źródłowa wiki:",
        "import-interwiki-sourcepage": "Strona źródłowa:",
        "tooltip-n-portal": "O projekcie, co możesz zrobić, gdzie możesz znaleźć informacje",
        "tooltip-n-currentevents": "Informacje o aktualnych wydarzeniach",
        "tooltip-n-recentchanges": "Lista ostatnich zmian na {{GRAMMAR:MS.lp|{{SITENAME}}}}.",
-       "tooltip-n-randompage": "Pokaż stronę wybraną losowo",
+       "tooltip-n-randompage": "Załaduj losową stronę",
        "tooltip-n-help": "Tutaj możesz się dowiedzieć wielu rzeczy.",
        "tooltip-t-whatlinkshere": "Pokaż listę wszystkich stron linkujących do tej strony",
        "tooltip-t-recentchangeslinked": "Ostatnie zmiany w stronach, do których ta strona linkuje",
        "tooltip-t-contributions": "Pokaż listę edycji tego użytkownika",
        "tooltip-t-emailuser": "Wyślij e‐mail do tego użytkownika",
        "tooltip-t-info": "Więcej informacji na temat tej strony",
-       "tooltip-t-upload": "Prześlij plik",
+       "tooltip-t-upload": "Prześlij pliki",
        "tooltip-t-specialpages": "Lista wszystkich specjalnych stron",
        "tooltip-t-print": "Wersja do wydruku",
        "tooltip-t-permalink": "Stały link do tej wersji strony",
        "tags-actions-header": "Działania",
        "tags-active-yes": "Tak",
        "tags-active-no": "Nie",
+       "tags-source-none": "Nieużywany",
        "tags-edit": "edytuj",
        "tags-delete": "usuń",
        "tags-activate": "aktywuj",
        "tags-hitcount": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
        "tags-manage-no-permission": "Nie masz uprawnień do zarządzaniem zmianami znaczników.",
        "tags-create-heading": "Utwórz nowy znacznik",
+       "tags-create-explanation": "Nowe znaczniki będą dostępne domyślnie dla użytkowników i botów.",
        "tags-create-tag-name": "Nazwa znacznika:",
        "tags-create-reason": "Powód:",
        "tags-create-submit": "Utwórz",
        "json-error-syntax": "Błąd składni",
        "json-error-utf8": "Nieprawidłowe znaki UTF-8, prawdopodobnie niepoprawnie zakodowane",
        "json-error-recursion": "Jedno lub więcej rekurencyjnych odniesień musi być zakodowane.",
-       "json-error-unsupported-type": "Podano wartość typu, która nie mogła być kodowana"
+       "json-error-unsupported-type": "Podano wartość typu, która nie mogła być kodowana",
+       "headline-anchor-title": "Link do tej sekcji"
 }
index 93869c2..8e10064 100644 (file)
        "readonly_lag": "La base ëd dat a l'é staita blocà n'automàtich antramentr che le màchine dël sircùit secondari as buto an pari con cole dël prinsipal",
        "internalerror": "Eror intern",
        "internalerror_info": "Eror antern: $1",
+       "internalerror-fatal-exception": "Ecession fatal ëd tipo «$1»",
        "filecopyerror": "A l'é pa stàit possìbil copié l'archivi «$1» coma «$2».",
        "filerenameerror": "A l'é pa podusse cangeje nòm a l'archivi «$1» an «$2».",
        "filedeleteerror": "A l'é pa podusse scancelé l'archivi «$1».",
        "unusedimages": "Figure nen dovrà",
        "wantedcategories": "Categorìe dont a fa da manca",
        "wantedpages": "Artìcoj pì ciamà",
+       "wantedpages-summary": "Lista ëd pàgine nen esistente con ël pi grand nùmer ëd liure vers ëd lor, gavà le pàgine vers le quaj a ponto mach dle ridiression. Për na lista dle pàgine nen esistente a le quaj a ponto dle ridiression, vëdde [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Tìtol nen vàlid ant l'ansema dj'arzultà: $1",
        "wantedfiles": "Archivi pì ciamà",
        "wantedfiletext-cat": "J'archivi ch'a ven-o a son dovrà ma a esisto pa. J'archivi dai sò depòsit estern a peulo esse listà sensa consideré l'esistensa. Chèich fàuss positiv a saran <del>sganfà</del>. An pi, le pàgine ch'a conten-o dj'archivi ch'a esisto pa a son listà an [[:$1]].",
        "thumbnail_image-missing": "L'archivi a smija ch'a manca: $1",
        "thumbnail_image-failure-limit": "A-i son ëstaje ëd recent tròpi tentativ falì ($1 o pi) ëd rende costa plancia. Për piasì, ch'a preuva torna pi tard.",
        "import": "Amportassion ëd pàgine",
-       "importinterwiki": "Amportassion da wiki diferente",
-       "import-interwiki-text": "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.\nDate dle revision e stranòm dj'editor a resteran piàjit sù 'cò lor.\nTute j'amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
+       "importinterwiki": "Amportassion da n'àutra wiki",
+       "import-interwiki-text": "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.\nDate dle revision e stranòm dj'editor a resteran piàjit sù 'cò lor.\nTute j'amportassion da d'àutre wiki a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
        "import-interwiki-sourcewiki": "Wiki sorgiss:",
        "import-interwiki-sourcepage": "Pàgina sorgiss:",
        "import-interwiki-history": "Copié tute le revision ëd la stòria ëd costa pàgina",
        "importcantopen": "L'archivi da amporté a l'é pa podusse deurbe",
        "importbadinterwiki": "Liura antra wiki diferente cioca",
        "importsuccess": "Amportassion finìa!",
-       "importnosources": "A l'é pa stàita definìa gnun-a sorgiss d'amportassion da na wiki diferenta, e carié mach le stòrie as peul nen.",
+       "importnosources": "A l'é stàita definìa gnun-a wiki da la qual amporté, e carié mach le stòrie as peul nen.",
        "importnofile": "Pa gnun archivi d'amportassion carià.",
        "importuploaderrorsize": "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta pì gròss che lòn ch'as peul cariesse.",
        "importuploaderrorpartial": "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta carià mach për un tòch.",
        "tags-delete-explanation-active": "<strong>La tichëtta «$1» a l'é ancor ativa, e a seghitrà a esse aplicà ant l'avnì.</strong> Për fé chité sòn, ch'a vada ant ij pòst andoa la tichëtta a l'é aplicà, e ch'a la disativa ambelelà.",
        "tags-delete-reason": "Rason:",
        "tags-delete-submit": "Eliminé costa tichëtta ëd fasson ireversìbil",
+       "tags-delete-not-allowed": "Le tichëtte definìe da n'estension a peulo nen esse dëscancelà, gavà che l'estension a lo permëtta ëd fasson esplìssita.",
+       "tags-delete-not-found": "La tichëtta «$1» a esist pa.",
+       "tags-delete-too-many-uses": "La tichëtta «$1» a l'é aplicà a pi che $2 {{PLURAL:$2|revision}}, lòn ch'a veul dì ch'a peul nen esse eliminà.",
+       "tags-delete-warnings-after-delete": "La tichëtta «$1» a l'é stàita eliminà për da bin, ma {{PLURAL:$2|a l'é rancontrasse l'|as son rancontrasse j'}}avis sì-dapress:",
+       "tags-activate-title": "Ativé la tichëtta",
+       "tags-activate-question": "A l'é a brus d'ativé la tichëtta «$1».",
+       "tags-activate-reason": "Rason:",
+       "tags-activate-not-allowed": "A l'é nen possìbil ativé la tichëtta «$1».",
+       "tags-activate-not-found": "La tichëtta «$1» a esist nen.",
+       "tags-activate-submit": "Ativé",
+       "tags-deactivate-title": "Disativé la tichëtta",
+       "tags-deactivate-question": "A sta për disativé la tichëtta «$1».",
+       "tags-deactivate-reason": "Rason:",
+       "tags-deactivate-not-allowed": "A l'é nen possìbil disativé la tichëtta «$1».",
+       "tags-deactivate-submit": "Disativé",
        "comparepages": "Confronté dle pàgine",
        "compare-page1": "Pàgina 1",
        "compare-page2": "Pàgina 2",
        "revdelete-uname-unhid": "stranòm dëscoatà",
        "revdelete-restricted": "restrission aplicà a j'aministrator",
        "revdelete-unrestricted": "restrission për j'aministrator gavà",
+       "logentry-block-block": "$1 {{GENDER:$2|a l'ha blocà}} {{GENDER:$4|$3}} për na durà ëd $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|a l'ha dësblocà}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|a l'ha modificà}} ij paràmeter ëd blocagi për {{GENDER:$4|$3}} con na durà ëd $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|a l'ha blocà}} {{GENDER:$4|$3}} për na durà ëd $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|a l'ha modificà}} ij paràmeter ëd blocagi për {{GENDER:$4|$3}} con na durà ëd $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|a l'ha gionzù}} $3 an $4 (revision fin-a a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4 sensa lassé na ridiression",
        "logentry-upload-upload": "$1 {{GENDER:$2|a l'ha carià}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|a l'ha carià}} na neuva version ëd $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|a l'ha carià}} $3",
+       "log-name-managetags": "Argistr dle modìfiche ëd tichëtte",
+       "log-description-managetags": "Costa pàgina a lista ij travaj ëd manutension gropà a le [[Special:Tags|tichëtte]]. L'argistr a conten mach j'assion fàite a man da n'aministrator; le tichëtte a peulo esse creà o eliminà dal programa wiki sensa che l'assion a sia marcà an s'argistr.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|a l'ha creà}} la tichëtta « $4 ».",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|a l'ha dëscancelà}} la tichëtta « $4 » (gavà da {{PLURAL:$5|na revision o vos d'argistr|$5 revision o vos d'argistr}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|a l'ha ativà}} la tichëtta \"$4\" për l’usagi dj'utent e dij trigomiro",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|a l'ha disativà}} la tichËtta « $4 » pour l’usagi dj'utent e dij trigomiro",
        "rightsnone": "(gnun)",
        "revdelete-summary": "resumé dla modìfica",
        "feedback-bugornote": "S'a l'é pront a descrive un problema técnich an detaj, për piasì ch'a [$1 signala un bigat]. \nDësnò, a peul dovré ël formolari semplificà sì-sota. Sò coment a sarà giontà a la pàgina «[$3 $2]», con sò stranòm.",
        "json-error-utf8": "Caràter UTF-8 mal formà, miraco mal codificà",
        "json-error-recursion": "Un-a o pi rëspondense ant ël valor da codifiché",
        "json-error-inf-or-nan": "Un o pi valor NAN o INF ant ël valor da codifiché",
-       "json-error-unsupported-type": "A l'é stàit dàit un valor ëd na sòrt ch'a peul nen esse codificà"
+       "json-error-unsupported-type": "A l'é stàit dàit un valor ëd na sòrt ch'a peul nen esse codificà",
+       "headline-anchor-title": "Liura a sta session"
 }
index 9a79230..b11e5e9 100644 (file)
@@ -7,7 +7,8 @@
                        "Rachitrali",
                        "Reedy",
                        "ZaDiak",
-                       "아라"
+                       "아라",
+                       "Amire80"
                ]
        },
        "tog-underline": "حوڑ تھلے لین:",
        "mytalk": "میریاں گلاں",
        "anontalk": "اس آئی پی آسطے گل کرو",
        "navigation": "کھوج",
-       "and": "&#32;and",
+       "and": "&#32;تے",
        "qbfind": "کھوج",
        "qbbrowse": "لبو",
        "qbedit": "لکھو",
        "delete-toobig": "ایس صفے دی اک لمبی تبدیلی دی تریخ اے $1 توں ود {{PLURAL:$1|ریوین|ریویناں}}\nایے صفیاں دے مٹان تے کج روک اے {{SITENAME }} دی اچانک خرابی توں بچن لئی۔",
        "delete-warning-toobig": "ایس صفے دی تبدیلی دی اک لمی تریخ اے۔ $1 توں ود {{PLURAL:$1|ریوین|ریویناں}}۔\nاینوں مٹان تے {{SITENAME}} دے ڈیٹا اوپریشنز چ مسلہ بن سکدا اے۔\nسوچ سمج کے اگے ودو۔",
        "rollback": "لکھائیاں واپس کرو",
-       "rollback_short": "واپس کرو",
        "rollbacklink": "واپس",
        "rollbackfailed": "واپس کرن ناکام",
        "cantrollback": "تبدیلی واپس نئیں ہوسکدی؛\nآخری لکھاری ای ایدا اکو لکھاری سی۔",
        "import-logentry-interwiki": "ٹرانسوکیڈ  $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ریوین|ریویناں }} $2 توں",
        "javascripttest": "JavaScript ٹیسٹنگ",
-       "javascripttest-title": "ٹیسٹ  $1 چلدا اے۔",
        "javascripttest-pagetext-noframework": "ایہ صفہ JavaScript  ٹیسٹاں لئی بچایا گیا اے۔",
        "javascripttest-pagetext-unknownframework": "\"$1\" انجانا ٹیسٹنگ فریمورک۔",
        "javascripttest-pagetext-frameworks": "مہربانی کرکے تھلے دتے گۓ ٹیسٹ فریمورکاں چوں اک چنو : $1",
        "javascripttest-pagetext-skins": "اپنی پسند دا کوئی نمونہ چنو جیدے تے ٹیسٹ چلن:",
        "javascripttest-qunit-intro": "mediawiki.org تے [$1 ٹسٹنگ ڈوکومنٹیشن] ویکھو۔",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "میرا صفہ",
        "tooltip-pt-anonuserpage": "ورتن صفہ IP  پتے لئی تسی تبدیل کر رۓ او۔۔۔",
        "tooltip-pt-mytalk": "میریاں گلاں",
        "watchlisttools-edit": "اکھ تھلے رکھے ہوۓ صفحیاں نوں ویکھو تے تبدیل کرو",
        "watchlisttools-raw": "کچی اکھ تھلے رکھی ہوئی نو تبدیل کرو",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
-       "unknown_extension_tag": "انجان ایکسٹنشن ٹیگ \"$1\"",
        "duplicate-defaultsort": "'''خبردار:''' ڈیفالٹ چابی \"$2\" پہلی ڈیفالٹ چابی \"$1\" دے اتے لگ گئی اے۔",
        "version": "ورژن",
        "version-extensions": "انسٹالڈ کیتیاں گیاں ایکسٹنشن",
index c01ddf5..e2f4c99 100644 (file)
        "otherlanguages": "په نورو ژبو کې",
        "redirectedfrom": "(له $1 نه مخ گرځېدلی)",
        "redirectpagesub": "د مخ گرځونې مخ",
-       "redirectto": "دې ته اړولې :",
+       "redirectto": "نوې مخ گرځېدنه:",
        "lastmodifiedat": "دا مخ وروستی ځل په $2، $1 بدلون موندلی.",
        "viewcount": "همدا مخ {{PLURAL:$1|يو وار|$1 واره}} کتل شوی.",
        "protectedpage": "ژغورلی مخ",
        "view-pool-error": "اوبخښۍ، دم گړۍ پالنگران د ډېر بارېدو ستونزې سره مخامخ شوي.\nډېر زيات کارنان د همدې مخ د کتلو په هڅه کې دي.\nلطفاً د دې مخ د کتلو د بيا هڅې نه دمخه يو څو شېبې صبر وکړۍ.\n\n$1",
        "pool-queuefull": "د بهير صف ډک دی",
        "pool-errorunknown": "ناجوته ستونزه",
-       "poolcounter-usage-error": "استعÙ\85اÙ\84 Ú©Û\90 Ø®Ø·Ø§:",
+       "poolcounter-usage-error": "د Ú©Ø§Ø±Û\90دÙ\84Ù\88 ØªÛ\90رÙ\88تÙ\86Ù\87: $1",
        "aboutsite": "د {{SITENAME}} په اړه",
        "aboutpage": "Project:په اړه",
        "copyright": "دا مېنځپانگه د $1 له مخې ستاسې لاسرسي ته پرته ده، خو هغه څه چې په خلاف يې وييل شوي.",
        "anonpreviewwarning": "''تاسې غونډال ته نه ياست ننوتي. خوندي کولو سره به ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.''",
        "missingcommenttext": "لطفاً تبصره لاندې وليکۍ.",
        "summary-preview": "د لنډيز مخليدنه:",
-       "subject-preview": "موضوع/سرليک مخکتنه:",
+       "subject-preview": "سکالو/سرليک مخکتنه:",
        "blockedtitle": "پر کارن بنديز لگېدلی",
        "blockedtext": "'''ستاسې د کارن-نوم يا آی پي پتې مخنيوی شوی.'''\n\nهمدا بنديز د $1 له خوا پر تاسې لږېدلی. او د همدې کړنې سبب ''$2'' دی.\n\n* د بنديز د پېل نېټه: $8\n* د بنديز د پای نېټه: $6\n* بنديزونه دي پر: $7\n\nتاسې کولای شی چې د $1 او يا هم د يو بل [[{{MediaWiki:Grouppage-sysop}}|پازوال]] سره اړيکې ټينگې کړی او د بنديز ستونزې مو هوارې کړی.\nتاسې نه شی کولای چې د 'کارن ته برېښلک لېږل' کړنې نه گټه پورته کړی تر څو چې تاسې د خپل گڼون په [[Special:Preferences|غوره توبونو]] کې يوه کره برېښليک پته نه وي ځانگړې کړې او تر دې بريده چې پر تاسې د هغې د کارولو بنديز نه وي لگېدلی.\nستاسې د دم مهال آی پي پته $3 ده، او ستاسې د بنديز پېژند #$5 دی. مهرباني وکړۍ د خپلې يادونې پر مهال د دغو دوو څخه د يوه او يا هم د دواړو ورکول مه هېروۍ.",
        "autoblockedtext": "په خپلکاريزه توگه ستاسې پر IP پتې بنديز لگېدلی، دا د دې په خاطر چې ستاسې پته د بل چا له خوا چې $1 پرې بنديز لگولی، کارېدلې.\nاو د بنديز سبب يې دا دی:\n\n:''$2''\n\n* د بنديز د پيل نېټه: $8\n* د بنديز د پای نېټه: $6\n* د بنديز د موخې سړی: $7\n\nتاسې کولای شی چې د $1 سره او يا هم د [[{{MediaWiki:Grouppage-sysop}}|پازوالانو]]  له ډلې نه يو چا سره اړيکې ټينگې کړی او د بنديز په اړه مو ورسره خبرې وکړۍ.\n\nدا مه هېروۍ چې تاسې د \"کارن ته برېښليک لېږل\" له اسانتياوؤ نه ګټه نه شی اخيستلای تر څو چې ستاسې د نومليکنې په وخت کې يا [[Special:Preferences|ستاسې د غوره توبونو په امستنو]] کې يوه کره برېښليک پته نه وي ځانگړې شوې، او يا هم د برېښليک لېږلو د چارو په کارولو مو بنديز نه وي لگېدلی.\n\nستاسې IP پته $3 ده او ستاسې د بنديز پېژند #$5 دی.\nد بنديز اړونده د اړيکو نيولو په وخت کې لطفاً د پورتني مالوماتو يادونه وکړۍ.",
        "upload-warning-subj": "د پورته کولو گواښ",
        "upload-proto-error": "ناسم پروتوکول",
        "upload-file-error": "کورنۍ ستونزه",
-       "upload-misc-error": "نامالومه اپلوډ خطا",
+       "upload-misc-error": "د پورته کېدنې نامالومه تېروتنه",
        "upload-http-error": "د HTTP يوه ستونزه رامېنځ ته شوې: $1",
        "backend-fail-notexists": "د $1 په نوم دوتنه نشته.",
        "backend-fail-delete": "د \"$1\" دوتنه ړنګه نه شوه.",
        "backend-fail-alreadyexists": "د $1 دوتنه له پخوا نه شته.",
-       "backend-fail-move": "\"$1\" دوتنه \"$2\" ته نشو ليږدولې",
-       "backend-fail-opentemp": "لنډمهاله دوتنه جوړېدای نه شي",
+       "backend-fail-move": "د \"$1\" دوتنه \"$2\" ته و نه ليږدېده.",
+       "backend-fail-opentemp": "لنډمهاله دوتنه و نه پرانيستل شوه.",
        "backend-fail-read": "د \"$1\" دوتنه نه شي لوستل کېدای.",
        "backend-fail-create": "د \"$1\" په دوتنه کې نور څه و نه ليکل شول.",
        "zip-wrong-format": "ځانگړې شوې دوتنه يوه ZIP دوتنه نه وه.",
-       "uploadstash-refresh": "د Ø¯Ù\88تÙ\86Ù\88 Ù\84Ú\93Ù\84Ù\8aÚ© Ø±Ø§ØªØ§Ø²Ù\87 Ú©Ú\93Û\8d",
+       "uploadstash-refresh": "د Ø¯Ù\88تÙ\86Ù\88 Ù\84Ú\93Ù\84Ù\8aÚ© Ø¨Ù\8aاتازÙ\87 Ú©Ù\88Ù\84",
        "img-auth-accessdenied": "لاسرسی رد شو",
        "img-auth-nofile": "د $1 په نوم کومه دوتنه نشته.",
        "http-invalid-url": "ناسم URL: $1",
        "listfiles_size": "کچه (بايټونه)",
        "listfiles_description": "څرگندونه",
        "listfiles_count": "بڼې",
-       "listfiles-show-all": "د Ø¯Ù\88Ù¼Ù\86Ù\88 Ù¾Ø®Ù\88اÙ\86Û\90 Ù\88رÚ\98Ù\86 Ù¾Ú©Û\90 Ø´Ø§Ù\85Ù\84 Ú©Ú\93Û\8d",
+       "listfiles-show-all": "د Ø§Ù\86Ú\81Ù\88رÙ\88Ù\86Ù\88 Ø²Ú\93Û\90 Ø¨Ú¼Û\90 Ø´Ø§Ù\85Ù\84Ù\88Ù\84",
        "listfiles-latestversion": "اوسنۍ بڼه",
        "listfiles-latestversion-yes": "هو",
        "listfiles-latestversion-no": "نه",
        "uploadnewversion-linktext": "د همدغې دوتنې نوې بڼه پورته کول",
        "shared-repo-from": "د $1 لخوا",
        "upload-disallowed-here": "تاسې د دې دوتنې دپاسه نشی ليکلی.",
-       "filerevert": "$1 Ø¨Ù\8aرتÙ\87 اړول",
-       "filerevert-legend": "دÙ\88تÙ\86Ù\87 Ø¨Ù\8aرتÙ\87 اړول",
+       "filerevert": "$1 Ø¨Ù\8aااړول",
+       "filerevert-legend": "دÙ\88تÙ\86Ù\87 Ø¨Ù\8aااړول",
        "filerevert-comment": "سبب:",
        "filerevert-submit": "په څټ گرځول",
        "filedelete": "$1 ړنگول",
        "unusedimagestext": "دا لاندينۍ دوتنې په هېڅ کوم مخ کې نه دي ټومبېدلي. لطفاً په پام کې وساتۍ چې نور وېبځايونه به د دغو دوتنو له يو دوتنې سره يو راسن يو آر ال (URL) ولري او لا تر اوسه به دوتنه د فعالې کارېدنې سره سره دلته پرته وي.",
        "notargettitle": "بې موخې",
        "nopagetitle": "داسې کوم مخ نشته",
+       "nopagetext": "کوم مخ مو چې وښوده هغه نشته.",
        "pager-newer-n": "{{PLURAL:$1|نوی 1|نوي $1}}",
        "pager-older-n": "{{PLURAL:$1|زوړ 1|زاړه $1}}",
        "suppress": "څارن",
        "linkshere": "دغه لانديني مخونه د '''[[:$1]]''' سره تړنې لري:",
        "nolinkshere": "د '''[[:$1]]''' سره هېڅ يو مخ هم تړنې نه لري .",
        "isredirect": "د مخ گرځونې مخ",
-       "istemplate": "Ù\88رګډېدنه",
+       "istemplate": "Ù\88رگډېدنه",
        "isimage": "د دوتنې تړنه",
        "whatlinkshere-prev": "{{PLURAL:$1|پخوانی|پخواني $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|راتلونکی|راتلونکي $1}}",
        "tooltip-pt-mycontris": "ستاسې د ونډو لړليک",
        "tooltip-pt-login": "تاسې ته په غونډال کې د ننوتلو سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.",
        "tooltip-pt-logout": "وتل",
+       "tooltip-pt-createaccount": "تاسې ته په ښه نيت بلنه درکوو چې ګڼوڼ جوړ کړۍ۔کچرې تاسې ګڼوڼ نه جوړوۍ نو اهم خبره نه ده۔",
        "tooltip-ca-talk": "د مخ د مېنځپانگې په اړه خبرې اترې",
        "tooltip-ca-edit": "تاسې همدا مخ سمولای شی. لطفاً د ليکنې د خوندي کولو دمخه، د همدې ليکنې مخليدنه وگورۍ.",
        "tooltip-ca-addsection": "يوه نوې برخه پيلول",
        "logentry-newusers-newusers": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}",
        "logentry-newusers-create": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}",
        "logentry-newusers-autocreate": "د $1 گڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}",
+       "logentry-upload-upload": "$1 $3 {{GENDER:$2|ورپورته يې کړ}}",
        "rightsnone": "(هېڅ)",
        "revdelete-summary": "لنډيز سمول",
        "feedback-subject": "سکالو:",
index a909721..0bbcb07 100644 (file)
        "mergehistory-from": "Página de origem:",
        "mergehistory-into": "Página de destino:",
        "mergehistory-list": "Histórico de edições habilitadas para fusão",
-       "mergehistory-merge": "As edições de [[:$1]] a seguir poderão ser fundidas em [[:$2]]. Utilize a coluna de botões de opção para fundir apenas as edições feitas entre o intervalo de tempo especificado. Note que ao utilizar os links de navegação esta coluna será retornada a seus valores padrão.",
+       "mergehistory-merge": "As edições de [[:$1]] a seguir poderão ser fundidas em [[:$2]]. Utilize a coluna de botões de opção para fundir apenas as edições feitas até a que for selecionada. Note que ao utilizar os links de navegação esta coluna será retornada a seus valores padrão.",
        "mergehistory-go": "Exibir edições habilitadas a serem fundidas",
        "mergehistory-submit": "Fundir revisões",
        "mergehistory-empty": "Não existem edições habilitadas a serem fundidas.",
        "sp-contributions-search": "Navegar pelas contribuições",
        "sp-contributions-username": "Endereço de IP ou usuário:",
        "sp-contributions-toponly": "Mostrar somente as edições que sejam a última alteração",
-       "sp-contributions-newonly": "Mostrar somente as edições que criaram uma nova página.",
+       "sp-contributions-newonly": "Mostrar somente as criações de páginas",
        "sp-contributions-submit": "Pesquisar",
        "whatlinkshere": "Páginas afluentes",
        "whatlinkshere-title": "Páginas que têm links para \"$1\"",
index 1477393..b23881e 100644 (file)
        "thumbnail_image-missing": "Ficheiro em falta: $1",
        "thumbnail_image-failure-limit": "Ocorreram demasiadas tentativas recentes ($1 ou mais) de criação desta miniatura. Tente novamente mais tarde, por favor.",
        "import": "Importar páginas",
-       "importinterwiki": "Importação transwikis",
-       "import-interwiki-text": "Selecione uma wiki e um título de página a importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwikis são registadas no [[Special:Log/import|Registo de importações]].",
+       "importinterwiki": "Importar de uma outra wiki",
+       "import-interwiki-text": "Selecione uma wiki e um título de página a importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação a partir de outras wikis são registadas no [[Special:Log/import|registo de importações]].",
        "import-interwiki-sourcewiki": "Wiki de origem:",
        "import-interwiki-sourcepage": "Página de origem:",
        "import-interwiki-history": "Copiar todo o histórico de revisões desta página",
        "revdelete-uname-unhid": "utilizador desocultado",
        "revdelete-restricted": "restrições a administradores aplicadas",
        "revdelete-unrestricted": "restrições a administradores removidas",
+       "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|fundiu}} $3 com $4 (edições até $5)",
        "logentry-move-move": "$1 moveu a página $3 para $4",
        "logentry-move-move-noredirect": "$1 moveu a página $3 para $4 sem deixar um redirecionamento",
        "json-error-utf8": "Caracteres UTF-8 mal formatados, possivelmente codificado incorretamente",
        "json-error-recursion": "Uma ou mais referências recursivas no valor a ser codificado",
        "json-error-inf-or-nan": "Um ou mais valores NaN ou INF no valor a ser codificado",
-       "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado"
+       "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado",
+       "headline-anchor-title": "Ligação para esta seção"
 }
index f2abd03..6253fc9 100644 (file)
        "readonly_lag": "Error message displayed when the database is locked.",
        "internalerror": "{{Identical|Internal error}}",
        "internalerror_info": "Parameters:\n* $1 - error message",
+       "internalerror-fatal-exception": "Error message displayed by MediaWiki itself when the request failed, inside an error box which also contains a code, a timestamp and a colon before this message.\nParameters:\n* $1 - proper name of the kind of error\n* $2 - alphanumeric code identifying the error in the server logs\n* $3 - URL which resulted in the error\n$2 and $3 are not used by default and only available for wiki customisations, because they are useful for communication to the wiki system administrator.",
        "filecopyerror": "Parameters:\n* $1 - source file name\n* $2 - destination file name",
        "filerenameerror": "Parameters:\n* $1 - old file name\n* $2 - new file name",
        "filedeleteerror": "Parameters:\n* $1 - file name",
        "blockipsuccesstext": "Used in [[Special:Block]].\nThe title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.\n\nParameters:\n* $1 - username, can be used for GENDER",
        "ipb-blockingself": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-confirmhideuser}}",
        "ipb-confirmhideuser": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-blockingself}}",
-       "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.",
+       "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.\n\n<code>to check</code> refers here to a check box with the text \"{{int:ipb-confirm}}\"",
        "ipb-edit-dropdown": "Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Delete-edit-reasonlist}}\n* {{msg-mw|Protect-edit-reasonlist}}",
        "ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}\n{{Identical|Unblock}}",
        "ipb-unblock": "Used as page title in [[Special:Block]], if the target user is not specified.\n\nSee also:\n* {{msg-mw|Ipb-unblock-addr}}",
        "blocklogpage": "{{doc-logpage}}\n\nThe page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\n{{Identical|Block log}}",
        "blocklog-showlog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nSee also:\n* {{msg-mw|Blocklog-showsuppresslog}}\n* {{msg-mw|Globalblocking-showlog}}",
        "blocklog-showsuppresslog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER",
-       "blocklogentry": "This is the text of an entry in the Block log, and recent changes, after hour (and date, only in the Block log) and sysop name:\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
-       "reblock-logentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
+       "blocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
+       "reblock-logentry": "This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
        "blocklogtext": "Appears on top of [[Special:Log/block]].",
-       "unblocklogentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name:\n* $1 is the user being unblocked",
+       "unblocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 is the user being unblocked",
        "block-log-flags-anononly": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Anononlyblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-nocreate": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Createaccountblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-noautoblock": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n{{Related|Block-log-flags}}\n{{Identical|Autoblock disabled}}",
        "revdelete-uname-unhid": "Used on\n* {{msg-mw|logentry-delete-event}}\n* {{msg-mw|logentry-delete-revision}}\n* {{msg-mw|logentry-suppress-event}}\n* {{msg-mw|logentry-suppress-event}}",
        "revdelete-restricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
        "revdelete-unrestricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
+       "logentry-block-block": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Blocklogentry}}",
+       "logentry-block-unblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n\nCf. {{msg-mw|Unblocklogentry}}",
+       "logentry-block-reblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Reblock-logentry}}",
+       "logentry-suppress-block": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
+       "logentry-suppress-reblock": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
        "logentry-merge-merge": "{{Logentry|[[Special:Log/merge]]}}\n* $4 - the page into which the content is merged\n* $5 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
        "logentry-move-move": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
index de08d6e..b6fcb4a 100644 (file)
        "readonly_lag": "Baza de date a fost închisă automatic în timp ce serverele secundare ale bazei de date îl urmează pe cel principal.",
        "internalerror": "Eroare internă",
        "internalerror_info": "Eroare internă: $1",
+       "internalerror-fatal-exception": "Excepție fatală pentru tipul „$1”",
        "filecopyerror": "Fișierul \"$1\" nu a putut fi copiat la \"$2\".",
        "filerenameerror": "Fișierul \"$1\" nu a putut fi mutat la \"$2\".",
        "filedeleteerror": "Fișierul \"$1\" nu a putut fi șters.",
        "thumbnail_image-missing": "Fișierul următor nu poate fi găsit: $1",
        "thumbnail_image-failure-limit": "Recent au existat prea multe încercări nereușite ($1 sau mai multe) pentru a randa această miniatură. Încercați din nou mai târziu.",
        "import": "Importare pagini",
-       "importinterwiki": "Import transwiki",
-       "import-interwiki-text": "Selectează un wiki și titlul paginii care trebuie importate. Datele reviziilor și numele editorilor vor fi salvate. Toate acțiunile de import transwiki pot fi găsite la [[Special:Log/import|log import]]",
+       "importinterwiki": "Importare din alt wiki",
+       "import-interwiki-text": "Selectați un wiki și titlul paginii care trebuie importate.\nData și ora versiunilor, precum și numele editorilor vor fi păstrate.\nToate acțiunile de importare din alte wikiuri se găsesc în [[Special:Log/import|jurnalul de importare]].",
        "import-interwiki-sourcewiki": "Wikiul sursă:",
        "import-interwiki-sourcepage": "Pagina sursă:",
        "import-interwiki-history": "Copiază toate versiunile istoricului acestei pagini",
        "importcantopen": "Fișierul importat nu a putut fi deschis",
        "importbadinterwiki": "Legătură interwiki greșită",
        "importsuccess": "Import reușit!",
-       "importnosources": "Nici o sursă de import transwiki a fost definită și încărcările directe ale istoricului sunt oprite.",
+       "importnosources": "Nu a fost definită nici o sursă de import din alt wiki; încărcarea directă a istoricului este dezactivată.",
        "importnofile": "Nici un fișier pentru import nu a fost încărcat.",
        "importuploaderrorsize": "Încărcarea fișierului a eșuat.\nFișierul are o mărime mai mare decât limita de încărcare permisă.",
        "importuploaderrorpartial": "Încărcarea fișierului a eșuat.\nFișierul a fost incărcat parțial.",
        "revdelete-uname-unhid": "numele de utilizator afișat",
        "revdelete-restricted": "restricții aplicate administratorilor",
        "revdelete-unrestricted": "restricții eliminate pentru administratori",
+       "logentry-block-block": "$1 {{GENDER:$2|a blocat}} utilizatorul {{GENDER:$4|$3}} pe o perioadă de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|a deblocat}} utilizatorul {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|a schimbat}} parametrii blocării pentru utilizatorul {{GENDER:$4|$3}} cu o perioadă de expirare de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|a blocat}} utilizatorul {{GENDER:$4|$3}} pe o perioadă de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|a schimbat}} parametrii blocării pentru utilizatorul {{GENDER:$4|$3}} cu o perioadă de expirare de $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|a unificat}} $3 cu $4 (versiuni de până la $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 fără a lăsa o redirecționare în loc",
        "json-error-utf8": "Caractere UTF-8 deformate, posibil incorect codificate",
        "json-error-recursion": "Una sau mai multe referințe recursive în valoarea pentru codificat",
        "json-error-inf-or-nan": "Una sau mai valori NAN sau INF în valoarea pentru codificat",
-       "json-error-unsupported-type": "A fost furnizată o valoare de un tip care nu poate fi codificat"
+       "json-error-unsupported-type": "A fost furnizată o valoare de un tip care nu poate fi codificat",
+       "headline-anchor-title": "Legătură către această secțiune"
 }
index d2106c1..7de51ea 100644 (file)
        "readonly_lag": "База данных автоматически заблокирована от изменений на время, пока вторичные сервера базы данных не синхронизируются с первичным.",
        "internalerror": "Внутренняя ошибка",
        "internalerror_info": "Внутренняя ошибка: $1",
+       "internalerror-fatal-exception": "Неустранимое исключение типа «$1»",
        "filecopyerror": "Невозможно скопировать файл «$1» в «$2».",
        "filerenameerror": "Невозможно переименовать файл «$1» в «$2».",
        "filedeleteerror": "Невозможно удалить файл «$1».",
        "thumbnail_image-missing": "По-видимому, отсутствует файл $1",
        "thumbnail_image-failure-limit": "Было сделано слишком много неудачных попыток ($1 или больше) формирования этого эскиза. Пожалуйста, повторите попытку позже.",
        "import": "Импортирование страниц",
-       "importinterwiki": "Ð\9cежвики Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82",
-       "import-interwiki-text": "УкажиÑ\82е Ð²Ð¸ÐºÐ¸ Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80Ñ\83емой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.\nÐ\94аÑ\82Ñ\8b Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð¸ Ð¸Ð¼ÐµÐ½Ð° Ð°Ð²Ñ\82оÑ\80ов Ð±Ñ\83дÑ\83Ñ\82 Ñ\81оÑ\85Ñ\80аненÑ\8b.\nÐ\92Ñ\81е Ð¾Ð¿ÐµÑ\80аÑ\86ии Ð¼ÐµÐ¶Ð²Ð¸ÐºÐ¸ Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82а Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80Ñ\83Ñ\8eÑ\82Ñ\81Ñ\8f Ð² [[Special:Log/import|Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\89ем Ð¶Ñ\83Ñ\80нале]].",
+       "importinterwiki": "Ð\98мпоÑ\80Ñ\82 Ð¸Ð· Ð´Ñ\80Ñ\83гой Ð²Ð¸ÐºÐ¸",
+       "import-interwiki-text": "УкажиÑ\82е Ð²Ð¸ÐºÐ¸ Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80Ñ\83емой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.\nÐ\94аÑ\82Ñ\8b Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð¸ Ð¸Ð¼ÐµÐ½Ð° Ð°Ð²Ñ\82оÑ\80ов Ð±Ñ\83дÑ\83Ñ\82 Ñ\81оÑ\85Ñ\80аненÑ\8b.\nÐ\92Ñ\81е Ð¾Ð¿ÐµÑ\80аÑ\86ии Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82а Ð¸Ð· Ð´Ñ\80Ñ\83гиÑ\85 Ð²Ð¸ÐºÐ¸ Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80Ñ\83Ñ\8eÑ\82Ñ\81Ñ\8f Ð² [[Special:Log/import|жÑ\83Ñ\80нале Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82а]].",
        "import-interwiki-sourcewiki": "Исходный вики-проект:",
        "import-interwiki-sourcepage": "Исходная страница:",
        "import-interwiki-history": "Копировать всю историю изменений этой страницы",
        "importcantopen": "Невозможно открыть импортируемый файл",
        "importbadinterwiki": "Неправильная интервики-ссылка",
        "importsuccess": "Импортирование выполнено!",
-       "importnosources": "Не был выбран источник межвики-импорта, прямая загрузка истории изменений отключена.",
+       "importnosources": "Не была выбрана вики, из которой должен быть произведён импорт, и прямая загрузка истории изменений отключена.",
        "importnofile": "Файл для импорта не был загружен.",
        "importuploaderrorsize": "Не удалось загрузить или импортировать файл. Размер файла превышает установленный предел.",
        "importuploaderrorpartial": "Не удалось загрузить или импортировать файл. Он был загружен лишь частично.",
        "tags-activate": "активировать",
        "tags-deactivate": "отключить",
        "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
+       "tags-manage-no-permission": "У вас нет прав на управление изменениями меток.",
        "tags-create-heading": "Создать новую метку",
+       "tags-create-explanation": "Вновь созданные метки по умолчанию будут созданы доступными для использования участниками и ботами.",
        "tags-create-tag-name": "Название метки:",
        "tags-create-reason": "Причина:",
        "tags-create-submit": "Создать",
        "tags-create-no-name": "Вы должны указать имя метки.",
+       "tags-create-invalid-chars": "Имена меток не должны содержать запятые (<code>,</code>) или символы косой черты (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Имена меток не должны содержать символы, которые не могут быть использованы в заголовках страниц.",
        "tags-create-already-exists": "Метка «$1» уже существует.",
+       "tags-create-warnings-above": "При попытке создать метку «$1» обнаружен{{PLURAL:$2|о следующее предупреждение|ы следующие предупреждения}}:",
        "tags-create-warnings-below": "Вы хотите продолжить создание метки?",
        "tags-delete-title": "Удалить метку",
        "tags-delete-explanation-initial": "Вы собираетесь удалить метку «$1» из базы данных.",
        "tags-delete-reason": "Причина:",
+       "tags-delete-not-found": "Метка «$1» не существует.",
        "tags-activate-title": "Активировать метку",
        "tags-activate-question": "Вы собираетесь активировать метку «$1».",
        "tags-activate-reason": "Причина:",
        "tags-activate-not-found": "Метка «$1» не существует.",
        "tags-activate-submit": "Активировать",
        "tags-deactivate-title": "Отключить метку",
+       "tags-deactivate-question": "Вы собираетесь отключить метку «$1».",
        "tags-deactivate-reason": "Причина:",
+       "tags-deactivate-not-allowed": "Невозможно отключить метку «$1».",
        "tags-deactivate-submit": "Отключить",
        "comparepages": "Сравнение страниц",
        "compare-page1": "Первая страница",
        "revdelete-uname-unhid": "имя участника раскрыто",
        "revdelete-restricted": "ограничения применяются к администраторам",
        "revdelete-unrestricted": "ограничения сняты для администраторов",
+       "logentry-block-block": "$1 заблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}} до $5 $6",
+       "logentry-block-unblock": "$1 разблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}}",
        "logentry-merge-merge": "$1 объедининил{{GENDER:$2||а}} $3 в $4 (версии до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 без оставления перенаправления",
        "json-error-utf8": "Некорректные символы UTF-8, возможно, неверная кодировка",
        "json-error-recursion": "Должны быть закодированы одна или несколько рекурсивных ссылок в значении",
        "json-error-inf-or-nan": "Должны быть закодированы одно или несколько NAN- или INF-значений",
-       "json-error-unsupported-type": "Было указано значение типа, который не может быть закодирован"
+       "json-error-unsupported-type": "Было указано значение типа, который не может быть закодирован",
+       "headline-anchor-title": "Ссылка на этот раздел"
 }
index 52949b0..301dc1d 100644 (file)
@@ -8,7 +8,8 @@
                        "Nemo bis",
                        "Reedy",
                        "Tkalyn",
-                       "아라"
+                       "아라",
+                       "Dicto23456"
                ]
        },
        "tog-underline": "Підкреслёвати одказы:",
        "otherlanguages": "Іншыма языками",
        "redirectedfrom": "(Напрямленый з $1)",
        "redirectpagesub": "Сторінка-напрямлїня",
+       "redirectto": "Напрямлїня на:",
        "lastmodifiedat": "Послїдня зміна той сторінкы: $2, $1.",
        "viewcount": "Сторінка была зображена  {{PLURAL:$1|раз|$1разы|$1раз}}.",
        "protectedpage": "Замкнута сторінка",
index d2e05ef..d43ca7d 100644 (file)
        "tooltip-pt-mycontris": "Суруйбут/уларыппыт сирэйдэриҥ тиһиктэрэ",
        "tooltip-pt-login": "Манна бэйэҕин билиһиннэриэххин сөп (булгуччута суох).",
        "tooltip-pt-logout": "Тахсыы",
+       "tooltip-pt-createaccount": "Манна киирэргэ бэлиэтэнэр уонна куруук ол аатынан киирэр ордук; ол булгуччута суох",
        "tooltip-ca-talk": "Ыстатыйаны ырытыы",
        "tooltip-ca-edit": "Бу сирэйи уларытыахха сөп. Бука диэн бастаан хайдах буоларын көрөн баран уларыт.",
        "tooltip-ca-addsection": "Саҥа салааны саҕалааһын",
index 8401963..a6ac22b 100644 (file)
        "uploaderror": "Erruri ntô carricamentu",
        "upload-recreate-warning": "<strong>Accura: Nu file cu' ddu nomu fu' cancillatu o spustatu.</strong>\n\nPi' cummudità ccassutta cci su' li riggistra dî cancillazzioni e dî spustamenti di sta pàggina:",
        "uploadtext": "Usa lu mòdulu ccà sutta pi carricari file novi. Pi vìdiri o circari li file già carricati, talìa lu [[Special:FileList|log dî file carricati]]. Carricamenti di file e di virsioni novi di file sunnu riggistrati ntô [[Special:Log/upload|log di l'upload]], li cancillazzioni di file sunnu\nriggistrati [[Special:Log/delete|ccà]].\n\nPi nziriri nu file nta na pàggina, fai nu lijami accussì:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'usari la virsioni ntera dû file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testu altirnativu]]</nowiki></code>''' p'usari na virsioni làrica 200 pixel nziruta nta nu box, alliniata a manu manca e cu 'testu altirnativu' comu didascalìa\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pi culligari direttamenti a lu file senza vidìrilu.",
-       "upload-permitted": "Tipi di file cunsintuti: $1.",
-       "upload-preferred": "Tipi di file cunsigghiati: $1.",
-       "upload-prohibited": "Tipi di file prüibbiti: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsintutu|cunsintuti}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsigghiatu|cunsigghiati}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|prüibbutu|prüibbuti}}: $1.",
        "uploadlogpage": "Riggistru dî file carricati",
        "uploadlogpagetext": "Ccà sutta cc'è la lista di l'ùrtimi file carricati.\nTalìa la [[Special:NewFiles|gallarìa dî file novi]] pûn risucuntu cchiu' visuali.",
        "filename": "Nomu dû file",
        "thumbnail_image-missing": "Pari èssiri mancanti lu file: $1",
        "thumbnail_image-failure-limit": "Cc'hannu statu troppu tintativi ($1 o cchiu' ssai) di ginirari sta miniatura. Pi' favuri prova n'autra vota cchiu' tardu.",
        "import": "Mporta pàggini",
-       "importinterwiki": "Mpurtazzioni transwiki",
-       "import-interwiki-text": "Silizziunari un pruggettu wiki e lu tìtulu dâ pàggina a mpurtari. Li dati di pubbricazzioni e li noma di l'autura dî vari virsioni sunnu sarvati. Tutti l'opirazzioni di mpurtazzioni trans-wiki sunnu riggistrati ntô [[Special:Log/import|log di mpurtazzioni]].",
+       "importinterwiki": "Mpurtazzioni di n'autra wiki",
+       "import-interwiki-text": "Silizziunari na wiki e lu tìtulu di na pàggina a' mpurtari.\nLi dati dî virsioni e li nomi di l'autura sarannu mantinuti.\nTutti li mpurtazzioni di autri wiki vènunu riggistrati ntô [[Special:Log/import|riggistru dî mpurtazzioni]].",
        "import-interwiki-sourcewiki": "Wiki surgenti:",
        "import-interwiki-sourcepage": "Pàggina surgenti:",
        "import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina",
        "importcantopen": "Mpussìbbili grapiri lu file di mpurtazzioni",
        "importbadinterwiki": "Culligamentu inter-wiki erratu",
        "importsuccess": "Mpurtazzioni arrinisciuta.",
-       "importnosources": "Nun hà statu difinita na fonti pi la mpurtazzioni transwiki; la mpurtazzioni diretta dâ cronoluggìa nun Ã¨ attiva.",
+       "importnosources": "Nun hâ statu difinuta nudda wiki d'unni mpurtari e li carricamenti diretti dâ cronuluggìa sunnu disattivati.",
        "importnofile": "Nun hà statu carrcatu nuddu file pi la mpurtazzioni.",
        "importuploaderrorsize": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Lu file è cchiù granni di li diminzioni màssimi cunzentiti pi l'upload.",
        "importuploaderrorpartial": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Sulamenti na parti dû file vinni caricatu.",
index 8f5acaa..4116096 100644 (file)
        "readonly_lag": "Podatkovna zbirka se je samodejno zaklenila, dokler se podrejeni strežniki ne uskladijo z glavnim.",
        "internalerror": "Notranja napaka",
        "internalerror_info": "Notranja napaka: $1",
+       "internalerror-fatal-exception": "Usodna izjema vrste »$1«",
        "filecopyerror": "Datoteke »$1« ni mogoče prepisati v »$2«.",
        "filerenameerror": "Datoteke »$1« ni mogoče preimenovati v »$2«.",
        "filedeleteerror": "Datoteke »$1« ni mogoče izbrisati.",
        "right-override-export-depth": "Izvoz strani, vključno s povezaimi straneh do globine 5",
        "right-sendemail": "Pošiljanje e-pošte drugim uporabnikom",
        "right-passwordreset": "Ogled e-pošt ponastavitve gesel",
+       "right-managechangetags": "Ustvarjanje in brisanje [[Special:Tags|oznak]] iz zbirke podatkov",
        "newuserlogpage": "Dnevnik registracij uporabnikov",
        "newuserlogpagetext": "Prikazan je dnevnik nedavnih registracij novih uporabnikov.",
        "rightslog": "Dnevnik uporabniških pravic",
        "action-viewmyprivateinfo": "ogled svojih zasebnih informacij",
        "action-editmyprivateinfo": "urejanje svojih zasebnih informacij",
        "action-editcontentmodel": "urejanje vsebinskega modela strani",
+       "action-managechangetags": "ustvarjanje in brisanje oznak iz zbirke podatkov",
        "nchanges": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od zadnjega obiska}}",
        "enhancedrc-history": "zgodovina",
        "unusedimages": "Osirotele datoteke",
        "wantedcategories": "Želene kategorije",
        "wantedpages": "Želene strani",
+       "wantedpages-summary": "Seznam neobstoječih strani z največ povezavami, ki kažejo na njih, izključujoč preusmeritve. Za seznam neobstoječih strani, ki so ciljne strani preusmeritev, glejte [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Neveljaven naslov v končnem nizu: $1",
        "wantedfiles": "Želene datoteke",
        "wantedfiletext-cat": "Naslednje datoteke so uporabljene, vendar ne obstajajo. Navedene so morda tudi datoteke iz zunanjih hramb, čeprav obstajajo. Vsi takšni lažni pozitivi bodo <del>prečrtani</del>. Poleg tega so strani, ki vključujejo neobstoječe datoteke, navedene na [[:$1]].",
        "thumbnail_image-missing": "Kaže, da datoteka manjka: $1",
        "thumbnail_image-failure-limit": "Nedavno je bilo preveč spodletelih poskusov ($1 ali več) izdelave sličice. Prosimo, poskusite znova pozneje.",
        "import": "Uvoz strani",
-       "importinterwiki": "Uvoz transwiki",
-       "import-interwiki-text": "Izberite wiki in naslov strani za uvoz.\nDatumi in imena urejevalcev redakcij bodo ohranjena.\nVsi uvozi med wikiji so zabeleženi v [[Special:Log/import|dnevniku uvozov]].",
+       "importinterwiki": "Uvoz z drugega wikija",
+       "import-interwiki-text": "Izberite wiki in naslov strani za uvoz.\nDatumi in imena urejevalcev redakcij bodo ohranjena.\nVsi uvozi z drugih wikijev so zabeleženi v [[Special:Log/import|dnevniku uvozov]].",
        "import-interwiki-sourcewiki": "Izvorni wiki:",
        "import-interwiki-sourcepage": "Izvorna stran:",
        "import-interwiki-history": "Kopiraj vse dosedanje redakcije te strani",
        "importcantopen": "Neuspešno odpiranje uvožene datoteke",
        "importbadinterwiki": "Slaba jezikovna povezava",
        "importsuccess": "Uspešno uvoženo!",
-       "importnosources": "Na tem wikiju je ta možnost onemogočena.",
+       "importnosources": "Naveden ni noben wiki za uvažanje in neposredno nalaganje zgodovine je onemogočeno.",
        "importnofile": "Uvožena ni bila nobena datoteka.",
        "importuploaderrorsize": "Nalaganje datoteke za uvoz ni uspelo.\nDatoteka je večja od dovoljene velikosti nalaganja.",
        "importuploaderrorpartial": "Nalaganje datoteke za uvoz ni uspelo.\nDatoteka je bila prenesena samo delno.",
        "tags-tag": "Ime oznake",
        "tags-display-header": "Prikaz na seznamu sprememb",
        "tags-description-header": "Polni opis pomena",
+       "tags-source-header": "Vir",
        "tags-active-header": "Dejavno?",
        "tags-hitcount-header": "Etiketirane spremembe",
+       "tags-actions-header": "Dejanja",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
+       "tags-source-extension": "Opredeljuje jo razširitev",
+       "tags-source-manual": "Ročno jo uporabljajo uporabniki in boti",
+       "tags-source-none": "Se ne uporablja več",
        "tags-edit": "uredi",
+       "tags-delete": "izbriši",
+       "tags-activate": "aktiviraj",
+       "tags-deactivate": "dezaktiviraj",
        "tags-hitcount": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
+       "tags-manage-no-permission": "Nimate dovoljenja za upravljanje z oznakami sprememb.",
+       "tags-create-heading": "Ustvari novo oznako",
+       "tags-create-explanation": "Privzeto bodo novo ustvarjene oznake na voljo uporabnikom in botom.",
+       "tags-create-tag-name": "Ime oznake:",
+       "tags-create-reason": "Razlog:",
+       "tags-create-submit": "Ustvari",
+       "tags-create-no-name": "Določiti morate ime oznake.",
+       "tags-create-invalid-chars": "Imena oznak ne smejo vsebovati vejic (<code>,</code>) ali desnih poševnic (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Imena oznak ne smejo vsebovati znakov, ki jih ni mogoče uporabiti v naslovih strani.",
+       "tags-create-already-exists": "Oznaka »$1« že obstaja.",
+       "tags-create-warnings-above": "Pri poskusu ustvarjanja oznake »$1« smo naleteli na {{PLURAL:$2|naslednje opozorilo|naslednji opozorili|naslednja opozorila}}:",
+       "tags-create-warnings-below": "Želite nadaljevati z ustvarjanjem oznake?",
+       "tags-delete-title": "Izbriši oznako",
+       "tags-delete-explanation-initial": "Nameravate izbrisati oznako »$1« iz zbirke podatkov.",
+       "tags-delete-explanation-in-use": "Odstranjena bo iz {{PLURAL:$2|$2 redakcije ali dnevniškega vnosa|vseh $2 redakcij in/ali dnevniških vnosov}}, ki jo trenutno uporabljajo.",
+       "tags-delete-explanation-warning": "Dejanje je <strong>nepovratno</strong> in <strong>ga ni mogoče razveljaviti</strong>; tega ne morejo storiti niti upravljavci zbirke podatkov. Prepričajte se, da oznako zares želite izbrisati.",
+       "tags-delete-explanation-active": "<strong>Oznaka »$1« je že vedno aktivna in bo uporabljana tudi v bodoče.</strong> Da to preprečite, pojdite na mesto, kjer je oznaka določena za uporabo, in jo tam onemogočite.",
+       "tags-delete-reason": "Razlog:",
+       "tags-delete-submit": "Nepovratno izbriši oznako",
+       "tags-delete-not-allowed": "Oznak, ki jih določijo razširitve, ni mogoče izbrisati, razen če razširitve to izrecno dovolijo.",
+       "tags-delete-not-found": "Oznaka »$1« ne obstaja.",
+       "tags-delete-too-many-uses": "Oznaka »$1« je uporabljena pri več kot $2 {{PLURAL:$2|redakciji|redakcijah}}, kar pomeni, da je ni mogoče izbrisati.",
+       "tags-delete-warnings-after-delete": "Oznako »$1« smo uspešno izbrisali, vendar smo naleteli na {{PLURAL:$2|naslednjo težavo|naslednji težavi|naslednje težave}}:",
+       "tags-activate-title": "Aktiviraj oznako",
+       "tags-activate-question": "Aktivirali boste oznako »$1«.",
+       "tags-activate-reason": "Razlog:",
+       "tags-activate-not-allowed": "Oznake »$1« ni možno aktivirati.",
+       "tags-activate-not-found": "Oznaka »$1« ne obstaja.",
+       "tags-activate-submit": "Aktiviraj",
+       "tags-deactivate-title": "Dezaktiviraj oznako",
+       "tags-deactivate-question": "Dezaktivirali boste oznako »$1«.",
+       "tags-deactivate-reason": "Razlog:",
+       "tags-deactivate-not-allowed": "Oznake »$1« ni možno dezaktivirati.",
+       "tags-deactivate-submit": "Dezaktiviraj",
        "comparepages": "Primerjaj strani",
        "compare-page1": "Stran 1",
        "compare-page2": "Stran 2",
        "revdelete-uname-unhid": "uporabniško ime je ponovno prikazano",
        "revdelete-restricted": "uveljavljene omejitve administratorjev",
        "revdelete-unrestricted": "odstranjene omejitve administratorjev",
+       "logentry-block-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
+       "logentry-block-unblock": "$1 je {{GENDER:$2|odblokiral|odblokirala|odblokiral(-a)}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časomspremenil poteka $5 $6",
+       "logentry-suppress-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
+       "logentry-suppress-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časom poteka $5 $6",
        "logentry-merge-merge": "$1 je {{GENDER:$2|združil|združila|združil(-a)}} $3 z $4 (redakcije do $5)",
        "logentry-move-move": "$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4",
        "logentry-move-move-noredirect": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} stran $3 na $4 brez preusmeritve",
        "logentry-upload-upload": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
        "logentry-upload-overwrite": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} novo različico $3",
        "logentry-upload-revert": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
+       "log-name-managetags": "Dnevnik upravljanja oznak",
+       "log-description-managetags": "Stran navaja opravila upravljanja, povezana z [[Special:Tags|oznakami]]. Dnevnik vsebuje samo dejanja, ki so jih ročno izvedli administratorji; oznake je lahko ustvarilo ali izbrisalo tudi programje wiki brez zabeleženega vnosa v tem dnevniku.",
+       "logentry-managetags-create": "$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} oznako »$4«",
+       "logentry-managetags-delete": "$1 je {{GENDER:$2|izbrisal|izbrisala|izbrisal(-a)}} oznako »$4« (odstranjena iz $5 {{PLURAL:$5|redakcije ali dnevniškega vnosa|redakcij in/ali dnevniških vnosov}})",
+       "logentry-managetags-activate": "$1 je {{GENDER:$2|aktiviral|aktivirala|aktiviral(-a)}} oznako »$4« za uporabnike in bote",
+       "logentry-managetags-deactivate": "$1 je {{GENDER:$2|dezaktiviral|dezaktivirala|dezaktiviral(-a)}} oznako »$4« za uporabnike in bote",
        "rightsnone": "(nobeno)",
        "revdelete-summary": "povzetek urejanja",
        "feedback-bugornote": "Če ste pripravljeni podrobno opisati tehnično težavo, vložite [$1 poročilo o hrošču].\nV nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bomo dodali na stran »[$3 $2]«, skupaj z vašim uporabniškim imenom in podatkom o brskalniku, ki ga uporabljate.",
        "json-error-utf8": "Nepravilno oblikovani znaki UTF-8; morda so nepravilno zakodirani",
        "json-error-recursion": "En ali več rekurzivnih sklicev v vrednosti za zakodirati",
        "json-error-inf-or-nan": "Ena ali več vrednosti NAN ali INF v vrednosti za zakodirati",
-       "json-error-unsupported-type": "Podana je bila vrsta, ki je ni mogoče zakodirati"
+       "json-error-unsupported-type": "Podana je bila vrsta, ki je ni mogoče zakodirati",
+       "headline-anchor-title": "Povezava na razdelek"
 }
index c566705..b63503f 100644 (file)
        "thu": "Enj",
        "fri": "Pr",
        "sat": "Sht",
-       "january": "Janar",
-       "february": "Shkurt",
-       "march": "Mars",
-       "april": "Prill",
+       "january": "janar",
+       "february": "shkurt",
+       "march": "mars",
+       "april": "prill",
        "may_long": "Maj",
-       "june": "Qershor",
-       "july": "Korrik",
-       "august": "Gusht",
-       "september": "Shtator",
-       "october": "Tetor",
-       "november": "Nëntor",
-       "december": "Dhjetor",
-       "january-gen": "Janar",
-       "february-gen": "Shkurt",
-       "march-gen": "Mars",
-       "april-gen": "Prill",
-       "may-gen": "Maj",
-       "june-gen": "Qershor",
+       "june": "qershor",
+       "july": "korrik",
+       "august": "gusht",
+       "september": "shtator",
+       "october": "tetor",
+       "november": "nëntor",
+       "december": "dhjetor",
+       "january-gen": "janar",
+       "february-gen": "shkurt",
+       "march-gen": "mars",
+       "april-gen": "prill",
+       "may-gen": "maj",
+       "june-gen": "qershor",
        "july-gen": "korrik",
-       "august-gen": "Gusht",
-       "september-gen": "Shtator",
-       "october-gen": "Tetor",
-       "november-gen": "Nëntor",
-       "december-gen": "Dhjetor",
+       "august-gen": "gusht",
+       "september-gen": "shtator",
+       "october-gen": "tetor",
+       "november-gen": "nëntor",
+       "december-gen": "dhjetor",
        "jan": "Jan",
        "feb": "Shku",
        "mar": "Mar",
        "apr": "Pri",
-       "may": "Maj",
+       "may": "maj",
        "jun": "Qer",
        "jul": "Korr",
        "aug": "Gush",
        "oct": "Tet",
        "nov": "Nën",
        "dec": "Dhje",
-       "january-date": "$1 Janar",
-       "february-date": "Shkurt, <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
-       "march-date": "Mars <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
-       "april-date": "Prill <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
-       "may-date": "$1 Maj",
-       "june-date": "$1 Qershor",
-       "july-date": "$1 Korrik",
-       "august-date": "$1 Gusht",
-       "september-date": "$1 Shtator",
-       "october-date": "$1 Tetor",
-       "november-date": "$1 Nëntor",
-       "december-date": "$1 Dhjetor",
+       "january-date": "$1 janar",
+       "february-date": "$1 shkurt",
+       "march-date": "$1 mars",
+       "april-date": "$1 prill",
+       "may-date": "$1 maj",
+       "june-date": "$1 qershor",
+       "july-date": "$1 korrik",
+       "august-date": "$1 gusht",
+       "september-date": "$1 shtator",
+       "october-date": "$1 tetor",
+       "november-date": "$1 nëntor",
+       "december-date": "$1 dhjetor",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
        "category_header": "Artikuj në kategorinë \"$1\"",
        "subcategories": "Nën-kategori",
        "delete-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e faqeve të tilla ka qenë kufizuar për të parandaluar përçarjen aksidentale të {{SITENAME}}.",
        "delete-warning-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e saj mund të ndërpresë operacionet e bazës së të dhënave të {{SITENAME}};\nvazhdoni me kujdes.",
        "rollback": "Riktheji mbrapsh redaktimet",
-       "rollback_short": "Riktheje",
        "rollbacklink": "riktheje",
        "rollbacklinkcount": "riktheni $1 {{PLURAL:$1|ndryshimin|ndryshiemt}}",
        "rollbacklinkcount-morethan": "riktheni më tepër $1 {{PLURAL:$1|ndryshim|ndryshime}}",
        "import-logentry-interwiki": "transwikoji $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$!1|version|versione}} nga $2",
        "javascripttest": "Duke testuar JavaScript",
-       "javascripttest-title": "Duke kryer testet $1",
        "javascripttest-pagetext-noframework": "Kjo faqe është rezervuar për kryerjen e testimeve JavaScript.",
        "javascripttest-pagetext-unknownframework": "Kornizë pune e panjohur testuese \"$1\".",
        "javascripttest-pagetext-frameworks": "Ju lutemi zgjidhni njërën nga kornizat vijuese punuese të testimit: $1",
        "javascripttest-pagetext-skins": "Zgjidhni një mostër për t'i kryer testimet:",
        "javascripttest-qunit-intro": "Shiko [$1 dokumentacionin e testimit] në mediawiki.org.",
-       "javascripttest-qunit-heading": "Platforma testuese JavaScript QUnit",
        "tooltip-pt-userpage": "Faqja juaj e përdoruesit",
        "tooltip-pt-anonuserpage": "Faqja e përdoruesve anonim nga kjo adresë IP",
        "tooltip-pt-mytalk": "Faqja juaj e diskutimeve",
index 9d2c85e..1494236 100644 (file)
        "rev-suppressed-unhide-diff": "Једна од измена ове разлике је '''сакривена'''.\nДетаљи се налазе у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].\nИпак можете да [$1 видите ову разлику] ако желите да наставите.",
        "rev-deleted-diff-view": "Једна од измена ове разлике је '''обрисана'''.\nИпак можете да видите ову разлику; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-suppressed-diff-view": "Једна од измена ове разлике је '''сакривена'''.\nИпак можете да видите ову разлику; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
-       "rev-delundel": "пÑ\80икажи/Ñ\81акÑ\80иÑ\98",
+       "rev-delundel": "пÑ\80омени Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82",
        "rev-showdeleted": "прикажи",
        "revisiondelete": "Обриши/врати измене",
        "revdelete-nooldid-title": "Нема тражене измене",
index 242c943..08b6212 100644 (file)
        "readonly_lag": "Databasen har automatiskt skrivskyddats medan slavdatabasservrarna synkroniseras med huvudservern.",
        "internalerror": "Internt fel",
        "internalerror_info": "Internt fel: $1",
+       "internalerror-fatal-exception": "Allvarligt undantag av typen \"$1\"",
        "filecopyerror": "Kunde inte kopiera filen \"$1\" till \"$2\".",
        "filerenameerror": "Kunde inte byta namn på filen \"$1\" till \"$2\".",
        "filedeleteerror": "Kunde inte radera filen \"$1\".",
        "diff-multi-sameuser": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av samma användare visas inte)",
        "diff-multi-otherusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av {{PLURAL:$2|en annan användare|$2 användare}} visas inte)",
        "diff-multi-manyusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av mer än $2 användare visas inte)",
-       "difference-missing-revision": "{{PLURAL:$2|En version|$2 versioner}} av denna skillnad ($1) kunde inte hittas.\n\nDetta orsakas vanligtvis av att följa en utgången difflänk till en sida som har raderats.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
+       "difference-missing-revision": "Det gick inte att hitta {{PLURAL:$2|en version|$2 versioner}} av den här differensen ($1).\n\nDetta beror oftast på att du har försökt följa en utgången difflänk till en sida som har raderats.\nMer detaljerad information finns i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
        "searchresults": "Sökresultat",
        "searchresults-title": "Sökresultat för \"$1\"",
        "titlematches": "Träffar i sidtitlar",
        "unusedimages": "Oanvända filer",
        "wantedcategories": "Önskade kategorier",
        "wantedpages": "Önskade sidor",
+       "wantedpages-summary": "Lista över obefintliga sidor som är mest länkade, exklusive sidor som endast är länkade med omdirigeringar. För en lista över obefintliga sidor som endast är länkade med omdirigeringar, se [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ogiltig titel bland resultaten: $1",
        "wantedfiles": "Önskade filer",
        "wantedfiletext-cat": "Följande filer används men finns inte. Filer från utländska databaser kan vara listade trots att de inte finns. Sådana falska realiteter kommer att <del>tas bort</del>. Sidor som bäddar in filer som inte finns listas upp på [[:$1]].",
        "thumbnail_image-missing": "Fil verkar saknas: $1",
        "thumbnail_image-failure-limit": "Det har nyligen förekommit alltför många misslyckade ($1 eller fler) försök skapa den här miniatyrbilden. Försök igen senare.",
        "import": "Importera sidor",
-       "importinterwiki": "Transwiki-import",
-       "import-interwiki-text": "Välj en wiki och sidtitel att importera.\nVersionshistorik (datum och redaktörer) kommer att bevaras.\nAll överföring mellan wikier (transwiki) listas i  [[Special:Log/import|importloggen]].",
+       "importinterwiki": "Importera från en annan wiki",
+       "import-interwiki-text": "Välj en wiki och sidtitel att importera.\nVersionshistorikens datum och redigerare kommer att bevaras.\nAll importering från andra wikis listas i [[Special:Log/import|importloggen]].",
        "import-interwiki-sourcewiki": "Källwiki:",
        "import-interwiki-sourcepage": "Källsida:",
        "import-interwiki-history": "Kopiera hela versionshistoriken för denna sida",
        "revdelete-uname-unhid": "användarnamn synligt",
        "revdelete-restricted": "satte begränsningar för administratörer",
        "revdelete-unrestricted": "tog bort begränsningar för administratörer",
+       "logentry-block-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|upphävde blockeringen för}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|slog ihop}} $3 i $4 (versioner t.o.m. $5)",
        "logentry-move-move": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4 utan att lämna en omdirigering",
        "json-error-utf8": "Felaktiga UTF-8-tecken, möjligen felkodade",
        "json-error-recursion": "En eller flera rekursiva referenser i värde som ska kodas",
        "json-error-inf-or-nan": "En eller flera NAN- eller INF-värden i värdet som ska kodas",
-       "json-error-unsupported-type": "Ett värde av en typ som inte kan kodas angavs"
+       "json-error-unsupported-type": "Ett värde av en typ som inte kan kodas angavs",
+       "headline-anchor-title": "Länka till detta avsnitt"
 }
index c4e7449..14dfccf 100644 (file)
@@ -20,7 +20,8 @@
                        "לערי ריינהארט",
                        "จักรกฤช วงศ์สระหลวง (Jakkrit Vongsraluang) / PaePae",
                        "วรากร อึ้งวิเชียร (Varakorn Ungvichian)",
-                       "아라"
+                       "아라",
+                       "Pphongpan355"
                ]
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
        "site-atom-feed": "ฟีดอะตอม $1",
        "page-rss-feed": "ฟีดอาร์เอสเอส \"$1\"",
        "page-atom-feed": "ฟีดอะตอม \"$1\"",
-       "red-link-title": "$1 (หà¸\99à¹\89าà¸\99ีà¹\89à¹\84มà¹\88มี)",
+       "red-link-title": "$1 (à¹\84มà¹\88มีหà¸\99à¹\89า)",
        "sort-descending": "เรียงจากมากไปน้อย",
        "sort-ascending": "เรียงจากน้อยไปมาก",
        "nstab-main": "หน้า",
        "media_tip": "เชื่อมโยงไฟล์",
        "sig_tip": "ลายเซ็นของคุณพร้อมตราเวลา",
        "hr_tip": "เส้นนอน (ใช้อย่างจำกัด)",
-       "summary": "à¸\84ำอà¸\98ิà¸\9aายà¹\82à¸\94ยย่อ:",
+       "summary": "à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ย่อ:",
        "subject": "เรื่อง/พาดหัว:",
        "minoredit": "เป็นการแก้ไขเล็กน้อย",
        "watchthis": "เฝ้าดูหน้านี้",
        "recentchangeslinked-title": "การปรับปรุงที่โยงกับ \"$1\"",
        "recentchangeslinked-summary": "นี่คือรายการเปลี่ยนแปลงล่าสุดของหน้าที่ถูกลิงก์จากหน้าเฉพาะ (หรือไปสมาชิกของหมวดหมู่เฉพาะ)\nหน้าใน[[Special:Watchlist|รายการเฝ้าดู]]แสดงเป็น<strong>ตัวหนา</strong>",
        "recentchangeslinked-page": "ชื่อหน้า:",
-       "recentchangeslinked-to": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87มายัà¸\87หน้าที่ระบุแทน",
+       "recentchangeslinked-to": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9bหà¸\99à¹\89าà¸\8bึà¹\88à¸\87à¹\82ยà¸\87à¹\84à¸\9bหน้าที่ระบุแทน",
        "upload": "อัปโหลดไฟล์",
        "uploadbtn": "อัปโหลดไฟล์",
        "reuploaddesc": "ยกเลิกการอัปโหลดและกลับไปยังแบบอัปโหลด",
        "tooltip-pt-anonuserpage": "หน้าผู้ใช้ของเลขที่อยู่ไอพีที่คุณกำลังใช้แก้ไข",
        "tooltip-pt-mytalk": "หน้าพูดคุยของคุณ",
        "tooltip-pt-anontalk": "อภิปรายเกี่ยวกับการแก้ไขจากเลขที่อยู่ไอพีนี้",
-       "tooltip-pt-preferences": "à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99สà¹\88วà¸\99à¸\95ัว",
+       "tooltip-pt-preferences": "à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93",
        "tooltip-pt-watchlist": "รายการหน้าที่คุณเฝ้าดูการแก้ไข",
        "tooltip-pt-mycontris": "รายการหน้าที่คุณเขียน",
-       "tooltip-pt-login": "ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน",
+       "tooltip-pt-login": "ไม่จำเป็นต้องล็อกอิน แต่แนะนำอย่างยิ่งให้ล็อกอิน",
        "tooltip-pt-logout": "ล็อกเอาต์",
        "tooltip-pt-createaccount": "สนับสนุนให้คุณสร้างบัญชีและล็อกอิน แต่ไม่บังคับ",
        "tooltip-ca-talk": "อภิปรายเกี่ยวกับหน้าเนื้อหา",
        "tooltip-ca-watch": "เพิ่มหน้านี้เข้ารายการเฝ้าดู",
        "tooltip-ca-unwatch": "นำหน้านี้ออกจากรายการเฝ้าดู",
        "tooltip-search": "ค้นหา {{SITENAME}}",
-       "tooltip-search-go": "à¸\95รà¸\87à¹\84à¸\9bยัà¸\87หน้าที่ตรงกับชื่อนี้ (ถ้ามี)",
+       "tooltip-search-go": "à¹\84à¸\9bหน้าที่ตรงกับชื่อนี้ (ถ้ามี)",
        "tooltip-search-fulltext": "ค้นหาหน้าที่มีข้อความนี้",
        "tooltip-p-logo": "เยี่ยมชมหน้าหลัก",
        "tooltip-n-mainpage": "เยี่ยมชมหน้าหลัก",
        "tooltip-ca-nstab-project": "ดูหน้าโครงการ",
        "tooltip-ca-nstab-image": "ดูหน้าภาพไฟล์",
        "tooltip-ca-nstab-mediawiki": "ดูข้อความระบบ",
-       "tooltip-ca-nstab-template": "à¸\94ูหà¸\99à¹\89าà¹\81มà¹\88à¹\81à¸\9aà¸\9a",
+       "tooltip-ca-nstab-template": "ดูแม่แบบ",
        "tooltip-ca-nstab-help": "ดูหน้าคำอธิบาย",
        "tooltip-ca-nstab-category": "ดูหน้าหมวดหมู่",
        "tooltip-minoredit": "ทำเครื่องหมายเป็นการแก้ไขเล็กน้อย",
-       "tooltip-save": "บันทึกการแก้ไข",
+       "tooltip-save": "บันทึกการแก้ไขของคุณ",
        "tooltip-preview": "แสดงตัวอย่างการเปลี่ยนแปลงของคุณ กรุณาใช้คำสั่งนี้ก่อนบันทึก!",
        "tooltip-diff": "แสดงการเปลี่ยนการต่อข้อความ",
        "tooltip-compareselectedversions": "แสดงความแตกต่างระหว่างสองรุ่นที่เลือกของหน้านี้",
        "tooltip-recreate": "สร้างหน้านี้อีกครั้งแม้เคยถูกลบ",
        "tooltip-upload": "เริ่มอัปโหลด",
        "tooltip-rollback": "\"ย้อนกลับฉุกเฉิน\" ใช้ย้อนการแก้ไขในหน้านี้ของผู้เขียนคนล่าสุดในคลิกเดียว",
-       "tooltip-undo": "\"ยà¹\89อà¸\99\" ย้อนการแก้ไขนี้และเปิดแบบแก้ไขในภาวะตัวอย่าง เปิดให้เพิ่มเหตุผลในคำอธิบาย",
+       "tooltip-undo": "\"à¸\81ารà¸\97ำà¸\81ลัà¸\9a\" ย้อนการแก้ไขนี้และเปิดแบบแก้ไขในภาวะตัวอย่าง เปิดให้เพิ่มเหตุผลในคำอธิบาย",
        "tooltip-preferences-save": "บันทึกการตั้งค่า",
-       "tooltip-summary": "à¹\83สà¹\88à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อสั้น ๆ",
+       "tooltip-summary": "à¹\83สà¹\88สรุà¸\9bสั้น ๆ",
        "common.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */",
        "print.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ข้อมูลส่งออกเป็นสิ่งพิมพ์ */",
        "noscript.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ปิดการใช้งานจาวาสคริปต์ */",
        "file-info-size-pages": "$1 × $2 พิกเซล, ขนาดไฟล์: $3, ประเภท MIME: $4, $5 {{PLURAL:$5|หน้า|หน้า}}",
        "file-nohires": "ไม่มีความละเอียดสูงกว่านี้",
        "svg-long-desc": "ไฟล์ SVG, $1 × $2 พิกเซล พอเป็นพิธี, ขนาดไฟล์: $3",
+       "svg-long-desc-animated": "ไฟล์ SVG ขนาด $1 x $2 ขนาดไฟล์ $3",
        "svg-long-error": "ไฟล์ SVG ไม่ถูกต้อง: $1",
        "show-big-image": "ไฟล์ต้นฉบับ",
-       "show-big-image-other": "อื่นๆ {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-preview": "ขนาดของตัวอย่างนี้คือ $1",
+       "show-big-image-other": "{{PLURAL:$2|ขนาด|ขนาด}}อื่น ๆ: $1",
        "show-big-image-size": "$1 × $2 พิกเซล",
        "file-info-gif-looped": "วนซ้ำ",
        "file-info-gif-frames": "$1 {{PLURAL:$1|เฟรม|เฟรม}}",
        "exif-primarychromaticities": "โครมาติกของไพรมาริตี",
        "exif-ycbcrcoefficients": "สัมประสิทธิเมทริกซ์การเปลียนแปลงของสเปซสี",
        "exif-referenceblackwhite": "คู่จุดสีขาวและดำสำหรับอ้างอิง",
-       "exif-datetime": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\9bรัà¸\9aà¸\9bรุà¸\87",
+       "exif-datetime": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¹\80à¸\9bลีà¹\88ยà¸\99à¹\84à¸\9fลà¹\8c",
        "exif-imagedescription": "ชื่อภาพ",
        "exif-make": "ผู้ผลิตกล้อง",
        "exif-model": "รุ่นกล้อง",
        "exif-pixelxdimension": "ความสูงของภาพ",
        "exif-usercomment": "ความเห็นผู้ใช้",
        "exif-relatedsoundfile": "ไฟล์เสียงที่เกี่ยวข้อง",
-       "exif-datetimeoriginal": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\97ีà¹\88สรà¹\89าà¸\87",
+       "exif-datetimeoriginal": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\81ารà¸\81à¹\88อà¸\81ำà¹\80à¸\99ิà¸\94à¸\82à¹\89อมูล",
        "exif-datetimedigitized": "วันที่และเวลาที่ดิจิไทซ์",
        "exif-subsectime": "เสี้ยววินาที วันที่ เวลา",
        "exif-subsectimeoriginal": "เสี้ยววินาที วันที่ เวลาต้นฉบับ",
index 9da0024..5153a89 100644 (file)
@@ -66,7 +66,8 @@
                        "Violetanka",
                        "Trockya",
                        "Aşilleus",
-                       "BatuhanBensoy"
+                       "BatuhanBensoy",
+                       "Mavrikant"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "prefs-personal": "Kullanıcı bilgileri",
        "prefs-rc": "Son değişiklikler",
        "prefs-watchlist": "İzleme listesi",
+       "prefs-editwatchlist": "İzleme listesini düzenle",
        "prefs-watchlist-days": "İzleme listesinde görüntülenecek gün sayısı:",
        "prefs-watchlist-days-max": "en fazla $1 {{PLURAL:$1|gün|gün}}",
        "prefs-watchlist-edits": "Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:",
        "prefs-help-signature": "Tartışma sayfalarındaki yorumlar \"<nowiki>~~~~</nowiki>\" ile imzalanmalıdır, bu imzanıza ve zaman damgasına dönüştürülür.",
        "badsig": "Geçersiz ham imza; HTML etiketlerini kontrol edin.",
        "badsiglength": "İmzanız çok uzun.\n$1 {{PLURAL:$1|karakterin|karakterin}} altında olmalı.",
-       "yourgender": "Nasıl açıklamayı tercih edersiniz?",
-       "gender-unknown": "Söylemek istemiyorsanız",
-       "gender-male": "Viki sayfalarını erkek olarak düzenliyorum",
-       "gender-female": "Viki sayfalarını kadın olarak düzenliyorum",
+       "yourgender": "Cinsel kimlik?",
+       "gender-unknown": "Açıklamak istemiyorum",
+       "gender-male": "Erkek",
+       "gender-female": "Kadın",
        "prefs-help-gender": "Bu tercih ayarı isteğe bağlıdır.\nYazılımda söz değerlerinin başlarında bulunan cinsiyete uygun gramerler için kullanılır.\nBu bilgiler herkes tarafından görülebilir.",
        "email": "E-posta",
        "prefs-help-realname": "Gerçek ismi vermek isteğe bağlıdır.\nEğer verirseniz yaptığınız çalışmalara ithafen kullanılabilir.",
        "javascripttest-pagetext-skins": "Testleri koşmak için bir tema seçin:",
        "javascripttest-qunit-intro": "mediawiki.org üzerinden [$1 deneme belgelerine] bakınız.",
        "tooltip-pt-userpage": "Kullanıcı sayfanız",
-       "tooltip-pt-anonuserpage": "The user page for the ip you",
+       "tooltip-pt-anonuserpage": "IP adresine ait bir kullanıcı sayfasını düzenliyorsunuz",
        "tooltip-pt-mytalk": "Mesaj sayfanız",
        "tooltip-pt-anontalk": "Bu IP adresinden yapılmış değişiklikleri tartış",
        "tooltip-pt-preferences": "Tercihleriniz (ayarlarınız)",
index 4fd905f..bd1e1a9 100644 (file)
@@ -7,7 +7,8 @@
                        "Reedy",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Amire80"
                ]
        },
        "tog-underline": "Sıltamalarnıñ astına sızu:",
        "mytalk": "Bäxäsem",
        "anontalk": "Bu IP adresı öçen bäxäs bite",
        "navigation": "Küçü",
-       "and": " häm",
+       "and": "&#32;häm",
        "qbfind": "Ezläw",
        "qbbrowse": "Qaraw",
        "qbedit": "Üzgärtü",
        "deletereasonotherlist": "Başqa säbäp",
        "deletereason-dropdown": "* Beterüneñ säbäpläre\n** vandallıq\n** avtor sorawı buyınça\n** avtor xoquqların bozu",
        "delete-edit-reasonlist": "Säbäplär isemlegen üzgärtü",
-       "rollback_short": "Kire qaytaru",
        "rollbacklink": "kire qaytaru",
        "editcomment": "Üzgärtü öçen taswir: \"''$1''\".",
        "revertpage": "[[Special:Contributions/$2|$2]] üzgärtüläre ([[User talk:$2|bäxäs]])  [[User:$1|$1]] yuramasına kire qaytarıldı",
index 86973bf..849def9 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Nemo bis",
-                       "Rberchie"
+                       "Rberchie",
+                       "MF-Warburg"
                ]
        },
        "sun": "Kwasiada",
@@ -37,7 +38,7 @@
        "searchprofile-everything": "Biribiara",
        "searchprofile-articles-tooltip": "Hwehwe wo dola baako mu",
        "searchall": "Biribiara",
-       "diff": "NSONSOE",
+       "diff": "nsonsoe",
        "hide": "Fa sie",
        "watch": "Hwe",
        "undeleteviewlink": "Hwe",
index 6f2145c..dcd5b9c 100644 (file)
        "tuesday": "вівторок",
        "wednesday": "середа",
        "thursday": "четвер",
-       "friday": "пятниця",
+       "friday": "п'ятниця",
        "saturday": "субота",
        "sun": "Нд",
        "mon": "Пн",
        "continue-editing": "Продовжити редагування",
        "previewconflict": "Цей попередній перегляд відображає текст з верхнього вікна редагування так, як він буде виглядати, якщо ви вирішите зберегти його.",
        "session_fail_preview": "'''Система не може зберегти ваші редагування, оскільки втрачені дані сеансу. Будь ласка, повторіть вашу спробу.\nЯкщо помилка буде повторюватись, спробуйте [[Special:UserLogout|вийти з системи]] і увійти знову.'''",
-       "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову, - спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
+       "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову,  спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
        "token_suffix_mismatch": "'''Ваше редагування було відхилене, оскільки ваша програма неправильно обробляє знаки пунктуації у вікні редагування. Редагування було скасоване для запобігання спотворенню тексту статті.\nПодібні проблеми можуть виникати при використанні анонімізуючих веб-проксі, що містять помилки.'''",
        "edit_form_incomplete": "'''Частина даних із форми редагування не досягла сервера. Уважно перевірте, чи не пошкоджені ваші правки і спробуйте ще раз.'''",
        "editing": "Редагування $1",
        "gender-unknown": "Не визначена",
        "gender-male": "Чоловіча",
        "gender-female": "Жіноча",
-       "prefs-help-gender": "Задання цього параметру - необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
+       "prefs-help-gender": "Задання цього параметру  необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
        "email": "Електронна пошта",
        "prefs-help-realname": "Справжнє ім'я вказувати необов'язково.\nЯкщо ви його зазначите, то саме з ним може бути пов'язаний увесь ваш доробок.",
        "prefs-help-email": "Адреса електронної пошти не є обов'язковою, але необхідна для скидання пароля, якщо ви його забудете.",
        "right-override-export-depth": "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5",
        "right-sendemail": "відправляти пошту іншим користувачам",
        "right-passwordreset": "Перегляд повідомлень електронної пошти для зміни паролю",
-       "right-managechangetags": "Створення та вилучення [[Special:Tags|тегів]] з бази даних",
+       "right-managechangetags": "Створення та вилучення [[Special:Tags|міток]] з бази даних",
        "newuserlogpage": "Журнал нових користувачів",
        "newuserlogpagetext": "Список нещодавно зареєстрованих користувачів.",
        "rightslog": "Журнал прав користувача",
        "action-viewmyprivateinfo": "перегляд своєї приватної інформації",
        "action-editmyprivateinfo": "редагування своєї приватної інформації",
        "action-editcontentmodel": "редагувати модель вмісту сторінки",
-       "action-managechangetags": "створення та вилучення тегів з бази даних",
+       "action-managechangetags": "створення та вилучення міток з бази даних",
        "nchanges": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|зміна з останнього візиту|зміни з останнього візиту|змін з останнього візиту}}",
        "enhancedrc-history": "історія",
        "upload-recreate-warning": "'''Увага. Файл з такою назвою був раніше вилучений або перейменований.''\n\nДалі наведено журнал вилучень і перейменувань цього файлу:",
        "uploadtext": "За допомогою цієї форми ви можете завантажити файли на сервер.\n\nЯкщо файл із зазначеною вами назвою вже існує в проекті, то його буде замінено без попередження. Тому, якщо ви не збираєтесь оновлювати файл,\nбуло б непогано перевірити, чи такий файл уже існує.\n\nЩоби переглянути вже завантажені файли,\nзайдіть на: [[Special:FileList|список завантажених файлів]].\n\nЗавантаження відображаються в [[Special:Log/upload|журналі завантажень]], вилучення – у [[Special:Log/delete|журналі вилучень]].\n\nДля вставки зображень в статті можна використовувати такі рядки:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:Назва_зображення.jpg<nowiki>]]</nowiki></code>''', щоб використати повну версію файлу\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:Назва_зображення.png|200px|thumb|left|Підпис під зображенням<nowiki>]]</nowiki></code>''', щоб використати зображення у рамці зліва сторінки з підписом під зображенням\n\nдля інших медіа-файлів використовуйте рядок виду:\n* '''<code><nowiki>[[</nowiki>{{ns:media}}:Назва_файлу.ogg<nowiki>]]</nowiki></code>'''.",
        "upload-permitted": "Дозволен{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
-       "upload-preferred": "Бажан{{PLURAL:$2|й тип|і типи}} файлів: $1.",
+       "upload-preferred": "Ð\91ажан{{PLURAL:$2|ий Ñ\82ип|Ñ\96 Ñ\82ипи}} Ñ\84айлÑ\96в: $1.",
        "upload-prohibited": "Заборонен{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
        "uploadlogpage": "Журнал завантажень",
        "uploadlogpagetext": "Нижче наведено список останніх завантажених файлів.\nГляньте [[Special:NewFiles|галерею нових зображень]] для більш візуального огляду.",
        "watchthisupload": "Спостерігати за цим файлом",
        "filewasdeleted": "Файл з такою назвою вже існував, але був вилучений.\nВам слід перевірити $1 перед повторним завантаженням.",
        "filename-bad-prefix": "Назва завантажуваного файлу починається на '''«$1»''' і, можливо, є шаблонною назвою, яку цифрова фотокамера дає знімкам. Будь ласка, виберіть назву, яка краще описуватиме вміст файлу.",
-       "filename-prefix-blacklist": " #<!-- Ð½Ðµ Ð¼Ñ\96нÑ\8fйÑ\82е Ñ\86ей Ñ\80Ñ\8fдок --> <pre>\n# Ð¡Ð¸Ð½Ñ\82акÑ\81иÑ\81 Ñ\82акий:\n#   * Ð\92Ñ\81е, Ñ\89о Ð¿Ð¾Ñ\87инаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð· Ñ\81имволÑ\83 Â«#» Ð²Ð²Ð°Ð¶Ð°Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80ем (до ÐºÑ\96нÑ\86Ñ\8f Ñ\80Ñ\8fдка)\n#   * Ð\9aожен Ð½ÐµÐ¿Ð¾Ñ\80ожнÑ\96й Ñ\80Ñ\8fдок - Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\81Ñ\82андаÑ\80Ñ\82ноÑ\97 Ð½Ð°Ð·Ð²Ð¸ Ñ\84айлÑ\83, Ñ\8fкÑ\83 Ð·Ð°Ð·Ð²Ð¸Ñ\87ай Ð´Ð°Ñ\94 Ñ\86иÑ\84Ñ\80ова ÐºÐ°Ð¼ÐµÑ\80а\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # Ð´ÐµÑ\8fкÑ\96 Ð¼Ð¾Ð±Ñ\96лÑ\8cнÑ\96 Ñ\82елеÑ\84они\nIMG # Ð·Ð°Ð³Ð°Ð»Ñ\8cне\nJD # Jenoptik\nMGP # Pentax\nPICT # Ñ\80Ñ\96знÑ\96\n #</pre> <!-- Ð½Ðµ Ð¼Ñ\96нÑ\8fйте цей рядок -->",
+       "filename-prefix-blacklist": " #<!-- Ð½Ðµ Ð·Ð¼Ñ\96нÑ\8eйÑ\82е Ñ\86ей Ñ\80Ñ\8fдок --> <pre>\n# Ð¡Ð¸Ð½Ñ\82акÑ\81иÑ\81 Ñ\82акий:\n#   * Ð\92Ñ\81е, Ñ\89о Ð¿Ð¾Ñ\87инаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð· Ñ\81имволÑ\83 Â«#» Ð²Ð²Ð°Ð¶Ð°Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80ем (до ÐºÑ\96нÑ\86Ñ\8f Ñ\80Ñ\8fдка)\n#   * Ð\9aожен Ð½ÐµÐ¿Ð¾Ñ\80ожнÑ\96й Ñ\80Ñ\8fдок â\80\94 Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\81Ñ\82андаÑ\80Ñ\82ноÑ\97 Ð½Ð°Ð·Ð²Ð¸ Ñ\84айлÑ\83, Ñ\8fкÑ\83 Ð·Ð°Ð·Ð²Ð¸Ñ\87ай Ð´Ð°Ñ\94 Ñ\86иÑ\84Ñ\80ова ÐºÐ°Ð¼ÐµÑ\80а\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # Ð´ÐµÑ\8fкÑ\96 Ð¼Ð¾Ð±Ñ\96лÑ\8cнÑ\96 Ñ\82елеÑ\84они\nIMG # Ð·Ð°Ð³Ð°Ð»Ñ\8cне\nJD # Jenoptik\nMGP # Pentax\nPICT # Ñ\80Ñ\96знÑ\96\n #</pre> <!-- Ð½Ðµ Ð·Ð¼Ñ\96нÑ\8eйте цей рядок -->",
        "upload-success-subj": "Завантаження успішно завершено",
        "upload-success-msg": "Ваше завантаження з [$2] було успішним. Воно доступне тут: [[:{{ns:file}}:$1]]",
        "upload-failure-subj": "Проблема із завантаженням",
        "listredirects": "Список перенаправлень",
        "listduplicatedfiles": "Список файлів з дублікатами",
        "listduplicatedfiles-summary": "Це список файлів, де остання версія файлу вважається дублікатом останньої версії деяких інших файлів. Враховуються тільки локальні файли.",
-       "listduplicatedfiles-entry": "У файлу [[:File:$1|$1]] - [[$3|{{PLURAL:$2|один дублікат|$2 дублікатів|$2 дублікат}}]].",
+       "listduplicatedfiles-entry": "У файлу [[:File:$1|$1]]  [[$3|{{PLURAL:$2|один дублікат|$2 дублікатів|$2 дублікат}}]].",
        "unusedtemplates": "Шаблони, що не використовуються",
        "unusedtemplatestext": "На цій сторінці показані всі сторінки простору назв «{{ns:template}}», які не включені до інших сторінок. Не забувайте перевірити відсутність інших посилань на шаблон, перш ніж вилучити його.",
        "unusedtemplateswlh": "інші посилання",
        "emailuser-title-notarget": "Надіслати електронного листа користувачеві",
        "emailpage": "Лист користувачеві",
        "emailpagetext": "Заповнивши наведену нижче форму, можна надіслати повідомлення {{GENDER:$1|цьому користувачу|цій користувачці}}.\nЕлектронна адреса, яку Ви зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.",
-       "defemailsubject": "{{SITENAME}} - електронний лист від користувача \" $1 \"",
+       "defemailsubject": "{{SITENAME}} — електронний лист від користувача «$1»",
        "usermaildisabled": "Електронне листування між користувачами вимкнене",
        "usermaildisabledtext": "Ви не можете надсилати електронні листи іншим користувачам цієї вікі",
        "noemailtitle": "Відсутня адреса електронної пошти",
        "tags-activate": "активувати",
        "tags-deactivate": "вимкнути",
        "tags-hitcount": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
-       "tags-manage-no-permission": "У Вас нема дозволу керувати змінами тегів.",
-       "tags-create-heading": "Створити новий тег",
-       "tags-create-explanation": "За замовчуванням, новостворені теги будуть доступні для використання користувачами і ботами.",
-       "tags-create-tag-name": "Назва тега:",
+       "tags-manage-no-permission": "У Вас нема дозволу керувати змінами міток.",
+       "tags-create-heading": "Створити нову мітку",
+       "tags-create-explanation": "За замовчуванням, новостворені мітки будуть доступні для використання користувачами і ботами.",
+       "tags-create-tag-name": "Назва мітки:",
        "tags-create-reason": "Причина:",
        "tags-create-submit": "Створити",
-       "tags-create-no-name": "Ви повинні вказати назву тега.",
-       "tags-create-invalid-chars": "Назви тегів не повинні містити коми (<code>,</code>) або косої риски (<code>/</code>).",
-       "tags-create-invalid-title-chars": "Назви тегів не повинні містити символи, які не можна використовувати в заголовках сторінок.",
-       "tags-create-already-exists": "Тег «$1» вже існує.",
-       "tags-create-warnings-above": "При спробі створити тег «$1» виникли такі {{PLURAL:$2|попередження}}:",
-       "tags-create-warnings-below": "Ви хочете продовжити створення тега?",
-       "tags-delete-title": "Вилучити тег",
+       "tags-create-no-name": "Ви повинні вказати назву мітки.",
+       "tags-create-invalid-chars": "Назви міток не повинні містити коми (<code>,</code>) або косі риски (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Назви міток не повинні містити символи, які не можна використовувати в назвах сторінок.",
+       "tags-create-already-exists": "Мітка «$1» вже існує.",
+       "tags-create-warnings-above": "При спробі створити мітку «$1» {{PLURAL:$2|з'явились такі|1=з'явилось таке}} попередження:",
+       "tags-create-warnings-below": "Ви хочете продовжити створення мітки?",
+       "tags-delete-title": "Вилучити мітку",
+       "tags-delete-explanation-initial": "Ви збираєтеся вилучити мітку «$1» з бази даних.",
+       "tags-delete-explanation-in-use": "Його буде вилучено з {{PLURAL:$2|$2 версії/запису журналу|усіх $2 версій та/або записів журналів}}, у яких він зараз застосовується.",
+       "tags-delete-explanation-warning": "Ця дія є <strong>незворотною</strong> і <strong>не може бути скасована</strong>, навіть адміністраторами бази даних. Переконайтеся, що Ви хочете вилучити саме цю мітку.",
+       "tags-delete-explanation-active": "<strong>Мітка «$1» все ще активна і буде застосовуватися надалі.</strong> Щоб припинити це, перейдіть туди, де вказане її застосування і вимкніть її там.",
+       "tags-delete-reason": "Причина:",
+       "tags-delete-submit": "Незворотно видалити цю мітку",
+       "tags-delete-not-allowed": "Мітки, визначені розширенням, не можуть бути вилучені, якщо тільки розширення не дозволяє це окремо.",
+       "tags-delete-not-found": "Мітка «$1» не існує.",
+       "tags-delete-too-many-uses": "Міткою «$1» понад $2 {{PLURAL:$2|редагування|редагування|редагувань}}, і це означає, що її не можна вилучити.",
+       "tags-delete-warnings-after-delete": "Мітку «$1» було успішно вилучено, але {{PLURAL:$2|з'явились такі|1=з'явилось таке}} попередження:",
+       "tags-activate-title": "Активувати мітку",
+       "tags-activate-question": "Ви збираєтеся активувати мітку «$1».",
+       "tags-activate-reason": "Причина:",
+       "tags-activate-not-allowed": "Неможливо активувати мітку «$1».",
+       "tags-activate-not-found": "Мітка «$1» не існує.",
+       "tags-activate-submit": "Активувати",
+       "tags-deactivate-title": "Вимкнути мітку",
+       "tags-deactivate-question": "Ви збираєтеся вимкнути мітку «$1».",
+       "tags-deactivate-reason": "Причина:",
+       "tags-deactivate-not-allowed": "Неможливо вимкнути мітку «$1».",
+       "tags-deactivate-submit": "Вимкнути",
        "comparepages": "Порівняння сторінок",
        "compare-page1": "Сторінка 1",
        "compare-page2": "Сторінка 2",
        "logentry-upload-upload": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|завантажив|завантажила}} нову версію $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
+       "log-name-managetags": "Журнал управління мітками",
+       "log-description-managetags": "На цій сторінці перераховані завдання управління, пов'язані з [[Special:Tags|мітками]]. Журнал містить тільки дії, виконані вручну адміністратором; мітки можуть бути створені або видалені програмним забезпеченням вікі без запису в цей журнал.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|створив|створила}} мітку «$4»",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|вилучив|вилучила}} мітку «$4» (вилучено з $5 {{PLURAL:$5|версії чи запису журналу|версій та/або записів журналу}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|активував|активувала}} мітку «$4» для використання користувачами і ботами",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|вимкнув|вимкнула}} мітку «$4» для використання користувачами і ботами",
        "rightsnone": "(нема)",
        "revdelete-summary": "коментар до редагування",
        "feedback-bugornote": "Якщо ви готові описати технічні проблеми в деталях, будь ласка, [$1 повідомте про помилку].\nАбо можете використати форму нижче. Ваш коментар буде додано на сторінку \"[$3  $2]\", разом з іменем користувача.",
        "log-description-pagelang": "Це журнал змін мови сторінок.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|змінив|змінила}} мову сторінки для $3 з $4 на $5.",
        "default-skin-not-found": "Ой! Типова тема оформлення для вашої вікі <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, вірогідно, містить наступні теми оформлення. Див.  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати типову тему.\n\n\n$2\n\n\n; Якщо ви щойно встановили MediaWiki:\n: Ви, мабуть, зробили це з Git або безпосередньо з вихідного коду, використовуючи інший спосіб. Тоді можливе наступне. Спробуйте встановити деякі теми з [https://www.mediawiki.org/wiki/Category:All_skins каталогу тем оформлення сайту mediawiki.org]:\n:* Завантаживши [https://www.mediawiki.org/wiki/Download архів файлів], який містить декілька тем оформлення і розширень. Ви можете скопіювати теку <code>skins/</code> з нього.\n:* Завантаживши архіви окремих тем оформлення з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Склонувавши один з репозиторіїв <code>mediawiki/skins/*</code> через git у підтеку <code dir=\"ltr\">skins/</code> теки, де встановлена MediaWiki.\n: Це не повинно зашкодити вашому сховищу, якщо ви MediaWiki-розробник. Див. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати типову тему.\n\n; Якщо ви щойно оновили MediaWiki:\n: MediaWiki версії 1.24 і новійша більше не включає автоматично встановлені теми (див. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВи можете вставити наступні рядки в <code>LocalSettings.php</code>, щоб включити всі встановлені теми оформлення: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Якщо ви щойно змінили <code>LocalSettings.php</code>:\n: Повторно перевірте назви тем на наявність помилок.",
-       "default-skin-not-found-no-skins": "Ð\9eй! Ð¢Ð¸Ð¿Ð¾Ð²Ð° Ñ\82ема Ð¾Ñ\84оÑ\80мленнÑ\8f Ð´Ð»Ñ\8f Ð²Ð°Ñ\88оÑ\97 Ð²Ñ\96кÑ\96 <code>$wgDefaultSkin</code>, <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\n\nУ Ð²Ð°Ñ\81 Ð½ÐµÐ¼Ð°Ñ\94 Ð²Ñ\81Ñ\82ановлениÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f.\n\n\n; Ð¯ÐºÑ\89о Ð²Ð¸ Ñ\89ойно Ð²Ñ\81Ñ\82ановили Ð°Ð±Ð¾ Ð¾Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: Ð\92и, Ð¼Ð°Ð±Ñ\83Ñ\82Ñ\8c, Ð·Ñ\80обили Ñ\86е Ð· Git Ð°Ð±Ð¾ Ð±ÐµÐ·Ð¿Ð¾Ñ\81еÑ\80еднÑ\8cо Ð· Ð²Ð¸Ñ\85Ñ\96дного ÐºÐ¾Ð´Ñ\83, Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83Ñ\8eÑ\87и Ñ\96нÑ\88ий Ñ\81поÑ\81Ñ\96б. Ð¢Ð¾Ð´Ñ\96 Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ Ñ\82аке. MediaWiki Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97 1.24 Ð°Ð±Ð¾ Ð½Ð¾Ð²Ñ\96Ñ\88а Ð½Ðµ Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ð² Ð¾Ñ\81новномÑ\83 Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97. Ð¡Ð¿Ñ\80обÑ\83йÑ\82е Ð²Ñ\81Ñ\82ановиÑ\82и Ð´ÐµÑ\8fкÑ\96 Ñ\82еми Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алогÑ\83 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\81айÑ\82Ñ\83 mediawiki.org]:\n:* Ð\97аванÑ\82аживÑ\88и [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85Ñ\96в Ñ\84айлÑ\96в], Ñ\8fкий Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ð´ÐµÐºÑ\96лÑ\8cка Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ñ\80озÑ\88иÑ\80енÑ\8c. Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копÑ\96Ñ\8eваÑ\82и Ñ\82екÑ\83 <code>skins/</code> Ð· Ð½Ñ\8cого.\n:* Ð¡ÐºÐ»Ð¾Ð½Ñ\83вавÑ\88и Ð¾Ð´Ð¸Ð½ Ð· Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97в <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез git Ð² Ð¿Ñ\96дÑ\82екÑ\83 <code dir=\"ltr\">skins/</code> Ñ\82еки, Ð´Ðµ Ð²Ñ\81Ñ\82ановлена MediaWiki.\n: Ð¦Ðµ Ð½Ðµ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð¾ Ð·Ð°Ñ\88кодиÑ\82и Ð²Ð°Ñ\88омÑ\83 Ñ\81Ñ\85овиÑ\89Ñ\83, Ñ\8fкÑ\89о Ð²Ð¸ MediaWiki-Ñ\80озÑ\80обник. Ð\94ив. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¾Ñ\82Ñ\80иманнÑ\8f Ñ\96нÑ\84оÑ\80маÑ\86Ñ\96Ñ\97 Ð¿Ñ\80о Ñ\82е, Ñ\8fк Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82и Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ð²Ð¸Ð±Ñ\80аÑ\82и Ñ\82иповÑ\83 Ñ\82емÑ\83.",
+       "default-skin-not-found-no-skins": "Ð\9eй! Ð¢ÐµÐ¼Ð° Ð¾Ñ\84оÑ\80мленнÑ\8f Ð´Ð»Ñ\8f Ð\92аÑ\88оÑ\97 Ð²Ñ\96кÑ\96 Ð·Ð° Ð·Ð°Ð¼Ð¾Ð²Ñ\87Ñ\83ваннÑ\8fм, Ð²Ð¸Ð·Ð½Ð°Ñ\87ена Ñ\83 <code>$wgDefaultSkin</code> Ñ\8fк <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\n\nУ Ð\92аÑ\81 Ð½ÐµÐ¼Ð°Ñ\94 Ð²Ñ\81Ñ\82ановлениÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f.\n\n\n; Ð¯ÐºÑ\89о Ð\92и Ñ\89ойно Ð²Ñ\81Ñ\82ановили Ð°Ð±Ð¾ Ð¾Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: Ð\92и, Ð¼Ð°Ð±Ñ\83Ñ\82Ñ\8c, Ð·Ñ\80обили Ñ\86е Ð· Git Ð°Ð±Ð¾ Ð±ÐµÐ·Ð¿Ð¾Ñ\81еÑ\80еднÑ\8cо Ð· Ð²Ð¸Ñ\85Ñ\96дного ÐºÐ¾Ð´Ñ\83, Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83Ñ\8eÑ\87и Ñ\96нÑ\88ий Ñ\81поÑ\81Ñ\96б. Ð¢Ð¾Ð´Ñ\96 Ñ\86е Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾. MediaWiki Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97 1.24 Ð°Ð±Ð¾ Ð½Ð¾Ð²Ñ\96Ñ\88а Ð½Ðµ Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ð² Ð¾Ñ\81новномÑ\83 Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97. Ð¡Ð¿Ñ\80обÑ\83йÑ\82е Ð²Ñ\81Ñ\82ановиÑ\82и Ð´ÐµÑ\8fкÑ\96 Ñ\82еми Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алогÑ\83 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\81айÑ\82Ñ\83 mediawiki.org]:\n:* Ð\97аванÑ\82аживÑ\88и [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85Ñ\96в Ñ\84айлÑ\96в], Ñ\8fкий Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ð´ÐµÐºÑ\96лÑ\8cка Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ñ\80озÑ\88иÑ\80енÑ\8c. Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копÑ\96Ñ\8eваÑ\82и Ñ\82екÑ\83 <code>skins/</code> Ð· Ð½Ñ\8cого.\n:* Ð\97аванÑ\82аживÑ\88и Ð¾ÐºÑ\80емÑ\96 Ð°Ñ\80Ñ\85Ñ\96ви Ñ\82ем Ð· [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Ð\9aлонÑ\83вавÑ\88и Ð¾Ð´Ð¸Ð½ Ð· Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97в <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез Git Ð² Ð¿Ñ\96дÑ\82екÑ\83 <code dir=\"ltr\">skins/</code> Ñ\82еки, Ð´Ðµ Ð²Ñ\81Ñ\82ановлена MediaWiki.\n: Ð¦Ðµ Ð½Ðµ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð¾ Ð·Ð°Ñ\88кодиÑ\82и Ð\92аÑ\88омÑ\83 Ñ\81Ñ\85овиÑ\89Ñ\83, Ñ\8fкÑ\89о Ð\92и MediaWiki-Ñ\80озÑ\80обник. Ð\94ив. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¾Ñ\82Ñ\80иманнÑ\8f Ñ\96нÑ\84оÑ\80маÑ\86Ñ\96Ñ\97 Ð¿Ñ\80о Ñ\82е, Ñ\8fк Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82и Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ð²Ð¸Ð±Ñ\80аÑ\82и Ñ\82емÑ\83 Ð·Ð° Ð·Ð°Ð¼Ð¾Ð²Ñ\87Ñ\83ваннÑ\8fм.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (увімкнено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''вимкнено''')",
        "mediastatistics": "Медіа-статистика",
        "json-error-utf8": "Спотворені символи UTF-8, можливо, неправильно закодовано",
        "json-error-recursion": "Необхідність закодувати одне чи більше рекурсивних посилань",
        "json-error-inf-or-nan": "Необхідність закодувати одне чи більше значення NAN або INF",
-       "json-error-unsupported-type": "Було вказано значення типу, який не вдається закодувати"
+       "json-error-unsupported-type": "Було вказано значення типу, який не вдається закодувати",
+       "headline-anchor-title": "Посилання на цей розділ"
 }
index c508fed..685b459 100644 (file)
@@ -21,7 +21,8 @@
                        "아라",
                        "Calak",
                        "عرفان ارشد",
-                       "Obaid Raza"
+                       "Obaid Raza",
+                       "عثمان خان شاہ"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "history_short": "تاریخچہ",
        "updatedmarker": "میری آخری آمد تک جدید",
        "printableversion": "قابل طبع نسخہ",
-       "permalink": "مستقل کڑی",
+       "permalink": "مستقل ربط",
        "print": "طباعت",
        "view": "منظر",
        "view-foreign": "$1 پر دیکھیں",
        "pool-errorunknown": "نامعلوم خطا",
        "poolcounter-usage-error": "استعمال میں خامی: $1",
        "aboutsite": "تعارف {{SITENAME}}",
-       "aboutpage": "Project:تعارف",
+       "aboutpage": "منصوبہ:تعارف",
        "copyright": "تمام مواد $1 کے تحت میسر ہے، جب تک کوئی دوسری وجہ نا ہو۔",
        "copyrightpage": "{{ns:project}}:حقوق تصانیف",
        "currentevents": "حالیہ واقعات",
        "virus-unknownscanner": "انجان ضدوائرس:",
        "logouttext": "'''اب آپ خارج ہوچکے ہیں'''\n\nآپ گمنام طور پر {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے <span class='plainlinks'>[$1 دوبارہ داخلِ نوشتہ]</span> بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
        "yourname": "اسمِ رکنیت",
+       "userlogin-yourname": "صارف نام",
+       "userlogin-yourname-ph": "اپنا صارف نام درج کریں",
        "yourpassword": "کلمۂ شناخت",
+       "userlogin-yourpassword": "کلمۂ شناخت",
+       "userlogin-yourpassword-ph": "اپنا کلمہ شناخت دیں",
        "createacct-yourpassword-ph": "ایک پاس ورڈ داخل کریں",
        "yourpasswordagain": "کلمۂ شناخت دوبارہ لکھیں",
        "createacct-yourpasswordagain": "کلمۂ اجازت تصدیق کریں",
        "createacct-yourpasswordagain-ph": "پاس ورڈ پھر داخل کریں",
        "remembermypassword": "اِس متصفح پر میرے داخلِ نوشتگی معلومات یاد رکھو (زیادہ سے زیادہ $1 {{PLURAL:$1|دِن|ایام}} کیلئے)",
+       "userlogin-remembermypassword": "مجھے داخل رکھے",
        "yourdomainname": "آپکا ڈومین",
        "password-change-forbidden": "آپ اس ویکی پر پارلفظ (پاس روڈ) تبدیل نہیں کر سکتے",
        "externaldberror": "یا تو توثیقی ڈیٹابیس میں خطا واقع ہوئی اور یا آپ کو بیرونی کھاتہ بتاریخ کرنے کی اِجازت نہیں ہے.",
        "logout": "اخراج",
        "userlogout": "خارج ہوجائیں",
        "notloggedin": "داخلہ نہیں ہوا",
+       "userlogin-noaccount": "کیا آپ نے کھاتہ نہیں بنایا ہوا؟",
+       "userlogin-joinproject": "منسلک ہو {{SITENAME}} سے",
        "nologin": "کیا آپ نے کھاتہ نہیں بنایا ہوا؟ '''$1'''۔",
        "nologinlink": "کھاتا بنائیں",
        "createaccount": "کھاتہ کھولیں",
        "gotaccount": "پہلے سے کھاتہ بنا ہوا ہے? '''$1'''.",
        "gotaccountlink": "داخل ہوجائیے",
        "userlogin-resetlink": "داخلِ نوشتہ ہونے کی تفاصیل بھول گئے ہیں؟",
+       "userlogin-resetpassword-link": "کلمہ شناخت بھول گئے؟",
        "createacct-emailrequired": "ای میل پتہ",
        "createacct-emailoptional": "ای میل ایڈریس (اختیاری)",
        "createacct-email-ph": "اپنا برقی پتہ لکھیں",
        "createacct-reason": "وجہ",
        "createacct-captcha": "حفاظتی تدبیر",
        "createacct-imgcaptcha-ph": "آپ اوپر دیکھ متن داخل کریں",
+       "createacct-submit": "آپ کا کھاتا بنائیں",
        "createacct-benefit-heading": "{{SITENAME}} آپ جیسے لوگوں کی طرف سے بنایا گیا ہے ۔",
        "createacct-benefit-body1": "ترمیم",
-       "createacct-benefit-body2": "صفحات",
+       "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحہ|صفحات}}",
        "createacct-benefit-body3": "شرکت کرنے والے اس ماہ کے",
        "badretype": "درج شدہ کلمۂ شناخت اصل سے مطابقت نہیں رکھتا۔",
        "userexists": "داخل کردہ اسم صارف پہلے سے مستعمل ہے۔\nبراہِ کرم! کوئی دوسرا اسم منتخب کیجئے۔",
        "createaccount-text": "کسی نے {{SITENAME}} ($4) پر \"$2\" کے نام سے اور \"$3\" پارلفظ کے ساتھ آپ کا برقی پتہ استعمال کرتے ہوئے کھاتہ بنایا ہے.\nآپ کو چاہئے کہ ابھی داخلِ نوشتہ ہوکر اپنا پارلفظ تبدیل کردیں.\n\nاگر یہ کھاتہ غلطی سے بنا تھا تو آپ یہ پیغام نظرانداز کرسکتے ہیں.",
        "login-throttled": "آپ نے داخلِ نوشتہ ہونے کیلئے بہت زیادہ حالیہ کوششیں کیں.\nدوبارہ کوشش کرنے سے پہلے انتظار فرمائیے.",
        "loginlanguagelabel": "زبان: $1",
+       "pt-login": "داخل ہوجائیے",
+       "pt-login-button": "داخل ہو",
+       "pt-createaccount": "کھاتا بنائیں",
+       "pt-userlogout": "خارج ہوجائیں",
        "user-mail-no-addy": "برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ",
        "changepassword": "کلمۂ شناخت تبدیل کریں",
        "resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز کے ساتھ داخل ہوئے ہیں.\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ متعین کرنا ہوگا:",
        "previewnote": "'''یاد رکھیں، یہ صرف نمائش ہے ۔آپ کی ترامیم ابھی محفوظ نہیں کی گئیں۔'''",
        "session_fail_preview": "معاف کیجئے! نشست کے مواد میں خامی کی وجہ سے آپکی  ترمیم پر عمل نہیں کیا جاسکا.\nبرائے مہربانی دوبارہ کوشش کیجئے.\nاگر آپکو پھر بھی مشکل پیش آرہی ہے تو [[Special:UserLogout|خارجِ نوشتہ]] ہوکر واپس داخلِ نوشتہ ہوجایئے.",
        "editing": "آپ \"$1\" میں ترمیم کر رہے ہیں۔",
+       "creating": "زیر تخلیق $1",
        "editingsection": "$1 کے قطعہ کی تدوین",
        "editingcomment": "زیرترمیم $1 (تبصرہ)",
        "editconflict": "تنازعہ ترمیم:$1",
        "shown-title": "فی صفحہ $1 {{PLURAL:$1|نتیجہ|نتائج}} دِکھاؤ",
        "viewprevnext": "دیکھیں($1 {{int:pipe-separator}} $2) ($3)۔",
        "searchmenu-exists": "'''اِس ویکی پر \"[[:$1]]\" نامی ایک صفحہ موجود ہے'''",
-       "searchmenu-new": "'''اِس ویکی پر صفحہ \"[[:$1]]\" تخلیق کیجئے!'''",
+       "searchmenu-new": "<strong>صفحہ \"[[:$1]]\" کو اس ویکی پر تخلیق کریں</strong> {{PLURAL:$2|0=|وہ صفحہ بھی دیکھے جو ٓپ کے تلاش میں پایا گیا|ان نتائج کو بھی دیکھے جو پائے گئے}}",
        "searchprofile-articles": "مشمولاتی صفحات",
        "searchprofile-images": "کثیرالوسیط",
        "searchprofile-everything": "سب کچھ",
        "rightslogtext": "یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔",
        "action-edit": "اس صفحہ میں ترمیم کریں",
        "nchanges": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
+       "enhancedrc-history": "تاریخچہ",
        "recentchanges": "حالیہ تبدیلیاں",
        "recentchanges-legend": "اِختیاراتِ حالیہ تبدیلیاں",
        "recentchanges-summary": "اس صفحے پر ویکی میں ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کیجیۓ۔",
        "recentchanges-label-minor": "یہ ایک معمولی ترمیم ہے",
        "recentchanges-label-bot": "یہ ایک روبالہ سے سرانجام شدہ ترمیم ہے",
        "recentchanges-label-unpatrolled": "اس ترمیم کی اب تک مراجعت نہیں کی گئی",
+       "recentchanges-label-plusminus": "صفحہ کا حجم تبدیل شدہ بلحاظ بائٹ مقدار",
        "rcnotefrom": "ذیل میں '''$2''' سے کی گئی تبدیلیاں ہیں ('''$1''' تبدیلیاں دکھائی جارہی ہیں)۔",
        "rclistfrom": "$3 $2 سےنئی تبدیلیاں دکھانا شروع کریں",
        "rcshowhideminor": "معمولی ترامیم $1",
+       "rcshowhideminor-show": "دکھائیں",
+       "rcshowhideminor-hide": "چھپائیں",
        "rcshowhidebots": "خودکار صارف $1",
+       "rcshowhidebots-show": "دکھائیں",
+       "rcshowhidebots-hide": "چھپائیں",
        "rcshowhideliu": "داخل شدہ صارف $1",
        "rcshowhideliu-show": "دکھاؤ",
        "rcshowhideliu-hide": "چھپائیں",
        "recentchangeslinked-feed": "متعلقہ تبدیلیاں",
        "recentchangeslinked-toolbox": "متعلقہ تبدیلیاں",
        "recentchangeslinked-title": "\"$1\" سے متعلقہ تبدیلیاں",
-       "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیںـ \n\n[[SpecialWatchlist | آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
+       "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیںـ \n\n[[Special:Watchlist | آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
        "recentchangeslinked-page": "صفحۂ منصوبہ دیکھئے",
        "upload": "فائل اثقال",
        "uploadbtn": "زبراثقال ملف (اپ لوڈ فائل)",
        "watchthisupload": "یہ صفحہ زیر نظر کریں",
        "license": "اجازہ:",
        "license-header": "اجازہ کاری",
+       "imgfile": "ملف",
        "listfiles": "فہرست فائل",
        "listfiles_date": "تاریخ",
        "listfiles_name": "نام",
        "imagelinks": "ملف کا استعمال",
        "linkstoimage": "اِس ملف کے ساتھ درج ذیل {{PLURAL:$1|صفحہ مربوط ہے|$1 صفحات مربوط ہیں}}",
        "nolinkstoimage": "ایسے کوئی صفحات نہیں جو اس ملف (فائل) سے رابطہ رکھتے ہوں۔",
+       "upload-disallowed-here": "آپ اوپر چھڑا کر اس ملف کو نہیں لکھ سکتے۔",
        "filedelete-comment": "وجہ:",
        "filedelete-submit": "حذف کریں",
        "filedelete-success": " (\"اقدام مکمل ہوا\")۔",
        "undeletecomment": "وجہ:",
        "namespace": "جاۓ نام:",
        "invert": "انتخاب بالعکس",
+       "namespace_association": "متعلقہ فضا",
        "blanknamespace": "(مرکز)",
-       "contributions": "صارف کا حصہ",
+       "contributions": "{{جنس:$1|صارف}} شراکتیں",
        "contributions-title": "مساہماتِ صارف برائے $1",
        "mycontris": "میرا حصہ",
        "contribsub2": "براۓ $1 ($2)",
        "tooltip-pt-mycontris": "آپ کی شراکت کی فہرست",
        "tooltip-pt-login": "آپ کیلئے داخلِ نوشتہ ہونا اچھا ہے؛ تاہم، یہ ضروری نہیں",
        "tooltip-pt-logout": "خارجِ نوشتہ ہوجائیں",
+       "tooltip-pt-createaccount": "آپ کو مدعو کیا جاتا ہے کہ کھاتہ بنائیں۔تاہم کھاتہ بنانا لازم نہیں۔",
        "tooltip-ca-talk": "مضمون بارے تبادلۂ خیال",
        "tooltip-ca-edit": "آپ اس صفحہ میں ترمیم کرسکتے ہیں.\nبرائے مہربانی! اپنی ترمیمات محفوظ کرنے سے پہلے نمائش کا بٹن استعمال کیجئے",
        "tooltip-ca-addsection": "نیا قطعہ شروع کیجئے",
        "tooltip-search-fulltext": "اس متن کیلئے صفحات تلاش کریں",
        "tooltip-p-logo": "سرورق پر جائیے",
        "tooltip-n-mainpage": "اصل صفحہ پر جائیے",
-       "tooltip-n-mainpage-description": "اصÙ\84 ØµÙ\81Ø­Û\81 پر جائیے",
+       "tooltip-n-mainpage-description": "صÙ\81Ø­Û\81 Ø§Ù\88Ù\84 پر جائیے",
        "tooltip-n-portal": "منصوبہ کے متعلق، آپ کیا کرسکتے ہیں، چیزیں کہاں ڈھونڈنی ہیں",
        "tooltip-n-currentevents": "حالیہ واقعات پر پس منظری معلومات دیکھیئے",
        "tooltip-n-recentchanges": "ویکی میں حالیہ تبدیلیوں کی فہرست",
        "tooltip-summary": "مختصر خلاصہ درج کریں",
        "anonymous": "{{SITENAME}} گمنام صارف",
        "others": "دیگر",
+       "pageinfo-toolboxlink": "معلومات صفحہ",
        "markaspatrolledtext": "اس صفحہ کو بطور مراجعت شدہ نشان زد کریں",
        "deletedrevision": "حذف شدہ پرانی ترمیم $1۔",
        "previousdiff": "← پُرانی تدوین",
        "nextdiff": "صفحہ کا نام:",
        "file-info-size": "\n$1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4",
        "file-nohires": "اس سے بڑی تصمیم دستیاب نہیں۔",
-       "show-big-image": "مکمل تصمیم",
+       "show-big-image": "اصل ملف",
+       "show-big-image-preview": "اس نمائش کا حجم:$1",
+       "show-big-image-size": "$1 × $2 pixels",
        "newimages": "نئی فائلوں کی گیلری",
        "ilsubmit": "تلاش",
        "bydate": "بالحاظ تاریخ",
        "bad_image_list": "شکلبند درج ذیل ہے:\n\nصرف فہرستی عناصر (* سے شروع ہونے والی لکیری) شامل کی جاتی ہیں۔\nکسی لکیر میں پہلا ربط کوئی خراب ملف کا ہونا چاہئے۔\nاُسی لکیر میں باقی آنے والے ربط کو مستثنیٰ قرار دیا جاتا ہے، مثلاً صفحات جہاں ملف لکیر کے وسط میں آسکتا ہے۔",
        "metadata": "میٹا ڈیٹا",
        "metadata-collapse": "طویل تفاصیل چھپاؤ",
+       "exif-orientation": "پیشکش",
+       "exif-xresolution": "چھوڑاوی دکھاوت",
+       "exif-yresolution": "لمباوی دکھاوت",
+       "exif-datetime": "ملف کے تبدیلی کا تاریخ او وقت",
+       "exif-make": "کیمرے کا صانع",
+       "exif-model": "کیمرے کا ماڈل",
+       "exif-software": "سافٹویئر استعمال",
+       "exif-exifversion": "اکزیف ورژن",
+       "exif-datetimeoriginal": "ڈیٹا بنانے کا تاریخ اور وقت",
+       "exif-datetimedigitized": "معددی کا تاریخ اور وقت",
+       "exif-orientation-1": "عام",
        "exif-meteringmode-0": "نامعلوم",
        "namespacesall": "تمام",
        "monthsall": "تمام",
        "hijri-calendar-m12": "ذوالحجہ",
        "version": "ورژن",
        "specialpages": "خصوصی صفحات",
+       "tag-filter": "[[Special:Tags|لوحہ]] فلٹر:",
+       "logentry-delete-delete": "$1 {{GENDER:$2|حذف کیا گیا}} صفحہ $3",
        "rightsnone": "(کچھ نہیں)",
        "revdelete-summary": "خلاصۂ تدوین",
        "searchsuggest-search": "تلاش",
index 244f3e7..5b0e2d1 100644 (file)
        "history-feed-title": "Oʻzgarishlar tarixi",
        "history-feed-description": "Vikidagi mazkur sahifaning oʻzgarishlar tarixi",
        "history-feed-item-nocomment": "$1 $2 da",
-       "rev-deleted-comment": "(tahrir izohi o'chirildi)",
+       "rev-deleted-comment": "(tahrir izohi oʻchirilgan)",
        "rev-deleted-user": "(muallif nomi oʻchirilgan)",
        "rev-deleted-event": "(jurnal tafsilotlari o‘chirildi)",
        "rev-delundel": "koʻrsatish/yashirish",
index cb5406e..ff5b0ce 100644 (file)
        "thumbnail_gd-library": "אומפולשטענדיקע קאנפיגוראציע פאר דער GD-ביבליאטעק: פונקציע $1 פעלט",
        "thumbnail_image-missing": "טעקע פֿעלט אייגנטלעך: $1",
        "import": "אימפארטירן בלעטער",
-       "importinterwiki": "×\90ר×\99×\91ער×\95×\95×\99ק×\99 ×\90×\99×\9eפ×\90ר×\98",
-       "import-interwiki-text": "ק×\9c×\95×\99×\91×\98 ×\90×\95×\99ס ×\90 ×\95×\95×\99ק×\99 ×\90×\95×\9f ×\90×\9f ×\90ר×\98×\99ק×\9c ×§×¢×¤×\9c ×¦×\95 ×\90×\99×\9eפ×\90ר×\98×\99ר×\9f.\n×\93×\99 ×\93×\90×\98עס ×\90×\95×\9f ×\93×\99 × ×¢×\9e×¢×\9f ×¤×\95×\9f ×\93×\99 ×¨×¢×\93×\90ק×\98×\90ר×\9f ×\95×\95×¢×\98 ×\95×\95ער×\9f ×\92×¢×\94×\99×\98×\9f.\n×\90×\9c×¢ ×¦×\95×\95×\99שנ×\95×\95×\99ק×\99 ×\90×\99×\9eפ×\90ר×\98 ×\90קצ×\99×¢ס ווערן פארשריבן אינעם   [[Special:Log/import|אימפארט לאג]].",
+       "importinterwiki": "×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×¤Ö¿×\95×\9f ×\90Ö·×\9f ×\90Ö·× ×\93ער ×\95×\95×\99ק×\99",
+       "import-interwiki-text": "ק×\9c×\95×\99×\91×\98 ×\90×\95×\99ס ×\90 ×\95×\95×\99ק×\99 ×\90×\95×\9f ×\90×\9f ×\90ר×\98×\99ק×\9c ×§×¢×¤×\9c ×¦×\95 ×\90×\99×\9eפ×\90ר×\98×\99ר×\9f.\n×\93×\99 ×\93×\90×\98עס ×\90×\95×\9f ×\93×\99 × ×¢×\9e×¢×\9f ×¤×\95×\9f ×\93×\99 ×¨×¢×\93×\90ק×\98×\90ר×\9f ×\95×\95×¢×\98 ×\95×\95ער×\9f ×\92×¢×\94×\99×\98×\9f.\n×\90×\9c×¢ ×\90×\99×\9eפ×\90ר×\98×\9f ×¤×\95×\9f ×\90× ×\93ערע ×\95×\95×\99ק×\99ס ווערן פארשריבן אינעם   [[Special:Log/import|אימפארט לאג]].",
        "import-interwiki-sourcewiki": "מקור וויקי:",
        "import-interwiki-sourcepage": "מקור בלאַט:",
        "import-interwiki-history": "קאפירן אלע היסטאריע ווערסיעס פאר דעם בלאט",
        "importcantopen": "נישט געקענט עפֿענען אימפארט טעקע",
        "importbadinterwiki": "שלעכטע אינטערוויקי לינק",
        "importsuccess": "!אימפארט אדורכגעפירט מיט דערפאלג!",
-       "importnosources": "ק×\99×\99×\9f ×\9eק×\95ר×\95ת ×¤Ö¿×\90ַר ×¦×\95×\95×\99ש×\9fÖ¾×\95×\95×\99ק×\99 ×\90×\99×\9eפ×\90רט, און דירעקט היסטאריע אַרויפֿלאָדן איז נישט דערמעגלעכט אַצינד.",
+       "importnosources": "ק×\99×\99×\9f ×\95×\95×\99ק×\99ס ×¤Ö¿×\95×\9f ×\95×\95×¢×\9e×¢×\9f ×¦×\95 ×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×\96×¢× ×¢×\9f ×\93עפ×\99× ×\99רט, און דירעקט היסטאריע אַרויפֿלאָדן איז נישט דערמעגלעכט אַצינד.",
        "importnofile": "קיין אימפארט טעקע איז נישט ארויפֿגעלאדן.",
        "importuploaderrorsize": "אַרויפֿלאָדן פֿון אימפארט טעקע דורכגעפֿאלן.\nדי טעקע איז גרעסער פֿון דער דערלויבטער אַרויפֿלאָדן גרייס.",
        "importuploaderrorpartial": "אַרויפֿלאָדן פֿון אימפארט טעקע דורכגעפֿאלן.\nדי טעקע איז נאר טיילווייז אַרויפֿגעלאָדן.",
        "tooltip-pt-mycontris": "ליסטע פון אייערע ביישטייערונגען",
        "tooltip-pt-login": "עס איז רעקאָמענדירט זיך אײַנשרײַבן; ס'איז אבער נישט קיין פֿליכט",
        "tooltip-pt-logout": "ארויסלאגירן",
+       "tooltip-pt-createaccount": "איר ווערט דערמוטיגט צו שאפן א קאנטע און אריינלאגירן; ס'איז אביר נישט אבליגאטאריש",
        "tooltip-ca-talk": "שמועס וועגן דעם אינהאַלט בלאַט",
        "tooltip-ca-edit": "איר קענט ענדערן דעם בלאט. ביטע באניצט דעם ''פֿארויסקוק'' קנעפל בעפֿארן אפהיטן",
        "tooltip-ca-addsection": "אָנהייבן א נײַע אָפטיילונג",
index 42d4ba1..285afdf 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "NJ",
                        "Ooswesthoesbes",
-                       "아라"
+                       "아라",
+                       "Robin0van0der0vliet"
                ]
        },
        "tog-underline": "Lienks onderstreepn:",
        "cancel": "Afbreke",
        "moredotdotdot": "Meêr …",
        "mypage": "Mien gebrukerspagina",
-       "mytalk": "Mien overleg",
+       "mytalk": "Overleg",
        "anontalk": "Discussie vò dit IP-adres",
        "navigation": "Navigaotie",
        "and": "&#32;en",
        "titleprotected": "'t Anmaeken van deêze pagina is beveiligd deur [[User:$1|$1]].\nDe heheven reeën is ''$2''.",
        "logouttext": "'''Je bin noe ofemeld.'''\n\nJe kan {{SITENAME}} noe anoniem gebruken of wee anmelden as dezelven of een aore gebruker.\nMeuhlijk worn nog een antal pagina's weereheven asof a je anemeld bin totda je de cache van je browser leeg.",
        "yourname": "Gebrukersnaem",
+       "userlogin-yourname": "Gebrukersnaem",
        "yourpassword": "Wachtwoôrd",
+       "userlogin-yourpassword": "Wachtwoôrd",
        "yourpasswordagain": "Heef je wachtwoôrd opnieuw in:",
        "remembermypassword": "Anmeldhehevens ontouwen (maximaal $1 {{PLURAL:$1|dag|daege}})",
        "yourdomainname": "Je domein:",
        "createaccount-title": "Gebrukers anmaeken voe {{SITENAME}}",
        "createaccount-text": "Iemand ei een gebruker op {{SITENAME}} ($4) anemikt mie de naem \"$2\" en joen e-mailadres. 't Wachtwoôrd voe \"$2\" is \"$3\". Mel jen eihen an en wiezig je wachtwoôrd.\n\nNeheer dit bericht as deêze gebruker zonder joe medeweten is anemikt.",
        "loginlanguagelabel": "Taele: $1",
+       "pt-login": "Anmelden",
+       "pt-login-button": "Anmelden",
+       "pt-userlogout": "Ofmelden",
        "changepassword": "Wachtwoôrd wiezigen",
        "resetpass_announce": "Je bin anemeld mie een tiedelijke code die a je per e-mail is toe-ezon'n. Voer een nieuw wachtwoôrd in om 't anmelden te voltooien:",
        "resetpass_header": "Wachtwoôrd herinstell'n",
        "search-external": "Extern zoeken",
        "searchdisabled": "Zoeken in {{SITENAME}} is nie meuhlijk.\nJe kan gebruuk maeken van Google.\nDe hehevens over {{SITENAME}} zien meuhlijk nie bie'ewerkt.",
        "preferences": "Vòkeuren",
-       "mypreferences": "Mien vòkeuren",
+       "mypreferences": "Vòkeuren",
        "prefs-edits": "Antal bewerkiengen:",
        "prefs-skin": "Vurmhevieng",
        "skin-preview": "Voevertoônienge",
        "watchthisupload": "Volg deêze bladzie",
        "license": "Licentie:",
        "license-header": "Licentie",
+       "imgfile": "bestand",
        "file-anchor-link": "Bestand",
        "filehist": "Bestandsgeschiedenisse",
        "filehist-help": "Klik op 'n datum/tied om 't bestand te zien zoas 't van d'r tied woas.",
        "emailuser": "E-mail deêze gebruker",
        "emailpage": "E-mail gebruker",
        "watchlist": "Volglieste",
-       "mywatchlist": "Mien volglieste",
+       "mywatchlist": "Volglieste",
        "watchlistfor2": "Vò $1 $2",
        "watchnologin": "Je bin nie angemolde.",
        "addedwatchtext": "De bladzie \"[[:$1]]\" is an je [[Special:Watchlist|Volglieste]] toegevoegd.\nVeranderiengen an deêze bladzie en de overlegbladzie die-a d'rbie oort zulle ierop zichtbaer ore\nen de bladzie komt '''vet''' te staen in de [[Special:RecentChanges|lieste van wat-a juust veranderd is]], daermee 't makkeliker te vinden is.\nA je de bladzie laeter weêr van je volglieste afaele wil, klik dan op \"nie meêr volge\" bovenan de bladzie.",
        "blanknamespace": "(Artikels)",
        "contributions": "Biedraegen gebruker",
        "contributions-title": "Biedraen van $1",
-       "mycontris": "Mien biedraegen",
+       "mycontris": "Biedraegen",
        "contribsub2": "Vò $1 ($2)",
        "uctop": "(laetste wiezigieng)",
        "month": "Von maend (en eêder):",
        "file-nohires": "Hin 'oôgere resolutie beschikbaer",
        "svg-long-desc": "SVG-bestand, nominaal $1 × $2 pixels, bestandshroôtte: $3",
        "show-big-image": "Volledige resolutie",
+       "show-big-image-size": "$1 × $2 pixels",
        "bad_image_list": "De opmaek is as vogt:\n\nAlleên regels in 'n lieste (regels die beginn'n mè *) worr'n verwarkt.\nDe eêste verwiezienge op 'n regel moe 'n verwiezienge zin nir 'n ongewenst bestand.\nAolle voggende verwieziengen die op dezelfde regel staen, worr'n behandeld as uutzonderienge, zoas bievòbild pagina's wirop 't bestand in de tekst is opgenaem'n.",
        "metadata": "Metadata",
        "metadata-help": "Dit bestand bevat anvullende informaotie, die deur 'n fotocaomera, scanner of fotobewarkiengsprogramma toegevoegd kan zien. As 't bestand angepast is, kommen details mogelijk nie overeên mei 't gewiezigde bestand.",
        "revdelete-restricted": "ei beperkiengen an beheêrders opeleid",
        "revdelete-unrestricted": "ei beperkiengen voe beheêrders opeheven",
        "rightsnone": "(hin)",
-       "revdelete-summary": "saemenvattieng bewerken"
+       "revdelete-summary": "saemenvattieng bewerken",
+       "searchsuggest-search": "Zoek"
 }
index 4fd4e91..15ad4c8 100644 (file)
@@ -80,7 +80,8 @@
                        "Duolaimi",
                        "TianyinLee",
                        "NigelSoft",
-                       "Zhuyifei1999"
+                       "Zhuyifei1999",
+                       "Davidzdh"
                ]
        },
        "tog-underline": "链接下划线:",
        "readonly_lag": "附属数据库服务器正在将缓存更新到主服务器上,数据库已被自动锁定",
        "internalerror": "内部错误",
        "internalerror_info": "内部错误:$1",
+       "internalerror-fatal-exception": "类型“$1”的致命错误",
        "filecopyerror": "无法将文件“$1”复制到“$2”。",
        "filerenameerror": "无法将文件“$1”重命名为“$2”。",
        "filedeleteerror": "无法删除文件“$1”。",
        "showpreview": "显示预览",
        "showdiff": "显示更改",
        "blankarticle": "<strong>警告</strong>:您创建的页面是空白的。如果您再次点击“{{int:savearticle}}”,您将真的创建没有任何内容的页面。",
-       "anoneditwarning": "<strong>警告:</strong>您没有登录。您做出任何编辑后您的IP地址会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 注册]</strong>一个账户,您的编辑将归属于您的用户名,以及有其他好处。",
+       "anoneditwarning": "<strong>警告:</strong>您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 创建]</strong>一个账户,您的编辑将归属于您的用户名,且将享受其他好处。",
        "anonpreviewwarning": "<em>你没有登录。保存会记录你的IP地址于该页面的编辑历史中。</em>",
        "missingsummary": "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
        "selfredirect": "<strong>警告:</strong>您正在将此页面重定向至它自己。\n您可能指定了错误的重定向目标,或者您正在编辑错误的页面。\n如果您再次点击“{{int:savearticle}}”,重定向将无论如何被创建。",
        "number_of_watching_users_pageview": "[$1个关注用户]",
        "rc_categories": "分类限制(用“|”分隔)",
        "rc_categories_any": "任意",
-       "rc-change-size-new": "更改后$1字节",
+       "rc-change-size-new": "更改后$1字节",
        "newsectionsummary": "/* $1 */ 新段落",
        "rc-enhanced-expand": "显示细节",
        "rc-enhanced-hide": "隐藏细节",
        "unusedimages": "未使用文件",
        "wantedcategories": "需要的分类",
        "wantedpages": "需要的页面",
+       "wantedpages-summary": "被链接最多次的不存在页面的列表,除了只链接到这些页面的重定向页面。关于链接到不存在页面的重定向页面列表,参见[[{{#special:BrokenRedirects}}]]。",
        "wantedpages-badtitle": "在结果组上的无效标题:$1",
        "wantedfiles": "需要的文件",
        "wantedfiletext-cat": "以下文件被使用,但并不存在。来自外部库的文件即使存在也可能被列出。任何这类误报会用<del>删除线</del>标记。另外,插入不存在的文件的页面列于[[:$1]]。",
        "thumbnail_image-missing": "文件可能丢失:$1",
        "thumbnail_image-failure-limit": "近期尝试生成此缩略图失败太多次($1次或更多)。请稍后再试。",
        "import": "导入页面",
-       "importinterwiki": "wiki导入",
-       "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。",
+       "importinterwiki": "从其他wiki导入",
+       "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有从其他wiki的导入都记录在[[Special:Log/import|导入日志]]中。",
        "import-interwiki-sourcewiki": "来源wiki:",
        "import-interwiki-sourcepage": "来源页面:",
        "import-interwiki-history": "复制此页的所有历史版本",
        "importcantopen": "无法打开导入文件",
        "importbadinterwiki": "无效的跨wiki链接",
        "importsuccess": "导入完成!",
-       "importnosources": "跨Wiki导入源没有定义,同时不允许直接的历史上传。",
+       "importnosources": "没有定义导入的来源wiki,且直接的历史上传被禁用。",
        "importnofile": "没有上传导入文件。",
        "importuploaderrorsize": "上传导入文件失败。文件大于可以允许的上传大小。",
        "importuploaderrorpartial": "上传导入文件失败。文件只有部份已经上传。",
        "tooltip-pt-preferences": "你的设置",
        "tooltip-pt-watchlist": "你正在监视更改的页面的列表",
        "tooltip-pt-mycontris": "你的贡献的列表",
-       "tooltip-pt-login": "我们鼓励您登录,不过这不是强制的",
+       "tooltip-pt-login": "建议您登录,但并非强制",
        "tooltip-pt-logout": "退出登录",
-       "tooltip-pt-createaccount": "我们鼓励您创建一个账户并登录;然而这不是强制的",
+       "tooltip-pt-createaccount": "建议您创建一个账户并登录,但这不是强制的",
        "tooltip-ca-talk": "关于内容页面的讨论",
        "tooltip-ca-edit": "你可以编辑本页面。请在保存前使用预览按钮",
        "tooltip-ca-addsection": "开始新段落",
        "tooltip-ca-delete": "删除本页",
        "tooltip-ca-undelete": "将这个页面恢复到被删除以前的状态",
        "tooltip-ca-move": "移动本页",
-       "tooltip-ca-watch": "添加本页面至您的监视列表",
+       "tooltip-ca-watch": "将本页面添加至您的监视列表",
        "tooltip-ca-unwatch": "从你的监视列表删除本页面",
        "tooltip-search": "搜索{{SITENAME}}",
-       "tooltip-search-go": "如果相同的标题存在的话便直接前往该页面",
+       "tooltip-search-go": "若相同标题存在,则直接前往该页面",
        "tooltip-search-fulltext": "搜索含这些文字的页面",
        "tooltip-p-logo": "访问首页",
        "tooltip-n-mainpage": "访问首页",
        "tooltip-n-mainpage-description": "访问首页",
-       "tooltip-n-portal": "关于本项目,你可以做什么,在哪里找到你需要的事物",
+       "tooltip-n-portal": "关于本项目,你可做的事,何处找到你所需",
        "tooltip-n-currentevents": "查看当前事件的背景信息",
        "tooltip-n-recentchanges": "本wiki最近更改的列表",
        "tooltip-n-randompage": "载入一个随机页面",
        "tooltip-watchlistedit-raw-submit": "更新监视列表",
        "tooltip-recreate": "重建该页面,无论是否被删除。",
        "tooltip-upload": "开始上传",
-       "tooltip-rollback": "单击“回退”恢复最后贡献者对该页面的编辑",
+       "tooltip-rollback": "单击“回退”恢复最后一位贡献者对该页面的编辑",
        "tooltip-undo": "“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。",
        "tooltip-preferences-save": "保存系统设置",
        "tooltip-summary": "请输入简短的摘要",
        "revdelete-uname-unhid": "公开用户名",
        "revdelete-restricted": "应用对管理员的限制",
        "revdelete-unrestricted": "删除对管理员的限制",
+       "logentry-block-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6",
+       "logentry-block-unblock": "$1{{GENDER:$2|解封了}}{{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1将{{GENDER:$4|$3}}的封禁设置{{GENDER:$2|更改为}}持续时间$5 $6",
+       "logentry-suppress-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6",
+       "logentry-suppress-reblock": "$1将{{GENDER:$4|$3}}的封禁设置{{GENDER:$2|更改为}}持续时间$5 $6",
        "logentry-merge-merge": "$1将$3{{GENDER:$2|合并}}至$4(修订版本至$5)",
        "logentry-move-move": "$1{{GENDER:$2|移动}}页面$3至$4",
        "logentry-move-move-noredirect": "$1{{GENDER:$2|移动}}页面$3至$4,不留重定向",
index bed7c68..e88450d 100644 (file)
        "history_short": "歷史",
        "updatedmarker": "自我最後一次訪問以後的更新",
        "printableversion": "可列印版",
-       "permalink": "靜態連結",
+       "permalink": "永久連結",
        "print": "列印",
        "view": "檢視",
        "view-foreign": "用 $1 檢視",
        "userlogin-loggedin": "您目前已登入 {{GENDER:$1|$1}} 使用者,\n請使用下列表單改登入另一位使用者。",
        "userlogin-createanother": "建立另一個帳號",
        "createacct-emailrequired": "電子郵件位址",
-       "createacct-emailoptional": "電子郵件位址 (選填)",
-       "createacct-email-ph": "輸入您的電子郵件址",
+       "createacct-emailoptional": "電子郵件地址(選填)",
+       "createacct-email-ph": "輸入您的電子郵件址",
        "createacct-another-email-ph": "輸入電子郵件位址",
        "createaccountmail": "使用臨時的隨機密碼,並將它傳送到指定的電子郵件位址",
        "createacct-realname": "真實姓名 (選填)",
        "templatesused": "此頁面使用了以下{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "此預覽使用了以下{{PLURAL:$1|模板}}:",
        "templatesusedsection": "此頁面使用了以下 {{PLURAL:$1|模板}} :",
-       "template-protected": "(受保護)",
-       "template-semiprotected": "(受半保護)",
+       "template-protected": "(受保護)",
+       "template-semiprotected": "(受半保護)",
        "hiddencategories": "此頁面屬於 {{PLURAL:$1|1 個隱藏分類|$1 個隱藏分類}}的成員:",
        "edittools": "<!-- 此處的文字將被顯示在編輯和上傳表單以下。 -->",
        "nocreatetext": "{{SITENAME}} 已限制建立新頁面的功能。 {{GENDER:|你|妳|你}}可返回並編輯既有的頁面,或者 [[Special:UserLogin|登入或建立新帳號]]。",
        "revertmerge": "取消合併",
        "mergelogpagetext": "以下是最近合併頁面歷史的清單。",
        "history-title": "\"$1\" 的修訂歷史",
-       "difference-title": "$1:修訂間的差異",
+       "difference-title": "「$1」的修訂間的差異",
        "difference-title-multipage": "頁面 \"$1\" 與 \"$2\" 間的差異",
        "difference-multipage": "(頁面間的差異)",
        "lineno": "行 $1:",
        "diff-multi-manyusers": "(未顯示由超過 $2 位使用者於中間所作的 $1 次修訂)",
        "difference-missing-revision": "查無此差異 ($1) 中的{{PLURAL:$2|1 次修訂|$2 次修訂}}。\n\n這通常是因為差異的連結過時,頁面已被刪除。\n詳情資訊請參閱 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "searchresults": "搜尋結果",
-       "searchresults-title": "\"$1\" 的搜尋結果",
+       "searchresults-title": "「$1」的搜尋結果",
        "titlematches": "頁面標題符合",
        "textmatches": "頁面內容符合",
        "notextmatches": "沒有符合的頁面內容",
        "searchprofile-advanced": "進階",
        "searchprofile-articles-tooltip": "在 $1 中搜尋",
        "searchprofile-images-tooltip": "搜尋檔案",
-       "searchprofile-everything-tooltip": "搜尋所有內容 (包含對話頁面)",
+       "searchprofile-everything-tooltip": "搜尋所有內容(包含對話頁面)",
        "searchprofile-advanced-tooltip": "搜尋自訂命名空間",
-       "search-result-size": "$1 ($2 個字)",
+       "search-result-size": "$1 ({{PLURAL:$2|1 個字|$2 個字}})",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
        "search-redirect": "(重新導向自 $1)",
        "search-section": "(章節 $1)",
        "recentchanges-summary": "追蹤 Wiki 中此頁面的近期變更。",
        "recentchanges-noresult": "於指定時間內沒有符合條件的變更。",
        "recentchanges-feed-description": "追蹤 Wiki 中此訂閱來源的近期變更。",
-       "recentchanges-label-newpage": "該編輯建立新頁面",
+       "recentchanges-label-newpage": "該編輯建立新頁面",
        "recentchanges-label-minor": "該編輯是一個小修訂",
        "recentchanges-label-bot": "該編輯由機器人執行",
        "recentchanges-label-unpatrolled": "該編輯尚未巡查",
        "rcshowhideliu": "$1 已註冊的使用者",
        "rcshowhideliu-show": "顯示",
        "rcshowhideliu-hide": "隱藏",
-       "rcshowhideanons": "$1 匿名使用者",
+       "rcshowhideanons": "$1 匿名使用者",
        "rcshowhideanons-show": "顯示",
        "rcshowhideanons-hide": "隱藏",
        "rcshowhidepatr": "$1 巡查過的編輯",
        "sp-contributions-newonly": "只顯示建立頁面的編輯",
        "sp-contributions-submit": "搜尋",
        "whatlinkshere": "連入頁面",
-       "whatlinkshere-title": "連結到 \"$1\" 的頁面",
+       "whatlinkshere-title": "連結至「$1」的頁面",
        "whatlinkshere-page": "頁面:",
        "linkshere": "以下頁面連結至 <strong>[[:$1]]</strong>:",
        "nolinkshere": "沒有頁面連結至 <strong>[[:$1]]</strong>。",
        "tooltip-watchlistedit-raw-submit": "更新監視清單",
        "tooltip-recreate": "無論是否被刪除,重新建立該頁面。",
        "tooltip-upload": "開始上傳",
-       "tooltip-rollback": "點選 \"還原\" 還原至上位貢獻者對此頁面的編輯",
+       "tooltip-rollback": "點選「還原」還原至上一位貢獻者對此頁面的編輯",
        "tooltip-undo": "\"還原\" 可還原此編輯並以預覽模式開啟編輯表單,讓您可在摘要中加入原因。",
        "tooltip-preferences-save": "儲存偏好設定",
        "tooltip-summary": "請輸入簡短摘要",
        "variantname-zh": "不轉換",
        "variantname-gan-hans": "‪中文(简体)",
        "variantname-gan-hant": "‪中文(繁體)",
-       "metadata": "後設資料",
+       "metadata": "詮釋資料",
        "metadata-help": "此檔案包含額外的資訊,可能由數位相機或掃描機所建立的。\n若修改此檔案,部份資訊將無法保留。",
        "metadata-expand": "顯示詳細資料",
        "metadata-collapse": "隱藏詳細資料",
index 457ca9a..a9dbf3a 100644 (file)
@@ -157,12 +157,12 @@ $specialPageAliases = array(
        'Specialpages'              => array( 'Махсус_битләр' ),
        'Statistics'                => array( 'Статистика' ),
        'Tags'                      => array( 'Теглар' ),
-       'Uncategorizedcategories'   => array( 'Үзләштерелмәгән__бүлекләр' ),
+       'Uncategorizedcategories'   => array( 'Үзләштерелмәгән_бүлекләр' ),
        'Uncategorizedimages'       => array( 'Үзләштерелмәгән_файллар' ),
        'Uncategorizedpages'        => array( 'Үзләштерелмәгән_битләр' ),
-       'Uncategorizedtemplates'    => array( 'Үзләштерелмәгән__үрнәкләр' ),
+       'Uncategorizedtemplates'    => array( 'Үзләштерелмәгән_үрнәкләр' ),
        'Unusedcategories'          => array( 'Кулланылмаган_төркемнәр' ),
-       'Unusedimages'              => array( 'Кулланылмаучы__файллар' ),
+       'Unusedimages'              => array( 'Кулланылмаучы_файллар' ),
        'Upload'                    => array( 'Йөкләү' ),
        'Userlogin'                 => array( 'Кулланучы_исеме' ),
        'Userlogout'                => array( 'Чыгу' ),
index 3f10a33..e20c477 100644 (file)
@@ -60,11 +60,6 @@ if ( $__useReadline ) {
        readline_read_history( $__historyFile );
 }
 
-$__phpPath = preg_match( '/Zend Engine|HipHop VM/', wfShellExecWithStderr( 'php --version' ) )
-       ? 'php' //standard system path name
-       : ''; // not accessible somehow
-
-$__multiLine = '';
 $__e = null; // PHP exception
 while ( ( $__line = Maintenance::readconsole() ) !== false ) {
        if ( $__e && !preg_match( '/^(exit|die);?$/', $__line ) ) {
@@ -79,18 +74,8 @@ while ( ( $__line = Maintenance::readconsole() ) !== false ) {
                readline_add_history( $__line );
                readline_write_history( $__historyFile );
        }
-       // Try to only run PHP once a valid chunk is formed (deals with newlines)
-       if ( $__phpPath ) {
-               $res = wfShellExecWithStderr(
-                       "echo " . wfEscapeShellArg( "<?php\n{$__multiLine}{$__line}" ) . " | php -l" );
-               if ( strpos( $res, 'No syntax errors' ) !== 0 && substr( $__multiLine, -2 ) !== "\n\n" ) {
-                       $__multiLine .= "$__line\n";
-                       continue;
-               }
-       }
        try {
-               $__val = eval( $__multiLine . $__line . ";" );
-               $__multiLine = '';
+               $__val = eval( $__line . ";" );
        } catch ( Exception $__e ) {
                echo "Caught exception " . get_class( $__e ) .
                        ": {$__e->getMessage()}\n" . $__e->getTraceAsString() . "\n";
index 0c2f722..7c85a1c 100644 (file)
@@ -262,10 +262,7 @@ class RefreshLinks extends Maintenance {
                wfWaitForSlaves();
 
                $dbw = wfGetDB( DB_MASTER );
-
-               $lb = wfGetLBFactory()->newMainLB();
-               $dbr = $lb->getConnection( DB_SLAVE );
-               $dbr->bufferResults( false );
+               $dbr = wfGetDB( DB_SLAVE );
 
                $linksTables = array( // table name => page_id field
                        'pagelinks' => 'pl_from',
@@ -282,38 +279,35 @@ class RefreshLinks extends Maintenance {
                foreach ( $linksTables as $table => $field ) {
                        $this->output( "Retrieving illegal entries from $table... " );
 
-                       // SELECT DISTINCT( $field ) FROM $table LEFT JOIN page ON $field=page_id WHERE page_id IS NULL;
-                       $results = $dbr->select(
-                               array( $table, 'page' ),
-                               $field,
-                               array( 'page_id' => null ),
-                               __METHOD__,
-                               'DISTINCT',
-                               array( 'page' => array( 'LEFT JOIN', "$field=page_id" ) )
-                       );
-
+                       $start = 0;
                        $counter = 0;
-                       $list = array();
                        $this->output( "0.." );
-                       foreach ( $results as $row ) {
-                               $counter++;
-                               $list[] = $row->$field;
-                               if ( ( $counter % $batchSize ) == 0 ) {
+
+                       do {
+                               $list = $dbr->selectFieldValues(
+                                       $table,
+                                       $field,
+                                       array(
+                                               "$field >= {$dbr->addQuotes( $start )}",
+                                               "$field NOT IN ({$dbr->selectSQLText( 'page', 'page_id' )})",
+                                       ),
+                                       __METHOD__,
+                                       array( 'DISTINCT', 'ORDER BY' => $field, 'LIMIT' => $batchSize )
+                               );
+
+                               if ( $list ) {
+                                       $counter += count( $list );
                                        wfWaitForSlaves();
                                        $dbw->delete( $table, array( $field => $list ), __METHOD__ );
-
                                        $this->output( $counter . ".." );
-                                       $list = array();
+                                       $start = $list[count( $list ) - 1] + 1;
                                }
-                       }
-                       $this->output( $counter );
-                       if ( count( $list ) > 0 ) {
-                               $dbw->delete( $table, array( $field => $list ), __METHOD__ );
-                       }
+
+                       } while ( $list );
+
                        $this->output( "\n" );
                        wfWaitForSlaves();
                }
-               $lb->closeAll();
        }
 }
 
index 3750593..965c783 100644 (file)
@@ -1110,6 +1110,10 @@ return array(
                        'metadata-collapse',
                ),
        ),
+       'mediawiki.action.view.categoryPage.styles' => array(
+               'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
+               'targets' => array( 'desktop', 'mobile' )
+       ),
        'mediawiki.action.view.postEdit' => array(
                'templates' => array(
                        'postEdit.html' => 'resources/src/mediawiki.action/templates/postEdit.html',
index cc8fdf5..ff739d7 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.8.0
+ * OOjs UI v0.8.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-02-19T01:33:21Z
+ * Date: 2015-02-27T18:02:41Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
 }
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        padding: 0.5em;
+       padding-left: 1em;
 }
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
        padding: 0.5em 0;
        padding: 0.5em 0.75em;
        line-height: 1.5em;
 }
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
+.oo-ui-fieldsetLayout + .oo-ui-formLayout {
        margin-top: 2em;
 }
 .oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
 .oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child {
        margin-right: 0;
 }
+.oo-ui-formLayout + .oo-ui-fieldsetLayout,
+.oo-ui-formLayout + .oo-ui-formLayout {
+       margin-top: 2em;
+}
 .oo-ui-gridLayout {
        position: absolute;
        top: 0;
 }
 .oo-ui-radioOptionWidget {
        cursor: default;
-       padding: 0.25em 0;
+       padding: 0;
        background-color: transparent;
 }
 .oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
 .oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted {
        background-color: transparent;
 }
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       padding: 0.25em;
+       padding-left: 1em;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget {
+       margin-right: 0;
+}
 .oo-ui-labelWidget {
        display: inline-block;
 }
 }
 .oo-ui-checkboxInputWidget input[type="checkbox"] {
        opacity: 0;
-       position: relative;
        z-index: 1;
+       position: relative;
        margin: 0;
        width: 1.6em;
        height: 1.6em;
 }
 .oo-ui-checkboxInputWidget input[type="checkbox"] + span {
        cursor: pointer;
-       margin: 0 0.2em;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"] + span::before {
        -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
           -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
            -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
             -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
                transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       content: "";
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        background-origin: border-box;
        background-size: 0 0;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span {
        background-size: 100% 100%;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span {
        background-color: #dddddd;
        border-color: #dddddd;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span {
        border-width: 2px;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span::before,
-.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span,
+.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span {
        border-bottom-width: 3px;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
        cursor: default;
        background-color: #eeeeee;
        border-color: #eeeeee;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span {
        background-image: url("themes/mediawiki/images/icons/check-invert.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
 }
 .oo-ui-radioInputWidget input[type="radio"] {
        opacity: 0;
-       position: relative;
        z-index: 1;
+       position: relative;
        margin: 0;
        width: 1.6em;
        height: 1.6em;
 }
 .oo-ui-radioInputWidget input[type="radio"] + span {
        cursor: pointer;
-       margin: 0 0.2em;
-}
-.oo-ui-radioInputWidget input[type="radio"] + span::before {
        -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
           -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
            -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
             -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
                transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       content: "";
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        background-origin: border-box;
        background-size: 0 0;
 }
-.oo-ui-radioInputWidget input[type="radio"]:checked + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:checked + span {
        background-size: 100% 100%;
 }
-.oo-ui-radioInputWidget input[type="radio"]:active + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:active + span {
        background-color: #dddddd;
        border-color: #dddddd;
 }
-.oo-ui-radioInputWidget input[type="radio"]:focus + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:focus + span {
        border-width: 2px;
 }
-.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span::before,
-.oo-ui-radioInputWidget input[type="radio"]:hover + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span,
+.oo-ui-radioInputWidget input[type="radio"]:hover + span {
        border-bottom-width: 3px;
 }
-.oo-ui-radioInputWidget input[type="radio"]:disabled + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
        cursor: default;
        background-color: #eeeeee;
        border-color: #eeeeee;
 }
-.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span {
        background-image: url("themes/mediawiki/images/icons/circle-invert.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
        top: 0;
        height: 100%;
        background-repeat: no-repeat;
-       cursor: pointer;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
            -ms-user-select: none;
                user-select: none;
 }
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+       cursor: pointer;
+}
 .oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
        display: block;
 }
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
+       color: #dddddd;
+       text-shadow: 0 1px 1px #ffffff;
+}
 .oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
 .oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
        background-color: transparent;
index 3be2d1b..2793806 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.8.0
+ * OOjs UI v0.8.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-02-19T01:33:11Z
+ * Date: 2015-02-27T18:02:31Z
  */
 /**
  * @class
index 0ad88fe..8bb14ec 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.8.0
+ * OOjs UI v0.8.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-02-19T01:33:11Z
+ * Date: 2015-02-27T18:02:31Z
  */
 ( function ( OO ) {
 
@@ -326,9 +326,9 @@ OO.ui.PendingElement.prototype.popPending = function () {
  *
  *     ProcessDialog.prototype.initialize = function () {
  *         ProcessDialog.super.prototype.initialize.apply( this, arguments );
- *         this.panel1 = new OO.ui.PanelLayout( { $: this.$, padded: true, expanded: false } );
+ *         this.panel1 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
  *         this.panel1.$element.append( '<p>This dialog uses an action set (continue, help, cancel, back) configured with modes. This is edit mode. Click \'help\' to see help mode. </p>' );
- *         this.panel2 = new OO.ui.PanelLayout( { $: this.$, padded: true, expanded: false } );
+ *         this.panel2 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
  *         this.panel2.$element.append( '<p>This is help mode. Only the \'back\' action widget is configured to be visible here. Click \'back\' to return to \'edit\' mode</p>' );
  *         this.stackLayout= new OO.ui.StackLayout( {
  *             items: [ this.panel1, this.panel2 ]
@@ -788,11 +788,18 @@ OO.ui.ActionSet.prototype.organize = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string[]} [classes] CSS class names to add
- * @cfg {string} [id] HTML id attribute
+ * @cfg {string[]} [classes] The names of the CSS classes to apply to the element. CSS styles are added
+ *  to the top level (e.g., the outermost div) of the element. See the [OOjs UI documentation on MediaWiki][2]
+ *  for an example.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#cssExample
+ * @cfg {string} [id] The HTML id attribute used in the rendered tag.
  * @cfg {string} [text] Text to insert
- * @cfg {jQuery} [$content] Content elements to append (after text)
- * @cfg {Mixed} [data] Element data
+ * @cfg {Array} [content] An array of content elements to append (after #text).
+ *  Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML.
+ *  Instances of OO.ui.Element will have their $element appended.
+ * @cfg {jQuery} [$content] Content elements to append (after #text)
+ * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object).
+ *  Data can also be specified with the #setData method.
  */
 OO.ui.Element = function OoUiElement( config ) {
        // Configuration initialization
@@ -800,8 +807,10 @@ OO.ui.Element = function OoUiElement( config ) {
 
        // Properties
        this.$ = $;
+       this.visible = true;
        this.data = config.data;
-       this.$element = $( document.createElement( this.getTagName() ) );
+       this.$element = config.$element ||
+               $( document.createElement( this.getTagName() ) );
        this.elementGroup = null;
        this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
        this.updateThemeClassesPending = false;
@@ -816,7 +825,25 @@ OO.ui.Element = function OoUiElement( config ) {
        if ( config.text ) {
                this.$element.text( config.text );
        }
+       if ( config.content ) {
+               // The `content` property treats plain strings as text; use an
+               // HtmlSnippet to append HTML content.  `OO.ui.Element`s get their
+               // appropriate $element appended.
+               this.$element.append( config.content.map( function ( v ) {
+                       if ( typeof v === 'string' ) {
+                               // Escape string so it is properly represented in HTML.
+                               return document.createTextNode( v );
+                       } else if ( v instanceof OO.ui.HtmlSnippet ) {
+                               // Bypass escaping.
+                               return v.toString();
+                       } else if ( v instanceof OO.ui.Element ) {
+                               return v.$element;
+                       }
+                       return v;
+               } ) );
+       }
        if ( config.$content ) {
+               // The `$content` property treats plain strings as HTML.
                this.$element.append( config.$content );
        }
 };
@@ -828,9 +855,9 @@ OO.initClass( OO.ui.Element );
 /* Static Properties */
 
 /**
- * HTML tag name.
+ * The name of the HTML tag used by the element.
  *
- * This may be ignored if #getTagName is overridden.
+ * The static value may be ignored if the #getTagName method is overridden.
  *
  * @static
  * @inheritable
@@ -1239,6 +1266,34 @@ OO.ui.Element.static.reconsiderScrollbars = function ( el ) {
 
 /* Methods */
 
+/**
+ * Toggle visibility of an element.
+ *
+ * @param {boolean} [show] Make element visible, omit to toggle visibility
+ * @fires visible
+ * @chainable
+ */
+OO.ui.Element.prototype.toggle = function ( show ) {
+       show = show === undefined ? !this.visible : !!show;
+
+       if ( show !== this.isVisible() ) {
+               this.visible = show;
+               this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
+               this.emit( 'toggle', show );
+       }
+
+       return this;
+};
+
+/**
+ * Check if element is visible.
+ *
+ * @return {boolean} element is visible
+ */
+OO.ui.Element.prototype.isVisible = function () {
+       return this.visible;
+};
+
 /**
  * Get element data.
  *
@@ -1430,7 +1485,6 @@ OO.ui.Widget = function OoUiWidget( config ) {
        OO.EventEmitter.call( this );
 
        // Properties
-       this.visible = true;
        this.disabled = null;
        this.wasDisabled = null;
 
@@ -1467,15 +1521,6 @@ OO.ui.Widget.prototype.isDisabled = function () {
        return this.disabled;
 };
 
-/**
- * Check if widget is visible.
- *
- * @return {boolean} Widget is visible
- */
-OO.ui.Widget.prototype.isVisible = function () {
-       return this.visible;
-};
-
 /**
  * Set the disabled state of the widget.
  *
@@ -1501,25 +1546,6 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
        return this;
 };
 
-/**
- * Toggle visibility of widget.
- *
- * @param {boolean} [show] Make widget visible, omit to toggle visibility
- * @fires visible
- * @chainable
- */
-OO.ui.Widget.prototype.toggle = function ( show ) {
-       show = show === undefined ? !this.visible : !!show;
-
-       if ( show !== this.isVisible() ) {
-               this.visible = show;
-               this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
-               this.emit( 'toggle', show );
-       }
-
-       return this;
-};
-
 /**
  * Update the disabled state, in case of changes in parent widget.
  *
@@ -1859,25 +1885,6 @@ OO.ui.Window.prototype.getTeardownProcess = function () {
        return new OO.ui.Process();
 };
 
-/**
- * Toggle visibility of window.
- *
- * @param {boolean} [show] Make window visible, omit to toggle visibility
- * @fires toggle
- * @chainable
- */
-OO.ui.Window.prototype.toggle = function ( show ) {
-       show = show === undefined ? !this.visible : !!show;
-
-       if ( show !== this.isVisible() ) {
-               this.visible = show;
-               this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
-               this.emit( 'toggle', show );
-       }
-
-       return this;
-};
-
 /**
  * Set the window manager.
  *
@@ -2733,7 +2740,7 @@ OO.ui.WindowManager.prototype.getWindow = function ( name ) {
                                        'Cannot auto-instantiate window: symbolic name is unrecognized by the factory'
                                ) );
                        } else {
-                               win = this.factory.create( name, this );
+                               win = this.factory.create( name );
                                this.addWindows( [ win ] );
                                deferred.resolve( win );
                        }
@@ -2915,7 +2922,7 @@ OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
                        }
                        list[ name ] = windows[ i ];
                }
-       } else if ( $.isPlainObject( windows ) ) {
+       } else if ( OO.isPlainObject( windows ) ) {
                list = windows;
        }
 
@@ -3078,7 +3085,13 @@ OO.ui.WindowManager.prototype.destroy = function () {
  * @cfg {boolean} [recoverable=true] Error is recoverable
  * @cfg {boolean} [warning=false] Whether this error is a warning or not.
  */
-OO.ui.Error = function OoUiElement( message, config ) {
+OO.ui.Error = function OoUiError( message, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( message ) && config === undefined ) {
+               config = message;
+               message = config.message;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -3132,6 +3145,114 @@ OO.ui.Error.prototype.getMessageText = function () {
        return this.message instanceof jQuery ? this.message.text() : this.message;
 };
 
+/**
+ * Wraps an HTML snippet for use with configuration values which default
+ * to strings.  This bypasses the default html-escaping done to string
+ * values.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string} [content] HTML content
+ */
+OO.ui.HtmlSnippet = function OoUiHtmlSnippet( content ) {
+       // Properties
+       this.content = content;
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.HtmlSnippet );
+
+/* Methods */
+
+/**
+ * Render into HTML.
+ *
+ * @return {string} Unchanged HTML snippet.
+ */
+OO.ui.HtmlSnippet.prototype.toString = function () {
+       return this.content;
+};
+
+/**
+ * Reconstitute a JavaScript object corresponding to a widget created
+ * by the PHP implementation.
+ *
+ * @member OO.ui
+ * @param {string|HTMLElement|jQuery} idOrNode
+ *   A DOM id (if a string) or node for the widget to infuse.
+ * @return {OO.ui.Element}
+ *   The `OO.ui.Element` corresponding to this (infusable) document node.
+ *   For `Tag` objects emitted on the HTML side (used occasionally for content)
+ *   the value returned is a newly-created Element wrapping around the existing
+ *   DOM node.
+ */
+OO.ui.infuse = function ( idOrNode, dontReplace ) {
+       // look for a cached result of a previous infusion.
+       var id, $elem, data, cls, obj;
+       if ( typeof idOrNode === 'string' ) {
+               id = idOrNode;
+               $elem = $( document.getElementById( id ) );
+       } else {
+               $elem = $( idOrNode );
+               id = $elem.attr( 'id' );
+       }
+       data = $elem.data( 'ooui-infused' );
+       if ( data ) {
+               // cached!
+               if ( data === true ) {
+                       throw new Error( 'Circular dependency! ' + id );
+               }
+               return data;
+       }
+       if ( !$elem.length ) {
+               throw new Error( 'Widget not found: ' + id );
+       }
+       data = $elem.attr( 'data-ooui' );
+       if ( !data ) {
+               throw new Error( 'No infusion data found: ' + id );
+       }
+       try {
+               data = $.parseJSON( data );
+       } catch ( _ ) {
+               data = null;
+       }
+       if ( !( data && data._ ) ) {
+               throw new Error( 'No valid infusion data found: ' + id );
+       }
+       if ( data._ === 'Tag' ) {
+               // Special case: this is a raw Tag; wrap existing node, don't rebuild.
+               return new OO.ui.Element( { $element: $elem } );
+       }
+       cls = OO.ui[data._];
+       if ( !cls ) {
+               throw new Error( 'Unknown widget type: ' + id );
+       }
+       $elem.data( 'ooui-infused', true ); // prevent loops
+       data.id = id; // implicit
+       data = OO.copy( data, null, function deserialize( value ) {
+               if ( OO.isPlainObject( value ) ) {
+                       if ( value.tag ) {
+                               return OO.ui.infuse( value.tag, 'rebuilding' );
+                       }
+                       if ( value.html ) {
+                               return new OO.ui.HtmlSnippet( value.html );
+                       }
+               }
+       } );
+       // jscs:disable requireCapitalizedConstructors
+       obj = new cls( data ); // rebuild widget
+       // now replace old DOM with this new DOM.
+       if ( !dontReplace ) {
+               $elem.replaceWith( obj.$element );
+       }
+       obj.$element.data( 'ooui-infused', obj );
+       // set the 'data-ooui' attribute so we can identify infused widgets
+       obj.$element.attr( 'data-ooui', '' );
+       return obj;
+};
+
 /**
  * A list of functions, called in sequence.
  *
@@ -3501,7 +3622,30 @@ OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
 };
 
 /**
- * Element supporting "sequential focus navigation" using the 'tabindex' attribute.
+ * The TabIndexedElement class is an attribute mixin used to add additional functionality to an
+ * element created by another class. The mixin provides a ‘tabIndex’ property, which specifies the
+ * order in which users will navigate through the focusable elements via the "tab" key.
+ *
+ *     @example
+ *     // TabIndexedElement is mixed into the ButtonWidget class
+ *     // to provide a tabIndex property.
+ *     var button1 = new OO.ui.ButtonWidget( {
+ *         label : 'fourth',
+ *         tabIndex : 4
+ *     } );
+ *     var button2 = new OO.ui.ButtonWidget( {
+ *         label : 'second',
+ *         tabIndex : 2
+ *     } );
+ *     var button3 = new OO.ui.ButtonWidget( {
+ *         label : 'third',
+ *         tabIndex : 3
+ *     } );
+ *     var button4 = new OO.ui.ButtonWidget( {
+ *         label : 'first',
+ *         tabIndex : 1
+ *     } );
+ *     $( 'body' ).append( button1.$element, button2.$element, button3.$element, button4.$element );
  *
  * @abstract
  * @class
@@ -3594,6 +3738,7 @@ OO.ui.TabIndexedElement.prototype.updateTabIndex = function () {
 /**
  * Handle disable events.
  *
+ * @private
  * @param {boolean} disabled Element is disabled
  */
 OO.ui.TabIndexedElement.prototype.onDisable = function () {
@@ -4169,15 +4314,21 @@ OO.initClass( OO.ui.DraggableElement );
 
 /**
  * @event dragstart
- * @param {OO.ui.DraggableElement} item Dragging item
+ *
+ * A dragstart event is emitted when the user clicks and begins dragging an item.
+ * @param {OO.ui.DraggableElement} item The item the user has clicked and is dragging with the mouse.
  */
 
 /**
  * @event dragend
+ * A dragend event is emitted when the user drags an item and releases the mouse,
+ * thus terminating the drag operation.
  */
 
 /**
  * @event drop
+ * A drop event is emitted when the user drags an item and then releases the mouse button
+ * over a valid target.
  */
 
 /* Static Properties */
@@ -4191,6 +4342,8 @@ OO.ui.DraggableElement.static.cancelButtonMouseDownEvents = false;
 
 /**
  * Respond to dragstart event.
+ *
+ * @private
  * @param {jQuery.Event} event jQuery event
  * @fires dragstart
  */
@@ -4216,6 +4369,8 @@ OO.ui.DraggableElement.prototype.onDragStart = function ( e ) {
 
 /**
  * Respond to dragend event.
+ *
+ * @private
  * @fires dragend
  */
 OO.ui.DraggableElement.prototype.onDragEnd = function () {
@@ -4225,6 +4380,8 @@ OO.ui.DraggableElement.prototype.onDragEnd = function () {
 
 /**
  * Handle drop event.
+ *
+ * @private
  * @param {jQuery.Event} event jQuery event
  * @fires drop
  */
@@ -4236,6 +4393,8 @@ OO.ui.DraggableElement.prototype.onDrop = function ( e ) {
 /**
  * In order for drag/drop to work, the dragover event must
  * return false and stop propogation.
+ *
+ * @private
  */
 OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
        e.preventDefault();
@@ -4244,6 +4403,8 @@ OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
 /**
  * Set item index.
  * Store it in the DOM so we can access from the widget drag event
+ *
+ * @private
  * @param {number} Item index
  */
 OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
@@ -4255,6 +4416,8 @@ OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
 
 /**
  * Get item index
+ *
+ * @private
  * @return {number} Item index
  */
 OO.ui.DraggableElement.prototype.getIndex = function () {
@@ -4519,11 +4682,29 @@ OO.ui.DraggableGroupElement.prototype.isDragging = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$icon] Icon node, assigned to #$icon, omit to use a generated `<span>`
- * @cfg {Object|string} [icon=''] Symbolic icon name, or map of icon names keyed by language ID;
- *  use the 'default' key to specify the icon to be used when there is no icon in the user's
- *  language
- * @cfg {string} [iconTitle] Icon title text or a function that returns text
+ * @cfg {jQuery} [$icon] The icon element created by the class. If this configuration is omitted,
+ *  the icon element will use a generated `<span>`. To use a different HTML tag, or to specify that
+ *  the icon element be set to an existing icon instead of the one generated by this class, set a
+ *  value using a jQuery selection. For example:
+ *
+ *      // Use a <div> tag instead of a <span>
+ *     $icon: $("<div>")
+ *     // Use an existing icon element instead of the one generated by the class
+ *     $icon: this.$element
+ *     // Use an icon element from a child widget
+ *     $icon: this.childwidget.$element
+ * @cfg {Object|string} [icon=''] The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of
+ *  symbolic names.  A map is used for i18n purposes and contains a `default` icon
+ *  name and additional names keyed by language code. The `default` name is used when no icon is keyed
+ *  by the user's language.
+ *
+ *  Example of an i18n map:
+ *
+ *     { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
+ *  See the [OOjs UI documentation on MediaWiki] [2] for a list of icons included in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ * @cfg {string|Function} [iconTitle] A text string used as the icon title, or a function that returns title
+ *  text. The icon title is displayed when users move the mouse over the icon.
  */
 OO.ui.IconElement = function OoUiIconElement( config ) {
        // Configuration initialization
@@ -4578,9 +4759,10 @@ OO.ui.IconElement.static.iconTitle = null;
 /* Methods */
 
 /**
- * Set the icon element.
- *
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * Set the icon element. This method is used to retarget an icon mixin so that its functionality
+ * applies to the specified icon element instead of the one created by the class. If an icon
+ * element is already set, the mixin’s effect on that element is removed. Generated CSS classes
+ * and mixin methods will no longer affect the element.
  *
  * @param {jQuery} $icon Element to use as icon
  */
@@ -4600,11 +4782,12 @@ OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
 };
 
 /**
- * Set icon name.
+ * Set icon by symbolic name (e.g., ‘remove’ or ‘menu’). Use `null` to remove an icon.
+ * The icon parameter can also be set to a map of icon names. See the #icon config setting
+ * for an example.
  *
- * @param {Object|string|null} icon Symbolic icon name, or map of icon names keyed by language ID;
- *  use the 'default' key to specify the icon to be used when there is no icon in the user's
- *  language, use null to remove icon
+ * @param {Object|string|null} icon A symbolic icon name, a {@link #icon map of icon names} keyed
+ *  by language code, or `null` to remove the icon.
  * @chainable
  */
 OO.ui.IconElement.prototype.setIcon = function ( icon ) {
@@ -4630,10 +4813,10 @@ OO.ui.IconElement.prototype.setIcon = function ( icon ) {
 };
 
 /**
- * Set icon title.
+ * Set the icon title. Use `null` to remove the title.
  *
- * @param {string|Function|null} icon Icon title text, a function that returns text or null
- *  for no icon title
+ * @param {string|Function|null} iconTitle A text string used as the icon title,
+ *  a function that returns title text, or `null` for no title.
  * @chainable
  */
 OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
@@ -4656,7 +4839,7 @@ OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
 };
 
 /**
- * Get icon name.
+ * Get the symbolic name of the icon.
  *
  * @return {string} Icon name
  */
@@ -4665,7 +4848,7 @@ OO.ui.IconElement.prototype.getIcon = function () {
 };
 
 /**
- * Get icon title.
+ * Get the icon title. The title text is displayed when a user moves the mouse over the icon.
  *
  * @return {string} Icon title text
  */
@@ -4692,10 +4875,15 @@ OO.ui.IconElement.prototype.getIconTitle = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$indicator] Indicator node, assigned to #$indicator, omit to use a generated
- *   `<span>`
- * @cfg {string} [indicator] Symbolic indicator name
- * @cfg {string} [indicatorTitle] Indicator title text or a function that returns text
+ * @cfg {jQuery} [$indicator] The indicator element created by the class. If this
+ *  configuration is omitted, the indicator element will use a generated `<span>`.
+ * @cfg {string} [indicator] Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).
+ *  See the [OOjs UI documentation on MediaWiki][2] for a list of indicators included
+ *  in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ * @cfg {string|Function} [indicatorTitle] A text string used as the indicator title,
+ *  or a function that returns title text. The indicator title is displayed when users move
+ *  the mouse over the indicator.
  */
 OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
        // Configuration initialization
@@ -4719,21 +4907,22 @@ OO.initClass( OO.ui.IndicatorElement );
 /* Static Properties */
 
 /**
- * indicator.
+ * Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).
+ * The static property will be overridden if the #indicator configuration is used.
  *
  * @static
  * @inheritable
- * @property {string|null} Symbolic indicator name
+ * @property {string|null}
  */
 OO.ui.IndicatorElement.static.indicator = null;
 
 /**
- * Indicator title.
+ * A text string used as the indicator title, a function that returns title text, or `null`
+ * for no title. The static property will be overridden if the #indicatorTitle configuration is used.
  *
  * @static
  * @inheritable
- * @property {string|Function|null} Indicator title text, a function that returns text or null for no
- *  indicator title
+ * @property {string|Function|null}
  */
 OO.ui.IndicatorElement.static.indicatorTitle = null;
 
@@ -4833,16 +5022,25 @@ OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
 };
 
 /**
- * Element containing a label.
+ * LabelElement is often mixed into other classes to generate a label, which
+ * helps identify the function of an interface element.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$label] Label node, assigned to #$label, omit to use a generated `<span>`
- * @cfg {jQuery|string|Function} [label] Label nodes, text or a function that returns nodes or text
- * @cfg {boolean} [autoFitLabel=true] Whether to fit the label or not.
+ * @cfg {jQuery} [$label] The label element created by the class. If this
+ *  configuration is omitted, the label element will use a generated `<span>`.
+ * @cfg {jQuery|string|Function} [label] The label text. The label can be specified as a plaintext string,
+ *  a jQuery selection of elements, or a function that will produce a string in the future. See the
+ *  [OOjs UI documentation on MediaWiki] [2] for examples.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
+ * @cfg {boolean} [autoFitLabel=true] Fit the label to the width of the parent element.
+ *  The label will be truncated to fit if necessary.
  */
 OO.ui.LabelElement = function OoUiLabelElement( config ) {
        // Configuration initialization
@@ -4872,12 +5070,13 @@ OO.initClass( OO.ui.LabelElement );
 /* Static Properties */
 
 /**
- * Label.
+ * The label text. The label can be specified as a plaintext string, a function that will
+ * produce a string in the future, or `null` for no label. The static value will
+ * be overridden if a label is specified with the #label config option.
  *
  * @static
  * @inheritable
- * @property {string|Function|null} Label text; a function that returns nodes or text; or null for
- *  no label
+ * @property {string|Function|null}
  */
 OO.ui.LabelElement.static.label = null;
 
@@ -4905,13 +5104,13 @@ OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
  * An empty string will result in the label being hidden. A string containing only whitespace will
  * be converted to a single `&nbsp;`.
  *
- * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * @param {jQuery|string|OO.ui.HtmlSnippet|Function|null} label Label nodes; text; a function that returns nodes or
  *  text; or null for no label
  * @chainable
  */
 OO.ui.LabelElement.prototype.setLabel = function ( label ) {
        label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;
-       label = ( typeof label === 'string' && label.length ) || label instanceof jQuery ? label : null;
+       label = ( ( typeof label === 'string' && label.length ) || label instanceof jQuery || label instanceof OO.ui.HtmlSnippet ) ? label : null;
 
        this.$element.toggleClass( 'oo-ui-labelElement', !!label );
 
@@ -4966,6 +5165,8 @@ OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
                } else {
                        this.$label.text( label );
                }
+       } else if ( label instanceof OO.ui.HtmlSnippet ) {
+               this.$label.html( label.toString() );
        } else if ( label instanceof jQuery ) {
                this.$label.empty().append( label );
        } else {
@@ -5357,9 +5558,10 @@ OO.ui.PopupElement.prototype.getPopup = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string|string[]} [flags] Flags describing importance and functionality, e.g. 'primary',
- *   'safe', 'progressive', 'destructive' or 'constructive'
- * @cfg {jQuery} [$flagged] Flagged node, assigned to #$flagged, omit to use #$element
+ * @cfg {string|string[]} [flags] The name or names of the flags (e.g., 'constructive' or 'primary') to apply.
+ *  Please see the [OOjs UI documentation on MediaWiki] [2] for more information about available flags.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
+ * @cfg {jQuery} [$flagged] Flagged node, assigned to $flagged, omit to use $element
  */
 OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
        // Configuration initialization
@@ -5378,8 +5580,12 @@ OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
 
 /**
  * @event flag
- * @param {Object.<string,boolean>} changes Object keyed by flag name containing boolean
- *   added/removed properties
+ * A flag event is emitted when the #clearFlags or #setFlags methods are used. The `changes`
+ * parameter contains the name of each modified flag and indicates whether it was
+ * added or removed.
+ *
+ * @param {Object.<string,boolean>} changes Object keyed by flag name. A Boolean `true` indicates
+ * that the flag was added, `false` that the flag was removed.
  */
 
 /* Methods */
@@ -5518,19 +5724,29 @@ OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
 };
 
 /**
- * Element with a title.
+ * TitledElement is mixed into other classes to provide a `title` attribute.
+ * Titles are rendered by the browser and are made visible when the user moves
+ * the mouse over the element. Titles are not visible on touch devices.
  *
- * Titles are rendered by the browser and are made visible when hovering the element. Titles are
- * not visible on touch devices.
+ *     @example
+ *     // TitledElement provides a 'title' attribute to the
+ *     // ButtonWidget class
+ *     var button = new OO.ui.ButtonWidget( {
+ *         label : 'Button with Title',
+ *         title : 'I am a button'
+ *     } );
+ *     $( 'body' ).append( button.$element );
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$titled] Titled node, assigned to #$titled, omit to use #$element
- * @cfg {string|Function} [title] Title text or a function that returns text. If not provided, the
- *    static property 'title' is used.
+ * @cfg {jQuery} [$titled] The element to which the `title` attribute is applied.
+ *  If this config is omitted, the title functionality is applied to $element, the
+ *  element created by the class.
+ * @cfg {string|Function} [title] The title text or a function that returns text. If
+ *  this config is omitted, the value of the static `title` property is used.
  */
 OO.ui.TitledElement = function OoUiTitledElement( config ) {
        // Configuration initialization
@@ -5552,11 +5768,12 @@ OO.initClass( OO.ui.TitledElement );
 /* Static Properties */
 
 /**
- * Title.
+ * The title text, a function that returns text, or `null` for no title. The value of the static property
+ * is overridden if the #title config option is used.
  *
  * @static
  * @inheritable
- * @property {string|Function} Title text or a function that returns text
+ * @property {string|Function|null}
  */
 OO.ui.TitledElement.static.title = null;
 
@@ -5833,6 +6050,12 @@ OO.ui.ClippableElement.prototype.clip = function () {
  * @cfg {string|Function} [title] Title text or a function that returns text
  */
 OO.ui.Tool = function OoUiTool( toolGroup, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+               config = toolGroup;
+               toolGroup = config.toolGroup;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -6095,6 +6318,13 @@ OO.ui.Tool.prototype.destroy = function () {
  * @cfg {boolean} [shadow] Add a shadow below the toolbar
  */
 OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolFactory ) && config === undefined ) {
+               config = toolFactory;
+               toolFactory = config.toolFactory;
+               toolGroupFactory = config.toolGroupFactory;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -6311,6 +6541,12 @@ OO.ui.Toolbar.prototype.getToolAccelerator = function () {
  * @cfg {Array|string} [demote=[]] List of tools to demote to the end
  */
 OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -7031,12 +7267,10 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
                this.$primaryActions.append( special.primary.$element );
                special.primary.toggleFramed( true );
        }
-       if ( others.length ) {
-               for ( i = 0, len = others.length; i < len; i++ ) {
-                       other = others[ i ];
-                       this.$otherActions.append( other.$element );
-                       other.toggleFramed( true );
-               }
+       for ( i = 0, len = others.length; i < len; i++ ) {
+               other = others[ i ];
+               this.$otherActions.append( other.$element );
+               other.toggleFramed( true );
        }
        if ( special.safe ) {
                this.$safeActions.append( special.safe.$element );
@@ -7149,6 +7383,12 @@ OO.ui.ProcessDialog.prototype.hideErrors = function () {
  * @cfg {string} [help] Explanatory text shown as a '?' icon.
  */
 OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+               config = fieldWidget;
+               fieldWidget = config.fieldWidget;
+       }
+
        var hasInputWidget = fieldWidget instanceof OO.ui.InputWidget;
 
        // Configuration initialization
@@ -7284,6 +7524,13 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
  * @cfg {string} [help] Explanatory text shown as a '?' icon.
  */
 OO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWidget, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+               config = fieldWidget;
+               fieldWidget = config.fieldWidget;
+               buttonWidget = config.buttonWidget;
+       }
+
        // Configuration initialization
        config = $.extend( { align: 'left' }, config );
 
@@ -7376,12 +7623,14 @@ OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
  *
  * @class
  * @extends OO.ui.Layout
+ * @mixins OO.ui.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {string} [method] HTML form `method` attribute
  * @cfg {string} [action] HTML form `action` attribute
  * @cfg {string} [enctype] HTML form `enctype` attribute
+ * @cfg {OO.ui.FieldsetLayout[]} [items] Items to add
  */
 OO.ui.FormLayout = function OoUiFormLayout( config ) {
        // Configuration initialization
@@ -7390,6 +7639,9 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
        // Parent constructor
        OO.ui.FormLayout.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
        // Events
        this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
 
@@ -7401,16 +7653,24 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
                        action: config.action,
                        enctype: config.enctype
                } );
+       if ( Array.isArray( config.items ) ) {
+               this.addItems( config.items );
+       }
 };
 
 /* Setup */
 
 OO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FormLayout, OO.ui.GroupElement );
 
 /* Events */
 
 /**
+ * The HTML form was submitted. If the submission is handled, call `e.preventDefault()` to prevent
+ * HTML form submission.
+ *
  * @event submit
+ * @param {jQuery.Event} e Submit event
  */
 
 /* Static Properties */
@@ -7425,9 +7685,8 @@ OO.ui.FormLayout.static.tagName = 'form';
  * @param {jQuery.Event} e Submit event
  * @fires submit
  */
-OO.ui.FormLayout.prototype.onFormSubmit = function () {
-       this.emit( 'submit' );
-       return false;
+OO.ui.FormLayout.prototype.onFormSubmit = function ( e ) {
+       this.emit( 'submit', e );
 };
 
 /**
@@ -7444,6 +7703,12 @@ OO.ui.FormLayout.prototype.onFormSubmit = function () {
  * @cfg {number[]} [heights] Heights of rows as ratios
  */
 OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( panels ) && config === undefined ) {
+               config = panels;
+               panels = config.panels;
+       }
+
        var i, len, widths;
 
        // Configuration initialization
@@ -8284,6 +8549,12 @@ OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
  * @param {Object} [config] Configuration options
  */
 OO.ui.PageLayout = function OoUiPageLayout( name, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( name ) && config === undefined ) {
+               config = name;
+               name = config.name;
+       }
+
        // Configuration initialization
        config = $.extend( { scrollable: true }, config );
 
@@ -8586,6 +8857,12 @@ OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem )
  * @param {Object} [config] Configuration options
  */
 OO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Parent constructor
        OO.ui.BarToolGroup.super.call( this, toolbar, config );
 
@@ -8623,6 +8900,12 @@ OO.ui.BarToolGroup.static.name = 'bar';
  * @cfg {string} [header] Text to display at the top of the pop-up
  */
 OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -8794,6 +9077,12 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
  * @cfg {boolean} [expanded=false] Whether the collapsible tools are expanded by default
  */
 OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -8913,6 +9202,12 @@ OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
  * @param {Object} [config] Configuration options
  */
 OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -8970,6 +9265,12 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
  * @param {Object} [config] Configuration options
  */
 OO.ui.PopupTool = function OoUiPopupTool( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Parent constructor
        OO.ui.PopupTool.super.call( this, toolbar, config );
 
@@ -9127,6 +9428,12 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
  * @cfg {jQuery} [$container=input.$element] Element to render menu under
  */
 OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( input ) && config === undefined ) {
+               config = input;
+               input = config.input;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -9434,6 +9741,12 @@ OO.ui.LookupInputWidget.prototype.getLookupCacheItemFromData = function () {
  * @param {Object} [config] Configuration options
  */
 OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( outline ) && config === undefined ) {
+               config = outline;
+               outline = config.outline;
+       }
+
        // Configuration initialization
        config = $.extend( { icon: 'add' }, config );
 
@@ -10022,7 +10335,22 @@ OO.ui.ActionWidget.prototype.toggle = function () {
 };
 
 /**
- * Button that shows and hides a popup.
+ * PopupButtonWidgets toggle the visibility of a contained {@link OO.ui.PopupWidget PopupWidget},
+ * which is used to display additional information or options.
+ *
+ *     @example
+ *     // Example of a popup button.
+ *     var popupButton = new OO.ui.PopupButtonWidget( {
+ *         label: 'Popup button with options',
+ *         icon: 'menu',
+ *         popup: {
+ *             $content: $( '<p>Additional options here.</p>' ),
+ *             padded: true,
+ *             align: 'left'
+ *         }
+ *     } );
+ *     // Append the button to the DOM.
+ *     $( 'body' ).append( popupButton.$element );
  *
  * @class
  * @extends OO.ui.ButtonWidget
@@ -10057,6 +10385,8 @@ OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopupElement );
 
 /**
  * Handle the button action being triggered.
+ *
+ * @private
  */
 OO.ui.PopupButtonWidget.prototype.onAction = function () {
        this.popup.toggle();
@@ -10600,6 +10930,7 @@ OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
 
        // Properties (must be set before parent constructor, which calls #setValue)
        this.useInputTag = config.useInputTag;
+       this.type = config.type;
 
        // Parent constructor
        OO.ui.ButtonInputWidget.super.call( this, config );
@@ -10683,6 +11014,18 @@ OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
        return this;
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.ButtonInputWidget.prototype.onClick = function ( e ) {
+       var ret = OO.ui.ButtonElement.prototype.onClick.call( this, e );
+       if ( this.type === 'submit' ) {
+               // Never prevent default action (form submission)
+               return true;
+       }
+       return ret;
+};
+
 /**
  * Checkbox input widget.
  *
@@ -11014,7 +11357,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        }
 
        this.setValidation( config.validate );
-       this.setPosition( config.labelPosition );
+       this.setLabelPosition( config.labelPosition );
 
        // Events
        this.$input.on( {
@@ -11313,12 +11656,20 @@ OO.ui.TextInputWidget.prototype.isValid = function () {
  * @param {string} labelPosition Label position, 'before' or 'after'
  * @chainable
  */
-OO.ui.TextInputWidget.prototype.setPosition = function ( labelPosition ) {
+OO.ui.TextInputWidget.prototype.setLabelPosition = function ( labelPosition ) {
        this.labelPosition = labelPosition;
        this.updatePosition();
        return this;
 };
 
+/**
+ * Deprecated alias of #setLabelPosition
+ *
+ * @deprecated Use setLabelPosition instead.
+ */
+OO.ui.TextInputWidget.prototype.setPosition =
+       OO.ui.TextInputWidget.prototype.setLabelPosition;
+
 /**
  * Update the position of the inline label.
  *
@@ -11404,6 +11755,10 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
                },
                config.input
        ) );
+       this.input.$input.eq( 0 ).attr( {
+               role: 'combobox',
+               'aria-autocomplete': 'list'
+       } );
        this.menu = new OO.ui.TextInputMenuSelectWidget( this.input, $.extend(
                {
                        widget: this,
@@ -11599,7 +11954,12 @@ OO.ui.LabelWidget.prototype.onClick = function () {
 };
 
 /**
- * Generic option widget for use with OO.ui.SelectWidget.
+ * OptionWidgets are special elements that can be selected and configured with data. The
+ * data is often unique for each option, but it does not have to be. OptionWidgets are used
+ * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information
+ * and examples, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.Widget
@@ -11654,7 +12014,7 @@ OO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;
 /* Methods */
 
 /**
- * Check if option can be selected.
+ * Check if the option can be selected.
  *
  * @return {boolean} Item is selectable
  */
@@ -11663,7 +12023,9 @@ OO.ui.OptionWidget.prototype.isSelectable = function () {
 };
 
 /**
- * Check if option can be highlighted.
+ * Check if the option can be highlighted. A highlight indicates that the option
+ * may be selected when a user presses enter or clicks. Disabled items cannot
+ * be highlighted.
  *
  * @return {boolean} Item is highlightable
  */
@@ -11672,7 +12034,8 @@ OO.ui.OptionWidget.prototype.isHighlightable = function () {
 };
 
 /**
- * Check if option can be pressed.
+ * Check if the option can be pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse.
  *
  * @return {boolean} Item is pressable
  */
@@ -11681,7 +12044,7 @@ OO.ui.OptionWidget.prototype.isPressable = function () {
 };
 
 /**
- * Check if option is selected.
+ * Check if the option is selected.
  *
  * @return {boolean} Item is selected
  */
@@ -11690,7 +12053,8 @@ OO.ui.OptionWidget.prototype.isSelected = function () {
 };
 
 /**
- * Check if option is highlighted.
+ * Check if the option is highlighted. A highlight indicates that the
+ * item may be selected when a user presses enter or clicks.
  *
  * @return {boolean} Item is highlighted
  */
@@ -11699,7 +12063,9 @@ OO.ui.OptionWidget.prototype.isHighlighted = function () {
 };
 
 /**
- * Check if option is pressed.
+ * Check if the option is pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse. The item may appear
+ * selected, but it will not be selected until the user releases the mouse.
  *
  * @return {boolean} Item is pressed
  */
@@ -11708,7 +12074,9 @@ OO.ui.OptionWidget.prototype.isPressed = function () {
 };
 
 /**
- * Set selected state.
+ * Set the option’s selected state. In general, all modifications to the selection
+ * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}
+ * method instead of this method.
  *
  * @param {boolean} [state=false] Select option
  * @chainable
@@ -11728,7 +12096,10 @@ OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
 };
 
 /**
- * Set highlighted state.
+ * Set the option’s highlighted state. In general, all programmatic
+ * modifications to the highlight should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#highlightItem highlightItem( [item] )}
+ * method instead of this method.
  *
  * @param {boolean} [state=false] Highlight option
  * @chainable
@@ -11743,7 +12114,10 @@ OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
 };
 
 /**
- * Set pressed state.
+ * Set the option’s pressed state. In general, all
+ * programmatic modifications to the pressed state should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#pressItem pressItem( [item] )}
+ * method instead of this method.
  *
  * @param {boolean} [state=false] Press option
  * @chainable
@@ -11792,9 +12166,12 @@ OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconElement );
 OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
 
 /**
- * Option widget that looks like a button.
+ * ButtonOptionWidget is a special type of {@link OO.ui.ButtonElement button element} that
+ * can be selected and configured with data. The class is
+ * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
  *
- * Use together with OO.ui.ButtonSelectWidget.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_options
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
@@ -11850,9 +12227,11 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
 };
 
 /**
- * Option widget that looks like a radio button.
+ * RadioOptionWidget is an option widget that looks like a radio button.
+ * The class is used with OO.ui.RadioSelectWidget to create a selection of radio options.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.
  *
- * Use together with OO.ui.RadioSelectWidget.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option
  *
  * @class
  * @extends OO.ui.OptionWidget
@@ -11861,12 +12240,15 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
  * @param {Object} [config] Configuration options
  */
 OO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {
-       // Parent constructor
-       OO.ui.RadioOptionWidget.super.call( this, config );
+       // Configuration initialization
+       config = config || {};
 
-       // Properties
+       // Properties (must be done before parent constructor which calls #setDisabled)
        this.radio = new OO.ui.RadioInputWidget( { value: config.data, tabIndex: -1 } );
 
+       // Parent constructor
+       OO.ui.RadioOptionWidget.super.call( this, config );
+
        // Initialization
        this.$element
                .addClass( 'oo-ui-radioOptionWidget' )
@@ -11901,7 +12283,22 @@ OO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {
 };
 
 /**
- * Item of an OO.ui.MenuSelectWidget.
+ * @inheritdoc
+ */
+OO.ui.RadioOptionWidget.prototype.setDisabled = function ( disabled ) {
+       OO.ui.RadioOptionWidget.super.prototype.setDisabled.call( this, disabled );
+
+       this.radio.setDisabled( this.isDisabled() );
+
+       return this;
+};
+
+/**
+ * MenuOptionWidget is an option widget that looks like a menu item. The class is used with
+ * OO.ui.MenuSelectWidget to create a menu of mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
@@ -12616,7 +13013,10 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {OO.ui.OptionWidget[]} [items] Options to add
+ * @cfg {OO.ui.OptionWidget[]} [items] An array of options to add to the select.
+ *  Options are created with {@link OO.ui.OptionWidget OptionWidget} classes. See
+ *  the [OOjs UI documentation on MediaWiki] [2] for examples.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  */
 OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        // Configuration initialization
@@ -12663,16 +13063,26 @@ OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
 
 /**
  * @event highlight
+ *
+ * A `highlight` event is emitted when the highlight is changed with the #highlightItem method.
+ *
  * @param {OO.ui.OptionWidget|null} item Highlighted item
  */
 
 /**
  * @event press
+ *
+ * A `press` event is emitted when the #pressItem method is used to programmatically modify the
+ * pressed state of an option.
+ *
  * @param {OO.ui.OptionWidget|null} item Pressed item
  */
 
 /**
  * @event select
+ *
+ * A `select` event is emitted when the selection is modified programmatically with the #selectItem method.
+ *
  * @param {OO.ui.OptionWidget|null} item Selected item
  */
 
@@ -12683,12 +13093,19 @@ OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
 
 /**
  * @event add
+ *
+ * An `add` event is emitted when options are added to the select with the #addItems method.
+ *
  * @param {OO.ui.OptionWidget[]} items Added items
- * @param {number} index Index items were added at
+ * @param {number} index Index of insertion point
  */
 
 /**
  * @event remove
+ *
+ * A `remove` event is emitted when options are removed from the select with the #clearItems
+ * or #removeItems methods.
+ *
  * @param {OO.ui.OptionWidget[]} items Removed items
  */
 
@@ -12811,6 +13228,7 @@ OO.ui.SelectWidget.prototype.onMouseLeave = function () {
 /**
  * Handle key down events.
  *
+ * @protected
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {
@@ -12944,11 +13362,10 @@ OO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {
 };
 
 /**
- * Highlight an item.
- *
- * Highlighting is mutually exclusive.
+ * Highlight an option. If the `item` param is omitted, no options will be highlighted
+ * and any existing highlight will be removed. The highlight is mutually exclusive.
  *
- * @param {OO.ui.OptionWidget} [item] Item to highlight, omit to deselect all
+ * @param {OO.ui.OptionWidget} [item] Item to highlight, omit for no highlight
  * @fires highlight
  * @chainable
  */
@@ -12971,7 +13388,8 @@ OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
 };
 
 /**
- * Select an item.
+ * Programmatically select an option by its reference. If the `item` parameter is omitted,
+ * all options will be deselected.
  *
  * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all
  * @fires select
@@ -13038,11 +13456,14 @@ OO.ui.SelectWidget.prototype.chooseItem = function ( item ) {
 };
 
 /**
- * Get an item relative to another one.
+ * Get an option by its position relative to the specified item (or to the start of the option array,
+ * if item is `null`). The direction in which to search through the option array is specified with a
+ * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or
+ * `null` if there are no options in the array.
  *
- * @param {OO.ui.OptionWidget|null} item Item to start at, null to get relative to list start
- * @param {number} direction Direction to move in, -1 to move backward, 1 to move forward
- * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the menu
+ * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.
+ * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward
+ * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select
  */
 OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction ) {
        var currentIndex, nextIndex, i,
@@ -13069,7 +13490,8 @@ OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direct
 };
 
 /**
- * Get the next selectable item.
+ * Get the next selectable item or `null` if there are no selectable items.
+ * Disabled options and menu-section markers and breaks are not selectable.
  *
  * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items
  */
@@ -13087,7 +13509,8 @@ OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
 };
 
 /**
- * Add items.
+ * Add an array of options to the select. Optionally, an index number can be used to
+ * specify an insertion point.
  *
  * @param {OO.ui.OptionWidget[]} items Items to add
  * @param {number} [index] Index to insert items after
@@ -13105,9 +13528,9 @@ OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
 };
 
 /**
- * Remove items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Remove the specified array of options from the select. Options will be detached
+ * from the DOM, not removed, so they can be reused later. To remove all options from
+ * the select, you may wish to use the #clearItems method instead.
  *
  * @param {OO.ui.OptionWidget[]} items Items to remove
  * @fires remove
@@ -13133,9 +13556,9 @@ OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
 };
 
 /**
- * Clear all items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Clear all options from the select. Options will be detached from the DOM, not removed,
+ * so that they can be reused later. To remove a subset of options from the select, use
+ * the #removeItems method.
  *
  * @fires remove
  * @chainable
@@ -13155,9 +13578,38 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
 };
 
 /**
- * Select widget containing button options.
+ * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains
+ * button options and is used together with
+ * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for
+ * highlighting, choosing, and selecting mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
  *
- * Use together with OO.ui.ButtonOptionWidget.
+ *     @example
+ *     // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets
+ *     var option1 = new OO.ui.ButtonOptionWidget( {
+ *         data: 1,
+ *         label: 'Option 1',
+ *         title:'Button option 1'
+ *     } );
+ *
+ *     var option2 = new OO.ui.ButtonOptionWidget( {
+ *         data: 2,
+ *         label: 'Option 2',
+ *         title:'Button option 2'
+ *     } );
+ *
+ *     var option3 = new OO.ui.ButtonOptionWidget( {
+ *         data: 3,
+ *         label: 'Option 3',
+ *         title:'Button option 3'
+ *     } );
+ *
+ *     var buttonSelect=new OO.ui.ButtonSelectWidget( {
+ *         items: [option1, option2, option3]
+ *     } );
+ *     $('body').append(buttonSelect.$element);
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.SelectWidget
@@ -13189,9 +13641,34 @@ OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
 OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.TabIndexedElement );
 
 /**
- * Select widget containing radio button options.
+ * RadioSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains radio
+ * options and is used together with OO.ui.RadioOptionWidget. The RadioSelectWidget provides
+ * an interface for adding, removing and selecting options.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
  *
- * Use together with OO.ui.RadioOptionWidget.
+ *     @example
+ *     // A RadioSelectWidget with RadioOptions.
+ *     var option1 = new OO.ui.RadioOptionWidget( {
+ *         data: 'a',
+ *         label: 'Selected radio option'
+ *     } );
+ *
+ *     var option2 = new OO.ui.RadioOptionWidget( {
+ *         data: 'b',
+ *         label: 'Unselected radio option'
+ *     } );
+ *
+ *     var radioSelect=new OO.ui.RadioSelectWidget( {
+ *         items: [option1, option2]
+ *      } );
+ *
+ *     // Select 'option 1' using the RadioSelectWidget's selectItem() method.
+ *     radioSelect.selectItem( option1 );
+ *
+ *     $('body').append(radioSelect.$element);
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+
  *
  * @class
  * @extends OO.ui.SelectWidget
@@ -13223,12 +13700,24 @@ OO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );
 OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.TabIndexedElement );
 
 /**
- * Overlaid menu of options.
+ * MenuSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains options and
+ * is used together with OO.ui.MenuOptionWidget. See {@link OO.ui.DropdownWidget DropdownWidget} and
+ * {@link OO.ui.ComboBoxWidget ComboBoxWidget} for examples of interfaces that contain menus.
+ * MenuSelectWidgets themselves are not designed to be instantiated directly, rather subclassed
+ * and customized to be opened, closed, and displayed as needed.
+ *
+ * By default, menus are clipped to the visible viewport and are not visible when a user presses the
+ * mouse outside the menu.
+ *
+ * Menus also have support for keyboard interaction:
  *
- * Menus are clipped to the visible viewport. They do not provide a control for opening or closing
- * the menu.
+ * - Enter/Return key: choose and select a menu option
+ * - Up-arrow key: highlight the previous menu option
+ * - Down-arrow key: highlight the next menu option
+ * - Esc key: hide the menu
  *
- * Use together with OO.ui.MenuOptionWidget.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.SelectWidget
@@ -13279,6 +13768,7 @@ OO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.ClippableElement );
 /**
  * Handles document mouse down events.
  *
+ * @protected
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {
@@ -13468,11 +13958,17 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
  * @extends OO.ui.MenuSelectWidget
  *
  * @constructor
- * @param {OO.ui.TextInputWidget} input Text input widget to provide menu for
+ * @param {OO.ui.TextInputWidget} inputWidget Text input widget to provide menu for
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$container=input.$element] Element to render menu under
  */
-OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( input, config ) {
+OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( inputWidget, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( inputWidget ) && config === undefined ) {
+               config = inputWidget;
+               inputWidget = config.inputWidget;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -13480,8 +13976,8 @@ OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( input,
        OO.ui.TextInputMenuSelectWidget.super.call( this, config );
 
        // Properties
-       this.input = input;
-       this.$container = config.$container || this.input.$element;
+       this.inputWidget = inputWidget;
+       this.$container = config.$container || this.inputWidget.$element;
        this.onWindowResizeHandler = this.onWindowResize.bind( this );
 
        // Initialization
index 0b61721..cf5a616 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.1.4 optimised for jQuery
+ * OOjs v1.1.5 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-01-23T20:11:25Z
+ * Date: 2015-02-26T01:51:06Z
  */
 ( function ( global ) {
 
@@ -301,8 +301,12 @@ oo.compare = function ( a, b, asymmetrical ) {
        a = a || {};
        b = b || {};
 
+       if ( typeof a.nodeType === 'number' && typeof a.isEqualNode === 'function' ) {
+               return a.isEqualNode( b );
+       }
+
        for ( k in a ) {
-               if ( !hasOwn.call( a, k ) || a[k] === undefined ) {
+               if ( !hasOwn.call( a, k ) || a[k] === undefined || a[k] === b[k] ) {
                        // Support es3-shim: Without the hasOwn filter, comparing [] to {} will be false in ES3
                        // because the shimmed "forEach" is enumerable and shows up in Array but not Object.
                        // Also ignore undefined values, because there is no conceptual difference between
@@ -319,7 +323,7 @@ oo.compare = function ( a, b, asymmetrical ) {
                                ( aType === 'string' || aType === 'number' || aType === 'boolean' ) &&
                                aValue !== bValue
                        ) ||
-                       ( aValue === Object( aValue ) && !oo.compare( aValue, bValue, asymmetrical ) ) ) {
+                       ( aValue === Object( aValue ) && !oo.compare( aValue, bValue, true ) ) ) {
                        return false;
                }
        }
@@ -622,11 +626,11 @@ oo.isPlainObject = $.isPlainObject;
         */
        oo.EventEmitter.prototype.once = function ( event, listener ) {
                var eventEmitter = this,
-                       listenerWrapper = function () {
-                               eventEmitter.off( event, listenerWrapper );
-                               listener.apply( eventEmitter, Array.prototype.slice.call( arguments, 0 ) );
+                       wrapper = function () {
+                               eventEmitter.off( event, wrapper );
+                               return listener.apply( this, arguments );
                        };
-               return this.on( event, listenerWrapper );
+               return this.on( event, wrapper );
        };
 
        /**
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less b/resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less
new file mode 100644 (file)
index 0000000..1f0c626
--- /dev/null
@@ -0,0 +1,14 @@
+@import "mediawiki.mixins";
+
+.mw-category {
+       .column-count(1);
+
+       .mw-category-group {
+               .column-break-inside(avoid);
+       }
+}
+@media screen and ( min-width: 768px ) {
+       .mw-category {
+               .column-count(3);
+       }
+}
index 7d4c61c..349a721 100644 (file)
        -webkit-box-shadow: @value; // Safari 3.1-5.0, iOS 3.2-4.3, Android 2.1-3.0
        box-shadow: @value; // Chrome 10+, Firefox 4+, IE 9+, Safari 5.1+, Opera 11+, iOS 5+, Android 4+
 }
+
+.column-count(@value) {
+       -webkit-column-count: @value;
+       -moz-column-count: @value;
+       -o-column-count: @value;
+       column-count: @value;
+}
+
+.column-break-inside(@value) {
+       -webkit-column-break-inside: @value; // Chrome Any, Safari 3+, Opera 11.1+
+       page-break-inside: @value; // Firefox 1.5+
+       break-inside: @value; // IE 10+
+}
index 43c6422..2e78c1c 100644 (file)
                 */
                loader: ( function () {
 
+                       /**
+                        * Fired via mw.track on various resource loading errors.
+                        *
+                        * @event resourceloader_exception
+                        * @param {Error|Mixed} e The error that was thrown. Almost always an Error
+                        *   object, but in theory module code could manually throw something else, and that
+                        *   might also end up here.
+                        * @param {string} [module] Name of the module which caused the error. Omitted if the
+                        *   error is not module-related or the module cannot be easily identified due to
+                        *   batched handling.
+                        * @param {string} source Source of the error. Possible values:
+                        *   - style: stylesheet error (only affects old IE where a special style loading method
+                        *     is used)
+                        *   - load-callback: exception thrown by user callback
+                        *   - module-execute: exception thrown by module code
+                        */
+
                        /**
                         * Mapping of registered modules.
                         *
                                // Makes sure that cssText containing `@import`
                                // rules will end up in a new stylesheet (as those only work when
                                // placed at the start of a stylesheet; bug 35562).
-                               return cssText.indexOf( '@import' ) === -1;
+                               return cssText.slice( 0, '@import'.length ) !== '@import';
                        }
 
                        /**
                                                                styleEl.styleSheet.cssText += cssText;
                                                        } catch ( e ) {
                                                                log( 'Stylesheet error', e );
+                                                               mw.track( 'resourceloader.exception', { exception: e, source: 'stylesheet' } );
                                                        }
                                                } else {
                                                        styleEl.appendChild( document.createTextNode( cssText ) );
                                                        // A user-defined callback raised an exception.
                                                        // Swallow it to protect our state machine!
                                                        log( 'Exception thrown by user callback', e );
+                                                       mw.track( 'resourceloader.exception',
+                                                               { exception: e, module: module, source: 'load-callback' } );
                                                }
                                        }
                                }
                                                // and not in debug mode, such as when a symbol that should be global isn't exported
                                                log( 'Exception thrown by ' + module, e );
                                                registry[module].state = 'error';
+                                               mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'module-execute' } );
                                                handlePending( module );
                                        }
                                }
index 1a8fe0a..c2a6f3a 100644 (file)
@@ -1,45 +1,45 @@
 /* Anchors for section headings */
 .mw-headline-anchor {
-    font-weight: normal;
-    margin-left: -14px;
-    width: 14px;
-    filter: alpha(opacity=0);
-    opacity: 0;
-    position: absolute;
-    text-align: center;
-    text-decoration: none;
-    -moz-user-select: none;
-    -webkit-user-select: none;
-    user-select: none;
+       font-weight: normal;
+       margin-left: -14px;
+       width: 14px;
+       filter: alpha(opacity=0);
+       opacity: 0;
+       position: absolute;
+       text-align: center;
+       text-decoration: none;
+       -moz-user-select: none;
+       -webkit-user-select: none;
+       user-select: none;
 }
 
 /* @noflip */
 .mw-content-ltr .mw-headline-anchor,
 .mw-content-rtl .mw-content-ltr .mw-headline-anchor {
-    margin-left: -14px;
-    margin-right: 0;
+       margin-left: -14px;
+       margin-right: 0;
 }
 
 /* @noflip */
 .mw-content-rtl .mw-headline-anchor,
 .mw-content-ltr .mw-content-rtl .mw-headline-anchor {
-    margin-left: 0;
-    margin-right: -14px;
+       margin-left: 0;
+       margin-right: -14px;
 }
 
 .mw-headline-anchor,
 .mw-headline-anchor:visited {
-    color: #888;
+       color: #888;
 }
 
 .mw-headline-anchor:hover,
 .mw-headline-anchor:focus {
-    color: #555;
-    text-decoration: none;
+       color: #555;
+       text-decoration: none;
 }
 
 .mw-headline-anchor:active {
-    color: #000;
+       color: #000;
 }
 
 .mw-body h1:hover .mw-headline-anchor,
@@ -54,6 +54,6 @@
 .mw-body h4:focus .mw-headline-anchor,
 .mw-body h5:focus .mw-headline-anchor,
 .mw-body h6:focus .mw-headline-anchor {
-    filter: alpha(opacity=100);
-    opacity: 1;
+       filter: alpha(opacity=100);
+       opacity: 1;
 }
index a7695cc..33443c9 100644 (file)
@@ -1,4 +1,4 @@
 /* Hide section anchor from print media */
 .mw-headline-anchor {
-    display: none;
+       display: none;
 }
index b85516c..b891676 100644 (file)
@@ -2861,7 +2861,7 @@ File:foobar.jpg
 !! html
  a <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" /></a></div></div>
+                       <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>
@@ -2873,7 +2873,7 @@ File:foobar.jpg
 <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" /></a></div>
+<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>
@@ -3966,19 +3966,31 @@ Definition Lists: colons occurring in tags
 ;<i>a:b</i>
 ;<span>a:b</span>
 ;<div>a:b</div>
+;<div>a
+:b</div>
 ;{{echo|a:b}}
 ;{{echo|''a:b''}}
-!! html
-<dl><dt>a</dt>
+!! html+tidy
+<dl>
+<dt>a</dt>
 <dd>b</dd>
 <dt><b>a:b</b></dt>
 <dt><i>a:b</i></dt>
 <dt><span>a:b</span></dt>
-<dt><div>a:b</div></dt>
+<dd>
+<div>a:b</div>
+</dd>
+<dd>
+<div>a
+<dl>
+<dd>b</dd>
+</dl>
+</div>
+</dd>
 <dt>a</dt>
 <dd>b</dd>
-<dt><i>a:b</i></dt></dl>
-
+<dt><i>a:b</i></dt>
+</dl>
 !! end
 
 !! test
@@ -16809,19 +16821,19 @@ image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 105px"><div style="width: 105px">
-                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 </p>
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 105px"><div style="width: 105px">
-                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 105px"><div style="width: 105px">
-                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>Blabla|blabla.
 </p>
@@ -16842,17 +16854,17 @@ image:foobar.jpg|link=Main Page#section|caption
 !! 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/Main_Page"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page"><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>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><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>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" 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>
@@ -16872,14 +16884,14 @@ File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt
 !! 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="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><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><a href="/wiki/File:Foobar.jpg" class="image" title="desc"><img alt="inneralt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
 </p>
                        </div>
                </div></li>
                <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="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><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>This is a test template
 </p>
@@ -16916,7 +16928,7 @@ caption
                        </div>
                </div></li>
                <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="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" 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><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
 some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
@@ -16924,7 +16936,7 @@ some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
                        </div>
                </div></li>
                <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" /></a></div></div>
+                       <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">
 <p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
 </p>
@@ -16956,12 +16968,12 @@ foobar.jpg
                        </div>
                </div></li>
                <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" /></a></div></div>
+                       <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>
                <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" /></a></div></div>
+                       <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>
@@ -19482,7 +19494,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
 !! 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/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><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>
@@ -19501,7 +19513,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
 !! 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" /></a></div></div>
+                       <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>
@@ -19520,7 +19532,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascri
 !! 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" /></a></div></div>
+                       <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>
@@ -19539,7 +19551,7 @@ File:foobar.jpg|link=<
 !! 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" /></a></div></div>
+                       <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>
@@ -20164,7 +20176,7 @@ This should just get lost.
 B <span about="#mwt4" class="reference" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"src\":\"&amp;lt;ref name=\\\"a\\\">foo&amp;lt;/ref>\",\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_1-0">↑</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> bar</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_1-0">↑</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> bar</li>
 </ol>
 !!end
 
@@ -20197,7 +20209,7 @@ B <span about="#mwt4" class="reference" id="cite_ref-b_2-0" rel="dc:references"
 
 <ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> foo bar for a</li></ol>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"src\":\"&amp;lt;ref name=\\\"b\\\">foo&amp;lt;/ref>\",\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\">[X 1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> foo</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\">[X 1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> foo</li></ol>
 !! end
 
 !! test
@@ -20224,11 +20236,11 @@ parsoid
 A <ref>foo</ref>
 B <ref group="inexistent">bar</ref>
 !! html
-<p>A <span class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B <span class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"inexistent"}}'><a href="#cite_note-2">[inexistent 1]</a></span></</p>
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B <span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"inexistent"}}'><a href="#cite_note-2">[inexistent 1]</a></span></</p>
+<ol about="#mwt5" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
 <li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> foo</li>
 </ol>
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"inexistent"}}'>
+<ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"inexistent"}}'>
 <li id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> bar</li>
 </ol>
 !! end
@@ -21742,12 +21754,14 @@ parsoid
 !! test
 2. other tags
 !! wikitext
-<nowiki><div>foo</div>
-<div style="color:red">foo</div></nowiki>
+* <nowiki><div>foo</div></nowiki>
+* <nowiki><div style="color:red">foo</div></nowiki>
+* <nowiki><td></nowiki>
 !! html
-<p>&lt;div&gt;foo&lt;/div&gt;
-&lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;
-</p>
+<ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
+<li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
+<li> &lt;td&gt;</li></ul>
+
 !! end
 
 !! test
index c3cb193..860529e 100644 (file)
@@ -332,8 +332,8 @@ class UserTest extends MediaWikiTestCase {
        public function testGetCanonicalName( $name, $expectedArray, $msg ) {
                foreach ( $expectedArray as $validate => $expected ) {
                        $this->assertEquals(
-                               User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
                                $expected,
+                               User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
                                $msg . ' (' . $validate . ')'
                        );
                }
@@ -341,7 +341,7 @@ class UserTest extends MediaWikiTestCase {
 
        public static function provideGetCanonicalName() {
                return array(
-                       array( ' trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
+                       array( ' Trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
                        // @todo FIXME: Maybe the creatable name should be 'Talk:Username' or false to reject?
                        array( 'Talk:Username', array( 'creatable' => 'Username', 'usable' => 'Username',
                                'valid' => 'Username', 'false' => 'Talk:Username' ), 'Namespace prefix' ),
index 7c2ba1a..e00a45a 100644 (file)
@@ -35,6 +35,7 @@ class RecentChangeTest extends MediaWikiTestCase {
         * Should cover the following log actions (which are most commonly used by bots):
         * - block/block
         * - block/unblock
+        * - block/reblock
         * - delete/delete
         * - delete/restore
         * - newusers/create
@@ -63,9 +64,13 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # block/block
                $this->assertIRCComment(
-                       $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                               . $sep . $this->user_comment,
                        'block', 'block',
-                       array(),
+                       array(
+                               '5::duration' => 'duration',
+                               '6::flags' => 'flags',
+                       ),
                        $this->user_comment
                );
                # block/unblock
@@ -75,6 +80,17 @@ class RecentChangeTest extends MediaWikiTestCase {
                        array(),
                        $this->user_comment
                );
+               # block/reblock
+               $this->assertIRCComment(
+                       $this->context->msg( 'reblock-logentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                               . $sep . $this->user_comment,
+                       'block', 'reblock',
+                       array(
+                               '5::duration' => 'duration',
+                               '6::flags' => 'flags',
+                       ),
+                       $this->user_comment
+               );
        }
 
        /**
index fe46f2c..e660e09 100644 (file)
@@ -89,65 +89,4 @@ class ParserOutputTest extends MediaWikiTestCase {
                $this->assertArrayNotHasKey( 'foo', $properties );
        }
 
-       /**
-        * @covers ParserOutput::hasCustomDataUpdates
-        * @covers ParserOutput::addSecondaryDataUpdate
-        */
-       public function testHasCustomDataUpdates() {
-               $po = new ParserOutput();
-               $this->assertFalse( $po->hasCustomDataUpdates() );
-
-               $dataUpdate = $this->getMock( 'DataUpdate' );
-               $po->addSecondaryDataUpdate( $dataUpdate );
-               $this->assertTrue( $po->hasCustomDataUpdates() );
-       }
-
-       /**
-        * @covers ParserOutput::getSecondaryDataUpdates
-        * @covers ParserOutput::addSecondaryDataUpdate
-        */
-       public function testGetSecondaryDataUpdates() {
-               // NOTE: getSecondaryDataUpdates always returns a LinksUpdate object
-               // in addition to the DataUpdates registered via addSecondaryDataUpdate().
-
-               $title = Title::makeTitle( NS_MAIN, 'Dummy' );
-               $title->resetArticleID( 7777777 );
-
-               $po = new ParserOutput();
-               $this->assertCount( 1, $po->getSecondaryDataUpdates( $title ) );
-
-               $dataUpdate = $this->getMock( 'DataUpdate' );
-               $po->addSecondaryDataUpdate( $dataUpdate );
-               $this->assertCount( 2, $po->getSecondaryDataUpdates( $title ) );
-
-               // Test Fallback to getTitleText
-               $this->insertPage( 'Project:ParserOutputTestDummyPage' );
-               $po->setTitleText( 'Project:ParserOutputTestDummyPage' );
-               $this->assertCount( 2, $po->getSecondaryDataUpdates() );
-       }
-
-       /**
-        * @covers ParserOutput::getSecondaryDataUpdates
-        * @covers ParserOutput::__sleep
-        */
-       public function testGetSecondaryDataUpdates_serialization() {
-               $title = Title::makeTitle( NS_MAIN, 'Dummy' );
-               $title->resetArticleID( 7777777 );
-
-               $po = new ParserOutput();
-
-               // Serializing is fine with no custom DataUpdates.
-               $po = unserialize( serialize( $po ) );
-               $this->assertCount( 1, $po->getSecondaryDataUpdates( $title ) );
-
-               // If there are custom DataUpdates, getSecondaryDataUpdates
-               // should fail after serialization.
-               $dataUpdate = $this->getMock( 'DataUpdate' );
-               $po->addSecondaryDataUpdate( $dataUpdate );
-               $po = unserialize( serialize( $po ) );
-
-               $this->setExpectedException( 'MWException' );
-               $po->getSecondaryDataUpdates( $title );
-       }
-
 }
index 421cab5..1b24628 100644 (file)
@@ -5,14 +5,20 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
        /**
         * @covers ExtensionRegistry::exportExtractedData
         * @dataProvider provideExportExtractedDataGlobals
-        * @@backupGlobals enabled
         */
        public function testExportExtractedDataGlobals( $desc, $before, $globals, $expected ) {
+               // Set globals for test
                if ( $before ) {
                        foreach ( $before as $key => $value ) {
-                               $GLOBALS[$key] = $value;
+                               // mw prefixed globals does not exist normally
+                               if ( substr( $key, 0, 2 ) == 'mw' ) {
+                                       $GLOBALS[$key] = $value;
+                               } else {
+                                       $this->setMwGlobals( $key, $value );
+                               }
                        }
                }
+
                $info = array(
                        'globals' => $globals,
                        'callbacks' => array(),
@@ -29,6 +35,15 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                        $this->assertArrayHasKey( $name, $GLOBALS, $desc );
                        $this->assertEquals( $value, $GLOBALS[$name], $desc );
                }
+
+               // Remove mw prefixed globals
+               if ( $before ) {
+                       foreach ( $before as $key => $value ) {
+                               if ( substr( $key, 0, 2 ) == 'mw' ) {
+                                       unset( $GLOBALS[$key] );
+                               }
+                       }
+               }
        }
 
        public static function provideExportExtractedDataGlobals() {
diff --git a/tests/phpunit/includes/site/HashSiteStoreTest.php b/tests/phpunit/includes/site/HashSiteStoreTest.php
new file mode 100644 (file)
index 0000000..caa33fb
--- /dev/null
@@ -0,0 +1,106 @@
+<?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
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @group Site
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class HashSiteStoreTest extends MediaWikiTestCase {
+
+       /**
+        * @covers HashSiteStore::getSites
+        */
+       public function testGetSites() {
+               $expectedSites = array();
+
+               foreach( TestSites::getSites() as $testSite ) {
+                       $siteId = $testSite->getGlobalId();
+                       $expectedSites[$siteId] = $testSite;
+               }
+
+               $siteStore = new HashSiteStore( $expectedSites );
+
+               $this->assertEquals( new SiteList( $expectedSites ), $siteStore->getSites() );
+       }
+
+       /**
+        * @covers HashSiteStore::saveSite
+        * @covers HashSiteStore::getSite
+        */
+       public function testSaveSite() {
+               $store = new HashSiteStore();
+
+               $site = new Site();
+               $site->setGlobalId( 'dewiki' );
+
+               $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+
+               $store->saveSite( $site );
+
+               $this->assertCount( 1, $store->getSites(), 'Store has 1 sites' );
+               $this->assertEquals( $site, $store->getSite( 'dewiki' ), 'Store has dewiki' );
+       }
+
+       /**
+        * @covers HashSiteStore::saveSites
+        */
+       public function testSaveSites() {
+               $store = new HashSiteStore();
+
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'enwiki' );
+               $site->setLanguageCode( 'en' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'eswiki' );
+               $site->setLanguageCode( 'es' );
+               $sites[] = $site;
+
+               $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+
+               $store->saveSites( $sites );
+
+               $this->assertCount( 2, $store->getSites(), 'Store has 2 sites' );
+               $this->assertTrue( $store->getSites()->hasSite( 'enwiki' ), 'Store has enwiki' );
+               $this->assertTrue( $store->getSites()->hasSite( 'eswiki' ), 'Store has eswiki' );
+       }
+
+       /**
+        * @covers HashSiteStore::clear
+        */
+       public function testClear() {
+               $store = new HashSiteStore();
+
+               $site = new Site();
+               $site->setGlobalId( 'arwiki' );
+               $store->saveSite( $site );
+
+               $this->assertCount( 1, $store->getSites(), '1 site in store' );
+
+               $store->clear();
+               $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+       }
+}
index 2396ea2..16a9f3a 100644 (file)
@@ -91,6 +91,10 @@ class ResourcesTest extends MediaWikiTestCase {
                foreach ( $data['modules'] as $moduleName => $module ) {
                        $moduleTargets = $module->getTargets();
                        foreach ( $module->getDependencies() as $dep ) {
+                               if ( !isset( $data['modules'][$dep] ) ) {
+                                       // Missing dependencies reported by testMissingDependencies
+                                       continue;
+                               }
                                $targets = $data['modules'][$dep]->getTargets();
                                foreach ( $moduleTargets as $moduleTarget ) {
                                        $this->assertContains(