Merge "Tweaked TempFSFile::bind() param type docs"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 7 May 2015 19:55:13 +0000 (19:55 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 7 May 2015 19:55:13 +0000 (19:55 +0000)
311 files changed:
RELEASE-NOTES-1.25
RELEASE-NOTES-1.26
autoload.php
composer.json
docs/extension.schema.json
docs/hooks.txt
includes/Block.php
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/Linker.php
includes/MediaWiki.php
includes/Setup.php
includes/Title.php
includes/User.php
includes/WatchedItem.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiHelp.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedRevisions.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTokens.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/i18n/cs.json
includes/api/i18n/es.json
includes/api/i18n/gl.json
includes/api/i18n/it.json
includes/api/i18n/ja.json
includes/api/i18n/ksh.json
includes/api/i18n/lb.json
includes/api/i18n/mk.json
includes/api/i18n/pl.json
includes/api/i18n/zh-hant.json
includes/changetags/ChangeTags.php
includes/db/DatabaseMysqli.php
includes/debug/logger/LegacyLogger.php
includes/exception/BadTitleError.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLTextField.php
includes/htmlform/VFormHTMLForm.php
includes/installer/WebInstallerOutput.php
includes/installer/i18n/ast.json
includes/installer/i18n/ce.json
includes/installer/i18n/cs.json
includes/installer/i18n/en-gb.json
includes/installer/i18n/fr.json
includes/installer/i18n/id.json
includes/installer/i18n/nb.json
includes/installer/i18n/nl.json
includes/installer/i18n/tr.json
includes/installer/i18n/vi.json
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/JobSpecification.php
includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
includes/jobqueue/jobs/ActivityUpdateJob.php [new file with mode: 0644]
includes/jobqueue/jobs/EnqueueJob.php
includes/libs/objectcache/ReplicatedBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/WANObjectCache.php
includes/logging/LogFormatter.php
includes/logging/LogPager.php
includes/media/DjVu.php
includes/objectcache/ReplicatedBagOStuff.php [deleted file]
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/ParserCache.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/search/SearchEngine.php
includes/skins/SkinTemplate.php
includes/specialpage/QueryPage.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialVersion.php
includes/title/MalformedTitleException.php
includes/title/MediaWikiTitleCodec.php
languages/Names.php
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/arc.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/avk.json
languages/i18n/awa.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bgn.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/bpy.json
languages/i18n/br.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/cy.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fur.json
languages/i18n/ga.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gl.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/he.json
languages/i18n/hif-latn.json
languages/i18n/hu.json
languages/i18n/id.json
languages/i18n/ig.json
languages/i18n/inh.json
languages/i18n/io.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/kab.json
languages/i18n/kk-arab.json
languages/i18n/kk-latn.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/kw.json
languages/i18n/ky.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/mdf.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pdc.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/qqq.json
languages/i18n/rm.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sc.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/stq.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/tg-latn.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/tyv.json
languages/i18n/ug-arab.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vro.json
languages/i18n/war.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesBh.php [deleted file]
maintenance/cleanupRemovedModules.php
maintenance/cleanupTable.inc
maintenance/convertExtensionToRegistration.php
maintenance/generateJsonI18n.php
maintenance/populateCategory.php
maintenance/rebuildImages.php
maintenance/update.php
maintenance/updateCollation.php
maintenance/waitForSlave.php
resources/Resources.php
resources/lib/oojs-ui/i18n/ps.json
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json
resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
resources/lib/oojs-ui/themes/mediawiki/icons.json
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/indicators.json
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.notification.common.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.notification.css
resources/src/startup.js
tests/TestsAutoLoader.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/logging/BlockLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/DeleteLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/LogFormatterTestCase.php [new file with mode: 0644]
tests/phpunit/includes/logging/MergeLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/MoveLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/NewUsersLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/PageLangLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/PatrolLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/RightsLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/UploadLogFormatterTest.php [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js
tests/qunit/suites/resources/startup.test.js

index 8bc51be..e91a02e 100644 (file)
@@ -47,6 +47,8 @@ production.
   be installed and running for any such queues to work.
 * $wgAutopromoteOnce no longer supports the 'view' event. For keeping some
   compatibility, any 'view' event triggers will still trigger on 'edit'.
+* $wgExtensionDirectory was added for when your extensions directory is somewhere
+  other than $IP/extensions (as $wgStyleDirectory does with the skins directory).
 
 === New features in 1.25 ===
 * (T64861) Updated plural rules to CLDR 26. Includes incompatible changes
@@ -376,6 +378,11 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
+* Languages added:
+** awa (अवधी / Awadhi), thanks to translator 1AnuraagPandey;
+** bgn (بلوچی رخشانی / Western Balochi), thanks to translators
+   Baloch Afghanistan, Ibrahim khashrowdi and Rachitrali;
+** ses (Koyraboro Senni), thanks to translator Songhay.
 * (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's
   interface language to kk where unexpected.
 * The Chinese conversion table was substantially updated to fix a lot of
index 0b3f29c..8a08f02 100644 (file)
@@ -35,6 +35,9 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
+* BREAKING CHANGE (T91240): Language code "bh" is not valid in ISO 639 and
+  was removed, so it will no longer alias to "bho". If you used "bh" as your
+  wiki's $wgLanguageCode, you must update your configuration.
 
 === Other changes in 1.26 ===
 * ChangeTags::tagDescription() will return false if the interface message
index 81ee8b1..6c623a3 100644 (file)
@@ -993,7 +993,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',
+       'ReplicatedBagOStuff' => __DIR__ . '/includes/libs/objectcache/ReplicatedBagOStuff.php',
        'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
        'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
        'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
index 3ea2f22..6dc72e7 100644 (file)
@@ -20,7 +20,7 @@
                "ext-iconv": "*",
                "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.12",
-               "oojs/oojs-ui": "0.11.0",
+               "oojs/oojs-ui": "0.11.1",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
index d1b982c..8e8b23b 100644 (file)
                        "type": "object",
                        "description": "Flags (letter symbols) shown on RecentChanges pages"
                },
+               "MediaHandlers": {
+                       "type": "object",
+                       "description": "Plugins for media file type handling. Each entry in the array maps a MIME type to a PHP class name."
+               },
                "ExtensionFunctions": {
                        "type": [
                                "array",
                "config": {
                        "type": "object",
                        "description": "Configuration options for this extension"
+               },
+               "ParserTestFiles": {
+                       "type": "array",
+                       "description": "Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
                }
        }
 }
index 6e00363..99a9d33 100644 (file)
@@ -420,6 +420,8 @@ $module: ApiBase Module object
 $module: ApiBase Module object
 &$help: Array of HTML strings to be joined for the output.
 $options: Array Options passed to ApiHelp::getHelp
+&$tocData: Array If a TOC is being generated, this array has keys as anchors in
+the page and values as for Linker::generateTOC().
 
 'ApiMain::moduleManager': Called when ApiMain has finished initializing its
 module manager. Can be used to conditionally register API modules.
index 7666751..d582201 100644 (file)
@@ -371,7 +371,7 @@ class Block {
                $this->mTimestamp = wfTimestamp( TS_MW, $row->ipb_timestamp );
                $this->mAuto = $row->ipb_auto;
                $this->mHideName = $row->ipb_deleted;
-               $this->mId = $row->ipb_id;
+               $this->mId = (int)$row->ipb_id;
                $this->mParentBlockId = $row->ipb_parent_block_id;
 
                // I wish I didn't have to do this
index 28bead7..2b3bce5 100644 (file)
@@ -220,12 +220,19 @@ $wgLocalStylePath = false;
  */
 $wgExtensionAssetsPath = false;
 
+/**
+ * Filesystem extensions directory.
+ * Defaults to "{$IP}/extensions".
+ * @since 1.25
+ */
+$wgExtensionDirectory = "{$IP}/extensions";
+
 /**
  * Filesystem stylesheets directory.
  * Defaults to "{$IP}/skins".
  * @since 1.3
  */
-$wgStyleDirectory = false;
+$wgStyleDirectory = "{$IP}/skins";
 
 /**
  * The URL path for primary article page views. This path should contain $1,
@@ -1587,6 +1594,15 @@ $wgEnotifMaxRecips = 500;
  */
 $wgEnotifUseJobQ = false;
 
+/**
+ * Use the job queue for user activity updates like updating "last visited"
+ * fields for email notifications of page changes. This should only be enabled
+ * if the jobs have a dedicated runner to avoid update lag.
+ *
+ * @since 1.26
+ */
+$wgActivityUpdatesUseJobQueue = false;
+
 /**
  * Use real name instead of username in e-mail "from" field.
  */
@@ -1844,11 +1860,11 @@ $wgDBerrorLog = false;
  *
  * @par Examples:
  * @code
- * $wgLocaltimezone = 'UTC';
- * $wgLocaltimezone = 'GMT';
- * $wgLocaltimezone = 'PST8PDT';
- * $wgLocaltimezone = 'Europe/Sweden';
- * $wgLocaltimezone = 'CET';
+ * $wgDBerrorLogTZ = 'UTC';
+ * $wgDBerrorLogTZ = 'GMT';
+ * $wgDBerrorLogTZ = 'PST8PDT';
+ * $wgDBerrorLogTZ = 'Europe/Sweden';
+ * $wgDBerrorLogTZ = 'CET';
  * @endcode
  *
  * @since 1.20
@@ -6484,6 +6500,7 @@ $wgJobClasses = array(
        'ThumbnailRender' => 'ThumbnailRenderJob',
        'recentChangesUpdate' => 'RecentChangesUpdateJob',
        'refreshLinksPrioritized' => 'RefreshLinksJob', // for cascading protection
+       'activityUpdateJob' => 'ActivityUpdateJob',
        'enqueue' => 'EnqueueJob', // local queue for multi-DC setups
        'null' => 'NullJob'
 );
index 23a8bbb..6eaeb25 100644 (file)
@@ -170,13 +170,13 @@ if ( !function_exists( 'hash_equals' ) ) {
  * This queues an extension to be loaded through
  * the ExtensionRegistry system.
  *
- * @param string $name Name of the extension to load
+ * @param string $ext Name of the extension to load
  * @param string|null $path Absolute path of where to find the extension.json file
  */
-function wfLoadExtension( $name, $path = null ) {
+function wfLoadExtension( $ext, $path = null ) {
        if ( !$path ) {
-               global $IP;
-               $path = "$IP/extensions/$name/extension.json";
+               global $wgExtensionDirectory;
+               $path = "$wgExtensionDirectory/$ext/extension.json";
        }
        ExtensionRegistry::getInstance()->queue( $path );
 }
@@ -194,10 +194,10 @@ function wfLoadExtension( $name, $path = null ) {
  * @param string[] $exts Array of extension names to load
  */
 function wfLoadExtensions( array $exts ) {
-       global $IP;
+       global $wgExtensionDirectory;
        $registry = ExtensionRegistry::getInstance();
        foreach ( $exts as $ext ) {
-               $registry->queue( "$IP/extensions/$ext/extension.json" );
+               $registry->queue( "$wgExtensionDirectory/$ext/extension.json" );
        }
 }
 
@@ -205,13 +205,13 @@ function wfLoadExtensions( array $exts ) {
  * Load a skin
  *
  * @see wfLoadExtension
- * @param string $name Name of the extension to load
+ * @param string $skin Name of the extension to load
  * @param string|null $path Absolute path of where to find the skin.json file
  */
-function wfLoadSkin( $name, $path = null ) {
+function wfLoadSkin( $skin, $path = null ) {
        if ( !$path ) {
-               global $IP;
-               $path = "$IP/skins/$name/skin.json";
+               global $wgStyleDirectory;
+               $path = "$wgStyleDirectory/$skin/skin.json";
        }
        ExtensionRegistry::getInstance()->queue( $path );
 }
@@ -223,10 +223,10 @@ function wfLoadSkin( $name, $path = null ) {
  * @param string[] $skins Array of extension names to load
  */
 function wfLoadSkins( array $skins ) {
-       global $IP;
+       global $wgStyleDirectory;
        $registry = ExtensionRegistry::getInstance();
        foreach ( $skins as $skin ) {
-               $registry->queue( "$IP/skins/$skin/skin.json" );
+               $registry->queue( "$wgStyleDirectory/$skin/skin.json" );
        }
 }
 
index b58daba..4a1aa87 100644 (file)
@@ -1709,9 +1709,10 @@ class Linker {
         * Currently unused.
         *
         * @param array $tree Return value of ParserOutput::getSections()
+        * @param string|Language|bool $lang Language for the toc title, defaults to user language
         * @return string HTML fragment
         */
-       public static function generateTOC( $tree ) {
+       public static function generateTOC( $tree, $lang = false ) {
                $toc = '';
                $lastLevel = 0;
                foreach ( $tree as $section ) {
@@ -1730,7 +1731,7 @@ class Linker {
                        $lastLevel = $section['toclevel'];
                }
                $toc .= self::tocLineEnd();
-               return self::tocList( $toc );
+               return self::tocList( $toc, $lang );
        }
 
        /**
index d0e81cf..b1d0738 100644 (file)
@@ -51,6 +51,7 @@ class MediaWiki {
        /**
         * Parse the request to get the Title object
         *
+        * @throws MalformedTitleException If a title has been provided by the user, but is invalid.
         * @return Title Title object to be $wgTitle
         */
        private function parseTitle() {
@@ -110,7 +111,10 @@ class MediaWiki {
                }
 
                if ( $ret === null || ( $ret->getDBkey() == '' && !$ret->isExternal() ) ) {
-                       $ret = SpecialPage::getTitleFor( 'Badtitle' );
+                       // If we get here, we definitely don't have a valid title; throw an exception.
+                       // Try to get detailed invalid title exception first, fall back to MalformedTitleException.
+                       Title::newFromTextThrow( $title );
+                       throw new MalformedTitleException( null, $title );
                }
 
                return $ret;
@@ -122,7 +126,11 @@ class MediaWiki {
         */
        public function getTitle() {
                if ( !$this->context->hasTitle() ) {
-                       $this->context->setTitle( $this->parseTitle() );
+                       try {
+                               $this->context->setTitle( $this->parseTitle() );
+                       } catch ( MalformedTitleException $ex ) {
+                               $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
+                       }
                }
                return $this->context->getTitle();
        }
@@ -174,6 +182,11 @@ class MediaWiki {
                        || $title->isSpecial( 'Badtitle' )
                ) {
                        $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
+                       try {
+                               $this->parseTitle();
+                       } catch ( MalformedTitleException $ex ) {
+                               throw new BadTitleError( $ex );
+                       }
                        throw new BadTitleError();
                }
 
@@ -219,6 +232,11 @@ class MediaWiki {
                                $output->redirect( $url, 301 );
                        } else {
                                $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
+                               try {
+                                       $this->parseTitle();
+                               } catch ( MalformedTitleException $ex ) {
+                                       throw new BadTitleError( $ex );
+                               }
                                throw new BadTitleError();
                        }
                // Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant
index b8139d9..7a33328 100644 (file)
@@ -74,9 +74,6 @@ if ( $wgStylePath === false ) {
 if ( $wgLocalStylePath === false ) {
        $wgLocalStylePath = "$wgScriptPath/skins";
 }
-if ( $wgStyleDirectory === false ) {
-       $wgStyleDirectory = "$IP/skins";
-}
 if ( $wgExtensionAssetsPath === false ) {
        $wgExtensionAssetsPath = "$wgScriptPath/extensions";
 }
@@ -565,6 +562,10 @@ if ( is_null( $wgLocalTZoffset ) ) {
        $wgLocalTZoffset = date( 'Z' ) / 60;
 }
 
+if ( !$wgDBerrorLogTZ ) {
+       $wgDBerrorLogTZ = $wgLocaltimezone;
+}
+
 // Useful debug output
 if ( $wgCommandLineMode ) {
        $wgRequest = new FauxRequest( array() );
index 7e2b39e..509fc27 100644 (file)
@@ -225,9 +225,11 @@ class Title {
        public static function newFromDBkey( $key ) {
                $t = new Title();
                $t->mDbkeyform = $key;
-               if ( $t->secureAndSplit() ) {
+
+               try {
+                       $t->secureAndSplit();
                        return $t;
-               } else {
+               } catch ( MalformedTitleException $ex ) {
                        return null;
                }
        }
@@ -266,6 +268,32 @@ class Title {
                        wfWarn( __METHOD__ . ': $text must be a string. This will throw an InvalidArgumentException in future.', 2 );
                }
 
+               try {
+                       return Title::newFromTextThrow( $text, $defaultNamespace );
+               } catch ( MalformedTitleException $ex ) {
+                       return null;
+               }
+       }
+
+       /**
+        * Like Title::newFromText(), but throws MalformedTitleException when the title is invalid,
+        * rather than returning null.
+        *
+        * The exception subclasses encode detailed information about why the title is invalid.
+        *
+        * @see Title::newFromText
+        *
+        * @since 1.25
+        * @param string $text Title text to check
+        * @param int $defaultNamespace
+        * @throws MalformedTitleException If the title is invalid
+        * @return Title
+        */
+       public static function newFromTextThrow( $text, $defaultNamespace = NS_MAIN ) {
+               if ( is_object( $text ) ) {
+                       throw new MWException( 'Title::newFromTextThrow given an object' );
+               }
+
                $cache = self::getTitleCache();
 
                /**
@@ -287,14 +315,11 @@ class Title {
                $t->mDbkeyform = str_replace( ' ', '_', $filteredText );
                $t->mDefaultNamespace = intval( $defaultNamespace );
 
-               if ( $t->secureAndSplit() ) {
-                       if ( $defaultNamespace == NS_MAIN ) {
-                               $cache->set( $text, $t );
-                       }
-                       return $t;
-               } else {
-                       return null;
+               $t->secureAndSplit();
+               if ( $defaultNamespace == NS_MAIN ) {
+                       $cache->set( $text, $t );
                }
+               return $t;
        }
 
        /**
@@ -323,9 +348,11 @@ class Title {
                }
 
                $t->mDbkeyform = str_replace( ' ', '_', $url );
-               if ( $t->secureAndSplit() ) {
+
+               try {
+                       $t->secureAndSplit();
                        return $t;
-               } else {
+               } catch ( MalformedTitleException $ex ) {
                        return null;
                }
        }
@@ -507,9 +534,11 @@ class Title {
 
                $t = new Title();
                $t->mDbkeyform = Title::makeName( $ns, $title, $fragment, $interwiki, true );
-               if ( $t->secureAndSplit() ) {
+
+               try {
+                       $t->secureAndSplit();
                        return $t;
-               } else {
+               } catch ( MalformedTitleException $ex ) {
                        return null;
                }
        }
@@ -3305,6 +3334,7 @@ class Title {
         * namespace prefixes, sets the other forms, and canonicalizes
         * everything.
         *
+        * @throws MalformedTitleException On invalid titles
         * @return bool True on success
         */
        private function secureAndSplit() {
@@ -3315,15 +3345,12 @@ class Title {
 
                $dbkey = $this->mDbkeyform;
 
-               try {
-                       // @note: splitTitleString() is a temporary hack to allow MediaWikiTitleCodec to share
-                       //        the parsing code with Title, while avoiding massive refactoring.
-                       // @todo: get rid of secureAndSplit, refactor parsing code.
-                       $titleParser = self::getTitleParser();
-                       $parts = $titleParser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
-               } catch ( MalformedTitleException $ex ) {
-                       return false;
-               }
+               // @note: splitTitleString() is a temporary hack to allow MediaWikiTitleCodec to share
+               //        the parsing code with Title, while avoiding massive refactoring.
+               // @todo: get rid of secureAndSplit, refactor parsing code.
+               $titleParser = self::getTitleParser();
+               // MalformedTitleException can be thrown here
+               $parts = $titleParser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
 
                # Fill fields
                $this->setFragment( '#' . $parts['fragment'] );
@@ -4208,10 +4235,12 @@ class Title {
         * If you want to know if a title can be meaningfully viewed, you should
         * probably call the isKnown() method instead.
         *
+        * @param int $flags An optional bit field; may be Title::GAID_FOR_UPDATE to check
+        *   from master/for update
         * @return bool
         */
-       public function exists() {
-               $exists = $this->getArticleID() != 0;
+       public function exists( $flags = 0 ) {
+               $exists = $this->getArticleID( $flags ) != 0;
                Hooks::run( 'TitleExists', array( $this, &$exists ) );
                return $exists;
        }
index 921d604..429ae0e 100644 (file)
@@ -3447,7 +3447,9 @@ class User implements IDBAccessObject {
                        $force = 'force';
                }
 
-               $this->getWatchedItem( $title )->resetNotificationTimestamp( $force, $oldid );
+               $this->getWatchedItem( $title )->resetNotificationTimestamp(
+                       $force, $oldid, WatchedItem::DEFERRED
+               );
        }
 
        /**
index 524e701..73b0b93 100644 (file)
  * @ingroup Watchlist
  */
 class WatchedItem {
-       /**
-        * Constant to specify that user rights 'editmywatchlist' and
-        * 'viewmywatchlist' should not be checked.
-        * @since 1.22
-        */
-       const IGNORE_USER_RIGHTS = 0;
-
-       /**
-        * Constant to specify that user rights 'editmywatchlist' and
-        * 'viewmywatchlist' should be checked.
-        * @since 1.22
-        */
-       const CHECK_USER_RIGHTS = 1;
-
        /** @var Title */
        public $mTitle;
 
@@ -59,6 +45,31 @@ class WatchedItem {
        /** @var string */
        private $timestamp;
 
+       /**
+        * Constant to specify that user rights 'editmywatchlist' and
+        * 'viewmywatchlist' should not be checked.
+        * @since 1.22
+        */
+       const IGNORE_USER_RIGHTS = 0;
+
+       /**
+        * Constant to specify that user rights 'editmywatchlist' and
+        * 'viewmywatchlist' should be checked.
+        * @since 1.22
+        */
+       const CHECK_USER_RIGHTS = 1;
+
+       /**
+        * Do DB master updates right now
+        * @since 1.26
+        */
+       const IMMEDIATE = 0;
+       /**
+        * Do DB master updates via the job queue
+        * @since 1.26
+        */
+       const DEFERRED = 1;
+
        /**
         * Create a WatchedItem object with the given user and title
         * @since 1.22 $checkRights parameter added
@@ -208,8 +219,13 @@ class WatchedItem {
         * @param bool $force Whether to force the write query to be executed even if the
         *    page is not watched or the notification timestamp is already NULL.
         * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
+        * @mode int $mode WatchedItem::DEFERRED/IMMEDIATE
         */
-       public function resetNotificationTimestamp( $force = '', $oldid = 0 ) {
+       public function resetNotificationTimestamp(
+               $force = '', $oldid = 0, $mode = self::IMMEDIATE
+       ) {
+               global $wgActivityUpdatesUseJobQueue;
+
                // Only loggedin user can have a watchlist
                if ( wfReadOnly() || $this->mUser->isAnon() || !$this->isAllowed( 'editmywatchlist' ) ) {
                        return;
@@ -258,11 +274,30 @@ class WatchedItem {
                        }
                }
 
-               // If the page is watched by the user (or may be watched), update the timestamp on any
-               // any matching rows
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->update( 'watchlist', array( 'wl_notificationtimestamp' => $notificationTimestamp ),
-                       $this->dbCond(), __METHOD__ );
+               // If the page is watched by the user (or may be watched), update the timestamp
+               if ( $mode === self::DEFERRED && $wgActivityUpdatesUseJobQueue ) {
+                       JobQueueGroup::singleton()->push(
+                               EnqueueJob::newFromLocalJobs( new JobSpecification(
+                                       'activityUpdateJob',
+                                       array(
+                                               'type'      => 'updateWatchlistNotification',
+                                               'userid'    => $this->getUserId(),
+                                               'notifTime' => $notificationTimestamp,
+                                               'curTime'   => time()
+                                       ),
+                                       array( 'removeDuplicates' => true ),
+                                       $title
+                               ) )
+                       );
+               } else {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->update( 'watchlist',
+                               array( 'wl_notificationtimestamp' => $notificationTimestamp ),
+                               $this->dbCond(),
+                               __METHOD__
+                       );
+               }
+
                $this->timestamp = null;
        }
 
index de4f977..203c687 100644 (file)
@@ -64,12 +64,12 @@ class InfoAction extends FormlessAction {
         * @param Title $title Title to clear cache for
         */
        public static function invalidateCache( Title $title ) {
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
 
                $revision = Revision::newFromTitle( $title, 0, Revision::READ_LATEST );
                if ( $revision !== null ) {
                        $key = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $revision->getId() );
-                       $wgMemc->delete( $key );
+                       $cache->delete( $key );
                }
        }
 
@@ -193,7 +193,7 @@ class InfoAction extends FormlessAction {
         * @return array
         */
        protected function pageInfo() {
-               global $wgContLang, $wgMemc;
+               global $wgContLang;
 
                $user = $this->getUser();
                $lang = $this->getLanguage();
@@ -201,16 +201,17 @@ class InfoAction extends FormlessAction {
                $id = $title->getArticleID();
                $config = $this->context->getConfig();
 
+               $cache = ObjectCache::getMainWANInstance();
                $memcKey = wfMemcKey( 'infoaction',
                        sha1( $title->getPrefixedText() ), $this->page->getLatest() );
-               $pageCounts = $wgMemc->get( $memcKey );
+               $pageCounts = $cache->get( $memcKey );
                $version = isset( $pageCounts['cacheversion'] ) ? $pageCounts['cacheversion'] : false;
                if ( $pageCounts === false || $version !== self::CACHE_VERSION ) {
                        // Get page information that would be too "expensive" to retrieve by normal means
                        $pageCounts = $this->pageCounts( $title );
                        $pageCounts['cacheversion'] = self::CACHE_VERSION;
 
-                       $wgMemc->set( $memcKey, $pageCounts );
+                       $cache->set( $memcKey, $pageCounts );
                }
 
                // Get page properties
index 2a449df..4870167 100644 (file)
@@ -2302,8 +2302,10 @@ abstract class ApiBase extends ContextSource {
         *
         * @param string[] &$help Array of help data
         * @param array $options Options passed to ApiHelp::getHelp
+        * @param array &$tocData If a TOC is being generated, this array has keys
+        *   as anchors in the page and values as for Linker::generateTOC().
         */
-       public function modifyHelp( array &$help, array $options ) {
+       public function modifyHelp( array &$help, array $options, array &$tocData ) {
        }
 
        /**@}*/
index 1e30616..27fc378 100644 (file)
@@ -82,6 +82,7 @@ class ApiHelp extends ApiBase {
         *  - submodules: (bool) Include help for submodules of the current module
         *  - recursivesubmodules: (bool) Include help for submodules recursively
         *  - helptitle: (string) Title to link for additional modules' help. Should contain $1.
+        *  - toc: (bool) Include a table of contents
         *
         * @param IContextSource $context
         * @param ApiBase[]|ApiBase $modules
@@ -97,6 +98,9 @@ class ApiHelp extends ApiBase {
 
                $out = $context->getOutput();
                $out->addModules( 'mediawiki.apihelp' );
+               if ( !empty( $options['toc'] ) ) {
+                       $out->addModules( 'mediawiki.toc' );
+               }
                $out->setPageTitle( $context->msg( 'api-help-title' ) );
 
                $cacheKey = null;
@@ -107,6 +111,7 @@ class ApiHelp extends ApiBase {
                        if ( $cacheHelpTimeout > 0 ) {
                                // Get help text from cache if present
                                $cacheKey = wfMemcKey( 'apihelp', $modules[0]->getModulePath(),
+                                       (int)!empty( $options['toc'] ),
                                        str_replace( ' ', '_', SpecialVersion::getVersion( 'nodb' ) ) );
                                $cached = $wgMemc->get( $cacheKey );
                                if ( $cached ) {
@@ -133,7 +138,11 @@ class ApiHelp extends ApiBase {
                }
 
                $haveModules = array();
-               $out->addHTML( self::getHelpInternal( $context, $modules, $options, $haveModules ) );
+               $html = self::getHelpInternal( $context, $modules, $options, $haveModules );
+               if ( !empty( $options['toc'] ) && $haveModules ) {
+                       $out->addHTML( Linker::generateTOC( $haveModules, $context->getLanguage() ) );
+               }
+               $out->addHTML( $html );
 
                $helptitle = isset( $options['helptitle'] ) ? $options['helptitle'] : null;
                $html = self::fixHelpLinks( $out->getHTML(), $helptitle, $haveModules );
@@ -150,7 +159,7 @@ class ApiHelp extends ApiBase {
         *
         * @param string $html
         * @param string|null $helptitle Title to link to rather than api.php, must contain '$1'
-        * @param array $localModules Modules to link within the current page
+        * @param array $localModules Keys are modules to link within the current page, values are ignored
         * @return string
         */
        public static function fixHelpLinks( $html, $helptitle = null, $localModules = array() ) {
@@ -212,11 +221,16 @@ class ApiHelp extends ApiBase {
        ) {
                $out = '';
 
-               $level = min( 6, empty( $options['headerlevel'] ) ? 2 : $options['headerlevel'] );
-               $options['headerlevel'] = $level;
+               $level = empty( $options['headerlevel'] ) ? 2 : $options['headerlevel'];
+               if ( empty( $options['tocnumber'] ) ) {
+                       $tocnumber = array( 2 => 0 );
+               } else {
+                       $tocnumber = &$options['tocnumber'];
+               }
 
                foreach ( $modules as $module ) {
-                       $haveModules[$module->getModulePath()] = true;
+                       $tocnumber[$level]++;
+                       $path = $module->getModulePath();
                        $module->setContext( $context );
                        $help = array(
                                'header' => '',
@@ -228,8 +242,13 @@ class ApiHelp extends ApiBase {
                                'submodules' => '',
                        );
 
-                       if ( empty( $options['noheader'] ) ) {
-                               $path = $module->getModulePath();
+                       if ( empty( $options['noheader'] ) || !empty( $options['toc'] ) ) {
+                               $anchor = $path;
+                               $i = 1;
+                               while ( isset( $haveModules[$anchor] ) ) {
+                                       $anchor = $path . '|' . ++$i;
+                               }
+
                                if ( $module->isMain() ) {
                                        $header = $context->msg( 'api-help-main-header' )->parse();
                                } else {
@@ -241,10 +260,22 @@ class ApiHelp extends ApiBase {
                                                        $context->msg( 'parentheses', $module->getModulePrefix() )->parse();
                                        }
                                }
-                               $help['header'] .= Html::element( "h$level",
-                                       array( 'id' => $path, 'class' => 'apihelp-header' ),
-                                       $header
+                               $haveModules[$anchor] = array(
+                                       'toclevel' => count( $tocnumber ),
+                                       'level' => $level,
+                                       'anchor' => $anchor,
+                                       'line' => $header,
+                                       'number' => join( '.', $tocnumber ),
+                                       'index' => false,
                                );
+                               if ( empty( $options['noheader'] ) ) {
+                                       $help['header'] .= Html::element( 'h' . min( 6, $level ),
+                                               array( 'id' => $anchor, 'class' => 'apihelp-header' ),
+                                               $header
+                                       );
+                               }
+                       } else {
+                               $haveModules[$path] = true;
                        }
 
                        $links = array();
@@ -641,6 +672,15 @@ class ApiHelp extends ApiBase {
                                $help['examples'] .= Html::closeElement( 'div' );
                        }
 
+                       $subtocnumber = $tocnumber;
+                       $subtocnumber[$level + 1] = 0;
+                       $suboptions = array(
+                               'submodules' => $options['recursivesubmodules'],
+                               'headerlevel' => $level + 1,
+                               'tocnumber' => &$subtocnumber,
+                               'noheader' => false,
+                       ) + $options;
+
                        if ( $options['submodules'] && $module->getModuleManager() ) {
                                $manager = $module->getModuleManager();
                                $submodules = array();
@@ -651,16 +691,13 @@ class ApiHelp extends ApiBase {
                                                $submodules[] = $manager->getModule( $name );
                                        }
                                }
-                               $help['submodules'] .= self::getHelpInternal( $context, $submodules, array(
-                                       'submodules' => $options['recursivesubmodules'],
-                                       'headerlevel' => $level + 1,
-                                       'noheader' => false,
-                               ) + $options, $haveModules );
+                               $help['submodules'] .= self::getHelpInternal( $context, $submodules, $suboptions, $haveModules );
+                               $numSubmodules = count( $submodules );
                        }
 
-                       $module->modifyHelp( $help, $options );
+                       $module->modifyHelp( $help, $suboptions, $haveModules );
 
-                       Hooks::run( 'APIHelpModifyOutput', array( $module, &$help, $options ) );
+                       Hooks::run( 'APIHelpModifyOutput', array( $module, &$help, $suboptions, &$haveModules ) );
 
                        $out .= join( "\n", $help );
                }
index 2ec3aa8..2b7937e 100644 (file)
@@ -1307,7 +1307,7 @@ class ApiMain extends ApiBase {
                );
        }
 
-       public function modifyHelp( array &$help, array $options ) {
+       public function modifyHelp( array &$help, array $options, array &$tocData ) {
                // Wish PHP had an "array_insert_before". Instead, we have to manually
                // reindex the array to get 'permissions' in the right place.
                $oldHelp = $help;
@@ -1353,19 +1353,46 @@ class ApiMain extends ApiBase {
 
                // Fill 'datatypes' and 'credits', if applicable
                if ( empty( $options['nolead'] ) ) {
-                       $help['datatypes'] .= Html::rawelement( 'h' . min( 6, $options['headerlevel'] + 1 ),
+                       $level = $options['headerlevel'];
+                       $tocnumber = &$options['tocnumber'];
+
+                       $header = $this->msg( 'api-help-datatypes-header' )->parse();
+                       $help['datatypes'] .= Html::rawelement( 'h' . min( 6, $level ),
                                array( 'id' => 'main/datatypes', 'class' => 'apihelp-header' ),
                                Html::element( 'span', array( 'id' => Sanitizer::escapeId( 'main/datatypes' ) ) ) .
-                               $this->msg( 'api-help-datatypes-header' )->parse()
+                               $header
                        );
                        $help['datatypes'] .= $this->msg( 'api-help-datatypes' )->parseAsBlock();
+                       if ( !isset( $tocData['main/datatypes'] ) ) {
+                               $tocnumber[$level]++;
+                               $tocData['main/datatypes'] = array(
+                                       'toclevel' => count( $tocnumber ),
+                                       'level' => $level,
+                                       'anchor' => 'main/datatypes',
+                                       'line' => $header,
+                                       'number' => join( '.', $tocnumber ),
+                                       'index' => false,
+                               );
+                       }
 
-                       $help['credits'] .= Html::rawelement( 'h' . min( 6, $options['headerlevel'] + 1 ),
+                       $header = $this->msg( 'api-credits-header' )->parse();
+                       $help['credits'] .= Html::rawelement( 'h' . min( 6, $level ),
                                array( 'id' => 'main/credits', 'class' => 'apihelp-header' ),
                                Html::element( 'span', array( 'id' => Sanitizer::escapeId( 'main/credits' ) ) ) .
-                               $this->msg( 'api-credits-header' )->parse()
+                               $header
                        );
                        $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock();
+                       if ( !isset( $tocData['main/credits'] ) ) {
+                               $tocnumber[$level]++;
+                               $tocData['main/credits'] = array(
+                                       'toclevel' => count( $tocnumber ),
+                                       'level' => $level,
+                                       'anchor' => 'main/credits',
+                                       'line' => $header,
+                                       'number' => join( '.', $tocnumber ),
+                                       'index' => false,
+                               );
+                       }
                }
        }
 
index fc004cf..a917c54 100644 (file)
@@ -138,6 +138,7 @@ class ApiParse extends ApiBase {
                                        $main = new ApiMain( $req );
                                        $pageSet = new ApiPageSet( $main );
                                        $pageSet->execute();
+                                       $redirValues = $pageSet->getRedirectTitlesAsResult( $this->getResult() );
 
                                        $to = $page;
                                        foreach ( $pageSet->getRedirectTitles() as $title ) {
index 44af83d..cc884ec 100644 (file)
@@ -245,6 +245,6 @@ class ApiQueryAllMessages extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Meta#allmessages_.2F_am';
+               return 'https://www.mediawiki.org/wiki/API:Allmessages';
        }
 }
index 5168859..05daa7a 100644 (file)
@@ -235,14 +235,14 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        }
 
                        $data = array(
-                               'userid' => $row->user_id,
+                               'userid' => (int)$row->user_id,
                                'name' => $row->user_name,
                        );
 
                        if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
-                               $data['blockid'] = $row->ipb_id;
+                               $data['blockid'] = (int)$row->ipb_id;
                                $data['blockedby'] = $row->ipb_by_text;
-                               $data['blockedbyid'] = $row->ipb_by;
+                               $data['blockedbyid'] = (int)$row->ipb_by;
                                $data['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
                                $data['blockreason'] = $row->ipb_reason;
                                $data['blockexpiry'] = $row->ipb_expiry;
@@ -275,16 +275,19 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                if ( $fld_groups ) {
                                        $data['groups'] = $groups;
                                        ApiResult::setIndexedTagName( $data['groups'], 'g' );
+                                       ApiResult::setArrayType( $data['groups'], 'array' );
                                }
 
                                if ( $fld_implicitgroups ) {
                                        $data['implicitgroups'] = $implicitGroups;
                                        ApiResult::setIndexedTagName( $data['implicitgroups'], 'g' );
+                                       ApiResult::setArrayType( $data['implicitgroups'], 'array' );
                                }
 
                                if ( $fld_rights ) {
                                        $data['rights'] = User::getGroupPermissions( $groups );
                                        ApiResult::setIndexedTagName( $data['rights'], 'r' );
+                                       ApiResult::setArrayType( $data['rights'], 'array' );
                                }
                        }
 
index 8e271e7..dbed36c 100644 (file)
@@ -277,7 +277,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
 
                                $vals = array();
                                if ( $fld_pageid ) {
-                                       $vals['pageid'] = $row->page_id;
+                                       $vals['pageid'] = (int)$row->page_id;
                                }
                                if ( $fld_title ) {
                                        ApiQueryBase::addTitleInfo( $vals,
@@ -405,8 +405,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               $name = $this->getModuleName();
-               $prefix = $this->getModulePrefix();
-               return "https://www.mediawiki.org/wiki/API:Properties#{$name}_.2F_{$prefix}";
+               $name = ucfirst( $this->getModuleName() );
+               return "https://www.mediawiki.org/wiki/API:{$name}";
        }
 }
index 4a7023b..25f0bf7 100644 (file)
@@ -191,19 +191,19 @@ class ApiQueryBlocks extends ApiQueryBase {
                                ApiResult::META_TYPE => 'assoc',
                        );
                        if ( $fld_id ) {
-                               $block['id'] = $row->ipb_id;
+                               $block['id'] = (int)$row->ipb_id;
                        }
                        if ( $fld_user && !$row->ipb_auto ) {
                                $block['user'] = $row->ipb_address;
                        }
                        if ( $fld_userid && !$row->ipb_auto ) {
-                               $block['userid'] = $row->ipb_user;
+                               $block['userid'] = (int)$row->ipb_user;
                        }
                        if ( $fld_by ) {
                                $block['by'] = $row->ipb_by_text;
                        }
                        if ( $fld_byid ) {
-                               $block['byid'] = $row->ipb_by;
+                               $block['byid'] = (int)$row->ipb_by;
                        }
                        if ( $fld_timestamp ) {
                                $block['timestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
index 35fa56e..7b3e6e3 100644 (file)
@@ -226,6 +226,6 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#categories_.2F_cl';
+               return 'https://www.mediawiki.org/wiki/API:Categories';
        }
 }
index 9f6c604..9266442 100644 (file)
@@ -115,6 +115,6 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
+               return 'https://www.mediawiki.org/wiki/API:Categoryinfo';
        }
 }
index 7e76db2..524bffd 100644 (file)
@@ -89,7 +89,7 @@ class ApiQueryContributors extends ApiQueryBase {
                $res = $this->select( __METHOD__ );
                foreach ( $res as $row ) {
                        $fit = $result->addValue( array( 'query', 'pages', $row->page ),
-                               'anoncontributors', $row->anons
+                               'anoncontributors', (int)$row->anons
                        );
                        if ( !$fit ) {
                                // This not fitting isn't reasonable, so it probably means that
@@ -189,7 +189,7 @@ class ApiQueryContributors extends ApiQueryBase {
                        }
 
                        $fit = $this->addPageSubItem( $row->page,
-                               array( 'userid' => $row->user, 'name' => $row->username ),
+                               array( 'userid' => (int)$row->user, 'name' => $row->username ),
                                'user'
                        );
                        if ( !$fit ) {
@@ -250,6 +250,6 @@ class ApiQueryContributors extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#contributors_.2F_pc';
+               return 'https://www.mediawiki.org/wiki/API:Contributors';
        }
 }
index 26ae266..3a98478 100644 (file)
@@ -299,6 +299,6 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#deletedrevisions_.2F_drv';
+               return 'https://www.mediawiki.org/wiki/API:Deletedrevisions';
        }
 }
index 72a331f..76f594e 100644 (file)
@@ -328,7 +328,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                                                $rev['user'] = $row->ar_user_text;
                                        }
                                        if ( $fld_userid ) {
-                                               $rev['userid'] = $row->ar_user;
+                                               $rev['userid'] = (int)$row->ar_user;
                                        }
                                }
                        }
index 4d0bcfe..3282c71 100644 (file)
@@ -189,6 +189,6 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#duplicatefiles_.2F_df';
+               return 'https://www.mediawiki.org/wiki/API:Duplicatefiles';
        }
 }
index ec3d9d2..725ac88 100644 (file)
@@ -134,6 +134,6 @@ class ApiQueryExternalLinks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#extlinks_.2F_el';
+               return 'https://www.mediawiki.org/wiki/API:Extlinks';
        }
 }
index 9ad7e27..057b011 100644 (file)
@@ -97,4 +97,8 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                                => 'apihelp-query+filerepoinfo-example-simple',
                );
        }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Filerepoinfo';
+       }
 }
index 4d357a7..5488984 100644 (file)
@@ -162,7 +162,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        }
 
                        $file = array();
-                       $file['id'] = $row->fa_id;
+                       $file['id'] = (int)$row->fa_id;
                        $file['name'] = $row->fa_name;
                        $title = Title::makeTitle( NS_FILE, $row->fa_name );
                        self::addTitleInfo( $file, $title );
@@ -179,7 +179,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        if ( $fld_user &&
                                Revision::userCanBitfield( $row->fa_deleted, File::DELETED_USER, $user )
                        ) {
-                               $file['userid'] = $row->fa_user;
+                               $file['userid'] = (int)$row->fa_user;
                                $file['user'] = $row->fa_user_text;
                        }
                        if ( $fld_sha1 ) {
index 94b4bbd..02846dc 100644 (file)
@@ -795,6 +795,6 @@ class ApiQueryImageInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#imageinfo_.2F_ii';
+               return 'https://www.mediawiki.org/wiki/API:Imageinfo';
        }
 }
index 029d945..1b39d28 100644 (file)
@@ -172,6 +172,6 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#images_.2F_im';
+               return 'https://www.mediawiki.org/wiki/API:Images';
        }
 }
index 66178d4..eee5dae 100644 (file)
@@ -868,6 +868,6 @@ class ApiQueryInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#info_.2F_in';
+               return 'https://www.mediawiki.org/wiki/API:Info';
        }
 }
index 5919ee9..8f8a17d 100644 (file)
@@ -183,6 +183,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#langlinks_.2F_ll';
+               return 'https://www.mediawiki.org/wiki/API:Langlinks';
        }
 }
index 3bd3714..d7b85c9 100644 (file)
@@ -42,13 +42,13 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                $this->table = 'pagelinks';
                                $this->prefix = 'pl';
                                $this->titlesParam = 'titles';
-                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
+                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Links';
                                break;
                        case self::TEMPLATES:
                                $this->table = 'templatelinks';
                                $this->prefix = 'tl';
                                $this->titlesParam = 'templates';
-                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
+                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Templates';
                                break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
index 87f90c5..1f992f8 100644 (file)
@@ -143,6 +143,6 @@ class ApiQueryPageProps extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#pageprops_.2F_pp';
+               return 'https://www.mediawiki.org/wiki/API:Pageprops';
        }
 }
index fb65e5e..033310d 100644 (file)
@@ -123,7 +123,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                }
 
                                if ( isset( $prop['userid'] ) || /*B/C*/isset( $prop['user'] ) ) {
-                                       $vals['userid'] = $row->pt_user;
+                                       $vals['userid'] = (int)$row->pt_user;
                                }
 
                                if ( isset( $prop['comment'] ) ) {
index f6a6478..74bccc2 100644 (file)
@@ -458,7 +458,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                }
 
                                if ( $this->fld_userid ) {
-                                       $vals['userid'] = $row->rc_user;
+                                       $vals['userid'] = (int)$row->rc_user;
                                }
 
                                if ( !$row->rc_user ) {
index 1a65fe3..9e02551 100644 (file)
@@ -468,6 +468,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#revisions_.2F_rv';
+               return 'https://www.mediawiki.org/wiki/API:Revisions';
        }
 }
index c12630e..90af15a 100644 (file)
@@ -92,7 +92,9 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                } elseif ( $what == 'title' ) {
                        $matches = $search->searchTitle( $query );
                } elseif ( $what == 'nearmatch' ) {
-                       $matches = SearchEngine::getNearMatchResultSet( $query );
+                       // near matches must receive the user input as provided, otherwise
+                       // the near matches within namespaces are lost.
+                       $matches = SearchEngine::getNearMatchResultSet( $params['search'] );
                } else {
                        // We default to title searches; this is a terrible legacy
                        // of the way we initially set up the MySQL fulltext-based
index b81e993..98c2201 100644 (file)
@@ -867,6 +867,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Meta#siteinfo_.2F_si';
+               return 'https://www.mediawiki.org/wiki/API:Siteinfo';
        }
 }
index 1126842..3de72bf 100644 (file)
@@ -122,4 +122,8 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                                => 'apihelp-query+stashimageinfo-example-params',
                );
        }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Stashimageinfo';
+       }
 }
index 65a08a3..f887664 100644 (file)
@@ -93,4 +93,8 @@ class ApiQueryTokens extends ApiQueryBase {
        public function getCacheMode( $params ) {
                return 'private';
        }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Tokens';
+       }
 }
index e5ec67d..480a1ab 100644 (file)
@@ -340,7 +340,7 @@ class ApiQueryContributions extends ApiQueryBase {
                }
 
                // Any rows where we can't view the user were filtered out in the query.
-               $vals['userid'] = $row->rev_user;
+               $vals['userid'] = (int)$row->rev_user;
                $vals['user'] = $row->rev_user_text;
                if ( $row->rev_deleted & Revision::DELETED_USER ) {
                        $vals['userhidden'] = true;
index 3d3590c..4302ef3 100644 (file)
@@ -274,6 +274,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Meta#userinfo_.2F_ui';
+               return 'https://www.mediawiki.org/wiki/API:Userinfo';
        }
 }
index f22c213..8b1a075 100644 (file)
@@ -193,9 +193,9 @@ class ApiQueryUsers extends ApiQueryBase {
                                        $data[$name]['hidden'] = true;
                                }
                                if ( isset( $this->prop['blockinfo'] ) && !is_null( $row->ipb_by_text ) ) {
-                                       $data[$name]['blockid'] = $row->ipb_id;
+                                       $data[$name]['blockid'] = (int)$row->ipb_id;
                                        $data[$name]['blockedby'] = $row->ipb_by_text;
-                                       $data[$name]['blockedbyid'] = $row->ipb_by;
+                                       $data[$name]['blockedbyid'] = (int)$row->ipb_by;
                                        $data[$name]['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
                                        $data[$name]['blockreason'] = $row->ipb_reason;
                                        $data[$name]['blockexpiry'] = $row->ipb_expiry;
index 9f7387c..3eb57fd 100644 (file)
@@ -332,9 +332,9 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        }
                        if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_USER, $user ) ) {
                                if ( $this->fld_userid ) {
-                                       $vals['userid'] = $row->rc_user;
+                                       $vals['userid'] = (int)$row->rc_user;
                                        // for backwards compatibility
-                                       $vals['user'] = $row->rc_user;
+                                       $vals['user'] = (int)$row->rc_user;
                                }
 
                                if ( $this->fld_user ) {
index 4e80b9b..8ba597a 100644 (file)
        "apihelp-imagerotate-example-generator": "Otočit všechny obrázky v <kbd>Category:Flip</kbd> o <kbd>180</kbd> stupňů.",
        "apihelp-import-param-summary": "Import shrnutí.",
        "apihelp-import-param-xml": "Nahraný XML soubor.",
-       "apihelp-import-param-rootpage": "Importovat jako podstránku k této stránce.",
+       "apihelp-import-param-namespace": "Importovat do tohoto jmenného prostoru. Přepíše parametr <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Importovat jako podstránku k této stránce. Ignoruje se, pokud je k dispozici parametr <kbd>$1namespace</kbd>.",
        "apihelp-login-param-name": "Uživatelské jméno.",
        "apihelp-login-param-password": "Heslo.",
        "apihelp-login-param-domain": "Doména (volitelná)",
index d514f60..5705c48 100644 (file)
        "apihelp-imagerotate-example-generator": "Rotar todas las imágenes en la  <kbd>Categoría:Girar</kbd> <kbd>180</kbd> grados.",
        "apihelp-import-param-summary": "Resumen de importación.",
        "apihelp-import-param-xml": "Se cargó el archivo XML.",
-       "apihelp-import-param-rootpage": "Importar como subpágina de esta página.",
+       "apihelp-import-param-rootpage": "Importar como subpágina de esta página. Se ignora si se proporciona el parámetro <kbd>$1namespace</kbd>.",
        "apihelp-login-param-name": "Nombre de usuario.",
        "apihelp-login-param-password": "Contraseña.",
        "apihelp-login-param-domain": "Dominio (opcional).",
index 7882da4..f8819b0 100644 (file)
        "apihelp-query+recentchanges-param-user": "Só listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-excludeuser": "Non listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-tag": "Só listar cambios marcados con esta etiqueta.",
+       "apihelp-query+recentchanges-param-prop": "Inclúe información adicional:\n;user:Engade o usuario responsable da modificación e marca se é unha dirección IP.\n;userid:Engade o identificador do usuario responsable da edición.\n;comment:Engade o comentario da edición.\n;parsedcomment:Engade o comentario analizado da edición.\n;flags:Engade os indicadores da edición.\n;timestamp:Engade o selo de tempo da edición.\n;title:Engade o título da páxina da edición.\n;ids:Engade o identificador da páxina, o identificador dos cambios recentes e o identificador da versión nova e da vella.\n;sizes:Engade a lonxitude nova e vella da páxina en bytes.\n;redirect:Pon unha marca se a páxina é unha redirección.\n;patrolled:Marca as edicións vixiables como vixiadas ou non vixiadas.\n;loginfo:Engade información do rexistro (identificador de rexistro, tipo de rexistro, etc) nas entradas do rexistro.\n;tags:Lista as etiquetas da entrada.\n;sha1:Engade o control de contido para as entradas asociadas a unha revisión.",
        "apihelp-query+recentchanges-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
        "apihelp-query+recentchanges-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "Número total de páxinas a devolver.",
index 68f4e40..a87861e 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Beta16",
                        "Nivit",
-                       "Toadino2"
+                       "Toadino2",
+                       "Gianfranco"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentazione (in inglese)]]\n* [[mw:API:FAQ|FAQ (in inglese)]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> Tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma l'API è ancora in fase d'attivo sviluppo, e potrebbe cambiare in qualsiasi momenento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite all'API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e sia al valore dell'intestazione sia al codice d'errore verrà impostato lo stesso valore. Per maggiori informazioni leggi [[mw:API:Errors_and_warnings|API:Errori ed avvertimenti (in inglese)]].",
        "apihelp-main-param-format": "Formato dell'output.",
        "apihelp-main-param-assert": "Verifica che l'utente sia loggato se si è impostato <kbd>utente</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
+       "apihelp-main-param-curtimestamp": "Includere il timestamp corrente nel risultato.",
        "apihelp-block-description": "Blocca  un utente.",
+       "apihelp-block-param-user": "Nome utente, indirizzo IP o range di IP da bloccare.",
        "apihelp-block-param-reason": "Motivo del blocco.",
+       "apihelp-block-param-nocreate": "Evitare la creazione di account.",
+       "apihelp-block-param-hidename": "Nascondi il nome utente dal registro dei blocchi (Richiede i permessi di <code>hideuser</code>).",
+       "apihelp-block-param-reblock": "Se l'utente è già bloccato, sovrascrivere il blocco esistente.",
+       "apihelp-block-param-watchuser": "Segui la pagina utente e le pagine di discussione utente dell'utente o dell'indirizzo IP.",
+       "apihelp-block-example-ip-simple": "Blocca l'indirizzo IP <kbd>192.0.2.5</kbd> per tre giorni con motivazione <kbd>Primo avvertimento</kbd>.",
+       "apihelp-block-example-user-complex": "Blocca l'utente <kbd>Vandalo</kbd> a tempo indeterminato con motivazione <kbd>Vandalismo</kbd>, e impediscigli la creazione di nuovi account e l'invio di e-mail.",
+       "apihelp-checktoken-description": "Verifica la validità di un token da <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Tipo di token in corso di test.",
+       "apihelp-checktoken-param-token": "Token da testare.",
+       "apihelp-checktoken-param-maxtokenage": "Massima età consentita per il token, in secondi.",
+       "apihelp-checktoken-example-simple": "Verifica la validità di un token <kbd>csrf</kbd>.",
+       "apihelp-clearhasmsg-description": "Cancella il flag <code>hasmsg</code> per l'utente corrente.",
+       "apihelp-clearhasmsg-example-1": "Cancella il flag <code>hasmsg</code> per l'utente corrente.",
+       "apihelp-compare-description": "Trova la differenza tra 2 pagine.\n\nUn numero di revisione, il titolo di una pagina, o un ID di pagina deve essere indicato sia per il \"da\" che per lo \"a\".",
+       "apihelp-compare-param-fromtitle": "Primo titolo da confrontare.",
+       "apihelp-compare-param-fromid": "Primo ID di pagina da confrontare.",
+       "apihelp-compare-param-fromrev": "Prima revisione da confrontare.",
+       "apihelp-compare-param-totitle": "Primo titolo da confrontare.",
+       "apihelp-compare-param-toid": "Secondo ID di pagina da confrontare.",
+       "apihelp-compare-param-torev": "Seconda revisione da confrontare.",
+       "apihelp-compare-example-1": "Crea un diff tra revisione 1 e revisione 2.",
+       "apihelp-createaccount-description": "Crea un nuovo account utente.",
+       "apihelp-createaccount-param-name": "Nome Utente",
+       "apihelp-createaccount-param-password": "Password (verrà ignorata se è impostato <var>$1mailpassword</var>).",
+       "apihelp-createaccount-param-domain": "Dominio per l'autenticazione esterna (opzionale).",
+       "apihelp-createaccount-param-email": "Indirizzo Email dell'utente (opzionale).",
+       "apihelp-createaccount-param-realname": "Nome reale dell'utente (opzionale).",
+       "apihelp-createaccount-param-mailpassword": "Se impostato su un qualsiasi valore, una password random (casuale) verrà inviata all'utente.",
+       "apihelp-createaccount-param-reason": "Ragione, facoltativa, della creazione dell'account da inserire nei registri.",
+       "apihelp-createaccount-param-language": "Codice di lingua da impostare come predefinita per l'utente (opzionale, di default è la lingua del contenuto).",
+       "apihelp-createaccount-example-pass": "Crea l'utente <kbd>testuser</kbd> con password <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Crea l'utente <kbd>testmailuser</kbd> e mandagli via e-mail una password generata casualmente.",
+       "apihelp-delete-description": "Cancella una pagina.",
+       "apihelp-delete-param-title": "Titolo della pagina che si desidera eliminare. Non può essere usato insieme con <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "ID di pagina della pagina da cancellare. Non può essere usato insieme con <var>$1title</var>.",
+       "apihelp-delete-param-reason": "Motivo della cancellazione. Se non indicato, verrà usata una motivazione generata automaticamente.",
+       "apihelp-delete-param-watch": "Aggiungi la pagina agli Osservati Speciali dell'utente corrente.",
+       "apihelp-delete-param-unwatch": "Rimuovi la pagina dagli Osservati Speciali dell'utente corrente.",
+       "apihelp-delete-example-simple": "Cancella la <kbd>Pagina Principale</kbd>.",
+       "apihelp-delete-example-reason": "Cancella la <kbd>Pagina Principale</kbd> con motivazione <kbd>Preparazione allo spostamento</kbd>.",
+       "apihelp-disabled-description": "Questo modulo è stato disabilitato.",
+       "apihelp-edit-description": "Crea e modifica pagine.",
+       "apihelp-edit-param-title": "Titolo della pagina da modificare. Non può essere usato insieme con <var>$1pageid</var>.",
+       "apihelp-edit-param-sectiontitle": "Il titolo per una nuova sezione.",
+       "apihelp-edit-param-text": "Contenuto della pagina.",
+       "apihelp-edit-param-summary": "Oggetto della modifica. Anche titolo della sezione se $1sezione=new e $1sectiontitle non è impostato.",
+       "apihelp-edit-param-tags": "Cambia i tag da applicare alla revisione.",
+       "apihelp-edit-param-minor": "Modifica minore.",
+       "apihelp-edit-param-notminor": "Modifica non minore.",
+       "apihelp-edit-param-bot": "Segna questa modifica come bot.",
+       "apihelp-edit-param-createonly": "Non modificare la pagina se già esiste.",
+       "apihelp-edit-param-nocreate": "Genera un errore se la pagina non esiste.",
+       "apihelp-edit-param-watch": "Aggiungi la pagina agli Osservati Speciali dell'utente corrente.",
+       "apihelp-edit-param-unwatch": "Rimuovi la pagina dagli Osservati Speciali dell'utente corrente.",
        "apihelp-emailuser-description": "Manda un'e-mail ad un utente.",
        "apihelp-emailuser-param-ccme": "Mandami una copia di questa mail.",
        "apihelp-expandtemplates-description": "Espandi tutti i template nel wikitesto.",
index a9bcf30..fcae447 100644 (file)
        "apihelp-import-param-fullhistory": "ウィキ間の取り込みの場合: 現在の版のみではなく完全な履歴を取り込む。",
        "apihelp-import-param-templates": "ウィキ間の取り込みの場合: 読み込まれているテンプレートも取り込む。",
        "apihelp-import-param-namespace": "この名前空間に取り込む。<kbd>$1rootpage</kbd>パラメータをオーバーライドします。",
-       "apihelp-import-param-rootpage": "このページの下位ページとしてインポートする。",
+       "apihelp-import-param-rootpage": "このページの下位ページとして取り込む。<kbd>$1namespace</kbd> パラメータが入力された場合は無視されます。",
        "apihelp-import-example-import": "[[meta:Help:Parserfunctions]] をすべての履歴とともに名前空間100に取り込む。",
        "apihelp-login-param-name": "利用者名。",
        "apihelp-login-param-password": "パスワード。",
        "apihelp-query+deletedrevisions-param-limit": "一覧表示する版の最大数。",
        "apihelp-query+deletedrevisions-example-titles": "ページ <kbd>Main Page</kbd> および <kbd>Talk:Main Page</kbd> の削除された版とその内容を一覧表示する。",
        "apihelp-query+deletedrevisions-example-revids": "削除された版 <kbd>123456</kbd> に関する情報を一覧表示する。",
+       "apihelp-query+deletedrevs-param-from": "列挙の始点となるページ名。",
+       "apihelp-query+deletedrevs-param-to": "列挙の終点となるページ名。",
        "apihelp-query+disabled-description": "このクエリ モジュールは無効化されています。",
        "apihelp-query+embeddedin-param-title": "検索するページ名。$1pageid とは同時に使用できません。",
        "apihelp-query+embeddedin-param-pageid": "検索するページID. $1titleとは同時に使用できません。",
index 86d3c87..a95bc11 100644 (file)
        "apihelp-tag-param-reason": "Dä Jrond för di Änderong.",
        "apihelp-tag-example-rev": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandalism</kbd>“ vun dä Väsjohn met dä Kännong „<kbd>123</kbd>“ fott nämme, der ohne ene Jrond ze nänne.",
        "apihelp-tag-example-log": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ vun dämm Enndrahch met dä Kännong „<kbd>123</kbd>“ em Logbohch fott nämme un als Jrond draaach „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Wrongly applied</kbd>“ enn.",
+       "apihelp-upload-description": "Donn en Dattei huh lahde, udder holl der Zohschtand vun de onfähdesch huhjelahde Datteije .\n\nEt jitt ongerscheidlejje Metohde:\n* Donn de Ennhallde vun de Datteije tiräk huhlahde, övver der Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“.\n* Donn de Datteije en en Aanzahl Rötsche huhlahde, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filesize</var>“, „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1chunk</var>“, un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1offset</var>“.\n* Lohß der ẞööver vum Wikki en Dattei vun enem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> holle, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1url</var>“.\n* Lohß en Dattei fähdesch huhlahde, di zeläz nit fähdesch wohd, un met Warnonge schtonn jeblevve es övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</var>“.\nOpjepaß: dä „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">POST</code>“-Befähl vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i> moß als e Dattei-Huhlahde aanjeschtüßße wähde, allsu met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">multipart/form-data</code>“, wam_mer dä Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“ scheck.",
        "api-help-source": "Quäll: $1",
        "api-help-source-unknown": "Quäll: <span class=\"apihelp-unknown\">onbikannt</span>",
        "api-help-license": "Lezänz: [[$1|$2]]",
index 612625f..3917e83 100644 (file)
@@ -98,5 +98,6 @@
        "api-help-param-required": "Dëse Parameter ass obligatoresch.",
        "api-help-datatypes-header": "Datentypen",
        "api-help-param-type-user": "Typ: {{PLURAL:$1|1=Benotzernumm|2=Lëscht vu Benotzernimm}}",
-       "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:"
+       "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:",
+       "api-help-permissions": "{{PLURAL:$1|Autorisatioun|Autorisatiounen}}:"
 }
index 12d9a31..9315304 100644 (file)
        "apihelp-main-param-requestid": "Тука внесената вредност ќе биде вклучена во извештајот. Може да се користи за разликување на барањата.",
        "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во резултатите.",
        "apihelp-main-param-curtimestamp": "Бклучи тековно време и време и датум во резултатот.",
-       "apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како http://en.wikipedia.org or https://meta.wikimedia.org. Ако овој параметар не се совпаѓа со заглавието Origin:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе ззаглавието Контрола на пристап-Изворник.",
-       "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] со siprop=languages или укажете „user“ за да го користите тековно зададениот јазик корисникот, или пак укажете „content“ за да го користите јазикот на содржината на ова вики.",
+       "apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како <kbd>https://mk.wikipedia.org</kbd>  or <kbd>https://meta.wikimedia.org</kbd>. Ако овој параметар не се совпаѓа со заглавието <code>Origin</code>:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе заглавието <code>Access-Control-Allow-Origin</code>.",
+       "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> со <kbd>siprop=languages</kbd> или укажете <kbd>user</kbd> за да го користите тековно зададениот јазик корисникот, или пак укажете <kbd>content</kbd> за да го користите јазикот на содржината на ова вики.",
        "apihelp-block-description": "Блокирај корисник.",
        "apihelp-block-param-user": "Корисничко име, IP-адреса или IP-опсег ако сакате да блокирате.",
-       "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. „5 месеци“ или „2 недели“) или пак апсолутно (на пр. „2014-09-18T12:34:56Z“). Ако го зададете „бесконечно“, „неодредено“ или „никогаш“, блокот ќе трае засекогаш.",
+       "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. <kbd>5 months</kbd> или „2 недели“) или пак апсолутно (на пр. <kbd>2014-09-18T12:34:56Z</kbd>). Ако го зададете <kbd>infinite</kbd>, <kbd>indefinite</kbd> или <kbd>never</kbd>, блокот ќе трае засекогаш.",
        "apihelp-block-param-reason": "Причина за блокирање.",
        "apihelp-block-param-anononly": "Блокирај само анонимни корисници (т.е. оневозможи анонимно уредување од оваа IP-адреса).",
        "apihelp-block-param-nocreate": "Оневозможи создавање кориснички сметки.",
        "apihelp-block-param-autoblock": "Автоматски блокирај ја последно употребената IP-адреса и сите понатамошни IP-адреси од кои лицето ќе се обиде да се најави.",
-       "apihelp-block-param-noemail": "Оневозможи му на корисникот да испаќа е-пошта преку викито. (Го бара правото „блокирање е-пошта“).",
+       "apihelp-block-param-noemail": "Оневозможи му на корисникот да испаќа е-пошта преку викито. (Го бара правото code>blockemail</code>).",
        "apihelp-block-param-hidename": "Скриј го корисничкото име од дневникот на блокирања. (Го бара правото <code>hideuser</code>)",
        "apihelp-block-param-allowusertalk": "Овозможи му на корисникот да си ја уредува сопствената страница за разговор (зависи од <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Ако корисникот е веќе блокиран, наметни врз постоечкиот блок.",
        "apihelp-block-param-watchuser": "Набљудувај ја корисничката страница и страницата за разговор на овој корисник или IP-адреса",
        "apihelp-block-example-ip-simple": "Блокирај ја IP-адресата <kbd>192.0.2.5</kbd> три дена со причината <kbd>Прва опомена</kbd>.",
-       "apihelp-block-example-user-complex": "Блокирај го корисникот Вандал (Vandal) бесконечно со причината „Вандализам“ и оневозможи создавање на нови сметки и праќање е-пошта",
+       "apihelp-block-example-user-complex": "Блокирај го корисникот <kbd>Vandal</kbd> (Вандал) бесконечно со причината <kbd>Vandal</kbd> (Вандализам) и оневозможи создавање на нови сметки и праќање е-пошта.",
+       "apihelp-checktoken-description": "Проверка на полноважноста на шифрата од <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Тип на шифра што се испробува.",
+       "apihelp-checktoken-param-token": "Шифра што се испробува.",
        "apihelp-clearhasmsg-description": "Ја отстранува ознаката „<code>hasmsg</code>“ од тековниот корисник.",
        "apihelp-clearhasmsg-example-1": "Отстрани ја ознаката „<code>hasmsg</code>“ од тековниот корисник",
-       "apihelp-compare-description": "Ð\94обиваÑ\9aе Ð½Ð° Ñ\80азлика Ð¿Ð¾Ð¼ÐµÑ\93Ñ\83 Ð´Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86и.\n\nÐ\9cоÑ\80а Ð´Ð° Ñ\81е Ð´Ð¾Ð±Ð¸Ðµ Ð±Ñ\80оÑ\98 Ð½Ð° Ð¿Ñ\80еÑ\80абоÑ\82каÑ\82а, Ð½Ð°Ñ\81лов Ð½Ð° Ñ\81Ñ\82Ñ\80аниваÑ\82а Ð¸Ð»Ð¸ Ð¿Ð°Ðº Ð½ÐµÑ\98зина Ð½Ð°Ð·Ð½Ð°ÐºÐ°. Ð\92ажи Ð¸ за „од“ и за „на“.",
+       "apihelp-compare-description": "Ð\94обиваÑ\9aе Ð½Ð° Ñ\80азлика Ð¿Ð¾Ð¼ÐµÑ\93Ñ\83 Ð´Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86и.\n\nÐ\9cоÑ\80а Ð´Ð° Ñ\81е Ð´Ð°Ð´Ðµ Ð±Ñ\80оÑ\98оÑ\82 Ð½Ð° Ð¿Ñ\80еÑ\80абоÑ\82каÑ\82а, Ð½Ð°Ñ\81ловоÑ\82 Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ð¸Ð»Ð¸ Ð¿Ð°Ðº Ð½ÐµÑ\98зина Ð½Ð°Ð·Ð½Ð°ÐºÐ° за „од“ и за „на“.",
        "apihelp-compare-param-fromtitle": "Прв наслов за споредба.",
        "apihelp-compare-param-fromid": "Прва назнака на страница за споредба.",
        "apihelp-compare-param-fromrev": "Прва преработка за споредба.",
        "apihelp-createaccount-param-mailpassword": "Ако му се зададе било каква вредност, тогаш на корисникот ќе му биде испратена случајна лозинка.",
        "apihelp-createaccount-param-reason": "Незадолжителна прочина за создавање на сметката која ќе стои во дневниците.",
        "apihelp-createaccount-param-language": "Јазичен код кој ќе биде стандарден за корисникот (незадолжително, по основно: јазикот на самото вики).",
-       "apihelp-createaccount-example-pass": "Создај го корисникот „testuser“ со лозинката „test123“",
-       "apihelp-createaccount-example-mail": "Создај го корисникот „testmailuser“ и испрати случајно-создадена лозинка по е-пошта",
+       "apihelp-createaccount-example-pass": "Создај го корисникот <kbd>testuser</kbd> со лозинката <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Создај го корисникот <kbd>testmailuser</kbd> и испрати случајно-создадена лозинка по е-пошта.",
        "apihelp-delete-description": "Избриши страница.",
-       "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со $1pageid.",
-       "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со $1title.",
+       "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со <var>$1title</var>.",
        "apihelp-delete-param-reason": "Причина за бришење. Ако не се зададе, ќе се наведе автоматска причина.",
-       "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните.",
-       "apihelp-delete-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
-       "apihelp-delete-param-unwatch": "Отстрани ја страницата од набљудуваните.",
+       "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните на тековниот корисник.",
+       "apihelp-delete-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-delete-param-unwatch": "Отстрани ја страницата од набљудуваните на тековниот корисник.",
        "apihelp-delete-param-oldimage": "Името на страта слика за бришење според добиеното од [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
-       "apihelp-delete-example-simple": "Избриши ја Главната страница",
-       "apihelp-delete-example-reason": "Избриши ја Главната страница со причината „Подготовка за преместување“",
+       "apihelp-delete-example-simple": "Избриши ја <kbd>Главна страница</kbd>.",
+       "apihelp-delete-example-reason": "Избриши ја <kbd>Главна страница</kbd> со причината <kbd>Подготовка за преместување</kbd>.",
        "apihelp-disabled-description": "Модулот е деактивиран.",
        "apihelp-edit-description": "Создај или уреди страници.",
-       "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со $1pageid.",
-       "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со $1title.",
-       "apihelp-edit-param-section": "Број на поднасловот. 0 за првиот, „new“ за нов.",
+       "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со <var>$1pageid</var>.",
+       "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со <var>$1title</var>.",
+       "apihelp-edit-param-section": "Број на поднасловот. <kbd>0</kbd> за првиот, <kbd>new</kbd> за нов.",
        "apihelp-edit-param-sectiontitle": "Назив на новиот поднаслов",
        "apihelp-edit-param-text": "Содржина на страницата.",
        "apihelp-edit-param-summary": "Опис на уредувањето. Ова е и назив на поднасловот кога не се зададени $1section=new и $1sectiontitle.",
        "apihelp-edit-param-notminor": "Неситно уредување.",
        "apihelp-edit-param-bot": "Означи го уредувањево како ботско.",
        "apihelp-edit-param-basetimestamp": "Датум и време на преработката на базата, кои се користат за утврдување на спротиставености во уредувањето. Може да се добие преку [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
-       "apihelp-edit-param-starttimestamp": "Ð\94аÑ\82Ñ\83м Ð¸ Ð²Ñ\80еме ÐºÐ¾Ð³Ð° Ñ\81Ñ\82е Ð³Ð¾ Ð¿Ð¾Ñ\87нале Ñ\83Ñ\80едÑ\83ваÑ\9aеÑ\82о, ÐºÐ¾Ð¸ Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82аÑ\82 Ð·Ð° Ñ\83Ñ\82вÑ\80дÑ\83ваÑ\9aе Ð½Ð° Ñ\81пÑ\80оÑ\82иÑ\81Ñ\82авеноÑ\81Ñ\82и Ð²Ð¾ Ñ\83Ñ\80едÑ\83ваÑ\9aаÑ\82а. Ð¡Ð¾Ð¾Ð´Ð²ÐµÑ\82наÑ\82а Ð²Ñ\80едноÑ\81Ñ\82 Ñ\81е Ð´Ð¾Ð±Ð¸Ð²Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\98Ñ\9cи [[Special:ApiHelp/main|curtimestamp]] кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
-       "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со статијата што е избришана во меѓувреме.",
+       "apihelp-edit-param-starttimestamp": "Ð\94аÑ\82Ñ\83м Ð¸ Ð²Ñ\80еме ÐºÐ¾Ð³Ð° Ñ\81Ñ\82е Ð¿Ð¾Ñ\87нало Ñ\83Ñ\80едÑ\83ваÑ\9aеÑ\82о, ÐºÐ¾Ð¸ Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82аÑ\82 Ð·Ð° Ñ\83Ñ\82вÑ\80дÑ\83ваÑ\9aе Ð½Ð° Ñ\81пÑ\80оÑ\82иÑ\81Ñ\82авеноÑ\81Ñ\82и Ð²Ð¾ Ñ\83Ñ\80едÑ\83ваÑ\9aаÑ\82а. Ð¡Ð¾Ð¾Ð´Ð²ÐµÑ\82наÑ\82а Ð²Ñ\80едноÑ\81Ñ\82 Ñ\81е Ð´Ð¾Ð±Ð¸Ð²Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\98Ñ\9cи <var>[[Special:ApiHelp/main|curtimestamp]]</var> кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
+       "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со страницата што е избришана во меѓувреме.",
        "apihelp-edit-param-createonly": "Не ја уредувај страницата ако веќе постои.",
        "apihelp-edit-param-nocreate": "Дај грешка ако страницата не постои.",
-       "apihelp-edit-param-watch": "Додај ја страницата во набљудуваните.",
-       "apihelp-edit-param-unwatch": "Отстрани ја страницата од набљудуваните.",
-       "apihelp-edit-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-edit-param-watch": "Додај ја страницата во набљудуваните на тековниот корисник.",
+       "apihelp-edit-param-unwatch": "Отстрани ја страницата од набљудуваните на тековниот корисник.",
+       "apihelp-edit-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
        "apihelp-edit-param-md5": "MD5-тарабата на параметарот $1text, или параметрите $1prependtext и $1appendtext поврзани. Ако е зададено, уредувањето нема да се изврши без тарабата да биде исправна.",
        "apihelp-edit-param-prependtext": "Ставете го текстов на почетокот од страницата. Го заменува  $1text.",
        "apihelp-edit-param-appendtext": "Ставете го текстов на крајот од страницата. Го заменува $1text.\n\nКористете $1section=new наместо овој параметар за да приложите кон новиот поднаслов.",
        "apihelp-emailuser-param-subject": "Наслов.",
        "apihelp-emailuser-param-text": "Содржина.",
        "apihelp-emailuser-param-ccme": "Прати ми примерок и мене.",
-       "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот „WikiSysop“ со текстот „Содржина“",
+       "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот <kbd>WikiSysop</kbd> со текстот <kbd>Содржина</kbd>.",
        "apihelp-expandtemplates-description": "Ги проширува сите шаблони во викитекст.",
        "apihelp-expandtemplates-param-title": "Наслов на страница.",
        "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
        "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
-       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;properties: Својства на страницата определени од проширени волшебни зборови во викитекстот.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
        "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
        "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
-       "apihelp-expandtemplates-example-simple": "Прошири го викитекстот „<nowiki>{{Project:Sandbox}}</nowiki>“",
+       "apihelp-expandtemplates-example-simple": "Прошири го викитекстот <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-feedcontributions-description": "Дава канал со придонеси на корисник.",
        "apihelp-feedcontributions-param-feedformat": "Формат на каналот.",
        "apihelp-feedcontributions-param-user": "За кои корисници да се прикажуваат придонесите.",
        "apihelp-feedcontributions-param-toponly": "Прикажувај само последни преработки.",
        "apihelp-feedcontributions-param-newonly": "Прикажувај само новосоздадени страници",
        "apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
-       "apihelp-feedcontributions-example-simple": "Покажувај придонеси на [[Корисник:Пример]]",
+       "apihelp-feedcontributions-example-simple": "Покажувај придонеси на <kbd>Пример</kbd>.",
        "apihelp-feedrecentchanges-description": "Дава канал со скорешни промени.",
        "apihelp-feedrecentchanges-param-feedformat": "Форматот на каналот.",
        "apihelp-feedrecentchanges-param-namespace": "На кој именски простор да се ограничат резултатите.",
        "apihelp-feedrecentchanges-param-hideanons": "Скриј ги промените направени од анонимни корисници.",
        "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
-       "apihelp-feedrecentchanges-param-hidemyself": "СкÑ\80иÑ\98 Ð³Ð¸ Ð¼Ð¾Ð¸Ñ\82е Ð¿Ñ\80омени.",
+       "apihelp-feedrecentchanges-param-hidemyself": "СкÑ\80иÑ\98 Ð³Ð¸ Ð¿Ñ\80омениÑ\82е Ð½Ð° Ñ\82ековниоÑ\82 ÐºÐ¾Ñ\80иÑ\81ник.",
        "apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
        "apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
        "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": "Модули за приказ на помош за (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "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-help-example-query": "Помош за два подмодула за барања",
        "apihelp-imagerotate-description": "Сврти една или повеќе слики.",
        "apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
-       "apihelp-imagerotate-example-simple": "Сврти ја [[:Податотека:Пример.png]] за 90 степени",
-       "apihelp-imagerotate-example-generator": "Сврти ги сите слики во [[:Категорија:Некоја]] за 180 степени",
-       "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот „xml“.",
+       "apihelp-imagerotate-example-simple": "Сврти ја <kbd>Податотека:Пример.png</kbd> за <kbd>90</kbd> степени.",
+       "apihelp-imagerotate-example-generator": "Сврти ги сите слики во <kbd>Категорија:Некоја</kbd> за <kbd>180</kbd> степени.",
+       "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот <var>xml</var>.",
        "apihelp-import-param-summary": "Увези опис.",
        "apihelp-import-param-xml": "Подигната XML-податотека.",
        "apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
        "apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
        "apihelp-import-param-fullhistory": "За меѓујазични увози:: увези ја целата историја, а не само тековната верзија.",
        "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
-       "apihelp-import-param-namespace": "Ð\97а Ð¼ÐµÑ\93Ñ\83Ñ\98азиÑ\87ни Ñ\83вози: Ñ\83вези Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¸Ð¼ÐµÐ½Ñ\81ки Ð¿Ñ\80оÑ\81Ñ\82оÑ\80.",
-       "apihelp-import-param-rootpage": "Увези како потстраница на страницава.",
+       "apihelp-import-param-namespace": "Увези Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¸Ð¼ÐµÐ½Ñ\81ки Ð¿Ñ\80оÑ\81Ñ\82оÑ\80. Ð¡Ðµ Ð½Ð°Ð¼ÐµÑ\82нÑ\83ва Ð²Ñ\80з Ð¿Ð°Ñ\80амеÑ\82аÑ\80оÑ\82 <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Увези како потстраница на страницава. Се занемарува ако е укажан параметарот <kbd>$1namespace</kbd>.",
        "apihelp-import-example-import": "Увези [[meta:Help:Parserfunctions]] во именскиот простор 100 со целата историја.",
        "apihelp-login-description": "Најавете се и добијте колачиња за заверка.\n\nВо случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
        "apihelp-login-param-name": "Корисничко име.",
        "apihelp-logout-description": "Одјави се и исчисти ги податоците на седницата.",
        "apihelp-logout-example-logout": "Одјави го тековниот корисник",
        "apihelp-move-description": "Премести страница.",
-       "apihelp-move-param-from": "Ð\9dаÑ\81лов Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\81акаÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80емеÑ\81Ñ\82иÑ\82е. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о $1fromid.",
-       "apihelp-move-param-fromid": "Ð\9dазнака Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\81акаÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80емеÑ\81Ñ\82иÑ\82е. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о $1from.",
-       "apihelp-move-param-to": "Како сакате да гласи новиот наслов на страницата.",
-       "apihelp-move-param-reason": "Ð\9fÑ\80иÑ\87ина Ð·Ð° Ð¿Ñ\80емеÑ\81Ñ\82увањето.",
-       "apihelp-move-param-movetalk": "Ð\9fÑ\80емеÑ\81Ñ\82и ја и страницата за разговор, ако ја има.",
-       "apihelp-move-param-movesubpages": "Ð\9fÑ\80емеÑ\81Ñ\82и Ð¿Ð¾Ñ\82Ñ\81Ñ\82Ñ\80аниÑ\86и, Ð°ÐºÐ¾ Ð¸Ð¼Ð°",
+       "apihelp-move-param-from": "Ð\9dаÑ\81лов Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\82Ñ\80еба Ð´Ð° Ñ\81е Ð¿Ñ\80емеÑ\81Ñ\82и. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о <var>$1fromid</var>.",
+       "apihelp-move-param-fromid": "Ð\9dазнака Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\82Ñ\80еба Ð´Ð° Ñ\81е Ð¿Ñ\80емеÑ\81Ñ\82и. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о <var>$1from</var>.",
+       "apihelp-move-param-to": "Како да гласи новата страница.",
+       "apihelp-move-param-reason": "Ð\9fÑ\80иÑ\87ина Ð·Ð° Ð¿Ñ\80еименувањето.",
+       "apihelp-move-param-movetalk": "Ð\9fÑ\80еименÑ\83ваÑ\98 ја и страницата за разговор, ако ја има.",
+       "apihelp-move-param-movesubpages": "Ð\9fÑ\80еименÑ\83ваÑ\98 Ð¿Ð¾Ñ\82Ñ\81Ñ\82Ñ\80аниÑ\86и, Ð°ÐºÐ¾ Ð¸Ð¼Ð°.",
        "apihelp-move-param-noredirect": "Не прави пренасочување.",
-       "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните.",
-       "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните.",
-       "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните на тековниот корисник.",
+       "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните на тековниот корисник.",
+       "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
        "apihelp-move-param-ignorewarnings": "Занемари предупредувања.",
-       "apihelp-move-example-move": "Премести го „Лош наслов“ на „Добар наслов“, неоставајќи пренасочување",
+       "apihelp-move-example-move": "Премести го <kbd>Лош наслов</kbd> на <kbd>Добар наслов</kbd>, неоставајќи пренасочување",
        "apihelp-opensearch-description": "Пребарување на викито со протоколот OpenSearch.",
        "apihelp-opensearch-param-search": "Низа за пребарување.",
        "apihelp-opensearch-param-limit": "Максималниот број на резултати за прикажување.",
        "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
-       "apihelp-opensearch-param-suggest": "Не прави ништо ако [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] е неточно.",
+       "apihelp-opensearch-param-suggest": "Не прави ништо ако <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> е неточно.",
        "apihelp-opensearch-param-redirects": "Како да се работи со пренасочувања:\n;return: Дај го самото пренасочување.\n;resolve: Дај ја целната страница. Може да даде помалку од $1limit резултати.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
        "apihelp-opensearch-param-format": "Формат на изводот.",
-       "apihelp-opensearch-example-te": "Најди страници што почнуваат со „Те“",
+       "apihelp-opensearch-example-te": "Најди страници што почнуваат со <kbd>Те</kbd>.",
        "apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката „userjs-“ (предвиден за употреба од кориснички скрипти).",
        "apihelp-options-param-reset": "Ги враќа поставките по основно.",
-       "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста „$1reset“.",
+       "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста <var>$1reset</var>.",
        "apihelp-options-param-change": "Список на промени во форматот name=value (на пр. skin=vector). Вредностите не треба да содржат исправени црти. Ако не зададете вредност (дури ни знак за равенство), на пр., можност|другаможност|..., ќе биде зададена вредноста на можноста по основно.",
-       "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од „$1optionvalue“.",
-       "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од „$1optionnam“. Може да содржи исправени црти.",
+       "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од <var>$1optionname</var>. Може да содржи исправени црти.",
        "apihelp-options-example-reset": "Врати ги сите поставки по основно",
-       "apihelp-options-example-change": "Смени ги поставките „skinЗ“ и „hideminor“",
-       "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги „skin“ и „nickname“",
+       "apihelp-options-example-change": "Смени ги поставките <kbd>skin</kbd и <kbd>hideminor</kbd>.",
+       "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги <kbd>skin</kbd> и <kbd>nickname</kbd>.",
        "apihelp-paraminfo-description": "Набави информации за извршнички (API) модули.",
-       "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите <var>action</var> и <var>format</var>, или пак <kbd>main</kbd>). Може да се укажат подмодули со <kbd>+</kbd>.",
        "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
-       "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот prop=, meta= или list=). Користете го „$1modules=query+foo“ наместо „$1querymodules=foo“.",
-       "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го „$1modules=main“ наместо тоа.",
+       "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот <var>prop</var>, <var>meta</var> или <var>list</var>). Користете го <kbd>$1modules=query+foo</kbd> наместо <kbd>$1querymodules=foo</kbd>.",
+       "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го <kbd>$1modules=main</kbd> наместо тоа.",
        "apihelp-paraminfo-param-pagesetmodule": "Дај ги сите информации и за модулот на збирот страници (укажувајќи titles= и сродни).",
-       "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот format=). Наместо тоа, користете го „$1modules“.",
+       "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот <var>format</var>). Наместо тоа, користете го <var>$1modules</var>.",
        "apihelp-parse-param-summary": "Опис за расчленување.",
        "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
        "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
        "apihelp-protect-param-reason": "Причиина за (од)заштитување",
        "apihelp-protect-example-protect": "Заштити страница",
        "apihelp-purge-param-forcelinkupdate": "Поднови ги табелите со врски.",
-       "apihelp-purge-example-simple": "Превчитај ги „Главна страница“ и „Извршник“",
+       "apihelp-purge-example-simple": "Превчитај ги <kbd>Главна страница</kbd> и <kbd>Извршник</kbd>.",
        "apihelp-query-param-list": "Кои списоци да се набават.",
        "apihelp-query-param-meta": "Кои метаподатоци да се набават.",
        "apihelp-query+allcategories-description": "Наброј ги сите категории.",
        "apihelp-query+allcategories-param-dir": "Насока на подредувањето.",
        "apihelp-query+alldeletedrevisions-param-from": "Почни го исписот од овој наслов.",
        "apihelp-query+alldeletedrevisions-param-to": "Запри го исписот на овој наслов.",
-       "apihelp-query+alldeletedrevisions-example-user": "СпиÑ\81ок Ð½Ð° Ð¿Ð¾Ñ\81ледниÑ\82е 50 Ð¸Ð·Ð±Ñ\80иÑ\88ани Ð¿Ñ\80идонеÑ\81и Ð½Ð° Ð\9aоÑ\80иÑ\81ник:Ð\9fÑ\80имеÑ\80",
-       "apihelp-query+alldeletedrevisions-example-ns-main": "Список на последните 50 избришани преработки во главниот именски простор",
-       "apihelp-query+allimages-example-B": "Прикажи список на податотеки што почнуваат со буквата „Б“",
+       "apihelp-query+alldeletedrevisions-example-user": "СпиÑ\81ок Ð½Ð° Ð¿Ð¾Ñ\81ледниÑ\82е 50 Ð¸Ð·Ð±Ñ\80иÑ\88ани Ð¿Ñ\80идонеÑ\81и Ð½Ð° ÐºÐ¾Ñ\80иÑ\81никоÑ\82 <kbd>Ð\9fÑ\80имеÑ\80<kbd>.",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "Список на последните 50 избришани преработки во главниот именски простор.",
+       "apihelp-query+allimages-example-B": "Прикажи список на податотеки што почнуваат со буквата <kbd>Б</kbd>.",
        "apihelp-query+allimages-example-recent": "Прикажи список на неодамна подигнати податотеки сличен на [[Special:NewFiles]]",
-       "apihelp-query+allimages-example-generator": "Прикажи информации за околу 4 податотеки што почнуваат со буквата „Т“",
+       "apihelp-query+allimages-example-generator": "Прикажи информации за околу 4 податотеки што почнуваат со буквата <kbd>Т</kbd>.",
        "apihelp-query+alllinks-description": "Наброј ги сите врски што водат кон даден именски простор.",
        "apihelp-query+alllinks-param-from": "Наслов на врската од која ќе почне набројувањето.",
        "apihelp-query+alllinks-param-to": "Наслов на врската на која ќе запре набројувањето.",
        "apihelp-query+alllinks-param-prefix": "Пребарај ги сите сврзани наслови што почнуваат со оваа вредност.",
-       "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со $1prop=ids.\nКога се користи како создавач, дава целни страници наместо изворни.",
+       "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со <kbd>$1prop=ids</kbd>.\nКога се користи како создавач, дава целни страници наместо изворни.",
+       "apihelp-query+alllinks-param-prop": "Кои информации да се вклучат:\n;ids:Ја додава назнаката на страницата на која е врската (не може да се користи со <var>$1unique</var>).\n;title:Го додава насловот на врската.",
        "apihelp-query+alllinks-param-namespace": "Именскиот простор што се набројува.",
        "apihelp-query+alllinks-param-limit": "Колку вкупно ставки да се дадат.",
        "apihelp-query+alllinks-param-dir": "Насока на исписот.",
-       "apihelp-query+alllinks-example-B": "Списока на наслови со врски, вклучувајќи ги отсутните, со назнаки на нивните страници, почнувајќи од Б",
+       "apihelp-query+alllinks-example-B": "Списока на наслови со врски, вклучувајќи ги отсутните, со назнаки на нивните страници, почнувајќи од <kbd>Б</kbd>.",
        "apihelp-query+alllinks-example-unique": "Испиши единствени наслови со врски",
        "apihelp-query+alllinks-example-unique-generator": "Ги дава сите наслови со врски, означувајќи ги отсутните",
        "apihelp-query+alllinks-example-generator": "Дава страници што ги содржат врските",
        "apihelp-query+allmessages-param-to": "Дај пораки што завршуваат со оваа порака.",
        "apihelp-query+allmessages-param-title": "Назив на страницата што ќе се користи во контекст кога се расчленува порака (за можноста $1enableparser).",
        "apihelp-query+allmessages-param-prefix": "Дај пораки со оваа претставка.",
-       "apihelp-query+allmessages-example-ipb": "Прикажи ги пораките што започнуваат со „ipb-“",
-       "apihelp-query+allmessages-example-de": "Прикажи ги пораките „август“ и „главна страница“ на германски",
+       "apihelp-query+allmessages-example-ipb": "Прикажи ги пораките што започнуваат со <kbd>ipb-</kbd>.",
+       "apihelp-query+allmessages-example-de": "Прикажи ги пораките <kbd>august</kbd> and <kbd>mainpage</kbd> на германски.",
        "apihelp-query+allpages-description": "Наброј ги сите страници последователно во даден именски простор.",
        "apihelp-query+allpages-param-from": "Наслов на страницата од која ќе почне набројувањето.",
        "apihelp-query+allpages-param-to": "Наслов на страницата на која ќе запре набројувањето.",
index 2358e83..a9f569f 100644 (file)
        "apihelp-block-param-nocreate": "Zapobiegnij utworzeniu konta.",
        "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz ich strony dyskusji.",
        "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni za <kbd>Pierwszy atak</kbd>.",
+       "apihelp-block-example-user-complex": "Zablokuj użytkownika <kbd>Vandal</kbd> na zawsze za <kbd>Vandalism</kbd> i uniemożliwij utworzenie nowego konta oraz wysyłanie emaili.",
+       "apihelp-checktoken-param-type": "Typ tokenu do przetestowania.",
        "apihelp-checktoken-param-token": "Token do przetestowania.",
+       "apihelp-checktoken-param-maxtokenage": "Maksymalny wiek tokenu, w sekundach.",
+       "apihelp-compare-param-fromtitle": "Pierwszy tytuł do porównania.",
+       "apihelp-compare-param-fromrev": "Pierwsza wersja do porównania.",
        "apihelp-compare-param-totitle": "Drugi tytuł do porównania.",
        "apihelp-compare-param-toid": "Numer drugiej strony do porównania.",
+       "apihelp-compare-param-torev": "Druga wersja do porównania.",
        "apihelp-createaccount-description": "Utwórz nowe konto.",
        "apihelp-createaccount-param-name": "Nazwa użytkownika",
+       "apihelp-createaccount-param-domain": "Domena uwierzytelniania zewnętrznego (opcjonalnie).",
+       "apihelp-createaccount-param-token": "Token tworzenia konta uzyskany w pierwszym zapytaniu.",
        "apihelp-createaccount-param-email": "Adres email użytkownika (opcjonalne).",
        "apihelp-createaccount-param-realname": "Prawdziwe imię i nazwisko użytkownika (opcjonalne).",
        "apihelp-createaccount-param-reason": "Opcjionalny powód tworzenia konta (aby został umieszczony w logu).",
        "apihelp-edit-param-createonly": "Nie edytuj strony, jesli już istnieje.",
        "apihelp-edit-param-watch": "Dodaj stronę do aktualnej listy obserwacji użytkownika.",
        "apihelp-edit-param-unwatch": "Usuń stronę z aktualnej listy obserwacji użytkownika.",
+       "apihelp-edit-param-redirect": "Automatycznie rozwiązuj przekierowania.",
        "apihelp-edit-example-edit": "Edytuj stronę",
        "apihelp-emailuser-description": "Wyślij e‐mail do użytkownika.",
+       "apihelp-emailuser-param-target": "Użytkownik, do którego wysyłany jest e-mail.",
        "apihelp-emailuser-param-text": "Treść emaila.",
+       "apihelp-emailuser-param-ccme": "Wyślij kopię wiadomości do mnie.",
        "apihelp-expandtemplates-param-title": "Tytuł strony.",
+       "apihelp-expandtemplates-param-text": "Wikitext do przekonwertowania.",
+       "apihelp-feedrecentchanges-param-namespace": "Przestrzeń nazw, do której ograniczone są wyniki.",
+       "apihelp-feedrecentchanges-param-invert": "Wszystkie przestrzenie nazw oprócz wybranej.",
+       "apihelp-feedrecentchanges-param-limit": "Maksymalna liczba zwracanych wyników.",
+       "apihelp-feedrecentchanges-param-hideminor": "Ukryj drobne zmiany.",
+       "apihelp-feedrecentchanges-param-hidebots": "Ukryj zmiany zrobione przez boty.",
+       "apihelp-feedrecentchanges-param-hideanons": "Ukryj zmiany zrobione przez anonimowych użytkowników.",
+       "apihelp-feedrecentchanges-param-hideliu": "Ukryj zmiany zrobione przez zarejestrowanych użytkowników.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ukryj sprawdzone zmiany.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ukryj zmiany zrobione przez obecnego użytkownika.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtruj po znacznikach.",
        "apihelp-feedrecentchanges-example-simple": "Pokaż ostatnie zmiany.",
+       "apihelp-feedrecentchanges-example-30days": "Pokaż ostatnie zmiany z 30 dni.",
+       "apihelp-filerevert-description": "Przywróć plik do starej wersji.",
+       "apihelp-filerevert-param-filename": "Docelowa nazwa pliku bez prefiksu Plik:",
+       "apihelp-filerevert-param-comment": "Prześlij komentarz.",
        "apihelp-help-description": "Wyświetl pomoc dla określonych modułów.",
        "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości <var>action</var> i <var>format</var> parametry, lub <kbd>main</kbd>). Może określić podmoduły z <kbd>+</kbd>.",
        "apihelp-help-param-recursivesubmodules": "Zawiera pomoc dla podmodułów rekursywnie.",
        "apihelp-help-example-main": "Pomoc dla modułu głównego",
        "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
        "apihelp-help-example-help": "Pomoc dla modułu pomocy",
+       "apihelp-imagerotate-description": "Obróć jeden lub wiecej obrazków.",
+       "apihelp-imagerotate-param-rotation": "Stopni w prawo, aby obrócić zdjęcie.",
+       "apihelp-import-param-xml": "Przesłany plik XML.",
        "apihelp-login-param-name": "Nazwa użytkownika.",
        "apihelp-login-param-password": "Hasło.",
+       "apihelp-login-param-domain": "Domena (opcjonalnie).",
+       "apihelp-login-param-token": "Token logowania zdobyty w pierwszym zapytaniu.",
+       "apihelp-login-example-gettoken": "Zdobądź token logowania.",
        "apihelp-login-example-login": "Zaloguj się",
+       "apihelp-logout-description": "Wyloguj i wyczyść dane sesji.",
+       "apihelp-logout-example-logout": "Wyloguj obecnego użytkownika.",
        "apihelp-managetags-param-ignorewarnings": "Czy zignorować ostrzeżenia, które pojawiają się w trakcie operacji.",
        "apihelp-move-description": "Przenieś stronę.",
        "apihelp-move-param-reason": "Powód zmiany nazwy.",
+       "apihelp-move-param-movetalk": "Zmień nazwę strony dyskusji, jeśli istnieje.",
+       "apihelp-move-param-noredirect": "Nie twórz przekierowania.",
        "apihelp-move-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
+       "apihelp-opensearch-param-search": "Wyszukaj tekst.",
+       "apihelp-opensearch-param-limit": "Maksymalna liczba zwracanych wyników.",
+       "apihelp-opensearch-param-namespace": "Przestrzenie nazw do przeszukania.",
+       "apihelp-opensearch-param-format": "Format danych wyjściowych.",
+       "apihelp-opensearch-example-te": "Znajdź strony zaczynające się od <kbd>Te</kbd>.",
+       "apihelp-options-example-reset": "Resetuj wszystkie preferencje.",
+       "apihelp-paraminfo-description": "Zdobądź informacje o modułach API.",
+       "apihelp-patrol-description": "Sprawdź stronę lub edycję.",
+       "apihelp-patrol-param-revid": "Numer edycji do sprawdzenia.",
+       "apihelp-patrol-example-rcid": "Sprawdź ostatnią zmianę.",
+       "apihelp-patrol-example-revid": "Sprawdź edycje.",
+       "apihelp-protect-description": "Zmień poziom zabezpieczenia strony.",
+       "apihelp-protect-param-reason": "Powód zabezpieczania/odbezpieczania.",
+       "apihelp-protect-param-cascade": "Włacz ochronę kaskadową (chronione są wszystkie strony zawarte w tej stronie). Ignorowane jeśli wszystkie poziomy ochrony nie wspierają kaskadowania.",
        "apihelp-protect-example-protect": "Zabezpiecz stronę",
        "apihelp-query+allpages-example-B": "Pokaż listę stron rozpoczynających się na literę <kbd>B</kbd>.",
+       "apihelp-query+allredirects-description": "Lista wszystkich przekierowań do przestrzeni nazw.",
+       "apihelp-query+categorymembers-description": "Wszystkie strony w danej kategorii.",
        "apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Dodaje kanoniczny tytuł pliku.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias rozmiaru.",
index dc3cc2d..3db32ba 100644 (file)
        "apihelp-opensearch-param-limit": "回傳的結果數量上限。",
        "apihelp-opensearch-param-namespace": "搜尋的命名空間。",
        "apihelp-opensearch-param-format": "輸出的格式。",
+       "apihelp-options-param-reset": "重設偏好設定為網站預設值。",
        "apihelp-options-example-reset": "重設所有偏好設定",
+       "apihelp-parse-example-page": "解析一個頁面。",
+       "apihelp-parse-example-text": "解析 wikitext。",
+       "apihelp-parse-example-texttitle": "解析 wikitext,指定頁面標題。",
+       "apihelp-parse-example-summary": "解析一個摘要。",
+       "apihelp-patrol-description": "巡查一個頁面或修訂。",
+       "apihelp-patrol-param-rcid": "要巡查的近期變更 ID。",
+       "apihelp-patrol-param-revid": "要巡查的修訂 ID。",
+       "apihelp-patrol-example-rcid": "巡查一個近期變更。",
+       "apihelp-patrol-example-revid": "巡查一個修訂。",
+       "apihelp-protect-description": "變更頁面的保護層級。",
+       "apihelp-protect-param-title": "要(解除)保護頁面的標題。 不能與 $1pageid 一起使用。",
+       "apihelp-protect-param-pageid": "要(解除)保護頁面的 ID。 不能與 $1title 一起使用。",
+       "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-query+allcategories-param-limit": "要回傳的分類數量。",
        "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
        "apihelp-query+allimages-param-limit": "要回傳的圖片總數。",
index 564feb6..64f89bf 100644 (file)
@@ -518,7 +518,6 @@ class ChangeTags {
                if ( $rev_id ) {
                        $rev = Revision::newFromId( $rev_id );
                        if ( $rev ) {
-                               $title = $rev->getTitle();
                                $logEntry->setTarget( $rev->getTitle() );
                        }
                } elseif ( $log_id ) {
@@ -707,6 +706,7 @@ class ChangeTags {
         * @param User $user Who to attribute the action to
         * @param int $tagCount For deletion only, how many usages the tag had before
         * it was deleted.
+        * @return int ID of the inserted log entry
         * @since 1.25
         */
        protected static function logTagManagementAction( $action, $tag, $reason,
@@ -1064,10 +1064,10 @@ class ChangeTags {
         * @since 1.25
         */
        public static function listExtensionActivatedTags() {
-               // Caching...
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
+
                $key = wfMemcKey( 'active-tags' );
-               $tags = $wgMemc->get( $key );
+               $tags = $cache->get( $key );
                if ( $tags ) {
                        return $tags;
                }
@@ -1077,7 +1077,8 @@ class ChangeTags {
                Hooks::run( 'ChangeTagsListActive', array( &$extensionActive ) );
 
                // Short-term caching.
-               $wgMemc->set( $key, $extensionActive, 300 );
+               $cache->set( $key, $extensionActive, 300 );
+
                return $extensionActive;
        }
 
@@ -1105,10 +1106,10 @@ class ChangeTags {
         * @since 1.25
         */
        public static function listExplicitlyDefinedTags() {
-               // Caching...
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
+
                $key = wfMemcKey( 'valid-tags-db' );
-               $tags = $wgMemc->get( $key );
+               $tags = $cache->get( $key );
                if ( $tags ) {
                        return $tags;
                }
@@ -1125,7 +1126,8 @@ class ChangeTags {
                $emptyTags = array_filter( array_unique( $emptyTags ) );
 
                // Short-term caching.
-               $wgMemc->set( $key, $emptyTags, 300 );
+               $cache->set( $key, $emptyTags, 300 );
+
                return $emptyTags;
        }
 
@@ -1139,10 +1141,10 @@ class ChangeTags {
         * @since 1.25
         */
        public static function listExtensionDefinedTags() {
-               // Caching...
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
+
                $key = wfMemcKey( 'valid-tags-hook' );
-               $tags = $wgMemc->get( $key );
+               $tags = $cache->get( $key );
                if ( $tags ) {
                        return $tags;
                }
@@ -1152,7 +1154,8 @@ class ChangeTags {
                $emptyTags = array_filter( array_unique( $emptyTags ) );
 
                // Short-term caching.
-               $wgMemc->set( $key, $emptyTags, 300 );
+               $cache->set( $key, $emptyTags, 300 );
+
                return $emptyTags;
        }
 
@@ -1162,10 +1165,12 @@ class ChangeTags {
         * @since 1.25
         */
        public static function purgeTagCacheAll() {
-               global $wgMemc;
-               $wgMemc->delete( wfMemcKey( 'active-tags' ) );
-               $wgMemc->delete( wfMemcKey( 'valid-tags-db' ) );
-               $wgMemc->delete( wfMemcKey( 'valid-tags-hook' ) );
+               $cache = ObjectCache::getMainWANInstance();
+
+               $cache->delete( wfMemcKey( 'active-tags' ) );
+               $cache->delete( wfMemcKey( 'valid-tags-db' ) );
+               $cache->delete( wfMemcKey( 'valid-tags-hook' ) );
+
                self::purgeTagUsageCache();
        }
 
@@ -1174,8 +1179,9 @@ class ChangeTags {
         * @since 1.25
         */
        public static function purgeTagUsageCache() {
-               global $wgMemc;
-               $wgMemc->delete( wfMemcKey( 'change-tag-statistics' ) );
+               $cache = ObjectCache::getMainWANInstance();
+
+               $cache->delete( wfMemcKey( 'change-tag-statistics' ) );
        }
 
        /**
@@ -1188,10 +1194,10 @@ class ChangeTags {
         * @return array Array of string => int
         */
        public static function tagUsageStatistics() {
-               // Caching...
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
+
                $key = wfMemcKey( 'change-tag-statistics' );
-               $stats = $wgMemc->get( $key );
+               $stats = $cache->get( $key );
                if ( $stats ) {
                        return $stats;
                }
@@ -1217,7 +1223,8 @@ class ChangeTags {
                }
 
                // Cache for a very short time
-               $wgMemc->set( $key, $out, 300 );
+               $cache->set( $key, $out, 300 );
+
                return $out;
        }
 
index ad12e19..d2b5ecb 100644 (file)
@@ -134,7 +134,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return int
         */
        function insertId() {
-               return $this->mConn->insert_id;
+               return (int)$this->mConn->insert_id;
        }
 
        /**
index edaef4a..6027375 100644 (file)
@@ -253,7 +253,7 @@ class LegacyLogger extends AbstractLogger {
                global $wgDBerrorLogTZ;
                static $cachedTimezone = null;
 
-               if ( $wgDBerrorLogTZ && !$cachedTimezone ) {
+               if ( !$cachedTimezone ) {
                        $cachedTimezone = new DateTimeZone( $wgDBerrorLogTZ );
                }
 
index e62f8bd..039b9c6 100644 (file)
  */
 class BadTitleError extends ErrorPageError {
        /**
-        * @param string|Message $msg A message key (default: 'badtitletext')
+        * @param string|Message|MalformedTitleException $msg A message key (default: 'badtitletext'), or
+        *     a MalformedTitleException to figure out things from
         * @param array $params Parameter to wfMessage()
         */
        public function __construct( $msg = 'badtitletext', $params = array() ) {
-               parent::__construct( 'badtitle', $msg, $params );
+               if ( $msg instanceof MalformedTitleException ) {
+                       $errorMessage = $msg->getErrorMessage();
+                       if ( !$errorMessage ) {
+                               parent::__construct( 'badtitle', 'badtitletext', array() );
+                       } else {
+                               $errorMessageParams = $msg->getErrorMessageParameters();
+                               parent::__construct( 'badtitle', $errorMessage, $errorMessageParams );
+                       }
+               } else {
+                       parent::__construct( 'badtitle', $msg, $params );
+               }
        }
 
        /**
@@ -47,5 +58,4 @@ class BadTitleError extends ErrorPageError {
                $wgOut->setStatusCode( 400 );
                parent::report();
        }
-
 }
index e7e4c75..591d684 100644 (file)
@@ -170,7 +170,7 @@ class LocalRepo extends FileRepo {
         * @return bool|Title
         */
        function checkRedirect( Title $title ) {
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
 
                $title = File::normalizeTitle( $title, 'exception' );
 
@@ -181,7 +181,7 @@ class LocalRepo extends FileRepo {
                } else {
                        $expiry = 86400; // has invalidation, 1 day
                }
-               $cachedValue = $wgMemc->get( $memcKey );
+               $cachedValue = $cache->get( $memcKey );
                if ( $cachedValue === ' ' || $cachedValue === '' ) {
                        // Does not exist
                        return false;
@@ -191,7 +191,7 @@ class LocalRepo extends FileRepo {
 
                $id = $this->getArticleID( $title );
                if ( !$id ) {
-                       $wgMemc->add( $memcKey, " ", $expiry );
+                       $cache->set( $memcKey, " ", $expiry );
 
                        return false;
                }
@@ -205,11 +205,11 @@ class LocalRepo extends FileRepo {
 
                if ( $row && $row->rd_namespace == NS_FILE ) {
                        $targetTitle = Title::makeTitle( $row->rd_namespace, $row->rd_title );
-                       $wgMemc->add( $memcKey, $targetTitle->getDBkey(), $expiry );
+                       $cache->set( $memcKey, $targetTitle->getDBkey(), $expiry );
 
                        return $targetTitle;
                } else {
-                       $wgMemc->add( $memcKey, '', $expiry );
+                       $cache->set( $memcKey, '', $expiry );
 
                        return false;
                }
@@ -489,14 +489,15 @@ class LocalRepo extends FileRepo {
         * @return void
         */
        function invalidateImageRedirect( Title $title ) {
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
+
                $memcKey = $this->getSharedCacheKey( 'image_redirect', md5( $title->getDBkey() ) );
                if ( $memcKey ) {
                        // Set a temporary value for the cache key, to ensure
                        // that this value stays purged long enough so that
                        // it isn't refreshed with a stale value due to a
                        // lagged slave.
-                       $wgMemc->set( $memcKey, ' PURGED', 12 );
+                       $cache->delete( $memcKey, 12 );
                }
        }
 
index 1d45428..0713a92 100644 (file)
@@ -485,7 +485,7 @@ class ArchivedFile {
                if ( $type == 'text' ) {
                        return $this->user_text;
                } elseif ( $type == 'id' ) {
-                       return $this->user;
+                       return (int)$this->user;
                }
 
                throw new MWException( "Unknown type '$type'." );
index 3d5d5d6..e51f381 100644 (file)
@@ -219,11 +219,15 @@ class ForeignAPIFile extends File {
        }
 
        /**
-        * @param string $method
+        * @param string $type
         * @return int|null|string
         */
-       public function getUser( $method = 'text' ) {
-               return isset( $this->mInfo['user'] ) ? strval( $this->mInfo['user'] ) : null;
+       public function getUser( $type = 'text' ) {
+               if ( $type == 'text' ) {
+                       return isset( $this->mInfo['user'] ) ? strval( $this->mInfo['user'] ) : null;
+               } elseif ( $type == 'id' ) {
+                       return 0; // What makes sense here, for a remote user?
+               }
        }
 
        /**
index d368d90..ba437f0 100644 (file)
@@ -734,7 +734,7 @@ class LocalFile extends File {
                if ( $type == 'text' ) {
                        return $this->user_text;
                } elseif ( $type == 'id' ) {
-                       return $this->user;
+                       return (int)$this->user;
                }
        }
 
@@ -753,7 +753,7 @@ class LocalFile extends File {
        function getBitDepth() {
                $this->load();
 
-               return $this->bits;
+               return (int)$this->bits;
        }
 
        /**
index 39ed24f..738fec3 100644 (file)
@@ -51,6 +51,7 @@
  *    'id'                  -- HTML id attribute
  *    'cssclass'            -- CSS class
  *    'csshelpclass'        -- CSS class used to style help text
+ *    'dir'                 -- Direction of the element.
  *    'options'             -- associative array mapping labels to values.
  *                             Some field types support multi-level arrays.
  *    'options-messages'    -- associative array mapping message keys to values.
@@ -357,6 +358,7 @@ class HTMLForm extends ContextSource {
         * @return bool
         */
        public function isVForm() {
+               wfDeprecated( __METHOD__, '1.25' );
                return false;
        }
 
index 9576c77..0c3fe44 100644 (file)
@@ -10,6 +10,7 @@ abstract class HTMLFormField {
        protected $mValidationCallback;
        protected $mFilterCallback;
        protected $mName;
+       protected $mDir;
        protected $mLabel; # String label.  Set on construction
        protected $mID;
        protected $mClass = '';
@@ -377,6 +378,10 @@ abstract class HTMLFormField {
                        $this->mName = $params['name'];
                }
 
+               if ( isset( $params['dir'] ) ) {
+                       $this->mDir = $params['dir'];
+               }
+
                $validName = Sanitizer::escapeId( $this->mName );
                $validName = str_replace( array( '.5B', '.5D' ), array( '[', ']' ), $validName );
                if ( $this->mName != $validName && !isset( $params['nodata'] ) ) {
index 88df49d..a67e52e 100644 (file)
@@ -11,6 +11,7 @@ class HTMLTextField extends HTMLFormField {
                                'name' => $this->mName,
                                'size' => $this->getSize(),
                                'value' => $value,
+                               'dir' => $this->mDir,
                        ) + $this->getTooltipAndAccessKey();
 
                if ( $this->mClass !== '' ) {
index 7826a0c..0c0e425 100644 (file)
@@ -38,6 +38,7 @@ class VFormHTMLForm extends HTMLForm {
        protected $displayFormat = 'vform';
 
        public function isVForm() {
+               wfDeprecated( __METHOD__, '1.25' );
                return true;
        }
 
index 44ca7d3..0ccdb11 100644 (file)
@@ -133,26 +133,24 @@ class WebInstallerOutput {
                        'mediawiki.skinning.interface',
                );
 
-               if ( file_exists( "$wgStyleDirectory/Vector/Vector.php" ) ) {
+               $resourceLoader = new ResourceLoader();
+
+               if ( file_exists( "$wgStyleDirectory/Vector/skin.json" ) ) {
                        // Force loading Vector skin if available as a fallback skin
                        // for whatever ResourceLoader wants to have as the default.
-
-                       // Include instead of require, as this will work without it, it will just look bad.
-                       // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
-                       // definitions for its RL modules there that we use implicitly below.
-
-                       // @codingStandardsIgnoreStart
-                       global $wgResourceModules; // This is NOT UNUSED!
-                       // @codingStandardsIgnoreEnd
-
-                       include_once "$wgStyleDirectory/Vector/Vector.php";
+                       $registry = new ExtensionRegistry();
+                       $data = $registry->readFromQueue( array(
+                               "$wgStyleDirectory/Vector/skin.json" => 1,
+                       ) );
+                       if ( isset( $data['globals']['wgResourceModules'] ) ) {
+                               $resourceLoader->register( $data['globals']['wgResourceModules'] );
+                       }
 
                        $moduleNames[] = 'skins.vector.styles';
                }
 
                $moduleNames[] = 'mediawiki.legacy.config';
 
-               $resourceLoader = new ResourceLoader();
                $rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( array(
                                'debug' => 'true',
                                'lang' => $this->getLanguageCode(),
@@ -163,6 +161,10 @@ class WebInstallerOutput {
                foreach ( $moduleNames as $moduleName ) {
                        /** @var ResourceLoaderFileModule $module */
                        $module = $resourceLoader->getModule( $moduleName );
+                       if ( !$module ) {
+                               // T98043: Don't fatal, but it won't look as pretty.
+                               continue;
+                       }
 
                        // Based on: ResourceLoaderFileModule::getStyles (without the DB query)
                        $styles = array_merge( $styles, ResourceLoader::makeCombinedStyles(
index 62f0f03..5680c35 100644 (file)
@@ -47,7 +47,6 @@
        "config-env-bad": "Comprobóse l'entornu.\nNun pue instalar MediaWiki.",
        "config-env-php": "PHP $1 ta instaláu.",
        "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.",
index 0488914..077c503 100644 (file)
@@ -41,7 +41,7 @@
        "config-missing-db-name": "Ахьа «{{int:config-db-name}}» маьӀна даздан дезаш ду.",
        "config-missing-db-host": "Ахьа «{{int:config-db-host}}» параметран маьӀна даздан дезаш ду.",
        "config-missing-db-server-oracle": "Ахьа тӀеюза езаш ю «{{int:config-db-host-oracle}}»",
-       "config-invalid-db-server-oracle": "Хаамийн базан «$1» нийса йоцу TNS.\nЛелае «TNS Name», я могӀа «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm ЦӀераш техкаран кеп Oracle])",
+       "config-invalid-db-server-oracle": "Хаамийн базан «$1» нийса йоцу TNS.\nЛелае «TNS Name», я могӀа «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm ЦӀерш техкаран кеп Oracle])",
        "config-sqlite-fts3-downgrade": "PHPн  гӀо до FTS3 яц — кхуссу таблицаш",
        "config-mysql-utf8": "UTF-8",
        "config-mssql-auth": "Аутентификацин тайп:",
index da2de84..0321d8e 100644 (file)
@@ -53,7 +53,6 @@
        "config-env-bad": "Prostředí bylo zkontrolováno.\nMediaWiki nelze nainstalovat.",
        "config-env-php": "Je nainstalováno PHP $1.",
        "config-env-hhvm": "Je nainstalováno HHVM $1.",
-       "config-unicode-using-utf8": "Pro normalizaci Unicode se používá utf8_normalize.so Briona Vibbera.",
        "config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].",
        "config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návštěvností, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].",
        "config-unicode-update-warning": "'''Upozornění''': Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ji aktualizovat].",
index a79282a..b5794bf 100644 (file)
@@ -9,7 +9,6 @@
        "config-title": "MediaWiki $1 installation",
        "config-information": "Information",
        "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.\n\nThis 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'''.\nSee the GNU General Public Licence for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public Licence</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].",
-       "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalisation.",
        "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalisation.",
        "config-unicode-pure-php-warning": "'''Warning:''' The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalisation, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalisation].",
        "config-unicode-update-warning": "'''Warning:''' The installed version of the Unicode normalisation wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
index c975090..17f784f 100644 (file)
@@ -68,7 +68,6 @@
        "config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.",
        "config-env-php": "PHP $1 est installé.",
        "config-env-hhvm": "HHVM $1 est installé.",
-       "config-unicode-using-utf8": "Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.",
        "config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.",
        "config-unicode-pure-php-warning": "<strong>Attention</strong> : L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).",
        "config-unicode-update-warning": "'''Attention''': La version installée du ''wrapper'' de normalisation Unicode utilise une vieille version de la [http://site.icu-project.org/ bibliothèque logicielle ''ICU Project''].\nVous devriez faire une [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations mise à jour] si vous êtes tout à fait concerné par l'usage d'Unicode.",
index e85e735..c430d60 100644 (file)
@@ -55,7 +55,6 @@
        "config-env-bad": "Kondisi telah diperiksa.\nAnda tidak dapat menginstal MediaWiki.",
        "config-env-php": "PHP $1 diinstal.",
        "config-env-hhvm": "HHVM $1 telah dipasang.",
-       "config-unicode-using-utf8": "Menggunakan utf8_normalize.so Brion Vibber untuk normalisasi Unicode.",
        "config-unicode-using-intl": "Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.",
        "config-unicode-pure-php-warning": "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat.\nJika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].",
        "config-unicode-update-warning": "'''Peringatan''': Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].\nAnda harus [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations memutakhirkannya] jika Anda ingin menggunakan Unicode.",
index 26772e9..c658c5c 100644 (file)
@@ -51,7 +51,6 @@
        "config-env-bad": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
        "config-env-php": "PHP $1 er innstallert.",
        "config-env-hhvm": "HHVM $1 er installert.",
-       "config-unicode-using-utf8": "Bruker Brion Vibbers utf8_normalize.so for Unicode-normalisering.",
        "config-unicode-using-intl": "Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.",
        "config-unicode-pure-php-warning": "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
        "config-unicode-update-warning": "'''Advarsel''': Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.\nDu bør [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.",
index d7bd9a6..a2ab5d2 100644 (file)
@@ -59,7 +59,6 @@
        "config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.",
        "config-env-php": "PHP $1 is op dit moment geïnstalleerd.",
        "config-env-hhvm": "HHVM $1 is geïnstalleerd.",
-       "config-unicode-using-utf8": "Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.",
        "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
        "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].",
        "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.",
index 5ebf803..dbe651c 100644 (file)
@@ -10,7 +10,8 @@
                        "Trockya",
                        "Aşilleus",
                        "Nighteagle2000",
-                       "Sadrettin"
+                       "Sadrettin",
+                       "Captantrips"
                ]
        },
        "config-desc": "MediaWiki yükleyicisi",
@@ -80,6 +81,9 @@
        "config-db-password": "Veritabanı parolası:",
        "config-db-username-empty": "\"{{int:config-db-username}}\" için bir değer girmelisiniz.",
        "config-db-install-username": "Yükleme sırasında veritabanına bağlanmak için kullanılan kullanıcı adını girin.\nBu MediaWiki hesabının kullanıcı adı değildir; Bu veritabanın kullanıcı adıdır.",
+       "config-db-install-password": "Kurulum işlemi boyunca veritabanına bağlanmak için kullanılacak şifreyi girin.\nBu şifre MediaWiki hesap şifresi değil, veritabanınızın şifresidir.",
+       "config-db-install-help": "Kurulum işlemi boyunca veritabanına bağlanmak için kullanıcı adı ve şifre giriniz.",
+       "config-db-account-lock": "Normal çalışma sırasında aynı kullanıcı adı ve şifreyi kullanınız.",
        "config-db-wiki-account": "Kullanıcı hesabı için normal işlem",
        "config-db-prefix": "Veritabanı Tablo öneki:",
        "config-db-charset": "Veritabanı karakter seti",
        "config-mysql-old": "MySQL  $1  veya daha yenisi gerekir. Sende bulunan  $2 .",
        "config-db-port": "Veritabanı bağlantı noktası:",
        "config-db-schema": "MediaWiki için şema:",
+       "config-db-schema-help": "Bu şema yeterli olacaktır.\nEğer gerçekten ihtiyaç duyarsanız değiştirin.",
        "config-pg-test-error": "Veritabanıyla bağlantı kurulamıyor ''' $1 ''':$2",
        "config-sqlite-dir": "SQLite veri dizini",
        "config-oracle-def-ts": "Varsayılan tablo alanı:",
+       "config-type-mysql": "MySQL (veya uyumlu)",
        "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MySQL ayarları",
        "config-header-postgres": "PostgreSQL ayarları",
        "config-invalid-schema": "Geçersiz şema MediaWiki için \" $1 \".\nYalnızca ASCII harf (a-z, A-Z), rakamların (0-9) ve alt çizgi (_) kullanın.",
        "config-db-sys-user-exists-oracle": "Kullanıcı hesabı \" $1 \" zaten var. SYSDBA sadece yeni bir hesap oluşturmak için kullanılabilir.",
        "config-postgres-old": "PostgreSQL  $1  veya daha yenisi gerekir. Sende  $2 sürümü var.",
+       "config-sqlite-name-help": "Wiki'nizi tanımlayan bir ad seçin.\nBoşluk ya da tire kullanmayın.\nBu isim SQLite veri dosyası için kullanılacaktır.",
        "config-sqlite-mkdir-error": "Veri dizini oluşturulurken bir hata oluştu \" $1 \".\nKonumu denetleyin ve yeniden deneyin.",
        "config-sqlite-connection-error": "$1.\n\nVeri dizini ve veritabanı adını denetleyin ve yeniden deneyin.",
        "config-sqlite-readonly": "Dosya <code>$1</code> yazılabilir değil.",
        "config-sqlite-cant-create-db": "Veritabanı dosyası oluşturamadı <code>$1</code> .",
        "config-regenerate": "LocalSettings.php yi yeniden oluştur →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code>sorgu başarısız!",
+       "config-db-web-account": "Ağ erişimi için veritabanı hesabı",
+       "config-db-web-help": "Ağ sunucusunun olağan wiki işlemleri için veritabanına bağlanırken kullanacağı kullanıcı adı ve parolayı seçin.",
        "config-db-web-account-same": "Yükleme için aynı hesabı kullan",
        "config-db-web-create": "Eğer oluşturulmuş hesap yoksa yeni hesap oluştur",
        "config-mysql-engine": "Depolama motoru:",
        "config-mysql-binary": "İkili",
        "config-mysql-utf8": "UTF-8",
        "config-mssql-auth": "Kimlik doğrulama türü:",
+       "config-mssql-install-auth": "Kurulum işlemi sırasında veritabanına bağlanmak için kullanılacak doğrulama türünü seçin.\n\"{{int:config-mssql-windowsauth}}\"'ı seçerseniz,ağ sunucusu olarak çalışan kullanıcının kimlik bilgileri kullanılacaktır.",
        "config-mssql-sqlauth": "SQL Server kimlik doğrulaması",
        "config-mssql-windowsauth": "Windows Kimlik Doğrulama",
        "config-site-name": "Wiki adı:",
+       "config-site-name-help": "Bu tarayıcının başlık çubuğunda ve diğer yerlerde görünecek.",
        "config-site-name-blank": "Bir site adı girin.",
        "config-project-namespace": "Proje isim alanı:",
        "config-ns-generic": "Proje",
index 30342aa..bf3636b 100644 (file)
@@ -50,7 +50,6 @@
        "config-env-bad": "Đã kiểm tra môi trường.\nBạn không thể cài đặt MediaWiki.",
        "config-env-php": "PHP $1 đã được cài đặt.",
        "config-env-hhvm": "HHVM $1 được cài đặt.",
-       "config-unicode-using-utf8": "Đang sử dụng utf8_normalize.so của Brion Vibber để chuẩn hóa văn bản Unicode.",
        "config-unicode-using-intl": "Sẽ sử dụng [http://pecl.php.net/intl phần mở rộng PECL intl] để chuẩn hóa Unicode.",
        "config-unicode-pure-php-warning": "<strong>Cảnh báo:</strong>  [http://pecl.php.net/intl intl PECL extension] không được phép xử lý Unicode chuẩn hóa, trả lại thực thi PHP-gốc chậm.\nNếu bạn chạy một site lưu lượng lớn, bạn phải để ý qua một chút trên  [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "<strong>Cảnh báo:</strong> Phiên bản cài đặt của gói Unicode chuẩn hóa sử dụng một phiên bản cũ của thư viện [http://site.icu-project.org/ the ICU project].\nBạn phải [//www.mediawiki.org/wiki/Special:MyLanguage/nâng cấp Unicode_normalization_considerations] nếu bạn quan tâm đến việc sử dụng Unicode.",
index 178ce8a..b86819e 100644 (file)
@@ -386,14 +386,6 @@ class JobQueueFederated extends JobQueue {
        }
 
        protected function doFlushCaches() {
-               static $types = array(
-                       'empty',
-                       'size',
-                       'acquiredcount',
-                       'delayedcount',
-                       'abandonedcount'
-               );
-
                /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        $queue->doFlushCaches();
index 275d027..f1de76c 100644 (file)
@@ -205,7 +205,7 @@ class JobQueueRedis extends JobQueue {
                        if ( $flags & self::QOS_ATOMIC ) {
                                $batches = array( $items ); // all or nothing
                        } else {
-                               $batches = array_chunk( $items, 500 ); // avoid tying up the server
+                               $batches = array_chunk( $items, 100 ); // avoid tying up the server
                        }
                        $failed = 0;
                        $pushed = 0;
@@ -611,13 +611,6 @@ LUA;
                }
        }
 
-       /**
-        * @return array
-        */
-       protected function doGetPeriodicTasks() {
-               return array(); // managed in the runner loop
-       }
-
        /**
         * @param IJobSpecification $job
         * @return array
index 4d3da8a..0948092 100644 (file)
@@ -452,12 +452,13 @@ class JobRunner implements LoggerAwareInterface {
                        $lb->waitForOne( $pos );
                }
 
+               $fname = __METHOD__;
                // Re-ping all masters with transactions. This throws DBError if some
                // connection died while waiting on locks/slaves, triggering a rollback.
-               wfGetLBFactory()->forEachLB( function( LoadBalancer $lb ) {
-                       $lb->forEachOpenConnection( function( DatabaseBase $conn ) {
+               wfGetLBFactory()->forEachLB( function( LoadBalancer $lb ) use ( $fname ) {
+                       $lb->forEachOpenConnection( function( DatabaseBase $conn ) use ( $fname ) {
                                if ( $conn->writesOrCallbacksPending() ) {
-                                       $conn->query( "SELECT 1" );
+                                       $conn->query( "SELECT 1", $fname );
                                }
                        } );
                } );
index 327a18f..9ace1ba 100644 (file)
@@ -97,7 +97,7 @@ class JobSpecification implements IJobSpecification {
        /**
         * @param string $type
         * @param array $params Map of key/values
-        * @param array $opts Map of key/values
+        * @param array $opts Map of key/values; includes 'removeDuplicates'
         * @param Title $title Optional descriptive title
         */
        public function __construct(
index 847dd6f..6c49646 100644 (file)
@@ -77,6 +77,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                try {
                        $conn->multi( Redis::PIPELINE );
                        $conn->hSetNx( $this->getQueueTypesKey(), $type, 'enabled' );
+                       $conn->sAdd( $this->getWikiSetKey(), $wiki );
                        $conn->hSet( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ), time() );
                        $conn->exec();
 
@@ -197,6 +198,13 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                return "jobqueue:aggregator:h-queue-types:v2"; // global
        }
 
+       /**
+        * @return string
+        */
+       private function getWikiSetKey() {
+               return "jobqueue:aggregator:s-wikis:v2"; // global
+       }
+
        /**
         * @param string $type
         * @param string $wiki
diff --git a/includes/jobqueue/jobs/ActivityUpdateJob.php b/includes/jobqueue/jobs/ActivityUpdateJob.php
new file mode 100644 (file)
index 0000000..495bda9
--- /dev/null
@@ -0,0 +1,75 @@
+<?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
+ * @author Aaron Schulz
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job for updating user activity like "last viewed" timestamps
+ *
+ * @ingroup JobQueue
+ * @since 1.26
+ */
+class ActivityUpdateJob extends Job {
+       function __construct( $title, $params ) {
+               parent::__construct( 'activityUpdateJob', $title, $params );
+
+               if ( !isset( $params['type'] ) ) {
+                       throw new InvalidArgumentException( "Missing 'type' parameter." );
+               }
+
+               $this->removeDuplicates = true;
+       }
+
+       public function run() {
+               if ( $this->params['type'] === 'updateWatchlistNotification' ) {
+                       $this->updateWatchlistNotification();
+               } else {
+                       throw new Exception( "Invalid 'type' parameter '{$this->params['type']}'." );
+               }
+
+               return true;
+       }
+
+       protected function updateWatchlistNotification() {
+               $casTimestamp = ( $this->params['notifTime'] !== null )
+                       ? $this->params['notifTime']
+                       : $this->params['curTime'];
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->update( 'watchlist',
+                       array(
+                               'wl_notificationtimestamp' => $dbw->timestampOrNull( $this->params['notifTime'] )
+                       ),
+                       array(
+                               'wl_user' => $this->params['userid'],
+                               'wl_namespace' => $this->title->getNamespace(),
+                               'wl_title' => $this->title->getDBkey(),
+                               // Add a "check and set" style comparison to handle conflicts.
+                               // The inequality always avoids updates when the current value
+                               // is already NULL per ANSI SQL. This is desired since NULL means
+                               // that the user is "caught up" on edits already. When the field
+                               // is non-NULL, make sure not to set it back in time or set it to
+                               // NULL when newer revisions were in fact added to the page.
+                               'wl_notificationtimestamp < ' . $dbw->addQuotes( $dbw->timestamp( $casTimestamp ) )
+                       ),
+                       __METHOD__
+               );
+       }
+}
index 46fb2aa..fdef1f5 100755 (executable)
@@ -45,8 +45,8 @@ final class EnqueueJob extends Job {
        }
 
        /**
-        * @param Job|JobSpecification|array $jobs
-        * @return JobRouteJob
+        * @param JobSpecification|JobSpecification[] $jobs
+        * @return EnqueueJob
         */
        public static function newFromLocalJobs( $jobs ) {
                $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
diff --git a/includes/libs/objectcache/ReplicatedBagOStuff.php b/includes/libs/objectcache/ReplicatedBagOStuff.php
new file mode 100644 (file)
index 0000000..99b03ed
--- /dev/null
@@ -0,0 +1,124 @@
+<?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 they usually take place in the primary datacenter.
+ *
+ * @ingroup Cache
+ * @since 1.25
+ */
+class ReplicatedBagOStuff extends BagOStuff {
+       /** @var BagOStuff */
+       protected $writeStore;
+       /** @var BagOStuff */
+       protected $readStore;
+
+       /**
+        * Constructor. Parameters are:
+        *   - writeFactory : ObjectFactory::getObjectFromSpec parameters yeilding BagOStuff.
+        *                    This object will be used for writes (e.g. the master DB).
+        *   - readFactory  : ObjectFactory::getObjectFromSpec parameters yeilding BagOStuff.
+        *                    This object will be used for reads (e.g. a slave DB).
+        *
+        * @param array $params
+        * @throws InvalidArgumentException
+        */
+       public function __construct( $params ) {
+               parent::__construct( $params );
+
+               if ( !isset( $params['writeFactory'] ) ) {
+                       throw new InvalidArgumentException(
+                               __METHOD__ . ': the "writeFactory" parameter is required' );
+               } elseif ( !isset( $params['readFactory'] ) ) {
+                       throw new InvalidArgumentException(
+                               __METHOD__ . ': the "readFactory" parameter is required' );
+               }
+
+               $this->writeStore = ( $params['writeFactory'] instanceof BagOStuff )
+                       ? $params['writeFactory']
+                       : ObjectFactory::getObjectFromSpec( $params['writeFactory'] );
+               $this->readStore = ( $params['readFactory'] instanceof BagOStuff )
+                       ? $params['readFactory']
+                       : ObjectFactory::getObjectFromSpec( $params['readFactory'] );
+       }
+
+       public function setDebug( $debug ) {
+               $this->writeStore->setDebug( $debug );
+               $this->readStore->setDebug( $debug );
+       }
+
+       public function get( $key, &$casToken = null ) {
+               return $this->readStore->get( $key, $casToken );
+       }
+
+       public function getMulti( $keys ) {
+               return $this->readStore->getMulti( $keys );
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               return $this->writeStore->set( $key, $value, $exptime );
+       }
+
+       public function delete( $key ) {
+               return $this->writeStore->delete( $key );
+       }
+
+       public function add( $key, $value, $exptime = 0 ) {
+               return $this->writeStore->add( $key, $value, $exptime );
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return $this->writeStore->incr( $key, $value );
+       }
+
+       public function decr( $key ) {
+               return $this->writeStore->decr( $key );
+       }
+
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               return $this->writeStore->lock( $key, $timeout, $expiry );
+       }
+
+       public function unlock( $key ) {
+               return $this->writeStore->unlock( $key );
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->writeStore->merge( $key, $callback, $exptime, $attempts );
+       }
+
+       public function getLastError() {
+               return ( $this->writeStore->getLastError() != self::ERR_NONE )
+                       ? $this->writeStore->getLastError()
+                       : $this->readStore->getLastError();
+       }
+
+       public function clearLastError() {
+               $this->writeStore->clearLastError();
+               $this->readStore->clearLastError();
+       }
+}
index 7f55456..92bd0bd 100755 (executable)
@@ -361,10 +361,12 @@ class WANObjectCache {
         *   - lowTTL  : consider pre-emptive updates when the current TTL (sec)
         *               of the key is less than this. It becomes more likely
         *               over time, becoming a certainty once the key is expired.
-        *   - lockTSE : if the key is tombstoned or expired less (by $checkKeys)
+        *   - lockTSE : if the key is tombstoned or expired (by $checkKeys) less
         *               than this many seconds ago, then try to have a single
         *               thread handle cache regeneration at any given time.
         *               Other threads will try to use stale values if possible.
+        *               If, on miss, the time since expiration is low, the assumption
+        *               is that the key is hot and that a stampede is worth avoiding.
         *   - tempTTL : when 'lockTSE' is set, this determines the TTL of the temp
         *               key used to cache values while a key is tombstoned.
         *               This avoids excessive regeneration of hot keys on delete() but
index 9c2fdd3..119492b 100644 (file)
@@ -193,6 +193,8 @@ class LogFormatter {
         * @return string Text
         */
        public function getIRCActionText() {
+               global $wgContLang;
+
                $this->plaintext = true;
                $this->irctext = true;
 
@@ -338,7 +340,6 @@ class LogFormatter {
                        case 'block':
                                switch ( $entry->getSubtype() ) {
                                        case 'block':
-                                               global $wgContLang;
                                                // Keep compatibility with extensions by checking for
                                                // new key (5::duration/6::flags) or old key (0/optional 1)
                                                if ( $entry->isLegacy() ) {
@@ -358,7 +359,6 @@ class LogFormatter {
                                                        ->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' )
index bf489ab..c4ce7b3 100644 (file)
@@ -192,7 +192,7 @@ class LogPager extends ReverseChronologicalPager {
         * @return void
         */
        private function limitTitle( $page, $pattern ) {
-               global $wgMiserMode;
+               global $wgMiserMode, $wgUserrightsInterwikiDelimiter;
 
                if ( $page instanceof Title ) {
                        $title = $page;
@@ -209,7 +209,6 @@ class LogPager extends ReverseChronologicalPager {
 
                $doUserRightsLogLike = false;
                if ( $this->types == array( 'rights' ) ) {
-                       global $wgUserrightsInterwikiDelimiter;
                        $parts = explode( $wgUserrightsInterwikiDelimiter, $title->getDBKey() );
                        if ( count( $parts ) == 2 ) {
                                list( $name, $database ) = array_map( 'trim', $parts );
index 5f6b965..011fb2a 100644 (file)
@@ -143,14 +143,6 @@ class DjVuHandler extends ImageHandler {
                $width = $params['width'];
                $height = $params['height'];
                $page = $params['page'];
-               if ( $page > $this->pageCount( $image ) ) {
-                       return new MediaTransformError(
-                               'thumbnail_error',
-                               $width,
-                               $height,
-                               wfMessage( 'djvu_page_error' )->text()
-                       );
-               }
 
                if ( $flags & self::TRANSFORM_LATER ) {
                        $params = array(
diff --git a/includes/objectcache/ReplicatedBagOStuff.php b/includes/objectcache/ReplicatedBagOStuff.php
deleted file mode 100644 (file)
index 34affc7..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?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 they usually take place in 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 91e9971..25bf844 100644 (file)
@@ -1254,22 +1254,22 @@ class Article implements Page {
 
                # Show error message
                $oldid = $this->getOldID();
-               if ( $oldid ) {
-                       $text = wfMessage( 'missing-revision', $oldid )->plain();
-               } elseif ( $title->getNamespace() === NS_MEDIAWIKI ) {
-                       // Use the default message text
-                       $text = $title->getDefaultMessageText();
-               } elseif ( $title->quickUserCan( 'create', $this->getContext()->getUser() )
-                       && $title->quickUserCan( 'edit', $this->getContext()->getUser() )
-               ) {
-                       $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
-                       $text = wfMessage( $message )->plain();
+               if ( !$oldid && $title->getNamespace() === NS_MEDIAWIKI ) {
+                       $outputPage->addParserOutput( $this->getContentObject()->getParserOutput( $title ) );
                } else {
-                       $text = wfMessage( 'noarticletext-nopermission' )->plain();
-               }
-               $text = "<div class='noarticletext'>\n$text\n</div>";
+                       if ( $oldid ) {
+                               $text = wfMessage( 'missing-revision', $oldid )->plain();
+                       } elseif ( $title->quickUserCan( 'create', $this->getContext()->getUser() )
+                               && $title->quickUserCan( 'edit', $this->getContext()->getUser() )
+                       ) {
+                               $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
+                               $text = wfMessage( $message )->plain();
+                       } else {
+                               $text = wfMessage( 'noarticletext-nopermission' )->plain();
+                       }
 
-               $outputPage->addWikiText( $text );
+                       $outputPage->addWikiText( "<div class='noarticletext'>\n$text\n</div>" );
+               }
        }
 
        /**
index e938ca8..cc182a4 100644 (file)
@@ -3412,7 +3412,8 @@ class WikiPage implements Page, IDBAccessObject {
                // Check if the last link refresh was before page_touched
                if ( $this->getLinksTimestamp() < $this->getTouched() ) {
                        JobQueueGroup::singleton()->push( EnqueueJob::newFromLocalJobs(
-                               new JobSpecification( 'refreshLinks', $params, array(), $this->mTitle )
+                               new JobSpecification( 'refreshLinks', $params,
+                                       array( 'removeDuplicates' => true ), $this->mTitle )
                        ) );
                        return;
                }
index bc8e4a6..dc8bb52 100644 (file)
@@ -57,7 +57,7 @@ class ParserCache {
        }
 
        /**
-        * @param Article $article
+        * @param WikiPage $article
         * @param string $hash
         * @return mixed|string
         */
@@ -73,7 +73,7 @@ class ParserCache {
        }
 
        /**
-        * @param Article $article
+        * @param WikiPage $article
         * @return mixed|string
         */
        protected function getOptionsKey( $article ) {
@@ -91,7 +91,7 @@ class ParserCache {
         * English preferences. That's why we take into account *all* user
         * options. (r70809 CR)
         *
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @return string
         */
@@ -103,7 +103,7 @@ class ParserCache {
 
        /**
         * Retrieve the ParserOutput from ParserCache, even if it's outdated.
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @return ParserOutput|bool False on failure
         */
@@ -126,7 +126,7 @@ class ParserCache {
         *
         * @todo Document parameter $useOutdated
         *
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @param bool $useOutdated (default true)
         * @return bool|mixed|string
@@ -176,7 +176,7 @@ class ParserCache {
         * Retrieve the ParserOutput from ParserCache.
         * false if not found or outdated.
         *
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @param bool $useOutdated (default false)
         *
index a5349fb..4b9a754 100644 (file)
@@ -24,8 +24,8 @@ class ExtensionProcessor implements Processor {
                'ContentHandlers',
                'ConfigRegistry',
                'RateLimits',
-               'ParserTestFiles',
                'RecentChangesFlags',
+               'MediaHandlers',
                'ExtensionFunctions',
                'ExtensionEntryPointListFiles',
                'SpecialPages',
@@ -122,6 +122,7 @@ class ExtensionProcessor implements Processor {
                $this->extractMessagesDirs( $dir, $info );
                $this->extractNamespaces( $info );
                $this->extractResourceLoaderModules( $dir, $info );
+               $this->extractParserTestFiles( $dir, $info );
                if ( isset( $info['callback'] ) ) {
                        $this->callbacks[] = $info['callback'];
                        $this->processed[] = 'callback';
@@ -269,6 +270,15 @@ class ExtensionProcessor implements Processor {
                }
        }
 
+       protected function extractParserTestFiles( $dir, array $info ) {
+               if ( isset( $info['ParserTestFiles'] ) ) {
+                       foreach ( $info['ParserTestFiles'] as $path ) {
+                               $this->globals['wgParserTestFiles'][] = "$dir/$path";
+                       }
+                       $this->processed[] = 'ParserTestFiles';
+               }
+       }
+
        /**
         * @param string $name
         * @param mixed $value
index 5ef3853..d938f07 100644 (file)
@@ -62,7 +62,14 @@ class ExtensionRegistry {
        }
 
        public function __construct() {
-               $this->cache = ObjectCache::newAccelerator( array(), CACHE_NONE );
+               // We use a try/catch instead of the $fallback parameter because
+               // we don't want to fail here if $wgObjectCaches is not configured
+               // properly for APC setup
+               try {
+                       $this->cache = ObjectCache::newAccelerator( array() );
+               } catch ( MWException $e ) {
+                       $this->cache = new EmptyBagOStuff();
+               }
        }
 
        /**
@@ -114,6 +121,9 @@ class ExtensionRegistry {
                $autoloadClasses = array();
                foreach ( $queue as $path => $mtime ) {
                        $json = file_get_contents( $path );
+                       if ( $json === false ) {
+                               throw new Exception( "Unable to read $path, does it exist?" );
+                       }
                        $info = json_decode( $json, /* $assoc = */ true );
                        if ( !is_array( $info ) ) {
                                throw new Exception( "$path is not a valid JSON file." );
index 7da3aec..ce18c32 100644 (file)
@@ -339,7 +339,7 @@ class ResourceLoader {
                                        } elseif ( isset( $skinStyles['+' . $name] ) ) {
                                                $paths = (array)$skinStyles['+' . $name];
                                                $styleFiles = isset( $this->moduleInfos[$name]['skinStyles']['default'] ) ?
-                                                       $this->moduleInfos[$name]['skinStyles']['default'] :
+                                                       (array)$this->moduleInfos[$name]['skinStyles']['default'] :
                                                        array();
                                        } else {
                                                continue;
index 5770276..e5ed23f 100644 (file)
@@ -33,7 +33,7 @@ class SearchEngine {
        /** @var string */
        public $prefix = '';
 
-       /** @var int[] */
+       /** @var int[]|null */
        public $namespaces = array( NS_MAIN );
 
        /** @var int */
@@ -293,7 +293,7 @@ class SearchEngine {
         * Set which namespaces the search should include.
         * Give an array of namespace index numbers.
         *
-        * @param array $namespaces
+        * @param int[]|null $namespaces
         */
        function setNamespaces( $namespaces ) {
                $this->namespaces = $namespaces;
index 5364719..d7e0132 100644 (file)
@@ -421,15 +421,11 @@ class SkinTemplate extends Skin {
                $realBodyAttribs = array( 'id' => 'mw-content-text' );
 
                # Add a mw-content-ltr/rtl class to be able to style based on text direction
-               # when the content is different from the UI language, i.e.:
-               # not for special pages or file pages AND only when viewing
-               if ( !in_array( $title->getNamespace(), array( NS_SPECIAL, NS_FILE ) ) &&
-                       Action::getActionName( $this ) === 'view' ) {
-                       $pageLang = $title->getPageViewLanguage();
-                       $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
-                       $realBodyAttribs['dir'] = $pageLang->getDir();
-                       $realBodyAttribs['class'] = 'mw-content-' . $pageLang->getDir();
-               }
+               # when the content is different from the UI language
+               $pageLang = $title->getPageViewLanguage();
+               $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
+               $realBodyAttribs['dir'] = $pageLang->getDir();
+               $realBodyAttribs['class'] = 'mw-content-' . $pageLang->getDir();
 
                $out->mBodytext = Html::rawElement( 'div', $realBodyAttribs, $out->mBodytext );
                $tpl->setRef( 'bodytext', $out->mBodytext );
index da752f6..92409cd 100644 (file)
@@ -252,6 +252,17 @@ abstract class QueryPage extends SpecialPage {
                return '';
        }
 
+       /**
+        * Outputs some kind of an informative message (via OutputPage) to let the
+        * user know that the query returned nothing and thus there's nothing to
+        * show.
+        *
+        * @since 1.26
+        */
+       protected function showEmptyText() {
+               $this->getOutput()->addWikiMsg( 'specialpage-empty' );
+       }
+
        /**
         * If using extra form wheely-dealies, return a set of parameters here
         * as an associative array. They will be encoded and added to the paging
@@ -546,7 +557,7 @@ abstract class QueryPage extends SpecialPage {
                        } else {
                                # No results to show, so don't bother with "showing X of Y" etc.
                                # -- just let the user know and give up now
-                               $out->addWikiMsg( 'specialpage-empty' );
+                               $this->showEmptyText();
                                $out->addHTML( Xml::closeElement( 'div' ) );
                                return;
                        }
index 75ff8f3..0c02628 100644 (file)
@@ -121,43 +121,39 @@ class LinkSearchPage extends QueryPage {
                        '<nowiki>' . $this->getLanguage()->commaList( $protocols_list ) . '</nowiki>',
                        count( $protocols_list )
                );
-               $s = Html::openElement(
-                       'form',
-                       array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => wfScript() )
-               ) . "\n" .
-                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) . "\n" .
-                       Html::openElement( 'fieldset' ) . "\n" .
-                       Html::element( 'legend', array(), $this->msg( 'linksearch' )->text() ) . "\n" .
-                       Xml::inputLabel(
-                               $this->msg( 'linksearch-pat' )->text(),
-                               'target',
-                               'target',
-                               50,
-                               $target,
-                               array(
-                                       // URLs are always ltr
-                                       'dir' => 'ltr',
-                               )
-                       ) . "\n";
-
+               $fields = array(
+                       'target' => array(
+                               'type' => 'text',
+                               'name' => 'target',
+                               'id' => 'target',
+                               'size' => 50,
+                               'label-message' => 'linksearch-pat',
+                               'default' => $target,
+                               'dir' => 'ltr',
+                       )
+               );
                if ( !$this->getConfig()->get( 'MiserMode' ) ) {
-                       $s .= Html::namespaceSelector(
-                               array(
-                                       'selected' => $namespace,
-                                       'all' => '',
-                                       'label' => $this->msg( 'linksearch-ns' )->text()
-                               ), array(
+                       $fields += array(
+                               'namespace' => array(
+                                       'class' => 'HTMLSelectNamespace',
                                        'name' => 'namespace',
+                                       'label-message' => 'linksearch-ns',
+                                       'default' => $namespace,
                                        'id' => 'namespace',
-                                       'class' => 'namespaceselector',
-                               )
+                                       'cssclass' => 'namespaceselector',
+                               ),
                        );
                }
-
-               $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) . "\n" .
-                       Html::closeElement( 'fieldset' ) . "\n" .
-                       Html::closeElement( 'form' ) . "\n";
-               $out->addHTML( $s );
+               $hiddenFields = array(
+                       'title' => $this->getPageTitle()->getPrefixedDBkey(),
+               );
+               $htmlForm = HTMLForm::factory( 'inline', $fields, $this->getContext() );
+               $htmlForm->addHiddenFields( $hiddenFields );
+               $htmlForm->setSubmitTextMsg( 'linksearch-ok' );
+               $htmlForm->setWrapperLegendMsg( 'linksearch' );
+               $htmlForm->setAction( wfScript() );
+               $htmlForm->setMethod( 'get' );
+               $htmlForm->prepareForm()->displayForm( false );
 
                if ( $target != '' ) {
                        $this->setParams( array(
index 9a1c5e5..620c736 100644 (file)
@@ -842,7 +842,7 @@ class SpecialVersion extends SpecialPage {
                // Finally! Create the table
                $html = Html::openElement( 'tr', array(
                                'class' => 'mw-version-ext',
-                               'id' => "mw-version-ext-{$extension['name']}"
+                               'id' => Sanitizer::escapeId( 'mw-version-ext-' . $extension['name'] )
                        )
                );
 
index a9e58b3..fb89e4f 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Representation of a page title within %MediaWiki.
- *
  * 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
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
- * @author Daniel Kinzler
  */
 
 /**
  * MalformedTitleException is thrown when a TitleParser is unable to parse a title string.
- *
- * @license GPL 2+
- * @author Daniel Kinzler
  * @since 1.23
  */
 class MalformedTitleException extends Exception {
+       private $titleText = null;
+       private $errorMessage = null;
+       private $errorMessageParameters = array();
+
+       /**
+        * @param string $errorMessage Localisation message describing the error (since MW 1.26)
+        * @param string $titleText The invalid title text (since MW 1.26)
+        * @param string[] $errorMessageParameters Additional parameters for the error message. $titleText will be appended if it's not null. (since MW 1.26)
+        */
+       public function __construct( $errorMessage = null, $titleText = null, $errorMessageParameters = array() ) {
+               $this->errorMessage = $errorMessage;
+               $this->titleText = $titleText;
+               if ( $titleText !== null ) {
+                       $errorMessageParameters[] = $titleText;
+               }
+               $this->errorMessageParameters = $errorMessageParameters;
+
+               // Supply something useful for Exception::getMessage() to return.
+               $enMsg = wfMessage( $errorMessage, $errorMessageParameters );
+               $enMsg->inLanguage( 'en' )->useDatabase( false );
+               parent::__construct( $enMsg->text() );
+       }
+
+       /**
+        * @since 1.26
+        * @return string|null
+        */
+       public function getTitleText() {
+               return $this->titleText;
+       }
+
+       /**
+        * @since 1.26
+        * @return string|null
+        */
+       public function getErrorMessage() {
+               return $this->errorMessage;
+       }
+
+       /**
+        * @since 1.26
+        * @return string[]
+        */
+       public function getErrorMessageParameters() {
+               return $this->errorMessageParameters;
+       }
 }
index 20034b7..98cec59 100644 (file)
@@ -137,12 +137,12 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                // Interwiki links are not supported by TitleValue
                if ( $parts['interwiki'] !== '' ) {
-                       throw new MalformedTitleException( 'Title must not contain an interwiki prefix: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-interwiki', $text );
                }
 
                // Relative fragment links are not supported by TitleValue
                if ( $parts['dbkey'] === '' ) {
-                       throw new MalformedTitleException( 'Title must not be empty: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-empty', $text );
                }
 
                return new TitleValue( $parts['namespace'], $parts['dbkey'], $parts['fragment'] );
@@ -232,7 +232,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                if ( strpos( $dbkey, UtfNormal\Constants::UTF8_REPLACEMENT ) !== false ) {
                        # Contained illegal UTF-8 sequences or forbidden Unicode chars.
-                       throw new MalformedTitleException( 'Bad UTF-8 sequences found in title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-utf8', $text );
                }
 
                $parts['dbkey'] = $dbkey;
@@ -246,7 +246,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                }
 
                if ( $dbkey == '' ) {
-                       throw new MalformedTitleException( 'Empty title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-empty', $text );
                }
 
                # Namespace or interwiki prefix
@@ -263,11 +263,11 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                                        if ( $ns == NS_TALK && preg_match( $prefixRegexp, $dbkey, $x ) ) {
                                                if ( $this->language->getNsIndex( $x[1] ) ) {
                                                        # Disallow Talk:File:x type titles...
-                                                       throw new MalformedTitleException( 'Bad namespace prefix: ' . $text );
+                                                       throw new MalformedTitleException( 'title-invalid-talk-namespace', $text );
                                                } elseif ( Interwiki::isValidInterwiki( $x[1] ) ) {
                                                        //TODO: get rid of global state!
                                                        # Disallow Talk:Interwiki:x type titles...
-                                                       throw new MalformedTitleException( 'Interwiki prefix found in title: ' . $text );
+                                                       throw new MalformedTitleException( 'title-invalid-talk-namespace', $text );
                                                }
                                        }
                                } elseif ( Interwiki::isValidInterwiki( $p ) ) {
@@ -324,8 +324,9 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                # Reject illegal characters.
                $rxTc = self::getTitleInvalidRegex();
-               if ( preg_match( $rxTc, $dbkey ) ) {
-                       throw new MalformedTitleException( 'Illegal characters found in title: ' . $text );
+               $matches = array();
+               if ( preg_match( $rxTc, $dbkey, $matches ) ) {
+                       throw new MalformedTitleException( 'title-invalid-characters', $text, array( $matches[0] ) );
                }
 
                # Pages with "/./" or "/../" appearing in the URLs will often be un-
@@ -343,23 +344,21 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                                substr( $dbkey, -3 ) == '/..'
                        )
                ) {
-                       throw new MalformedTitleException( 'Bad title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-relative', $text );
                }
 
                # Magic tilde sequences? Nu-uh!
                if ( strpos( $dbkey, '~~~' ) !== false ) {
-                       throw new MalformedTitleException( 'Bad title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-magic-tilde', $text );
                }
 
                # Limit the size of titles to 255 bytes. This is typically the size of the
                # underlying database field. We make an exception for special pages, which
                # don't need to be stored in the database, and may edge over 255 bytes due
                # to subpage syntax for long titles, e.g. [[Special:Block/Long name]]
-               if (
-                       ( $parts['namespace'] != NS_SPECIAL && strlen( $dbkey ) > 255 )
-                       || strlen( $dbkey ) > 512
-               ) {
-                       throw new MalformedTitleException( 'Title too long: ' . substr( $dbkey, 0, 255 ) . '...' );
+               $maxLength = ( $parts['namespace'] != NS_SPECIAL ) ? 255 : 512;
+               if ( strlen( $dbkey ) > $maxLength ) {
+                       throw new MalformedTitleException( 'title-invalid-too-long', $text, array( $maxLength ) );
                }
 
                # Normally, all wiki links are forced to have an initial capital letter so [[foo]]
@@ -374,7 +373,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                # self-links with a fragment identifier.
                if ( $dbkey == '' && $parts['interwiki'] === '' ) {
                        if ( $parts['namespace'] != NS_MAIN ) {
-                               throw new MalformedTitleException( 'Empty title: ' . $text );
+                               throw new MalformedTitleException( 'title-invalid-empty', $text );
                        }
                }
 
@@ -390,7 +389,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                // Any remaining initial :s are illegal.
                if ( $dbkey !== '' && ':' == $dbkey[0] ) {
-                       throw new MalformedTitleException( 'Title must not start with a colon: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-leading-colon', $text );
                }
 
                # Fill fields
index fb6f0eb..f7c9f65 100644 (file)
@@ -41,9 +41,9 @@
        'aa' => 'Qafár af',    # Afar
        'ab' => 'Аҧсшәа', # Abkhaz
        'ace' => 'Acèh',       # Aceh
-       'aeb' => 'تونسي/Tûnsi',   # Tunisian Arabic (multiple scripts - defaults to Arabic)
+       'aeb' => 'تونسي/Tûnsî',  # Tunisian Arabic (multiple scripts - defaults to Arabic)
        'aeb-arab' => 'تونسي',     # Tunisian Arabic (Arabic Script)
-       'aeb-latn' => 'Tûnsi', # Tunisian Arabic (Latin Script)
+       'aeb-latn' => 'Tûnsî',        # Tunisian Arabic (Latin Script)
        'af' => 'Afrikaans',    # Afrikaans
        'ak' => 'Akan',         # Akan
        'aln' => 'Gegë',       # Gheg Albanian
@@ -62,6 +62,7 @@
        'ast' => 'asturianu',   # Asturian
        'av' => 'авар',     # Avar
        'avk' => 'Kotava', # Kotava
+       'awa' => 'अवधी',        # Awadhi
        'ay' => 'Aymar aru',    # Aymara
        'az' => 'azərbaycanca',        # Azerbaijani
        'azb' => 'تورکجه',        # South Azerbaijani
@@ -77,7 +78,6 @@
        'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # (be-tarask compat)
        'bg' => 'български',   # Bulgarian
        'bgn' => 'بلوچی رخشانی', # Western Balochi
-       'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho)
        'bho' => 'भोजपुरी',       # Bhojpuri
        'bi' => 'Bislama',              # Bislama
        'bjn' => 'Bahasa Banjar',       # Banjarese
        'lmo' => 'lumbaart',    # Lombard
        'ln' => 'lingála',             # Lingala
        'lo' => 'ລາວ',    # Laotian
-       'lrc' => 'لوری',    # Northern Luri
+       'lrc' => 'لوری مینجایی',     # Northern Luri
        'loz' => 'Silozi', # Lozi
        'lt' => 'lietuvių',    # Lithuanian
        'ltg' => 'latgaļu',    # Latgalian
index 0a96eef..5716334 100644 (file)
        "importinterwiki": "ከሌላ ዊኪ ማስገባት",
        "import-interwiki-history": "ለዚህ ገጽ የታሪክ ዕትሞች ሁሉ ለመቅዳት",
        "import-interwiki-submit": "ለማስገባት",
-       "import-interwiki-namespace": "መድረሻ ክፍለ-ዊኪ:",
        "import-upload-filename": "የፋይሉ ስም፦",
        "import-comment": "ማጠቃለያ፦",
        "importstart": "ገጾችን በማስገባት ላይ ነው...",
index 498b678..2f9e747 100644 (file)
@@ -22,9 +22,9 @@
        "tog-extendwatchlist": "Expandir a lista de seguimiento t'amostrar totz os cambeos, no nomás os más recients.",
        "tog-usenewrc": "Zaguers cambeos con presentación amillorada (cal JavaScript)",
        "tog-numberheadings": "Numerar automaticament os encabezaus",
-       "tog-showtoolbar": "Amostrar a barra de ferramientas d'edición (cal JavaScript)",
-       "tog-editondblclick": "Activar edición de pachinas fendo-ie doble click (cal JavaScript)",
-       "tog-editsectiononrightclick": "Activar a edición de seccions punchando con o botón dreito d'o ratet <br /> en os títols de seccions (cal JavaScript)",
+       "tog-showtoolbar": "Amostrar a barra d'edición",
+       "tog-editondblclick": "Editar pachinas fendo-ie doble click",
+       "tog-editsectiononrightclick": "Activar a edición de seccions punchando con o botón dreito d'o ratet en os títols de seccions",
        "tog-watchcreations": "Cosirar as pachinas que creye",
        "tog-watchdefault": "Cosirar as pachinas que edite",
        "tog-watchmoves": "Cosirar as pachinas que treslade",
        "oct": "oct",
        "nov": "nov",
        "dec": "avi",
+       "january-date": "$1 de chinero",
+       "february-date": "$1 de febrero",
+       "march-date": "Marzo $1",
+       "april-date": "$1 de abril",
+       "may-date": "$1 de mayo",
+       "june-date": "$1 de chunio",
+       "july-date": "$1 de chulio",
+       "august-date": "$1 de agosto",
+       "september-date": "$1 de setiembre",
+       "october-date": "$1 de octubre",
+       "november-date": "$1 de noviembre",
+       "december-date": "$1 de aviento",
        "pagecategories": "{{PLURAL:$1|Categoría|Categorías}}",
        "category_header": "Articlos en a categoría \"$1\"",
        "subcategories": "Subcategorías",
        "newwindow": "(s'ubre en una nueva finestra)",
        "cancel": "Cancelar",
        "moredotdotdot": "Más...",
-       "mypage": "A mía pachina",
+       "mypage": "Pachina",
        "mytalk": "Pachina de discusión",
        "anontalk": "Pachina de descusión d'ista IP",
        "navigation": "Navego",
        "disclaimers": "Alvertencias chenerals",
        "disclaimerpage": "Project:Alvertencias chenerals",
        "edithelp": "Aduya ta editar pachinas",
+       "helppage-top-gethelp": "Aduya",
        "mainpage": "Portalada",
        "mainpage-description": "Portalada",
        "policy-url": "Project:Politicas y normas",
        "hidetoc": "amagar",
        "collapsible-collapse": "Replegar",
        "collapsible-expand": "Ixamplar",
+       "confirmable-yes": "Si",
+       "confirmable-no": "No",
        "thisisdeleted": "Quiere amostrar u restaurar $1?",
        "viewdeleted": "Quiere amostrar $1?",
        "restorelink": "{{PLURAL:$1|una edición borrata|$1 edicions borratas}}",
        "nospecialpagetext": "<strong>A pachina especial que ha demandato no existe.</strong>\n\nPuede trobar una lista de pachinas especials en [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Error",
        "databaseerror": "Error d'a base de datos",
+       "databaseerror-error": "Error: $1",
        "laggedslavemode": "Pare cuenta: podrían faltar as zagueras edicions d'ista pachina.",
        "readonly": "Base de datos bloqueyata",
        "enterlockreason": "Esplique a causa d'o bloqueyo, incluyendo una estimación de quán se producirá o desbloqueyo",
        "createaccountmail": "por correu electronico",
        "createaccountreason": "Razón:",
        "createacct-imgcaptcha-ph": "Escribe o texto d'alto",
+       "createacct-submit": "Creya a tuya cuenta",
+       "createacct-another-submit": "Creya unatra cuenta",
        "createacct-benefit-body3": "{{PLURAL:$1|colaborador recient|colaboradors recients}}",
        "badretype": "As claus que ha escrito no son iguals.",
        "userexists": "O nombre d'usuario que ha escrito ya ye en uso.\nPor favor, trigue-ne uno de diferent.",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "S'ha denegau a suya demanda de zarrar a sesión ya que pareix que la ninvió un navegador defectuoso u bell proxy amagau.",
        "pt-login": "Dentrar-ie",
+       "pt-createaccount": "Creyar cuenta",
        "php-mail-error-unknown": "Error desconoixito en a función mail() de PHP",
        "user-mail-no-addy": "Ha mirau de ninviar un mensache de correu sin una adreza de correu electronico.",
        "changepassword": "Cambiar a clau",
        "rcshowhidebots": "$1 bots",
        "rcshowhidebots-show": "Amostrar",
        "rcshowhideliu": "$1 usuarios rechistraus",
+       "rcshowhideliu-hide": "Amagar",
        "rcshowhideanons": "$1 usuarios anonimos",
+       "rcshowhideanons-hide": "Amagar",
        "rcshowhidepatr": "$1 edicions controlatas",
        "rcshowhidemine": "$1 as mías edicions",
        "rcshowhidemine-hide": "Amagar",
index 921072d..1bf03a3 100644 (file)
        "gotaccount": "Hafast þū reccinge ǣr? $1.",
        "gotaccountlink": "Inmeldian",
        "userlogin-resetpassword-link": "Forgēate þū þīn gelēafword?",
+       "userlogin-helplink2": "Inmeldunge help",
        "createacct-emailrequired": "Spearcǣrenda nama",
        "createacct-emailoptional": "Spearcǣrenda nama (ungenēdedlic)",
        "createacct-email-ph": "Besettan þīnne spearcǣrenda naman",
        "createacct-benefit-heading": "{{SITENAME}} is geworht fram hādum swilce þū.",
        "createacct-benefit-body1": "{{PLURAL:$1|adihtung|adihtunga}}",
        "createacct-benefit-body2": "{{PLURAL:$1|tramet|trameta}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|nīwe fyrðrend|nīwe fyrðrendas}}",
        "badretype": "Þā þafungword þe write þū, bēoþ ungelīc.",
        "userexists": "Se brūcendnama is ǣr gebrocen. Cēos lā ōðerne naman.",
        "loginerror": "Inmeldunge wōh",
        "searchresults": "Sōcne wæstmas",
        "searchresults-title": "Sōcne wæstmas for \"$1\"",
        "notextmatches": "Nis þǣr nǣnig swilc traht on nǣngum trametum",
-       "prevn": "ǣror {{PLURAL:$1|$1}}",
+       "prevn": "ǣrre {{PLURAL:$1|$1}}",
        "nextn": "nīehst {{PLURAL:$1|$1}}",
+       "nextn-title": "Nīhst $1 {{PLURAL:$1|gefunden|gefundenra}}",
+       "shown-title": "Īwan $1 {{PLURAL:$1|gefunden|gefundenra}} on ǣlcum tramete",
        "viewprevnext": "Sēon ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "<strong>Scieppan þone tramet \"[[:$1]]\" on þissum wiki!</strong> {{PLURAL:$2|0=|Seoh ēac þone tramet þe wæs gefunden mid þīnre sōcne.|Seoh ēac þā þing þā wǣron gefunden.}}",
        "searchprofile-articles": "Innunge trametas",
        "searchprofile-articles-tooltip": "Sēcan in $1",
        "searchprofile-images-tooltip": "Sēcan ymelan",
        "searchprofile-everything-tooltip": "Sēcan geond ealla innunga (ēac mōtungum)",
+       "searchprofile-advanced-tooltip": "Sēcan on mā namsteda",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 worda}})",
        "search-redirect": "(edlǣded fram \"$1\")",
        "search-section": "(dǣl $1)",
        "ancientpages": "Ieldestan trametas",
        "move": "Wegan",
        "movethispage": "Wegan þisne tramet",
-       "pager-newer-n": "{{PLURAL:$1|nīwre 1|nīwran $1}}",
-       "pager-older-n": "{{PLURAL:$1|ieldre 1|ieldran $1}}",
+       "pager-newer-n": "{{PLURAL:$1|nīwre 1|nīwre $1}}",
+       "pager-older-n": "{{PLURAL:$1|ieldre 1|ieldre $1}}",
        "booksources": "Bōcfruman",
        "booksources-search-legend": "Sēcan bōcfruman",
        "booksources-search": "Sēcan",
        "undelete-search-submit": "Sēcan",
        "namespace": "Namstede:",
        "invert": "Onhwirfan gecorennesse",
+       "namespace_association": "Gesibbe namstedas",
        "blanknamespace": "(Hēafod)",
        "contributions": "{{GENDER:$1|Brūcendes}} forðunga",
        "contributions-title": "Brūcendes forðunga for $1",
        "isredirect": "edlǣdunge tramet",
        "istemplate": "bysene nytt",
        "isimage": "ymelan hlenca",
+       "whatlinkshere-prev": "{{PLURAL:$1|ǣrre|ǣrre $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|nīhst|nīhst $1}}",
        "whatlinkshere-links": "← hlencan",
        "whatlinkshere-hideredirs": "$1 edlǣdunga",
        "whatlinkshere-hidetrans": "$1 bysene nytta",
        "watchlisttools-view": "Sēon andwendunga",
        "watchlisttools-edit": "Sēon and adihtan behealdungtæl",
        "watchlisttools-raw": "Adihtan hrēaw behealdungtæl",
+       "signature": "[[{{ns:user}}:$1|$2]]\n([[{{ns:user_talk}}:$1|mōtung]])",
        "version": "Fadung",
        "version-specialpages": "Syndrige trametas",
        "version-other": "Ōðer",
        "htmlform-reset": "Undōn andwendunga",
        "htmlform-selectorother-other": "Ōðer",
        "logentry-delete-delete": "$1 {{GENDER:$2|forlēas}} tramet $3",
+       "logentry-move-move": "$1 {{GENDER:$2|wæg}} þone tramet $3 tō $4",
        "logentry-newusers-create": "Brūcendes grīma $1 wæs {{GENDER:$2|geworht}}",
        "revdelete-summary": "ādihtscortnes",
        "searchsuggest-search": "Sēcan",
index befb4b2..85f2f53 100644 (file)
        "expandtemplates": "ܐܪܘܚ ܩܠܒ̈ܐ",
        "expand_templates_output": "ܦܠܛܐ",
        "expand_templates_ok": "ܛܒ",
-       "expand_templates_preview": "ܚܝܪܐ ܩܕܡܝܐ"
+       "expand_templates_preview": "ܚܝܪܐ ܩܕܡܝܐ",
+       "special-characters-group-latin": "ܠܐܛܝܢܐܝܬ",
+       "special-characters-group-latinextended": "ܠܐܛܝܢܐܝܬ ܡܬܝܚܐ",
+       "special-characters-group-ipa": "ܐܠܒܝܬ ܩܠܝܬܐ ܬܒܝܠܝܬܐ (IPA)",
+       "special-characters-group-symbols": "ܪ̈ܡܙܐ",
+       "special-characters-group-greek": "ܝܘܢܐܝܬ",
+       "special-characters-group-cyrillic": "ܩܝܪܝܠܐܝܬ",
+       "special-characters-group-arabic": "ܥܪܒܐܝܬ",
+       "special-characters-group-arabicextended": "ܥܪܒܐܝܬ ܡܬܝܚܐ",
+       "special-characters-group-persian": "ܦܪܣܐܝܬ",
+       "special-characters-group-hebrew": "ܥܒܪܐܝܬ",
+       "special-characters-group-bangla": "ܒܢܓܐܠܐܝܬ",
+       "special-characters-group-tamil": "ܛܡܝܠ",
+       "special-characters-group-telugu": "ܛܝܠܘܓܘܐܝܬ",
+       "special-characters-group-sinhala": "ܣܢܗܐܠܐܝܬ",
+       "special-characters-group-gujarati": "ܓܘܓܐܪܐܛܝܐܝܬ",
+       "special-characters-group-thai": "ܛܝܠܢܕܐܝܬ",
+       "special-characters-group-lao": "ܠܐܘܐܝܬ",
+       "special-characters-group-khmer": "ܟܡܝܪܐܝܬ"
 }
index 79e12cc..48225ef 100644 (file)
        "importbadinterwiki": "wṣla dl-interwiki ĥayba",
        "import-noarticle": "ḫṫṫa ṣfḫa baċ djab!",
        "importlogpage": "sijjil dyal l'import",
-       "import-logentry-interwiki": "importé blwiki $1",
        "tooltip-pt-userpage": "Ṣ-Ṣefḫa de l-mosṫeĥdim dyalṫek",
        "tooltip-pt-mytalk": "Ṣfeḫṫek dyal n-niqaċ",
        "tooltip-pt-preferences": "Li kaṫfeddel",
index adf0eed..709e4c6 100644 (file)
        "import-interwiki-history": "انسخ كل نسخ التاريخ للصفحة دي",
        "import-interwiki-templates": "اشمل كل القوالب",
        "import-interwiki-submit": "استيراد",
-       "import-interwiki-namespace": "النطاق الهدف:",
        "import-upload-filename": "اسم الملف:",
        "import-comment": "تعليق:",
        "importtext": "لو سمحت تصدّر الملف من الويكى المصدر عن طريق [[Special:Export|خاصية التصدير]].\nاحفظه على جهازك و بعدين حمله هنا.",
        "import-invalid-interwiki": "ماينفعش تستورد من الويكى المتحدد.",
        "importlogpage": "سجل الاستيراد",
        "importlogpagetext": "استيرادات إدارية لصفحات ليها تاريخ تعديل من مواقع ويكى تانية.",
-       "import-logentry-upload": "استورد [[$1]] بواسطة تحميل ملف",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|تعديل واحد|تعديل}}",
-       "import-logentry-interwiki": "استيراد ويكى $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|تعديل واحد|تعديل}} من $2",
        "tooltip-pt-userpage": "صفحة اليوزر بتاعتك",
        "tooltip-pt-anonuserpage": "صفحة اليوزر للأيبى اللى انت بتعمل منه تحرير",
        "expand_templates_ok": "موافق",
        "expand_templates_remove_comments": "امسح التعليقات",
        "expand_templates_generate_xml": "اعرض شجرة XML",
-       "expand_templates_preview": "بروفه"
+       "expand_templates_preview": "بروفه",
+       "special-characters-group-latin": "لاتينى",
+       "special-characters-group-latinextended": "Latin extended",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-greek": "يونانى",
+       "special-characters-group-cyrillic": "كيريلى",
+       "special-characters-group-arabic": "عربى",
+       "special-characters-group-hebrew": "عبرى",
+       "special-characters-group-bangla": "بانجلاديشى",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati"
 }
index 6d86b3f..e61f4a8 100644 (file)
        "import-interwiki-history": "এই পৃষ্ঠাৰ সকলো সংশোধনৰ ইতিহাস প্ৰতিলিপি কৰক",
        "import-interwiki-templates": "সকলো সাঁচ অন্তৰ্ভুক্ত কৰক",
        "import-interwiki-submit": "আমদানি",
-       "import-interwiki-namespace": "গন্তব্য নামস্থান:",
-       "import-interwiki-rootpage": "গন্তব্য মূল পৃষ্ঠা (বৈকল্পিক):",
        "import-upload-filename": "নথিৰ নাম:",
        "import-comment": "মন্তব্য:",
        "importtext": "অনুগ্ৰহ কৰি [[Special:Export|ৰপ্তানি সুবিধা]] ব্যৱহাৰ কৰি উৎস ৱিকিৰ পৰা ফাইলটো ৰপ্তানি কৰক।\nআপোনাৰ কম্পিউটাৰত সাঁচি ৰাখক আৰু ইয়াত আপল'ড কৰক।",
index 40914c0..2d2e09a 100644 (file)
        "importinterwiki": "Transwiki koburera",
        "import-interwiki-history": "Ksudara va kot izvotsiatos ke batu bu",
        "import-interwiki-submit": "Koburera",
-       "import-interwiki-namespace": "Graskarafo yoltxo :",
        "import-upload-filename": "Iyeltakyolt :",
        "import-comment": "Sebuks :",
        "importtext": "Exportez un fichier depuis le wiki source en utilisant la fonction Special:Export, sauvez la page sur votre disque puis envoyez là ici.",
        "import-noarticle": "Me gokoburenu bu !",
        "xml-error-string": "$1 moe $2 conha, $3 briz ($4 byte): $5",
        "importlogpage": "Koburera va \"log\" bu",
-       "import-logentry-upload": "kobureyen [[$1]] kan iyeltakkalvajara",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|betaks|betaks}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|betaks|betaks}} male $2",
        "tooltip-pt-userpage": "Jinafu favesikbu",
index 7d9a4bd..c5158a4 100644 (file)
        "tags-create-reason": "कारण:",
        "tags-create-submit": "बनावा जाय",
        "tags-create-no-name": "आपको एक चिप्पि का नाम निर्दिष्ट करना चाहिए।",
+       "tags-delete-title": "चिप्पि हटायें",
        "tags-delete-reason": "कारण:",
+       "tags-activate-title": "चिप्पी शुरु करा जाय",
        "tags-activate-reason": "कारण:",
+       "tags-activate-not-found": "चिप्पी \"$1\" मौजूद नाई है।",
        "tags-activate-submit": "चालु करा जाय",
        "tags-deactivate-title": "बन्द करा जाय",
        "tags-deactivate-reason": "कारण:",
        "tags-edit-manage-link": "चिप्पी मिलावा जाए",
        "tags-edit-revision-selected": "[[:$2]] {{PLURAL:$1|कय}} चयनित अवतरण:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|चुनल}} लॉग इवेंट:",
+       "tags-edit-existing-tags": "मौजुद चिप्पी:",
        "tags-edit-existing-tags-none": "''कवनो नाइ''",
        "tags-edit-new-tags": "नवाँ चिप्पी",
+       "tags-edit-add": "चिप्पी जोडा जाए:",
+       "tags-edit-remove": "चिप्पी हटावा जाए:",
+       "tags-edit-remove-all-tags": "(कुल चिप्पी हटावा जाए)",
+       "tags-edit-chosen-placeholder": "कुछ चिप्पी चुना जाए",
+       "tags-edit-chosen-no-results": "कवनो चिप्पी नाइ मिला",
        "tags-edit-reason": "कारण:",
        "tags-edit-nooldid-title": "अमान्य लक्ष्य अवतरण",
        "comparepages": "पन्ना दाँजा जाय",
        "headline-anchor-title": "इस अनुभाग की कड़ी",
        "special-characters-group-latin": "लाटिन",
        "special-characters-group-latinextended": "लाटिन विस्तारित",
-       "special-characters-group-ipa": "आइपीए"
+       "special-characters-group-ipa": "आइपीए",
+       "special-characters-group-symbols": "प्रतीक",
+       "special-characters-group-greek": "ग्रीक",
+       "special-characters-group-cyrillic": "सिरिलिक",
+       "special-characters-group-arabic": "अरबी",
+       "special-characters-group-arabicextended": "अरबी विस्तारित",
+       "special-characters-group-persian": "फारसी",
+       "special-characters-group-hebrew": "हिब्रू",
+       "special-characters-group-bangla": "बांग्ला",
+       "special-characters-group-tamil": "तमिल",
+       "special-characters-group-telugu": "तेलूगू",
+       "special-characters-group-sinhala": "सिंहल",
+       "special-characters-group-gujarati": "गुजराती",
+       "special-characters-group-devanagari": "देवनागरी",
+       "special-characters-group-thai": "थाई",
+       "special-characters-group-lao": "लाओ",
+       "special-characters-group-khmer": "खमेर",
+       "special-characters-title-endash": "डैश",
+       "special-characters-title-emdash": "बड्का डैश",
+       "special-characters-title-minus": "माइनस चिन्ह"
 }
index ccd793c..6fcdcba 100644 (file)
        "errorpagetitle": "خطا",
        "returnto": "$1-ه قاییت.",
        "tagline": "{{SITENAME}} سایتیندان",
-       "help": "کؤمک",
+       "help": "یاردیم",
        "search": "آختار",
        "searchbutton": "آختار",
        "go": "گئت",
        "talkpage": "بۇ صحیفه‌نی دانیش",
        "talkpagelinktext": "دانیشیق",
        "specialpage": "اؤزل صفحه",
-       "personaltools": "شخصی آراجلار",
+       "personaltools": "شخصی آراجلار",
        "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
-       "views": "گؤرونوشلر",
-       "toolbox": "آراجلار",
+       "views": "گؤرونوشلر",
+       "toolbox": "آراجلار",
        "userpage": "ایستیفاده‌چی صحیفه‌‌سینه باخ",
        "projectpage": "پروژه صحیفه‌سینه باخ",
        "imagepage": "فایل صحیفه‌سینه باخ",
        "pool-errorunknown": "بیلینمه‌ین خطا",
        "pool-servererror": "پول سنتر سئرویسی الده دئییل ( $1 ).",
        "poolcounter-usage-error": "$1:ایشلتمک خطاسی",
-       "aboutsite": "{{SITENAME}} گؤره",
+       "aboutsite": "{{SITENAME}} گؤره",
        "aboutpage": "Project:گؤره",
        "copyright": "ایچینده‌کیلر $1 لیسانسی احاطه‌سینده‌دیلر.",
        "copyrightpage": "{{ns:project}}:کوْپی حاقلاری",
-       "currentevents": "ایندیکی اولایلار",
-       "currentevents-url": "Project:ایندیکی اولایلار",
+       "currentevents": "ایندیکی اولایلار",
+       "currentevents-url": "Project:ایندیکی اولایلار",
        "disclaimers": "یالانلامالار",
        "disclaimerpage": "Project:گنل یالانلاما",
        "edithelp": "ديَیشتیرمک یاردیمی",
        "diff-multi-otherusers": "({{PLURAL:$1|۱ میانی نوسخه لر|$1 میانی نوسخه لر}} دَییک اولونموش {{PLURAL:$2|۱ ایشلدچی|$2 ایشلدچی}}طرفیندن گوستریلمیر)",
        "diff-multi-manyusers": "{{PLURAL:$2|بیر|$2}}-دن چوخ ایستیفاده‌چی یارادان {{PLURAL:$1|بیر|$1}} نوسخه، گؤستریلمه‌ییب‌دیر",
        "difference-missing-revision": "بو فرقین ($1) {{PLURAL:$2|بیر|$2}} نوسخه‌سی تاپیلانمادی.\n\nعموماً بو خطا، سیلینن بیر صحیفه‌یه واختی گئچمیش بیر فرق باغلانتی‌سیلا گلمک ایله آرا گلر.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}سیلمک سیاهی‌سی]ندا باشقا بیلگیلر اولا بیلر.",
-       "searchresults": "آختاریش سونوجلاری",
-       "searchresults-title": "«$1» اوچون آختاریش سونوجلاری",
+       "searchresults": "آختاریش سونوجلاری",
+       "searchresults-title": "«$1» اوچون آختاریش سونوجلاری",
        "titlematches": "صحیفه‌‌ آدی عینیدیر",
        "textmatches": "یازی عینی‌دیر",
        "notextmatches": "هئچ بیر بنزر صحیفه یازی‌سی تاپیلمادی",
        "nchanges": "$1 {{PLURAL:$1|دَییشیکلیک}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|سون گوروش دن}}",
        "enhancedrc-history": "گئچمیش",
-       "recentchanges": "سون دَییشیکلیکلر",
+       "recentchanges": "سون دَییشیکلیکلر",
        "recentchanges-legend": "سون دَییشیکلیکلر سئچمه‌لری",
        "recentchanges-summary": "بو صحیفه‌ده، بو ویکی‌ده وئریلن ان سون دَییشیکلیکلری ایزله‌یین.",
        "recentchanges-noresult": "وئریلمیش دؤنم‌ده، بو معیارلارا تطبیق اولان دَییشدیرمه یوخدور.",
        "rc-old-title": "ایلک‌جه «$1» آدی‌له یارانمیشدیر",
        "recentchangeslinked": "ایلگیلی دَییشیکلیکلر",
        "recentchangeslinked-feed": "ایلگیلی دَییشیکلیکلر",
-       "recentchangeslinked-toolbox": "ایلگیلی دَییشیکلیکلر",
+       "recentchangeslinked-toolbox": "ایلگیلی دَییشیکلیکلر",
        "recentchangeslinked-title": "''$1'' ایله ایلگی‌لی دییشیکلر",
        "recentchangeslinked-summary": "آشاغیداکی سیياهی، قئيد اوْلونان صحیفه‌‌يه (و يا قئيد اوْلونان کاتئقوْرياداکی صحیفه‌‌لره) داخیلی کئچید وئرن صحیفه‌‌لرده ائدیلمیش سوْن ديَیشیکلیکلرین سیياهیسیدیر. \n[[Special:Watchlist|ایزله‌مه سیياهینیزداکی]] صحیفه‌‌لر '''قالین''' شریفتله گؤستریلمیشدیر.",
        "recentchangeslinked-page": "صفحه آدی:",
        "listusers-desc": "آزالان سیرادا سیرالا",
        "usereditcount": "$1 {{PLURAL:$1|دَییشدیرمه}}",
        "usercreated": "$1 تاریخینده، ساعات $2-ده {{GENDER:$3|یارانیب‌دیر}}",
-       "newpages": "يئنی صفحه‌‌‌لر",
+       "newpages": "يئنی صفحه‌لر",
        "newpages-username": "ایستیفاده‌چی آدی:",
        "ancientpages": "ان اسکی صحیفه‌لر",
        "move": "آدینی دَییشدیر",
        "invert": "سئچیلنی دؤندر",
        "tooltip-invert": "بو قوتونی علامتله یین تا انتخاب اولان آد فضا سینین ایچری صحیفه لری دییشیک لیک لری(و اوبیری علامتلنمیش فضالار) گیزله نه آدی",
        "tooltip-whatlinkshere-invert": "سئچیلمیش آدفضاسیندان اولان باغلانتیلاری گیزلتمک اوچون بو قوتویا نیشان قویون.",
-       "namespace_association": "عÙ\84اÙ\82Ù\87â\80\8cÙ\84Û\8c Ø¢Ø¯ Ø³Ø§Ø­Ù\87â\80\8cسی",
+       "namespace_association": "اÛ\8cÙ\84Ú¯Û\8cÙ\84Û\8c Ø¢Ø¯Ù\81ضاسی",
        "tooltip-namespace_association": "بو قوتونو علامت له ین یالنیز آد بحث فضاسی یا مرتبط اولان آد فضاسی ایله انتخاب اولا",
        "blanknamespace": "(آنا)",
        "contributions": "{{GENDER:$1|ایستیفاده‌چی}} چالیشمالاری",
        "sp-contributions-toponly": "تکجه سون نوسخه اولان دییشیکلری گؤستر",
        "sp-contributions-newonly": "یالنیز صفحه یاراتماق دَییشیکلیکلرینی گؤستر",
        "sp-contributions-submit": "آختار",
-       "whatlinkshere": "بو صفحه‌یه باغلانتیلار",
+       "whatlinkshere": "بو صفحه‌یه باغلانتیلار",
        "whatlinkshere-title": "«$1»-ه باغلانان صحیفه‌لر",
        "whatlinkshere-page": "صفحه:",
        "linkshere": "آشاغیداکی صحیفه‌لر '''[[:$1]]'''-ه باغلانیب:",
        "import-interwiki-history": "صحیفه‌نین دییشمه تاریخچه‌لری‌نین هامی‌سینی کؤچور",
        "import-interwiki-templates": "بوتون شابلون‌لارلا بیرلیکده",
        "import-interwiki-submit": "ایچری توکمه اولسون",
-       "import-interwiki-namespace": "هدف آد ساحه‌سی:",
-       "import-interwiki-rootpage": "هدف‌لنن قایناق صحیفه‌سی (ایسته‌یه باغ‌لی):",
        "import-upload-filename": "فایل آدی",
        "import-comment": "آچیخلا:",
        "importtext": "خاهیش ائدیریک فایلی [[Special:Export| خاریجه کؤچورمه کؤمک پروقرامییلا]] قایناق ویکی خاریجه کؤچورون.\nکومپوتئرینیزه یازین و بورا یوکلیین.",
        "tooltip-pt-mycontris": "سیزین چالیشمالارینیزین لیستی",
        "tooltip-pt-login": "گیریش ائتمه‌یینیز توصیه اولونور؛ اما گرکلی دئییل",
        "tooltip-pt-logout": "چیخیش",
-       "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده سیز،آنجاق حساب یارتماق اختیاری دیر.",
+       "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده‌سیز؛ آنجاق حساب یاراتماق ایستگه باغلی‌دیر",
        "tooltip-ca-talk": "ایچینده‌کیلره گؤره دانیشیق",
        "tooltip-ca-edit": "سیز بو صفحه‌نی دَییشدیره بیلرسینیز. لطفاً قئید ائتمه‌دن قاباق اؤن‌گؤستریش دوگمه‌سینی ایشلدین",
        "tooltip-ca-addsection": "یئنی بؤلوم یارات",
        "tooltip-ca-viewsource": "بو صحیفه‌‌ قورونوب‌دور.\nاونون قایناغینا باخا بیلرسیز",
-       "tooltip-ca-history": "بو صفحه‌نین گئچمیش سۆروملری",
+       "tooltip-ca-history": "بو صفحه‌نین گئچمیش سۆروملری",
        "tooltip-ca-protect": "بو صحیفه‌نی قورو",
        "tooltip-ca-unprotect": "بو صحیفه‌نین قوروماسینی دَییشدیر",
        "tooltip-ca-delete": "بو صحیفه‌‌نی سیل",
        "svg-long-error": "اعتبارسیز سوگ فایل: $1",
        "show-big-image": "فایلین اصلی",
        "show-big-image-preview": "سیناق گؤستریشی اؤلچوسو: $1.",
-       "show-big-image-other": "دÛ\8cگر {{PLURAL:$2|Ù\86تÛ\8cج|Ù\86تÛ\8cجÙ\87â\80\8cلر}}: $1.",
+       "show-big-image-other": "Ø¢Û\8cرÛ\8c {{PLURAL:$2|Ú©Û\8cÙ\81Û\8cت|Ú©Û\8cÙ\81Û\8cتلر}}: $1.",
        "show-big-image-size": "$1 × $2 پیکسئل",
        "file-info-gif-looped": "ایلملنیب",
        "file-info-gif-frames": "$1 {{PLURAL:$1|فرامئ|چرچیوه}}",
        "tags-delete": "سیل",
        "tags-hitcount": "$1 {{PLURAL:$1|دییشیکلیک|دییشیک‌لیک}}",
        "tags-create-submit": "یارات",
+       "tags-edit-title": "اِتیکِتلری دَییشدیر",
+       "tags-edit-manage-link": "اِتیکِتلری ایداره ائت",
+       "tags-edit-revision-selected": "[[:$2]]-نین سئچیلمیش {{PLURAL:$1|نوسخه‌سی|نوسخه‌لری}}:",
+       "tags-edit-logentry-selected": "سئچیلمیش {{PLURAL:$1|قئید|قئیدلر}}:",
+       "tags-edit-revision-legend": "{{PLURAL:$1|بو|بوتون $1}} نوسخه‌دن اِتیکِتلری اکله یا قالدیر",
+       "tags-edit-logentry-legend": "{{PLURAL:$1|بو|بوتون $1}} قئیددن اِتیکِتلری اکله یا قالدیر",
+       "tags-edit-existing-tags": "وار اولان اِتیکِتلر:",
+       "tags-edit-existing-tags-none": "«هئچ بیری»",
+       "tags-edit-new-tags": "یئتی اِتیکِتلر:",
+       "tags-edit-add": "بو اِتیکِتلری اکله:",
+       "tags-edit-remove": "بو اِتیکِتلری قالدیر:",
+       "tags-edit-remove-all-tags": "(بوتون اِتیکِتلری قالدیر)",
+       "tags-edit-chosen-placeholder": "بعضی اِتیکِتلری سئچ",
+       "tags-edit-chosen-no-results": "تای اولان اِتیکِت تاپیلمادی",
+       "tags-edit-reason": "ندن:",
+       "tags-edit-nooldid-title": "گئچرسیز هدف نوسخه",
        "comparepages": "صحیفه‌لری قارشی‌لاش‌دیر",
        "compare-page1": "صحیفه 1",
        "compare-page2": "صحیفه 2",
        "htmlform-chosen-placeholder": "بیر سئچمه سئچین",
        "htmlform-cloner-create": "چوْخراق آرتیر",
        "htmlform-cloner-delete": "سیل",
+       "htmlform-cloner-required": "ان آزی بیر دیَر گرکلیدیر.",
        "sqlite-has-fts": "$1 بوتون یازی آختارما دستگی‌له",
        "sqlite-no-fts": "$1 بوتون یازی آختارماماق‌لا",
        "logentry-delete-delete": "$1، $3 صحیفه‌سینی {{GENDER:$2|سیلدی}}",
        "revdelete-uname-unhid": "ایستیفاده‌چی آدی گیزلیلیک‌دن چیخدی",
        "revdelete-restricted": "ایداره‌چیلره محدودیت قویدو",
        "revdelete-unrestricted": "ایداره‌چیلرین محدودیتلرینی گؤتوردو",
+       "logentry-block-block": "$1 {{GENDER:$4|$3}}-نی {{GENDER:$2|بلوکلادی}}. قورتارماق تاریخی: $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-نین {{GENDER:$2|بلوکلاماغینی قالدیردی}}",
        "logentry-move-move": "$1، $3 صحیفه‌سینی $4-ه {{GENDER:$2|آپاردی}}",
        "logentry-move-move-noredirect": "$1، $3 صحیفه‌سینی، یول‌لاندیرما قویماماق‌لا، $4-ه {{GENDER:$2|آپاردی}}",
        "logentry-move-move_redir": "$1، $3 صحیفه‌سینی، $4-ده یول‌لاندیرما اوستونه {{GENDER:$2|آپاردی}}",
        "logentry-patrol-patrol": "$1، $3 صحیفه‌سینین $4 نوسخه‌سینی، نظارتلنمیش {{GENDER:$2|نیشانلادی}}",
        "logentry-patrol-patrol-auto": "$1، $3 صحیفه‌سینین $4 نوسخه‌سینی، اوتوماتیک اولاراق نظارتلنمیش {{GENDER:$2|نیشانلادی}}",
        "logentry-newusers-newusers": " بیر ایستیفاده‌چی حسابی $1 {{GENDER:$2|یاراتدی}}",
-       "logentry-newusers-create": "بیر ایشلدن حسابی $1 {{GENDER:$2|یاراتدی}}",
+       "logentry-newusers-create": "$1 ایشلدن حسابی {{GENDER:$2|یارادیلدی}}",
        "logentry-newusers-create2": "$1 ایستیفاده‌چی، $3 حسابی {{GENDER:$2|یاراتدی}}",
        "logentry-newusers-byemail": "$3 ایستیفاده‌چی حسابی، $1 ایله {{GENDER:$2|یارادیلیب}} و رمز، ایمیل ایله گؤندریلیب‌دیر",
        "logentry-newusers-autocreate": "$1 ایستیفاده‌چی حسابی اوتوماتیک {{GENDER:$2|یارادیلدی}}",
        "logentry-rights-autopromote": "$1-ین مقامی اوتوماتیک $4-دن $5-ه {{GENDER:$2|آرتیریلدی}}",
        "logentry-upload-upload": "$1 $3 را {{GENDER:$2|یوکلندیردی}}",
        "rightsnone": "(هئچ)",
+       "revdelete-summary": "دَییشدیرمه قیساسی",
        "feedback-adding": "صحیفه‌یه گئری-بیلدیریم آرتیریلیر...",
+       "feedback-back": "دالی",
        "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
        "feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
        "feedback-bugornote": "بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].\nاو اولماسا، بو آشاغیداکی ساده فورم‌دان ایستیفاده ائده بیلرسینیز. سیزین باخیشینیز، ایستیفاده‌چی آدینیزلا، «[$3 $2]» صحیفه‌سینه آرتیریلاجاق‌دیر.",
        "feedback-cancel": "لغو ائت",
        "feedback-close": "اولدو",
+       "feedback-error-title": "خطا",
        "feedback-error1": "خطا: API-دان تانینمامیش نتیجه",
        "feedback-error2": "خطا: دَییشدیرمه باشاری‌سیز اولدو",
        "feedback-error3": "خطا: API-دان جاواب گلمه‌دی",
        "feedback-subject": "قونو:",
        "feedback-submit": "گؤندر",
        "feedback-thanks": "تشکورلر! سیزین گئری-بیلدیریمینیز «[$2 $1]» صحیفه‌سینه گؤندریلدی.",
+       "feedback-thanks-title": "تشکورلر!",
        "searchsuggest-search": "آختار",
        "searchsuggest-containing": "ساخلانیلیر...",
        "api-error-badaccess-groups": "سیزین بو ویکی‌یه فایل یوکله‌مک ایجازه‌نیز یوخدور.",
        "mediastatistics-header-audio": "سس",
        "mediastatistics-header-video": "ویدیولار",
        "mediastatistics-header-office": "دفتر",
+       "headline-anchor-title": "بو بؤلومه باغلانتی",
        "special-characters-group-latin": "لاتین",
        "special-characters-group-latinextended": "لاتین گئنیشلندیریلمیش",
        "special-characters-group-ipa": "IPA",
index a748209..dc7cfd7 100644 (file)
        "import-interwiki-history": "Был биттең бөтә үҙгәртеү тарихын яҙҙырырға",
        "import-interwiki-templates": "Бөтә ҡалыптарҙы индерергә",
        "import-interwiki-submit": "Тейәргә",
-       "import-interwiki-namespace": "Кәрәкле исемдәр арауығы:",
-       "import-interwiki-rootpage": "Төп бит (мотлаҡ түгел):",
        "import-upload-filename": "Файл исеме:",
        "import-comment": "Иҫкәрмә:",
        "importtext": "Зинһар, файлды сығанаҡ викинан [[Special:Export|махсус ҡорал]] ярҙамында сығарығыҙ. Артабан уны компьютерығыҙға һаҡлағыҙ һәм бында тейәгеҙ.",
        "import-rootpage-nosubpage": "Төп биттең \"$1\" исемдәр арауығы эске биттәргә рөхсәт бирмәй.",
        "importlogpage": "Тейәү яҙмалары журналы",
        "importlogpagetext": "Хакимдәр тарафынан башҡа вики проекттарҙан биттәрҙе һәм уларҙың үҙгәртеүҙәр тарихын тейәү.",
-       "import-logentry-upload": "[[$1]] битен файлдан тейәгән",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|1=өлгө|өлгө}}",
-       "import-logentry-interwiki": "$1 битен вики проекттары-ара тейәгән",
        "import-logentry-interwiki-detail": "$2 өлгөнән $1 {{PLURAL:$1|1=өлгө|өлгө}}",
        "javascripttest": "\nJavaScript тикшереү",
        "javascripttest-pagetext-noframework": "Был бит JavaScript тикшеренеүҙәре үткәреү өсөн  резервланған.",
        "expand_templates_remove_comments": "Аңлатмаларҙы юйырға",
        "expand_templates_remove_nowiki": "Һөҙөмтәлә <nowiki> билдәләрен йәшерергә",
        "expand_templates_generate_xml": "XML уҡыу ағасын күрһәтергә",
-       "expand_templates_preview": "Ҡарап сығыу"
+       "expand_templates_preview": "Ҡарап сығыу",
+       "special-characters-group-latin": "Латин",
+       "special-characters-group-latinextended": "Латин (киңәйтелгән)",
+       "special-characters-group-ipa": "ХАФӘ (IPA)",
+       "special-characters-group-symbols": "Тамғалар",
+       "special-characters-group-greek": "Грек",
+       "special-characters-group-cyrillic": "Кириллик",
+       "special-characters-group-arabic": "Ғәрәп",
+       "special-characters-group-arabicextended": "Ғәрәп (киңәйтелгән)",
+       "special-characters-group-persian": "Фарсы",
+       "special-characters-group-hebrew": "Йәһүд",
+       "special-characters-group-bangla": "Бенгал",
+       "special-characters-group-tamil": "Тамиль",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингал",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "Тай",
+       "special-characters-group-lao": "Лао",
+       "special-characters-group-khmer": "Кһмер",
+       "special-characters-title-endash": "уртаса һыҙыҡ",
+       "special-characters-title-emdash": "оҙон һыҙыҡ",
+       "special-characters-title-minus": "минус билдәһе"
 }
index 9f05621..ad81625 100644 (file)
        "import-interwiki-history": "کپی کن کل بازبینی آن تاریح په ای صفحه",
        "import-interwiki-templates": "کل تمپلت هور بنت",
        "import-interwiki-submit": "ورود",
-       "import-interwiki-namespace": "مقصدء نام فضا",
        "import-upload-filename": "فایلءَ نام:",
        "import-comment": "نظر:",
        "importtext": "لطفا فایل چه منبع ویکی درگیز گون حاصین:[[Special:Export|وسیله درگیزگ]], ایء ته وتی دیسک ذخیره کن و ادان آپلود کن.",
index e5a69d9..71e1204 100644 (file)
        "import-interwiki-history": "Kopyahon an gabos na mga bersyón para sa páhinang ini",
        "import-interwiki-templates": "Ibali an gabos na mga panguyog",
        "import-interwiki-submit": "Ipalaog",
-       "import-interwiki-namespace": "Destinasyon kan espasyong-pangaran:",
-       "import-interwiki-rootpage": "Destinasyon kan ugat pahina (opsyonal):",
        "import-upload-filename": "Sagunsong Pangaran:",
        "import-comment": "Komento:",
        "importtext": "Paki-eksporta an sagunson gikan sa ginikanang wiki na gamit an [[Special:Export|gamiton pan-eksporta]].\nItagama ini sa saimong kompyuter asin ikarga ini digde.",
index c5d93af..d3aefc2 100644 (file)
        "no-null-revision": "Немагчыма стварыць нулявую вэрсію для старонкі «$1»",
        "badtitle": "Няслушная назва",
        "badtitletext": "Запытаная назва старонкі няслушная ці пустая, альбо няслушна ўказаная міжмоўная ці інтэрвікі-назва. Яна можа ўтрымліваць сымбалі, якія нельга ўжываць у назвах.",
+       "title-invalid-empty": "Запытаная назва старонкі пустая або ўтрымлівае толькі прастору назваў.",
+       "title-invalid-utf8": "Запытаная назва старонкі ўтрымлівае няслушныя сымбалі UTF-8.",
        "perfcached": "Наступныя зьвесткі кэшаваныя і могуць быць састарэлымі. У кэшы {{PLURAL:$1|даступны|даступныя}} ня больш за $1 {{PLURAL:$1|вынік|вынікі|вынікаў}}.",
        "perfcachedts": "Наступныя зьвесткі кэшаваныя і апошні раз былі абноўленыя $1. У кэшы {{PLURAL:$4|даступны|даступныя}} ня больш за $4 {{PLURAL:$4|вынік|вынікі|вынікаў}}.",
        "querypage-no-updates": "Абнаўленьні гэтай старонкі цяпер адключаныя. Зьвесткі ня будуць абнаўляцца.",
        "import-interwiki-submit": "Імпартаваць",
        "import-mapping-default": "Імпарт у месца па змоўчаньні",
        "import-mapping-namespace": "Імпарт у прастору назваў:",
+       "import-mapping-subpage": "Імпарт у якасьці падстаронак наступнай старонкі:",
        "import-upload-filename": "Назва файла:",
        "import-comment": "Камэнтар:",
        "importtext": "Калі ласка, экспартуйце файл з крынічнай вікі з дапамогай [[Special:Export|прылады экспарту]].\nЗахавайце яго на свой кампутар, а потым загрузіце сюды.",
        "pageinfo-protect-cascading-yes": "Так",
        "pageinfo-protect-cascading-from": "Каскадная абароная пачынаецца з",
        "pageinfo-category-info": "Інфармацыя пра катэгорыю",
+       "pageinfo-category-total": "Агульная колькасьць чальцоў",
        "pageinfo-category-pages": "Колькасьць старонак",
        "pageinfo-category-subcats": "Колькасьць падкатэгорыяў",
        "pageinfo-category-files": "Колькасьць файлаў",
        "patrol-log-page": "Журнал патруляваньняў",
        "patrol-log-header": "Гэта журнал патруляваных вэрсіяў.",
        "log-show-hide-patrol": "$1 журнал патруляваньняў",
+       "log-show-hide-tag": "$1 журнал метак",
        "deletedrevision": "Выдаленая старая вэрсія $1",
        "filedeleteerror-short": "Памылка выдаленьня файла: $1",
        "filedeleteerror-long": "У часе выдаленьня файла ўзьніклі наступныя памылкі:\n\n$1",
index 3b9ab74..e3b6658 100644 (file)
        "notloggedin": "Не ўвайшоў",
        "userlogin-noaccount": "Не маеце ўліковага запісу?",
        "userlogin-joinproject": "Далучайцеся да {{GRAMMAR:родны|{{SITENAME}}}}",
-       "nologin": "Не маеце рахунку? $1.",
+       "nologin": "Не маеце рахунка? $1.",
        "nologinlink": "Завесці рахунак",
        "createaccount": "Стварыць рахунак",
        "gotaccount": "Ужо маеце рахунак? '''$1'''.",
        "accountcreated": "Створаны рахунак",
        "accountcreatedtext": "Створаны ўліковы запіс удзельніка [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|размовы]]).",
        "createaccount-title": "Стварэнне рахунка на {{SITENAME}}",
-       "createaccount-text": "На пляцоўцы {{SITENAME}} ($4) быў створаны рахунак удзельніка з гэтым адрасам эл.пошты. Назва рахунку \"$2\", пароль \"$3\". Варта адразу ўвайсці ў сістэму і змяніць пароль.\n\nКалі стварэнне рахунку было памылковым, то на гэтае паведамленне можна не звяртаць увагі.",
+       "createaccount-text": "На пляцоўцы {{SITENAME}} ($4) быў створаны рахунак удзельніка з гэтым адрасам эл.пошты. Назва рахунка \"$2\", пароль \"$3\". Варта адразу ўвайсці ў сістэму і змяніць пароль.\n\nКалі рахунак быў створаны памылкова, то на гэтае паведамленне можна не звяртаць увагі.",
        "login-throttled": "Занадта многа нядаўніх спробаў увайсці пад гэтым уліковым запісам. \nПачакайце $1 перад тым, як спрабаваць ізноў.",
        "login-abort-generic": "Няўдалая спроба ўвайсці ў сістэму",
        "loginlanguagelabel": "Мова: $1",
        "user-mail-no-body": "Спроба даслаць ліст эл.пошты з пустым або неабгрунтавана кароткім зместам.",
        "changepassword": "Пароль",
        "resetpass_announce": "Каб завяршыць уваход у сістэму, Вы павінны ўстанавіць новы пароль.",
-       "resetpass_header": "Змяніць пароль рахунку",
+       "resetpass_header": "Змяніць пароль рахунка",
        "oldpassword": "Стары пароль:",
        "newpassword": "Новы пароль:",
        "retypenew": "Новы пароль паўторна:",
        "accmailtext": "На адрас $2 быў дасланы згенераваны пароль для [[User talk:$1|$1]]. Ён можа быць зменены на <em>[[Special:ChangePassword|старонцы змены пароля]]</em> пасля ўваходу ў сістэму.",
        "newarticle": "(Новы)",
        "newarticletext": "Вы перайшлі да старонкі, якой яшчэ няма, і таму трапілі сюды. \nКаб пачаць новую старонку, пішыце яе тэкст у ніжэйпаказаным акне рэдагавання (падрабязнасці бач у [$1 даведцы]). \nКалі вы тут выпадкова, проста націсніце <strong>назад</strong> у браўзеры.",
-       "anontalkpagetext": "----''Гэта старонка размовы з ананімным удзельнікам, які або не мае свайго рахунку, або ім не карыстаўся. Таму дзеля яго ці яе ідэнтыфікацыі мы мусім выкарыстаць лічбавы Адрас IP. Такі адрас IP могуць дзяліць між сабою некалькі асоб. Калі вы ананімны ўдзельнік, і лічыце, што атрымліваеце няслушныя заўвагі,[[Special:UserLogin/signup|стварыце рахунак]] або [[Special:UserLogin|акажыцеся]], каб вас больш не блыталі з іншымі ананімнымі ўдзельнікамі.''",
+       "anontalkpagetext": "----''Гэта старонка размовы з ананімным удзельнікам, які або не мае свайго рахунка, або ім не карыстаўся. Таму дзеля яго ці яе ідэнтыфікацыі мы мусім выкарыстаць лічбавы IP-адрас. Такі адрас IP могуць дзяліць між сабою некалькі асоб. Калі вы ананімны ўдзельнік, і лічыце, што атрымліваеце няслушныя заўвагі,[[Special:UserLogin/signup|стварыце рахунак]] або [[Special:UserLogin|зайдзіце ў сістэму]], каб вас больш не блыталі з іншымі ананімнымі ўдзельнікамі.''",
        "noarticletext": "Старонка не ўтрымлівае тэксту. Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэткую назву]] ў іншых старонках ці <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ў журналах],\nабо [{{fullurl:{{FULLPAGENAME}}|action=edit}} папрацаваць з гэтай старонкай]</span>.",
        "noarticletext-nopermission": "Старонка не ўтрымлівае тэксту.\nВы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэткую назву]] ў іншых старонках,\nці <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ў журналах]</span>, але вы не маеце дазволу на стварэнне гэтай старонкі.",
        "missing-revision": "Няма версіі #$1 у старонкі з назвай \"{{FULLPAGENAME}}\".\n\nЗвычайна такое здараецца, калі прайсці па састарэлай спасылцы з гісторыі на старонку, якая была сцёрта.\nПадрабязнасці можна пабачыць у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале сціранняў].",
        "expiringblock": "канчаецца $1 $2",
        "anononlyblock": "толькі ананімы",
        "noautoblockblock": "аўтаблок не дазволены",
-       "createaccountblock": "стварэнне рахунку заблакавана",
+       "createaccountblock": "стварэнне рахунка заблакавана",
        "emailblock": "эл.пошта заблакавана",
        "blocklist-nousertalk": "не мае дазволу правіць уласную старонку размоў",
        "ipblocklist-empty": "Спіс блокаў зараз пусты.",
        "blocklogtext": "Журнал пастаноўкі і зняцця блокаў. Аўтаматычна блакаваныя адрасы IP тут не паказваюцца. Спіс актуальных забарон і блокаў бач у [[Special:BlockList|спісе блокаў]].",
        "unblocklogentry": "зняты блок з $1",
        "block-log-flags-anononly": "толькі ананімныя ўдзельнікі",
-       "block-log-flags-nocreate": "стварэнне рахунку не дазволена",
+       "block-log-flags-nocreate": "стварэнне рахунка не дазволена",
        "block-log-flags-noautoblock": "аўта-блок не дазволены",
        "block-log-flags-noemail": "пастаўлены блок на эл.пошту",
        "block-log-flags-nousertalk": "нельга правіць уласную размову",
        "confirmemail_loggedin": "Зараз ваш адрас эл.пошты стаўся пацверджаным.",
        "confirmemail_subject": "Пацверджанне адрасу эл.пошты для {{SITENAME}}",
        "confirmemail_body": "Нехта (магчыма, што і вы — з адрасу IP $1) завёў рахунак \"$2\" на пляцоўцы {{SITENAME}}, паказваючы гэты адрас эл.пошты як свой.\n\nДзеля таго, каб пацвердзіць, што рахунак сапраўды ваш, і каб актываваць магчымасці эл.пошты для {{SITENAME}}, адкрыйце ў браўзеры гэтую спасылку:\n\n$3\n\nКалі гэта *былі не вы*, не адкрывайце той спасылкі, а адкрыйце гэтую, каб згасіць пацверджанне адрасу эл.пошты:\n\n$5\n\nГэты пацвярджальны код згасне $4.",
-       "confirmemail_body_changed": "Нехта з IP-адрасу \"$1\" (магчыма, што Вы) змяніў адрас эл.пошты для рахунку \"$2\" на пляцоўцы {{SITENAME}}.\n\nКаб пацвердзіць, што рахунак сапраўды належыць вам, і каб ізноў уключыць працу з эл.поштай для рахунку на пляцоўцы {{SITENAME}}, адкрыйце гэтую спасылку ў браўзеры:\n\n$3\n\nКалі рахунак вам *не належыць*, адкрыйце ніжэй паказаную спасылку, каб адмовіцца ад пацверджання адрасу эл.пошты:\n\n$5\n\nГэты квіток на пацверджанне будзе дзейсны не далей за $4.",
+       "confirmemail_body_changed": "Нехта з IP-адраса \"$1\" (магчыма, што Вы) змяніў адрас эл.пошты для рахунка \"$2\" на пляцоўцы {{SITENAME}}.\n\nКаб пацвердзіць, што рахунак сапраўды належыць вам, і каб ізноў уключыць працу з эл.поштай для рахунка на пляцоўцы {{SITENAME}}, адкрыйце гэтую спасылку ў браўзеры:\n\n$3\n\nКалі рахунак вам *не належыць*, адкрыйце ніжэй паказаную спасылку, каб адмовіцца ад пацвярджэння адраса эл.пошты:\n\n$5\n\nГэты код пацвярджэння сапраўдны да $4.",
        "confirmemail_body_set": "Нехта (магчыма, вы) з IP-адрасам $1\nпаказаў дадзены адрас электроннай пошты для ўліковага запісу «$2» у праекце {{SITENAME}}.\n\nКаб пацвердзіць, што акаўнт сапраўды належыць вам, і ўключыць магчымасць адпраўкі лістоў з сайта {{SITENAME}}, адкрыйце гэтую спасылку ў браўзеры:\n\n$3\n\nКалі рахунак вам *не належыць*, адкрыйце ніжэй паказаную спасылку, каб адмовіцца ад пацверджання адрасу эл.пошты:\n\n$5\n\nКод пацверджання дзейсны да $4.",
        "confirmemail_invalidated": "Пацверджанне эл.пошты скасаванае",
        "invalidateemail": "Адмовіцца ад пацверджання эл.пошты",
        "revdelete-uname-unhid": "імя ўдзельніка адкрыта",
        "revdelete-restricted": "пастаўленыя абмежаванні на адміністратараў",
        "revdelete-unrestricted": "знятыя абмежаванні з адміністратараў",
+       "logentry-block-block": "$1 заблакірава{{GENDER:$2|ў|ла}} {{GENDER:$4|$3}} на перыяд $5 $6",
+       "logentry-block-reblock": "$1 {{GENDER:$2|памяняў|памяняла}} настройкі блакіроўкі {{GENDER:$4|$3}} на перыяд $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|памяняў|памяняла}} параметры блакіроўкі {{GENDER:$4|$3}} на перыяд $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4, не пакінуўшы перасылкі",
        "logentry-move-move_redir": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 па-над перасылкаю",
index 2ab85d2..5b3ab20 100644 (file)
        "tags-deactivate-reason": "دلیل:",
        "tags-deactivate-not-allowed": "«$1» ئی تگی غیر په هال کورتین ممکن نه اینت.",
        "tags-deactivate-submit": "غیرپئال کورتین",
+       "tags-edit-existing-tags": "موجودین ٹاپه ئان:",
+       "tags-edit-existing-tags-none": "\"هیچگوجام\"",
+       "tags-edit-new-tags": "نوکین ٹاپه:",
+       "tags-edit-add": "ای ٹاپه ئانی ایزاپه کورتین:",
+       "tags-edit-remove": "ای تاٹه ئانی پاک کورتین:",
+       "tags-edit-remove-all-tags": "(موچین ٹاپه ئانی پاک کورتین)",
+       "tags-edit-chosen-placeholder": "ٹاپه ئانی گیچێن کورتین",
+       "tags-edit-chosen-no-results": "ٹاپه ئی په گیچێن ئاودی نه بوت",
+       "tags-edit-reason": "دلیل:",
        "comparepages": "تاکدیمانئ مقایسه",
        "compare-page1": "تاکدیم ۱",
        "compare-page2": "تاکدیم ۲",
        "json-error-syntax": "نحوی ئین خطا",
        "json-error-inf-or-nan": "INF یا NAN ئی مقادیر یک یا گیشتیر بی مقداری که کدگذاری ئا بیئنت",
        "json-error-unsupported-type": "یک اندازه که نتوانت کد گذاری بیئت داته بوته",
-       "headline-anchor-title": "لینک بئ ای قیسمت ئا"
+       "headline-anchor-title": "لینک بئ ای قیسمت ئا",
+       "special-characters-group-latin": "لاتین",
+       "special-characters-group-latinextended": "پیشرپته ئین لاتین",
+       "special-characters-group-ipa": "آی پی ای",
+       "special-characters-group-symbols": "نشانگ ئان",
+       "special-characters-group-greek": "یونانی",
+       "special-characters-group-cyrillic": "سیریلیک",
+       "special-characters-group-arabic": "ئربی",
+       "special-characters-group-arabicextended": "پیشرپته ئین ئربی",
+       "special-characters-group-persian": "پارسی",
+       "special-characters-group-hebrew": "ئیبری",
+       "special-characters-group-bangla": "بنگالی",
+       "special-characters-group-tamil": "تامیلی",
+       "special-characters-group-telugu": "تێلوگو",
+       "special-characters-group-sinhala": "سینهالا",
+       "special-characters-group-gujarati": "گوجراتی",
+       "special-characters-group-devanagari": "دیواناگرى",
+       "special-characters-group-thai": "تایلندی",
+       "special-characters-group-lao": "لائو",
+       "special-characters-group-khmer": "خمر",
+       "special-characters-title-endash": "پاسیله خت",
+       "special-characters-title-emdash": "تچکین پاسیله خت",
+       "special-characters-title-minus": "منپی نشانگ"
 }
index cffaf52..fd06461 100644 (file)
        "import-interwiki-history": "Salin sabarataan halam raralatan gasan tungkaran ngini",
        "import-interwiki-templates": "Tamasuk samunyaan cicitakan",
        "import-interwiki-submit": "Impur",
-       "import-interwiki-namespace": "Ruang-ngaran tujuan:",
-       "import-interwiki-rootpage": "Tungkaran turunan tujuan (opsional):",
        "import-upload-filename": "Ngaran barakas:",
        "import-comment": "Kumintar:",
        "importtext": "Muhun ma-ikspur tungkaran matan asal mula wiki mamuruk [[Special:Export|sarana ikspur]].\nSimpan ngini dalam komputar Pian wan hunggah di sia.",
index ebe3c25..ba9e38e 100644 (file)
        "emailccsubject": "আপনার বার্তার অনুলিপি $1-কে: $2",
        "emailsent": "ই-মেইল প্রেরণ করা হয়েছে",
        "emailsenttext": "আপনার ই-মেইল বার্তা প্রেরণ করা হয়েছে।",
-       "emailuserfooter": "এই ই-মেইলটি {{SITENAME}} সাইটের \"ই-মেইল করুন\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে $2-এর নিকট পাঠানো হয়েছে।",
+       "emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailpage}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে $2-এর নিকট পাঠানো হয়েছে।",
        "usermessage-summary": "বাদবাকি সিস্টেম বার্তা",
        "usermessage-editor": "সিস্টেম ম্যাসেঞ্জার",
        "watchlist": "নজর তালিকা",
        "rollback": "সম্পাদনা ফিরিয়ে নিন",
        "rollbacklink": "পুনর্বহাল",
        "rollbacklinkcount": "$1টি {{PLURAL:$1|সম্পাদনা}} রোলব্যাক করুন",
-       "rollbacklinkcount-morethan": "$1টির বেশি {{PLURAL:$1|সম্পাদনা|সম্পাদনাগুলো}} রোলব্যাক করুন",
+       "rollbacklinkcount-morethan": "$1টির বেশি {{PLURAL:$1|সম্পাদনা}} রোলব্যাক করুন",
        "rollbackfailed": "রোলব্যাক ব্যর্থ",
        "cantrollback": "পূর্বের সংস্করণে ফেরত যাওয়া সম্ভব হল না, সর্বশেষ সম্পাদনাকারী এই নিবন্ধটির একমাত্র লেখক।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) দ্বারা সম্পাদিত সর্বশেষ [[:$1]] সম্পাদনাটি পুনর্বহাল করা যাচ্ছে না;\nঅন্য কোন ব্যবহারকারী এই পাতা ইতিমধ্যে সম্পাদনা বা পুনর্বহাল করেছেন।\n\nএই পাতায় সর্বোশেষে [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) দ্বারা সম্পাদিত।",
        "import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক",
        "import-interwiki-templates": "সকল টেম্পলেট অন্তর্ভুক্ত",
        "import-interwiki-submit": "আমদানি",
+       "import-mapping-subpage": "নিচের পাতার উপপাতাসমূহ হিসাবে আমদানি করুন:",
        "import-upload-filename": "ফাইলনাম:",
        "import-comment": "মন্তব্য:",
-       "importtext": "à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦«à¦¾à¦\87লà¦\9fি à¦\89à§\8eস à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 [[Special:Export|à¦\8fà¦\95à§\8dসপà§\8bরà§\8dà¦\9f à¦\87à¦\89à¦\9fিলিà¦\9fি]] à¦¬à§\8dযবহার à¦\95রà§\87 à¦\8fà¦\95à§\8dসপà§\8bরà§\8dà¦\9f করুন।\nফাইলটি আপনার কম্পিউটারে সংরক্ষণ করুন এবং এখানে আপলোড করুন।",
+       "importtext": "à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦«à¦¾à¦\87লà¦\9fি à¦\89à§\8eস à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 [[Special:Export|রপà§\8dতানি à¦\87à¦\89à¦\9fিলিà¦\9fি]] à¦¬à§\8dযবহার à¦\95রà§\87 à¦°à¦ªà§\8dতানি করুন।\nফাইলটি আপনার কম্পিউটারে সংরক্ষণ করুন এবং এখানে আপলোড করুন।",
        "importstart": "পাতা আমদানি করা হচ্ছে...",
        "import-revision-count": "$1 {{PLURAL:$1|টি সংশোধন|টি সংশোধন}}",
        "importnopages": "আমদানি করার মত কোন পাতা নেই।",
        "importunknownsource": "আমদানি উৎসের ধরন অজানা",
        "importcantopen": "আমদানি ফাইল খোলা যায়নি",
        "importbadinterwiki": "খারাপ আন্তঃউইকি সংযোগ",
-       "importsuccess": "à¦\87মà§\8dপà§\8bরà§\8dà¦\9f সফল!",
+       "importsuccess": "à¦\86মদানি সফল!",
        "importnosources": "কোন আন্তঃউইকি আমদানি উৎস সংজ্ঞায়িত করা হয়নি এবং সরাসরি ইতিহাস আপলোডের ক্ষমতা নিষ্ক্রিয় করা হয়েছে।",
        "importnofile": "কোন আমদানি ফাইল আপলোড করা হয়নি।",
        "importuploaderrorsize": "আমদানি ফাইল আপলোড ব্যর্থ। ফাইলটির আকার অনুমোদিত আপলোডের আকারের চেয়ে বড়।",
        "importuploaderrorpartial": "আমদানি ফাইল আপলোড ব্যর্থ। ফাইলটি কেবল আংশিকভাবে আপলোড করা হয়েছে।",
        "importuploaderrortemp": "আমদানি ফাইলের আপলোড ব্যর্থ। একটি সাময়িক ফোল্ডার হারানো গেছে।",
        "import-parse-failure": "XML পার্স করা যায়নি",
-       "import-noarticle": "à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করার মত কোন পাতা নেই!",
+       "import-noarticle": "à¦\86মদানি করার মত কোন পাতা নেই!",
        "import-nonewrevisions": "কোনো সংস্করণ আমদানী করা হয়নি।",
        "xml-error-string": "$1 যে লাইনে $2, কলামে $3 (বাইট $4): $5",
        "import-upload": "XML ডাটা আপলোড",
        "import-token-mismatch": "সেশন ডাটা হারিয়ে গিয়েছে।\nঅনুগ্রহ করে পুনরায় চেষ্টা করুন।",
        "import-invalid-interwiki": "নির্ধারিত উইকি থেকে আমদানী করা যাবে না।",
        "import-error-edit": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ আপনার এটি সম্পাদনা করার অনুমতি নেই।",
-       "import-error-create": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।",
-       "import-error-interwiki": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f à¦\95রা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿ à¦\95ারণ à¦\8fà¦\87 à¦¨à¦¾à¦®à¦\9fি à¦¬à¦¹à¦¿à¦\83সà¦\82যà§\8bà¦\97র à¦\9cনà§\8dয à¦¨à¦¿à¦°à§\8dধারিত (à¦\87নà§\8dà¦\9fারউইকি)।",
+       "import-error-create": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86মদানি করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।",
+       "import-error-interwiki": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86মদানি à¦\95রা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿ à¦\95ারণ à¦\8fà¦\87 à¦¨à¦¾à¦®à¦\9fি à¦¬à¦¹à¦¿à¦\83সà¦\82যà§\8bà¦\97র à¦\9cনà§\8dয à¦¨à¦¿à¦°à§\8dধারিত (à¦\86নà§\8dতà¦\83উইকি)।",
        "import-error-special": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
-       "import-error-invalid": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করা যায়নি কারণ নামটি সঠিক নয়।",
+       "import-error-invalid": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86মদানি করা যায়নি কারণ নামটি সঠিক নয়।",
        "import-error-unserialize": "$1 পাতার $2 সংস্করণটি সিরিয়ালাইজ করা যাচ্ছে না। এই রিভিশনে $4 হিসাবে $3 কন্টেন্ট মডেলে সিরিয়ালাইজ করা আছে।",
        "import-options-wrong": "ভুল {{PLURAL:$2|অপশন|অপশনসমূহ}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "মূল পাতার ভুল শিরনাম দেয়া হয়েছে।",
        "tags-deactivate-reason": "কারণ:",
        "tags-deactivate-submit": "নিষ্ক্রিয়",
        "tags-edit-title": "ট্যাগ সম্পাদনা করুন",
+       "tags-edit-reason": "কারণ:",
        "comparepages": "পাতার তুলনা",
        "compare-page1": "পাতা ১",
        "compare-page2": "পাতা ২",
        "revdelete-unrestricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও",
        "logentry-block-block": "$1 {{GENDER:$4|$3}} কে $5 মেয়াদের জন্য {{GENDER:$2|বাধাদান}} করেছেন $6",
        "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-এর উপর থেকে বাধা তুলে {{GENDER:$2|নিয়েছেন}}",
+       "logentry-import-interwiki": "$1 অন্য একটি উইকিতে থেকে $3 {{GENDER:$2|আমদানি করেছে}}",
        "logentry-move-move": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-move-move-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-move-move_redir": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
        "headline-anchor-title": "এই অনুচ্ছেদে সংযোগ",
        "special-characters-group-latin": "লাতিন",
        "special-characters-group-latinextended": "সম্প্রসারিত লাতিন",
-       "special-characters-group-ipa": "আইপিএ (IPA)",
+       "special-characters-group-ipa": "আইপিএ",
        "special-characters-group-symbols": "চিহ্নসমূহ",
        "special-characters-group-greek": "গ্রিক",
        "special-characters-group-cyrillic": "সিরিলিক",
index f14b841..c8a0982 100644 (file)
        "rightsnone": "(নেই)",
        "revdelete-summary": "সারাংশ পতানি",
        "searchsuggest-search": "বিসারা",
-       "searchsuggest-containing": "আসেতা..."
+       "searchsuggest-containing": "আসেতা...",
+       "special-characters-group-latin": "লাতিন",
+       "special-characters-group-latinextended": "সালকরিসি লাতিন",
+       "special-characters-group-ipa": "আইপিএ (IPA)",
+       "special-characters-group-symbols": "চিন্নতহানি",
+       "special-characters-group-greek": "গ্রিক",
+       "special-characters-group-cyrillic": "সিরিলিক",
+       "special-characters-group-arabic": "আরবীয়",
+       "special-characters-group-persian": "ফারসি",
+       "special-characters-group-hebrew": "হিব্রু",
+       "special-characters-group-bangla": "বাংলা",
+       "special-characters-group-telugu": "তেলেগু",
+       "special-characters-group-sinhala": "শিংহলী",
+       "special-characters-group-gujarati": "গুজরাতি",
+       "special-characters-group-thai": "থাই",
+       "special-characters-group-lao": "লাও",
+       "special-characters-group-khmer": "খেমার"
 }
index 569dbef..5ff574a 100644 (file)
        "import-interwiki-history": "Eilañ holl stummoù istor ar bajenn-mañ",
        "import-interwiki-templates": "Lakaat e-barzh an holl batromoù",
        "import-interwiki-submit": "Enporzhiañ",
-       "import-interwiki-namespace": "Esaouenn anv ar pal :",
-       "import-interwiki-rootpage": "Pennpajenn kas (war zibab)",
        "import-upload-filename": "Anv ar restr :",
        "import-comment": "Notenn :",
        "importtext": "Ezporzhiit ar restr adal ar wiki orin en ur ober gant an arc'hwel [[Special:Export|ezporzhiañ]].\nEnrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
index cf873c6..32ca11e 100644 (file)
@@ -23,7 +23,7 @@
        "tog-editsectiononrightclick": "Нисде дакъа шозза бакъехьар дахка тӀетаӀийча оцу кортан (JavaScript)",
        "tog-watchcreations": "ТӀетоха ас кхоьллина агӀонаш тергаме могӀам чу",
        "tog-watchdefault": "ТӀетоха ас нисйина агӀонаш тергаме могӀам чу",
-       "tog-watchmoves": "ТӀетоха ас цӀераш хийцина агӀонаш тергаме могӀам чу",
+       "tog-watchmoves": "ТӀетоха ас цӀерш хийцина агӀонаш тергаме могӀам чу",
        "tog-watchdeletion": "ТӀетоха ас дӀаяьхна агӀонаш тергаме могӀанан чу",
        "tog-watchrollback": "Аса нисдар юхудаькхина агӀо сан тергаме могӀанан тӀетуху",
        "tog-minordefault": "Къастам бе нисйиначарн хlумцадеш кегийра долушсанна",
        "qbfind": "Лахар",
        "qbbrowse": "Хьажар",
        "qbedit": "Нисъе",
-       "qbpageoptions": "Агlо нисйар",
+       "qbpageoptions": "АгӀона гӀирс нисбар",
        "qbmyoptions": "Хьан нисдарш",
        "faq": "СиХХ",
        "faqpage": "Project:СиХХ",
        "editinginterface": "<strong>Тергам бе:</strong> Ахьа таеш ю интерфейсан йоза долу агӀо программин латторан.\nЦуна бина хийцам хьокху Википедин кхечу декъашхошна гур бу.",
        "translateinterface": "ХӀокху хааман гоч тӀетоха я хийца дехар до лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "АгӀо хийцам ца байта гӀоралла дина ю {{PLURAL:$1|хӀокху агӀона|хӀокху агӀонийн}} юкъа йогӀуш хилар бахьнехь:\n$2",
-       "namespaceprotected": "ХӀан бакъо яц анна цӀераш чохь тадарш да «$1».",
+       "namespaceprotected": "ХӀан бакъо яц анна цӀерш чохь тадарш да «$1».",
        "customcssprotected": "Хьан бакъо яц хӀара CSS-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
        "customjsprotected": "Хьан бакъо яц хӀара JavaScript-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
        "mycustomcssprotected": "Хьан бакъо яц хӀара CSS агӀо тая.",
        "noname": "Ахьа магийтина йолу декъашхочун цӀе билгал йина яц.",
        "loginsuccesstitle": "Хьан пароль тӀеэца, марша догӀила Википеди чу!",
        "loginsuccess": "Хlинца ахьа болх бó оцу цlарца $1.",
-       "nosuchuser": "Иштта $1 цӀе йолуш декъашхочун дӀаяздар дац.\nДекъашхой цӀераш хаалуш ю дӀаяздарца элпаш.\nНийса юьй хьажа цӀе я [[Special:UserLogin/signup|дӀаяздар кхолла керла]].",
+       "nosuchuser": "Иштта $1 цӀе йолуш декъашхочун дӀаяздар дац.\nДекъашхой цӀерш хаалуш ю дӀаяздарца элпаш.\nНийса юьй хьажа цӀе я [[Special:UserLogin/signup|дӀаяздар кхолла керла]].",
        "nosuchusershort": "Ишта «$1» цӀе йолу декъашхо вац/яц. Хьажа цӀе нийса язйина юй.",
        "nouserspecified": "Ахьа декъашхочун цӀе билгал ян езаш ю.",
        "login-userblocked": "ХӀара декъашхо блоктоьхна ву/ю. Системин чувала/яла магийна дац.",
        "revdelete-no-file": "Иштта файл яц.",
        "revdelete-show-file-confirm": "Бакъалла лаьий хьуна дӀаяьккхина файлан версега хьажа «<nowiki>$1</nowiki>» $2 тӀера, $3?",
        "revdelete-show-file-submit": "ХӀаъ",
-       "revdelete-selected-text": "{{PLURAL:$1|Файлан Ñ\85аÑ\8cÑ\80жина Ð²ÐµÑ\80Ñ\81и|Файлан Ñ\85аьржина версеш}} [[:$2]]:",
+       "revdelete-selected-text": "{{PLURAL:$1|ХаÑ\8cÑ\80жина Ð²ÐµÑ\80Ñ\81и|Ð¥аьржина версеш}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:",
        "logdelete-selected": "Тептар чура {{PLURAL:$1|хаьржина дӀаяздар|хаьржина дӀаяздарш}}:",
        "revdelete-text-text": "ДӀаяьхна версеш агӀонан истори чохь хьалха санна гуш хира ю, амма чулацаман цхьадолу дакъош декъашхошна тӀекхочехь хира дац.",
        "revdelete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "revdelete-offender": "АгӀона версин автор:",
        "suppressionlog": "Хьулдаран тептар",
-       "mergehistory": "Нисдарин истори цхьаьнатохар",
-       "mergehistory-box": "Шин агӀона нисдарин истори цхьаьнатохар:",
+       "mergehistory": "Ð\9dиÑ\81даÑ\80ийн Ð¸Ñ\81Ñ\82оÑ\80и Ñ\86Ñ\85Ñ\8cаÑ\8cнаÑ\82оÑ\85аÑ\80",
+       "mergehistory-box": "Шин Ð°Ð³Ó\80она Ð½Ð¸Ñ\81даÑ\80ийн Ð¸Ñ\81Ñ\82оÑ\80и Ñ\86Ñ\85Ñ\8cаÑ\8cнаÑ\82оÑ\85аÑ\80:",
        "mergehistory-from": "Дуьххьарлера агӀоно",
        "mergehistory-into": "Ӏалашонан агӀо:",
-       "mergehistory-list": "Цхьаьнатухуш долу нисдарин истори",
+       "mergehistory-list": "ЦÑ\85Ñ\8cаÑ\8cнаÑ\82Ñ\83Ñ\85Ñ\83Ñ\88 Ð´Ð¾Ð»Ñ\83 Ð½Ð¸Ñ\81даÑ\80ийн Ð¸Ñ\81Ñ\82оÑ\80и",
        "mergehistory-go": "Гайта цхьаьнатухуш долу нисдарш",
        "mergehistory-submit": "Цхьаьнатоха нисдарш",
        "mergehistory-empty": "Цхьаьнатоха нисдарш цакарий.",
        "difference-multipage": "(АгӀонийн башхалла)",
        "lineno": "МогӀа $1:",
        "compareselectedversions": "Хаьржина версешка хьажар",
-       "showhideselectedversions": "Ð\93айÑ\82а/кÑ\8aайлаÑ\8fÑ\85а Ñ\85аÑ\8cÑ\80жина Ð±Ð°Ñ\88Ñ\85онаш",
+       "showhideselectedversions": "Ð\93айÑ\82а/кÑ\8aайлаÑ\8fÑ\85а Ñ\85аÑ\8cÑ\80жина Ð²ÐµÑ\80Ñ\81еш",
        "editundo": "цаоьшу",
        "diff-empty": "(башхалла яц)",
        "diff-multi-sameuser": "(ца {{PLURAL:$1|гайтина юккъера цхьа верси|гайтина юккъера цхьа версеш}} оьцу декъашхочун)",
        "diff-multi-manyusers": "({{PLURAL:$1|гайтина яц $1 юккъера верси, йина|не показаны $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
        "searchresults": "Карийнарш",
        "searchresults-title": "Лахар «$1»",
-       "titlematches": "АгӀонийн цӀераш цхьаьнанисялар",
+       "titlematches": "АгӀонийн цӀерш цхьаьнанисялар",
        "textmatches": "АгӀонийн йоза цхьаьнанисдалар",
        "notextmatches": "АгӀонаш чура йозанашца цхьатерра йогӀуш яц",
        "prevn": "хьалхарнаш {{PLURAL:$1|$1}}",
        "right-createtalk": "Дийцаре агӀонаш кхоллар",
        "right-createaccount": "декъашхошна керла дӀаяздарш кхоллар",
        "right-minoredit": "«къезиг хийцам» аьлла билгало хӀоттор",
-       "right-move": "АгӀонийн цӀераш хийцар",
-       "right-move-subpages": "АгӀонийн цӀераш хийцар цера бухара агӀонашцан",
-       "right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
-       "right-move-categorypages": "Категорийн агӀонийн цӀераш хийцар",
+       "right-move": "АгӀонийн цӀерш хийцар",
+       "right-move-subpages": "АгӀонийн цӀерш хийцар цера бухара агӀонашцан",
+       "right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀерш хийцар",
+       "right-move-categorypages": "Категорийн агӀонийн цӀерш хийцар",
        "right-movefile": "Файлийн цӀе хийцар",
        "right-suppressredirect": "агӀона цӀе хуьйцуш ширчу цӀарах ма кхолла дӀасахьажорг",
        "right-upload": "Файлаш чуйаьхар",
        "rightslog": "Декъашхочун бакъона тéптар",
        "rightslogtext": "Декъашхойн бакъонаш хийцар долу тептар.",
        "action-read": "хӀара агӀо ешар",
-       "action-edit": "нисйа хlара агlо",
+       "action-edit": "хӀара агӀо таяр",
        "action-createpage": "агӀонаш кхолла",
        "action-createtalk": "дийцаре агӀонаш кхоллар",
        "action-createaccount": "хӀара декъашхочун дӀаяздар кхоллар",
        "action-minoredit": "жима нисдар сана билгало",
        "action-move": "хӀокху агӀон цӀе хийца",
        "action-move-subpages": "хӀокху агӀона цӀе хийцар цуна массо бухара агӀонийн а",
-       "action-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
-       "action-move-categorypages": "категорийн агӀонийн цӀераш хийцар",
+       "action-move-rootuserpages": "декъашхочун ораман агӀонийн цӀерш хийцар",
+       "action-move-categorypages": "категорийн агӀонийн цӀерш хийцар",
        "action-movefile": "хӀокху файлан цӀе хийца",
        "action-upload": "чуяккха хӀара файл",
        "action-reupload": "йолуш йолу файлан тӀехула дӀаязъяр",
        "mostimages": "Массарел дуккха лелайо файлаш",
        "mostinterwikis": "Дуккха юкъарвики хьажоргаш тӀе тоьхна йолу агӀонаш",
        "mostrevisions": "Сих сиха нисйина йолу агӀонаш",
-       "prefixindex": "Хьалха агӀонийн цӀераш хӀотто еза",
-       "prefixindex-namespace": "Хьалха агӀонийн цӀераш хӀотто еза («{{ns:$1}}»)",
+       "prefixindex": "Хьалха агӀонийн цӀерш хӀотто еза",
+       "prefixindex-namespace": "Хьалха агӀонийн цӀерш хӀотто еза («{{ns:$1}}»)",
        "prefixindex-strip": "Хиламийн могӀам чура префикс къайлаяккха",
        "shortpages": "Боца яззамаш",
        "longpages": "Беха яззамаш",
        "protectedpages-reason": "Бахьна",
        "protectedpages-unknown-timestamp": "Хууш дац",
        "protectedpages-unknown-performer": "Хууш доцу декъашхо",
-       "protectedtitles": "ГIаролла дина цIераш",
+       "protectedtitles": "ГӀаролла дина цӀерш",
        "listusers": "Декъашхойн могӀам",
        "listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
        "listusers-creationsort": "Кхоьллина хене хьаьжжина нисъяр",
        "specialloguserlabel": "Декъашхо:",
        "speciallogtitlelabel": "Ӏалашо (цӀе я декъашхо):",
        "log": "Тéптарш",
-       "all-logs-page": "Деригге тléкхочучéхь долу тéптарш",
+       "all-logs-page": "Дерриге тӀекхочучехь долу тептарш",
        "alllogstext": "Массо тéптар могӀам. {{SITENAME}}.\nШуьга харжалур бу хилам оцу тептаре хьаьжжина, декъашхочун цӀе (дӀаяздар диц а цадеш) я цо хьейина агӀонаш (ишта дӀаяздар а диц цадеш).",
        "logempty": "Тептарш чохь хӀокху агӀона дӀаяздарш дац.",
        "log-title-wildcard": "ХӀокху символашца болалуш болу кортанаш карабе",
        "allpagessubmit": "Кхочушдé",
        "allpagesprefix": "Лаха агӀонаш, дӀайолалуш йолу:",
        "allpagesbadtitle": "Цамагош йолу агӀон цӀе. Коьрта могӀан юкъах ю юкъарвики меттанашан юкъе тӀечӀагӀйина йолу хьаьрк йа магийна доцу оцу коьрта моӀанца символаш йа кхин.",
-       "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀераш яц «$1».",
+       "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀерш яц «$1».",
        "allpages-hide-redirects": "Къайлаяха дӀасахьажийнарш",
        "cachedspecial-viewing-cached-ttl": "Хьо хьоьжу агӀона верси кэш чура ю, иза карлаяьккхина хила мега $1 хьалха.",
        "cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.",
        "listgrouprights-namespaceprotection-namespace": "ЦӀерийн ана",
        "listgrouprights-namespaceprotection-restrictedto": "Декъашхочун хийцамаш бан таро хуьлуьйту бакъонаш",
        "trackingcategories": "Хьожуш йолу категореш",
-       "trackingcategories-summary": "ХӀокху агӀонгахь ю хьожуш йолу категореш, MediaWikiс тӀеюзаш ю уьш. {{ns:8}} цӀерийн меттигера системин хаам хийцина цера цӀераш хийца йиш ю.",
+       "trackingcategories-summary": "ХӀокху агӀонгахь ю хьожуш йолу категореш, MediaWikiс тӀеюзаш ю уьш. {{ns:8}} цӀерийн меттигера системин хаам хийцина цера цӀерш хийца йиш ю.",
        "trackingcategories-msg": "Категореш зер",
        "trackingcategories-name": "Хааман цӀе",
        "trackingcategories-desc": "Категорин чутухуш йолчун хила деза хьал",
        "unlockdbsuccesssub": "Хаамийн базан тӀера блокдӀаяьккхина",
        "lockedbyandtime": "($1 $2 $3)",
        "move-page": "$1 — цӀе хийцар",
-       "move-page-legend": "ЦӀe хийца яр",
+       "move-page-legend": "ЦӀе хийцар",
        "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажорг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажорг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хиллачун тӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetext-noredirectfixer": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажорг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажорг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хиллачун тӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetalktext": "ТӀе хӀоьттина йолу дийцаре агӀо ишта цӀе хийцина хира ю, '''цхьа йолу ханчохь, маца:'''\n\n*Йаьсса йоцу дийцаре агӀо йолуш ю оцу цӀарца йа\n*Ахьа къастаман харжам цабиняхь а къастам хӀотточехь.\n\nИшта чу ханчохь, ахьа дехьа яккха йезар ю йа куьйга хӀоттайар, нагахь иза хьашт йалахь.",
        "movecategorypage-warning": "<strong>ДӀахьедар:</strong> Хьо категорин агӀон цӀе хийца гӀерта. Дехар до, терго йе, хӀокху агӀона бен цӀе хуьйцур яц, шира чу категори чура массо агӀонаш керла категори чу йохур <em>яц</em>.",
        "movenologintext": "АгӀона цӀе хийца [[Special:UserLogin|системин чугӀо]].",
        "movenotallowed": "Хьан бакъо яц керла агӀонаш кхолла.",
-       "movenotallowedfile": "Хьан файлийн цӀераш хийца бакъо яц.",
-       "cant-move-user-page": "Хьан бакъо яц декъашхойн коьрта агӀонийн цӀераш хийца.",
+       "movenotallowedfile": "Хьан файлийн цӀерш хийца бакъо яц.",
+       "cant-move-user-page": "Хьан бакъо яц декъашхойн коьрта агӀонийн цӀерш хийца.",
        "cant-move-to-user-page": "Хьан бакъо яц агӀона цӀе декъашхочун агӀон тӀе хийца (бухара агӀон тӀе хийца мега).",
-       "cant-move-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
-       "cant-move-to-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
+       "cant-move-category-page": "Хьан категорийн цӀерш хийца бакъо яц.",
+       "cant-move-to-category-page": "Хьан категорийн цӀерш хийца бакъо яц.",
        "newtitle": "Керла цӀе",
        "move-watch": "Латайé хӀара агӀо тергаме могӀанан юкъахь",
        "movepagebtn": "АгӀон цӀе хийца",
        "movepage-moved-noredirect": "ДӀасхьажорг кхоллар дохина.",
        "articleexists": "ХӀарасанна цӀе йолу агӀо йолуш ю йа ахьа гойтуш йолу цӀе магош яц.\nДехар до, харжа кхин цӀе.",
        "movetalk": "Цуьнца йогӀуш йолу дийцаре агӀон цӀе хийцар",
-       "move-subpages": "ЦӀераш хийца бухара агӀонийн ($1 кхаччалц)",
+       "move-subpages": "ЦӀерш хийца бухара агӀонийн ($1 кхаччалц)",
        "move-talk-subpages": "ЦӀе хийца бухара агӀонийн а агӀонийн дийцаре а ($1  кхаччалц)",
        "movepage-page-exists": "Агӏо $1 йолуш ю цундела и ша юху дӏаязъян йиш яц.",
        "movepage-page-moved": "АгӀона $1 цӀе хийцина → $2.",
-       "movelogpage": "ЦӀераш хийцаран тептар",
+       "movelogpage": "ЦӀерш хийцаран тептар",
        "movelogpagetext": "Лахахьа гойтуш ю цӀе хийцина агӀонаш.",
        "movesubpage": "{{PLURAL:$1|1=Бухара агӀо|Бухара агӀонаш}}",
        "movesubpagetext": "ХӀокху агӀона $1 {{PLURAL:$1|1=бухара агӀо ю|бухара агӀонаш ю}}.",
        "immobile-source-page": "ХӀокху агӏона цӏе хийца йиш яц.",
        "bad-target-model": "Йиш яц хийца $1 оцу $2: цхьаьна ца догӀу моделин хаамаш.",
        "imagenocrossnamespace": "Кхечу цӀерийн меттигийн чура цӀе файлан тилла йиш яц",
-       "nonfile-cannot-move-to-file": "АгӀонийн цӀераш хийца йиш яц",
+       "nonfile-cannot-move-to-file": "АгӀонийн цӀерш файлан тайпа хийца йиш яц",
        "imagetypemismatch": "Файлан керла шоръелла оцунна тайпанца йогӀуш яц",
        "imageinvalidfilename": "Файлан цӀе гӀалате ю",
+       "fix-double-redirects": "Хьалхара цӀе йолу дӀасахьажорг нисъян",
        "move-leave-redirect": "Ӏадйита дӀасахьажораг",
        "protectedpagemovewarning": "'''ДӀахьедар.''' ХӀара агӀо гӀаролла йина ю; цӀе хийца я нисйа а бакъо йолуш куьйгалхой бе бац.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "semiprotectedpagemovewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}} $2 чура",
        "javascripttest": "JavaScript хьажар",
-       "tooltip-pt-userpage": "Декъашхочуьна агlо",
+       "tooltip-pt-userpage": "Декъашхочун агӀо",
        "tooltip-pt-mytalk": "Сан дийцаре агlо",
        "tooltip-pt-preferences": "Хьан гlирс нисбар",
        "tooltip-pt-watchlist": "Ахьа тергам бо агӀонийн хийцаман могӀам",
        "tooltip-ca-nstab-media": "Медиа-файл",
        "tooltip-ca-nstab-special": "ХӀара белхан агӀо ю, хӀара тая луш яц",
        "tooltip-ca-nstab-project": "Кхолламан дакъа",
-       "tooltip-ca-nstab-image": "Ð¥lÑ\83ман Ð°Ð³lо",
+       "tooltip-ca-nstab-image": "Файлан Ð°Ð³Ó\80о",
        "tooltip-ca-nstab-mediawiki": "Хааман агlо MediaWiki",
-       "tooltip-ca-nstab-template": "Куцкепа агlо",
+       "tooltip-ca-nstab-template": "Кепан агӀо",
        "tooltip-ca-nstab-help": "ГӀоьна агӀо",
        "tooltip-ca-nstab-category": "Категорешан агӀо",
        "tooltip-minoredit": "Къастам бé хӀокху хийцамна кӀеззиг болуш санна",
        "tooltip-diff": "Гайта долуш долу йозанах бина болу хийцам.",
        "tooltip-compareselectedversions": "ХӀокху агӀона шина хаьржина версийн башхалле хьажар.",
        "tooltip-watch": "ТӀетоха хӀара агӀо сан тергаме могӀанан юкъа",
-       "tooltip-watchlistedit-normal-submit": "Билгалйина цӀераш дӀаяха",
+       "tooltip-watchlistedit-normal-submit": "Билгалйина цӀерш дӀаяха",
        "tooltip-watchlistedit-raw-submit": "Тергаме могӀам карлабаккха",
        "tooltip-recreate": "АгӀо дӀаяьккхина хиларе ца хьоьжуш меттахӀоттае агӀо",
        "tooltip-upload": "Доладе чуяккхар",
        "descending_abbrev": "йина",
        "table_pager_next": "ТӀаьхьа йогӀу агӀо",
        "table_pager_prev": "Хьалха йоьду агӀо",
-       "table_pager_first": "Ð\94Ñ\83Ñ\8cÑ\85Ñ\85Ñ\8cаÑ\80алеÑ\80а Ð°Ð³lо",
-       "table_pager_last": "Тlаьххьаралера агlо",
+       "table_pager_first": "Ð¥Ñ\8cалÑ\85аÑ\80а Ð°Ð³Ó\80о",
+       "table_pager_last": "ТӀаьххьра агӀо",
        "table_pager_limit": "Гайта $1 хlумнаш агlон тlаьхь",
        "table_pager_limit_label": "АгӀона чохь гойтуш ю оццул:",
        "table_pager_limit_submit": "Кхочушдé",
        "watchlistedit-normal-done": "Хьан тергаме могӀам чура {{PLURAL:$1|дӀадаьккхина|дӀадяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-raw-title": "Тергаме могӀам йоза санна нисбар",
        "watchlistedit-raw-legend": "Тергаме могӀам нисбар",
-       "watchlistedit-raw-explain": "Лахахь гойтуш ю хьа тергаме могӀанийн юкъахь йолу агӀонаш. Хьан йиш ю могӀан хийцам ба, оьцу чура цӀераш тӀетухуш а дӀайохкуш а.\nХийцамаш бина баьлчи тӀетаӀе кнопка «{{int:Watchlistedit-raw-submit}}».\nХьа кхин йиш ю [[Special:EditWatchlist|лело стандартни тадар]].",
+       "watchlistedit-raw-explain": "Лахахь гойтуш ю хьа тергаме могӀанийн юкъахь йолу агӀонаш. Хьан йиш ю могӀан хийцам ба, оьцу чура цӀерш тӀетухуш а дӀайохкуш а.\nХийцамаш бина баьлчи тӀетаӀе кнопка «{{int:Watchlistedit-raw-submit}}».\nХьа кхин йиш ю [[Special:EditWatchlist|лело стандартни тадар]].",
        "watchlistedit-raw-titles": "ДӀаяздарш:",
        "watchlistedit-raw-submit": "МогӀам Ӏалашбар",
        "watchlistedit-raw-done": "Хьан тергаман могӀам Ӏалашбина",
        "specialpages-group-users": "Декъашхой а бакъонаш",
        "specialpages-group-highuse": "Уггаре дукха лелайо агӀонаш",
        "specialpages-group-pages": "АгӀонийн могӀанаш",
-       "specialpages-group-pagetools": "Ð\93Ó\80иÑ\80Ñ\81аÑ\88 Ð¾Ñ\86Ñ\83 Ð°Ð³Ó\80онийн",
+       "specialpages-group-pagetools": "Ð\93Ó\80иÑ\80Ñ\81аÑ\88 Ð°Ð³Ó\80онаÑ\88на",
        "specialpages-group-wiki": "Хаамаш а гӀирсаш а",
        "specialpages-group-redirects": "ДӀасахьажош йолу белхан агӀонаш",
        "specialpages-group-spam": "Спаман дуьхьала гӀирсаш",
-       "blankpage": "Ð\99аÑ\8cÑ\81Ñ\81а Ð°Ð³lо",
+       "blankpage": "Ð\95Ñ\81а Ð°Ð³Ó\80о",
        "tags": "Болш болу хийцаман къастам",
        "tag-filter": "Къастам [[Special:Tags|хьажар]]:",
        "tag-filter-submit": "Литта",
        "tags-deactivate-reason": "Бахьна:",
        "tags-deactivate-submit": "ДӀаяйа",
        "tags-edit-title": "Тегаш таян",
+       "tags-edit-manage-link": "Тегашна урхалладар",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Хаьржина верси|Хаьржина версеш}} [[:$2]]:",
+       "tags-edit-revision-legend": "ТӀетоха я дӀаяха тегаш {{PLURAL:$1|this revision|all $1 revisions}} чура",
+       "tags-edit-logentry-legend": "ТӀетоха я дӀаяха тегаш {{PLURAL:$1|this log entry|all $1 log entries}} чура",
        "tags-edit-existing-tags": "Йолуш йолу билгалонаш:",
        "tags-edit-existing-tags-none": "''ХӀахӀа''",
        "tags-edit-new-tags": "Керла билгалонаш:",
+       "tags-edit-add": "ТӀетоха хӀара билгалонаш:",
+       "tags-edit-remove": "ДӀаяха хӀара билгалонаш:",
+       "tags-edit-remove-all-tags": "(дӀаяха массо билгалонаш)",
+       "tags-edit-chosen-placeholder": "Харжа цхьаъ я массийта тег",
        "tags-edit-reason": "Бахьна:",
        "tags-edit-nooldid-title": "Ӏалашонан верси билгалйина яц",
        "comparepages": "АгӀонаш юстар",
        "logentry-upload-revert": "$1 {{GENDER:$2|чуяьккхина}} $3",
        "log-name-managetags": "Билгалонашан урхалладаран тептар",
        "logentry-managetags-create": "$1 {{GENDER:$2|Кхоьллина}} билгало «$4»",
+       "log-name-tag": "Билгалонийн тептар",
        "rightsnone": "(яц)",
        "revdelete-summary": "хийцамах лаьцна",
        "feedback-adding": "АгӀона хетарг тӀетохар...",
index 3601bec..051c7de 100644 (file)
        "exif-pixelxdimension": "بەرزی وێنە",
        "exif-usercomment": "بۆچوونەکانی بەکارهێنەر",
        "exif-relatedsoundfile": "فایلی ده‌نگی لێکچوو",
+       "exif-datetimedigitized": "ڕێکەوت و کاتی بە دیجیتاڵی کردن",
        "exif-exposuretime-format": "$1 چرکە ($2)",
        "exif-fnumber": "ڕێژەی ئێف",
        "exif-lightsource": "سەرچاوەی ڕووناکی",
index 60aa4c9..f44d81f 100644 (file)
        "no-null-revision": "Nepodařilo se vytvořit novou prázdnou revizi stránky „$1“",
        "badtitle": "Neplatný název",
        "badtitletext": "Požadovaný název stránky byl neplatný, prázdný nebo obsahoval nesprávnou předponu mezijazykového či interwiki odkazu. Možná obsahoval znaky, které v názvu nejsou dovoleny.",
+       "title-invalid-empty": "Požadovaný název stránky je prázdný nebo obsahuje pouze název jmenného prostoru.",
+       "title-invalid-utf8": "Požadovaný název stránky obsahuje neplatnou sekvenci UTF-8.",
+       "title-invalid-interwiki": "Název obsahuje interwiki odkaz",
+       "title-invalid-talk-namespace": "Požadovaný název stránky odkazuje na diskusní stránku, která neexistuje.",
+       "title-invalid-characters": "Požadovaný název stránky obsahuje neplatné znaky: „$1“.",
+       "title-invalid-relative": "Název obsahuje relativní cestu. Relativní názvy stránek (./, ../) jsou neplatné, protože často budou nedostupné, když je zpracuje prohlížeč uživatele.",
+       "title-invalid-magic-tilde": "Požadovaný název stránky obsahuje neplatnou magickou posloupnost vlnovek (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Požadovaný název stránky je příliš dlouhý. V kódování UTF-8 nesmí být delší než $1 bajtů.",
+       "title-invalid-leading-colon": "Požadovaný název stránku na začátku obsahuje neplatnou dvojtečku.",
        "perfcached": "Následující data jsou z cache a nemusí být plně aktuální. Cache může obsahovat maximálně {{PLURAL:$1|jeden výsledek|$1 výsledky|$1 výsledků}}.",
        "perfcachedts": "Následující data jsou z cache, která byla naposledy aktualizována $1. Cache může obsahovat maximálně {{PLURAL:$4|jeden výsledek|$4 výsledky|$4 výsledků}}.",
        "querypage-no-updates": "Aktualizace této stránky je vypnuta. Data nyní nebudou obnovována.",
        "myprivateinfoprotected": "Nemáte oprávnění měnit své soukromé údaje.",
        "mypreferencesprotected": "Nemáte oprávnění změnit svá nastavení.",
        "ns-specialprotected": "Stránky ve jmenném prostoru {{ns:special}} nelze editovat.",
-       "titleprotected": "Stránku s tímto názvem nelze založit, protože název zamknul uživatel [[User:$1|$1]] s odůvodněním <em>$2</em>.",
+       "titleprotected": "Stránku s tímto názvem nelze založit, protože název {{GENDER:$1|zamkl|zamkla|zamkl uživatel}} [[User:$1|$1]].\nUdaným důvodem bylo „<em>$2</em>“.",
        "filereadonlyerror": "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je pouze pro čtení.\n\nSprávce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „$3“.",
        "invalidtitle-knownnamespace": "Neplatný název se jmenným prostorem „$2“ a textem „$3“",
        "invalidtitle-unknownnamespace": "Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“",
index d4c32c8..0611617 100644 (file)
        "import-interwiki-history": "Copïer yr holl fersiynau yn hanes y dudalen hon",
        "import-interwiki-templates": "Cynhwyser pob nodyn",
        "import-interwiki-submit": "Mewnforio",
-       "import-interwiki-namespace": "Parth y cyrchir ato:",
-       "import-interwiki-rootpage": "Tudalen wraidd y cyrchfan (dewisol):",
        "import-upload-filename": "Enw'r ffeil:",
        "import-comment": "Sylw:",
        "importtext": "Allforiwch y ffeil o'r wici gwreiddiol trwy ddefnyddio'r [[Special:Export|nodwedd allforio]]. Rhowch hi ar gadw ar eich cyfrifiadur, ac wedyn ei huwchlwytho fan hyn.",
index e827d01..2b7417e 100644 (file)
        "no-null-revision": "Die neue Nullversion für die Seite „$1“ konnte nicht erstellt werden",
        "badtitle": "Ungültiger Titel",
        "badtitletext": "Der Titel der angeforderten Seite ist ungültig, leer oder ein ungültiger Sprachlink von einem anderen Wiki.",
+       "title-invalid-empty": "Der angeforderte Seitentitel ist leer oder enthält nur den Namen eines Namensraums.",
+       "title-invalid-utf8": "Der angeforderte Seitentitel enthält eine ungültige UTF-8-Sequenz.",
+       "title-invalid-interwiki": "Der Titel enthält einen Interwiki-Link",
+       "title-invalid-talk-namespace": "Der angeforderte Seitentitel bezieht sich auf eine Diskussionsseite, die nicht existieren kann.",
+       "title-invalid-characters": "Der angeforderte Seitentitel enthält ungültige Zeichen: „$1“.",
+       "title-invalid-relative": "Der Titel hat einen relativen Pfad. Relative Seitentitel (./, ../) sind ungültig, da sie durch Webbrowser oft unerreichbar sind.",
+       "title-invalid-magic-tilde": "Der angeforderte Seitentitel enthält eine ungültige Magische-Tilden-Sequenz (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Der angeforderte Seitentitel ist zu lang. Er darf nicht länger als $1 Bytes in UTF-8-Kodierung sein.",
+       "title-invalid-leading-colon": "Der angeforderte Seitentitel enthält am Anfang einen ungültigen Doppelpunkt.",
        "perfcached": "Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell. Maximal {{PLURAL:$1|ein Ergebnis ist|$1 Ergebnisse sind}} im Cache verfügbar.",
        "perfcachedts": "Diese Daten stammen aus dem Cache. Der Zeitpunkt der letzten Aktualisierung: $2, $3 Uhr. Maximal {{PLURAL:$4|ein Ergebnis ist|$4 Ergebnisse sind}} im Cache verfügbar.",
        "querypage-no-updates": "Die Aktualisierungsfunktion dieser Seite ist zurzeit deaktiviert.\nDie Daten werden bis auf Weiteres nicht erneuert.",
        "passwordreset-capture-help": "Wenn du dieses Kästchen ankreuzt, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl dir angezeigt als auch dem Benutzer zugesandt.",
        "passwordreset-email": "E-Mail-Adresse:",
        "passwordreset-emailtitle": "Benutzerkontoinformationen auf {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines\nPassworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}\nmit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nDu solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese\nAnfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger\nändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes\nPasswort benutzen.",
+       "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nDu solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.",
        "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.",
        "passwordreset-emailelement": "Benutzername: $1\nTemporäres Passwort: $2",
        "passwordreset-emailsent": "Eine Passwortzurücksetzungs-E-Mail wurde versandt.",
index 889fbc0..ef3efcf 100644 (file)
        "preview": "Verqayt",
        "showpreview": "Verqayti bımocne",
        "showdiff": "Vurnayışan bımocne",
-       "anoneditwarning": "<strong>İqaz:</strong> Şıma be hesabê xo nêkewtê cı. \nAdresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.",
+       "anoneditwarning": "<strong>İqaz:</strong> Şıma be hesabê xo nêkewtê cı. \nAdresê şımayê IP tarixê vırnayışê na pele de do qeyd bo. Eke şıma <strong>[$1 cıkewê]</strong> ya zi <strong>[$2 hesab vırazê]</strong>, vurnayışê şıma be zewbina kare ra nameyê şıma rê bar beno.",
        "anonpreviewwarning": "\"Şıma be hesabê xo nêkewtê cı. Eke qeyd kerê, adresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.\"",
        "missingsummary": "'''DİQET:''' Şıma jû xulasa nênuşte.\nEke şıma \"{{int:savearticle}}\" reyna bıtıknê, vırnayışê şıma bê xulasa qeyd beno.",
        "missingcommenttext": "Cêr de jû fıkır bınusên, şıma rê zehmet.",
        "currentrev": "Çımraviyarnayışo rocane",
        "currentrev-asof": "Revizyonanê peniyan, tarixê $1",
        "revisionasof": "Verziyonê roca $1ine",
-       "revision-info": "Vıraştena cı karber $2 ra rewizyona $1",
+       "revision-info": "Vurnayışo ke $1 de terefê {{GENDER:$6|$2}}$7 ra biyo",
        "previousrevision": "← Çımraviyarnayışo kıhanêr",
        "nextrevision": "Rewizyono newên →",
        "currentrevisionlink": "Tewr halê rocaniye bımocne",
index 295db5a..feab412 100644 (file)
        "import-interwiki-history": "Importěruj wšykne wersije toś togo boka",
        "import-interwiki-templates": "Wše pśedłogi zapśěgnuś",
        "import-interwiki-submit": "Importěrowaś",
-       "import-interwiki-namespace": "Celowy mjenjowy rum:",
-       "import-interwiki-rootpage": "Celowy kórjenjowy bok (opcionalny):",
        "import-upload-filename": "Datajowe mě:",
        "import-comment": "Komentar:",
        "importtext": "Eksportěruj pšosym dataju ze žredlowego wikija z pomocu [[Special:Export|eksporteje funkcije]]. Składuj ju na swójom licadle a nagraj ju sem.",
index 62ca344..20dc740 100644 (file)
        "history-feed-description": "Ιστορικό αναθεωρήσεων για αυτή τη σελίδα στο wiki",
        "history-feed-item-nocomment": "$1 στις $2",
        "history-feed-empty": "Η ζητούμενη σελίδα δεν υπάρχει.\nΜπορεί να έχει διαγραφεί από το wiki, ή να μετονομάστηκε.\nΔοκιμάστε [[Special:Search|να αναζητήσετε στο wiki]] για σχετικές νέες σελίδες.",
-       "rev-deleted-comment": "(σχόλιο αφαιρέθηκε)",
+       "rev-deleted-comment": "(η σύνοψη επεξεργασίας αφαιρέθηκε)",
        "rev-deleted-user": "(όνομα χρήστη αφαιρέθηκε)",
        "rev-deleted-event": "(οι λεπτομέρειες καταγραφής αφαιρέθηκαν)",
        "rev-deleted-user-contribs": "[όνομα χρήστη ή διεύθυνση ΙΡ έχουν αφαιρεθεί - η επεξεργασία έχει αποκρυφθεί από τις συνεισφορές]",
        "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": "Μια από τις εκδόσεις αυτής της διαφοράς έχει '''κατασταλεί'''.\nMπορείτε να δείτε αυτή την διαφορά. Λεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} αρχείο καταστολών].",
-       "rev-delundel": "εμÏ\86άνιÏ\83η/αÏ\80Ï\8cκÏ\81Ï\85Ï\88η",
+       "rev-delundel": "αλλαγή Î¿Ï\81αÏ\84Ï\8cÏ\84ηÏ\84αÏ\82",
        "rev-showdeleted": "εμφάνιση",
        "revisiondelete": "Διαγραφή/επαναφορά αναθεωρήσεων",
        "revdelete-nooldid-title": "Άκυρη έκδοση-στόχος",
        "revdelete-text-others": "Άλλοι διαχειριστές θα εξακολουθεί να είναι σε θέση να αποκτήσουν πρόσβαση στο κρυφό περιεχόμενο και για να αναιρέσουν τη διαγραφή, εκτός αν τίθενται πρόσθετοι περιορισμοί.",
        "revdelete-confirm": "Παρακαλούμε επιβεβαιώστε ότι σκοπεύετε να το κάνετε αυτό, ότι αντιλαμβάνεσθε τις συνέπειες, και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
        "revdelete-suppress-text": "Η καταστολή μπορεί να χρησιμοποιηθεί <strong> μόνο </strong> για τις ακόλουθες περιπτώσεις:\n* Ενδεχόμενη συκοφαντική δυσφήμιση\n* Ακατάλληλες προσωπικές πληροφορίες\n*: <em>διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. </em>",
-       "revdelete-legend": "Î\98έÏ\83Ï\84ε Ï\80εÏ\81ιοÏ\81ιÏ\83μοÏ\8dÏ\82 ορατότητας",
+       "revdelete-legend": "Î\9fÏ\81ιÏ\83μÏ\8cÏ\82 Ï\80εÏ\81ιοÏ\81ιÏ\83μÏ\8eν ορατότητας",
        "revdelete-hide-text": "Κείμενο αναθεώρησης",
        "revdelete-hide-image": "Κρύψε περιεχόμενο αρχείου",
        "revdelete-hide-name": "Απόκρυψη στόχου και παραμέτρων",
        "revdelete-suppress": "Απόκρυψε δεδομένα από διαχειριστές όπως και από άλλους",
        "revdelete-unsuppress": "Αφαίρεσε περιορισμούς στις αποκατεστημένες αναθεωρήσεις",
        "revdelete-log": "Αιτία:",
-       "revdelete-submit": "Î\95Ï\86άÏ\81μοÏ\83ε {{PLURAL:$1|στην επιλεγμένη αναθεώρηση|στις επιλεγμένες αναθεωρήσεις}}",
+       "revdelete-submit": "Î\95Ï\86αÏ\81μογή {{PLURAL:$1|στην επιλεγμένη αναθεώρηση|στις επιλεγμένες αναθεωρήσεις}}",
        "revdelete-success": "'''Η ορατότητα έκδοσης ενημερώθηκε επιτυχώς.'''",
        "revdelete-failure": "'''Η ορατότητα της επεξεργασίας δεν ήταν δυνατόν να ενημερωθεί:''' $1",
        "logdelete-success": "'''Η ορατότητα γεγονότος τέθηκε επιτυχώς.'''",
        "difference-title-multipage": "Διαφορά μεταξύ των σελίδων \"$1\" και \"$2\"",
        "difference-multipage": "(Διαφορές μεταξύ των σελίδων)",
        "lineno": "Γραμμή $1:",
-       "compareselectedversions": "ΣÏ\8dγκÏ\81ιÏ\83η Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν ÎµÎºÎ´Ï\8cσεων",
-       "showhideselectedversions": "Î\95μÏ\86άνιÏ\83η/αÏ\80Ï\8cκÏ\81Ï\85Ï\88η Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν ÎµÎºÎ´Î¿Ï\87Ï\8eν",
+       "compareselectedversions": "ΣÏ\8dγκÏ\81ιÏ\83η Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήσεων",
+       "showhideselectedversions": "Î\91λλαγή Î¿Ï\81αÏ\84Ï\8cÏ\84ηÏ\84αÏ\82 Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν",
        "editundo": "αναίρεση",
        "diff-empty": "(Καμία διαφορά)",
        "diff-multi-sameuser": "({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από τον ίδιο χρήστη δεν εμφανίζεται)",
        "group": "Ομάδα:",
        "group-user": "Χρήστες",
        "group-autoconfirmed": "Αυτοεπιβεβαιωμένοι χρήστες",
-       "group-bot": "Bots",
+       "group-bot": "Ρομπότ",
        "group-sysop": "Διαχειριστές",
        "group-bureaucrat": "Γραφειοκράτες",
        "group-suppress": "Παρατηρητές",
        "group-all": "(όλοι)",
-       "group-user-member": "χρήστης",
-       "group-autoconfirmed-member": "αυτοεπιβεβαιωμένος χρήστης",
+       "group-user-member": "{{GENDER:$1|χρήστης|χρήστρια}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|αυτοεπιβεβαιωμένος χρήστης|αυτοεπιβεβαιωμένη χρήστρια}}",
        "group-bot-member": "ρομπότ",
-       "group-sysop-member": "διαχειριστές",
-       "group-bureaucrat-member": "γραφειοκράτης",
-       "group-suppress-member": "{{GENDER:$1|επιτηρητής}}",
+       "group-sysop-member": "{{GENDER:$1|διαχειριστής|διαχειρίστρια}}",
+       "group-bureaucrat-member": "{{GENDER:$1|γραφειοκράτης|γραφειοκράτις}}",
+       "group-suppress-member": "{{GENDER:$1|επιτηρητής|επιτηρήτρια}}",
        "grouppage-user": "{{ns:project}}:Χρήστες",
        "grouppage-autoconfirmed": "{{ns:project}}:Αυτόματα επιβεβαιωμένοι χρήστες",
        "grouppage-bot": "{{ns:project}}:Bots",
        "right-delete": "Διαγραφή σελίδων",
        "right-bigdelete": "Διαγραφή σελίδων με εκτεταμένο ιστορικό",
        "right-deletelogentry": "Διαγραφή και επαναφορά διαγραφής συγκεκριμένων καταχωρήσεων στη λίστα καταγραφών",
-       "right-deleterevision": "Î\94ιαγÏ\81αÏ\86ή ÎºÎ±Î¹ ÎµÏ\80αναÏ\86οÏ\81ά Ï\83Ï\85γκεκÏ\81ιμένÏ\89ν ÎµÎºÎ´Ï\8cσεων σελίδων",
+       "right-deleterevision": "Î\94ιαγÏ\81αÏ\86ή ÎºÎ±Î¹ ÎµÏ\80αναÏ\86οÏ\81ά Ï\83Ï\85γκεκÏ\81ιμένÏ\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήσεων σελίδων",
        "right-deletedhistory": "Προβολή διαγραμμένων εκδόσεων του ιστορικού, χωρίς το σχετικό κείμενο",
        "right-deletedtext": "Εμφάνιση διεγραμμένου κειμένου και αλλαγών ανάμεσα στις διεγραμμένες εκδόσεις",
        "right-browsearchive": "Αναζήτηση στις διαγραμμένες σελίδες",
        "right-undelete": "Ανάκληση διαγραφής μίας σελίδας",
-       "right-suppressrevision": "Προβολή, απόκρυψη και επανεμφάνιση συγκεκριμένων αναθεωρήσεων σελίδων από κάθε χρήστη",
+       "right-suppressrevision": "Προβολή, απόκρυψη και επανεμφάνιση από οποιονδήποτε χρήστη συγκεκριμένων αναθεωρήσεων σελίδων",
        "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμένων από κάθε χρήστη",
        "right-suppressionlog": "Προβολή ιδιωτικών καταγραφών",
        "right-block": "Φραγή άλλων χρηστών από την επεξεργασία",
        "alllogstext": "Εποπτική εμφάνιση όλων των ενεργειών φόρτωσης αρχείων, διαγραφής, προστασίας, φραγής και όλων των καταγραφών των διαχειριστών στο αρχείο γεγονότων του {{SITENAME}}. Μπορείτε να περιορίσετε τα αποτελέσματα που εμφανίζονται επιλέγοντας συγκεκριμένο είδος γεγονότων, όνομα χρήστη ή τη σελίδα που επηρεάστηκε.",
        "logempty": "Δεν υπάρχουν στοιχεία που να ταιριάζουν στο αρχείο καταγραφών.",
        "log-title-wildcard": "Αναζήτησε τίτλους που αρχίζουν με αυτό το κείμενο",
-       "showhideselectedlogentries": "Î\95μÏ\86άνιÏ\83η/αÏ\80Ï\8cκÏ\81Ï\85Ï\88η ÎµÏ\80ιλεγμένÏ\89ν ÎºÎ±Ï\84αÏ\87Ï\89Ï\81ήÏ\83εÏ\89ν Ï\83Ï\84η Î»Î¯Ï\83Ï\84α ÎºÎ±Ï\84αγÏ\81αÏ\86Ï\8eν",
+       "showhideselectedlogentries": "Î\91λλαγή Î¿Ï\81αÏ\84Ï\8cÏ\84ηÏ\84αÏ\82 Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν ÎºÎ±Ï\84αÏ\87Ï\89Ï\81ήÏ\83εÏ\89ν Ï\83Ï\84ο Î±Ï\81Ï\87είο ÎºÎ±Ï\84αγÏ\81αÏ\86ήÏ\82 Ï\83Ï\85μβάνÏ\84Ï\89ν",
        "allpages": "Όλες οι σελίδες",
        "nextpage": "Επόμενη σελίδα ($1)",
        "prevpage": "Προηγούμενη σελίδα ($1)",
        "import-interwiki-history": "Αντιγραφή όλων των εκδόσεων του ιστορικού για αυτή τη σελίδα",
        "import-interwiki-templates": "Συμπερίληψη όλων των προτύπων",
        "import-interwiki-submit": "Εισαγωγή",
-       "import-interwiki-namespace": "Προορισμός στον ονοματοχώρο:",
-       "import-interwiki-rootpage": "Ριζική σελίδα προορισμού (προαιρετικό):",
        "import-upload-filename": "Όνομα αρχείου:",
        "import-comment": "Σχόλιο:",
        "importtext": "Παρακαλούμε εξαγάγετε το αρχείο από το πηγαίο wiki (χρησιμοποιώντας το [[Special:Export|εργαλείο εξαγωγής]]). \nΑποθηκεύστε το στον υπολογιστή σας και ανεβάστε το εδώ.",
        "sqlite-no-fts": "$1 χωρίς την υποστήριξη αναζήτησης πλήρους κειμένου",
        "logentry-delete-delete": "{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3",
        "logentry-delete-restore": "Ο/Η $1 αποκατέστησε τη σελίδα $3",
-       "logentry-delete-event": " $1 {{GENDER:$1|άλλαξε}} την ορατότητα σε {{PLURAL:$5|ένα γεγονός καταγραφής|$5 γεγονότα καταγραφής}} στο $3: $4",
-       "logentry-delete-revision": "$1 {{GENDER:$2|άλλαξε}} την ορατότητα για {{PLURAL:$5|μία έκδοση|$5 εκδόσεις}} στη σελίδα $3: $4",
+       "logentry-delete-event": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|ενός καταγραφόμενου συμβάντος|$5 καταγραφόμενων συμβάντων}} στο $3: $4",
+       "logentry-delete-revision": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|μίας αναθεώρησης|$5 αναθεωρήσεων}} στη σελίδα $3: $4",
        "logentry-delete-event-legacy": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των καταγραφόμενων συμβάντων στη σελίδα $3",
-       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|άλλαξε}} την  ορατότητα των αναθεωρήσεων στη σελίδα $3",
+       "logentry-delete-revision-legacy": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των αναθεωρήσεων στη σελίδα $3",
        "logentry-suppress-delete": "$1 {{GENDER:$2|διέγραψε}} τη σελίδα $3",
        "logentry-suppress-event": "{{Gender:$2|Ο|Η}} $1 άλλαξε μυστικά την ορατότητα {{PLURAL:$5|ενός καταγραφόμενου συμβάντος|$5 καταγραφόμενων συμβάντων}} στη σελίδα $3: $4",
        "logentry-suppress-revision": "{{Gender:$2|Ο|Η}} $1 άλλαξε μυστικά την ορατότητα {{PLURAL:$5|μίας αναθεώρησης|$5 αναθεωρήσεων}} στη σελίδα $3: $4",
        "revdelete-content-unhid": "το περιεχόμενο έπαψε να είναι κρυφό",
        "revdelete-summary-unhid": "η σύνοψη επεξεργασίας έπαψε να είναι κρυφή",
        "revdelete-uname-unhid": "το όνομα χρήστη έπαψε να είναι κρυφό",
-       "revdelete-restricted": "εÏ\86άρμοσε περιορισμούς στους sysops",
+       "revdelete-restricted": "εÏ\86ήρμοσε περιορισμούς στους sysops",
        "revdelete-unrestricted": "αφαίρεσε περιορισμούς στους sysops",
        "logentry-move-move": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4",
        "logentry-move-move-noredirect": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 χωρίς να αφήσει ανακατεύθυνση",
index 8afed1a..2685701 100644 (file)
        "no-null-revision": "Could not create new null revision for page \"$1\"",
        "badtitle": "Bad title",
        "badtitletext": "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.\nIt may contain one or more characters that cannot be used in titles.",
+       "title-invalid-empty": "The requested page title is empty or contains only the name of a namespace.",
+       "title-invalid-utf8": "The requested page title contains an invalid UTF-8 sequence.",
+       "title-invalid-interwiki": "Title contains an interwiki link",
+       "title-invalid-talk-namespace": "The requested page title refers to a talk page that can not exist.",
+       "title-invalid-characters": "The requested page title contains invalid characters: \"$1\".",
+       "title-invalid-relative": "Title has relative path. Relative page titles (./, ../) are invalid, because they will often be unreachable when handled by user's browser.",
+       "title-invalid-magic-tilde": "The requested page title contains invalid magic tilde sequence (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "The requested page title is too long. It must be no longer than $1 bytes in UTF-8 encoding.",
+       "title-invalid-leading-colon": "The requested page title contains an invalid colon at the beginning.",
        "perfcached": "The following data is cached and may not be up to date. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "The following data is cached, and was last updated $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Updates for this page are currently disabled.\nData here will not presently be refreshed.",
index d010560..900906b 100644 (file)
        "movepagetext-noredirectfixer": "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.\nEl título anterior se convertirá en una redirección al nuevo título.\nAsegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].\nTú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que deberían hacerlo.\n\nRecuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o una redirección sin historial.\nEsto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente.\n\n'''¡Aviso!'''\nEste puede ser un cambio drástico e inesperado para una página popular;\npor favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
        "movepagetalktext": "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''\n*Estés trasladando la página entre espacios de nombres diferentes,\n*Una página de discusión no vacía ya exista con el nombre nuevo, o\n*No marques el recuadro «Renombrar la página de discusión asociada».\n\nEn estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
        "movearticle": "Renombrar página",
-       "moveuserpage-warning": "'''Aviso:''' estás a punto de trasladar una página de usuario. Ten en cuenta que solo será trasladada la página; el usuario '''no''' será renombrado.",
+       "moveuserpage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de usuario. Ten en cuenta que solo se trasladará la página; el usuario <em>no</em> se renombrará.",
        "movecategorypage-warning": "<strong>Advertencia:</strong> Estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página y las páginas en la antigua categoría <em>no</em> serán recategorizadas en la nueva.",
        "movenologintext": "Es necesario ser usuario registrado y [[Special:UserLogin|haber iniciado sesión]] para renombrar una página.",
        "movenotallowed": "No tienes permiso para trasladar páginas.",
index 935795c..782feaa 100644 (file)
        "no-null-revision": "Lehekülje \"$1\" nullredaktsiooni ei õnnestunud teha.",
        "badtitle": "Vigane pealkiri",
        "badtitletext": "Soovitud lehekülje pealkiri oli vigane, tühi või teisest keeleversioonist või vikist valesti lingitud.\nSee võib sisaldada ühte või enamat märki, mida ei saa pealkirjades kasutada.",
+       "title-invalid-empty": "Päritud lehekülje pealkiri on tühi või sisaldab ainult nimeruumi nimi.",
+       "title-invalid-utf8": "Päritud lehekülje pealkiri sisaldab vigast UTF-8 jada.",
+       "title-invalid-interwiki": "Pealkiri sisaldab intervikilinki.",
+       "title-invalid-talk-namespace": "Päritud lehekülje pealkiri viitab aruteluleheküljele, mida ei saa olemas olla.",
+       "title-invalid-characters": "Päritud lehekülje pealkiri sisaldab vigaseid märke: \"$1\".",
+       "title-invalid-relative": "Pealkirjas on suhteline tee. Suhtelised lehekülje pealkirjad (./, ../) on vigased, sest nad on kasutaja brauseri jaoks sageli kättesaamatud.",
+       "title-invalid-magic-tilde": "Päritud lehekülje pealkiri sisaldab vigast võlutildede jada (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Päritud lehekülje pealkiri on liiga pikk. See ei tohi olla UTF-8 kodeeringus pikem kui $1 baiti.",
+       "title-invalid-leading-colon": "Päritud lehekülje pealkiri sisaldab alguses vigast koolonit.",
        "perfcached": "Järgmised andmed on puhverdatud ja ei pruugi olla kõige värskemad. Puhvris on saadaval kuni {{PLURAL:$1|üks tulemus|$1 tulemust}}.",
        "perfcachedts": "Järgmised andmed on vahemälus. Viimane uuendamisaeg: $2, kell $3. Puhvris on saadaval kuni {{PLURAL:$4|üks tulemus|$4 tulemust}}.",
        "querypage-no-updates": "Lehekülje uuendamine ei ole hetkel lubatud ning andmeid ei värskendata.",
index 427c023..c498ae3 100644 (file)
        "import-interwiki-history": "Copial tolas velsionis estóricas d'esta páhina",
        "import-interwiki-templates": "Encruil tolos cuairus",
        "import-interwiki-submit": "Emporteal",
-       "import-interwiki-namespace": "Movel páginas al espáciu nombris:",
        "import-upload-filename": "Nombri del archivu:",
        "import-comment": "Comentáriu:",
        "importstart": "Emporteandu páhinas...",
index d011fe2..23c8f8f 100644 (file)
        "february-gen": "فوریهٔ",
        "march-gen": "مارس",
        "april-gen": "آوریل",
-       "may-gen": "مه",
+       "may-gen": "مهٔ",
        "june-gen": "ژوئن",
        "july-gen": "ژوئیهٔ",
        "august-gen": "اوت",
index 0d2c075..16b3f98 100644 (file)
        "logentry-managetags-activate": "$1 {{GENDER:$2|aktivoi}} merkkauksen \"$4\" käyttäjien ja bottien käytettäväksi",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|otti pois käytöstä}} merkkauksen \"$4\" käyttäjiltä ja boteilta",
        "log-name-tag": "Merkkausloki",
+       "log-description-tag": "Tällä sivulla näytetään käyttäjien lisäämät tai poistamat [[Special:Tags|merkkaukset]] yksittäisissä sivuversioissa tai lokimerkinnöissä. Lokiin eivät kirjaudu merkkaukset silloin, kun ne tulevat muokkaamisen, poistamisen tai muun vastaavan toimenpiteen yhteydessä.",
        "logentry-tag-update-add-revision": "$1 {{GENDER:$2|lisäsi}} {{PLURAL:$7|merkkauksen|merkkaukset}} $6 kohdeversioon $4 sivulla $3",
        "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|lisäsi}} {{PLURAL:$7|merkkauksen|merkkaukset}} $6 lokimerkintään $5 sivulla $3",
        "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|poisti}} {{PLURAL:$9|merkkauksen|merkkaukset}} $8 kohdeversiosta $4 sivulla $3",
index e4f8d1d..f26d0ad 100644 (file)
        "expand_templates_output": "Risultât",
        "expand_templates_ok": "Va ben",
        "expand_templates_remove_comments": "Gjave i coments",
-       "expand_templates_preview": "Anteprime"
+       "expand_templates_preview": "Anteprime",
+       "special-characters-group-symbols": "Simbols"
 }
index b50d4bc..f498545 100644 (file)
        "import-upload": "Uaslódaigh sonraí XML",
        "import-token-mismatch": "Sonraí seisiún a bheith caillte. Déan iarracht arís.",
        "importlogpage": "Log iompórtáil",
-       "import-logentry-interwiki": "traisvicithe $1",
        "tooltip-pt-userpage": "Do leathanach úsáideora",
        "tooltip-pt-anonuserpage": "Leathanach úsáideora don IP ina dhéanann tú do chuid athruithe",
        "tooltip-pt-mytalk": "Do leathanach phlé",
index 80eff46..ba298f5 100644 (file)
        "import-interwiki-text": "拣正只wiki同页面标题去导入。修订日期同编辑人会一齐存到。全部𠮶跨 wiki 导入操作会到[[Special:Log/import|导入日志]]记到。",
        "import-interwiki-history": "复制个页𠮶全部历史",
        "import-interwiki-submit": "导入",
-       "import-interwiki-namespace": "拿页面移到空间名:",
        "import-comment": "说明:",
        "importtext": "请用 Special:Export 从源 wiki 导出档案,再存到倷𠮶磁盘然后上传到个首。",
        "importstart": "导入页面中...",
        "xml-error-string": "$1 位到 $2 行,$3 列 ($4字节):$5",
        "importlogpage": "导入日志",
        "importlogpagetext": "管理员由别𠮶 wiki 导入页面同到佢俚𠮶编辑历史记录。",
-       "import-logentry-upload": "通过档案上传导入𠮶[[$1]]",
        "import-logentry-upload-detail": "$1只修改",
-       "import-logentry-interwiki": "跨wiki$1",
        "import-logentry-interwiki-detail": "$2𠮶$1只修改",
        "tooltip-pt-userpage": "偶𠮶用户页",
        "tooltip-pt-anonuserpage": "倷编辑本站用𠮶IP对应𠮶用户页",
index 2837d29..1634938 100644 (file)
        "import-interwiki-text": "揀正隻wiki同頁面標題去導入。修訂日期同編輯人會一齊存到。全部嗰跨 wiki 導入操作會到[[Special:Log/import|導入日誌]]記到。",
        "import-interwiki-history": "複製箇頁嗰全部歷史",
        "import-interwiki-submit": "導入",
-       "import-interwiki-namespace": "拿頁面移到空間名:",
        "import-comment": "說明:",
        "importtext": "請用 Special:Export 從源 wiki 導出檔案,再存到倷嗰磁盤然後上傳到箇首。",
        "importstart": "導入頁面中...",
        "xml-error-string": "$1 位到 $2 行,$3 列 ($4字節):$5",
        "importlogpage": "導入日誌",
        "importlogpagetext": "管理員由別嗰 wiki 導入頁面同到佢俚嗰編輯歷史記錄。",
-       "import-logentry-upload": "通過檔案上傳導入嗰[[$1]]",
        "import-logentry-upload-detail": "$1隻修改",
-       "import-logentry-interwiki": "跨wiki$1",
        "import-logentry-interwiki-detail": "$2嗰$1隻修改",
        "tooltip-pt-userpage": "汝嗰用戶頁",
        "tooltip-pt-anonuserpage": "倷編輯本站用嗰IP對應嗰用戶頁",
index b9e018d..5f1fbf4 100644 (file)
        "no-null-revision": "Non se puido crear a nova revisión nula para a páxina \"$1\"",
        "badtitle": "Título incorrecto",
        "badtitletext": "O título da páxina pedida non era válido, estaba baleiro ou proviña dunha ligazón interlingüística ou interwiki incorrecta.\nPoida que conteña un ou máis caracteres dos que non se poden empregar nos títulos.",
+       "title-invalid-empty": "O título de páxina solicitado está baleiro ou só contén o nome do espazo de nomes.",
+       "title-invalid-utf8": "O título de páxina solicitado contén unha secuencia UTF-8 inválida.",
+       "title-invalid-interwiki": "O título contén unha ligazón interwiki",
+       "title-invalid-talk-namespace": "O título de páxina solicitado refírese a unha páxina de conversa que pode non existir.",
+       "title-invalid-characters": "O título de páxina solicitado contén caracteres inválidos: \"$1\".",
+       "title-invalid-relative": "O título ten unha ruta relativa. Os títulos de páxina relativos (./, ../) son inválidos, porque non van ser accesibles cando se consulten co navegador do usuario.",
+       "title-invalid-magic-tilde": "O título de páxina solicitado contén unha secuencia con tiles inválida (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "O título de páxina solicitado é moi longo. Non pode ser maior de $1 bytes en codificación UTF-8.",
+       "title-invalid-leading-colon": "O título de páxina solicitado contén un punto e coma inválido ó comezo.",
        "perfcached": "Esta información é da memoria caché e pode ser que non estea completamente actualizada. Hai un máximo de {{PLURAL:$1|$1 resultado dispoñible|$1 resultados dispoñibles}} na caché.",
        "perfcachedts": "Esta información é da memoria caché. Última actualización: $2 ás $3. Hai un máximo de {{PLURAL:$4|$4 resultado dispoñible|$4 resultados dispoñibles}} na caché.",
        "querypage-no-updates": "Neste momento están desactivadas as actualizacións nesta páxina. O seu contido non se modificará.",
index 4b99ef0..431432b 100644 (file)
        "import-interwiki-history": "Ἀντιγράφειν ἁπάσας τὰς ἐκδόσεις τοῦ ἱστορικοῦ τῆσδε τῆς δέλτου",
        "import-interwiki-templates": "Συμπερίληψις ἁπάντων τῶν προτύπων",
        "import-interwiki-submit": "Εἰσάγειν",
-       "import-interwiki-namespace": "Ὀνοματεῖον προορισμός:",
        "import-upload-filename": "Ὄνομα ἀρχείου:",
        "import-comment": "Σχόλιον:",
        "importstart": "Εἰσάγειν δέλτους...",
        "import-invalid-interwiki": "Μὴ δυνατὴ ἡ εἰσαγωγὴ ἐκ τοῦ καθωρισμένου βίκι.",
        "importlogpage": "Εἰσάγειν κατάλογον",
        "importlogpagetext": "Διαχειριστικαὶ εἰσαγωγαὶ δέλτων ἐχουσῶν ἱστορικὸν μεταγραφῶν προερχόμενον ἐξ ἑτέρων βίκι.",
-       "import-logentry-upload": "εἰσήχθη τὸ [[$1]]",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ἀναθεώρησις|ἀναθεωρήσεις}}",
-       "import-logentry-interwiki": "ὑπερδιαβικιπεποιημένη $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ἀναθεώρησις|ἀναθεωρήσεις}} ἐκ τοῦ $2",
        "tooltip-pt-userpage": "Ἡ δέλτος χρωμένου σου",
        "tooltip-pt-anonuserpage": "Ἡ δέλτος χρωμένου περὶ τοῦ ip ὅνπερ μεταγράφεις ὡς",
        "expandtemplates": "Ἐπεκτείνειν τὰ πρότυπα",
        "expand_templates_output": "Ἀποτέλεσμα",
        "expand_templates_ok": "εἶεν",
-       "expand_templates_preview": "Προθεώρησις"
+       "expand_templates_preview": "Προθεώρησις",
+       "special-characters-group-latin": "Λατινικόν",
+       "special-characters-group-latinextended": "Λατινικὸν προεκτεταμένον",
+       "special-characters-group-ipa": "ΔΦΑ",
+       "special-characters-group-symbols": "Σύμβολα",
+       "special-characters-group-greek": "Ἑλληνικόν",
+       "special-characters-group-cyrillic": "Κυριλλικόν",
+       "special-characters-group-arabic": "Ἀραβικόν",
+       "special-characters-group-hebrew": "Ἑβραϊκόν",
+       "special-characters-group-telugu": "Τελουγούϊον"
 }
index 3ac5b34..d5f0037 100644 (file)
        "import-interwiki-history": "Alli früeneri Versione vo dere Syte importiere",
        "import-interwiki-templates": "Mit allene Vorlage",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Ziilnamensruum:",
-       "import-interwiki-rootpage": "Ziilstammsyte (optional):",
        "import-upload-filename": "Dateiname:",
        "import-comment": "Grund:",
        "importtext": "Datei iber d Spezialsyte [[Special:Export|Exportfunktion]] us em Quellwiki exportiere.\nDie uf em lokale Rächner spychere un derno do uffelade.",
index fcfe6e9..f66f21f 100644 (file)
        "viewsourcetext": "આપ આ પાનાનો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:",
        "viewyourtext": "આપ આ પાનાનાં '''આપનાં સંપાદનો'''નો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:",
        "protectedinterface": "આ પાનું સોફ્ટવેર માટે ઇન્ટરફેઇસ ટેક્સટ આપે છે, અને તેને દુરુપયોગ રોકવા માટે સ્થગિત કર્યું છે.\nબધાંજ વિકિ માટે ભાષાંતર ઉમેરવા કે બદલવા માટે, કૃપા કરી [//translatewiki.net/ translatewiki.net], મિડિયાવિકિ સ્થાનિયકરણ પ્રકલ્પ, વાપરો.",
-       "editinginterface": "'''ચેતવણી:''' તમે જે પાનામાં ફેરફાર કરી રહ્યા છો તે પાનું સોફ્ટવેર માટે ઇન્ટરફેસ ટેક્સટ પુરી પાડે છે.\nઅહીંનો બદલાવ આ વિકિ પર ઉપસ્થિત અન્ય સભ્યોના ઇન્ટરફેસનાં દેખાવ ઉપર અસરકર્તા બનશે.\nબધાંજ વિકિ માટે ભાષાંતર ઉમેરવા કે બદલવા માટે કૃપા કરી [//translatewiki.net/ translatewiki.net], મિડિયાવિકી સ્થાનિયકરણ પ્રકલ્પ, વાપરો.",
+       "editinginterface": "<strong>ચેતવણી:</strong> તમે જે પાનામાં ફેરફાર કરી રહ્યા છો તે પાનું સોફ્ટવેર માટે ઇન્ટરફેસ ટેક્સટ પુરી પાડે છે.\nઅહીંનો બદલાવ આ વિકિ પર ઉપસ્થિત અન્ય સભ્યોના ઇન્ટરફેસનાં દેખાવ ઉપર અસરકર્તા બનશે.",
        "cascadeprotected": "આ પાના પર ફેરફાર પ્રતિબંધિત છે કેમ કે આ પાનું  {{PLURAL:$1|એવું પાનું|એવા પાના}} માં શામિલ છે જેમાં અનુવર્તી (પગથિયામય)સંરક્ષણ સક્રીય છે :\n$2",
        "namespaceprotected": "તમને '''$1''' નામાવકાશનાં પાનાંમાં ફેરફાર કરવાની પરવાનગી નથી.",
        "customcssprotected": "તમને આ પાનું બદલવાની પરવાનગી નથી કારણકે આ પાનામાં બીજા સભ્યની પસંદગીના સેટીંગ્સ છે.",
        "invalidtitle-knownnamespace": "નામસ્થળ \"$2\" અને લખાણ \"$3\" સાથે અમાન્ય મથાળું",
        "invalidtitle-unknownnamespace": "અજ્ઞાત નામસ્થળ ક્રમાંક $1 અને નામ \"$2\" વાળું અમાન્ય મથાળું",
        "exception-nologin": "પ્રવેશ કરેલ નથી",
-       "exception-nologin-text": "આ પાનું કે પ્રક્રિયા પ્રાપ્તી માટે કૃપયા [[Special:Userlogin|લોગઈન]] કરો.",
+       "exception-nologin-text": "આ પાનું કે પ્રક્રિયા પ્રાપ્તી માટે કૃપયા લોગઈન કરો.",
        "exception-nologin-text-manual": "આ પાનું કે પ્રક્રિયા મેળવવા માટે કૃપયા $1.",
        "virus-badscanner": "ખરાબ રૂપરેખા: અજાણ્યું વાઇરસ સ્કેનર: ''$1''",
        "virus-scanfailed": "સ્કેન અસફળ (code $1)",
        "history-feed-empty": "આ પાનું અસ્તિત્વમાં નથી.\nશક્ય છે કે આ પાનું વિકિમાંથી દૂર કરવામાં આવ્યું હોય કે તેનું નામ બદલવામાં આવ્યું હોય.\nસંલગ્ન નવા પાનાઓ માટે [[Special:Search|વિકિમાં શોધી જુઓ]].",
        "rev-deleted-comment": "(ફેરફારોનો સારાંશ હટાવ્યો)",
        "rev-deleted-user": "(સભ્યનામ હટાવાયું)",
-       "rev-deleted-event": "(લà«\8bàª\97 àª\95à«\8dરિયા હટાવાઈ)",
+       "rev-deleted-event": "(લà«\8bàª\97 àªµàª¿àª\97તà«\8b હટાવાઈ)",
        "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-showdeleted": "બતાવો",
        "revisiondelete": "પુનરાવર્તન રદ કરો/પુનર્જીવીત કરો",
        "revdelete-nooldid-title": "અવૈધ લક્ષ્ય ફેરફાર",
-       "revdelete-nooldid-text": "આ ક્રિયા જેના પર  કરવાની છે તે લક્ષ્ય ફેરફાર તમે જણાવ્યો નથી અથવા એવો કોઇ ફેરફાર અસ્તિત્વમાં નથી અથવા તમે હાલનો ફેરફાર સંતાડવાનો પ્રયત્ન કરી રહ્યાં છો.",
+       "revdelete-nooldid-text": "આ ક્રિયા જેના પર કરવાની છે તે લક્ષ્ય ફેરફાર તમે જણાવ્યો નથી. અથવા એવો કોઇ ફેરફાર અસ્તિત્વમાં નથી. અથવા તમે હાલનો ફેરફાર સંતાડવાનો પ્રયત્ન કરી રહ્યાં છો.",
        "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-confirm": "કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું  [[{{MediaWiki:Policy-url}}|નીતિ]] અંતર્ગત કરી રહ્યાં છો.",
        "revdelete-suppress-text": "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:\n* સંભવતઃ ભયાજનક માહિતી \n* અયોગ્ય નિજી માહિતી \n*: ''ઘરનું સરનામું અને ટેલિફોન નંબર, રાષ્ટ્રીય ઓળખ ક્રમાંકો વગેરે.''",
        "revdelete-legend": "દ્રશ્યતા સંબંધી પ્રતિબંધોને ગોઠવો",
        "revdelete-hide-text": "પુનરાવર્તન લખાણ",
        "revdelete-hide-image": "ફાઇલની માહિતી છુપાવો",
-       "revdelete-hide-name": "àª\95à«\8dરિયા àª\85નà«\87 àª²àª\95à«\8dષà«\8dય સંતાડો",
+       "revdelete-hide-name": "લàª\95à«\8dષà«\8dય àª\85નà«\87 àªªàª°àª¿àª®àª¾àª£à«\8b સંતાડો",
        "revdelete-hide-comment": "ફેરફાર સારાંશ",
        "revdelete-hide-user": "સંપાદકનું નામ /આઈ પી એડ્રેસ",
        "revdelete-hide-restricted": "પ્રબંધક કે અન્યો સૌની માહિતી છુપાવો",
        "right-deletedtext": "રદ્દ કરાયેલ લેખ અને રદ્દીકરણ વચ્ચેના ફેરફારો વાંચો",
        "right-browsearchive": "હટાવેલા પાનાની શોધ",
        "right-undelete": "હટાવેલ પાનું પુનર્જીવીત કરો",
-       "right-suppressrevision": "પà«\8dરબàª\82ધàª\95à«\8bથà«\80 àª¸àª\82તાડાયà«\87લ àª«à«\87રફારà«\8bનà«\81àª\82 àª\85વલà«\8bàª\95ન àª\85નà«\87 àªªà«\81નàª\83સà«\8dથાપન àª\95રà«\8b.",
+       "right-suppressrevision": "àª\95à«\8bàª\88પણ àª¸àª­à«\8dયàª\8f àªªàª¾àª¨àª¾àª\93 àªªàª° àª\95રà«\87લાàª\82 àª\9aà«\8bàª\95à«\8dàª\95સ àª«à«\87રફારà«\8b àª\9cà«\81àª\93, àª¸àª\82તાડà«\8b àª\95à«\87 àª¦à«\87àª\96ાતા àª\95રà«\8b",
        "right-suppressionlog": "નિજી લોગ જુઓ",
        "right-block": "આ સભ્ય દ્વારા થનાર ફેરફાર પ્રતિબંધીત કરો",
        "right-blockemail": "સભ્યના ઇ-મેલ મોકલવા પર પ્રતિબંધ મૂકો",
        "booksources-search": "શોધ",
        "booksources-text": "નીચે દર્શાવેલ યાદી એ કડીઓ બતાવે છે જેઓ નવા અને જૂના પુસ્તકો  વેચે છે , અને તમે માંગેલ વસ્તુ સંબંધિ વધુ મહિતી પણ ધરાવી શકે છે.",
        "booksources-invalid-isbn": "આપેલ ISBN વૈધ નથી લાગતો; મૂળ સ્રોતને ચકાસી, ભૂલ શોધી, ખરી માહિતી આપો.",
-       "specialloguserlabel": "àª\85ભિનય:",
+       "specialloguserlabel": "àª\95રà«\8dતા:",
        "speciallogtitlelabel": "લક્ષ્યાંક (શીર્ષક અથવા વપરાશકર્તા)",
        "log": "લૉગ",
        "all-logs-page": "બધાં જાહેર માહિતીપત્રકો",
        "emailccsubject": "$1ને તમે મોકલેલા સંદેશાની પ્રત: $2",
        "emailsent": "ઈ-મેલ મોકલી દેવાયો",
        "emailsenttext": "તમારો ઈ-મેલ મોકલી દેવાયો છે",
-       "emailuserfooter": "આ પત્ર $1 દ્વારા $2ને  {{SITENAME}} પરની \"સભ્યને ઇ-મેલ કરો\" કડી મારફતે મોકલવામાં આવ્યો છે.",
+       "emailuserfooter": "આ પત્ર $1 દ્વારા $2ને  {{SITENAME}} પરની \"{{int:emailpage}} (સભ્યને ઇ-મેલ કરો)\" કડી મારફતે મોકલવામાં આવ્યો છે.",
        "usermessage-summary": "તંત્ર સંદેશ મૂક્યો",
        "usermessage-editor": "તંત્ર સંદેશાઓ",
        "watchlist": "ધ્યાનસૂચી",
        "contribsub2": "($2) માટે {{GENDER:$3|$1}}",
        "nocontribs": "આ પરિમાણને મળતી પરિણામ નથી મળ્યાં",
        "uctop": "(વર્તમાન)",
-       "month": ":મહિનાથી (અને પહેલાનાં)",
-       "year": ":વર્ષથી (અને પહેલાનાં)",
+       "month": "આ મહિનાથી (અને તેના પહેલાનાં) →",
+       "year": "આ વર્ષથી (અને તેના પહેલાનાં) →",
        "sp-contributions-newbies": "માત્ર નવા ખુલેલાં ખાતાઓનું યોગદાન બતાવો",
        "sp-contributions-newbies-sub": "નવા ખાતાઓ માટે",
        "sp-contributions-newbies-title": "નવા ખાતાના સભ્યોનું યોગદાન",
        "logentry-delete-delete": "$1 દ્વારા પાનું $3 {{GENDER:$2|દૂર કરવામાં આવ્યું}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|પુનઃસંગ્રહ}} પાનું $3",
        "logentry-delete-event": "$1 એ {{PLURAL:$5|લૉગ ઘટના|$5 લૉગ ઘટનાઓ}} ની દ્રશ્યતા $3 પર {{GENDER:$2|બદલેલ}} છે: $4",
-       "logentry-delete-revision": "$1 {{GENDER:$2|બદલà«\87લ}} àª¬àª¦àª²àª¾àª\88 àª¨àª¾ àª¦à«\83શà«\8dયતા {{PLURAL:$5 | àª¸à«\81ધારણા | $5 àª\86વà«\83તà«\8dતિàª\93}} $3 àªªàª¾àª¨àª¾àª\82 àªªàª°: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|àª\8f}} àªªà«\83ષà«\8dઠ $3 àªªàª°àª¨àª¾ {{PLURAL:$5|àª\8fàª\95 àªªà«\81નરાવરà«\8dતન|$5 àªªà«\81નરાવરà«\8dતનà«\8b}}નà«\80 àª¦à«\83ષà«\8dયતા àª¬àª¦àª²à«\80: $4",
        "logentry-delete-event-legacy": "$1 એ $3 પર ફેરફારની દૃશ્યતા બદલી",
        "logentry-delete-revision-legacy": "પૃષ્ઠ $3 પરના પુનરાવર્તનોની દૃશ્યતા $1 {{GENDER:$2|એ બદલી}}",
        "logentry-suppress-delete": "$1 એ $3 પાનું {{GENDER:$2|દબાવ્યું}}",
        "logentry-suppress-event": "$1  ખાનગી રીતે {{GENDER:$2|દ્વારા માહિતીની દૃશ્યતા}} $3 : $4 પર બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}}",
-       "logentry-suppress-revision": "$1 છાની માહિતી {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | આવૃત્તિ એ | $5 આવૃત્તિઓ}}: $4 $3 પાનાં પર",
+       "logentry-suppress-revision": "$1 {{GENDER:$2|એ છાનામાના}} પૃષ્ઠ $3 પરના {{PLURAL:$5|એક પુનરાવર્તન|$5 પુનરાવર્તનો}}ની દૃષ્યતા બદલી: $4",
        "logentry-suppress-event-legacy": "$1એ ગુપ્ત રીતે $3 પર લોગ ઘટનાઓની દૃશ્યતા બદલી",
        "logentry-suppress-revision-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
        "revdelete-content-hid": "માહિતી છુપાવી",
index b972f29..9e33fee 100644 (file)
        "searchsuggest-search": "Ronsaghey",
        "searchsuggest-containing": "goaill stiagh...",
        "expand_templates_ok": "OK",
-       "expand_templates_preview": "Roie-haishbynys"
+       "expand_templates_preview": "Roie-haishbynys",
+       "special-characters-group-latin": "Romanagh",
+       "special-characters-group-latinextended": "Romanagh sheeynt",
+       "special-characters-group-ipa": "ASE",
+       "special-characters-group-symbols": "Cowraghyn",
+       "special-characters-group-greek": "Greagagh",
+       "special-characters-group-cyrillic": "Kyrillagh",
+       "special-characters-group-arabic": "Arabagh",
+       "special-characters-group-persian": "Pershish",
+       "special-characters-group-hebrew": "Ewagh",
+       "special-characters-group-bangla": "Bengaalish",
+       "special-characters-group-telugu": "Telugish",
+       "special-characters-group-sinhala": "Sinhalish",
+       "special-characters-group-gujarati": "Gujaratish",
+       "special-characters-group-thai": "Thaish",
+       "special-characters-group-lao": "Laosish",
+       "special-characters-group-khmer": "Khmerish"
 }
index e7d2d68..9e0144c 100644 (file)
        "no-null-revision": "לא ניתן היה ליצור גרסת־דמה בדף \"$1\"",
        "badtitle": "כותרת שגויה",
        "badtitletext": "כותרת הדף המבוקש הייתה בלתי־תקינה, ריקה, או קישור שגוי לשפה אחרת או למיזם אחר.\nייתכן שהיא מכילה תו אחד או יותר שאינו יכול לשמש בכותרות.",
+       "title-invalid-empty": "כותרת הדף המבוקש ריקה או מכילה רק שם של מרחב שם.",
+       "title-invalid-utf8": "כותרת הדף המבוקש מכילה רצף UTF-8 בלתי־תקין.",
+       "title-invalid-interwiki": "הכותרת מכילה קישור בינוויקי",
+       "title-invalid-talk-namespace": "כותרת הדף המבוקש מפנה לדף שיחה שאינו יכול להתקיים.",
+       "title-invalid-characters": "כותרת הדף המבוקש מכילה תווים בלתי־תקינים: \"$1\".",
+       "title-invalid-relative": "בכותרת יש נתיב יחסי. כותרת דפים יחסיות (./, ../) אינן תקינות, כיוון שלעתים קרובות הן לא יהיו בנות־השגה כשתטופלנה על־ידי הדפדפן של המשתמש.",
+       "title-invalid-magic-tilde": "כותרת הדף המבוקש מכילה רצף טילדות מיוחד (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "כותרת הדף המבוקש ארוכה מדי. היא צריכה להיות לכל היותר באורך $1 בתים בקידוד UTF-8.",
+       "title-invalid-leading-colon": "כותרת הדף המבוקש מכילה תו נקודתיים בלתי־תקין בתחילתה.",
        "perfcached": "המידע הבא הוא עותק שמור בזיכרון המטמון של המידע, ועשוי שלא להיות מעודכן. לכל היותר {{PLURAL:$1|תוצאה אחת נשמרת|$1 תוצאות נשמרות}} בזיכרון המטמון.",
        "perfcachedts": "המידע הבא הוא עותק שמור בזיכרון המטמון של המידע, שעודכן לאחרונה ב־$1. לכל היותר {{PLURAL:$4|תוצאה אחת נשמרת|$4 תוצאות נשמרות}} בזיכרון המטמון.",
        "querypage-no-updates": "העדכונים לדף זה כרגע מופסקים, והמידע לא יעודכן באופן שוטף.",
index 4e3590d..098f974 100644 (file)
        "import-interwiki-history": "Ii panna ke sab badlao ke itihaas ke copy karo",
        "import-interwiki-templates": "Sab template ke include karo",
        "import-interwiki-submit": "Import karo",
-       "import-interwiki-namespace": "Manzil waala namespace:",
-       "import-interwiki-rootpage": "Destination root panna (optional):",
        "import-upload-filename": "File ke naam:",
        "import-comment": "Aapan bichar do:",
        "importtext": "Meharbani kar ke file ke [[Special:Export|export utility]] use kar ke source wiki me se export karo.\nAapan computer me save kar ke  hian pe upload karo.",
index e29d57e..028189f 100644 (file)
        "protectedinterface": "Ez a lap a szoftver felületéhez szolgáltat szöveget, és a visszaélések elkerülése miatt le van zárva.",
        "editinginterface": "<strong>Vigyázat:</strong> egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot.",
        "translateinterface": "Minden wikire kiterjedő fordítások hozzáadásához vagy szerkesztésére használd a [//translatewiki.net/ translatewiki.net]-et, a MédiaWiki lokalizációs projektjét.",
-       "cascadeprotected": "Ez a lap szerkesztés elleni védelemmel lett ellátva, mert a következő {{PLURAL:$1|lapon|lapokon}} be van kapcsolva a „kaszkádolt” védelem:\n$2",
+       "cascadeprotected": "Ez a lap szerkesztés elleni védelemmel lett ellátva, mert be van illesztve a következő {{PLURAL:$1|lapon|lapokon}}, ahol be van kapcsolva a „kaszkádolt” védelem:\n$2",
        "namespaceprotected": "Nincs jogosultságod a(z) '''$1''' névtérben található lapok szerkesztésére.",
        "customcssprotected": "Nem szerkesztheted ezt a CSS-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.",
        "customjsprotected": "Nem szerkesztheted ezt a JavaScript-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.",
index 7b79c88..14ab6dc 100644 (file)
        "history-feed-description": "Riwayat revisi halaman ini di wiki",
        "history-feed-item-nocomment": "$1 pada $2",
        "history-feed-empty": "Halaman yang diminta tak ditemukan.\nKemungkinan telah dihapus dari wiki, atau diberi nama baru.\nCoba [[Special:Search|lakukan pencarian di wiki]] untuk halaman baru yang relevan.",
+       "history-edit-tags": "Sunting tag dari revisi yang terpilih",
        "rev-deleted-comment": "(ringkasan suntingan dihapus)",
        "rev-deleted-user": "(nama pengguna dihapus)",
        "rev-deleted-event": "(rincian log dihapus)",
        "listfiles-delete": "hapus",
        "listfiles-summary": "Halaman istimewa ini menampilkan semua berkas yang telah diunggah.\nKetika disaring oleh pengguna, hanya versi berkas terbaru dari berkas yang diunggah oleh pengguna tersebut yang ditampilkan.",
        "listfiles_search_for": "Cari nama berkas:",
+       "listfiles-userdoesnotexist": "Akun pengguna \"$1\" tidak terdaftar.",
        "imgfile": "berkas",
        "listfiles": "Daftar berkas",
        "listfiles_thumb": "Miniatur",
        "logempty": "Tidak ditemukan entri log yang sesuai.",
        "log-title-wildcard": "Cari judul yang diawali dengan teks tersebut",
        "showhideselectedlogentries": "Tampilkan/sembunyikan entri log terpilih",
+       "log-edit-tags": "Sunting tag dari entri log yang terpilih",
        "allpages": "Semua halaman",
        "nextpage": "Halaman selanjutnya ($1)",
        "prevpage": "Halaman sebelumnya ($1)",
        "protect-othertime": "Waktu lain:",
        "protect-othertime-op": "waktu lain",
        "protect-existing-expiry": "Waktu kedaluwarsa saat ini: $2 $3",
+       "protect-existing-expiry-infinity": "Waktu kedaluwarsa yang ada: tidak terdefinisi",
        "protect-otherreason": "Alasan lain/tambahan:",
        "protect-otherreason-op": "Alasan lain",
        "protect-dropdown": "*Alasan umum pelindungan\n** Vandalisme berulang\n** Spam berulang\n** Perang suntingan\n** Halaman dengan lalu-lintas tinggi",
        "namespace": "Ruang nama:",
        "invert": "Balikkan pilihan",
        "tooltip-invert": "Centang kotak ini untuk menyembunyikan perubahan halaman dalam ruang nama yang dipilih (dan ruang nama terkait jika dicentang)",
+       "tooltip-whatlinkshere-invert": "Centang kotak ini untuk menyembunyikan pranala dalam ruang nama yang dipilih.",
        "namespace_association": "Ruangnama terkait",
        "tooltip-namespace_association": "Centang halaman ini untuk menyertakan ruang nama pembicaraan atau subjek yang terkait dengan ruang nama terpilih",
        "blanknamespace": "(Utama)",
        "unblocked": "Blokir terhadap [[User:$1|$1]] telah dicabut",
        "unblocked-range": "$1 telah diblokir",
        "unblocked-id": "Blokir $1 telah dicabut",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] telah dibuka blokirnya.",
        "blocklist": "Pengguna terblokir",
        "ipblocklist": "Pengguna terblokir",
        "ipblocklist-legend": "Cari pengguna yang diblokir",
        "thumbnail-temp-create": "Tidak dapat membuat berkas kecil temporer",
        "thumbnail-dest-create": "Tidak dapat menyimpan berkas kecil ke tujuan",
        "thumbnail_invalid_params": "Kesalahan parameter miniatur",
+       "thumbnail_toobigimagearea": "Berkas dengan dimensi lebih besar dari $1",
        "thumbnail_dest_directory": "Direktori tujuan tak dapat dibuat",
        "thumbnail_image-type": "Tipe gambar tidak didukung",
        "thumbnail_gd-library": "Konfigurasi pustaka GD tak lengkap: tak ada fungsi $1",
        "thumbnail_image-missing": "Berkas yang tampaknya hilang: $1",
        "thumbnail_image-failure-limit": "Ada terlalu banyak upaya yang gagal baru-baru ini ($1 atau lebih) untuk membuat miniatur ini. Silakan coba lagi nanti.",
        "import": "Impor halaman",
-       "importinterwiki": "Impor transwiki",
-       "import-interwiki-text": "Pilih suatu wiki dan judul halaman yang akan di impor.\nTanggal revisi dan nama penyunting akan dipertahankan.\nSemua aktivitas impor transwiki akan dicatat di [[Special:Log/import|log impor]].",
+       "importinterwiki": "Impor dari wiki yang lainnya",
+       "import-interwiki-text": "Pilih suatu wiki dan judul halaman yang akan di impor.\nTanggal revisi dan nama penyunting akan dipertahankan.\nSemua aktivitas impor dari wiki lainnya akan dicatat di [[Special:Log/import|log impor]].",
+       "import-interwiki-sourcewiki": "Wiki sumber:",
+       "import-interwiki-sourcepage": "Sumber halaman:",
        "import-interwiki-history": "Salin semua versi terdahulu dari halaman ini",
        "import-interwiki-templates": "Sertakan semua templat",
        "import-interwiki-submit": "Impor",
+       "import-mapping-default": "Impor ke lokasi standar",
+       "import-mapping-namespace": "Impor ke ruang nama:",
+       "import-mapping-subpage": "Impor sebagai subhalaman dari halaman berikut:",
        "import-upload-filename": "Nama berkas:",
        "import-comment": "Komentar:",
        "importtext": "Silakan ekspor berkas dari wiki sumber dengan menggunakan [[Special:Export|fasilitas ekspor]].\nSimpan ke komputer Anda dan unggah ke sini.",
        "importcantopen": "Berkas impor tidak dapat dibuka",
        "importbadinterwiki": "Pranala interwiki rusak",
        "importsuccess": "Impor sukses!",
-       "importnosources": "Tidak ada sumber impor transwiki yang telah dibuat dan pemuatan riwayat secara langsung telah di non-aktifkan.",
+       "importnosources": "Tidak ada wiki dari yang diimpor yang telah dibuat dan pemuatan riwayat secara langsung telah di non-aktifkan.",
        "importnofile": "Tidak ada berkas sumber impor yang telah dimuat.",
        "importuploaderrorsize": "Pemuatan berkas impor gagal. Ukuran berkas melebihi ukuran yang diperbolehkan.",
        "importuploaderrorpartial": "Pemuatan berkas impor gagal. Hanya sebagian berkas yang berhasil dimuat.",
index 9b4dfcc..293b656 100644 (file)
        "feedback-close": "Ọméchá.",
        "feedback-message": "Ozi:",
        "searchsuggest-search": "Chọwa",
-       "expand_templates_ok": "Ngwanu"
+       "expand_templates_ok": "Ngwanu",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin dọrọ",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Nkárí",
+       "special-characters-group-greek": "Greek",
+       "special-characters-group-cyrillic": "Cyrillic",
+       "special-characters-group-arabic": "Arabiki",
+       "special-characters-group-persian": "Asụsụ Persia",
+       "special-characters-group-hebrew": "Asụsụ Hebrew",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Asụsụ Thai",
+       "special-characters-group-lao": "Asụsụ Laos",
+       "special-characters-group-khmer": "Khmer"
 }
index 9799b9d..35b8d40 100644 (file)
        "htmlform-reset": "Хувцамаш юхадаккха",
        "htmlform-selectorother-other": "Кхыдола",
        "rightsnone": "(а)",
-       "revdelete-summary": "хувцамий лоацам"
+       "revdelete-summary": "хувцамий лоацам",
+       "special-characters-group-latin": "Лаьтмий",
+       "special-characters-group-greek": "Джелтий",
+       "special-characters-group-cyrillic": "Цырилиций",
+       "special-characters-group-arabic": "Ӏарбий",
+       "special-characters-group-persian": "Фаьранзий",
+       "special-characters-group-hebrew": "Жугтий"
 }
index afc328c..03cbc8c 100644 (file)
        "searchsuggest-containing": "quan kontenas...",
        "expand_templates_output": "Rezulto",
        "expand_templates_ok": "O.K.",
-       "expand_templates_preview": "Previdar"
+       "expand_templates_preview": "Previdar",
+       "special-characters-group-latin": "Latina",
+       "special-characters-group-latinextended": "Latina extensita",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "Grekiana",
+       "special-characters-group-cyrillic": "Kirila",
+       "special-characters-group-arabic": "Arabiana",
+       "special-characters-group-persian": "Persiana"
 }
index a5e6ae5..c0de184 100644 (file)
        "import-interwiki-history": "Copia l'intera cronologia di questa pagina",
        "import-interwiki-templates": "Includi tutti i template",
        "import-interwiki-submit": "Importa",
+       "import-mapping-default": "Importa in destinazione predefinita",
+       "import-mapping-namespace": "Importa in un namespace:",
+       "import-mapping-subpage": "Importa come sottopagine della pagina seguente:",
        "import-upload-filename": "Nome file:",
        "import-comment": "Oggetto:",
        "importtext": "Si prega di esportare il file dal sito wiki di origine con la [[Special:Export|funzione di esportazione]], salvarlo sul proprio disco e poi caricarlo qui.",
        "tags-deactivate-reason": "Motivo:",
        "tags-deactivate-not-allowed": "Non è possibile disattivare il tag \"$1\".",
        "tags-deactivate-submit": "Disattiva",
+       "tags-apply-no-permission": "Non disponi dell'autorizzazione per applicare la modifica di tag insieme con le tue modifiche.",
        "tags-apply-not-allowed-one": "L'etichetta \"$1\" non può essere applicata manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La seguente etichetta non può essere applicata|Le seguenti etichette non possono essere applicate}}  manualmente: $1",
+       "tags-update-no-permission": "Non hai il permesso di aggiungere o rimuovere modifiche di tag dalle singole revisioni o voci di registro.",
+       "tags-update-add-not-allowed-one": "Il tag \"$1\" non può essere aggiunto manualmente.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Il seguente tag non può essere aggiunto|I seguenti tag non possono essere aggiunti}} manualmente: $1",
+       "tags-update-remove-not-allowed-one": "Il tag \"$1\" non può essere rimosso.",
+       "tags-update-remove-not-allowed-multi": "Non è consentito rimuovere manualmente {{PLURAL:$2|il seguente tag|i seguenti tag}}: $1",
        "tags-edit-title": "Modifica etichette",
        "tags-edit-manage-link": "Gestisci etichette",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Versione selezionata|Versioni selezionate}} di [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Evento del registro selezionato|Eventi del registro selezionati}}:",
        "tags-edit-existing-tags": "Etichette esistenti:",
        "tags-edit-existing-tags-none": "''Nessuna''",
        "tags-edit-new-tags": "Nuove etichette:",
        "tags-edit-add": "Aggiungi queste etichette:",
        "tags-edit-remove": "Rimuovi queste etichette:",
+       "tags-edit-remove-all-tags": "(rimuovi tutti i tag)",
        "tags-edit-chosen-placeholder": "Seleziona alcune etichette",
+       "tags-edit-chosen-no-results": "Nessun tag corrispondente trovato",
        "tags-edit-reason": "Motivo:",
+       "tags-edit-revision-submit": "Applica le modifiche a {{PLURAL:$1|questa revisione|$1 revisioni}}",
+       "tags-edit-success": "Le modifiche sono state applicate correttamente.",
+       "tags-edit-failure": "Non è stato possibile effettuare le seguenti modifiche:\n$1",
+       "tags-edit-none-selected": "Per favore, seleziona almeno un tag da aggiungere o rimuovere.",
        "comparepages": "Confronta le pagine",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
index 35cfe7d..bc13047 100644 (file)
        "no-null-revision": "ページ「$1」に新しい空編集の版を作成できませんでした。",
        "badtitle": "正しくないページ名",
        "badtitletext": "無効または空のページ名が指定されたか、言語間/ウィキ間リンクの方法に誤りがあります。\nページ名に使用できない文字が含まれている可能性があります。",
+       "title-invalid-utf8": "指定されたページ名が無効なUTF-8シーケンスを含んでいます。",
+       "title-invalid-characters": "指定されたページ名が無効な文字 \"$1\" を含んでいます。",
        "perfcached": "以下のデータはキャッシュされており、最新ではない可能性があります。最大 $1 {{PLURAL:$1|件の結果}}がキャッシュされます。",
        "perfcachedts": "以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。",
        "querypage-no-updates": "ページの更新は無効になっています。\n以下のデータの更新は現在行われていません。",
index afe8af3..da6a59d 100644 (file)
        "revdelete-uname-unhid": "მომხმარებლის სახელი გახსნილია",
        "revdelete-restricted": "შეზღუდვა ადმინისტრატორთათვის",
        "revdelete-unrestricted": "ადმინისტრატორთათვის შეზღუდვები მოხსნილია",
+       "logentry-block-block": "მომხმარებელმა $1 {{GENDER:$2|დაბლოკა}} {{GENDER:$4|$3}} ბლოკირების ვადაა $5 $6",
+       "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-move-move": "მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“",
        "logentry-move-move-noredirect": "მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“ გადამისამართების დატოვების გარეშე",
        "logentry-move-move_redir": "მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“ გადამისამართებაზე",
index c92e9e1..bc86057 100644 (file)
        "import-interwiki-history": "Xdem alsaru n akk tisiwal umezruy n usebter-agi",
        "import-interwiki-templates": "Sekcem akkw talɣiwin",
        "import-interwiki-submit": "Ssekcem",
-       "import-interwiki-namespace": "Azen isebtar ar isem n taɣult:",
-       "import-interwiki-rootpage": "Asebtar azaṛ n userken (axetṛan) :",
        "import-upload-filename": "Isem n ufaylu :",
        "import-comment": "Awennit :",
        "importtext": "Ilaq ad ssifeḍeḍ afaylu seg wiki aneṣli s useqdac n  [[Special:Export|ufecku ines n ussifeḍ]].",
        "import-rootpage-nosubpage": "Tallunt n isemawen « $1 » n usebtar aẓar ur yeqbel ara adu-isebtar.",
        "importlogpage": "Aɣmis n usekcam",
        "importlogpagetext": "Adeblan n usekcam n isebtar i yesɛan amezruy ubeddel seg wiki tiyaḍ.",
-       "import-logentry-upload": "Yessekcem [[$1]] s usekcam n ufaylu",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|lqem|ileqman}}",
-       "import-logentry-interwiki": "$1 s transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|lqem|ileqman}} seg $2",
        "javascripttest": "Tarmit n JavaScript",
        "javascripttest-pagetext-noframework": "Asebtar agi yeḥeṛṛ i usselkem n tirmitin JavaScript.",
index a54f831..cb108dd 100644 (file)
        "import-interwiki-text": "سىرتتان الىناتىن ۋىيكىيدى جانە بەتتىڭ تاقىرىپ اتىن بولەكتەڭىز.\nتۇزەتۋ كۇن-ايى جانە وڭدەۋشى ەسىمدەرى ساقتالادى.\nۋىيكىي-اپارۋ ٴۇشىن سىرتتان الۋ بارلىق ارەكەتتەر [[{{#special:Log}}/import|سىرتتان الۋ جۋرنالىنا]] جازىلىپ الىنادى.",
        "import-interwiki-history": "بۇل بەتتىڭ بارلىق تارىيحىي نۇسقالارىن كوشىرۋ",
        "import-interwiki-submit": "سىرتتان الۋ",
-       "import-interwiki-namespace": "بەتتەردى مىنا ەسىم اياسىنا اپارۋ:",
        "import-comment": "ماندەمەسى:",
        "importtext": "قاينار ۋىيكىيدەن «{{#special:Export}}» قۋرالىن قولدانىپ فايلدى سىرتقا بەرىڭىز, دىيسكىڭىزگە ساقتاڭىز دا مىندا قوتارىپ بەرىڭىز.",
        "importstart": "بەتتەردى سىرتتان الۋدا…",
        "import-upload": "XML دەرەكتەرىن قوتارىپ بەرۋ",
        "importlogpage": "سىرتتان الۋ جۋرنالى",
        "importlogpagetext": "بەتتەردى تۇزەتۋ تارىيحىمەن بىرگە سىرتقى ۋىيكىيلەردەن اكىمشى رەتىندە الۋ.",
-       "import-logentry-upload": "«[[$1]]» دەگەندى فايل قوتارىپ بەرۋ ارقىلى سىرتتان الدى",
        "import-logentry-upload-detail": "$1 تۇزەتۋ",
-       "import-logentry-interwiki": "ۋىيكىي-اپارىلعان $1",
        "import-logentry-interwiki-detail": "$2 دەگەننەن $1 تۇزەتۋ",
        "tooltip-pt-userpage": "جەكە بەتىم",
        "tooltip-pt-anonuserpage": "بۇل IP مەكەنجايدىڭ جەكە بەتى",
index 7e62a68..ad40f2d 100644 (file)
        "import-interwiki-text": "Sırttan alınatın wïkïdi jäne bettiñ taqırıp atın bölekteñiz.\nTüzetw kün-aýı jäne öñdewşi esimderi saqtaladı.\nWïkï-aparw üşin sırttan alw barlıq äreketter [[{{#special:Log}}/import|sırttan alw jwrnalına]] jazılıp alınadı.",
        "import-interwiki-history": "Bul bettiñ barlıq tarïxï nusqaların köşirw",
        "import-interwiki-submit": "Sırttan alw",
-       "import-interwiki-namespace": "Betterdi mına esim ayasına aparw:",
        "import-comment": "Mändemesi:",
        "importtext": "Qaýnar wïkïden «{{#special:Export}}» qwralın qoldanıp faýldı sırtqa beriñiz, dïskiñizge saqtañız da mında qotarıp beriñiz.",
        "importstart": "Betterdi sırttan alwda…",
        "import-upload": "XML derekterin qotarıp berw",
        "importlogpage": "Sırttan alw jwrnalı",
        "importlogpagetext": "Betterdi tüzetw tarïxımen birge sırtqı wïkïlerden äkimşi retinde alw.",
-       "import-logentry-upload": "«[[$1]]» degendi faýl qotarıp berw arqılı sırttan aldı",
        "import-logentry-upload-detail": "$1 tüzetw",
-       "import-logentry-interwiki": "wïkï-aparılğan $1",
        "import-logentry-interwiki-detail": "$2 degennen $1 tüzetw",
        "tooltip-pt-userpage": "Jeke betim",
        "tooltip-pt-anonuserpage": "Bul IP mekenjaýdıñ jeke beti",
index bbea687..78b706e 100644 (file)
        "import-interwiki-history": "ចម្លង គ្រប់កំណែចាស់ នៃទំព័រនេះ",
        "import-interwiki-templates": "រាប់​បញ្ចូល​ទំព័រគំរូ​ទាំងអស់​",
        "import-interwiki-submit": "នាំចូល",
-       "import-interwiki-namespace": "បញ្ជូនទំព័រទៅក្នុងលំហឈ្មោះ​៖",
        "import-upload-filename": "ឈ្មោះ​ឯកសារ​​៖",
        "import-comment": "យោបល់៖",
        "importtext": "សូមនាំចេញឯកសារនេះពីវិគីប្រភពដោយប្រើប្រាស់[[Special:Export|ឧបករណ៍នាំចេញ]]។\nរក្សាវាទុកទៅក្នុងកុំព្យូទ័ររបស់អ្នករួចផ្ទុកវាឡើងនៅទីនេះ។",
index 1a4e39f..1a7617f 100644 (file)
        "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
        "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
-       "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-rights-legacy": "$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-autopromote": "$1 사용자의 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
        "logentry-upload-upload": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
index 50bd507..371f0eb 100644 (file)
        "tooltip-pt-mycontris": "Сизни тюрлендириулеригизни тизмеси",
        "tooltip-pt-login": "Былайда системада регистрация этерге боллукъду, алай а ол ажымсыз керекли тюйюлдю",
        "tooltip-pt-logout": "Чыгъыу",
+       "tooltip-pt-createaccount": "Ажымсыз керек болмагъанлыкъгъа, тергеу джазыу (аккаунт) къураб системагъа кирирге теджейбиз.",
        "tooltip-ca-talk": "Бетни ичиндегин сюзюу",
        "tooltip-ca-edit": "Бу бетни тюрлендирирге болады. Сакълагъынчы ал къарауну хайырландырыгъыз.",
        "tooltip-ca-addsection": "Джангы бёлюм къура",
index 43e3837..d8843b1 100644 (file)
        "no-null-revision": "Mer kunnte kein onveränderte neue Väsjohn vun dä Sigg „$1“ aanlääje.",
        "badtitle": "Verkihrte Üvverschreff",
        "badtitletext": "De Üvverschreff es esu nit en Odenung. Et muss jet dren stonn.\nEt künnt sin, dat ein vun de speziell Zeiche dren steiht,\nwat en Üvverschrefte nit erlaub es.\nEt künnt ussinn, wie ene InterWikiLink,\ndat jeiht ävver nit.\nMuss De repareere.",
+       "title-invalid-empty": "De jewönschter Övverschrevv vun dä Sigg es läddesch, udder et es blohs e Appachtemang aam Aanfang dren.",
+       "title-invalid-interwiki": "En dä Övverschrevv es ene Engerwikkilengk dren.",
+       "title-invalid-leading-colon": "En dä jewönschter Övverschrevv för di Sigg es ene onjöllteje Dubbelpungk aam Aanfang dren.",
        "perfcached": "Di Daate heh noh kumme usem Zweschespeicher (cache) un künnte nit mieh janz de allerneuste sin.\n{{PLURAL:$1|Bloß ein Antwoot es|Nit mieh wi $1 Antwoote sin|Kein Antwoot es}} doh faßjehallde un ze han.",
        "perfcachedts": "De Daate heenoh kumme usem Zweschespeicher (<i lang=\"en\">cache</i>) un woodte aam $2 öm $3 opjenumme. Se künnte nit janz de allerneuste sin.\n{{PLURAL:$4|Bloß ein Antwoot es|Nit mieh wi $4 Antwoote sind|Kein Antwoot es}} doh ze han.",
        "querypage-no-updates": "'''Heh die Sigg weed nit mieh op ene neue Stand jebraat.'''",
index d15e333..72b80ee 100644 (file)
        "tog-usenewrc": "Weşandina zêdetir (JavaScript pêwîst e)",
        "tog-numberheadings": "Sernavan otomatîk bihejmêre",
        "tog-showtoolbar": "Çoyê sererastkirinê nîşan bide",
-       "tog-editondblclick": "Rûpelan bi du klîkan biguherîne (Java Script gireke)",
+       "tog-editondblclick": "Rûpelan bi du klîkan biguherîne",
        "tog-editsectiononrightclick": "Beşekê bi rast-klîkekê biguherîne",
-       "tog-watchcreations": "Rûpelên min çêkirin, têxe nav lîsteya min a şopandinê",
-       "tog-watchdefault": "Rûpelên min guhertin, têxe nav lîsteya min a şopandinê",
+       "tog-watchcreations": "Rûpelên min çêkirin û dosyeyên min barkirin, têxe nav lîsteya min a şopandinê",
+       "tog-watchdefault": "Rûpelên min guhertin û dosyeyên min barkirin, têxe nav lîsteya min a şopandinê",
        "tog-watchmoves": "Rûpelên min navê wan guhertin, têxe nav lîsteya min a şopandinê",
        "tog-watchdeletion": "Rûpel û dosyeyên min jêbirin, têxe nav lîsteya min a şopandinê",
        "tog-minordefault": "Her guhertinekê weke guhertineke biçûk nîşan bide",
        "otherlanguages": "Bi zimanên din",
        "redirectedfrom": "(Ji $1 hate beralîkirin)",
        "redirectpagesub": "Rûpelê beralî bike",
+       "redirectto": "Beralîye vir bike:",
        "lastmodifiedat": "Ev rûpel cara dawî di $2, $1 de hate guherandin.",
        "viewcount": "Ev rûpel {{PLURAL:$1|carekê|caran}} tê xwestin.",
        "protectedpage": "Rûpela parastî",
        "formerror": "Çewtî: Ew nivîs pêk nehat.",
        "badarticleerror": "Ev çalakî di vê rûpelê de nabe.",
        "cannotdelete": "Ev rûpel an wêne nikare were jêbirin. Dibe ku kesekî din ev rûpel jêbiribe.",
+       "cannotdelete-title": "Rûpela \"$1\" nikare bê jêbirin",
        "badtitle": "Sernivîsa nebaş",
        "badtitletext": "Sernavê rûpelê yê xwestî ne derbasdar, vala an jî ne xwediyê girêdaneke rast e.\nDibe ku di sernavê de karakterên nayên bikaranîn hatibin nivîsandin.",
+       "title-invalid-interwiki": "Sernav girêdaneka înterwikiyê dihewîne",
        "perfcached": "Ev dane hatine veşartin û belkî ne rojane bin. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "Ev dane hatiye veşartin û cara paşîn $1 hatiye rojanekirin. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Fonksiyona rojanekirinê ya vê rûpelê hatiye sekinandin. Daneyên vir nayên rojanekirin.",
        "editinginterface": "'''Hişyarî:''' Tu rûpeleke ku di Wîkîpediya de ji bo sîstemê girîng e diguherînî. Guherandinên di vê rûpelê de wê ji aliyê hemû bikarhêneran ve werin dîtin. Ji bo wergerê ji kerema xwe di [//translatewiki.net/wiki/Main_Page?setlang=ku-latn translatewiki.net] de bixebite, projeya MediaWiki.",
        "cascadeprotected": "Ev rûpel hatiye parastin ji ber guherandinê, ji ber ku ev rûpela di {{PLURAL:$1|vê rûpelê|van rûpelan da}} tê bikaranîn:\n$2",
        "namespaceprotected": "Destûra te ji bo guhertina vê rûpelê '''$1''' di valahiya nav de nîne.",
+       "customjsprotected": "Destûra te tune ye ku tu vê rûpela JavaScriptê biguherînî ji ber ku ew eyarên kesane yên bikarhênerên din dihewîne.",
+       "mypreferencesprotected": "Destûr tune ye ku tu eyarên xwe biguherînî.",
        "ns-specialprotected": "Rûpelên taybet {{ns:special}} nikarin werin guherandin.",
        "titleprotected": "Rûpelek bi vî navî nikare bê çêkirin. Ev astengkirin ji [[User:$1|$1]] bi sedema ''$2'' hatiye çêkirin.",
        "virus-unknownscanner": "Antîvîrusa nenas:",
        "userlogin-yourpassword-ph": "Şîfreya xwe binivîse",
        "createacct-yourpassword-ph": "Şîfreya xwe binivîse",
        "yourpasswordagain": "Şîfreyê dîsa binivîse:",
+       "createacct-yourpasswordagain": "Şîfreye bipejirîne",
        "createacct-yourpasswordagain-ph": "Şîfreyê ji nû ve têkeve",
        "remembermypassword": "Şifreya min di her têketina min de bîne bîra xwe (herî zêde $1 {{PLURAL:$1|rojekê|rojan}})",
        "userlogin-remembermypassword": "Min têketî bihêle",
        "createacct-imgcaptcha-ph": "Nivîsa ku tu li jor dibînî binivîse",
        "createacct-submit": "Hesabê xwe biafirîne",
        "createacct-another-submit": "Hesabek din çêke",
+       "createacct-benefit-heading": "{{SITENAME}} ji alî mirovên wek te tên çêkirin.",
+       "createacct-benefit-body1": "{{PLURAL:$1|guhertin}}",
        "createacct-benefit-body2": "{{PLURAL:$1|rûpel}}",
        "badretype": "Her du şîfreyên ku te nivîsîn li hevdu nayên.",
        "userexists": "Ev navî bikarhênerî berê tê bikaranîn. Xêra xwe navekî din dake.",
        "loginerror": "Çewtiya têketinê",
+       "createacct-error": "Çewtîya çêkirine hesabê",
        "nocookiesnew": "Hesabê bikarhêner hatibû çêkirin, lê te xwe qeyd nekiriye. {{SITENAME}} ji bo qeydkirina bikarhêneran cookie'yan bikartîne. Te bikaranîna cookie'yan girtiye. Xêra xwe cookie'yan qebûl bike, piştre bi navê bikarhêner û şîfreya xwe têkeve.",
        "nocookieslogin": "Ji bo qeydkirina bikarhêneran {{SITENAME}} \"cookies\" bikartîne. Te fonksîyona \"cookies\" girtîye. Xêra xwe kerema xwe \"cookies\" gengaz bike û careke din biceribîne.",
        "noname": "Navê ku te nivîsand derbas nabe.",
        "passwordtooshort": "Şîfreya te netê qebûlkirin: Şîfreya te gereke bi kêmani {{PLURAL:$1|nîşaneka|$1 nîşanên}} xwe hebe û ne wek navî tê wek bikarhêner be.",
        "password-name-match": "Divê şîfreya te ji navê te yê bikaranînê cuda be.",
        "password-login-forbidden": "Bikaranîna vî navî û vê şîfreyê hatiye qedexekirin.",
-       "mailmypassword": "Şîfreyeke nû bi e-mail ji min re bişîne",
+       "mailmypassword": "Şîfreyê nû bike",
        "passwordremindertitle": "Şîfreyeke nû ya ji hesabekî {{SITENAME}} re",
        "passwordremindertext": "Kesek (têbê tu, bi IP'ya $1) xwast ku şîfreyeke nû ji {{SITENAME}} ($4) ji te ra were şandin. Şîfreya nû ya bikarhêner \"$2\" niha \"$3\" e. Tu dikarî niha têkevê û şîfreya xwe biguherînê.\n\nEger kesekî din vê xastinê ji te ra xast ya şîfreya kevin dîsa hate bîrê te, tu dikarê guh nedê vê peyamê û tu dikarê bi şîfreya xwe yê kevin hên karbikê.",
        "noemail": "Navnîşana bikarhênerê/î \"$1\" nehat tomar kirine.",
        "noemailprefs": "'''Te hên adresa e-nameyan nenivîsandîye''', fonksyonên e-nameyan hên ji te ra ne tên qebûlkirin.",
        "emailconfirmlink": "E-Mail adresê xwe nasbike",
        "invalidemailaddress": "Adresa e-nameyan yê te ne tê qebûlkirin, ji ber ku formata xwe qedexe ye (belkî nîşanên qedexe). Xêra xwe adreseka serrast binivisîne ya vê derê vala bêle.",
+       "cannotchangeemail": "E-nameya hesabê bo vê wîkiyê nikare bê guherandin.",
        "emaildisabled": "Ev sîte e-nameya nikara bişîne.",
        "accountcreated": "Hesab hate çêkirin",
        "accountcreatedtext": "Hesabê bikarhêneran ji $1 ra hate çêkirin.",
        "editing": "Biguherîne: \"$1\"",
        "creating": "$1 tê çêkirin",
        "editingsection": "Tê guherandin: $1 (beş)",
-       "editingcomment": "$1 (şîrove) tê guherandin.",
+       "editingcomment": "$1 (beşek nû) tê guherandin.",
        "editconflict": "Têkçûna guherandinan: $1",
        "explainconflict": "Ji dema te dest bi guherandinê kir heta niha kesekê/î din ev rûpel guherand.\nLi jor guhertoya heyî tê dîtîn.\nGuherandinên te li jêr tên nîşandan.\nDivê tu wan bikî yek.\nHeke niha tomar bikî, '''bi tenê''' nivîsara qutiya jor wê bê tomarkirin.",
        "yourtext": "Nivîsara te",
        "compareselectedversions": "Guhertoyan bide ber hev",
        "showhideselectedversions": "Revîzyonên bijartî nîşan bide/veşêre",
        "editundo": "betal bike",
+       "diff-empty": "(Cudahî nîne)",
        "searchresults": "Encamên lêgerînê",
        "searchresults-title": "Encamên lêgerrînê bo \"$1\"",
        "titlematches": "Dîtinên di sernivîsên gotaran de",
        "searchprofile-advanced": "Pêşketî",
        "searchprofile-articles-tooltip": "Di $1 da lêbigere",
        "searchprofile-images-tooltip": "Li pelan bigere",
+       "searchprofile-everything-tooltip": "Di hemû naverokada bigere (tevî gotûbêja)",
        "search-result-size": "$1 ({{PLURAL:$2|peyvek|$2 peyv}})",
        "search-redirect": "(beralîkirin $1)",
        "search-section": "(beş $1)",
        "search-category": "(kategorî $1)",
+       "search-file-match": "(bi naveroka dosye re lê te)",
        "search-suggest": "Gelo mebesta te ev bû: $1",
        "search-interwiki-caption": "Projeyên hevçeng",
        "search-interwiki-default": "$1 encam:",
        "recentchanges-label-unpatrolled": "Ev gotar hêj nehatiye sererastkirin",
        "recentchanges-label-plusminus": "Qebareya vê rûpelê bi ev qas biteyan hate guherandin",
        "recentchanges-legend-heading": "'''Ravekirina kurtenavan:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (here [[Taybet:Rûpelên_nû|lîsteya rûpelên nû]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (here [[Special:NewPages|lîsteya rûpelên nû]])",
        "rclistfrom": "Guherandinên ji $3 $2 şûnde nîşan bide",
        "rcshowhideminor": "Guherandinên biçûk $1",
        "rcshowhideminor-show": "nîşan bide",
        "rcshowhidebots": "Bot'an $1",
        "rcshowhidebots-show": "nîşan bide",
        "rcshowhidebots-hide": "veşêre",
-       "rcshowhideliu": "$1 bikarhênerên tomarkirî",
+       "rcshowhideliu": "Bikarhênerên tomarkirî $1",
        "rcshowhideliu-show": "nîşan bide",
        "rcshowhideliu-hide": "veşêre",
        "rcshowhideanons": "Bikarhênerên netomarkirî (IP) $1",
        "recentchangeslinked": "Guherandinên têkilîdar",
        "recentchangeslinked-feed": "Guherandinên peywend",
        "recentchangeslinked-toolbox": "Guherandinên peywend",
-       "recentchangeslinked-summary": "Ev rûpela taybetî guherandinên dawî ji rûpelên lînkkirî nîşandide. Ew rûpel yê di lîsteya te ya şopandinê da ne bi nivîsa '''estûr''' tên nîşandan.",
+       "recentchangeslinked-summary": "Ev lîste, ji rûpela destnîşankirî (an jî endamên destnîşankirî) re rûpelê lîsteya guherandinên dawî ji rûpelên lînkkirî nîşandide. Ew rûpel yê di [[Special:Watchlist|lîsteya te ya şopandinê]] da bi nivîsa <strong>estûr<strong> tên nîşandan.",
        "recentchangeslinked-page": "Navê rûpelê",
        "upload": "Wêneyekî bar bike",
        "uploadbtn": "Wêneyekî bar bike",
        "upload-failure-subj": "Pirsgirêka barkirinê",
        "upload-warning-subj": "Hişyariya barkirinê",
        "upload-file-error": "Çewtiya navxweyî",
+       "uploadstash-refresh": "Lîsteya dosyeya nû bike",
+       "img-auth-accessdenied": "Gihandin hate astengkirin",
+       "img-auth-nofile": "Dosyeye \"$1\" tine.",
+       "img-auth-streaming": "\"$1\" te lîstandin.",
+       "http-invalid-url": "URL'ya nederbasdar: $1",
+       "http-invalid-scheme": "URL'yên bi şemaye \"$1\" naye piştgirîkirin.",
+       "http-request-error": "Xwestina HTTP ji ber çevtîyek nenas bi ser neket.",
+       "http-read-error": "Çewtîya xwendina HTTP.",
+       "http-timed-out": "Xwestina HTTP demborî bû.",
+       "http-curl-error": "Çewtîyek di hildana URL'de: $1",
        "license": "Lîsans:",
        "license-header": "Lîsans",
        "nolicense": "Ya hilbijartî nîne",
        "filehist-filesize": "Mezinahiya pelê",
        "filehist-comment": "Şîrove",
        "imagelinks": "Bikaranîna pelê",
-       "linkstoimage": "Di van rûpelan de lînkek ji vî wêneyî re heye:",
+       "linkstoimage": "Di van rûpelan de {{PLURAL:$1|page links|$1  lînkek}} ji vî dosyeye re heye:",
        "nolinkstoimage": "Rûpelekî ku ji vî wêneyî re girêdankê çêdike nîne.",
        "linkstoimage-redirect": "$1 (beralîkirina pelê) $2",
        "sharedupload-desc-here": "Ev pel ji $1 û dibe ku ji aliyê projeyên din ve jî hatibe bikaranîn.\nAgahdariya li ser [$2 rûpela danasîna pelê] li jêr tê nîşandan.",
        "protectedpages-noredirect": "Beralîkirinan veşêre",
        "protectedpagesempty": "Niha ti rûpelên ku bi vê parametreyê parastî ne, tine ne.",
        "protectedpages-page": "Rûpel",
+       "protectedpages-unknown-timestamp": "Nenas",
+       "protectedpages-unknown-performer": "Bikarhênera nenas",
        "protectedtitles": "Sernavên parastî",
        "listusers": "Lîsteya bikarhêneran",
        "listusers-editsonly": "Tenê bikarhênerên bi guherrandinan nîşan bide",
        "delete-toobig": "Dîroka vê rûpelê pir mezin e, zêdetirî $1 guherandin. Jêbirina van rûpelan hatîye sînorkirin, ji bo pir şaşbûn (error) di {{SITENAME}} da çênebin.",
        "delete-warning-toobig": "Dîroka vê rûpelê pir mezin e, zêdetirî $1 guherandin. Jêbirina van rûpelan dikarin şaşbûnan di database'ê {{SITENAME}} da çêkin; zandibe tu çi dikê!",
        "rollbacklink": "bizîvirîne pêş",
+       "rollbacklinkcount": "ji {{PLURAL:$1|guhertin|guhertina}} $1 vegere",
        "cantrollback": "Guherto naye vegerandin;\nbikarhênerê dawî, tenya nivîskarê vê rûpelê ye.",
        "alreadyrolled": "Guherandina dawiya [[$1]]\nbi [[User:$2|$2]] ([[User talk:$2|gotûbêj]]) venizivre; kesekî din ew rûpel zîvirandiye an guherandiye.\n\nGuhertoya dawî bi [[User:$3|$3]] ([[User talk:$3|gotûbêj]]).",
        "editcomment": "Kurtenivîsê guherandinê ev bû: \"''$1''\".",
        "invert": "Hemûyan bibîne",
        "namespace_association": "Navê têkilîdar",
        "blanknamespace": "(Sereke)",
-       "contributions": "Beşdariyên bikarhêner",
+       "contributions": "Beşdariyên {{GENDER:$1|bikarhêner}}",
        "contributions-title": "Beşdariyên ji bo $1",
        "mycontris": "Beşdariyên min",
        "contribsub2": "Ji bo $1 ($2)",
        "file-nohires": "Versyonekî jê mezintir tune.",
        "svg-long-desc": "Daneya SVG, mezinbûna rast: $1 × $2 pixel; mezinbûna daneyê: $3",
        "show-big-image": "Dosyeya orjînal",
+       "show-big-image-size": "$1 × $2 pixel",
        "newimages": "Pêşangeha wêneyên nû",
        "imagelisttext": "Jêr lîsteyek ji $1 file'an heye, duxrekirin $2.",
        "newimages-summary": "Ev rûpela taybet dosyeyên ku herî dawî hatine barkirin, nîşan dide.",
        "metadata-collapse": "Detayên dirêj veşêre",
        "exif-imagewidth": "Panbûn",
        "exif-imagelength": "Dirêjbûn",
+       "exif-orientation": "Beralîkirin",
        "exif-jpeginterchangeformatlength": "Byte'ên daneya JPEG",
        "exif-imagedescription": "Navê wêne",
        "exif-model": "Modela kamerayê",
+       "exif-software": "Nivîsbarîya tê bikaranîn",
        "exif-artist": "Nûser",
+       "exif-exifversion": "Versiyona exif",
        "exif-pixelydimension": "Firehiya wêne",
        "exif-pixelxdimension": "Dirêjiya wêne",
        "exif-usercomment": "Şîroveyên bikarhêner",
+       "exif-datetimedigitized": "Dema pencekîkirinê",
        "exif-exposuretime-format": "$1 sanî ($2)",
        "exif-brightnessvalue": "Zelalî",
        "exif-flash": "Flaş",
        "blankpage": "Rûpela vala",
        "tag-filter": "Parzûna [[Special:Tags|nîşankirinê]]:",
        "tag-filter-submit": "Parzûn",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etîket}}]]: $2)",
        "tags-title": "Nîşankirin",
        "tags-tag": "Tag name",
        "tags-edit": "biguherîne",
        "htmlform-selectorother-other": "Yên din",
        "htmlform-no": "Na",
        "htmlform-yes": "Erê",
-       "logentry-delete-delete": "$1 rûpela $3 jê bir",
+       "logentry-delete-delete": "$1 rûpela $3 {{GENDER:$2|jê bir}}",
        "revdelete-content-hid": "naverok veşartî ye",
        "revdelete-uname-hid": "navê bikarhêneriyê yê veşartî",
-       "logentry-move-move": "$1 navê $3 weke $4 guherand",
+       "logentry-move-move": "$1 rûpela $3 ji $4e re {{GENDER:$2|barkir}}",
        "logentry-move-move-noredirect": "$1 navê $3 guherand û kir $4",
        "logentry-move-move_redir": "$1 navê $3 guherand û kir $4",
        "logentry-newusers-newusers": "$1 hesabekî bikarhêneriyê çêkir",
-       "logentry-newusers-create": "$1 hesabekî bikarhêneriyê çêkir",
+       "logentry-newusers-create": "Hesabe bikarhêneriyê $1 {{GENDER:$2|hate çêkirin}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|hate barkirin}} $3",
        "rightsnone": "(tune)",
        "revdelete-summary": "kurteyê biguherîne",
        "feedback-back": "Paşve",
index 94f5b4b..17cccc2 100644 (file)
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4 heb gasa daskedyans",
        "logentry-move-move_redir": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4 dres daskedyans",
        "searchsuggest-search": "Hwilas",
-       "searchsuggest-containing": "ynni..."
+       "searchsuggest-containing": "ynni...",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin ystynnys",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Arwodhyow",
+       "special-characters-group-greek": "Greka",
+       "special-characters-group-arabic": "Arabek",
+       "special-characters-group-arabicextended": "Arabek ystynnys",
+       "special-characters-group-persian": "Persek",
+       "special-characters-group-hebrew": "Ebrow",
+       "special-characters-group-bangla": "Bengalek",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Tay",
+       "special-characters-group-lao": "Laosek",
+       "special-characters-group-khmer": "Khmer"
 }
index 0212208..0a78ffd 100644 (file)
        "import-interwiki-history": "Бул барактын бүткүл өзгөртүү тарыхын көчүрүү",
        "import-interwiki-templates": "Бардык калыптарды камтуу",
        "import-interwiki-submit": "Импорттоо",
-       "import-interwiki-namespace": "Максаттык ат мейкиндиги:",
-       "import-interwiki-rootpage": "Максаттык түпкү барагы (сөзсүз эмес):",
        "import-upload-filename": "Файл аты:",
        "import-comment": "Эскертүү:",
        "importstart": "Барактарды импорттоо...",
index 979b2fb..ed289f8 100644 (file)
        "metadata-help": "Hic fasciculus alias res continet, saepius a machina originatore additas, et (si fasciculus postea recensus sit) fortasse corrigendas.",
        "metadata-expand": "Plura ostende",
        "metadata-collapse": "Partim celare",
+       "metadata-fields": "Campi metadatorum imaginis in hoc nuntio enumerati in pagina imaginis includentur cum tabula metadatorum occludatur.\nAlii abscondentur nisi actio contraria faciatur.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Amplitudo",
        "exif-imagelength": "Altitudo",
        "exif-bitspersample": "Biti per componentem",
index d9a1624..543e8ef 100644 (file)
        "no-null-revision": "Déi nei Nullversioun fir d'Säit \"$1\" konnt net ugeluecht ginn",
        "badtitle": "Schlechten Titel",
        "badtitletext": "De gewënschten Titel ass net valabel, eidel, oder een net korrekten Interwiki Link.",
+       "title-invalid-interwiki": "Am Titel ass en Interwiki-Link",
        "perfcached": "Dës Date kommen aus dem Tëschespäicher a si méiglecherweis net aktuell. Maximal {{PLURAL:$1|ee Resultat ass|$1 Resultater sinn}} am Tësche späicher disponibel.",
        "perfcachedts": "Dës Donnéeë kommen aus dem Tëschespäicher, a goufe fir d'lescht den $1 aktualiséiert. Maximal {{PLURAL:$4|ee Resultat ass|$4 Resultater sinn}} am Tëschespäicher disponibel.",
        "querypage-no-updates": "D'Aktualiséierung vun dëser Säit ass zur Zäit ausgeschalt. D'Date gi bis op weideres net aktualiséiert.'''",
        "content-model-css": "CSS",
        "content-json-empty-object": "Eidelen Objet",
        "content-json-empty-array": "Eidel Tabell",
+       "duplicate-args-category": "Säiten, déi duebel Argumenter a Schablounenopriff gebrauchen",
        "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.",
        "protect-dropdown": "*Déi heefegst Grënn fir eng Säit ze spären\n** Weblink-Spam\n** Permanenten Ännerungskonflikt\n** Dacks benotzt Schablounen\n** Säit déi dacks gekuckt gëtt",
        "protect-edit-reasonlist": "Grënn vun der Protektioun änneren",
        "protect-expiry-options": "1 Stonn:1 hour,1 Dag:1 day,1 Woch:1 week,2 Wochen:2 weeks,1 Mount:1 month,3 Méint:3 months,6 Méint:6 months,1 Joer:1 year,onbegrenzt:infinite",
-       "restriction-type": "Berechtigung:",
+       "restriction-type": "Autorisatioun:",
        "restriction-level": "Niveau vun de Limitatiounen:",
        "minimum-size": "Mindestgréisst",
        "maximum-size": "Maximalgréisst:",
index 7e6ddf6..8372a30 100644 (file)
        "import-interwiki-history": "Volledige gesjiedenis van deze pazjena ouch kopiëre",
        "import-interwiki-templates": "Alle sjablone opnaeme",
        "import-interwiki-submit": "Importere",
-       "import-interwiki-namespace": "Doelnaamruumdje:",
        "import-upload-filename": "Bestandjsnaam:",
        "import-comment": "Opmèrking:",
        "importtext": "Gebroek de functie [[Special:Export|export]] in de wiki wo de informatie vanaaf kömp. \nSlaon de oetveur op dien eige systeem op, en voeg dae dao nao hiej toe.",
index fc58f02..69e59e3 100644 (file)
@@ -71,7 +71,7 @@
        "editfont-sansserif": "Bezserifa fonts",
        "editfont-serif": "Serifa fonts",
        "sunday": "svētdiena",
-       "monday": "Pirmdiena",
+       "monday": "pirmdiena",
        "tuesday": "otrdiena",
        "wednesday": "trešdiena",
        "thursday": "ceturtdiena",
        "disclaimers": "Saistību atrunas",
        "disclaimerpage": "Project:Saistību atrunas",
        "edithelp": "Labošanas palīdzība",
+       "helppage-top-gethelp": "Palīdzība",
        "mainpage": "Sākumlapa",
        "mainpage-description": "Sākumlapa",
        "policy-url": "Project:Politika",
index 674c343..46c4e7f 100644 (file)
        "import-interwiki-sourcepage": "源頁:",
        "import-interwiki-history": "審、誌同匯",
        "import-interwiki-submit": "入匯",
-       "import-interwiki-namespace": "入名集:",
        "import-upload-filename": "檔名:",
        "import-comment": "註:",
        "importtext": "請[[Special:Export|出匯]]儲之。\n再入匯於此。",
index ffa712d..9b646e0 100644 (file)
        "import-interwiki-history": "अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ",
        "import-interwiki-templates": "सभटा नमूना शामिल करू",
        "import-interwiki-submit": "आनू",
-       "import-interwiki-namespace": "लक्ष्य नामगाम:",
        "import-upload-filename": "संचिकानाम:",
        "import-comment": "समीक्षा:",
        "importtext": "मूल विकी [[Special:Export|export utility]] क प्रयोग कऽ संचिका पठाउ।\nअपन संगणकमे एकरा सुरक्षित करू आ एतए उपारोपित करू।",
index 46f6d38..2e0ae65 100644 (file)
        "import-interwiki-history": "Копияфтомс тя лопать сембе историянь верзиенза",
        "import-interwiki-templates": "Сувафтомс сембе шаблотт",
        "import-interwiki-submit": "Таргамс",
-       "import-interwiki-namespace": "Пачфтема лемботма:",
-       "import-interwiki-rootpage": "Ёнонь юрлопась (кочкамать коряс):",
        "import-upload-filename": "Файллем:",
        "import-comment": "Мяльполаткс:",
        "importtext": "Эняльттяма таргак файлать Вики лисьмостонза [[Special:Export|вима лезкссь]]. Ванфтк содама машиназот ди тонк тяза.",
        "import-options-wrong": "Аф виде {{PLURAL:$2|кочкама|кочкамат}}: <nowiki>$1</nowiki>",
        "importlogpage": "Таргамань лувома",
        "importlogpagetext": "Администрациеса лопань таргаматне петнемань историяснон мархта иля Викиста.",
-       "import-logentry-upload": "таргаф [[$1]] файлонь тонгомать вельде",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|илякстоптома|илякстоптомат}}",
-       "import-logentry-interwiki": "шашфтф Викитнень ёткса $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|илякстоптома|илякстоптомат}} $2-ста",
        "tooltip-pt-userpage": "Тонь тиинь лопаце",
        "tooltip-pt-anonuserpage": "Тиить лопанц IP потмоса, конань эса тон петнесак кода",
index e63929f..018e415 100644 (file)
        "importstart": "Mangimpor laman...",
        "importnosources": "Indak ado sumber impor transwiki nan lah dibuek dan pamuatan riwayaik sacaro langsuang alah dinon-aktipan.",
        "importlogpagetext": "Administrasi laman impor jo riwayaik panyuntiangannyo dari wiki lain.",
-       "import-logentry-upload": "mangimpor [[$1]] malalui pangunggahan berkas",
        "tooltip-pt-userpage": "Laman pangguno Sanak",
        "tooltip-pt-anonuserpage": "Laman pangguno IP Sanak",
        "tooltip-pt-mytalk": "Laman rundiang Sanak",
        "expand_templates_xml_output": "Hasil XML",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Hapuih komentar",
-       "expand_templates_preview": "Pratonton"
+       "expand_templates_preview": "Pratonton",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin tambahan",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbol",
+       "special-characters-group-greek": "Yunani",
+       "special-characters-group-cyrillic": "Sirilik",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-arabicextended": "Arab tambahan",
+       "special-characters-group-persian": "Persia",
+       "special-characters-group-hebrew": "Ibrani",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarat",
+       "special-characters-group-devanagari": "India kuno",
+       "special-characters-group-thai": "Siam",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "en dash",
+       "special-characters-title-emdash": "em dash",
+       "special-characters-title-minus": "tando kurang"
 }
index 933cb0c..e02ba2e 100644 (file)
        "no-null-revision": "Не можев да направам нова ништовна преработка на страницата „$1“",
        "badtitle": "Неисправен наслов",
        "badtitletext": "Бараниот наслов е грешен, празен или неисправно поврзан меѓујазичен или меѓувики наслов. \nМоже да содржи недопуштени знаци.",
+       "title-invalid-empty": "Бараниот наслов е празен или го содржи само називот на именскиот простор.",
+       "title-invalid-utf8": "Бараниот наслов содржи неважечка UTF-8-низа.",
+       "title-invalid-interwiki": "Насловот содржи меѓујазична врска",
+       "title-invalid-talk-namespace": "Бараниот наслов се однесува на страница за разговор што не може да постои.",
+       "title-invalid-characters": "Бараниот наслов содржи неважечки знаци: „$1“.",
+       "title-invalid-relative": "Насловот има односна патека. Односните наслови (./, ../) се неважечки бидејќи честопати се недостапни за прелистувачот.",
+       "title-invalid-magic-tilde": "Побараниот наслов содржи низа неважечки тилди (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Бараниот наслов е предолг. Не смее да биде поголем од $1 бајти, шифриран според UTF-8.",
+       "title-invalid-leading-colon": "Бараниот наслов содржи неважечки две точки на почетокот.",
        "perfcached": "Следните податоци се меѓускладирани и може да не се тековни. Во меѓускладот {{PLURAL:$1|е достапен највеќе еден резултат|се достапни највеќе $1 резултати}}.",
        "perfcachedts": "Следните податоци се меѓускладирани, последен пат подновени на $1. Во меѓускладот {{PLURAL:$4|е достапен највеќе еден резултат|се достапни највеќе $4 резултати}}.",
        "querypage-no-updates": "Подновите на оваа страница моментално се оневозможени.\nПодатоците овде во моментов нема да се подновуваат.",
index 9c892db..5c320a6 100644 (file)
        "no-null-revision": "\"$1\" എന്ന താളിന് പുതിയ ശൂന്യമായ മാറ്റമുള്ള നാൾപ്പതിപ്പ് സൃഷ്ടിക്കാൻ കഴിഞ്ഞില്ല",
        "badtitle": "അസാധുവായ തലക്കെട്ട്",
        "badtitletext": "താങ്കൾ ആവശ്യപ്പെട്ട തലക്കെട്ടുള്ള ഒരു താൾ നിലവിലില്ല. ഇതു തെറ്റായി അന്തർഭാഷാ/അന്തർവിക്കി കണ്ണി ചെയ്യപ്പെട്ടതു മൂലമോ, തലക്കെട്ടിൽ ഉപയോഗിക്കരുതാത്ത അക്ഷരരൂപങ്ങൾ ഉപയോഗിച്ചതു മൂലമോ സംഭവിച്ചതായിരിക്കാം.",
+       "title-invalid-empty": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ട് ശൂന്യമാണ് അല്ലെങ്കിൽ ഒരു നാമമേഖലയുടെ പേര് മാത്രം ഉൾക്കൊള്ളുന്നതാണ്.",
+       "title-invalid-utf8": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ടിൽ അസാധുവായ യു.ടി.എഫ്.-8 ശ്രേണി ആണുള്ളത്.",
+       "title-invalid-interwiki": "തലക്കെട്ടിൽ ഒരു അന്തർവിക്കി കണ്ണി ഉണ്ട്",
+       "title-invalid-talk-namespace": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ട് നിലവിലില്ലാത്ത ഒരു സംവാദത്താളിനെയാണ് സൂചിപ്പിക്കുന്നത്.",
+       "title-invalid-characters": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ടിൽ അസാധുവായ അക്ഷരങ്ങളുണ്ട്: \"$1\".",
        "perfcached": "താഴെ കൊടുത്തിരിക്കുന്ന വിവരം ശേഖരിച്ചു വെച്ചിരിക്കുന്നതാണ്, അതുകൊണ്ട് ചിലപ്പോൾ പുതിയതായിരിക്കണമെന്നില്ല. പരമാവധി {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.",
        "perfcachedts": "താഴെയുള്ള വിവരങ്ങൾ ശേഖരിച്ച് വെച്ചവയിൽ പെടുന്നു, അവസാനം പുതുക്കിയത് $1-നു ആണ്‌. പരമാവധി {{PLURAL:$4|ഒരു ഫലം|$4 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.",
        "querypage-no-updates": "ഈ താളിന്റെ പുതുക്കൽ തൽക്കാലം നടക്കുന്നില്ല. ഇവിടുള്ള വിവരങ്ങൾ ഏറ്റവും പുതിയതാവണമെന്നില്ല.",
index 7fe9c72..084057a 100644 (file)
        "import-interwiki-history": "Энэ хуудсын бүх хувилбаруудын түүхийг хуулах",
        "import-interwiki-templates": "Бүх загварыг оруулах",
        "import-interwiki-submit": "Импортлох",
-       "import-interwiki-namespace": "Зорьсон хуудсын төрөл:",
        "import-upload-filename": "Файлын нэр:",
        "import-comment": "Тайлбар:",
        "importtext": "[[Special:Export|экспорт багажийг]]  ашиглан файлыг эх үүсвэр викигээс татаад, өөрийн дискэнд хадгалж, энд оруулна уу.",
        "import-invalid-interwiki": "Өгөгдсөн викигээс оруулах боломжгүй байна.",
        "importlogpage": "Оруулалтын лог",
        "importlogpagetext": "Администраторуудын бусад викигээс засварын түүхтэй нь оруулсан хуудсууд.",
-       "import-logentry-upload": "файлын оруулалтаар [[$1]]-г орууллаа",
        "import-logentry-upload-detail": "$1 засвар",
-       "import-logentry-interwiki": "$1-г транс-викидлээ",
        "import-logentry-interwiki-detail": "$2-с авсан $1 засвар",
        "javascripttest": "JavaScript туршилт",
        "javascripttest-pagetext-noframework": "Уг хуудсыг JavaScript тест хийхэд ашиглана.",
index ead4fef..e028891 100644 (file)
        "import-interwiki-history": "या पानाकरिताची साऱ्या इतिहास आवर्तनांची नक्कल करा",
        "import-interwiki-templates": "साचे आंतरभूत करा",
        "import-interwiki-submit": "आयात",
-       "import-interwiki-namespace": "पाने नामविश्वात स्थानांतरीत करा:",
-       "import-interwiki-rootpage": "स्थानकाचे मुळ-पृष्ठ (वैकल्पिक):",
        "import-upload-filename": "संचिकानाव:",
        "import-comment": "प्रतिक्रीया:",
        "importtext": "कृपया [[Special:Export|निर्यात सुविधा]] वापरून स्रोत विकिकडून संचिका निर्यात करा,ती तुमच्या तबकडीवर जतन करा आणि येथे चढवा.",
index 14b518c..b69882b 100644 (file)
        "import-interwiki-history": "Salin semua versi sejarah bagi laman ini",
        "import-interwiki-templates": "Sertakan semua templat",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Ruang nama destinasi:",
-       "import-interwiki-rootpage": "Halaman akar tujuan (tidak wajib):",
        "import-upload-filename": "Nama fail:",
        "import-comment": "Komen:",
        "importtext": "Sila eksport fail daripada sumber wiki dengan menggunakan [[Special:Export|utiliti eksport]].\nSimpan dalam komputer anda dan muat naiknya di sini.",
        "import-rootpage-nosubpage": "Ruang nama \"$1\" halaman akar tidak membenarkan subhalaman.",
        "importlogpage": "Log import",
        "importlogpagetext": "Senarai tindakan import laman dengan keseluruhan sejarah suntingannya daripada wiki lain.",
-       "import-logentry-upload": "mengimport [[$1]] dengan memuat naik fail",
        "import-logentry-upload-detail": "$1 semakan diimportkan",
-       "import-logentry-interwiki": "$1 dipindahkan ke wiki lain",
        "import-logentry-interwiki-detail": "$1 semakan diimportkan daripada $2",
        "javascripttest": "Ujian JavaScript",
        "javascripttest-pagetext-noframework": "Laman ini ditempah untuk menjalankan ujian JavaScript.",
        "json-error-utf8": "Aksara UTF-8 cacat, mungkin salah dikodkan",
        "json-error-recursion": "Sekurang-kurangnya satu rujukan rekursif untuk dikodkan di dalam nilai berkenaan",
        "json-error-inf-or-nan": "Sekurang-kurangnya satu nilai NAN atau INF untuk dikodkan di dalam nilai berkenaan",
-       "json-error-unsupported-type": "Diberikannya nilai jenis yang tidak boleh dikodkan"
+       "json-error-unsupported-type": "Diberikannya nilai jenis yang tidak boleh dikodkan",
+       "special-characters-group-latin": "Rumi",
+       "special-characters-group-latinextended": "Rumi lanjutan",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbol",
+       "special-characters-group-greek": "Yunani",
+       "special-characters-group-cyrillic": "Cyril",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-arabicextended": "Arab lanjutan",
+       "special-characters-group-persian": "Parsi",
+       "special-characters-group-hebrew": "Ibrani",
+       "special-characters-group-bangla": "Benggala",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "sengkang en",
+       "special-characters-title-emdash": "sengkang em",
+       "special-characters-title-minus": "tanda tolak"
 }
index da14248..c35e221 100644 (file)
        "import": "Таргамс лопатнень",
        "import-interwiki-templates": "Совавтомс весе лопа парцунтнэнь",
        "import-interwiki-submit": "Таргамс",
-       "import-interwiki-namespace": "Норовазь лемпотмось:",
        "import-upload-filename": "Файла лемесь:",
        "import-comment": "Арсемат-мельть:",
        "importstart": "Лопатне совавтовить...",
        "duration-decades": "$1 {{PLURAL:$1|1=кеменьие|кеменьиеть}}",
        "duration-centuries": "$1 {{PLURAL:$1|1=пинге|пингеть}}",
        "duration-millennia": "$1 {{PLURAL:$1|1=тёжтьие|тёжтьиеть}}",
-       "expand_templates_preview": "Васнянь неевтезэ"
+       "expand_templates_preview": "Васнянь неевтезэ",
+       "special-characters-group-latin": "Латиница",
+       "special-characters-group-symbols": "Тешкстт",
+       "special-characters-group-cyrillic": "Кириллица"
 }
index e6704e3..19e6916 100644 (file)
        "logentry-newusers-newusers": "$1  بساتن اتا حساب کاروری",
        "logentry-newusers-create": "$1  بساتن اتا حساب کاروری",
        "rightsnone": "(هچّی)",
-       "feedback-subject": "موضوع:",
-       "feedback-message": "پیغوم:",
-       "feedback-cancel": "ول هاکردن",
-       "feedback-submit": "ارسال پیشنهادات و انتقادات",
        "feedback-adding": "بی‌یشتن پیشنهادات و انتقادات...",
+       "feedback-cancel": "ول هاکردن",
        "feedback-error1": "خطا: جواب‌ئون نشناسی‌یه API جه",
        "feedback-error2": "خطا: شکست دچی‌ین سر",
        "feedback-error3": "خطا: جواب ندائن API",
+       "feedback-message": "پیغوم:",
+       "feedback-subject": "موضوع:",
+       "feedback-submit": "ارسال پیشنهادات و انتقادات",
        "api-error-badaccess-groups": "شما اجازهٔ باربی‌یشتن پرونده‌ها ره این ویکی دله ندارنی.",
        "api-error-badtoken": "خطای داخلی: کد امنیتی اشتبائه (Bad token).",
        "api-error-copyuploaddisabled": "باربی‌یشتن با استفاده از نشونی اینترنتی این کارساز دله غیرفعاله.",
index 291d243..6401ecd 100644 (file)
        "no-null-revision": "Nun se può crià na nnova revisione nulla p' 'a paggena \"$1\"",
        "badtitle": "'O nnomme nun è jùsto",
        "badtitletext": "'O titolo d' 'a paggena richiesta è abbacante, sbagliato o pure nun è linkato buono a 'o titolo inter-lengua o inter-wiki.\nPutesse pure tené uno o cchiù carattere ca nun se ponno usà dint'e titule.",
+       "title-invalid-empty": "'O titulo d' 'a paggena addimannata è abbacante o cuntene surtanto 'o nomme 'e nu namespace.",
+       "title-invalid-utf8": "'O titulo 'e paggena addimannato cuntene na sequenza invalida UTF-8.",
+       "title-invalid-interwiki": "'O titulo cuntene nu link interwiki",
+       "title-invalid-talk-namespace": "'O titulo 'e paggena addimannato riferisce a na paggena 'e chiacchiera ca putesse nun esistere.",
+       "title-invalid-characters": "'O titulo 'e paggena addimannato cuntene carattere invalide: \"$1\".",
+       "title-invalid-relative": "'O titulo tene nu nnerizzo relativo. 'E titule 'e paggene relative (./, ../) nun songhe valide, pecché nun se putessero trasì quanno s'ausasse nu navigatore 'utente.",
+       "title-invalid-magic-tilde": "'O titulo 'e paggena addimannato cuntene na sequenza che facesse maggie, e nun serve (<nowiki>~~~</nowiki>).",
+       "title-invalid-leading-colon": "'O titulo 'e paggena addimannato cuntene na culonna invalida addò 'o cummencio.",
        "perfcached": "Può darse, ch' 'e ddate ca stanno ccà (\"ncache\") nun song'agghiurnate. Nu massimo 'e {{PLURAL:$1|unu risultato è|$1 risultate songhe}} a disposizione 'n \"cache\".",
        "perfcachedts": "'E ddate ca stanno ccà songhe asciute 'a na copia \"cache\" d' 'o database, 'o cuale tene l'úrdemo agghiurnamento 'o $1. Nu massimo 'e {{PLURAL:$4|unu risultato è|$4 risultate songhe}} a disposizione dint'a \"cache\".",
        "querypage-no-updates": "Ll'agghiurnamente pe' sta paggena songo sospese mmo'. 'E ddate cuntenute ccà nun s'agghiurnarranno.",
index d971226..98f487f 100644 (file)
        "history-feed-description": "Revisjonshistorikk for denne siden",
        "history-feed-item-nocomment": "$1 på $2",
        "history-feed-empty": "Den etterspurte siden finnes ikke.\nDen kan ha blitt slettet fra wikien, eller fått et nytt navn.\nPrøv å [[Special:Search|søke]] etter beslektede sider.",
+       "history-edit-tags": "Rediger merkene til de valgte revisjonene",
        "rev-deleted-comment": "(redigeringskommentar fjernet)",
        "rev-deleted-user": "(brukernavn fjernet)",
        "rev-deleted-event": "(loggoppføring fjernet)",
        "listfiles-delete": "slett",
        "listfiles-summary": "Denne spesialsiden viser alle opplastede filer.",
        "listfiles_search_for": "Søk etter filnavn:",
+       "listfiles-userdoesnotexist": "Brukerkontoen «$1» er ikke registrert.",
        "imgfile": "fil",
        "listfiles": "Filliste",
        "listfiles_thumb": "Miniatyrbilde",
        "patrol-log-page": "Patruljeringslogg",
        "patrol-log-header": "Dette er en logg over patruljerte sideversjoner.",
        "log-show-hide-patrol": "$1 patruljeringslogg",
+       "log-show-hide-tag": "$1 merkelogg",
        "deletedrevision": "Slettet gammel revisjon $1.",
        "filedeleteerror-short": "Feil under filsletting: $1",
        "filedeleteerror-long": "Feil oppsto under filsletting:\n\n$1",
index cadd5a7..721933a 100644 (file)
        "rcshowhidemine-show": "Bekiek",
        "rcshowhidemine-hide": "Verbarg",
        "rclinks": "Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen<br />$3",
-       "diff": "wiezig",
+       "diff": "wiez",
        "hist": "gesch",
        "hide": "verbarg",
        "show": "bekiek",
index f8301c3..675cbaa 100644 (file)
        "import-interwiki-history": "Importeer all Versionen vun disse Siet",
        "import-interwiki-templates": "All Vörlagen inslaten",
        "import-interwiki-submit": "Rinhalen",
-       "import-interwiki-namespace": "Sied in dissen Naamruum halen:",
        "import-upload-filename": "Dateinaam:",
        "import-comment": "Kommentar:",
        "importtext": "Exporteer de Siet vun dat Utgangswiki mit Special:Export un laad de Datei denn över disse Siet weer hooch.",
index b31b2aa..3a53438 100644 (file)
        "import-interwiki-history": "यो पृष्ठकोलागि सबै इतिहास संशोधनहरु प्रतिलिपि गर्ने",
        "import-interwiki-templates": "सबै टेम्प्लेटहरु(नमुना) समेट्ने",
        "import-interwiki-submit": "आयात",
-       "import-interwiki-namespace": "गन्तव्य नेमस्पेस :",
        "import-upload-filename": "फाइल नाम:",
        "import-comment": "टिप्पणी :",
        "importstart": "पृष्ठ आयात गरिँदै...",
index ffe1976..3020f99 100644 (file)
        "markedaspatrollederrornotify": "Markeren als gecontroleerd mislukt.",
        "patrol-log-page": "Markeerlogboek",
        "patrol-log-header": "Dit logboek bevat versies die gemarkeerd zijn als gecontroleerd.",
-       "log-show-hide-patrol": "Markeerlogboek $1",
-       "log-show-hide-tag": "Label-logboekregel $1",
+       "log-show-hide-patrol": "markeerlogboek $1",
+       "log-show-hide-tag": "labellogboek $1",
        "deletedrevision": "De oude versie $1 is verwijderd",
        "filedeleteerror-short": "Fout bij het verwijderen van bestand: $1",
        "filedeleteerror-long": "Er zijn fouten opgetreden bij het verwijderen van het bestand:\n\n$1",
index fd53485..0ad67f7 100644 (file)
        "rcshowhideminor": "ଛୋଟମୋଟ ବଦଳ $1",
        "rcshowhideminor-show": "ଦେଖାଇବେ",
        "rcshowhideminor-hide": "ଲୁଚାଇବେ",
-       "rcshowhidebots": "$1 ବଟଗୁଡିକ",
+       "rcshowhidebots": "ବଟଗୁଡ଼ିକ $1",
        "rcshowhidebots-show": "ଦେଖାଇବେ",
        "rcshowhidebots-hide": "ଲୁଚାଇବେ",
        "rcshowhideliu": "ପଞ୍ଜୀକୃତ ସଭ୍ୟ $1",
index 89ef183..281f27f 100644 (file)
        "history_short": "Истори",
        "updatedmarker": "ноггонд мæ фæстаг æрбахызтæй",
        "printableversion": "Мыхурæн",
-       "permalink": "УдгаÑ\81 æрвитæн",
+       "permalink": "Ð\98Ñ\83гæндзон æрвитæн",
        "print": "Мыхуыр",
        "view": "Кæсын",
        "edit": "Ивын",
        "createacct-emailrequired": "Электрон посты адрис",
        "createacct-emailoptional": "Электрон посты адрис (фæндон)",
        "createacct-email-ph": "Бафысс дæ электрон посты адрис",
-       "createaccountmail": "Рæстæгмæ пароль халæй ист æрцæуæт æмæ бындæр цы электрон пост ис, уырдæм æрвыст æрцæуæт",
+       "createaccountmail": "Рæстæгмæ пароль халæй ист æрцæуæд æмæ амынд электрон посты адрисмæ æрвыст æрцæуæд",
        "createacct-realname": "Æцæг ном (фæндон)",
        "createaccountreason": "Бындур:",
        "createacct-reason": "Бындур",
        "passwordreset-emaildisabled": "Электрон пост ацы викийы хицæн у.",
        "passwordreset-username": "Фæсномыг:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Цы e-mail рауадис, уый æвдыст æрцæуæт?",
+       "passwordreset-capture": "Цы фыстæг рауадис, уый фенис?",
        "passwordreset-capture-help": "Кæд сæвæрай ацы нысан, уæд дын e-mail (рæстæгмæ паролимæ) æвдыст æрцæудзæн. Архайæгмæ дæр æрвыст æрцæудзæн.",
        "passwordreset-email": "Электрон посты адрис:",
        "passwordreset-emailtitle": "{{grammar:genitive|{{SITENAME}}}} акканты тыххæй",
        "action-upload": "ацы файл æвгæнын",
        "action-delete": "ацы фарс схафын",
        "nchanges": "$1 {{PLURAL:$1|ивд|ивды}}",
+       "enhancedrc-history": "истори",
        "recentchanges": "Фæстаг ивдтытæ",
        "recentchanges-legend": "Фæстаг ивдтыты фадæттæ",
        "recentchanges-summary": "Ацы фарсыл викийы фæстаг ивдтытæ фенæн ис.",
        "rcnotefrom": "Бындæр сты æвдыст ивдтытæ '''$2'''-æй ('''{{grammar:genitive|$1}}''' йонг).",
        "rclistfrom": "Равдисын ивдтытæ амæй фæстæ: $3 $2",
        "rcshowhideminor": "$1 чысыл ивдтытæ",
+       "rcshowhideminor-show": "Равдис",
+       "rcshowhideminor-hide": "Бамбæхс",
        "rcshowhidebots": "$1 роботты",
+       "rcshowhidebots-show": "Равдис",
+       "rcshowhidebots-hide": "Бамбæхс",
        "rcshowhideliu": "$1 регистрацигонд архайæджы",
+       "rcshowhideliu-hide": "Бамбæхс",
        "rcshowhideanons": "$1 æнæном архайджыты",
+       "rcshowhideanons-show": "Равдис",
+       "rcshowhideanons-hide": "Бамбæхс",
        "rcshowhidepatr": "$1 бæрæггонд ивдтæ",
        "rcshowhidemine": "$1 мæ ивдтытæ",
+       "rcshowhidemine-show": "Равдис",
+       "rcshowhidemine-hide": "Бамбæхс",
        "rclinks": "Фæстаг $1 ивдтытæ (афæстаг $2 боны дæргъы чи ’рцыдысты) равдис;\n$3",
        "diff": "хицæн.",
        "hist": "лог",
        "upload-file-error": "Мидæггаг рæдыд",
        "license": "Лицензи:",
        "license-header": "Лицензи",
+       "imgfile": "файл",
        "listfiles": "Файлты номхыгъд",
        "listfiles_thumb": "Къаддæргонд",
        "listfiles_date": "Датæ",
        "undelete-search-submit": "Агурын",
        "namespace": "Номдон:",
        "invert": "Зыгъуыммæ æвзæрст",
+       "namespace_association": "Баст номдон",
        "blanknamespace": "(Сæйраг)",
        "contributions": "{{GENDER:$1|Архайæджы}} бавæрд",
        "contributions-title": "Архайæджы бавæрд: $1",
        "tooltip-feed-atom": "Atom feed ацы фарсæн",
        "tooltip-t-contributions": "Ацы архайæджы бавæрд фенын",
        "tooltip-t-emailuser": "Арвитын фыстæг ацы архайæгмæ",
+       "tooltip-t-info": "Ацы фарсы тыххæй",
        "tooltip-t-upload": "Файлтæ бавгæнынæн",
        "tooltip-t-specialpages": "Сæрмагонд фæрсты номхыгъд",
        "tooltip-t-print": "Ацы фарс мыхуырмæ цæттæ форматы",
        "lastmodifiedatby": "Ацы фарс фæстаг хатт фæивта $3, $1, $2 сахатыл.",
        "others": "æндæртæ",
        "spamprotectiontitle": "Спамы ныхмæ фильтр",
+       "pageinfo-toolboxlink": "Ацы фарсы тыххæй",
        "previousdiff": "← Зæронддæр ивд",
        "nextdiff": "Фæстæдæр ивд →",
        "thumbsize": "Къаддæргонды бæрц:",
        "file-nohires": "Нæй ын стырдæр фæлтæр .",
        "svg-long-desc": "SVG файл, номиналон $1 × $2 пикселы, файлы бæрц: $3",
        "show-big-image": "Оригиналы файл",
+       "show-big-image-preview": "Къаддæргонды ас: $1",
+       "show-big-image-size": "$1 × $2 пикселы",
        "newimages": "Ног нывты галерей",
        "ilsubmit": "Агурын",
        "bydate": "рæстæгмæ гæсгæ",
        "duration-centuries": "$1 {{PLURAL:$1|æнус|æнусы}}",
        "duration-millennia": "$1 {{PLURAL:$1|мин аз|мин азы}}",
        "expand_templates_ok": "Афтæ уæд!",
-       "expand_templates_preview": "Разæркаст"
+       "expand_templates_preview": "Разæркаст",
+       "special-characters-group-latin": "Латинаг",
+       "special-characters-group-latinextended": "Латинаг, уæрæхгонд",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Символтæ",
+       "special-characters-group-greek": "Грекъаг",
+       "special-characters-group-cyrillic": "Кириллон",
+       "special-characters-group-arabic": "Араббаг",
+       "special-characters-group-arabicextended": "Араббаг, уæрæхгонд",
+       "special-characters-group-persian": "Персайнаг",
+       "special-characters-group-hebrew": "Иврит",
+       "special-characters-group-bangla": "Бенгалаг",
+       "special-characters-group-tamil": "Тамилаг",
+       "special-characters-group-telugu": "Телугуйаг",
+       "special-characters-group-sinhala": "Сингалаг",
+       "special-characters-group-gujarati": "Гуджараттаг",
+       "special-characters-group-devanagari": "Девангариаг",
+       "special-characters-group-thai": "Тайаг",
+       "special-characters-group-lao": "Лаойаг",
+       "special-characters-group-khmer": "Кхмераг",
+       "special-characters-title-endash": "ен дæш",
+       "special-characters-title-emdash": "ем дæш",
+       "special-characters-title-minus": "минусы нысан"
 }
index 1c96f7d..804a2c7 100644 (file)
        "import-interwiki-sourcepage": "ਮੁੱਢਲਾ ਸਫ਼ਾ:",
        "import-interwiki-templates": "ਸਾਰੇ ਫਰਮੇ ਸ਼ਾਮਲ ਕਰੋ",
        "import-interwiki-submit": "ਮੰਗਾਓ",
-       "import-interwiki-namespace": "ਨੀਯਤ ਨਾਂ-ਥਾਂ:",
        "import-upload-filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:",
        "import-comment": "ਟਿੱਪਣੀ:",
        "importstart": "ਪੇਜ ਇੰਪੋਰਟ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ...",
index 0ca450f..48cc5e4 100644 (file)
        "expand_templates_output": "Result",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Anmaerrickinge lösche",
-       "expand_templates_preview": "Aagucke"
+       "expand_templates_preview": "Aagucke",
+       "special-characters-group-ipa": "IPA"
 }
index 98253f6..41a5b85 100644 (file)
        "no-null-revision": "Nie można utworzyć zerowej wersji strony \"$1\"",
        "badtitle": "Niepoprawny tytuł",
        "badtitletext": "Podano niepoprawny tytuł strony. Prawdopodobnie jest pusty lub zawiera znaki, których użycie jest zabronione.",
+       "title-invalid-interwiki": "Tytuł zawiera link interwiki",
        "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. W pamięci podręcznej {{PLURAL:$1|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$1|jeden wynik|$1 wyniki|$1 wyników}}.",
        "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. W pamięci podręcznej {{PLURAL:$4|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$4|jeden wynik|$4 wyniki|$4 wyników}}.",
        "querypage-no-updates": "Uaktualnienia dla tej strony są obecnie wyłączone. Znajdujące się tutaj dane nie zostaną odświeżone.",
        "revdelete-reason-dropdown": "* Najczęstsze powody usunięcia\n** Naruszenie praw autorskich\n** Niestosowny komentarz lub informacja naruszająca prywatność\n** Niestosowna nazwa użytkownika\n** Potencjalnie oszczercza informacja",
        "revdelete-otherreason": "Inny lub dodatkowy powód:",
        "revdelete-reasonotherlist": "Inny powód",
-       "revdelete-edit-reasonlist": "Edycja listy powodów usunięcia pliku",
+       "revdelete-edit-reasonlist": "Edytuj listę przyczyn usunięcia",
        "revdelete-offender": "Autor wersji",
        "suppressionlog": "Rejestr utajniania",
        "suppressionlogtext": "Poniżej znajduje się lista usunięć i blokad utajnionych przed administratorami.\nZobacz [[Special:BlockList|rejestr blokad]], jeśli chcesz sprawdzić aktualne zakazy i blokady.",
index 849d72c..eaf8552 100644 (file)
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La tichëtta sì-dapress a peul|Le tichëtte sì-dapress a peulo}} nen esse giontà a man: $1",
        "tags-update-remove-not-allowed-one": "La tichëtta «$1» a peul nen esse gavà.",
        "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|La tichëtta sì-dapress a peul|Le tichëtte sì-dapress a peulo}} pa esse gavà a man: $1",
+       "tags-edit-title": "Modifiché le tichëtte",
+       "tags-edit-manage-link": "Gestì le tichëtte",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Revision selessionnà}} ëd [[:$2]]:",
        "comparepages": "Confronté dle pàgine",
        "compare-page1": "Pàgina 1",
        "compare-page2": "Pàgina 2",
index d0b33ea..56e3151 100644 (file)
        "import-interwiki-history": "Kōpis wissans šisse pāusas redigīsnas istōrijan",
        "import-interwiki-templates": "Ebimmais wissans šablōnins",
        "import-interwiki-submit": "Impōrtis",
-       "import-interwiki-namespace": "Kakīnslis tītelin plattibi:",
        "import-upload-filename": "Zūrbrukes pabilisnā:",
        "import-comment": "Kumentārs:",
        "importtext": "Ekspōrt zūrbrukin iz appus wiki tērpawintei [[Special:Export|Ekspōrtas pagabtin]]. Enpeisāis din en twajjan kōmputeran be enkraūneis din stwi.",
        "import-invalid-interwiki": "Ni mazīngi impōritun iz padātan wiki.",
        "importlogpage": "Impōrtas registerin",
        "importlogpagetext": "Perwaldīwingei impōrtai stēisan pāusan sen redigīsnas istōrijan iz kittans wikins.",
-       "import-logentry-upload": "ast impōrtiwuns(si) [[$1]] pra zūrbrukes enkraūsenin",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersiōni|wersiōnis}}",
-       "import-logentry-interwiki": "$1 impōrtitan pra transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersiōni|wersiōnis}} iz $2",
        "tooltip-pt-userpage": "Majjan persōniskan pāusan",
        "tooltip-pt-anonuserpage": "Tērpautajas pāusan per IP adressin, iz kawīdan tū redigijja",
index e97671d..cce9a83 100644 (file)
        "hours-abbrev": "$1 گ",
        "seconds": "{{PLURAL:$1|$1 ثانيه|$1 ثانيې}}",
        "minutes": "{{PLURAL:$1|$1 دقيقه|$1 دقيقې}}",
-       "hours": "{{PLURAL:$1|$1 ساعت|$1 ساعتونه}}",
+       "hours": "{{PLURAL:$1|$1 گړۍ|$1 گړۍ}}",
        "days": "{{PLURAL:$1|$1 ورځ|$1 ورځې}}",
        "weeks": "{{PLURAL:$1|$1 اونۍ|$1 اونۍ}}",
        "months": "{{PLURAL:$1|$1 مياشت|$1 مياشتې}}",
        "api-error-unknownerror": "ناڅرګنده تېروتنه: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|ثانيه|ثانيې}}",
        "duration-minutes": "$1 {{PLURAL:$1|دقيقه|دقيقې}}",
-       "duration-hours": "$1 {{PLURAL:$1|ساعت|ساعتونه}}",
+       "duration-hours": "$1 {{PLURAL:$1|گړۍ|گړۍ}}",
        "duration-days": "$1 {{PLURAL:$1|ورځ|ورځې}}",
        "duration-weeks": "$1 {{PLURAL:$1|اونۍ|اونۍ}}",
        "duration-years": "$1 {{PLURAL:$1|کال|کالونه}}",
index a7b5524..fd58eea 100644 (file)
                        "Pikne",
                        "Tacsipacsi",
                        "Totosunarto",
-                       "Macofe"
+                       "Macofe",
+                       "FRacco"
                ]
        },
        "sidebar": "{{notranslate}}",
        "no-null-revision": "Error message shown when no null revision could be created to reflect a protection level change.\n\nAbout \"null revision\":\n* Create a new null-revision for insertion into a page's history. This will not re-save the text, but simply refer to the text from the previous version.\n* Such revisions can for instance identify page rename operations and other such meta-modifications.\n\nParameters:\n* $1 - page title",
        "badtitle": "The page title when a user requested a page with invalid page name. The content will be {{msg-mw|badtitletext}}.",
        "badtitletext": "The message shown when a user requested a page with invalid page name. The page title will be {{msg-mw|badtitle}}.\n\nSee also:\n* {{msg-mw|selfmove}}\n* {{msg-mw|immobile-source-namespace}}\n* {{msg-mw|immobile-target-namespace-iw}}\n* {{msg-mw|immobile-target-namespace}}",
+       "title-invalid-empty": "Used as text of error message: empty title",
+       "title-invalid-utf8": "Used as text of error message: invalid UTF8 sequence",
+       "title-invalid-interwiki": "Used as text of error message: invalid interwiki link",
+       "title-invalid-talk-namespace": "Used as text of error message: invalid talk page",
+       "title-invalid-characters": "Used as text of error message: invalid characters in title ($1 is the character)",
+       "title-invalid-relative": "Used as text of error message: relative titles are invalid",
+       "title-invalid-magic-tilde": "Used as text of error message: magic tilde sequence is invalid in page title",
+       "title-invalid-too-long": "Used as text of error message: too long title ($1 is maximum length)",
+       "title-invalid-leading-colon": "Used as text of error message: colon at the beginning of title is invalid",
        "perfcached": "Like {{msg-mw|perfcachedts}} but used when we do not know how long ago page was cached (unlikely to happen).\n\nParameters:\n* $1 - the max result cut off ($wgQueryCacheLimit)",
        "perfcachedts": "Used on pages that list page lists for which the displayed data is cached. Parameters:\n* $1 - a time stamp (date and time combined)\n* $2 - a date (optional)\n* $3 - a time (optional)\n* $4 - the cut off limit for cached results ($wgQueryCacheLimit). If there are more then this many results for the query, only the first $4 of those will be listed on the page. Usually $4 is about 1000.",
        "querypage-no-updates": "Text on some special pages, e.g. [[Special:FewestRevisions]].",
        "filehist-thumbtext": "Shown in the file history list of a file description page. Parameters:\n* $1 - timestamp, localized. e.g. ''10:23, 18 april 2007''\n* $2 - (Optional) the date\n* $3 - (Optional) the time\nExample: [[wikipedia:Image:Madeleine close2.jpg]]",
        "filehist-nothumb": "Shown if no thumbnail is available in the file history list of a file desription page.\n\nExample: [[:Image:Addon-icn.png]]",
        "filehist-user": "In image description page.\n\n{{Identical|User}}",
-       "filehist-dimensions": "Used as label in file description page.\n\nFollowed by length, filesize, and width x height. e.g. \"1.5 s (13 KB)\".",
+       "filehist-dimensions": "Used as label in file description page.\n\nFollowed by length, or width x height, and filesize. e.g. \"1.5 s (13 KB)\".",
        "filehist-filesize": "Used in image description page.\n{{Identical|File size}}",
        "filehist-comment": "In file description page\n\n{{Identical|Comment}}",
        "imagelinks": "In top header of the image description page, see for example [[:Image:Yes.png]]. Shows a list of pages where this file is used.\n{{Identical|File usage}}",
index a94802c..2034bab 100644 (file)
        "import-interwiki-history": "Copiar l'entira cronologia da questa pagina",
        "import-interwiki-templates": "Includer tut ils models",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Tip da pagina da destinaziun:",
-       "import-interwiki-rootpage": "Pagina principala da destinaziun (opziunal):",
        "import-upload-filename": "Num da datoteca:",
        "import-comment": "Commentari:",
        "importtext": "Exportescha la datoteca da la wiki da funtauna cun agid da la [[Special:Export|funcziun d'export]].\nLa memorisescha sin tes computer e chargia si ella qua.",
index bef16e5..d436b51 100644 (file)
        "tags-edit-remove-all-tags": "(удалить все метки)",
        "tags-edit-chosen-placeholder": "Выберите один или несколько тэгов",
        "tags-edit-reason": "Причина:",
+       "tags-edit-revision-submit": "Применить изменения к {{PLURAL:$1|этой версии|$1 версиям}}",
+       "tags-edit-logentry-submit": "Применить изменения к {{PLURAL:$1|этой записи журнала|$1 записям журнала}}",
+       "tags-edit-success": "Изменения были успешно применены.",
+       "tags-edit-failure": "Изменения не удалось примененить.\n$1",
        "tags-edit-nooldid-title": "Не задана целевая версия",
        "tags-edit-nooldid-text": "Вы не задали целевую версию (версии) для выполнения этой функции, или указанная версия не существует.",
        "tags-edit-none-selected": "Пожалуйста, выберите по крайней мере один тег, чтобы добавить или удалить.",
        "logentry-managetags-activate": "$1 активировал{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
        "logentry-managetags-deactivate": "$1 отключил{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
        "log-name-tag": "Журнал меток",
+       "logentry-tag-update-add-revision": "$1 добавил{{GENDER:$2||а}} {{PLURAL:$7|метку|метки}} $6 к версии $4 страницы $3",
+       "logentry-tag-update-add-logentry": "$1 добавил{{GENDER:$2||а}} {{PLURAL:$7|метку|метки}} $6 к записи журнала $5 страницы $3",
+       "logentry-tag-update-remove-revision": "$1 удалил{{GENDER:$2||а}} {{PLURAL:$9|метку|метки}} $8 у версии $4 страницы $3",
+       "logentry-tag-update-remove-logentry": "$1 удалил{{GENDER:$2||а}} {{PLURAL:$9|метку|метки}} $8 у записи журнала $5 страницы $3",
+       "logentry-tag-update-revision": "$1 обновил{{GENDER:$2||а}} метки у версии $4 страницы $3 (добавлен{{PLURAL:$7|а|ы}} $6; удален{{PLURAL:$9|а|ы}} $8)",
+       "logentry-tag-update-logentry": "$1 обновил{{GENDER:$2||а}} метки у записи журнала $5 страницы $3 (добавлен{{PLURAL:$7|а|ы}} $6; удален{{PLURAL:$9|а|ы}} $8)",
        "rightsnone": "(нет)",
        "revdelete-summary": "описание изменений",
        "feedback-adding": "Добавление отзыва на страницу…",
index dfa980a..fec8472 100644 (file)
        "import-interwiki-history": "Копіровати вшыткы історічны верзії той сторінкы",
        "import-interwiki-templates": "Загорнути вшыткы шаблоны",
        "import-interwiki-submit": "Імпортовати",
-       "import-interwiki-namespace": "Цілёвый простор назв:",
-       "import-interwiki-rootpage": "Цїлёва корїнёва сторінка (необовязково):",
        "import-upload-filename": "Назва файлу:",
        "import-comment": "Коментарь:",
        "importtext": "Просиме Вас, експортуйте сторінку з іншой вікі помочов [[Special:Export|інштрументу на експорт]], уложте файл на ваш діск а потім го заладуйте гев.",
index 4eb5167..ee65cc4 100644 (file)
        "import-interwiki-sourcewiki": "Wiki de orìgine:",
        "import-interwiki-sourcepage": "Pàgina de orìgine:",
        "import-interwiki-submit": "Importa",
-       "import-interwiki-namespace": "Nùmene-logu de destinatzione:",
        "import-upload-filename": "Nùmene file:",
        "import-comment": "Cummentu:",
        "importstart": "Importande is pàginas...",
        "expand_templates_preview": "Antiprima",
        "pagelang-name": "Pàgina",
        "pagelang-language": "Limba",
-       "pagelang-select-lang": "Sèbera limba"
+       "pagelang-select-lang": "Sèbera limba",
+       "special-characters-group-latin": "Latinu",
+       "special-characters-group-latinextended": "Latinu disterradu",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sìmbulos",
+       "special-characters-group-greek": "Grecu",
+       "special-characters-group-cyrillic": "Cirìllicu",
+       "special-characters-group-arabic": "Aràbicu",
+       "special-characters-group-persian": "Persianu",
+       "special-characters-group-hebrew": "Ebreu",
+       "special-characters-group-bangla": "Bengalesu",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalesu",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 23a59ac..6dfc6f8 100644 (file)
        "import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvezi - Увези",
-       "import-interwiki-namespace": "Odredišni imenski prostor:",
-       "import-interwiki-rootpage": "Odredišna osnovna stranica (neobavezno):",
        "import-upload-filename": "Naziv datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].\nSnimite je na Vašem računaru i pošaljite ovdje.",
index ddde5ae..27b1838 100644 (file)
        "searchrelated": "ආශ්‍රිත",
        "searchall": "සියල්ල",
        "showingresults": "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
+       "search-showingresults": "{{PLURAL:$4|ප්‍රතිඵල <strong>$3</strong> කින් <strong>$1</strong> ක්|ප්‍රතිඵල <strong>$3</strong> කින් <strong>$1 සිට $2</strong> දක්වා}}",
        "search-nonefound": "විමසුම හා ගැලපෙන ප්‍රතිඵල කිසිවක් නොමැත.",
        "powersearch-legend": "වැඩිමනත් ගවේෂණය",
        "powersearch-ns": "නාමඅවකාශයන්හි ගවේෂණය කරන්න:",
        "recentchanges-label-minor": "මෙය සුළු සංස්කරණයකි",
        "recentchanges-label-bot": "මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි",
        "recentchanges-label-unpatrolled": "මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත",
+       "recentchanges-label-plusminus": "පිටුවේ බයිට ගණන මෙපමණකින් වෙනස් වී ඇත",
        "recentchanges-legend-heading": "'''Legend:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|නව පිටු ලැයිස්තුව]] ද බලන්න)",
        "rcnotefrom": "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
        "deleting-backlinks-warning": "'''ප්‍රවේශමෙන්:''' ඔබ සූදානම් වන්නේ ඔබ පරිශීලනය කරන පිටුවට සම්බන්ධ වූ අනෙක් පිටු මකා දැමීමටයි.",
        "rollback": "සංස්කරණයන් පුනරාවර්තනය කරන්න",
        "rollbacklink": "ප්‍රතිවර්තනය",
+       "rollbacklinkcount": "{{PLURAL:$1|සංස්කරණ}} $1 ක් ආපසු පෙරලන්න",
        "rollbackfailed": "පුනරාවර්තනය අසාර්ථකයි",
        "cantrollback": "සංස්කරණය ප්‍රතිවර්තනය කල නොහැක;\nඅවසන් දායකයා මෙම පිටුවේ එකම කතෘවරයාද වෙයි.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|සාකච්ඡාව]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) විසින් සිදුකල  [[:$1]] හි අවසාන සංශෝධනය  පුනරාවර්තනය කල නොහැක;\nවෙනත් අයෙකු අතින් පිටුව දැනටමත් සංස්කරණය වී හෝ පුනරාවර්තනය වී ඇත.\n\nපිටුවට අවසන් සංස්කරණය සිදුකොට ඇත්තේ [[User:$3|$3]] ([[User talk:$3|සාකච්ඡාව]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) විසිනි.",
        "undelete-show-file-submit": "ඔව්",
        "namespace": "නාමඅවකාශය:",
        "invert": "තෝරාගැනුම ප්‍රතිලෝම කරන්න",
+       "tooltip-invert": "තෝරාගත් නාම අවකාශය තුළ ඇති පිටුවල වෙනස්කම් සැඟවීමට මෙම කොටුව ලකුණු කරන්න (ලකුණු කර ඇත්නම් සම්බන්ධ නාම අවකාශයත්)",
        "namespace_association": "ආශ්‍රිත නාම අවකාශය",
+       "tooltip-namespace_association": "තෝරාගත් නාම අවකාශය හා සම්බන්ධ සාකච්ඡා හෝ විෂයය නාම අවකාශය ඇතුළත් කිරීමට මෙම කොටුව ලකුණු කරන්න",
        "blanknamespace": "(ප්‍රධාන)",
        "contributions": "{{GENDER:$1|පරිශීලකගේ}} දායකත්වයන්",
        "contributions-title": " $1 සඳහා පරිශීලක දායකත්වයන්",
        "logentry-newusers-create": "$1 පරිශීලක ගිණුම {{GENDER:$2|තනන ලදී}}",
        "logentry-newusers-create2": "$1 විසින් $3 පරිශීලක ගිණුම තනන ලදී",
        "logentry-newusers-autocreate": "$1 ගිණුම ස්වංක්‍රීයව නිර්මිතය",
+       "logentry-upload-upload": "$1 විසින් $3 {{GENDER:$2|උඩුගත කරන ලදී}}",
        "rightsnone": "(කිසිවක් නොමැත)",
        "revdelete-summary": "සංස්කරණ සාරාංශය",
        "feedback-adding": "ප්‍රතිචාරය පිටුවට එක් කරමින් ...",
index 89fd920..b5c989e 100644 (file)
        "toc": "Obsah",
        "showtoc": "zobraziť",
        "hidetoc": "skryť",
-       "collapsible-collapse": "zbaliť",
-       "collapsible-expand": "rozbaliť",
+       "collapsible-collapse": "skry",
+       "collapsible-expand": "rozbaľ",
        "confirmable-confirm": "Ste si {{GENDER:$1|istý|istá|istí}}?",
        "confirmable-yes": "Áno",
        "confirmable-no": "Nie",
index d870701..e99bc7a 100644 (file)
        "tags-deactivate-submit": "Dezaktiviraj",
        "tags-apply-no-permission": "Nimate dovoljenja za uveljavljanje sprememb oznak skupaj z vašimi spremembami.",
        "tags-apply-not-allowed-one": "Oznake »$1« ni mogoče uveljaviti ročno.",
-       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče uveljaviti ročno: $1",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče ročno uveljaviti: $1",
        "tags-update-no-permission": "Nimate dovoljenja za dodajanje ali odstranjevanje oznak na posameznih redakcijah ali dnevniških vnosih.",
        "tags-update-add-not-allowed-one": "Oznake »$1« ni mogoče dodati ročno.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče dodati ročno: $1",
        "tags-edit-manage-link": "Upravljanje oznak",
        "tags-edit-revision-selected": "{{PLURAL:$1|Izbrana redakcija|Izbrani redakciji|Izbrane redakcije}} [[:$2]]:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|Izbran dnevniški vnos|Izbrana dnevniška vnosa|Izbrani dnevniški vnosi}}:",
-       "tags-edit-revision-legend": "Dodaj ali odstrani oznake od {{PLURAL:$1|redakcije|obeh $1 redakcij|vseh $1 redakcij}}",
-       "tags-edit-logentry-legend": "Dodaj ali odstrani oznake od {{PLURAL:$1|dnevniškega vnosa|obeh $1 dnevniških vnosov|vseh $1 dnevniških vnosov}}",
+       "tags-edit-revision-legend": "Dodaj ali odstrani oznake {{PLURAL:$1|redakcije|obeh $1 redakcij|vseh $1 redakcij}}",
+       "tags-edit-logentry-legend": "Dodaj ali odstrani oznake {{PLURAL:$1|dnevniškega vnosa|obeh $1 dnevniških vnosov|vseh $1 dnevniških vnosov}}",
        "tags-edit-existing-tags": "Obstoječe oznake:",
        "tags-edit-existing-tags-none": "''Nobena''",
        "tags-edit-new-tags": "Nove oznake:",
index dee7937..40f2b12 100644 (file)
        "nov": "Nof",
        "dec": "Dis",
        "pagecategories": "{{PLURAL:$1|Qeybta|Qeybaha}}",
-       "category_header": "Maqaalada ku jirta qeybta \"$1\"",
+       "category_header": "Bogagga ku jira qeybta \"$1\"",
        "subcategories": "Qeybaha hoose",
        "category-media-header": "Wararka ku jiro qeybta\"$1\"",
        "category-empty": "''Qeybtaan hadda wax maqaal ah kuma jirto''",
        "semiprotectedpagewarning": "'''Fiiro gaar ah:''' Boggaan waa la difaacay si ee isticmaalada isdiiwaan geliyay kaliya wax uuga badalaan.\nFariinta gudagalihii ugu danbeeyay hoostaan ee ku qorontahay:",
        "cascadeprotectedwarning": "'''Digniin:''' Boggaan waa la difaacay si ee maamulada kaliya wax uuga badalaan, sababtoo ah waxaa ku jirto kaskadyadaan la difaacay oo soo sosocoto {{PLURAL:$1|bog|boggaga}}:",
        "templatesused": "{{PLURAL:$1|Tusmo|Tusmooyinka}} lagu isticmaalay boggaan:",
+       "templatesusedpreview": "{{PLURAL:$1|Tusmo|Tusmooyin}} loo adeegsaday horfiirintaan:",
        "template-protected": "(la difaacay)",
        "template-semiprotected": "(difaaca-fudud)",
        "hiddencategories": "Boggaan wuxuu ka mid yahay {{PLURAL:$1|1 qeyb oo qarsoon|$1 oo ah qeybaha qarsoon}}:",
        "api-error-unknown-code": "Qalad la aqoon: \"$1\"",
        "api-error-unknown-warning": "Digniin la aqoon: $1",
        "api-error-uploaddisabled": "Soo gelinta waa laga xiray wikigaan.",
+       "limitreport-title": "Faahin caddeymo:",
        "limitreport-cputime": "Waqtiga adeegsiga CPU",
-       "limitreport-walltime": "Waqtiga dhabta ah adeegsiga"
+       "limitreport-walltime": "Waqtiga dhabta ah adeegsiga",
+       "limitreport-ppvisitednodes": "Tirooyinka gutinada ee maskaxda",
+       "limitreport-ppgeneratednodes": "Gutinada ay horay u soo booqatay maskaxda"
 }
index fc870a2..33372e1 100644 (file)
        "import-interwiki-history": "Kopjo të gjitha versionet e historisë për këtë faqe",
        "import-interwiki-templates": "Përfshini të gjitha stampat",
        "import-interwiki-submit": "Importo",
-       "import-interwiki-namespace": "Hapësira e destinuar:",
        "import-upload-filename": "Emri i skedës:",
        "import-comment": "Arsyeja:",
        "importtext": "Ju lutem eksportoni këtë skedë nga burimi wiki duke përdorur  [[Special:Export|export utility]].! XAU Save atë në kompjuterin tuaj dhe ngarkoni këtu.",
index 979b0ca..a6c9c59 100644 (file)
        "watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
-       "watchlistedit-clear-title": "СпиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа Ð¸Ñ\81пÑ\80ажÑ\9aен",
+       "watchlistedit-clear-title": "Ð\9fÑ\80ажÑ\9aеÑ\9aе Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа",
        "watchlistedit-clear-legend": "Испразни списак надгледања",
        "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
        "watchlistedit-clear-titles": "Наслови:",
index 5d62903..1ad6b7e 100644 (file)
        "import-interwiki-history": "Kopiraj sve verzije istorije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvezi",
-       "import-interwiki-namespace": "Odredišni imenski prostor:",
-       "import-interwiki-rootpage": "Odredišna osnovna stranica (neobavezno):",
        "import-upload-filename": "Naziv datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Izvezite datoteku s izvornog vikija koristeći [[Special:Export|izvoz]].\nSačuvajte je na računar i pošaljite ovde.",
        "watchlistedit-raw-done": "Vaš spisak nadgledanja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Dodat je jedan naslov|Dodata su $1 naslova|Dodato je $1 naslova}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|Uklonjena su $1 naslova|Uklonjeno je $1 naslova}}:",
-       "watchlistedit-clear-title": "Spisak nadgledanja ispražnjen",
+       "watchlistedit-clear-title": "Pražnjenje spisak nadgledanja",
        "watchlistedit-clear-legend": "Isprazni spisak nadgledanja",
        "watchlistedit-clear-explain": "Svi naslovi će biti uklonjeni iz vašeg spiska nadgledanja.",
        "watchlistedit-clear-titles": "Naslovi:",
index 2e483ca..10024ac 100644 (file)
        "import-interwiki-history": "Importier aal Versione fon disse Siede",
        "import-interwiki-templates": "Aal Foarloagen iensluute",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Siel-Noomensruum:",
        "import-upload-filename": "Doatäinoome:",
        "import-comment": "Kommentoar:",
        "importtext": "Ju Doatäi uur ju Spezioalsiede [[Special:Export|Exportfunktion]] uut dän Wällewiki exportierje.\nDo ap dän lokoale Reekener spiekerje un deerätter hier hoochleede.",
        "import-invalid-interwiki": "Uut dän anroate Wiki is neen Import muugelk.",
        "importlogpage": "Import-Logbouk",
        "importlogpagetext": "Administrativen Import fon Sieden mäd Versionsgeskichte fon uur Wikis.",
-       "import-logentry-upload": "häd „[[$1]]“ fon ne Doatäi importierd",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versione}}",
-       "import-logentry-interwiki": "häd „$1“ importierd (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} fon $2",
        "tooltip-pt-userpage": "Dien Benutsersiede",
        "tooltip-pt-anonuserpage": "Benutsersiede fon ju IP-Adresse fon ju uut du Annerengen truchfierst",
index 2554e37..345604b 100644 (file)
@@ -65,7 +65,8 @@
                        "Boom",
                        "Marfuas",
                        "Macofe",
-                       "Aaoo"
+                       "Aaoo",
+                       "Josve05a"
                ]
        },
        "tog-underline": "Stryk under länkar:",
        "no-null-revision": "Kunde inte skapa ny tom version för sidan \"$1\"",
        "badtitle": "Felaktig titel",
        "badtitletext": "Den begärda sidtiteln är antingen ogiltig eller tom, eller så är titeln felaktigt länkad från en annan wiki.\nDen kan innehålla ett eller flera tecken som inte får användas i sidtitlar.",
+       "title-invalid-empty": "Den begärda sidtitel är tom eller innehåller bara namnet av en namnrymd.",
+       "title-invalid-utf8": "Den begärda sidtiteln innehåller en ogiltig UTF-8-sekvens.",
+       "title-invalid-interwiki": "Titel innehåller en interwiki-länk",
+       "title-invalid-talk-namespace": "Den begärda sidtitel hänvisar till en diskussionssida som inte kan existera.",
+       "title-invalid-too-long": "Den begärda sidtiteln är för lång. Det får inte vara längre än $1 byte i UTF-8-kodning.",
        "perfcached": "Följande data är cachad och är möjligtvis inte helt uppdaterad. Maximalt {{PLURAL:$1|ett|$1}} resultat finns {{PLURAL:$1|tillgängligt|tillgängliga}} i cachen.",
        "perfcachedts": "Följande data är cachad och uppdaterades senast $1. Maximalt {{PLURAL:$4|ett|$4}} resultat finns {{PLURAL:$4|tillgängligt|tillgängliga}} i cachen.",
        "querypage-no-updates": "Uppdateringar för den här sidan är för närvarande inaktiverade.\nData kommer i nuläget inte att uppdateras.",
        "logempty": "Inga matchande träffar i loggen.",
        "log-title-wildcard": "Sök efter sidtitlar som börjar med texten",
        "showhideselectedlogentries": "Visa/Dölj markerade loggposter",
+       "log-edit-tags": "Redigera märken i valda loggposter",
        "allpages": "Alla sidor",
        "nextpage": "Nästa sida ($1)",
        "prevpage": "Föregående sida ($1)",
        "import-interwiki-history": "Kopiera hela versionshistoriken för denna sida",
        "import-interwiki-templates": "Inkludera alla mallar",
        "import-interwiki-submit": "Importera",
+       "import-mapping-default": "Importera till standardplatser",
        "import-mapping-namespace": "Importera till en namnrymd:",
        "import-mapping-subpage": "Importera som undersidor till följande sida:",
        "import-upload-filename": "Filnamn:",
        "tag-filter-submit": "Filter",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Märke|Märken}}]]: $2)",
        "tags-title": "Märken",
-       "tags-intro": "Denna sida listar märkena som mjukvaran kan markera en redigering med, och deras betydelse.",
+       "tags-intro": "Denna sida listar de märken som mjukvaran kan markera en redigering med, och deras betydelse.",
        "tags-tag": "Märkesnamn",
        "tags-display-header": "Utseende på listor över ändringar",
        "tags-description-header": "Full beskrivning av betydelse",
index 878be69..a46d488 100644 (file)
        "import-interwiki-history": "Leta pamoja na mapitio yote ya ukurasa huu",
        "import-interwiki-templates": "Leta pamoja na vigezo vyote",
        "import-interwiki-submit": "Leta",
-       "import-interwiki-namespace": "Eneo la wiki la mwishilio:",
        "import-upload-filename": "Jina la faili:",
        "import-comment": "Maelezo:",
        "importtext": "Tafadhali upeleke faili kutoka wiki lake kwa kutumia [[Special:Export|zana ya kupeleka]].\nUlihafadhie katika tarakalishi yako, halafu ulipakie hapa.",
        "duration-years": "{{PLURAL:$1|mwaka|miaka}} $1",
        "duration-centuries": "{{PLURAL:$1|karne}} $1",
        "expand_templates_ok": "Sawa",
-       "expand_templates_preview": "Hakiki"
+       "expand_templates_preview": "Hakiki",
+       "special-characters-group-latin": "Kilatini",
+       "special-characters-group-latinextended": "Kilatini kilichoongezwa",
+       "special-characters-group-ipa": "Herufi za Fonetiki za Kimataifa (IPA)",
+       "special-characters-group-symbols": "Alama",
+       "special-characters-group-greek": "Kigiriki",
+       "special-characters-group-cyrillic": "Kikyrili",
+       "special-characters-group-arabic": "Kiarabu",
+       "special-characters-group-arabicextended": "Kiarabu kilichoongezwa",
+       "special-characters-group-persian": "Kiajemi",
+       "special-characters-group-hebrew": "Kiyahudi",
+       "special-characters-group-bangla": "Kibangla",
+       "special-characters-group-telugu": "Kitelugu",
+       "special-characters-group-sinhala": "Kisinhala",
+       "special-characters-group-gujarati": "Kigujarati",
+       "special-characters-group-thai": "Kitai",
+       "special-characters-group-lao": "Kilao",
+       "special-characters-group-khmer": "Kikhmeri"
 }
index c3dff49..760949e 100644 (file)
        "import-interwiki-text": "Jak viki va jak nomi sahifaro intixob kuned, to ittiloot az on vorid şavad.\nTa'rixi nusxaho va nomhoi viroişkunandagon sabt xohand mond.\nIttilooti marbut ba vorid kardani sahifaho dar [[Special:Log/import|guzorişhoi voridot]] sabt xohad şud.",
        "import-interwiki-history": "Tamomi ta'rixi nusxahoi in sahifa intiqol doda şavad",
        "import-interwiki-submit": "Vorid şavad",
-       "import-interwiki-namespace": "Fazoi nomi maqsad:",
        "import-upload-filename": "Nomi parvanda:",
        "import-comment": "Tavzeh:",
        "importtext": "Lutfan parvandaro az viki manba' sodir kuned, az tariqi sahifa [[Special:Export|abzori sodirot]].\nPas onro ba kompjuteraton zaxira karda inço borguzorī kuned.",
        "import-invalid-interwiki": "Az vikiji muşaxxasşuda nametavon voridot kard.",
        "importlogpage": "Voridi guzorişho",
        "importlogpagetext": "Vorid kardani sahifaho bo hamrohi ta'rixcai viroişi onho az vikihoi digar.",
-       "import-logentry-upload": "[[$1]] az tariqi borguzoriji parvanda, vorid şud",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|nusxa|nusxa}}",
-       "import-logentry-interwiki": "$1 transvikişuda",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|nusxa|nusxa}} az $2",
        "tooltip-pt-userpage": "Sahifai korbariji şumo",
        "tooltip-pt-anonuserpage": "Sahifai korbari IP, ki bo on şumo viroiş mekuned",
index d4a2122..b75b945 100644 (file)
        "disclaimers": "ข้อปฏิเสธความรับผิดชอบ",
        "disclaimerpage": "Project:ข้อปฏิเสธความรับผิดชอบทั่วไป",
        "edithelp": "คำอธิบายการแก้ไข",
+       "helppage-top-gethelp": "คำอธิบาย",
        "mainpage": "หน้าหลัก",
        "mainpage-description": "หน้าหลัก",
        "policy-url": "Project:นโยบาย",
        "namespace": "เนมสเปซ:",
        "invert": "กลับการเลือก",
        "tooltip-invert": "เลือกกล่องนี้เพื่อซ่อนการเปลี่ยนแปลงไปยังหน้าในเนมเปซที่เลือก (และเนมสเปซที่เกี่ยวข้องถ้าเลือก)",
+       "tooltip-whatlinkshere-invert": "เลือกกล่องนี้เพื่อซ่อนลิงก์จากหน้าในเนมสเปซที่เลือก",
        "namespace_association": "เนมสเปซที่เกี่ยวข้อง",
        "tooltip-namespace_association": "เลือกกล่องนี้เพื่อรวมเนมสเปซพูดคุยหรือหัวข้อที่เกี่ยวข้องกับเนมสเปซที่เลือกด้วย",
        "blanknamespace": "(หลัก)",
        "pageinfo-protect-cascading-yes": "ใช่",
        "pageinfo-protect-cascading-from": "การล็อกสืบทอดจาก",
        "pageinfo-category-info": "สารสนเทศหมวดหมู่",
+       "pageinfo-category-total": "จำนวนสมาชิกรวม",
        "pageinfo-category-pages": "จำนวนหน้า",
        "pageinfo-category-subcats": "จำนวนหมวดหมู่ย่อย",
        "pageinfo-category-files": "จำนวนไฟล์",
index ce14aea..9d7ebe9 100644 (file)
        "import-interwiki-history": "Bu sahypa üçin ähli geçmiş wersiýalary göçür",
        "import-interwiki-templates": "Ähli şablonlary giriz",
        "import-interwiki-submit": "Importirle",
-       "import-interwiki-namespace": "Niýetlenilýän at giňişligi:",
        "import-upload-filename": "Faýlyň ady:",
        "import-comment": "Teswir:",
        "importtext": "Faýly düýp wikiden [[Special:Export|eksportirleme funksiýasyny]] ulanmak arkaly eksportirläň.\nKompýuteriňize ýazdyryň we şu ýere ýükläň.",
        "import-invalid-interwiki": "Görkezilen wikiden importirläp bolmaýar",
        "importlogpage": "Import gündeligi",
        "importlogpagetext": "Özgerdiş geçmişli sahypalaryň başga wikilerden administratiw importirlenmeleri",
-       "import-logentry-upload": "[[$1]] faýl ýüklemesi arkaly importirlendi",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersiýa|wersiýa}}",
-       "import-logentry-interwiki": "$1 transwikilendi",
        "import-logentry-interwiki-detail": "$2 sahypasyndan $1 {{PLURAL:$1|wersiýa|wersiýa}}",
        "tooltip-pt-userpage": "Ulanyjy sahypaňyz",
        "tooltip-pt-anonuserpage": "Redaktirleýän IP-ňiz üçin ulanyjy sahypasy",
        "expand_templates_remove_comments": "Teswirleri aýyr",
        "expand_templates_remove_nowiki": "Netijelerde <nowiki> teglerini bökdäň",
        "expand_templates_generate_xml": "XML ýygnama agajyny görkez",
-       "expand_templates_preview": "Deslapky syn"
+       "expand_templates_preview": "Deslapky syn",
+       "special-characters-group-latin": "Latyn",
+       "special-characters-group-latinextended": "Giňeldilen latyn",
+       "special-characters-group-ipa": "HFE (IPA)",
+       "special-characters-group-symbols": "Simwollar",
+       "special-characters-group-greek": "Grek",
+       "special-characters-group-cyrillic": "Kirillisa",
+       "special-characters-group-arabic": "Arap",
+       "special-characters-group-persian": "Parsça",
+       "special-characters-group-hebrew": "Iwrit",
+       "special-characters-group-bangla": "Bengalça",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singal",
+       "special-characters-group-gujarati": "Güjerat",
+       "special-characters-group-thai": "Taýlandça",
+       "special-characters-group-lao": "Laosça",
+       "special-characters-group-khmer": "Khmerçe"
 }
index 649f8e9..d3d5588 100644 (file)
        "import-interwiki-history": "Kopyahin ang lahat ng mga bersyon ng kasaysayan para sa pahinang ito",
        "import-interwiki-templates": "Isama ang lahat ng mga suleras",
        "import-interwiki-submit": "Mag-angkat",
-       "import-interwiki-namespace": "Kapupuntahang espasyo ng pangalan:",
-       "import-interwiki-rootpage": "Ugat na pahina ng kapupuntahan (maaaring wala ito):",
        "import-upload-filename": "Pangalan ng talaksan:",
        "import-comment": "Komento:",
        "importtext": "Pakiluwas ang talaksan magmula sa pinagmulang wiki na ginagamit ang [[Special:Export|kasangkapang pangluwas]].  \nSagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.",
        "import-rootpage-nosubpage": "Ang puwang ng pangalan na \"$1\" ng ugat na pahina ay hindi nagpapahintulot ng kabahaging mga pahina.",
        "importlogpage": "Talaan ng pagaangkat",
        "importlogpagetext": "Mga administratibong pagaangkat ng mga pahinang may kasaysayan ng pagbabago mula sa ibang mga wiki.",
-       "import-logentry-upload": "inangkat ang [[$1]] sa pamamagitan ng pagkarga ng talaksan (file upload)",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
-       "import-logentry-interwiki": "Na-i-transwiki na ang $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}} mula sa $2",
        "javascripttest": "Pagsubok sa JavaScript",
        "javascripttest-pagetext-noframework": "Nakalaan ang pahinang ito para sa pagpapatakbo ng mga pagsubok ng JavaScript.",
        "expand_templates_remove_comments": "Tanggalin ang mga puna (kumento)",
        "expand_templates_remove_nowiki": "Pigilin ang mga tatak na <nowiki> sa loob ng resulta",
        "expand_templates_generate_xml": "Ipakita ang puno na pambanghay ng XML",
-       "expand_templates_preview": "Paunang tingin"
+       "expand_templates_preview": "Paunang tingin",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Pinalawig na Latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Mga sagisag",
+       "special-characters-group-greek": "Griyego",
+       "special-characters-group-cyrillic": "Siriliko",
+       "special-characters-group-arabic": "Arabe",
+       "special-characters-group-arabicextended": "Pinalawig na Arabe",
+       "special-characters-group-persian": "Persyano",
+       "special-characters-group-hebrew": "Hebreo",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guharati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 8781dfc..7271f93 100644 (file)
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "tog-hideminor": "Son değişiklikler sayfasında küçük değişiklikleri gizle",
-       "tog-hidepatrolled": "Son değişikliklerde gözden geçirilen düzenlemeleri gizle",
-       "tog-newpageshidepatrolled": "Kontrol edilmiş sayfaları yeni sayfalar listesinde gizle",
-       "tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri göstermek için genişlet",
-       "tog-usenewrc": "Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri gruplandır",
+       "tog-hidepatrolled": "Son değişikliklerde devriye görmüş değişiklikleri gizle",
+       "tog-newpageshidepatrolled": "Yeni sayfalar listesinde, devriye görmüş sayfaları gizle",
+       "tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri göstermek üzere genişlet",
+       "tog-usenewrc": "Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri sayfalara gruplandır",
        "tog-numberheadings": "Başlıkları otomatik numaralandır",
        "tog-showtoolbar": "Düzenleme araç çubuğunu göster",
        "tog-editondblclick": "Çift tıklayarak sayfaları düzenle",
-       "tog-editsectiononrightclick": "Bölüm başlığına sağ tıklayarak bölümleri düzenleyebilme olanağı ver",
-       "tog-watchcreations": "Açtığım sayfaları ve yüklediğim dosyaları izleme listeme ekle",
+       "tog-editsectiononrightclick": "Bölüm başlığına sağ tıklayarak bölüm düzenleyebilmeyi etkinleştir",
+       "tog-watchcreations": "Oluşturduğum sayfaları ve yüklediğim dosyaları izleme listeme ekle",
        "tog-watchdefault": "Düzenleme yaptığım sayfaları ve dosyaları izleme listeme ekle",
        "tog-watchmoves": "Taşıdığım sayfaları ve dosyaları izleme listeme ekle",
        "tog-watchdeletion": "Sildiğim sayfaları ve dosyaları izleme listeme ekle",
-       "tog-watchrollback": "Eski haline getirme kullandığım sayfaları izleme listeme ekle",
-       "tog-minordefault": "Varsayılan olarak bütün düzenlemeleri küçük olarak işaretle",
-       "tog-previewontop": "Ön izlemeyi düzenleme kutusunun üstünde göster",
+       "tog-watchrollback": "Geridönüş yaptığım sayfaları izleme listeme ekle",
+       "tog-minordefault": "Varsayılan olarak, bütün düzenlemelerimi küçük değişiklik olarak işaretle",
+       "tog-previewontop": "Ön izlemeyi, düzenleme kutusunun üstünde göster",
        "tog-previewonfirst": "İlk düzenlemede ön izlemeyi göster",
-       "tog-enotifwatchlistpages": "İzleme listemdeki bir sayfanın ya da dosyanın değiştirilmesi durumunda bana e-posta gönder",
+       "tog-enotifwatchlistpages": "İzleme listemdeki bir sayfa veya dosya değiştirilirse bana e-posta gönder",
        "tog-enotifusertalkpages": "Kullanıcı mesaj sayfamda değişiklik olduğunda bana e-posta gönder",
-       "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük değişikliklerde bana e-posta gönder",
-       "tog-enotifrevealaddr": "E-posta adresimi bildiri postalarımda göster.",
+       "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük değişikliklerde de bana e-posta gönder",
+       "tog-enotifrevealaddr": "Bildirim postalarında benim eposta adresimi açıkça göster",
        "tog-shownumberswatching": "İzleyen kullanıcı sayısını göster",
        "tog-oldsig": "Mevcut imza:",
        "tog-fancysig": "İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)",
        "tog-uselivepreview": "Canlı ön izlemeyi kullan",
        "tog-forceeditsummary": "Özeti boş bıraktığımda beni uyar",
-       "tog-watchlisthideown": "İzleme listemden düzenlemelerimi gizle",
-       "tog-watchlisthidebots": "İzleme listemden bot değişikliklerini gizle",
-       "tog-watchlisthideminor": "İzleme listemden küçük değişiklikleri gizle",
-       "tog-watchlisthideliu": "İzleme listemde, kayıtlı kullanıcılar tarafından yapılan değişiklikleri gösterme",
+       "tog-watchlisthideown": "İzleme listemde benim değişkliklerimi gizle",
+       "tog-watchlisthidebots": "İzleme listemde bot değişikliklerini gizle",
+       "tog-watchlisthideminor": "İzleme listemde küçük değişiklikleri gizle",
+       "tog-watchlisthideliu": "İzleme listemde, kayıtlı kullanıcılar tarafından yapılan değişiklikleri gizle",
        "tog-watchlisthideanons": "İzleme listemde, anonim kullanıcılar tarafından yapılan değişiklikleri gizle",
-       "tog-watchlisthidepatrolled": "İzleme listesinde kontrol edilmiş değişiklikleri gizle",
-       "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların kopyalarını bana da gönder",
-       "tog-diffonly": "Sayfa içeriğini sürüm farklarının altında gösterme",
+       "tog-watchlisthidepatrolled": "İzleme listesinde, devriye görmüş değişiklikleri gizle",
+       "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların bir kopyasını bana da gönder",
+       "tog-diffonly": "Sayfa içeriğini, sürüm farklarının altında gösterme",
        "tog-showhiddencats": "Gizli kategorileri göster",
-       "tog-norollbackdiff": "Geridönüş uygulandıktan sonra değişikliği atla",
-       "tog-useeditwarning": "Kaydedilmemiş değişikliğe sahip bir değişiklik sayfasından çıkarken beni uyar",
-       "tog-prefershttps": "Oturumu açarken her zaman güvenli bağlantı kullan",
+       "tog-norollbackdiff": "Geri döndürme uygulandıktan sonra değişiklik görünümünü es geç",
+       "tog-useeditwarning": "Yaptığım değişiklikleri kaydetmeden sayfayı kapatırken beni uyar",
+       "tog-prefershttps": "Oturum açarken her zaman güvenli bağlantı kullan",
        "underline-always": "Daima",
        "underline-never": "Asla",
        "underline-default": "Tema ya da tarayıcı varsayılanı",
        "category_header": "\"$1\" kategorisindeki sayfalar",
        "subcategories": "Alt kategoriler",
        "category-media-header": "\"$1\" kategorisindeki dosyalar",
-       "category-empty": "''Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.''",
+       "category-empty": "<em>Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.</em>",
        "hidden-categories": "{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}",
        "hidden-category-category": "Gizli kategoriler",
-       "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategorisi}} dahil $2 alt kategorisi vardır.}}",
+       "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategori}} dahil $2 alt kategori vardır.}}",
        "category-subcat-count-limited": "Bu kategori aşağıdaki {{PLURAL:$1|alt kategoriye|$1 alt kategoriye}} sahiptir.",
-       "category-article-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfalar}} bu kategoridedir.}}",
-       "category-article-count-limited": "Bu kategoride {{PLURAL:$1|sayfa|$1 sayfalar}} bulunmaktadır.",
-       "category-file-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosyalar}} bu kategoridedir.}}",
-       "category-file-count-limited": "Aşağıdaki {{PLURAL:$1|dosya|$1 dosyalar}} mevcut kategoridedir.",
+       "category-article-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}",
+       "category-article-count-limited": "Bu kategoride {{PLURAL:$1|sayfa|$1 sayfa}} bulunmaktadır.",
+       "category-file-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.}}",
+       "category-file-count-limited": "Aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.",
        "listingcontinuesabbrev": "(devam)",
-       "index-category": "Dizinli sayfalar",
-       "noindex-category": "Dizinli olmayan sayfalar",
+       "index-category": "Dizinlenmiş sayfalar",
+       "noindex-category": "Dizinlenmemiş sayfalar",
        "broken-file-category": "Bozuk dosya bağlantıları içeren sayfalar",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Hakkında",
        "article": "İçerik sayfası",
        "newwindow": "(yeni bir pencerede açılır)",
        "cancel": "İptal",
-       "moredotdotdot": "Daha...",
+       "moredotdotdot": "Daha...",
        "morenotlisted": "Bu liste tam değildir.",
        "mypage": "Sayfa",
        "mytalk": "Mesaj",
        "deletethispage": "Bu sayfayı sil",
        "undeletethispage": "Bu sayfanın silme işlemini geri al",
        "undelete_short": "$1 değişikliği geri getir",
-       "viewdeleted_short": "{{PLURAL:$1|bir silinmiş değişiklik|$1 silinmiş değişiklikleri}} görüntüle.",
+       "viewdeleted_short": "{{PLURAL:$1|bir silinmiş değişikliği|$1 silinmiş değişikliği}} görüntüle.",
        "protect": "Korumaya al",
        "protect_change": "değiştir",
-       "protectthispage": "Sayfayı koruma altına al",
+       "protectthispage": "Bu sayfayı koruma altına al",
        "unprotect": "Korumayı değiştir",
        "unprotectthispage": "Bu sayfanın korumasını değiştir",
        "newpage": "Yeni sayfa",
        "views": "Görünümler",
        "toolbox": "Araçlar",
        "userpage": "Kullanıcı sayfasını görüntüle",
-       "projectpage": "Proje sayfasına bak",
+       "projectpage": "Proje sayfasını görüntüle",
        "imagepage": "Dosya sayfasını görüntüle",
-       "mediawikipage": "Mesaj sayfasını göster",
+       "mediawikipage": "Mesaj sayfasını görüntüle",
        "templatepage": "Şablon sayfasını görüntüle",
-       "viewhelppage": "Yardım sayfasına bak",
-       "categorypage": "Kategori sayfasını göster",
-       "viewtalkpage": "Tartışma sayfasına git",
+       "viewhelppage": "Yardım sayfasına görüntüle",
+       "categorypage": "Kategori sayfasını görüntüle",
+       "viewtalkpage": "Tartışma sayfasını görüntüle",
        "otherlanguages": "Diğer dillerde",
        "redirectedfrom": "($1 sayfasından yönlendirildi)",
        "redirectpagesub": "Yönlendirme sayfası",
        "redirectto": "Şuraya yönlendir:",
        "lastmodifiedat": "Bu sayfa son olarak $1, $2 tarihinde güncellenmiştir.",
-       "viewcount": "Bu sayfaya {{PLURAL:$1|bir|$1 }} defa erişilmiş.",
+       "viewcount": "Bu sayfaya {{PLURAL:$1|bir|$1}} defa erişilmiş.",
        "protectedpage": "Korumalı sayfa",
-       "jumpto": "Atla:",
+       "jumpto": "Şuraya atla:",
        "jumptonavigation": "kullan",
        "jumptosearch": "ara",
-       "view-pool-error": "Üzgünüz, sunucular şu anda aşırı yüklendi.\nBirçok kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
-       "generic-pool-error": "Üzgünüz, sunucular şu anda aşırı yüklendi.\nBirçok kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
+       "view-pool-error": "Üzgünüz, şu an sunucular aşırı yüklendi.\nÇok fazla kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
+       "generic-pool-error": "Üzgünüz, şu an sunucular aşırı yüklendi.\nÇok fazla kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.",
        "pool-timeout": "Kilit için zaman bitimi bekleniyor",
        "pool-queuefull": "Havuz sırası dolu",
        "pool-errorunknown": "Bilinmeyen hata",
        "poolcounter-usage-error": "Kullanım hatası: $1",
        "aboutsite": "{{SITENAME}} hakkında",
        "aboutpage": "Project:Hakkında",
-       "copyright": "Aksi belirtilmedikçe içerik $1 altındadır.",
+       "copyright": "Aksi belirtilmedikçe içeriğin kullanımı $1 lisansı kapsamında uygundur.",
        "copyrightpage": "{{ns:project}}:Telif hakları",
        "currentevents": "Güncel olaylar",
        "currentevents-url": "Project:Güncel olaylar",
        "youhavenewmessagesfromusers": "{{PLURAL:$3|Başka bir kullanıcıdan|$3 kullanıcıdan}} $1 var ($2).",
        "youhavenewmessagesmanyusers": "Birçok kullanıcıdan $1 var ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}",
-       "newmessagesdifflinkplural": "son {{PLURAL:$1|değişiklik|değişiklikler}}",
+       "newmessagesdifflinkplural": "son {{PLURAL:$1|değişiklik|değişiklik}}",
        "youhavenewmessagesmulti": "$1'de yeni mesajınız var",
-       "editsection": "düzenle",
+       "editsection": "değiştir",
        "editold": "değiştir",
        "viewsourceold": "kaynağı gör",
        "editlink": "değiştir",
        "viewsourcelink": "kaynağı gör",
        "editsectionhint": "Değiştirilen bölüm: $1",
-       "toc": "Konu başlıkları",
+       "toc": "İçindekiler",
        "showtoc": "göster",
        "hidetoc": "gizle",
        "collapsible-collapse": "Daralt",
        "viewdeleted": "$1 gör?",
        "restorelink": "{{PLURAL:$1|bir silinmiş değişikliği|$1 silinmiş değişikliği}}",
        "feedlinks": "Besleme:",
-       "feed-invalid": "Hatalı besleme tipi.",
-       "feed-unavailable": "Sendikalaşma özet akışları geçerli değil.",
+       "feed-invalid": "Hatalı abonelik beslemesi tipi.",
+       "feed-unavailable": "Birleştirme beslemeleri kullanılabilir değil.",
        "site-rss-feed": "$1 RSS Aboneliği",
        "site-atom-feed": "$1 Atom beslemesi",
-       "page-rss-feed": "\"$1\" RSS Beslemesi",
+       "page-rss-feed": "\"$1\" RSS beslemesi",
        "page-atom-feed": "\"$1\" Atom beslemesi",
        "feed-atom": "Atom",
        "feed-rss": "RSS",
        "nstab-category": "Kategori",
        "nosuchaction": "Böyle bir eylem yok",
        "nosuchactiontext": "URL tarafından tanımlanan eylem geçersiz.\nURL'yi yanlış yazmış olabilir, ya da doğru olmayan bir bağlantıyı takip etmiş olabilirsiniz.\nBu, {{SITENAME}} sitesindeki bir hatayı da belirtebilir.",
-       "nosuchspecialpage": "Bu isimde bir özel sayfa yok",
-       "nospecialpagetext": "Bulunmayan bir özel sayfaya girdiniz. Varolan tüm özel sayfaları [[Special:SpecialPages|özel sayfalar]] sayfasında görebilirsiniz.",
+       "nosuchspecialpage": "Böyle bir özel sayfa yok",
+       "nospecialpagetext": "<strong>Mevcut olmayan bir özel sayfayı istediniz.</strong>\n\nVarolan tüm özel sayfaları [[Special:SpecialPages|özel sayfalar]] sayfasında görebilirsiniz.",
        "error": "Hata",
        "databaseerror": "Veritabanı hatası",
-       "databaseerror-text": "Bir veritabanı sorgu hatası oluştu.\nBu yazılım bir hata gösteriyor olabilir.",
+       "databaseerror-text": "Bir veritabanı sorgu hatası oluştu.\nBu, yazılımdaki bir hatadan kaynaklanıyor olabilir.",
        "databaseerror-textcl": "Bir veritabanı sorgu hatası oluştu.",
        "databaseerror-query": "Sorgu: $1",
        "databaseerror-function": "Fonksiyon: $1",
        "databaseerror-error": "Hata: $1",
-       "laggedslavemode": "Uyarı: Sayfa son güncellemeleri içermeyebilir.",
-       "readonly": "Veritabanı kilitlendi",
+       "laggedslavemode": "<strong>Uyarı:</strong> Sayfa son güncellemeleri içermeyebilir.",
+       "readonly": "Veritabanı koruma altına alındı",
        "enterlockreason": "Koruma için bir neden belirtin. Korumanın ne zaman kaldırılacağına dair tahmini bir tarih eklemeyi unutmayın.",
-       "readonlytext": "Veritabanı olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Kısa süre sonra normale dönecektir.\n\nVeritabanını kilitleyen operatörün açıklaması: $1",
+       "readonlytext": "Veritabanı, muhtemelen olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Çalışmaların ardından normale dönecektir.\n\nVeritabanını kilitleyen yöneticinin açıklaması şu şekilde: $1",
        "missing-article": "Veritabanında bulunması istenen \"$1\" $2 adlı sayfaya ait metin bulunamadı.\n\nBu durum, genellikle silinmiş bir sayfanın geçmiş bir sürümüne yönlendirilmekten kaynaklanır.\n\nEğer neden bu değilse yazılımda bir hata ile karşılaşmış olabilirsiniz.\nLütfen URL'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] iletin.",
        "missingarticle-rev": "(revizyon#: $1)",
        "missingarticle-diff": "(Fark: $1, $2)",
-       "readonly_lag": "Yedek sunucular ana sunucu ile güncellenmeye çalışılırken veritabanı otomatik olarak kilitlendi.",
-       "internalerror": "Yazılım hatası",
-       "internalerror_info": "İç hata: $1",
-       "internalerror-fatal-exception": "Tip \"$1\" hayati hata",
-       "filecopyerror": "\"$1\"  \"$2\" dosyasına kopyalanamıyor.",
+       "readonly_lag": "Yedek sunucular ana sunucu ile güncellenirken veritabanı otomatik olarak kilitlendi.",
+       "internalerror": "Dahili hata",
+       "internalerror_info": "Dahili hata: $1",
+       "internalerror-fatal-exception": "\"$1\" tipinde hayati istisna",
+       "filecopyerror": "\"$1\" \"$2\" dosyasına kopyalanamıyor.",
        "filerenameerror": "\"$1\" dosyasının ismi \"$2\" olarak değiştirilemedi.",
        "filedeleteerror": "\"$1\" dosyası silinemedi.",
        "directorycreateerror": "\"$1\" dizini oluşturulamadı",
        "directorynotreadableerror": "\"$1\" dizini okunabilir değil.",
        "filenotfound": "\"$1\" dosyası bulunamadı.",
        "unexpected": "beklenmeyen değer: \"$1\"=\"$2\".",
-       "formerror": "Hata: Form gönderilemiyor",
-       "badarticleerror": "Bu işlem, bu sayfada yapılamaz.",
-       "cannotdelete": "\"$1\" sayfa ya da dosyası silinemedi.\nBaşka bir kullanıcı tarafından silinmiş olabilir.",
-       "cannotdelete-title": "\"$1\" sayfasını silemezsiniz",
-       "delete-hook-aborted": "Silme işlemi kanca tarafından durduruldu. \nHiçbir açıklama yapılmadı.",
+       "formerror": "Hata: Form gönderilemiyor.",
+       "badarticleerror": "Bu işlem bu sayfada gerçekleştirilemez.",
+       "cannotdelete": "\"$1\" sayfa ya da dosyası silinemedi.\nBaşka bir kullanıcı tarafından zaten silinmiş olabilir.",
+       "cannotdelete-title": "\"$1\" sayfası silinemiyor",
+       "delete-hook-aborted": "Silme işlemi uzantı kancası tarafından durduruldu. \nBir açıklama sunulmadı.",
        "no-null-revision": "\"$1\" sayfası için yeni boş bir sürüm oluşturulamadı",
        "badtitle": "Geçersiz başlık",
        "badtitletext": "Girilen sayfa adı ya hatalı ya boş ya da diller arası bağlantı veya vikiler arası bağlantı içerdiğinden geçerli değil. Başlıklarda kullanılması yasak olan bir ya da daha çok karakter içeriyor olabilir.",
+       "title-invalid-empty": "İstenilen sayfanın başlığı boş veya sadece bir ad alanının adını taşıyor.",
+       "title-invalid-utf8": "İstenen sayfanın başlığı geçersiz bir UTF-8 dizisi içeriyor.",
+       "title-invalid-interwiki": "Başlık vikiiçi bağlantı içeriyor",
+       "title-invalid-talk-namespace": "İstenen sayfa başlığı mevcut olmayan bir tartışma sayfasına gönderme yapıyor.",
+       "title-invalid-characters": "İstenen sayfa başlığı geçersiz karakter içeriyor: \"$1\"",
+       "title-invalid-relative": "Başlık göreli yol içeriyor. Göreli yol içeren başlıklar (./, ../ gibi) kullanılamaz, çünkü genelde kullanıcıların tarayıcıları bu şekildeki başlıklara erişimde sıkıntı yaşar.",
+       "title-invalid-magic-tilde": "İstenen sayfa başlığı geçersiz bir sihirli yaklaşık işareti dizisi içeriyor (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "İstenen sayfa başlığı çok uzun. UTF-8 kodlamasında $1 bayttan daha uzun olmamalı.",
+       "title-invalid-leading-colon": "İstenen sayfa başlığının başında geçersiz bir \"iki nokta\" var.",
        "perfcached": "Aşağıdaki veriler önbellekten alınmıştır ve güncel olmayabilir. Önbellekte en fazla {{PLURAL:$1|bir sonuç|$1 sonuç}} mevcut.",
        "perfcachedts": "Aşağıdaki veri önbelleklenmiştir, son güncelleme tarihi: $1. Önbellekte en fazla {{PLURAL:$1|bir sonuç|$4 sonuç}} mevcut.",
-       "querypage-no-updates": "Şu an için güncellemeler devre dışı bırakıldı. Buradaki veri hemen yenilenmeyecektir.",
+       "querypage-no-updates": "Şu an bu sayfa için güncellemeler devre dışı bırakıldı. Buradaki veri hemen yenilenmeyecektir.",
        "viewsource": "Kaynağı gör",
        "viewsource-title": "$1 sayfasının kaynağını görüntüle",
-       "actionthrottled": "Eylem kısılmışdır",
-       "actionthrottledtext": "Anti-spam önlemleri nedeniyle, bir eylemi kısa bir zaman aralığında çok defa yapmanız kısıtlandı, ve siz sınırı aşmış bulunmaktasınız.\nLütfen birkaç dakika sonra yeniden deneyin.",
+       "actionthrottled": "Eylem kısılmıştır",
+       "actionthrottledtext": "Spam'e karşı alınan önlemler dahilinde belirli bir süre aralığında bu eylemin gerçekleştirilmesine izin verilen miktarı aştınız.\nLütfen birkaç dakika sonra yeniden deneyin.",
        "protectedpagetext": "Bu sayfa değişiklik ya da diğer eylemlerin yapılmasını engellemek için koruma altına alınmıştır.",
        "viewsourcetext": "Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:",
-       "viewyourtext": "Bu sayfaya '''yaptığınız değişikliklerin''' kaynağını görünteleyip kopyalayabilirsiniz:",
-       "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır. Eklemek ya da bütün vikilerdeki çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
+       "viewyourtext": "Bu sayfada <strong>yaptığınız değişikliklerin</strong> kaynağını görünteleyip kopyalayabilirsiniz:",
+       "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır.\nBütün vikilere dair çeviri eklemek veya bunları değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
        "editinginterface": "<strong>Uyarı:</strong> Yazılım için arayüz metni sağlayan bir sayfayı değiştiriyorsunuz.\nBu sayfada yapılacak değişiklikler diğer kullanıcıların vikilerindeki kullanıcı arayüzlerinin görünümünü de etkileyecektir.",
        "translateinterface": "Tüm vikilerde çeviri eklemek veya çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesini [//translatewiki.net/] kullanın.",
        "cascadeprotected": "Bu sayfa değişiklik yapılması engellenmiştir, çünkü  \"kademeli\" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:\n$2",
        "hr_tip": "Yatay çizgi (çok sık kullanmayın)",
        "summary": "Özet:",
        "subject": "Konu/başlık:",
-       "minoredit": "Küçük değişiklik",
+       "minoredit": "Bu küçük bir değişiklik",
        "watchthis": "Bu sayfayı izle",
        "savearticle": "Sayfayı kaydet",
        "preview": "Önizleme",
        "accmailtitle": "Parola gönderildi.",
        "accmailtext": "[[User talk:$1|$1]] için rastgele oluşturulan parola $2 adresine gönderildi.\n\nBu yeni hesap için parola, giriş yapıldıktan sonra ''[[Special:ChangePassword|parolayı değiştir]]'' bölümünde değiştirilebilir.",
        "newarticle": "(Yeni)",
-       "newarticletext": "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.\nSayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([$1 yardım sayfasına] bakınız).\nBuraya yanlışlıkla geldiyseniz tarayıcınızın '''geri''' tuşuna tıklayın.",
+       "newarticletext": "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.\nSayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([$1 yardım sayfasına] bakınız).\nBuraya yanlışlıkla geldiyseniz tarayıcınızın  <strong>geri </strong> tuşuna tıklayın.",
        "anontalkpagetext": "----''Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının mesaj sayfasıdır. Bu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız. Bu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir. Eğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:UserLogin/signup|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].''",
        "noarticletext": "Bu sayfa şu anda boştur.\nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],\nya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} değiştirebilirsiniz]</span>.",
-       "noarticletext-nopermission": "Bu sayfa şu anda boştur. \nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz].</span>",
+       "noarticletext-nopermission": "Bu sayfa şu anda boştur. \nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz]</span>, fakat sayfayı yaratma yetkiniz bulunmamaktadır.",
        "missing-revision": "\"{{FULLPAGENAME}}\" sayfasının #$1 sürümü yok.\n\nBu duruma genellikle silinmiş bir sayfaya eski tarihli bir bağlantının takip edilmesi neden olur.\n\nDaha fazla detaylı bilgi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sayfasında bulunabilir].",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" kullanıcı hesabı kayıtlı değil. Bu sayfayı oluşturmak/değiştirmek istiyorsanız lütfen kontrol edin.",
        "userpage-userdoesnotexist-view": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "revision-info": "$2 tarafından oluşturulmuş $1 tarihli sürüm $7",
        "previousrevision": "← Önceki hâli",
        "nextrevision": "Sonraki hâli →",
-       "currentrevisionlink": "en güncel halini göster",
+       "currentrevisionlink": "En güncel hâli",
        "cur": "fark",
        "next": "sonraki",
        "last": "son",
        "history-feed-description": "Viki üzerindeki bu sayfanın değişiklik geçmişi.",
        "history-feed-item-nocomment": "$1, $2'de",
        "history-feed-empty": "İstediğiniz sayfa bulunmamaktadır.\nSayfa vikiden silinmiş ya da ismi değiştirilmiş olabilir.\nKonu ile alakalı diğer sayfaları bulmak için [[Special:Search|vikide arama yapmayı]] deneyin.",
+       "history-edit-tags": "Seçilen sürümlerin etiketlerini düzenle",
        "rev-deleted-comment": "(düzenleme özeti silindi)",
        "rev-deleted-user": "(kullanıcı adı silindi)",
        "rev-deleted-event": "(kayıt ayrıntıları silindi)",
        "rev-showdeleted": "göster",
        "revisiondelete": "Sürümleri sil/geri getir",
        "revdelete-nooldid-title": "Hedef sürüm geçersiz",
-       "revdelete-nooldid-text": "Bu fonksiyonu uygulamak için belirli hedef değişiklik veya değişikileriniz yok. Sunulmuş olan revizyon mevcut değil, veya mevcut revizyonu gizlemeye çalışıyorsunuz.",
+       "revdelete-nooldid-text": "Bu fonksiyonu uygulamak için bir hedef sürüm belirtilmemiş, belirtilen sürüm mevcut değil veya mevcut sürümü gizlemeye çalışıyorsunuz.",
        "revdelete-no-file": "Belirtilen dosya mevcut değil.",
        "revdelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" dosyasının $2 $3 tarihli silinmiş bir revizyonunu görmek istediğinize emin misiniz?",
        "revdelete-show-file-submit": "Evet",
        "mergehistory-empty": "Hiçbir sürüm birleştirilemez.",
        "mergehistory-success": "[[:$1]] sayfasının $3 {{PLURAL:$3|revizyonu|revizyonu}} başarıyla [[:$2]] içine birleştirildi.",
        "mergehistory-fail": "Geçmiş birleştirmesi gerçekleştirlemiyor, lütfen sayfa ve zaman parametrelerini yeniden kontrol edin.",
+       "mergehistory-fail-toobig": "Limit olarak belirlenen $1 {{PLURAL:$1|sürümden|sürümden}} daha fazlasını taşımak gerekeceği için geçmiş birleştirme gerçekleştirilemiyor.",
        "mergehistory-no-source": "Kaynak sayfa $1 bulunmamaktadır.",
        "mergehistory-no-destination": "Hedef sayfa $1 bulunmamaktadır.",
        "mergehistory-invalid-source": "Kaynak sayfanın geçerli bir başlığı olmalı.",
        "showhideselectedversions": "Seçili sürümleri göster/gizle",
        "editundo": "geri al",
        "diff-empty": "(Fark yok)",
-       "diff-multi-sameuser": "(Aynı kullanıcıdan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)",
+       "diff-multi-sameuser": "(Aynı kullanıcının {{PLURAL:$1|aradaki bir diğer değişikliği|aradaki diğer $1 değişikliği}} gösterilmiyor)",
        "diff-multi-otherusers": "({{PLURAL:$2|Bir diğer kullanıcıdan|$2 kullanıcıdan}} {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)",
        "diff-multi-manyusers": "($2 kullancıdan fazla {{PLURAL:$2|kullanıcı|kullanıcı}} tarafından yapılan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)",
        "difference-missing-revision": "Bu farkın {{PLURAL:$2|bir revizyonu|$2 revizyonu}} ($1) {{PLURAL:$2|bulunamadı|bulunamadı}}.\n\nBu genellikle, silinen bir sayfaya olan eski tarihli bir fark sayfasına bağlantılardan dolayı olur.\nAyrıntılar [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme günlüğünde] bulunabilir.",
        "right-browsearchive": "Silinen sayfaları ara",
        "right-undelete": "Bir sayfanın silinmesini geri al",
        "right-suppressrevision": "Sysoplardan gizlenmiş revizyonlarını gizle ve göster",
+       "right-viewsuppressed": "Herhangi bir kullanıcıdan saklanan sürümleri göster",
        "right-suppressionlog": "Özel günlükleri gör",
        "right-block": "Diğer kullanıcıların değişiklik yapmalarını engelle",
        "right-blockemail": "Bir kullanıcının e-posta göndermesini engelle",
        "right-override-export-depth": "Sayfaları, derinlik 5'e kadar bağlantılı sayfalarla beraber, dışa aktar",
        "right-sendemail": "Diğer kullanıcılara e-posta gönder",
        "right-passwordreset": "Parola sıfırlama e-postalarını görür",
+       "right-managechangetags": "Veritabanında [[Special:Tags|etiket]] oluşturma veya silme",
+       "right-applychangetags": "Değişiklikleriyle beraber [[Special:Tags|etiketleri]] uygula",
+       "right-changetags": "Tekil sürümler ve günlük kayıtlarına rastgele [[Special:Tags|etiket]] ekleme veya çıkarma",
        "newuserlogpage": "Yeni kullanıcı kayıtları",
        "newuserlogpagetext": "En son kaydolan kullanıcı kayıtları.",
        "rightslog": "Kullanıcı hakları kayıtları",
        "action-viewmywatchlist": "izleme listeni gör",
        "action-viewmyprivateinfo": "kendi özel bilgilerinizi görmeye",
        "action-editmyprivateinfo": "kendi özel bilgilerinizi değiştirmeye",
+       "action-editcontentmodel": "bir sayfanın içerik modelini düzenle",
+       "action-managechangetags": "veritabanındaki etiketleri yarat ve sil",
+       "action-applychangetags": "değişikliklerle beraber etiketlendirmeyi de uygula",
+       "action-changetags": "tekil sürümlere veya günlük kayıtlarına etiket ekleme veya çıkarma",
        "nchanges": "$1 {{PLURAL:$1|değişiklik|değişiklik}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|son ziyaretten bu yana}}",
        "enhancedrc-history": "geçmiş",
        "recentchanges": "Son değişiklikler",
        "recentchanges-legend": "Son değişiklikler seçenekleri",
-       "recentchanges-summary": "Yapılan en son değişiklikleri bu sayfadan izleyin.",
+       "recentchanges-summary": "Vikide yapılan en son değişiklikleri bu sayfadan izleyin.",
        "recentchanges-noresult": "Belirtilen kriterlere uyan herhangi bir değişiklik bulunamadı.",
        "recentchanges-feed-description": "Bu beslemede, viki'de yapılan en son değişiklikleri takip edin.",
-       "recentchanges-label-newpage": "Bu değişiklikle [[Special:NewPages|yeni bir sayfa]] oluşturuldu",
-       "recentchanges-label-minor": "Küçük değişiklik",
-       "recentchanges-label-bot": "Bir bot tarafından yapılan değişiklik",
+       "recentchanges-label-newpage": "Bu değişiklikle yeni bir sayfa oluşturuldu",
+       "recentchanges-label-minor": "Bu küçük bir değişiklik",
+       "recentchanges-label-bot": "Bu değişiklik bir bot tarafından yapıldı",
        "recentchanges-label-unpatrolled": "Bu değişiklik henüz gözlenmemiş",
        "recentchanges-label-plusminus": "Sayfa boyutundaki değişikliğin bayt bazında değeri",
        "recentchanges-legend-heading": "'''Gösterge:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}",
-       "rcnotefrom": "<strong>$2</strong> tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <strong>$1</strong> tanesi gösterilmektedir).",
+       "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
        "rcshowhideminor-show": "Göster",
        "uploaderror": "Yükleme hatası",
        "upload-recreate-warning": "'''Uyarı: Bu adı taşıyan bir dosya silindi veya taşındı.'''\n\nBu sayfanın silme ve taşıma günlüğü kolaylık için burada sağlanmıştır:",
        "uploadtext": "Dosya yüklemek için aşağıdaki formu kullanın.\nÖnceden yüklenmiş dosyaları görmek ya da aramak için [[Special:FileList|yüklenmiş dosyalar listesine]] bakın, (tekrar) yüklenenler [[Special:Log/upload|yükleme günlüğü]]nde, silinenler [[Special:Log/delete|silinme günlüğü]]nde tutulumaktadır.\n\nBir sayfaya dosya koymak için bağlantınızda aşağıdaki formlardan birini kullanın;\n* Dosyanın tam sürümünü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.jpg]]</nowiki></code>'''\n* Sol kenarda bir kutu içinde, altında tanım olarak 'alt metin' ile, 200 piksel genişiğindeki sürümü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.png|200px|thumb|left|alt metin]]</nowiki></code>'''\n* Dosyayı göstermeden, dosyaya direk bağlantı vermek için: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosya.ogg]]</nowiki></code>'''",
-       "upload-permitted": "İzin verilen dosya türleri: $1.",
-       "upload-preferred": "Tercih edilen dosya türleri: $1.",
-       "upload-prohibited": "Yasaklanan dosya türleri: $1.",
+       "upload-permitted": "İzin verilen dosya {{PLURAL:$2|türü|türleri}}: $1.",
+       "upload-preferred": "Tercih edilen dosya {{PLURAL:$2|türü|türleri}}: $1.",
+       "upload-prohibited": "Yasaklanan dosya {{PLURAL:$2|türü|türleri}}: $1.",
        "uploadlogpage": "Dosya yükleme kaydı",
        "uploadlogpagetext": "Aşağıda en son eklenen [[Special:NewFiles|dosyaların bir listesi]] bulunmaktadır.",
        "filename": "Dosya adı",
        "uploaddisabledtext": "Dosya yüklemeleri devredışı bırakılmıştır.",
        "php-uploaddisabledtext": "PHP dosyası yüklemeleri devre dışıdır. Lütfen file_uploads ayarını kontrol edin.",
        "uploadscripted": "Bu dosya bir internet tarayıcısı tarafından hatalı çevrilebilecek bir HTML veya script kodu içermektedir.",
+       "uploadscriptednamespace": "Bu SVG dosyası geçersiz \"$1\" alan adını içermektedir.",
        "uploadinvalidxml": "Yüklenen dosyadaki XML işlenemedi.",
        "uploadvirus": "Bu dosya virüslüdür! Detayları: $1",
        "uploadjava": "Dosya, bir Java .classdosyası içeren bir ZIP dosyasıdır.\nJava dosyalarının yüklenmesine izin verilmemektedir, zira güvenlik kısıtlamalarının atlanmasına neden olabilmektedirler.",
        "unwatchedpages": "İzlenmeyen sayfalar",
        "listredirects": "Yönlendirmeleri listele",
        "listduplicatedfiles": "Kopyası bulunan dosyalar listesi",
+       "listduplicatedfiles-summary": "Bu, en son sürümü başka bir dosyanın en son sürümünün aynısı olan dosyaların listesidir. Sadece yerel dosyalar gözönüe alınmaktadır.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] dosyasının [[$3|{{PLURAL:$2|bir kopyası|$2 kopyası}}]] var.",
        "unusedtemplates": "Kullanılmayan şablonlar",
        "unusedtemplatestext": "Bu sayfa, {{ns:template}} alan adında bulunan ve diğer sayfalara eklenmemiş olan sayfaları listeler. Şablonlara olan diğer bağlantıları da kontrol etmeden silmeyiniz.",
        "unusedtemplateswlh": "diğer bağlantılar",
        "unusedimages": "Kullanılmayan dosyalar",
        "wantedcategories": "İstenen kategoriler",
        "wantedpages": "İstenen sayfalar",
+       "wantedpages-summary": "Sadece yönlendirme sayfalarınca bağlantı veilen sayfalar hariç, kendine en çok bağlantı verilmiş ve mevcut olmayan sayfaların listesi. Yönlendirme sayfalarınca bağlantı verilmiş, mevcut olmayan sayfaları görmek için bakınız: [[{{#special:BrokenRedirects}}]]",
        "wantedpages-badtitle": "Sonuç kümesinde geçersiz başlık: $1",
        "wantedfiles": "İstenen dosyalar",
        "wantedfiletext-cat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>. Ek olarak, varolmayan dosyaları gömen sayfalar [[:$1]] sayfasında listelenmiştir.",
+       "wantedfiletext-cat-noforeign": "Aşağıdaki dosyalar kullanılıyor fakar mevcut değiller. Ek olarak, mevcut olmayan dosyaları içeren sayfalar şurada listelenmektedir:  [[:$1]]",
        "wantedfiletext-nocat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>.",
        "wantedfiletext-nocat-noforeign": "Aşağıdaki dosyalar kullanıyor ancak mevcut değil.",
        "wantedtemplates": "İstenen şablonlar",
        "mostlinked": "Kendisine en fazla bağlantı verilmiş sayfalar",
        "mostlinkedcategories": "En çok maddeye sahip kategoriler",
-       "mostlinkedtemplates": "En çok kullanılan şablonlar",
+       "mostlinkedtemplates": "En çok dahil edilen sayfalar",
        "mostcategories": "En fazla kategoriye bağlanmış sayfalar",
        "mostimages": "En çok bağlantı verilmiş dosyalar",
        "mostinterwikis": "En çok interwiki'ye sahip sayfalar",
        "logempty": "Kayıtlarda eşleşen bilgi yok.",
        "log-title-wildcard": "Bu metinle başlayan başlıklar ara",
        "showhideselectedlogentries": "Seçili günlük girdilerinin görünürlüğünü değiştir",
+       "log-edit-tags": "Seçili kayıtların etiketlerini düzenle",
        "allpages": "Tüm sayfalar",
        "nextpage": "Sonraki sayfa ($1)",
        "prevpage": "Önceki sayfa ($1)",
        "listgrouprights-namespaceprotection-namespace": "Ad alanı",
        "listgrouprights-namespaceprotection-restrictedto": "Kullanıcının değişiklik yapmasına izin veren hak(lar)",
        "trackingcategories": "Eşleşen kategoriler",
+       "trackingcategories-summary": "Bu sayfa MediaWiki yazılımı tarafından otomatik olarak doldurulan takip kategorilerini listelemektedir. {{ns:8}} ad alanındaki ilgili sistem mesajları değiştirilerek isimleri düzenlenebilir.",
        "trackingcategories-msg": "İzleme kategorisi",
        "trackingcategories-name": "Mesaj Duvarı",
+       "trackingcategories-desc": "Kategori dahil etme kriterleri",
+       "noindex-category-desc": "Bu sayfa robotlar tarafından dizinlenmemektedir çünkü üzerinde <code><nowiki>__NOINDEX__</nowiki></code> sihirli kodu bulunmakta ve bu işarete müsade edilen bir ad alanına dahil.",
+       "index-category-desc": "Bu sayfada <code><nowiki>__INDEX__</nowiki></code> kodu var (ve bu işarete izin verilen bir ad alanında), bu yüzden normalde yapılmayacak olsa da, robotlar tarafından dizinleniyor.",
+       "post-expand-template-inclusion-category-desc": "Sayfa, bütün şablonlar genişletildiğinde <code>$wgMaxArticleSize</code> boyutundan büyük olacağı için bazı şablonlar genişletilmedi.",
+       "post-expand-template-argument-category-desc": "Bir şablonun içerdiği bir önerme (üçlü kıvrımlı parantez içinde bulunan, örneğin <code>{{{hede}}}</code> şeklinde bir girdi) genişletildiğinde bu sayfanın büyüklüğü <code>$wgMaxArticleSize</code> büyüklüğünü geçmektedir.",
+       "expensive-parserfunction-category-desc": "Bu sayfa çok fazla zengin derleyici fonksiyonu çağrısına (örneğin <code>#ifexist</code>) sahiptir. Lütfen bakınız: [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]",
        "broken-file-category-desc": "Sayfa bozuk dosya bağlantısı (mevcut olmayan bir dosyayı kullanmaya çalışan bağlantı) içeriyor.",
+       "hidden-category-category-desc": "Bu kategorinin sayfa içeriğinde bulunan <code><nowiki>__HIDDENCAT__</nowiki></code>, sayfalardaki kategori bağlantıları kutusunda varsayılan olarak gösterilmesini engellemektedir.",
        "trackingcategories-nodesc": "Açıklama yok.",
        "trackingcategories-disabled": "Kategori devre dışı",
        "mailnologin": "Gönderi adresi yok.",
        "emailccsubject": "$1'e gönderdiğiniz mesajın kopyası: $2",
        "emailsent": "E-posta gönderildi",
        "emailsenttext": "E-postanız gönderildi.",
-       "emailuserfooter": "Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki \"Kullanıcıya e-posta gönder\" fonksiyonu ile gönderilmiştir.",
+       "emailuserfooter": "Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki \"Kullanıcıya e-posta gönder\" (\"{{int:emailpage}}\") fonksiyonu ile gönderilmiştir.",
        "usermessage-summary": "Sistem mesajı bırakın.",
        "usermessage-editor": "Sistem habercisi",
        "watchlist": "İzleme listesi",
        "rollback": "değişiklikleri geri al",
        "rollbacklink": "geri döndür",
        "rollbacklinkcount": "$1 {{PLURAL:$1|değişikliği|değişikliği}} geri döndür",
-       "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|değişiklikten|değişiklikten}} fazla geri döndür",
+       "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|değişiklikten|değişiklikten}} daha fazlasını geri döndür",
        "rollbackfailed": "geri alma işlemi başarısız",
        "cantrollback": "Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.",
-       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geriye alınamıyor;\nbaşka birisi sayfada değişiklik yaptı ya da sayfayı geriye aldı.\n\nSon değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geri döndürülemiyor;\nbaşka birisi sayfada değişiklik yaptı ya da sayfayı geri döndürdü.\n\nSon değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Değişiklik özeti: \"''$1''\" idi.",
        "revertpage": "[[Special:Contributions/$2|$2]] [[User talk:$2|mesaj]] tarafından yapılan değişiklikler geri alınarak, [[User:$1|$1]] tarafından değiştirilmiş önceki sürüm geri getirildi.",
        "revertpage-nouser": "Gizli bir kullanıcı tarafından yapılan değişiklikler geri alınarak {{GENDER:$1|[[User:$1|$1]]}} tarafından yapılan son revizyon geri getirildi",
        "undelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" dosyasının $2 $3 tarihli silinmiş bir revizyonunu görmek istediğinize emin misiniz?",
        "undelete-show-file-submit": "Evet",
        "namespace": "Ad alanı:",
-       "invert": "Seçili haricindekileri göster",
-       "tooltip-invert": "Seçili ad alanındaki sayfalara olan değişiklikleri gizlemek için bu kutucuğu işaretleyin (ve ilgili ad alanı, eğer seçiliyse)",
+       "invert": "Seçimi ters çevir",
+       "tooltip-invert": "Seçili ad alanındaki (ve seçiliyse, ilişkili ad alanlarındaki) sayfalara olan değişiklikleri gizlemek için bu kutucuğu işaretleyin",
+       "tooltip-whatlinkshere-invert": "Seçili ad alanlarında bulunan sayfalardaki bağlantıları gizlemek için bu kutucuğu işaretleyin.",
        "namespace_association": "İlişkili ad alanı",
        "tooltip-namespace_association": "Seçili ad alanıyla ilgili tartışma ya da madde ad alanlarını da eklemek için bu kutucuğu işaretleyin",
        "blanknamespace": "(Ana)",
        "contributions-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "nocontribs": "Bu kriterlere uyan değişiklik bulunamadı",
        "uctop": "(son)",
-       "month": "Ay:",
+       "month": "Bu aya kadar (ve önceki aylar):",
        "year": "Bu yıla kadar (ve önceki yıllar):",
        "sp-contributions-newbies": "Sadece yeni kullanıcıların katkılarını göster",
        "sp-contributions-newbies-sub": "Yeni kullanıcılar için",
        "move-page": "$1 taşınıyor",
        "move-page-legend": "İsim değişikliği",
        "movepagetext": "Aşağıdaki formu kullanmak sayfanın adını değiştirir, tüm geçmiş kayıtlarını da yeni isme aktarır.\nEski başlık yeni başlığa yönlendirme hâline dönüşür. Otomatik olarak eski başlığa yönlendirmeleri güncelleyebilirsiniz.\nEğer istemezseniz, tüm [[Special:DoubleRedirects|çift]] veya [[Special:BrokenRedirects|geçersiz]] yönlendirmeleri kontrol ettiğinizden emin olun.\nTüm bağlantıların olması gerektiği gibi çalıştığından sizin sorumlu olduğunuzu unutmayınız.\n\nEğer yeni isimde bir madde zaten varsa isim değişikliği '''yapılmayacaktır''', sonraki bir yönlendirme olup geçmiş değişiklik geçmişi olmadığı müddetçe.\nBu şu anlama gelir ki, eğer bir hata yaparsanız sayfayı değiştirildiği isme geri isimlendirebilirsiniz, ve mevcut bir sayfanın üstüne yazmazsınız.\n\n'''UYARI!'''\nBu değişim popüler bir sayfa için etkili ve beklenmeyen sonuçlar doğurabilir; lütfen devam etmeden önce olabilecekleri anladığınızdan emin olun.",
-       "movepagetext-noredirectfixer": "Aşağıdaki formu doldurmak bir sayfayı yeniden adlandırır, tüm geçmişini yeni ada taşır.\nEski başlık yeni başlığa bir yönlendirme sayfası olur.\n[[Special:DoubleRedirects|Çift]] ya da [[Special:BrokenRedirects|nozuk yönlendirmeler]] sayfalarını kontrol edin.\nBağlantıların gitmeleri gereken yerlere gittiklerinden emin olmak sizin sorumluluğunuzdadır.\n\nYeni başlıkta mevcut bir sayfa varsa, boş yada bir yönlendirme olmadıkça ve değişiklik geçmişi bulunmadıkça, sayfa '''taşınmayacaktır'''.\nBu şu anlama gelir, bir sayfayı yanlışlık yaparsanız sayfayı eski adıyla yeniden adlandırabilirsiniz, bu mevcut sayfanın üzerine yazmaz.\n\n'''Uyarı!'''\nBu popüler bir sayfa için etkili ve beklenmedik bir değişiklik olabilir;\nLütfen onaylamadan önce bunun sonuçlarını anladığınızdan emin olun.",
+       "movepagetext-noredirectfixer": "Aşağıdaki formu doldurmak bir sayfayı yeniden adlandırır, tüm geçmişini yeni ada taşır.\nEski başlık yeni başlığa bir yönlendirme sayfası olur.\n[[Special:DoubleRedirects|Çift]] ya da [[Special:BrokenRedirects|bozuk yönlendirmeler]] sayfalarını kontrol edin.\nBağlantıların gitmeleri gereken yerlere gittiklerinden emin olmak sizin sorumluluğunuzdadır.\n\nYeni başlıkta mevcut bir sayfa varsa, boş yada bir yönlendirme olmadıkça ve değişiklik geçmişi bulunmadıkça, sayfa '''taşınmayacaktır'''.\nBu şu anlama gelir, bir sayfayı yanlışlık yaparsanız sayfayı eski adıyla yeniden adlandırabilirsiniz, bu mevcut sayfanın üzerine yazmaz.\n\n'''Uyarı!'''\nBu popüler bir sayfa için etkili ve beklenmedik bir değişiklik olabilir;\nLütfen onaylamadan önce bunun sonuçlarını anladığınızdan emin olun.",
        "movepagetalktext": "İlişikteki tartışma sayfası da (eğer varsa) otomatik olarak yeni isme taşınacaktır. Ama şu durumlarda '''taşınmaz''':\n\n*Alanlar arası bir taşıma ise, (örnek: \"Project:\" --> \"Help:\")\n*Yeni isimde bir tartışma sayfası zaten var ise,\n*Alttaki kutucuğu seçmediyseniz.\n\nBu durumlarda sayfayı kendiniz aktarmalısınız.",
        "movearticle": "Eski isim",
        "moveuserpage-warning": "'''Uyarı:''' Bir kullanıcı sayfasını taşımak üzeresiniz. Lütfen sadece sayfanın taşınacağına, ancak kullanıcının yeniden ''adlandırılmayacağına'' dikkat edin.",
        "thumbnail-temp-create": "Geçici küçük resim dosyası oluşturulamıyor",
        "thumbnail-dest-create": "Küçük resim hedefe kaydedilemiyor",
        "thumbnail_invalid_params": "Geçersiz küçük resim parametreleri",
+       "thumbnail_toobigimagearea": "$1 boyutundan büyük olan dosyalar",
        "thumbnail_dest_directory": "Hedef dizini oluşturulamıyor",
        "thumbnail_image-type": "Görüntü türü desteklenmiyor",
        "thumbnail_gd-library": "Eksik GD kütüphanesi yapılandırması: kayıp fonksiyon $1",
        "thumbnail_image-missing": "Dosya kayıp gibi görünüyor: $1",
        "thumbnail_image-failure-limit": "Yakın zamanda bu küçük resmin oluşturulması için çok fazla başarısız  girişim oldu ($1 ya da daha fazla). Lütfen daha sonra yeniden deneyin.",
        "import": "Sayfaları aktar",
-       "importinterwiki": "Vikilerarası içe aktarım",
+       "importinterwiki": "Başka bir vikiden içe aktar",
        "import-interwiki-text": "İçe aktarmak için bir viki ve sayfa başlığı seçin.\nRevizyon tarihleri ve yazarların isimleri korunacaktır.\nBütün vikilerarası içe aktarım eylemleri [[Special:Log/import|içe aktarım günlüğünde]] kaydedilmektedir.",
        "import-interwiki-sourcewiki": "Kaynak viki:",
        "import-interwiki-sourcepage": "Kaynak sayfa:",
        "import-interwiki-history": "Sayfanın tüm geçmiş sürümlerini kopyala",
        "import-interwiki-templates": "Tüm şablonları içer",
        "import-interwiki-submit": "Import",
+       "import-mapping-default": "Varsayılan konumların içine aktar",
+       "import-mapping-namespace": "Bir ad alanının içine aktar:",
+       "import-mapping-subpage": "Şu sayfanın alt sayfaları olarak içe aktar:",
        "import-upload-filename": "Dosya adı:",
        "import-comment": "Yorum:",
        "importtext": "Lütfen dosyayı [[Special:Export|dışa aktarım yardımcı yazılımıyla]] kaynak vikiden dışa aktarın.\nBilgisayarınıza kaydedin ve buraya yükleyin.",
        "importcantopen": "İçeri aktarma dosyası açılamadı",
        "importbadinterwiki": "Yanlış interwiki bağlantısı",
        "importsuccess": "Aktarma sonuçlandı!",
-       "importnosources": "Hiç vikilerarası içe aktarım kaynağı tanımlanmamış ve doğrudan geçmiş yüklemeleri devre dışı.",
+       "importnosources": "Hangi vikiden içeri aktarılacağı tanımlanmamış ve doğrudan geçmiş yüklemeleri devre dışı.",
        "importnofile": "Bir aktarım dosyası yüklenmedi.",
        "importuploaderrorsize": "İçe aktarılmış dosyanın yüklenmesi başarısız oldu.\nDosya, izin verilen yükleme boyutundan büyük.",
        "importuploaderrorpartial": "İçe aktarılmış dosyanın yüklenmesi başarısız oldu.\nDosyanın sadece bir kısmı yüklendi.",
        "exif-imagedescription": "Resim başlığı",
        "exif-make": "Kamera markası",
        "exif-model": "Kamera modeli",
-       "exif-software": "Yazılım",
+       "exif-software": "Kullanılan yazılım",
        "exif-artist": "Yaratıcısı",
        "exif-copyright": "Telif hakkı sahibi",
        "exif-exifversion": "Exif sürümü",
        "exif-pixelxdimension": "Resim yüksekliği",
        "exif-usercomment": "Kullanıcı yorumu",
        "exif-relatedsoundfile": "İlişkin ses dosyası",
-       "exif-datetimeoriginal": "Orjinal yaratma zamanı",
+       "exif-datetimeoriginal": "Verinin ilk yaratılma zamanı",
        "exif-datetimedigitized": "Dijitalleştirme zamanı",
        "exif-subsectime": "Alt-ikinci zaman",
        "exif-subsectimeoriginal": "Orjinal alt-ikinci zaman",
        "hijri-calendar-m10": "Şevval",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mesaj]])",
        "duplicate-defaultsort": "'''Uyarı:''' Varsayılan \"$2\" sınıflandırma anahtarı, önceki \"$1\" sınıflandırma anahtarını geçersiz kılıyor.",
+       "duplicate-displaytitle": "<strong>Uyarı:</strong> \"$2\" şeklindeki yeni başlık \"$1\" şeklindeki eski başlığın üzerine yazılacak.",
+       "invalid-indicator-name": "<strong>Hata:</strong> Sayfa durum göstergelerinin <code>name</code> özelliği boş olamaz.",
        "version": "Sürüm",
        "version-extensions": "Yüklü ekler",
        "version-skins": "Yüklü görünümler",
        "tags-actions-header": "Eylemler",
        "tags-active-yes": "Evet",
        "tags-active-no": "Hayır",
+       "tags-source-extension": "Bir uzantı tarafından tanımlanmış",
+       "tags-source-manual": "Kullanıcı ve botlar tarafından elle uygulanır",
        "tags-source-none": "Artık kullanımda",
        "tags-edit": "değiştir",
        "tags-delete": "sil",
        "tags-create-reason": "Neden:",
        "tags-create-submit": "Oluştur",
        "tags-create-no-name": "Etik adı belirtmeniz gerekiyor",
+       "tags-create-invalid-chars": "Etiket isimleri virgül (<code>,</code>) veya ileri eğik çizgi (<code>/</code>) içeremez.",
+       "tags-create-invalid-title-chars": "Sayfa başlıklarında kullanılamayan karakterler etiketlerde kullanılamaz.",
+       "tags-create-already-exists": "\"$1\" etiketi zaten mevcut.",
+       "tags-create-warnings-above": "\"$1\" etiketini oluşturmaya çalışırken aşağıdaki {{PLURAL:$2|hatayla|hatalarla}} karşılaşıldı:",
+       "tags-create-warnings-below": "Etiketi yaratmaya devam etmek istiyor musunuz?",
        "tags-delete-title": "Etiketi Sil",
+       "tags-delete-explanation-initial": "\"$1\" etiketini veritabanından silmek üzeresiniz.",
+       "tags-delete-explanation-in-use": "Etiket haliahazırda uygulandığı {{PLURAL:$2|$2 sürüm veya günlük kaydından|$2 sürüm ve/veya günlük kaydının tümünden}} kaldırılacaktır.",
+       "tags-delete-explanation-warning": "Bu işlem veritabanı yöneticileri tarafından dahi <strong>geri alınamaz</strong> ve <strong>silinemez</strong>. Silmek istediğiniz etiketin bu olduğunda emin olun.",
+       "tags-delete-explanation-active": "<strong>\"$1\" etiketi hala aktif ve gelecekte de uygulanmaya devam edecek.</strong> Bunun olmasını önlemek için bu etiketin uygulanmak üzere ayarlandığı yer(ler)e gidin ve oradan kullanım dışı bırakın.",
        "tags-delete-reason": "Gerekçe:",
+       "tags-delete-submit": "Bu etiketi geri döndürülemez şekilde sil",
+       "tags-delete-not-allowed": "Bir uzantı tarafından tanımlanan etiketler o uzantı özellikle izin vermedikçe silinemez.",
+       "tags-delete-not-found": "\"$1\" etiketi mevcut değil.",
+       "tags-delete-too-many-uses": "\"$1\" etiketinin uygulandığı sürüm sayısı fazla ($2 sürüm); bu yüzden bu etiket silinemez.",
+       "tags-delete-warnings-after-delete": "\"$1\" etiketi başarıyla silindi; fakat aşağıdaki {{PLURAL:$2|uyarıyla|uyarılarla}} karşılaşıldı:",
        "tags-activate-title": "Aktif etiket",
+       "tags-activate-question": "\"$1\" etiketini etkinleştirmek üzeresiniz.",
        "tags-activate-reason": "Neden:",
+       "tags-activate-not-allowed": "\"$1\" etiketini etkinleştirmek mümkün değil.",
+       "tags-activate-not-found": "\"$1\" etiketi mevcut değil.",
        "tags-activate-submit": "Etkinleştir",
        "tags-deactivate-title": "Aktif olmayan etiket",
+       "tags-deactivate-question": "\"$1\" etiketini devre dışı bırakmak üzeresiniz.",
+       "tags-deactivate-reason": "Sebep:",
+       "tags-deactivate-not-allowed": "\"$1\" etiketini devre dışı bırakmak mümkün değil.",
        "tags-deactivate-submit": "Aktif değil",
+       "tags-apply-no-permission": "Değişikliklerinizle beraber etiket değişiklikleri uygulamak için yetkiniz yok.",
+       "tags-apply-not-allowed-one": "\"$1\" etiketi elle uygulanamaz.",
+       "tags-apply-not-allowed-multi": "Bu {{PLURAL:$2|etiket|etiketler}} elle uygulanamaz: $1",
+       "tags-update-no-permission": "Tekil sürüm ve kayıt girilerindeki değişiklik etiketlerini değiştirmek veya kaldırmak için yetkiniz yok.",
+       "tags-update-add-not-allowed-one": "\"$1\" etiketi elle uygulanamaz.",
+       "tags-update-add-not-allowed-multi": "Bu {{PLURAL:$2|etiket|etiketler}} elle uygulanamaz: $1",
+       "tags-update-remove-not-allowed-one": "\"$1\" etiketinin kaldırılmasına izin verilmiyor.",
+       "tags-update-remove-not-allowed-multi": "Bu {{PLURAL:$2|etiket|etiketler}} elle kaldırılamaz: $1",
        "tags-edit-title": "Etiketleri düzenle",
        "tags-edit-manage-link": "Etiketleri yönet",
+       "tags-edit-revision-selected": "[[:$2]] için seçilen {{PLURAL:$1|sürüm|sürümler}}:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Seçilen günlük kaydı|Seçilen günlük kayıtları}}:",
+       "tags-edit-revision-legend": "{{PLURAL:$1|Bu sürüme|Bu $1 sürüme}} etiket ekle veya kaldır.",
+       "tags-edit-logentry-legend": "{{PLURAL:$1|Bu günlük kaydına|Bu $1 günlük kaydına}} etiket ekle veya kaldır",
        "tags-edit-existing-tags": "Mevcut etiketler:",
        "tags-edit-existing-tags-none": "\"Hiçbiri\"",
        "tags-edit-new-tags": "Yeni etiketler:",
        "tags-edit-add": "Bu etiketleri ekleyin:",
+       "tags-edit-remove": "Bu etiketleri kaldır:",
        "tags-edit-remove-all-tags": "(tüm etiketleri kaldır)",
+       "tags-edit-chosen-placeholder": "Bazı etiketleri seç",
+       "tags-edit-chosen-no-results": "Bunlarla eşleşen etiket bulunamadı",
        "tags-edit-reason": "Neden:",
+       "tags-edit-revision-submit": "{{PLURAL:$1|Bu sürüme|$1 sürüme}} değişiklikleri uygula",
+       "tags-edit-logentry-submit": "{{PLURAL:$1|Bu günlük kaydına|Bu $1 günlük kaydına}} değişiklikleri uygula",
+       "tags-edit-success": "Değişiklikler başarıyla uygulandı.",
+       "tags-edit-failure": "Değişiklikler uygulanamadı:\n$1",
+       "tags-edit-nooldid-title": "Hedef sürüm geçersiz",
+       "tags-edit-nooldid-text": "Bu işlemi gerçekleştirmek için herhangi bir hedef sürüm belirtmediniz, ya da belirtilen sürüm mevcut değil.",
        "tags-edit-none-selected": "Eklemek ya da çıkarmak için en az bir etiketi seçin lütfen.",
        "comparepages": "Sayfaları karşılaştır",
        "compare-page1": "Sayfa 1",
        "revdelete-restricted": "hizmetliler için uygulanmış kısıtlamalar",
        "revdelete-unrestricted": "hizmetliler için kaldırılmış kısıtlamalar",
        "logentry-block-block": "$1 {{GENDER:$2|engelledi}} {{GENDER:$4|$3}} engelleme süresi: $5 $6",
+       "logentry-block-unblock": "$1 kullanıcısının {{GENDER:$2|engeli kaldırıldı}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
+       "logentry-suppress-block": "{{GENDER:$4|$3}} $1 tarafından {{GENDER:$2|engellendi}} Zamanaşımı: $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
+       "logentry-import-upload": "$1 dosya yükleme ile {{GENDER:$2|içe aktardı}}: $3",
+       "logentry-import-interwiki": "$1 başka bir vikiden şunu {{GENDER:$2|içe aktardı}}: $3",
+       "logentry-merge-merge": "$1, $3 sayfasını $4 ile {{GENDER:$2|birleştirdi}}($5 tarihine kadar olan sürümleri)",
        "logentry-move-move": "$1, $3 sayfasını $4 sayfasına {{GENDER:$2|taşıdı}}",
        "logentry-move-move-noredirect": "$1, $3 sayfasını $4 sayfasına yönlendirme olmaksızın {{GENDER:$2|taşıdı}}",
        "logentry-move-move_redir": "$1, $3 sayfasını $4 sayfasına yönlendirme üzerinden {{GENDER:$2|taşıdı}}",
        "logentry-rights-autopromote": "$1, $4 iken $5 olarak otomatik {{GENDER:$2|terfi edildi}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|yükledi}} $3",
        "logentry-upload-overwrite": "$1 $3 dosyasının yeni bir sürümünü {{GENDER:$2|yükledi}}",
+       "logentry-upload-revert": "$1 {{GENDER:$2|yükledi}}: $3",
+       "log-name-managetags": "Etiket yönetimi günlüğü",
+       "log-description-managetags": "Bu sayfa [[Special:Tags|etiketlere]] dair idare görevlerini listelemektedir. Günlükte sadece yöneticiler tarafından elle yapılan eylemler bulunmaktadır; viki yazılımı tarafından bu günlükte kayıt altına alınmadan etiketler yaratılabilir veya silinebilir.",
+       "logentry-managetags-create": "$1, \"$4\" etiketini {{GENDER:$2|oluşturdu}}",
+       "logentry-managetags-delete": "$1 \"$4\" etiketini {{GENDER:$2|sildi}} ($5 {{PLURAL:$5|sürüm veya günlük kaydından|sürüm ve/veya günlük kaydından}} kaldırıldı)",
+       "logentry-managetags-activate": "$1, \"$4\" etiketini kullanıcı ve botların {{GENDER:$2|kullanımına açtı}}",
+       "logentry-managetags-deactivate": "$1, \"$4\" etiketini kullanıcı ve botların {{GENDER:$2|kullanımına kapadı}}",
        "log-name-tag": "Etiket günlüğü",
+       "log-description-tag": "Bu sayfa kullanıcıların ne zaman tekil sürümlere veya günlük kayıtlarına etiket ekleyip kaldırdığını göstermektedir. Bir düzenleme, silme veya benzeri işlem eşliğinde gerçekleşen etiket değişikliği işlemleri burada listelenmemektedir.",
+       "logentry-tag-update-add-revision": "$1, $3 sayfasının $4 numaralı sürümüne {{PLURAL:$7|etiket|etiket}} {{GENDER:$2|ekledi}}: $6",
+       "logentry-tag-update-add-logentry": "$1, $3 sayfasının $5 numaralı günlük kaydına {{PLURAL:$7|etiket|etiket}} {{GENDER:$2|ekledi}}: $6",
+       "logentry-tag-update-remove-revision": "$1, $3 sayfasının $4 numaralı sürümünden {{PLURAL:$9|etiket|etiket}} {{GENDER:$2|kaldırdı}}: $8",
+       "logentry-tag-update-remove-logentry": "$1, $3 sayfasının $5 numaralı günlük kaydından {{PLURAL:$9|etiket|etiket}} {{GENDER:$2|kaldırdı}}: $8",
+       "logentry-tag-update-revision": "$1, $3 sayfasının $4 numaralı sürümündeki etiketleri  {{GENDER:$2|güncelledi}}. Eklenen {{PLURAL:$7|etiket|etiket}}: $6; kaldırılan {{PLURAL:$9|etiket|etiket}}: $8",
+       "logentry-tag-update-logentry": "$1, $3 sayfasının $5 numaralı günlük kaydındaki etiketleri {{GENDER:$2|güncelledi}}. Eklenen {{PLURAL:$7|etiket|etiket}}: $6; kaldırılan {{PLURAL:$9|etiket|etiket}}: $8",
        "rightsnone": "(hiçbiri)",
        "revdelete-summary": "değişiklik özeti",
        "feedback-adding": "Sayfaya geribildirim ekleniyor...",
        "feedback-bugornote": "Eğer teknik bir problemi detaylarıyla açıklamaya hazırsanız lütfen [$1 bir hata raporlayın]. Diğer taraftan, aşağıdaki kolay formu kullanabilirsiniz. Yorumunuz, kullanıcı adınızla beraber \"[$3 $2]\" sayfasına eklenecektir.",
        "feedback-cancel": "İptal",
        "feedback-close": "Tamamlandı",
+       "feedback-external-bug-report-button": "Teknik hata raporu ilet",
+       "feedback-dialog-title": "Geribildirim gönder",
+       "feedback-dialog-intro": "Geribildirimde bulunmak için aşağıdaki basit formu kullanabilirsiniz. Yorumunuz kullanıcı adınızla beraber \"$1\" sayfasına eklenecektir.",
        "feedback-error-title": "Hata",
        "feedback-error1": "Hata: Bilinmeyen API sonucu",
        "feedback-error2": "Hata: Düzenleme başarısız oldu",
        "feedback-error3": "Hata: API'den yanıt yok",
+       "feedback-error4": "Hata: Belirtilen geribildirim başlığına gönderi yapılamıyor",
        "feedback-message": "Mesaj:",
        "feedback-subject": "Konu:",
        "feedback-submit": "Gönder",
+       "feedback-terms": "Geribildirimimle beraber iletilicek ve açıkça görüntülenecek bilgiler arasında, kullandığım tarayıcının ve işletim sistemimimin sürüm bilgisinin tam olarak bulunduğunu anlıyor ve buna izin veriyorum.",
+       "feedback-termsofuse": "Kullanım Şartları'na uygun biçimde geribildirim vermeyi kabul ediyorum.",
        "feedback-thanks": "Teşekkürler! Görüşleriniz \"[$2 $1]\" sayfasında paylaşılmıştır.",
        "feedback-thanks-title": "Teşekkürler!",
        "feedback-useragent": "Kullanıcı temsilcisi",
        "api-error-stashfailed": "İç hata: Sunucu, geçici dosyaları kaybetti.",
        "api-error-publishfailed": "İç hata: Sunucu geçici dosyayı yayınlarken başarısız oldu.",
        "api-error-stasherror": "Dosya zulaya yüklenirken hata oluştu.",
+       "api-error-stashedfilenotfound": "Saklandığı yerden yüklenmeye çalışılan dosya bu yerde bulunamadı.",
+       "api-error-stashpathinvalid": "Saklanan dosyanın bulunması beklenen yer bilgisi geçersiz.",
+       "api-error-stashfilestorage": "Dosya zulaya saklanmaya çalışılırken hata ile karşılaşıldı.",
+       "api-error-stashzerolength": "Sunucu dosyayı zulada saklayamadı; çünkü dosya boyutu sıfır uzunlukta.",
+       "api-error-stashnotloggedin": "Dosya yükleme zulasına dosya kaydetmek için oturum açmış olmanız gerekiyor.",
+       "api-error-stashwrongowner": "Zulada erişmeye çalıştığınız belge size ait değil.",
+       "api-error-stashnosuchfilekey": "Zulaya erişmeye çalışırken kullanılan dosya anahtarı mevcut değil.",
        "api-error-timeout": "Sunucu beklenen süre içinde yanıt vermedi.",
        "api-error-unclassified": "Bilinmeyen bir hata oluştu.",
        "api-error-unknown-code": "Bilinmeyen hata: \"$1\"",
        "expand_templates_generate_xml": "XML derleyici ağacını göster",
        "expand_templates_generate_rawhtml": "Ham HTML göster",
        "expand_templates_preview": "Önizleme",
+       "expand_templates_preview_fail_html": "<em>{{SITENAME}} işlenmemiş HTML koduna izin verdiği ve oturum verilerinde kayıp yaşandığı için, ön izleme, JavaScript saldırılarına karşı önlem olarak gizlendi.</em>\n\n<strong>Eğer meşru bir ön izleme girişimi idiyse, tekrar deneyiniz.</strong>\nYine de çalışmıyorsa, [[Special:UserLogout|oturum kapamayı]] ve tekrar açmayı deneyin.",
+       "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} işlenmemiş HTML koduna izin verdiği ve oturum verilerinde kayıp yaşandığı için, ön izleme, JavaScript saldırılarına karşı önlem olarak gizlendi.</em>\n\n<strong>Eğer meşru bir ön izleme girişimi idiyse, lütfen  [[Special:UserLogin|oturum açarak]] tekrar deneyin.</strong>",
        "pagelanguage": "Sayfa dili seçicisi",
        "pagelang-name": "Sayfa",
        "pagelang-language": "Dil",
        "right-pagelang": "Sayfa dilini değiştir",
        "action-pagelang": "sayfa dilini değiştir",
        "log-name-pagelang": "Dil günlüğünü değiştir",
+       "log-description-pagelang": "Bu, sayfalardaki dil değişikliklerinin kayıt günlüğüdür.",
        "logentry-pagelang-pagelang": "$1, $3 sayfasının dilini $4 dilinden $5 diline {{GENDER:$2|çevirdi}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (etkin)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''devre dışı''')",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Kmer",
        "special-characters-title-endash": "tire",
+       "special-characters-title-emdash": "uzun çizgi",
        "special-characters-title-minus": "Eksi işareti"
 }
index 49d66ac..c9b0a5a 100644 (file)
        "import-interwiki-history": "Бу битнең барлык үзгәртү тарихын күчермәләү",
        "import-interwiki-templates": "Барлык үрнәкләрне кертү",
        "import-interwiki-submit": "Импортлау",
-       "import-interwiki-namespace": "Исемнәр тирәлеге:",
        "import-upload-filename": "Файл исеме:",
        "import-comment": "Искәрмә:",
        "importtext": "Зинһар өчен, битне күчерү өчен [[Special:Export|махсус корал]] кулланыгыз. Файлны дискка саклагыз, аннан соң монда йөкләгез.",
index bd1e1a9..b6a4003 100644 (file)
        "importfailed": "İmportlaw xatası: <nowiki>$1</nowiki>",
        "importsuccess": "İmportlaw uñışlı buldı!",
        "importlogpage": "Kertü köndälege",
-       "import-logentry-interwiki": "«$1» — wikiara  importlaw",
        "tooltip-pt-userpage": "Qullanuçı bitegez",
        "tooltip-pt-mytalk": "Bäxäs bitegez",
        "tooltip-pt-preferences": "Köylänmäläregez",
index ce10969..e35ef3a 100644 (file)
        "history": "Арынның төөгүзү",
        "history_short": "Төөгү",
        "printableversion": "Саазынга үндүрерин көөрү",
-       "permalink": "Турум холбаа",
+       "permalink": "Турум айтыг",
        "print": "Саазынга үндүрер",
        "view": "Көөрү",
        "edit": "Эдер",
        "mainpage": "Кол Арын",
        "mainpage-description": "Кол Арын",
        "policy-url": "Project:Чурум",
-       "portal": "Ниитилелдиң хаалгазы",
-       "portal-url": "Project:Ниитилелдиң хаалгазы",
+       "portal": "Ниитилел хаалгазы",
+       "portal-url": "Project:Ниитилел хаалгазы",
        "privacy": "Актыг бүзүрел дугуржулгазы",
        "privacypage": "Project:Актыг бүзүрел дугуржулгазы",
        "badaccess": "Алдаг:Эргеңер чок.",
        "nstab-user": "Ажыглакчының арыны",
        "nstab-media": "Медиа арыны",
        "nstab-special": "Тускай арын",
-       "nstab-project": "Төлевилелдиң арыны",
+       "nstab-project": "Төлевилел дугайында",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Чагаа",
        "nstab-template": "Майык",
        "createaccountreason": "Чылдагаан:",
        "badretype": "Силерниң парлаан чажыт сөзүңер таарышпас.",
        "userexists": "Силерниң парлаан адыңар амгы үеде ажыглаттынып турар.\nӨске аттан шилип алыңар.",
-       "loginerror": "Ð\91агай ÐºÐ¸Ñ\80еÑ\80и",
+       "loginerror": "Ð\9aиÑ\80им Ð°Ð»Ð´Ð°Ð° (ЧазÑ\8bглÑ\8bг ÐºÐ¸Ñ\80им)",
        "loginsuccesstitle": "Чедимчелиг кирери",
        "login-userblocked": "Бо ажыглакчы blocked.  Кирери хоржок.",
        "password-login-forbidden": "Бо ажыглакчының ады болгаш чажыт сөс хоржок.",
        "subject": "Кол сөс:",
        "minoredit": "Бо эдилге бичии-дир",
        "watchthis": "Бо арынны хайгаараары",
-       "savearticle": "Арынны шыгжаары",
+       "savearticle": "Арын шыгжаар",
        "preview": "Чижеглей көөрү",
        "showpreview": "Чижеглей көөрү",
        "showdiff": "Өскерлиишкиннерни көргүзери",
-       "anoneditwarning": "'''Кичээңгейлиг!''' Силер сайтче авторжуттунмаан силер.\nБо арынның өскертилге төөгүзүнче Силерниң IP-адрезиңер бижитинип каар.",
+       "anoneditwarning": "<strong>Кичээңгейлиг!</strong> Силер сайтче кирип албаан силер. Чаартылгалар киирер болзуңарза, Силерниң IP-адрезиңер чүүлдүң төөгүзүнге көстүп кээр. Кажан сайтче <strong>[$1 шолаңар-биле кире бээриңерге]</strong> азы <strong>[$2 чаа шола чаяап алырыңарга]</strong>, эдилгеңерни шолаңар-биле холбаап каар база Силерге ажыктыг тускай херекселдер тыптып келир.",
        "missingcommenttext": "Тайылбырни адаанда чогаадыңар.",
        "summary-preview": "Түңнелдү чижеглей көөрү:",
        "subject-preview": "Кол сөс чижеглей көөрү:",
        "post-expand-template-inclusion-category": "Кожар майыктарга чөшпээрээн хемчээлин ашкан арыннар",
        "post-expand-template-argument-warning": "'''Кичээнгейлиг:''' бо арында тоң дора дээрге (по крайней мере) чаңгыс майыктыг, а ооң аргументизи эмин эрттир улуг калбаяр хемчээлдиг.\nЫндыг чергелиг аргументилерни эрттирип каан.",
        "post-expand-template-argument-category": "Аргументилери салдынмаан майыктарлыг '''арыннар'''",
+       "undo-success": "Ук эдилгени ойталап болур. Адаанда янзыларын (версияларын) хынавышаан, тааржыр өскертилгелерни көжүрүп алгаш, оларны арынга шыгжаарда, «Арынны бижидер» деп тананы базыптыңар.",
        "viewpagelogs": "Бо арынның журналын көргүзери",
        "nohistory": "Бо арынның өскерлиишкин төөгүзү чок.",
        "currentrev": "Амгы үе үндүрери",
        "email": "Э-чагаа",
        "prefs-help-email": "Э-шуудаң адрезин айтыры албан эвес, ынчалза-даа, уруңуңар (парольуңар) чиде бээрге, ол херек апаар.",
        "prefs-help-email-others": "Ол харылзаа медээлели база өске киржикчилерге хуу азы чугаалажылга арныңарга э-шуудаңыңар (e-mail) таварыштыр Силерниң-биле харылзажырынга ажыктыг. Ооң кадында Силерниң э-шуудаң адрезиңер кымга-даа көзүлбес.",
-       "prefs-info": "Кол медээлер",
+       "prefs-info": "Кол медээлел",
        "prefs-signature": "Хол үжүү",
        "prefs-diffs": "Ылгалдар",
        "editusergroup": "Ажыглакчының бөлгүмнерни өскертири",
        "newsectionsummary": "/* $1 */ чаа салбыр",
        "rc-enhanced-expand": "Тодаларны көргүзери (JavaScript херек)",
        "rc-enhanced-hide": "Тодаларны чажырары",
-       "recentchangeslinked": "Хамааржыр өскерлиишкиннер",
-       "recentchangeslinked-toolbox": "Хамааржыр өскерлиишкиннер",
+       "recentchangeslinked": "Хамаарышкан өскерилгелер",
+       "recentchangeslinked-toolbox": "Хамаарышкан өскерилгелер",
        "recentchangeslinked-title": "«$1» деп арынга хамаарыштырган өскерлиишкиннер",
        "recentchangeslinked-summary": "Айыткан арынның (азы айыткан аңгылалга хамаарышкан) шөлүлүглериниң чедер арыннарнының чаа өскерилгер даңзызы.\n[[Special:Watchlist|Силерниң хайгаарал даңзызынче]] кирип турар арыннарны '''ылгап каан'''.",
        "recentchangeslinked-page": "Арынның ады:",
        "tooltip-pt-login": "Маңаа системаже киир бүрүткенип болур, ынчалза-даа ол албан эвес.",
        "tooltip-pt-logout": "Үнери",
        "tooltip-ca-talk": "Бо арын дугайында чыгаалажыры",
-       "tooltip-ca-edit": "СилеÑ\80 Ð±Ð¾ Ð°Ñ\80Ñ\8bннÑ\8b Ñ\8dдип Ð±Ð¾Ð»Ñ\83Ñ\80. Ð¨Ñ\8bгжааÑ\80 Ð¼Ñ\83Ñ\80Ñ\83нда Ñ\87ижеглеп ÐºÓ©Ñ\80ем.",
+       "tooltip-ca-edit": "Ук Ð°Ñ\80Ñ\8bннÑ\8b Ñ\8dдип Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\81илеÑ\80. Ð­Ð´Ð¸Ð»Ð³ÐµÒ£ÐµÑ\80 Ð±Ð¸Ð¶Ð¸Ð´ÐµÑ\80ин Ð±ÐµÑ\80Ñ\82инде Ñ\87ижеглей ÐºÓ©Ó©Ñ\80үн Ñ\83Ñ\82паңаÑ\80.",
        "tooltip-ca-addsection": "Чаа салбыр чаяар",
        "tooltip-ca-viewsource": "Бо арын камгалаттырган.\nДөзү кодун көрүп болур силер.",
        "tooltip-ca-history": "Арынның мурнуку өскерлиишкиннери",
        "tooltip-t-upload": "Файлдарны киирери",
        "tooltip-t-specialpages": "Шупту тускай арыннар даңзызы",
        "tooltip-t-print": "Бо арынның парлаттынар хевири",
-       "tooltip-t-permalink": "Ð\90Ñ\80Ñ\8bннÑ\8bÒ£ Ð±Ð¾ Ñ\8fнзÑ\8b\85евиÑ\80иниң Ñ\82Ñ\83Ñ\80Ñ\83м Ñ\88өлүлгези",
+       "tooltip-t-permalink": "Ук Ð°Ñ\80Ñ\8bннÑ\8bÒ£ Ð°Ð¼Ð³Ñ\8b Ñ\8fнзÑ\8bзÑ\8bнÑ\8bÒ£ Ñ\82Ñ\83Ñ\80Ñ\83м Ð°Ð¹Ñ\82Ñ\8bÑ\8b",
        "tooltip-ca-nstab-main": "Допчы арынын көөрү",
        "tooltip-ca-nstab-user": "Ажыглакчының арынын көөрү",
        "tooltip-ca-nstab-media": "Медиа арынын көөрү",
        "tooltip-undo": "Киирген эдигни казааш, ойталалдың чылдагаанын айтыр аргалыг мурнай көргүзүүн көргүзер.",
        "tooltip-summary": "Кысказы-биле бижиңер",
        "anonymous": "{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}",
-       "pageinfo-toolboxlink": "Арын дугайында медээлел",
+       "pageinfo-title": "«$1» дугайында",
+       "pageinfo-header-basic": "Кол медээлел",
+       "pageinfo-toolboxlink": "Арын дугайында",
        "filedelete-missing": "«$1» деп файл чок, ынчангаш ол ап калдынмас.",
        "previousdiff": "← Артык эрги үндүрери",
        "nextdiff": "Артык чаа үндүрери →",
index 2c73fb5..34bf7c4 100644 (file)
        "import-interwiki-history": "بۇ بەتنىڭ ھەممە تارىخى تۈزىتىلگەن نەشرىنى كۆچۈر.",
        "import-interwiki-templates": "ھەممە قېلىپىنى ئۆز ئىچىگە ئالىدۇ",
        "import-interwiki-submit": "ئەكىر",
-       "import-interwiki-namespace": "نىشان ئات بوشلۇقى:",
-       "import-interwiki-rootpage": "نىشان غول بەت (تاللاشچان):",
        "import-upload-filename": ":ھۆججەت ئاتى",
        "import-comment": "ئىزاھات:",
        "importtext": "[[Special:Export|چىقىرىش ئىقتىدارى]]نى ئىشلىتىپ ئەسلى ۋىكىدىن ھۆججەت چىقىرىڭ .\nكومپيۇتېرىڭىزدا ساقلاپ ئاندىن بۇ جايغا يۈكلەڭ.",
index 2df5ff4..0d4696b 100644 (file)
        "otherlanguages": "Altre lengue",
        "redirectedfrom": "(Rimando da <b>$1</b>)",
        "redirectpagesub": "Pagina de rimando",
+       "redirectto": "Rimanda a:",
        "lastmodifiedat": "Ultimo canbiamento de sta pagina: $2, $1.",
        "viewcount": "Sta pagina la xe stà leta {{PLURAL:$1|na olta|$1 olte}}.",
        "protectedpage": "Pagina proteta",
        "login-abort-generic": "El to login no xe riusido - Anułà.",
        "loginlanguagelabel": "Lengua: $1",
        "suspicious-userlogout": "Ła to richiesta de disconesion xè sta negà parché e a senbra invià da on browser non funsionante o on proxy de caching.",
+       "pt-login": "Va drento",
        "php-mail-error-unknown": "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
        "user-mail-no-addy": "Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.",
        "user-mail-no-body": "Tentà de inviar na e-mail có un testo vodo o masa curto.",
        "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
        "rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
        "rcshowhideminor": "$1 i canbiamenti picenini",
+       "rcshowhideminor-show": "Mostra",
+       "rcshowhideminor-hide": "Scondi",
        "rcshowhidebots": "$1 i bot",
+       "rcshowhidebots-show": "Mostra",
+       "rcshowhidebots-hide": "Scondi",
        "rcshowhideliu": "$1 i utenti registrài",
+       "rcshowhideliu-hide": "Scondi",
        "rcshowhideanons": "$1 i utenti anonimi",
+       "rcshowhideanons-hide": "Scondi",
        "rcshowhidepatr": "$1 łe modifeghe controłae",
        "rcshowhidemine": "$1 i me canbiamenti",
+       "rcshowhidemine-show": "Mostra",
+       "rcshowhidemine-hide": "Scondi",
        "rclinks": "Fà védar i ultimi $1 canbiamenti fati in tei ultimi $2 zorni<br />$3",
        "diff": "dif",
        "hist": "stor",
        "querypage-disabled": "Sta pàjina speciałe ła xe dixativà par motivi de prestasion.",
        "booksources": "Fonti librarie",
        "booksources-search-legend": "Riserca de fonti librarie",
+       "booksources-search": "Serca",
        "booksources-text": "De seguito vien presentà un elenco de colegamenti verso siti foresti che vende libri novi e usài, atraverso i quali se pol otegner piassè informazioni sul testo sercà.",
        "booksources-invalid-isbn": "El nùmaro ISBN inserìo no'l xe mia valido: controla de novo se te lo ghè copià justo da la fonte originale.",
        "specialloguserlabel": "Asion efetuà da:",
        "import-interwiki-history": "Copia l'intiera cronołogia de sta pàxena",
        "import-interwiki-templates": "Tira dentro tuti i modèi",
        "import-interwiki-submit": "Inporta",
-       "import-interwiki-namespace": "Namespace de destinassion:",
-       "import-interwiki-rootpage": "Pàjina prinsipałe de destinasion (opsionałe):",
        "import-upload-filename": "Nome del file:",
        "import-comment": "Comento:",
        "importtext": "Se połe esportare el file da ła fonte wiki doparando ła [[Special:Export|funsion de esportasion]].\nSalveło so'l to conpiuter e carghelo cuà.",
index 36f1788..bc4dbc5 100644 (file)
        "import-interwiki-history": "Kopiruida kaik necen lehtpolen toižetamižen istorii",
        "import-interwiki-templates": "Mülütada kaik šablonad",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Metnimiavaruz:",
        "import-upload-filename": "Failan nimi:",
        "import-comment": "Kommentarii:",
        "importstart": "Lehtpoliden import...",
        "import-token-mismatch": "Andmused oma kadonuded. Olgat hüväd, toštkat tegend völ kerdan.",
        "import-invalid-interwiki": "Ei voi importiruida neciš wikišpäi.",
        "importlogpage": "Importan aigkirj",
-       "import-logentry-upload": "importiruidihe [[$1]] failan jügetoitandan abul",
        "import-logentry-upload-detail": "{{PLURAL:$1|üks' versii|$1 versijad}}",
-       "import-logentry-interwiki": "toi toižes wikišpäi lehtpolen $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|üks' versii|versijad}} $2-wikišpäi",
        "javascripttest": "JavaScriptan kodvmine",
        "tooltip-pt-userpage": "Teiden kävutajan lehtpol'",
        "expand_templates_xml_output": "XML-lähtmižvend",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Čuta kommentarijad",
-       "expand_templates_preview": "Ezikacund"
+       "expand_templates_preview": "Ezikacund",
+       "special-characters-group-latin": "Latinalaine",
+       "special-characters-group-latinextended": "Levitadud latinalaine",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simvolad",
+       "special-characters-group-greek": "Grekalaine",
+       "special-characters-group-cyrillic": "Kirilline",
+       "special-characters-group-arabic": "Arabine",
+       "special-characters-group-arabicextended": "Araban levitadud",
+       "special-characters-group-persian": "Persižed",
+       "special-characters-group-hebrew": "Evrejine",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-gujarati": "Gudžarati",
+       "special-characters-group-thai": "Tai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmeran"
 }
index 21f39b2..30cb04f 100644 (file)
        "wrongpassword": "Mật khẩu sai. Xin vui lòng nhập lại.",
        "wrongpasswordempty": "Bạn chưa gõ vào mật khẩu. Xin thử lần nữa.",
        "passwordtooshort": "Mật khẩu phải có ít nhất {{PLURAL:$1|1 ký tự|$1 ký tự}}.",
+       "passwordtoolong": "Mật khẩu không thể dài hơn {{PLURAL:$1|1 ký tự|$1 ký tự}}.",
        "password-name-match": "Mật khẩu của bạn phải khác với tên người dùng của bạn.",
        "password-login-forbidden": "Tên đăng nhập và mật khẩu này đã bị cấm không được sử dụng.",
        "mailmypassword": "Tái tạo mật khẩu",
        "missingcommentheader": "'''Nhắc nhở:''' Bạn chưa ghi chủ đề/tiêu đề cho bàn luận này.\nNếu bạn nhấn nút \"{{int:savearticle}}\" lần nữa, sửa đổi của bạn sẽ được lưu mà không có đề mục.",
        "summary-preview": "Xem trước dòng tóm lược:",
        "subject-preview": "Xem trước đề mục:",
+       "previewerrortext": "Có lỗi xảy ra khi xem trước những thay đổi của bạn.",
        "blockedtitle": "Thành viên bị cấm",
        "blockedtext": "'''Tên người dùng hoặc địa chỉ IP của bạn đã bị cấm.'''\n\nNgười thực hiện cấm là $1.\nLý do được cung cấp là ''$2''.\n\n* Bắt đầu cấm: $8\n* Kết thúc cấm: $6\n* Mục tiêu cấm: $7\n\nBạn có thể liên hệ với $1 hoặc một [[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.\nBạn không thể sử dụng tính năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn tài khoản]] và bạn không bị khóa chức năng đó.\nĐịa chỉ IP hiện tại của bạn là $3, và mã số cấm là #$5.\nXin hãy ghi kèm tất cả các thông tin trên vào thư yêu cầu của bạn.",
        "autoblockedtext": "Địa chỉ IP của bạn đã bị tự động cấm vì một người nào đó đã sử dụng nó, $1 là thành viên đã thực hiện cấm.\nLý do được cung cấp là:\n\n:''$2''\n\n* Bắt đầu cấm: $8\n* Kết thúc cấm: $6\n* Mục tiêu cấm: $7\n\nBạn có thể liên hệ với $1 hoặc một trong số các\n[[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.\n\nChú ý rằng bạn sẽ không dùng được chức năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn]] và bạn không bị cấm dùng chức năng đó.\n\nĐịa chỉ IP hiện tại của bạn là $3, mã số cấm là $5.\nXin hãy ghi kèm tất cả các chi tiết trên vào thư yêu cầu của bạn.",
        "notextmatches": "Không tìm thấy nội dung trang",
        "prevn": "{{PLURAL:$1|$1}} mục trước",
        "nextn": "{{PLURAL:$1|$1}} mục sau",
+       "prev-page": "Trang trước",
+       "next-page": "Trang sau",
        "prevn-title": "$1 {{PLURAL:$1|kết quả|kết quả}} trước",
        "nextn-title": "$1 {{PLURAL:$1|kết quả|kết quả}} sau",
        "shown-title": "Hiển thị $1 {{PLURAL:$1|kết quả|kết quả}} mỗi trang",
        "import-interwiki-history": "Sao chép tất cả các phiên bản cũ của trang này",
        "import-interwiki-templates": "Gồm tất cả các bản mẫu",
        "import-interwiki-submit": "Nhập",
-       "import-interwiki-namespace": "Không gian tên đích:",
-       "import-interwiki-rootpage": "Trang gốc đích (tùy chọn):",
+       "import-mapping-default": "Nhập vào vị trí mặc định",
+       "import-mapping-namespace": "Nhập vào một không gian tên:",
        "import-upload-filename": "Tên tập tin:",
        "import-comment": "Lý do:",
        "importtext": "Xin hãy xuất tập tin từ wiki nguồn dùng [[Special:Export|công cụ xuất]].\nLưu nó vào máy tính của bạn rồi tải nó lên đây.",
        "import-rootpage-nosubpage": "Không gian tên “$1” của trang gốc không cho phép các trang con.",
        "importlogpage": "Nhật trình nhập trang",
        "importlogpagetext": "Đây là danh sách các trang được quản lý nhập vào đây. Các trang này có lịch sử sửa đổi từ hồi ở wiki khác.",
-       "import-logentry-upload": "nhập vào [[$1]] bằng cách tải tập tin",
        "import-logentry-upload-detail": "Đã nhập $1 phiên bản",
-       "import-logentry-interwiki": "đã nhập vào $1 từ wiki khác",
        "import-logentry-interwiki-detail": "Đã nhập $1 phiên bản từ $2",
        "javascripttest": "Kiểm thử JavaScript",
        "javascripttest-pagetext-noframework": "Trang này dành cho việc chạy các ca kiểm thử JavaScript.",
        "pageinfo-protect-cascading-yes": "Có",
        "pageinfo-protect-cascading-from": "Khóa theo tầng từ",
        "pageinfo-category-info": "Thông tin về thể loại",
+       "pageinfo-category-total": "Tổng số thành viên",
        "pageinfo-category-pages": "Số trang",
        "pageinfo-category-subcats": "Số thể loại con",
        "pageinfo-category-files": "Số tập tin",
        "tags-deactivate-reason": "Lý do:",
        "tags-deactivate-not-allowed": "Không thể vô hiệu hóa thẻ \"$1\".",
        "tags-deactivate-submit": "Vô hiệu",
+       "tags-apply-no-permission": "Bạn không có quyền áp dụng các thẻ thay đổi cùng các thay đổi của bạn.",
+       "tags-apply-not-allowed-one": "Thẻ \"$1\" không được phép được áp dụng thủ công.",
+       "tags-edit-title": "Chỉnh sửa thẻ",
+       "tags-edit-manage-link": "Quản lý thẻ",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Phiên bản|Các phiên bản}} [[:$2]] được chọn:",
+       "tags-edit-existing-tags": "Thẻ đã có:",
+       "tags-edit-new-tags": "Thẻ mới:",
+       "tags-edit-chosen-placeholder": "Chọn vài thẻ",
+       "tags-edit-chosen-no-results": "Không thẻ nào được tìm thấy trùng khớp",
+       "tags-edit-reason": "Lý do:",
+       "tags-edit-success": "Các thay đổi được áp dụng thành công.",
+       "tags-edit-failure": "Những thay đổi này có thể không được áp dụng: $1",
+       "tags-edit-nooldid-title": "Kiểm tra các mục tiêu không hợp lệ",
        "comparepages": "So sánh trang",
        "compare-page1": "Trang 1",
        "compare-page2": "Trang 2",
        "json-error-recursion": "Giá trị để mã hóa có tham chiếu đệ quy",
        "json-error-inf-or-nan": "Giá trị để mã hóa có giá trị NAN (không phải số) hoặc INF (vô tận)",
        "json-error-unsupported-type": "Đã đưa vào giá trị có kiểu không thể mã hóa",
-       "headline-anchor-title": "Liên kết đến phần này"
+       "headline-anchor-title": "Liên kết đến phần này",
+       "special-characters-group-latin": "La tinh",
+       "special-characters-group-latinextended": "La tinh mở rộng",
+       "special-characters-group-ipa": "Phiên âm quốc tế",
+       "special-characters-group-symbols": "Ký hiệu",
+       "special-characters-group-greek": "Hy Lạp",
+       "special-characters-group-cyrillic": "Kirin",
+       "special-characters-group-arabic": "Ả Rập",
+       "special-characters-group-arabicextended": "Ả Rập mở rộng",
+       "special-characters-group-persian": "Ba Tư",
+       "special-characters-group-hebrew": "Hê-brơ",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarat",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thái",
+       "special-characters-group-lao": "Lào",
+       "special-characters-group-khmer": "Khơ-me",
+       "special-characters-title-endash": "dấu gạch en",
+       "special-characters-title-emdash": "dấu gạch em",
+       "special-characters-title-minus": "dấu trừ"
 }
index a65ac57..042ebb1 100644 (file)
        "import-interwiki-text": "Valiq viki ja lehe nimi. Kujjõ kuupääväq ja toimõndajidõ nimeq hoiõtasõq alalõ. Kõik tõisist vikidest tuumisõq pandasõq kirjä [[Special:Log/import|tuumiisi nimekirjä]].",
        "import-interwiki-history": "Kopiq lehe terveq aolugu",
        "import-interwiki-submit": "Tuuq",
-       "import-interwiki-namespace": "Panõq leheq nimeruumi:",
        "import-comment": "Põhjus:",
        "importtext": "Viiq lättevikist lehti [[Special:Export|viimis]]-tüüriistaga. Pästäq teedüs nii uman puutrin ku siin.",
        "importstart": "Tuvvas lehti...",
        "importuploaderrortemp": "Teedüstü üleslaatminõ lää-s kõrda. Olõ-i aotlist kausta.",
        "importlogpage": "Tuumiisi nimekiri",
        "importlogpagetext": "Tõisist vikidest tuuduisi lehti nimekiri.",
-       "import-logentry-upload": "tõi lehe [[$1]] saatõn teedüstü",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|kujo|kujjo}}",
-       "import-logentry-interwiki": "tõi tõõsõst vikist lehe ”$1”",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|kujo|kujjo}} lehest $2",
        "tooltip-pt-userpage": "Suq pruukjaleht",
        "tooltip-pt-anonuserpage": "Su puutri võrgoaadrõsi pruukjaleht",
index d2df113..c8155da 100644 (file)
        "import": "Naangbit hit mga pakli",
        "import-interwiki-templates": "Lakip an ngatanan nga mga batakan",
        "import-interwiki-submit": "Naangbit",
-       "import-interwiki-namespace": "Kakadtoan nga ngaran-lat'ang:",
        "import-upload-filename": "Ngaran han paypay:",
        "import-comment": "Komento:",
        "importstart": "Nag-aangbit hin mga pakli...",
        "import-rootpage-invalid": "An ginhatag nga gamot-pakli in uska diri balido nga titulo.",
        "import-rootpage-nosubpage": "Ngaran-lat'ang nga \"$1\" han gamot-pakli in diri natugot hin mga bahin-pakli.",
        "importlogpage": "Talaan hin pan-aangbit",
-       "import-logentry-upload": "ginangbit [[$1]] pinaagi hin pagkarga-pasaka han paypay",
-       "import-logentry-interwiki": "natranswiki $1",
        "javascripttest-pagetext-skins": "Pagpili hin panit para ha pag-paandar han:",
        "tooltip-pt-userpage": "An imo pakli hin gumaramit",
        "tooltip-pt-mytalk": "An imo pakli hin hiruhimangraw",
index cb627d7..e90cb51 100644 (file)
        "import-interwiki-history": "複製呢一頁所有嘅歷史修訂",
        "import-interwiki-templates": "包含全部嘅模",
        "import-interwiki-submit": "倒入",
-       "import-interwiki-namespace": "目的空間名:",
-       "import-interwiki-rootpage": "目標根頁(可以填):",
        "import-upload-filename": "檔名:",
        "import-comment": "註解:",
        "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你部電腦度,然後再上載到呢度。",
index 55e9f0a..35525b3 100644 (file)
@@ -84,7 +84,8 @@
                        "Davidzdh",
                        "LNDDYL",
                        "Jiang123aa",
-                       "Cdz"
+                       "Cdz",
+                       "凡人丶"
                ]
        },
        "tog-underline": "链接下划线:",
        "no-null-revision": "无法创建对\"$1\"页面新的空白版本",
        "badtitle": "错误标题",
        "badtitletext": "您请求了个无效、不存在或者跨语言或跨wiki链接标题错误的页面。它可能包含一个或多个不能用于标题的字符。",
+       "title-invalid-empty": "所请求的页面标题为空,或只包含名字空间名称。",
+       "title-invalid-utf8": "请求的页面标题包含一个无效的UTF-8序列。",
+       "title-invalid-interwiki": "标题包含跨wiki链接",
+       "title-invalid-talk-namespace": "请求的页面标题引用了一个不能存在的讨论页。",
+       "title-invalid-characters": "请求的页面标题包含无效字符:“$1”。",
+       "title-invalid-relative": "标题有相对路径。相关的页面标题(./, ../)无效,因为用户浏览器经常无法到达这些页面。",
+       "title-invalid-magic-tilde": "请求的页面标题包含无效的连续波浪(<nowiki>~~~</nowiki>)。",
+       "title-invalid-too-long": "所请求的网页标题太长。标题不能超过$1个字节。",
+       "title-invalid-leading-colon": "请求的页面标题开头包含一个无效的冒号。",
        "perfcached": "以下是缓存的数据,可能不是最新的数据。缓存中最多有{{PLURAL:$1|$1条结果}}。",
        "perfcachedts": "以下是缓存的数据,最后更新于$1。缓存中最多有{{PLURAL:$4|$4条结果}}。",
        "querypage-no-updates": "该页面的更新目前停用。这里的数据不会马上刷新。",
index 9653cbf..c26f132 100644 (file)
        "history-feed-description": "本 Wiki 上此頁面的修訂歷史",
        "history-feed-item-nocomment": "$1 於 $2",
        "history-feed-empty": "請求的頁面不存在,\n可能已被刪除或重新命名。\n請嘗試 [[Special:Search|搜尋本站]] 取得其他相關的新頁面。",
+       "history-edit-tags": "編輯已選擇修訂的標籤",
        "rev-deleted-comment": "(已移除編輯摘要)",
        "rev-deleted-user": " (已移除使用者名稱)",
        "rev-deleted-event": "(已移除日誌明細)",
        "rev-showdeleted": "顯示",
        "revisiondelete": "刪除/取消刪除修訂",
        "revdelete-nooldid-title": "無效的目標修訂",
-       "revdelete-nooldid-text": "您尚未指定目標修訂執行此動作、指定的修訂不存在,或您嘗試隱藏目前的修訂。",
+       "revdelete-nooldid-text": "您沒有指定任何要執行此功能的目標修訂、或指定的修訂並不存在、或您嘗試隱藏目前的修訂。",
        "revdelete-no-file": "指定的檔案不存在。",
        "revdelete-show-file-confirm": "您是否要檢視檔案 \"<nowiki>$1</nowiki>\" 已刪除的修訂於 $2 $3?",
        "revdelete-show-file-submit": "是",
        "right-sendemail": "傳送電子郵件聯絡其他使用者",
        "right-passwordreset": "檢視重設密碼電子郵件",
        "right-managechangetags": "建立並自資料庫移除[[Special:Tags|標籤]]",
+       "right-applychangetags": "連同某個人的變更一起套用[[Special:Tags|標籤]]",
+       "right-changetags": "加入與移除任何於各別修訂與日誌項目的[[Special:Tags|標籤]]",
        "newuserlogpage": "建立使用者日誌",
        "newuserlogpagetext": "此為建立使用者的日誌。",
        "rightslog": "使用者權限日誌",
        "action-editmyprivateinfo": "編輯您的個人資訊",
        "action-editcontentmodel": "編輯頁面的內容模型",
        "action-managechangetags": "建立並自資料庫移除標籤",
+       "action-applychangetags": "連同您的變更一起套用標籤",
+       "action-changetags": "加入與移除任何於各別修訂與日誌項目的標籤",
        "nchanges": "$1 次變更",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|自上次拜訪}}已有 $1",
        "enhancedrc-history": "歷史",
        "listfiles-delete": "刪除",
        "listfiles-summary": "此特殊頁面顯示所有已上傳的檔案。",
        "listfiles_search_for": "搜尋媒體名稱:",
+       "listfiles-userdoesnotexist": "使用者帳號 \"$1\" 尚未被註冊。",
        "imgfile": "檔案",
        "listfiles": "檔案清單",
        "listfiles_thumb": "縮圖",
        "logempty": "無符合條件的日誌。",
        "log-title-wildcard": "搜尋以此欄位文字為字首的標題",
        "showhideselectedlogentries": "顯示/隱藏已選擇的日誌項目",
+       "log-edit-tags": "編輯已選擇日誌項目的標籤",
        "allpages": "所有頁面",
        "nextpage": "下一頁 ($1)",
        "prevpage": "上一頁 ($1)",
        "emailuser": "Email 聯絡此使用者",
        "emailuser-title-target": "E-mail 聯絡此{{GENDER:$1|使用者}}",
        "emailuser-title-notarget": "E-mail 聯絡使用者",
-       "emailpage": "E-mail 使用者",
+       "emailpage": "E-mail 聯絡使用者",
        "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
        "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
        "usermaildisabled": "使用者電子郵件已停用",
        "emailccsubject": "您寄給 $1 的訊息副本:$2",
        "emailsent": "已寄出電子郵件",
        "emailsenttext": "已寄出您的電子郵件訊息。",
-       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"Email 聯絡此使用者\" 功能寄給 $2。",
+       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"{{int:emailpage}}\" 功能寄給 $2。",
        "usermessage-summary": "留訊息至系統。",
        "usermessage-editor": "系統訊息",
        "watchlist": "監視清單",
        "import-interwiki-history": "複製此頁的所有歷史修訂",
        "import-interwiki-templates": "包含所有模板",
        "import-interwiki-submit": "匯入",
+       "import-mapping-default": "匯入至預設位置",
+       "import-mapping-namespace": "匯入至命名空間:",
+       "import-mapping-subpage": "匯入做為以下頁面的子頁面:",
        "import-upload-filename": "檔案名稱:",
        "import-comment": "評論:",
        "importtext": "請使用 [[Special:Export|匯出工具]] 從來源 Wiki 匯出檔案,\n儲存至您的電腦後再上傳到這裡。",
        "pageinfo-protect-cascading-yes": "是",
        "pageinfo-protect-cascading-from": "連鎖保護來自",
        "pageinfo-category-info": "分類資訊",
+       "pageinfo-category-total": "成員總數",
        "pageinfo-category-pages": "頁面數量",
        "pageinfo-category-subcats": "子分類數量",
        "pageinfo-category-files": "檔案數量",
        "patrol-log-page": "巡查日誌",
        "patrol-log-header": "這是已巡查的修訂版本的日誌。",
        "log-show-hide-patrol": "$1 巡查日誌",
+       "log-show-hide-tag": "$1 標籤日誌",
        "deletedrevision": "已刪除舊修訂 $1",
        "filedeleteerror-short": "刪除檔案發生錯誤:$1",
        "filedeleteerror-long": "刪除檔案時發生錯誤:\n\n$1",
        "tags-deactivate-reason": "原因:",
        "tags-deactivate-not-allowed": "無法停用標籤 \"$1\"。",
        "tags-deactivate-submit": "停用",
+       "tags-apply-no-permission": "您沒有權限連同您的變更一起套用標籤。",
+       "tags-apply-not-allowed-one": "不允許手動套用標籤 \"$1\"。",
+       "tags-apply-not-allowed-multi": "不允許手動套用以下{{PLURAL:$2|標籤|標籤}}:$1",
+       "tags-update-no-permission": "您沒有權限加入與移除任何於各別修訂與日誌項目的標籤",
+       "tags-update-add-not-allowed-one": "不允許手動加入標籤 \"$1\"。",
+       "tags-update-add-not-allowed-multi": "不允許手動加入以下{{PLURAL:$2|標籤|標籤}}:$1",
+       "tags-update-remove-not-allowed-one": "不允許手動移除標籤 \"$1\"。",
+       "tags-update-remove-not-allowed-multi": "不允許手動移除以下{{PLURAL:$2|標籤|標籤}}:$1",
+       "tags-edit-title": "編輯標籤",
+       "tags-edit-manage-link": "管理標籤",
+       "tags-edit-revision-selected": "已選擇 [[:$2]] 中{{PLURAL:$1|的修訂|的多筆修訂}}:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|已選擇日誌項目|已選擇日誌項目}}:",
+       "tags-edit-revision-legend": "加入或移除此標籤自{{PLURAL:$1|此修訂|全部 $1 筆修訂}}",
+       "tags-edit-logentry-legend": "加入或移除此標籤自{{PLURAL:$1|此日誌項目|全部 $1 筆日誌項目}}",
+       "tags-edit-existing-tags": "已存在的標籤:",
+       "tags-edit-existing-tags-none": "''無''",
+       "tags-edit-new-tags": "新標籤:",
+       "tags-edit-add": "加入這些標籤:",
+       "tags-edit-remove": "移除這些標籤:",
+       "tags-edit-remove-all-tags": "(移除所有標籤)",
+       "tags-edit-chosen-placeholder": "選擇一些標籤",
+       "tags-edit-chosen-no-results": "沒有符合條件的標籤",
+       "tags-edit-reason": "原因:",
+       "tags-edit-revision-submit": "套用變更至{{PLURAL:$1|此修訂|$1 筆修訂}}",
+       "tags-edit-logentry-submit": "套用變更至{{PLURAL:$1|此日誌項目|$1 筆日誌項目}}",
+       "tags-edit-success": "已成功套用變更。",
+       "tags-edit-failure": "變更被無法套用:\n$1",
+       "tags-edit-nooldid-title": "無效的目標修訂",
+       "tags-edit-nooldid-text": "您沒有指定任何要執行此功能的目標修訂或指定的修訂並不存在。",
+       "tags-edit-none-selected": "請至少選擇一個要加入或移除的標籤。",
        "comparepages": "比較頁面",
        "compare-page1": "第 1 頁",
        "compare-page2": "第 2 頁",
        "logentry-managetags-delete": "$1 {{GENDER:$2|已刪除}}標籤 \"$4\" (已自 $5 個{{PLURAL:$5|修訂或日誌|修訂或日誌}}中移除)",
        "logentry-managetags-activate": "$1 {{GENDER:$2|已啟用}}標籤 \"$4\" 供使用者與機器人使用",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|已停用}}標籤 \"$4\" 供使用者與機器人使用",
+       "log-name-tag": "標籤日誌",
+       "log-description-tag": "當使用者自各別修訂或日誌項目加入或移除[[Special:Tags|標籤]]時會顯示於此頁面。 此日誌並不會列出當時對標籤所做的編輯、刪除或類似的動作。",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|已加入}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的修訂 $4。",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|已加入}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的日誌項目 $5。",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|已移除}}{{PLURAL:$9|標籤|標籤}} $8 自頁面 $3 的修訂 $4。",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|已移除}}{{PLURAL:$9|標籤|標籤}} $8 自日誌項目 $3 的修訂 $5。",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|已更新}}標籤於頁面 $3 的修訂 $4 ({{PLURAL:$7|加入}} $6; {{PLURAL:$9|移除}} $8)。",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|已更新}}標籤於頁面 $3 的日誌項目 $5 ({{PLURAL:$7|加入}} $6; {{PLURAL:$9|移除}} $8)。",
        "rightsnone": "(無)",
        "revdelete-summary": "編輯摘要",
        "feedback-adding": "正在新增意見回饋至頁面...",
        "feedback-error1": "錯誤:無法識別 API 回傳的結果",
        "feedback-error2": "錯誤:編輯失敗",
        "feedback-error3": "錯誤:API 沒有回應",
+       "feedback-error4": "錯誤:無法發佈至指定的意見回饋標題",
        "feedback-message": "訊息:",
        "feedback-subject": "主旨:",
        "feedback-submit": "送出",
        "log-name-pagelang": "更改語言日誌",
        "log-description-pagelang": "此頁為頁面語言的變更日誌。",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5。",
-       "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下{{PLURAL:$4|外觀}}。請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何{{PLURAL:$4|開啟外觀並設為預設值}}的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\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 操作手冊:外觀自動搜尋])。您可以將下{{PLURAL:$5|列行}}貼上至 <code>LocalSettings.php</code> 來開啟{{PLURAL:$5|所有}}目前已經安裝的{{PLURAL:$5|外觀}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
+       "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下{{PLURAL:$4|外觀}}。請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何{{PLURAL:$4|開啟外觀並設為預設值}}的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\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 操作手冊:外觀自動搜尋])。您可以將下列{{PLURAL:$5|行}}貼上至 <code>LocalSettings.php</code> 來開啟{{PLURAL:$5|所有}}目前已經安裝的{{PLURAL:$5|外觀}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
        "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已停用''')",
diff --git a/languages/messages/MessagesBh.php b/languages/messages/MessagesBh.php
deleted file mode 100644 (file)
index 4453bd1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Bihari (भोजपुरी)
- *
- * To improve a translation please visit https://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-$fallback = 'bho';
-
index e1d0ed6..a4e66ca 100644 (file)
@@ -36,13 +36,6 @@ class CleanupRemovedModules extends Maintenance {
                parent::__construct();
                $this->mDescription = 'Remove cache entries for removed ResourceLoader modules from the database';
                $this->addOption( 'batchsize', 'Delete rows in batches of this size. Default: 500', false, true );
-               $this->addOption(
-                       'max-slave-lag',
-                       'If the slave lag exceeds this many seconds, wait until it drops below this value. '
-                               . 'Default: 5',
-                       false,
-                       true
-               );
        }
 
        public function execute() {
@@ -51,7 +44,6 @@ class CleanupRemovedModules extends Maintenance {
                $moduleNames = $rl->getModuleNames();
                $moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) );
                $limit = max( 1, intval( $this->getOption( 'batchsize', 500 ) ) );
-               $maxlag = intval( $this->getOption( 'max-slave-lag', 5 ) );
 
                $this->output( "Cleaning up module_deps table...\n" );
                $i = 1;
@@ -63,7 +55,7 @@ class CleanupRemovedModules extends Maintenance {
                        $numRows = $dbw->affectedRows();
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
-                       wfWaitForSlaves( $maxlag );
+                       wfWaitForSlaves();
                } while ( $numRows > 0 );
                $this->output( "done\n" );
 
@@ -77,7 +69,7 @@ class CleanupRemovedModules extends Maintenance {
                        $numRows = $dbw->affectedRows();
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
-                       wfWaitForSlaves( $maxlag );
+                       wfWaitForSlaves();
                } while ( $numRows > 0 );
                $this->output( "done\n" );
 
@@ -90,7 +82,7 @@ class CleanupRemovedModules extends Maintenance {
                        $numRows = $dbw->affectedRows();
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
-                       wfWaitForSlaves( $maxlag );
+                       wfWaitForSlaves();
                } while ( $numRows > 0 );
                $this->output( "done\n" );
        }
index cbd1be6..f6259e9 100644 (file)
@@ -37,7 +37,6 @@ class TableCleanup extends Maintenance {
        );
 
        protected $dryrun = false;
-       protected $maxLag = 10; # if slaves are lagged more than 10 secs, wait
        public $batchSize = 100;
        public $reportInterval = 100;
 
index 2fb3697..06370e9 100644 (file)
@@ -6,13 +6,14 @@ class ConvertExtensionToRegistration extends Maintenance {
 
        protected $custom = array(
                'MessagesDirs' => 'handleMessagesDirs',
-               'ExtensionMessagesFiles' => 'removeAbsolutePath',
+               'ExtensionMessagesFiles' => 'handleExtensionMessagesFiles',
                'AutoloadClasses' => 'removeAbsolutePath',
                'ExtensionCredits' => 'handleCredits',
                'ResourceModules' => 'handleResourceModules',
                'ResourceModuleSkinStyles' => 'handleResourceModules',
                'Hooks' => 'handleHooks',
                'ExtensionFunctions' => 'handleExtensionFunctions',
+               'ParserTestFiles' => 'removeAbsolutePath',
        );
 
        /**
@@ -79,7 +80,7 @@ class ConvertExtensionToRegistration extends Maintenance {
                        }
                        $realName = substr( $name, 2 ); // Strip 'wg'
                        if ( isset( $this->custom[$realName] ) ) {
-                               call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value ) );
+                               call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value, $vars ) );
                        } elseif ( in_array( $realName, $globalSettings ) ) {
                                $this->json[$realName] = $value;
                        } elseif ( strpos( $name, 'wg' ) === 0 ) {
@@ -123,6 +124,21 @@ class ConvertExtensionToRegistration extends Maintenance {
                }
        }
 
+       protected function handleExtensionMessagesFiles( $realName, $value, $vars ) {
+               foreach ( $value as $key => $file ) {
+                       $strippedFile = $this->stripPath( $file, $this->dir );
+                       if ( isset( $vars['wgMessagesDirs'][$key] ) ) {
+                               $this->output(
+                                       "Note: Ignoring PHP shim $strippedFile. " .
+                                       "If your extension no longer supports versions of MediaWiki " .
+                                       "older than 1.23.0, you can safely delete it.\n"
+                               );
+                       } else {
+                               $this->json[$realName][$key] = $strippedFile;
+                       }
+               }
+       }
+
        private function stripPath( $val, $dir ) {
                if ( $val === $dir ) {
                        $val = '';
index 22d9940..b9c07fb 100644 (file)
@@ -39,11 +39,8 @@ class GenerateJsonI18n extends Maintenance {
 
                $this->addArg( 'phpfile', 'PHP file defining a $messages array', false );
                $this->addArg( 'jsondir', 'Directory to write JSON files to', false );
-               $this->addOption( 'langcode', 'Language code; only needed for converting core i18n files',
-                       false, true );
                $this->addOption( 'extension', 'Perform default conversion on an extension',
                        false, true );
-               $this->addOption( 'shim-only', 'Only create or update the backward-compatibility shim' );
                $this->addOption( 'supplementary', 'Find supplementary i18n files in subdirs and convert those',
                        false, false );
        }
@@ -58,13 +55,13 @@ class GenerateJsonI18n extends Maintenance {
 
                if ( $extension ) {
                        if ( $phpfile ) {
-                               $this->error( "The phpfile is already specified, conflicts with --extension.\n", 1 );
+                               $this->error( "The phpfile is already specified, conflicts with --extension.", 1 );
                        }
                        $phpfile = "$IP/extensions/$extension/$extension.i18n.php";
                }
 
                if ( !$phpfile ) {
-                       $this->error( "I'm here for an argument!\n" );
+                       $this->error( "I'm here for an argument!" );
                        $this->maybeHelp( true );
                        // dies.
                }
@@ -104,47 +101,32 @@ class GenerateJsonI18n extends Maintenance {
                        $this->output( "Creating directory $jsondir.\n" );
                        $success = mkdir( $jsondir );
                        if ( !$success ) {
-                               $this->error( "Could not create directory $jsondir\n", 1 );
+                               $this->error( "Could not create directory $jsondir", 1 );
                        }
                }
 
-               if ( $this->hasOption( 'shim-only' ) ) {
-                       $this->shimOnly( $phpfile, $jsondir );
-
-                       return;
-               }
-
-               if ( $jsondir === null ) {
-                       $this->error( 'Argument [jsondir] is required unless --shim-only is specified.' );
-                       $this->maybeHelp( true );
-               }
-
                if ( !is_readable( $phpfile ) ) {
-                       $this->error( "Error reading $phpfile\n", 1 );
+                       $this->error( "Error reading $phpfile", 1 );
                }
                include $phpfile;
                $phpfileContents = file_get_contents( $phpfile );
 
                if ( !isset( $messages ) ) {
-                       $this->error( "PHP file $phpfile does not define \$messages array\n", 1 );
+                       $this->error( "PHP file $phpfile does not define \$messages array", 1 );
+               }
+
+               if ( !$messages ) {
+                       $this->error( "PHP file $phpfile contains an empty \$messages array. " .
+                               "Maybe it was already converted?", 1 );
                }
 
-               $extensionStyle = true;
                if ( !isset( $messages['en'] ) || !is_array( $messages['en'] ) ) {
-                       if ( !$this->hasOption( 'langcode' ) ) {
-                               $this->error( "PHP file $phpfile does not set language codes, --langcode " .
-                                       "is required.\n", 1 );
-                       }
-                       $extensionStyle = false;
-                       $langcode = $this->getOption( 'langcode' );
-                       $messages = array( $langcode => $messages );
-               } elseif ( $this->hasOption( 'langcode' ) ) {
-                       $this->output( "Warning: --langcode option set but will not be used.\n" );
+                       $this->error( "PHP file $phpfile does not set language codes", 1 );
                }
 
                foreach ( $messages as $langcode => $langmsgs ) {
                        $authors = $this->getAuthorsFromComment( $this->findCommentBefore(
-                               $extensionStyle ? "\$messages['$langcode'] =" : '$messages =',
+                               "\$messages['$langcode'] =",
                                $phpfileContents
                        ) );
                        // Make sure the @metadata key is the first key in the output
@@ -164,89 +146,15 @@ class GenerateJsonI18n extends Maintenance {
                        $this->output( "$jsonfile\n" );
                }
 
-               if ( !$this->hasOption( 'langcode' ) ) {
-                       $shim = $this->doShim( $jsondir );
-                       file_put_contents( $phpfile, $shim );
-               }
-
-               $this->output( "All done.\n" );
-               $this->output( "Also add \$wgMessagesDirs['YourExtension'] = __DIR__ . '/i18n';\n" );
-       }
-
-       protected function shimOnly( $phpfile, $jsondir ) {
-               if ( file_exists( $phpfile ) ) {
-                       if ( !is_readable( $phpfile ) ) {
-                               $this->error( "Error reading $phpfile\n", 1 );
-                       }
-
-                       $phpfileContents = file_get_contents( $phpfile );
-                       $m = array();
-                       if ( !preg_match( '!"/([^"$]+)/\$csCode.json";!', $phpfileContents, $m ) ) {
-                               $this->error( "Cannot recognize $phpfile as a shim.\n", 1 );
-                       }
-
-                       if ( $jsondir === null ) {
-                               $jsondir = $m[1];
-                       }
-
-                       $this->output( "Updating existing shim $phpfile\n" );
-               } elseif ( $jsondir === null ) {
-                       $this->error( "$phpfile does not exist.\n" .
-                               "Argument [jsondir] is required in order to create a new shim.\n", 1 );
-               } else {
-                       $this->output( "Creating new shim $phpfile\n" );
-               }
-
-               $shim = $this->doShim( $jsondir );
-               file_put_contents( $phpfile, $shim );
-               $this->output( "All done.\n" );
-       }
-
-       protected function doShim( $jsondir ) {
-               $shim = <<<'PHP'
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( '{{FUNC}}' ) ) {
-       function {{FUNC}}( $cache, $code, &$cachedData ) {
-               $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
-               foreach ( $codeSequence as $csCode ) {
-                       $fileName = dirname( __FILE__ ) . "/{{OUT}}/$csCode.json";
-                       if ( is_readable( $fileName ) ) {
-                               $data = FormatJson::decode( file_get_contents( $fileName ), true );
-                               foreach ( array_keys( $data ) as $key ) {
-                                       if ( $key === '' || $key[0] === '@' ) {
-                                               unset( $data[$key] );
-                                       }
-                               }
-                               $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
-                       }
-
-                       $cachedData['deps'][] = new FileDependency( $fileName );
-               }
-               return true;
-       }
-
-       $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = '{{FUNC}}';
-}
-
-PHP;
-
-               $jsondir = str_replace( '\\', '/', $jsondir );
-               $shim = str_replace( '{{OUT}}', $jsondir, $shim );
-               $shim = str_replace( '{{FUNC}}', 'wfJsonI18nShim' . wfRandomString( 16 ), $shim );
-
-               return $shim;
+               $this->output(
+                       "All done. To complete the conversion, please do the following:\n" .
+                       "* Add \$wgMessagesDirs['YourExtension'] = __DIR__ . '/i18n';\n" .
+                       "* Remove \$wgExtensionMessagesFiles['YourExtension']\n" .
+                       "* Delete the old PHP message file\n" .
+                       "This script no longer generates backward compatibility shims! If you need\n" .
+                       "compatibility with MediaWiki 1.22 and older, use the MediaWiki 1.23 version\n" .
+                       "of this script instead, or create a shim manually.\n"
+               );
        }
 
        /**
index ab0ca1e..66553bc 100644 (file)
@@ -57,12 +57,6 @@ TEXT;
                        false,
                        true
                );
-               $this->addOption(
-                       'max-slave-lag',
-                       'If slave lag exceeds this many seconds, wait until it drops before continuing. Default: 10',
-                       false,
-                       true
-               );
                $this->addOption(
                        'throttle',
                        'Wait this many milliseconds after each category. Default: 0',
@@ -74,13 +68,9 @@ TEXT;
 
        public function execute() {
                $begin = $this->getOption( 'begin', '' );
-               $maxSlaveLag = $this->getOption( 'max-slave-lag', 10 );
                $throttle = $this->getOption( 'throttle', 0 );
                $force = $this->getOption( 'force', false );
-               $this->doPopulateCategory( $begin, $maxSlaveLag, $throttle, $force );
-       }
 
-       private function doPopulateCategory( $begin, $maxlag, $throttle, $force ) {
                $dbw = wfGetDB( DB_MASTER );
 
                if ( !$force ) {
index 5a14967..8e39978 100644 (file)
@@ -59,7 +59,6 @@ class ImageBuilder extends Maintenance {
 
        public function execute() {
                $this->dbw = wfGetDB( DB_MASTER );
-               $this->maxLag = 10; # if slaves are lagged more than 10 secs, wait
                $this->dryrun = $this->hasOption( 'dry-run' );
                if ( $this->dryrun ) {
                        $GLOBALS['wgReadOnly'] = 'Dry run mode, image upgrades are suppressed';
index 0fd1fd8..2ba5daf 100755 (executable)
@@ -126,7 +126,7 @@ class UpdateMediaWiki extends Maintenance {
 
                $this->output( "MediaWiki {$wgVersion} Updater\n\n" );
 
-               wfWaitForSlaves( 5 ); // let's not kill databases, shall we? ;) --tor
+               wfWaitForSlaves();
 
                if ( !$this->hasOption( 'skip-compat-checks' ) ) {
                        $this->compatChecks();
index 342ffba..5cf8afa 100644 (file)
@@ -24,8 +24,6 @@
  * @author Aryeh Gregor (Simetrical)
  */
 
-#$optionsWithArgs = array( 'begin', 'max-slave-lag' );
-
 require_once __DIR__ . '/Maintenance.php';
 
 /**
index c9b1abb..50665ef 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Wait until slave lag goes under a certain value.
+ * Wait for the slaves to catch up to the master position.
  *
  * 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
 require_once __DIR__ . '/Maintenance.php';
 
 /**
- * Maintenance script to wait until slave lag goes under a certain value.
+ * Maintenance script to wait for the slaves to catch up to the master position.
  *
  * @ingroup Maintenance
  */
 class WaitForSlave extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->addArg( 'maxlag', 'How long to wait for the slaves, default 10 seconds', false );
-       }
-
        public function execute() {
-               wfWaitForSlaves( $this->getArg( 0, 10 ) );
+               wfWaitForSlaves();
        }
 }
 
index b32dd33..ae5b3f9 100644 (file)
@@ -981,10 +981,13 @@ return array(
        ),
        'mediawiki.notification' => array(
                'styles' => array(
-                       'resources/src/mediawiki/mediawiki.notification.css',
+                       'resources/src/mediawiki/mediawiki.notification.common.css',
                        'resources/src/mediawiki/mediawiki.notification.hideForPrint.css'
                                => array( 'media' => 'print' ),
                ),
+               'skinStyles' => array(
+                       'default' => 'resources/src/mediawiki/mediawiki.notification.css',
+               ),
                'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
                'dependencies' => 'mediawiki.page.startup',
                'targets' => array( 'desktop', 'mobile' ),
@@ -1762,7 +1765,6 @@ return array(
 
        'oojs-ui.styles.icons' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1770,19 +1772,16 @@ return array(
        ),
        'oojs-ui.styles.indicators' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'indicators.json',
        ),
        'oojs-ui.styles.textures' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'textures.json',
        ),
        'oojs-ui.styles.icons-alerts' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-alerts.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1790,7 +1789,6 @@ return array(
        ),
        'oojs-ui.styles.icons-content' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-content.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1798,7 +1796,6 @@ return array(
        ),
        'oojs-ui.styles.icons-editing-advanced' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-editing-advanced.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1806,7 +1803,6 @@ return array(
        ),
        'oojs-ui.styles.icons-editing-core' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-editing-core.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1814,7 +1810,6 @@ return array(
        ),
        'oojs-ui.styles.icons-editing-list' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-editing-list.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1822,7 +1817,6 @@ return array(
        ),
        'oojs-ui.styles.icons-editing-styling' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-editing-styling.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1830,7 +1824,6 @@ return array(
        ),
        'oojs-ui.styles.icons-interactions' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-interactions.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1838,7 +1831,6 @@ return array(
        ),
        'oojs-ui.styles.icons-layout' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-layout.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1846,7 +1838,6 @@ return array(
        ),
        'oojs-ui.styles.icons-location' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-location.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1854,7 +1845,6 @@ return array(
        ),
        'oojs-ui.styles.icons-media' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-media.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1862,7 +1852,6 @@ return array(
        ),
        'oojs-ui.styles.icons-moderation' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-moderation.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1870,7 +1859,6 @@ return array(
        ),
        'oojs-ui.styles.icons-movement' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-movement.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1878,7 +1866,6 @@ return array(
        ),
        'oojs-ui.styles.icons-user' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-user.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
@@ -1886,7 +1873,6 @@ return array(
        ),
        'oojs-ui.styles.icons-wikimedia' => array(
                'class' => 'ResourceLoaderImageModule',
-               'position' => 'top',
                'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
                'data' => 'icons-wikimedia.json',
                'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
index 94bc7df..ebffe53 100644 (file)
@@ -6,5 +6,13 @@
        },
        "ooui-outline-control-move-down": "توکی ښکته راوړل",
        "ooui-outline-control-move-up": "توکی پورته راوړل",
-       "ooui-toolbar-more": "نور"
+       "ooui-outline-control-remove": "توکی غورځول",
+       "ooui-toolbar-more": "نور",
+       "ooui-toolgroup-expand": "نور",
+       "ooui-toolgroup-collapse": "لږ تر لږ",
+       "ooui-dialog-message-accept": "ښه",
+       "ooui-dialog-message-reject": "ناگارل",
+       "ooui-dialog-process-error": "يوه ستونزه رامنځ ته شوه",
+       "ooui-dialog-process-dismiss": "تړل",
+       "ooui-dialog-process-retry": "بيا هڅه"
 }
index 806fab1..297739d 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.0
+ * OOjs UI v0.11.1
  * 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-04-30T01:42:35Z
+ * Date: 2015-05-05T00:40:57Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 .oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
        box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
+.oo-ui-indexLayout > .oo-ui-menuLayout-menu {
+       height: 3em;
+}
+.oo-ui-indexLayout > .oo-ui-menuLayout-content {
+       top: 3em;
+}
+.oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout {
+       padding: 1.5em;
+}
 .oo-ui-fieldLayout {
        display: block;
        margin-bottom: 1em;
        border-width: 9px;
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+       -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+          -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+           -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+            -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+               transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
 }
 .oo-ui-popupWidget-head {
        height: 2.5em;
        border: solid 1px #cccccc;
        box-shadow: inset 0 0 0 0 #347bff;
        border-radius: 0.1em;
-       -webkit-transition: box-shadow 0.1s;
-          -moz-transition: box-shadow 0.1s;
-           -ms-transition: box-shadow 0.1s;
-            -o-transition: box-shadow 0.1s;
-               transition: box-shadow 0.1s;
+       -webkit-transition: box-shadow 0.1s ease-in-out;
+          -moz-transition: box-shadow 0.1s ease-in-out;
+           -ms-transition: box-shadow 0.1s ease-in-out;
+            -o-transition: box-shadow 0.1s ease-in-out;
+               transition: box-shadow 0.1s ease-in-out;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
        margin: 0.5em 0 0.5em 0.5em;
        opacity: 0.2;
 }
+.oo-ui-tabSelectWidget {
+       text-align: left;
+       white-space: nowrap;
+       overflow: hidden;
+       background-color: #dddddd;
+}
+.oo-ui-tabOptionWidget {
+       display: inline-block;
+       vertical-align: bottom;
+       padding: 0.35em 1em;
+       margin: 0.5em 0 0 0.75em;
+       border: 1px solid transparent;
+       border-bottom: none;
+       border-top-left-radius: 2px;
+       border-top-right-radius: 2px;
+       color: #666666;
+       font-weight: bold;
+}
+.oo-ui-tabOptionWidget:hover {
+       background-color: rgba(255, 255, 255, 0.3);
+}
+.oo-ui-tabOptionWidget:active {
+       background-color: rgba(255, 255, 255, 0.8);
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+       padding-right: 1.5em;
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       opacity: 0.5;
+}
+.oo-ui-selectWidget-pressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-selectWidget-depressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-tabOptionWidget.oo-ui-optionWidget-selected:hover {
+       background-color: #ffffff;
+       color: #333333;
+}
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
index dbbd8f5..b013b1a 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.0
+ * OOjs UI v0.11.1
  * 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-04-30T01:42:23Z
+ * Date: 2015-05-05T00:40:50Z
  */
 /**
  * @class
index 6dd1b62..f6d6128 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.0
+ * OOjs UI v0.11.1
  * 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-04-30T01:42:23Z
+ * Date: 2015-05-05T00:40:50Z
  */
 ( function ( OO ) {
 
@@ -150,6 +150,38 @@ OO.ui.contains = function ( containers, contained, matchContainers ) {
        return false;
 };
 
+/**
+ * Return a function, that, as long as it continues to be invoked, will not
+ * be triggered. The function will be called after it stops being called for
+ * N milliseconds. If `immediate` is passed, trigger the function on the
+ * leading edge, instead of the trailing.
+ *
+ * Ported from: http://underscorejs.org/underscore.js
+ *
+ * @param {Function} func
+ * @param {number} wait
+ * @param {boolean} immediate
+ * @return {Function}
+ */
+OO.ui.debounce = function ( func, wait, immediate ) {
+       var timeout;
+       return function () {
+               var context = this,
+                       args = arguments,
+                       later = function () {
+                               timeout = null;
+                               if ( !immediate ) {
+                                       func.apply( context, args );
+                               }
+                       };
+               if ( immediate && !timeout ) {
+                       func.apply( context, args );
+               }
+               clearTimeout( timeout );
+               timeout = setTimeout( later, wait );
+       };
+};
+
 /**
  * Reconstitute a JavaScript object corresponding to a widget created by
  * the PHP implementation.
@@ -5338,9 +5370,9 @@ OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
  * @param {Object} [config] Configuration options
  * @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.
+ * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [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.
@@ -9094,7 +9126,7 @@ OO.ui.BookletLayout.prototype.setPage = function ( name ) {
                if ( this.outlined ) {
                        selectedItem = this.outlineSelectWidget.getSelectedItem();
                        if ( selectedItem && selectedItem.getData() !== name ) {
-                               this.outlineSelectWidget.selectItem( this.outlineSelectWidget.getItemFromData( name ) );
+                               this.outlineSelectWidget.selectItemByData( name );
                        }
                }
                if ( page ) {
@@ -9131,6 +9163,459 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
        return this;
 };
 
+/**
+ * IndexLayouts contain {@link OO.ui.CardLayout card layouts} as well as
+ * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the cards and
+ * select which one to display. By default, only one card is displayed at a time. When a user
+ * navigates to a new card, the index layout automatically focuses on the first focusable element,
+ * unless the default setting is changed.
+ *
+ * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication
+ *
+ *     @example
+ *     // Example of a IndexLayout that contains two CardLayouts.
+ *
+ *     function CardOneLayout( name, config ) {
+ *         CardOneLayout.super.call( this, name, config );
+ *         this.$element.append( '<p>First card</p>' );
+ *     }
+ *     OO.inheritClass( CardOneLayout, OO.ui.CardLayout );
+ *     CardOneLayout.prototype.setupTabItem = function () {
+ *         this.tabItem.setLabel( 'Card One' );
+ *     };
+ *
+ *     function CardTwoLayout( name, config ) {
+ *         CardTwoLayout.super.call( this, name, config );
+ *         this.$element.append( '<p>Second card</p>' );
+ *     }
+ *     OO.inheritClass( CardTwoLayout, OO.ui.CardLayout );
+ *     CardTwoLayout.prototype.setupTabItem = function () {
+ *         this.tabItem.setLabel( 'Card Two' );
+ *     };
+ *
+ *     var card1 = new CardOneLayout( 'one' ),
+ *         card2 = new CardTwoLayout( 'two' );
+ *
+ *     var index = new OO.ui.IndexLayout();
+ *
+ *     index.addCards ( [ card1, card2 ] );
+ *     $( 'body' ).append( index.$element );
+ *
+ * @class
+ * @extends OO.ui.MenuLayout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [continuous=false] Show all cards, one after another
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new card is displayed.
+ */
+OO.ui.IndexLayout = function OoUiIndexLayout( config ) {
+       // Configuration initialization
+       config = $.extend( {}, config, { menuPosition: 'top' } );
+
+       // Parent constructor
+       OO.ui.IndexLayout.super.call( this, config );
+
+       // Properties
+       this.currentCardName = null;
+       this.cards = {};
+       this.ignoreFocus = false;
+       this.stackLayout = new OO.ui.StackLayout( { continuous: !!config.continuous } );
+       this.$content.append( this.stackLayout.$element );
+       this.autoFocus = config.autoFocus === undefined || !!config.autoFocus;
+
+       this.tabSelectWidget = new OO.ui.TabSelectWidget();
+       this.tabPanel = new OO.ui.PanelLayout();
+       this.$menu.append( this.tabPanel.$element );
+
+       this.toggleMenu( true );
+
+       // Events
+       this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
+       this.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );
+       if ( this.autoFocus ) {
+               // Event 'focus' does not bubble, but 'focusin' does
+               this.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );
+       }
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-indexLayout' );
+       this.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );
+       this.tabPanel.$element
+               .addClass( 'oo-ui-indexLayout-tabPanel' )
+               .append( this.tabSelectWidget.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );
+
+/* Events */
+
+/**
+ * A 'set' event is emitted when a card is {@link #setCard set} to be displayed by the index layout.
+ * @event set
+ * @param {OO.ui.CardLayout} card Current card
+ */
+
+/**
+ * An 'add' event is emitted when cards are {@link #addCards added} to the index layout.
+ *
+ * @event add
+ * @param {OO.ui.CardLayout[]} card Added cards
+ * @param {number} index Index cards were added at
+ */
+
+/**
+ * A 'remove' event is emitted when cards are {@link #clearCards cleared} or
+ * {@link #removeCards removed} from the index.
+ *
+ * @event remove
+ * @param {OO.ui.CardLayout[]} cards Removed cards
+ */
+
+/* Methods */
+
+/**
+ * Handle stack layout focus.
+ *
+ * @private
+ * @param {jQuery.Event} e Focusin event
+ */
+OO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {
+       var name, $target;
+
+       // Find the card that an element was focused within
+       $target = $( e.target ).closest( '.oo-ui-cardLayout' );
+       for ( name in this.cards ) {
+               // Check for card match, exclude current card to find only card changes
+               if ( this.cards[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentCardName ) {
+                       this.setCard( name );
+                       break;
+               }
+       }
+};
+
+/**
+ * Handle stack layout set events.
+ *
+ * @private
+ * @param {OO.ui.PanelLayout|null} card The card panel that is now the current panel
+ */
+OO.ui.IndexLayout.prototype.onStackLayoutSet = function ( card ) {
+       var layout = this;
+       if ( card ) {
+               card.scrollElementIntoView( { complete: function () {
+                       if ( layout.autoFocus ) {
+                               layout.focus();
+                       }
+               } } );
+       }
+};
+
+/**
+ * Focus the first input in the current card.
+ *
+ * If no card is selected, the first selectable card will be selected.
+ * If the focus is already in an element on the current card, nothing will happen.
+ * @param {number} [itemIndex] A specific item to focus on
+ */
+OO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {
+       var $input, card,
+               items = this.stackLayout.getItems();
+
+       if ( itemIndex !== undefined && items[ itemIndex ] ) {
+               card = items[ itemIndex ];
+       } else {
+               card = this.stackLayout.getCurrentItem();
+       }
+
+       if ( !card ) {
+               this.selectFirstSelectableCard();
+               card = this.stackLayout.getCurrentItem();
+       }
+       if ( !card ) {
+               return;
+       }
+       // Only change the focus if is not already in the current card
+       if ( !card.$element.find( ':focus' ).length ) {
+               $input = card.$element.find( ':input:first' );
+               if ( $input.length ) {
+                       $input[ 0 ].focus();
+               }
+       }
+};
+
+/**
+ * Find the first focusable input in the index layout and focus
+ * on it.
+ */
+OO.ui.IndexLayout.prototype.focusFirstFocusable = function () {
+       var i, len,
+               found = false,
+               items = this.stackLayout.getItems(),
+               checkAndFocus = function () {
+                       if ( OO.ui.isFocusableElement( $( this ) ) ) {
+                               $( this ).focus();
+                               found = true;
+                               return false;
+                       }
+               };
+
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               if ( found ) {
+                       break;
+               }
+               // Find all potentially focusable elements in the item
+               // and check if they are focusable
+               items[i].$element
+                       .find( 'input, select, textarea, button, object' )
+                       .each( checkAndFocus );
+       }
+};
+
+/**
+ * Handle tab widget select events.
+ *
+ * @private
+ * @param {OO.ui.OptionWidget|null} item Selected item
+ */
+OO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {
+       if ( item ) {
+               this.setCard( item.getData() );
+       }
+};
+
+/**
+ * Get the card closest to the specified card.
+ *
+ * @param {OO.ui.CardLayout} card Card to use as a reference point
+ * @return {OO.ui.CardLayout|null} Card closest to the specified card
+ */
+OO.ui.IndexLayout.prototype.getClosestCard = function ( card ) {
+       var next, prev, level,
+               cards = this.stackLayout.getItems(),
+               index = $.inArray( card, cards );
+
+       if ( index !== -1 ) {
+               next = cards[ index + 1 ];
+               prev = cards[ index - 1 ];
+               // Prefer adjacent cards at the same level
+               level = this.tabSelectWidget.getItemFromData( card.getName() ).getLevel();
+               if (
+                       prev &&
+                       level === this.tabSelectWidget.getItemFromData( prev.getName() ).getLevel()
+               ) {
+                       return prev;
+               }
+               if (
+                       next &&
+                       level === this.tabSelectWidget.getItemFromData( next.getName() ).getLevel()
+               ) {
+                       return next;
+               }
+       }
+       return prev || next || null;
+};
+
+/**
+ * Get the tabs widget.
+ *
+ * @return {OO.ui.TabSelectWidget} Tabs widget
+ */
+OO.ui.IndexLayout.prototype.getTabs = function () {
+       return this.tabSelectWidget;
+};
+
+/**
+ * Get a card by its symbolic name.
+ *
+ * @param {string} name Symbolic name of card
+ * @return {OO.ui.CardLayout|undefined} Card, if found
+ */
+OO.ui.IndexLayout.prototype.getCard = function ( name ) {
+       return this.cards[ name ];
+};
+
+/**
+ * Get the current card.
+ *
+ * @return {OO.ui.CardLayout|undefined} Current card, if found
+ */
+OO.ui.IndexLayout.prototype.getCurrentCard = function () {
+       var name = this.getCurrentCardName();
+       return name ? this.getCard( name ) : undefined;
+};
+
+/**
+ * Get the symbolic name of the current card.
+ *
+ * @return {string|null} Symbolic name of the current card
+ */
+OO.ui.IndexLayout.prototype.getCurrentCardName = function () {
+       return this.currentCardName;
+};
+
+/**
+ * Add cards to the index layout
+ *
+ * When cards are added with the same names as existing cards, the existing cards will be
+ * automatically removed before the new cards are added.
+ *
+ * @param {OO.ui.CardLayout[]} cards Cards to add
+ * @param {number} index Index of the insertion point
+ * @fires add
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.addCards = function ( cards, index ) {
+       var i, len, name, card, item, currentIndex,
+               stackLayoutCards = this.stackLayout.getItems(),
+               remove = [],
+               items = [];
+
+       // Remove cards with same names
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               card = cards[ i ];
+               name = card.getName();
+
+               if ( Object.prototype.hasOwnProperty.call( this.cards, name ) ) {
+                       // Correct the insertion index
+                       currentIndex = $.inArray( this.cards[ name ], stackLayoutCards );
+                       if ( currentIndex !== -1 && currentIndex + 1 < index ) {
+                               index--;
+                       }
+                       remove.push( this.cards[ name ] );
+               }
+       }
+       if ( remove.length ) {
+               this.removeCards( remove );
+       }
+
+       // Add new cards
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               card = cards[ i ];
+               name = card.getName();
+               this.cards[ card.getName() ] = card;
+               item = new OO.ui.TabOptionWidget( { data: name } );
+               card.setTabItem( item );
+               items.push( item );
+       }
+
+       if ( items.length ) {
+               this.tabSelectWidget.addItems( items, index );
+               this.selectFirstSelectableCard();
+       }
+       this.stackLayout.addItems( cards, index );
+       this.emit( 'add', cards, index );
+
+       return this;
+};
+
+/**
+ * Remove the specified cards from the index layout.
+ *
+ * To remove all cards from the index, you may wish to use the #clearCards method instead.
+ *
+ * @param {OO.ui.CardLayout[]} cards An array of cards to remove
+ * @fires remove
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.removeCards = function ( cards ) {
+       var i, len, name, card,
+               items = [];
+
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               card = cards[ i ];
+               name = card.getName();
+               delete this.cards[ name ];
+               items.push( this.tabSelectWidget.getItemFromData( name ) );
+               card.setTabItem( null );
+       }
+       if ( items.length ) {
+               this.tabSelectWidget.removeItems( items );
+               this.selectFirstSelectableCard();
+       }
+       this.stackLayout.removeItems( cards );
+       this.emit( 'remove', cards );
+
+       return this;
+};
+
+/**
+ * Clear all cards from the index layout.
+ *
+ * To remove only a subset of cards from the index, use the #removeCards method.
+ *
+ * @fires remove
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.clearCards = function () {
+       var i, len,
+               cards = this.stackLayout.getItems();
+
+       this.cards = {};
+       this.currentCardName = null;
+       this.tabSelectWidget.clearItems();
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               cards[ i ].setTabItem( null );
+       }
+       this.stackLayout.clearItems();
+
+       this.emit( 'remove', cards );
+
+       return this;
+};
+
+/**
+ * Set the current card by symbolic name.
+ *
+ * @fires set
+ * @param {string} name Symbolic name of card
+ */
+OO.ui.IndexLayout.prototype.setCard = function ( name ) {
+       var selectedItem,
+               $focused,
+               card = this.cards[ name ];
+
+       if ( name !== this.currentCardName ) {
+               selectedItem = this.tabSelectWidget.getSelectedItem();
+               if ( selectedItem && selectedItem.getData() !== name ) {
+                       this.tabSelectWidget.selectItemByData( name );
+               }
+               if ( card ) {
+                       if ( this.currentCardName && this.cards[ this.currentCardName ] ) {
+                               this.cards[ this.currentCardName ].setActive( false );
+                               // Blur anything focused if the next card doesn't have anything focusable - this
+                               // is not needed if the next card has something focusable because once it is focused
+                               // this blur happens automatically
+                               if ( this.autoFocus && !card.$element.find( ':input' ).length ) {
+                                       $focused = this.cards[ this.currentCardName ].$element.find( ':focus' );
+                                       if ( $focused.length ) {
+                                               $focused[ 0 ].blur();
+                                       }
+                               }
+                       }
+                       this.currentCardName = name;
+                       this.stackLayout.setItem( card );
+                       card.setActive( true );
+                       this.emit( 'set', card );
+               }
+       }
+};
+
+/**
+ * Select the first selectable card.
+ *
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.selectFirstSelectableCard = function () {
+       if ( !this.tabSelectWidget.getSelectedItem() ) {
+               this.tabSelectWidget.selectItem( this.tabSelectWidget.getFirstSelectableItem() );
+       }
+
+       return this;
+};
+
 /**
  * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,
  * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.
@@ -9187,6 +9672,145 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
 
 OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
 
+/**
+ * CardLayouts are used within {@link OO.ui.IndexLayout index layouts} to create cards that users can select and display
+ * from the index's optional {@link OO.ui.TabSelectWidget tab} navigation. Cards are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
+ *
+ * Each card must have a unique symbolic name, which is passed to the constructor. In addition, the card's tab
+ * item is customized (with a label) using the #setupTabItem method. See
+ * {@link OO.ui.IndexLayout IndexLayout} for an example.
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ *
+ * @constructor
+ * @param {string} name Unique symbolic name of card
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.CardLayout = function OoUiCardLayout( 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 );
+
+       // Parent constructor
+       OO.ui.CardLayout.super.call( this, config );
+
+       // Properties
+       this.name = name;
+       this.tabItem = null;
+       this.active = false;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-cardLayout' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.CardLayout, OO.ui.PanelLayout );
+
+/* Events */
+
+/**
+ * An 'active' event is emitted when the card becomes active. Cards become active when they are
+ * shown in a index layout that is configured to display only one card at a time.
+ *
+ * @event active
+ * @param {boolean} active Card is active
+ */
+
+/* Methods */
+
+/**
+ * Get the symbolic name of the card.
+ *
+ * @return {string} Symbolic name of card
+ */
+OO.ui.CardLayout.prototype.getName = function () {
+       return this.name;
+};
+
+/**
+ * Check if card is active.
+ *
+ * Cards become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to display
+ * only one card at a time. Additional CSS is applied to the card's tab item to reflect the active state.
+ *
+ * @return {boolean} Card is active
+ */
+OO.ui.CardLayout.prototype.isActive = function () {
+       return this.active;
+};
+
+/**
+ * Get tab item.
+ *
+ * The tab item allows users to access the card from the index's tab
+ * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.
+ *
+ * @return {OO.ui.TabOptionWidget|null} Tab option widget
+ */
+OO.ui.CardLayout.prototype.getTabItem = function () {
+       return this.tabItem;
+};
+
+/**
+ * Set or unset the tab item.
+ *
+ * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,
+ * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab
+ * level), use #setupTabItem instead of this method.
+ *
+ * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setTabItem = function ( tabItem ) {
+       this.tabItem = tabItem || null;
+       if ( tabItem ) {
+               this.setupTabItem();
+       }
+       return this;
+};
+
+/**
+ * Set up the tab item.
+ *
+ * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset
+ * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use
+ * the #setTabItem method instead.
+ *
+ * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setupTabItem = function () {
+       return this;
+};
+
+/**
+ * Set the card to its 'active' state.
+ *
+ * Cards become active when they are shown in a index layout that is configured to display only one card at a time. Additional
+ * CSS is applied to the tab item to reflect the card's active state. Outside of the index
+ * context, setting the active state on a card does nothing.
+ *
+ * @param {boolean} value Card is active
+ * @fires active
+ */
+OO.ui.CardLayout.prototype.setActive = function ( active ) {
+       active = !!active;
+
+       if ( active !== this.active ) {
+               this.active = active;
+               this.$element.toggleClass( 'oo-ui-cardLayout-active', this.active );
+               this.emit( 'active', this.active );
+       }
+};
+
 /**
  * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display
  * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,
@@ -10209,7 +10833,7 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
 /**
  * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.
  * Controls include moving items up and down, removing items, and adding different kinds of items.
- * ####Currently, this class is only used by {@link OO.ui.BookletLayout BookletLayouts}.####
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
  *
  * @class
  * @extends OO.ui.Widget
@@ -10899,7 +11523,7 @@ OO.ui.ActionWidget.prototype.toggle = function () {
  *         popup: {
  *             $content: $( '<p>Additional options here.</p>' ),
  *             padded: true,
- *             align: 'left'
+ *             align: 'force-left'
  *         }
  *     } );
  *     // Append the button to the DOM.
@@ -11834,10 +12458,7 @@ OO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {
  * @inheritdoc
  */
 OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
-       var item = this.dropdownWidget.getMenu().getItemFromData( value );
-       if ( item ) {
-               this.dropdownWidget.getMenu().selectItem( item );
-       }
+       this.dropdownWidget.getMenu().selectItemByData( value );
        OO.ui.DropdownInputWidget.super.prototype.setValue.call( this, value );
        return this;
 };
@@ -12089,6 +12710,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
        this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
        this.on( 'labelChange', this.updatePosition.bind( this ) );
+       this.connect( this, { change: 'onChange' } );
 
        // Initialization
        this.$element
@@ -12105,7 +12727,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
                this.$input.attr( 'autofocus', 'autofocus' );
        }
        if ( config.required ) {
-               this.$input.attr( 'required', 'true' );
+               this.$input.attr( 'required', 'required' );
        }
        if ( this.label || config.autosize ) {
                this.installParentChangeDetector();
@@ -12194,25 +12816,14 @@ OO.ui.TextInputWidget.prototype.onElementAttach = function () {
 };
 
 /**
- * @inheritdoc
- */
-OO.ui.TextInputWidget.prototype.onEdit = function () {
-       this.adjustSize();
-
-       // Parent method
-       return OO.ui.TextInputWidget.super.prototype.onEdit.call( this );
-};
-
-/**
- * @inheritdoc
+ * Handle change events.
+ *
+ * @param {string} value
+ * @private
  */
-OO.ui.TextInputWidget.prototype.setValue = function ( value ) {
-       // Parent method
-       OO.ui.TextInputWidget.super.prototype.setValue.call( this, value );
-
+OO.ui.TextInputWidget.prototype.onChange = function () {
        this.setValidityFlag();
        this.adjustSize();
-       return this;
 };
 
 /**
@@ -12418,6 +13029,11 @@ OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
 OO.ui.TextInputWidget.prototype.setValidityFlag = function () {
        var widget = this;
        this.isValid().done( function ( valid ) {
+               if ( !valid ) {
+                       widget.$input.attr( 'aria-invalid', 'true' );
+               } else {
+                       widget.$input.removeAttr( 'aria-invalid' );
+               }
                widget.setFlags( { invalid: !valid } );
        } );
 };
@@ -13416,6 +14032,38 @@ OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
        return this;
 };
 
+/**
+ * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.
+ *
+ * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain
+ * {@link OO.ui.CardLayout card layouts}. See {@link OO.ui.IndexLayout IndexLayout}
+ * for an example.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.TabOptionWidget.super.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-tabOptionWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );
+
+/* Static Properties */
+
+OO.ui.TabOptionWidget.static.highlightable = false;
+
 /**
  * PopupWidget is a container for content. The popup is overlaid and positioned absolutely.
  * By default, each popup has an anchor that points toward its origin.
@@ -14484,6 +15132,22 @@ OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
        return this;
 };
 
+/**
+ * Programmatically select an option by its data. If the `data` parameter is omitted,
+ * or if the item does not exist, all options will be deselected.
+ *
+ * @param {Object|string} [data] Value of the item to select, omit to deselect all
+ * @fires select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.selectItemByData = function ( data ) {
+       var itemFromData = this.getItemFromData( data );
+       if ( data === undefined || !itemFromData ) {
+               return this.selectItem();
+       }
+       return this.selectItem( itemFromData );
+};
+
 /**
  * Programmatically select an option by its reference. If the `item` parameter is omitted,
  * all options will be deselected.
@@ -15167,7 +15831,7 @@ OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
  * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}
  * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.
  *
- * ####Currently, this class is only used by {@link OO.ui.BookletLayout BookletLayouts}.####
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
  *
  * @class
  * @extends OO.ui.SelectWidget
@@ -15198,6 +15862,40 @@ OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
 OO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );
 OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.TabIndexedElement );
 
+/**
+ * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}
+ *
+ * ####Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.####
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {
+       // Parent constructor
+       OO.ui.TabSelectWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.TabIndexedElement.call( this, config );
+
+       // Events
+       this.$element.on( {
+               focus: this.bindKeyDownListener.bind( this ),
+               blur: this.unbindKeyDownListener.bind( this )
+       } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-tabSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.TabIndexedElement );
+
 /**
  * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean
  * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented
index 3c8376b..497a301 100644 (file)
@@ -12,8 +12,8 @@
                        "ltr": "images/icons/browser-ltr.svg",
                        "rtl": "images/icons/browser-rtl.svg"
                } },
+               "clear": { "file": "images/icons/clear.svg" },
                "clock": { "file": "images/icons/clock.svg" },
-               "closeInput": { "file": "images/icons/closeInput.svg" },
                "funnel": { "file": {
                        "ltr": "images/icons/funnel-ltr.svg",
                        "rtl": "images/icons/funnel-rtl.svg"
                        "ltr": "images/icons/logOut-ltr.svg",
                        "rtl": "images/icons/logOut-rtl.svg"
                } },
-               "magnifyingGlass": { "file": {
-                       "ltr": "images/icons/magnifyingGlass-ltr.svg",
-                       "rtl": "images/icons/magnifyingGlass-rtl.svg"
-               } },
                "newWindow": { "file": {
                        "ltr": "images/icons/newWindow-ltr.svg",
                        "rtl": "images/icons/newWindow-rtl.svg"
index 36c8777..1f12f2a 100644 (file)
@@ -20,7 +20,7 @@
                }
        },
        "images": {
-               "block": { "file": "images/icons/block.svg" },
+               "block": { "file": "images/icons/block.svg", "variants": [ "destructive" ] },
                "blockUndo": { "file": {
                        "ltr": "images/icons/blockUndo-ltr.svg",
                        "rtl": "images/icons/blockUndo-rtl.svg"
index 6d8e4ad..948ae6c 100644 (file)
@@ -24,9 +24,9 @@
                "add": { "file": "images/icons/add.svg", "variants": [ "constructive" ] },
                "advanced": { "file": "images/icons/advanced.svg" },
                "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
+               "cancel": { "file": "images/icons/cancel.svg" },
                "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive" ] },
                "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] },
-               "clear": { "file": "images/icons/clear.svg" },
                "close": { "file": {
                        "ltr": "images/icons/close-ltr.svg",
                        "rtl": "images/icons/close-rtl.svg"
                        "rtl": "images/icons/arched-arrow-rtl.svg"
                } },
                "remove": { "file": "images/icons/remove.svg", "variants": [ "destructive" ] },
-               "search": { "file": "images/icons/search.svg" },
+               "search": { "file": {
+                       "ltr": "images/icons/search-ltr.svg",
+                       "rtl": "images/icons/search-rtl.svg"
+               } },
                "settings": { "file": "images/icons/settings.svg" },
                "tag": { "file": "images/icons/tag.svg" },
                "undo": { "file": {
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png
new file mode 100644 (file)
index 0000000..3e91997
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg
new file mode 100644 (file)
index 0000000..c850e65
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png
new file mode 100644 (file)
index 0000000..5668e12
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg
new file mode 100644 (file)
index 0000000..8a9d3d4
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="cancel">
+        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png
new file mode 100644 (file)
index 0000000..51a33ff
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg
new file mode 100644 (file)
index 0000000..bfc1b44
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="cancel">
+        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png
deleted file mode 100644 (file)
index 5668e12..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg
deleted file mode 100644 (file)
index 6d3bc58..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <g id="clear">
-        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
-    </g>
-</svg>
index 51a33ff..b18e2e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png differ
index 0dcde9d..55a26c9 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="clear">
-        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
-    </g>
+  <g id="clear">
+    <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
+  </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png
deleted file mode 100644 (file)
index b18e2e6..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg
deleted file mode 100644 (file)
index 5d29e3c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png
deleted file mode 100644 (file)
index 6f06dfe..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg
deleted file mode 100644 (file)
index 49e598c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M16.4 16.4c1-1.2 1.6-2.7 1.6-4.4 0-3.9-3.1-7-7-7s-7 3.1-7 7 3.1 7 7 7c1.2 0 2.3-.3 3.2-.8l2.8 2.8c1.4 1.4 2.5 1.5 4 0l-4.6-4.6zm-10.4-4.4c0-2.8 2.2-5 5-5s5 2.2 5 5-2.2 5-5 5-5-2.3-5-5z"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png
deleted file mode 100644 (file)
index 358048d..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg
deleted file mode 100644 (file)
index c9695b6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M8.6 16.4c-1-1.2-1.6-2.7-1.6-4.4 0-3.9 3.1-7 7-7s7 3.1 7 7-3.1 7-7 7c-1.2 0-2.3-.3-3.2-.8l-2.8 2.8c-1.4 1.4-2.5 1.5-4 0l4.6-4.6zm10.4-4.4c0-2.8-2.2-5-5-5s-5 2.2-5 5 2.2 5 5 5 5-2.3 5-5z" id="path414"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png
deleted file mode 100644 (file)
index 3e15daf..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg
deleted file mode 100644 (file)
index 5ae4952..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <g id="search">
-        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png
new file mode 100644 (file)
index 0000000..4b6ecd2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg
new file mode 100644 (file)
index 0000000..3d58783
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="search">
+        <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png
new file mode 100644 (file)
index 0000000..c10dc66
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg
new file mode 100644 (file)
index 0000000..cdcbc30
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="search">
+        <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png
new file mode 100644 (file)
index 0000000..7868dc1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg
new file mode 100644 (file)
index 0000000..91130f0
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="search">
+        <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png
new file mode 100644 (file)
index 0000000..dab4ff1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg
new file mode 100644 (file)
index 0000000..c675349
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="search">
+        <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png
deleted file mode 100644 (file)
index 39d3ab8..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg
deleted file mode 100644 (file)
index e4db4f0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="search">
-        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
new file mode 100644 (file)
index 0000000..2840bef
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg
new file mode 100644 (file)
index 0000000..f46b1ee
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="search">
+        <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
new file mode 100644 (file)
index 0000000..df1c61e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg
new file mode 100644 (file)
index 0000000..266349e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="search">
+        <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
new file mode 100644 (file)
index 0000000..665a088
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg
new file mode 100644 (file)
index 0000000..bd962d9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="search">
+        <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
new file mode 100644 (file)
index 0000000..c9443d7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg
new file mode 100644 (file)
index 0000000..5368fd7
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="search">
+        <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+    </g>
+</svg>
index ced5e79..d83e57e 100644 (file)
                        "ltr": "images/indicators/arrow-rtl.svg",
                        "rtl": "images/indicators/arrow-ltr.svg"
                } },
-               "required": { "file": "images/indicators/required.svg" }
+               "required": { "file": "images/indicators/required.svg" },
+               "search": { "file": {
+                       "ltr": "images/indicators/search-ltr.svg",
+                       "rtl": "images/indicators/search-rtl.svg"
+               } }
        }
 }
index 08996fe..0b57907 100644 (file)
                                        // Error handler
                                        function ( code ) {
                                                if ( code === 'badtoken' ) {
-                                                       // Clear from cache
-                                                       promises[ api.defaults.ajax.url ][ tokenType + 'Token' ] =
-                                                               params.token = undefined;
-
+                                                       api.badToken( tokenType );
                                                        // Try again, once
+                                                       params.token = undefined;
                                                        return api.getToken( tokenType, params.assert ).then( function ( token ) {
                                                                params.token = token;
                                                                return api.post( params, ajaxOptions );
 
                                d = apiPromise
                                        .then( function ( data ) {
-                                               // If token type is not available for this user,
-                                               // key '...token' is either missing or set to boolean false
                                                if ( data.tokens && data.tokens[type + 'token'] ) {
                                                        return data.tokens[type + 'token'];
                                                }
 
+                                               // If token type is not available for this user,
+                                               // key '...token' is either missing or set to boolean false
                                                return $.Deferred().reject( 'token-missing', data );
                                        }, function () {
                                                // Clear promise. Do not cache errors.
                                                delete promiseGroup[ type + 'Token' ];
-
                                                // Pass on to allow the caller to handle the error
                                                return this;
                                        } )
                        }
 
                        return d;
+               },
+
+               /**
+                * Indicate that the cached token for a certain action of the API is bad.
+                *
+                * Call this if you get a 'badtoken' error when using the token returned by #getToken.
+                * You may also want to use #postWithToken instead, which invalidates bad cached tokens
+                * automatically.
+                *
+                * @param {string} type Token type
+                * @since 1.26
+                */
+               badToken: function ( type ) {
+                       var promiseGroup = promises[ this.defaults.ajax.url ];
+                       if ( promiseGroup ) {
+                               delete promiseGroup[ type + 'Token' ];
+                       }
                }
        };
 
index 237157c..e556ed8 100644 (file)
@@ -14,6 +14,7 @@
                hasOwn = Object.prototype.hasOwnProperty,
                slice = Array.prototype.slice,
                trackCallbacks = $.Callbacks( 'memory' ),
+               trackHandlers = [],
                trackQueue = [];
 
        /**
                 */
                trackSubscribe: function ( topic, callback ) {
                        var seen = 0;
-
-                       trackCallbacks.add( function ( trackQueue ) {
+                       function handler( trackQueue ) {
                                var event;
                                for ( ; seen < trackQueue.length; seen++ ) {
                                        event = trackQueue[ seen ];
                                                callback.call( event, event.topic, event.data );
                                        }
                                }
+                       }
+
+                       trackHandlers.push( [ handler, callback ] );
+
+                       trackCallbacks.add( handler );
+               },
+
+               /**
+                * Stop handling events for a particular handler
+                *
+                * @param {Function} callback
+                */
+               trackUnsubscribe: function ( callback ) {
+                       trackHandlers = $.grep( trackHandlers, function ( fns ) {
+                               if ( fns[1] === callback ) {
+                                       trackCallbacks.remove( fns[0] );
+                                       // Ensure the tuple is removed to avoid holding on to closures
+                                       return false;
+                               }
+                               return true;
                        } );
                },
 
diff --git a/resources/src/mediawiki/mediawiki.notification.common.css b/resources/src/mediawiki/mediawiki.notification.common.css
new file mode 100644 (file)
index 0000000..a1309c2
--- /dev/null
@@ -0,0 +1,7 @@
+.mw-notification-area {
+       position: absolute;
+}
+
+.mw-notification-area-floating {
+       position: fixed;
+}
index ae399ce..954de22 100644 (file)
@@ -1,5 +1,4 @@
 .mw-notification-area {
-       position: absolute;
        top: 0;
        right: 0;
        padding: 1em 1em 0 0;
@@ -8,10 +7,6 @@
        z-index: 10000;
 }
 
-.mw-notification-area-floating {
-       position: fixed;
-}
-
 .mw-notification {
        padding: 0.25em 1em;
        margin-bottom: 0.5em;
index a62cc9d..80cc7d9 100644 (file)
@@ -52,6 +52,8 @@ function isCompatible( ua ) {
                ua.match( /Opera Mini/ ) ||
                // Nokia's Ovi Browser
                ua.match( /S40OviBrowser/ ) ||
+               // MeeGo's browser
+               ua.match( /MeeGo/ ) ||
                // Google Glass browser groks JS but UI is too limited
                ( ua.match( /Glass/ ) && ua.match( /Android/ ) )
        );
index 1a2e0cb..2682ee1 100644 (file)
@@ -84,6 +84,9 @@ $wgAutoloadClasses += array(
        # tests/phpunit/includes/diff
        'FakeDiffOp' => "$testDir/phpunit/includes/diff/FakeDiffOp.php",
 
+       # tests/phpunit/includes/logging
+       'LogFormatterTestCase' => "$testDir/phpunit/includes/logging/LogFormatterTestCase.php",
+
        # tests/phpunit/includes/password
        'PasswordTestCase' => "$testDir/phpunit/includes/password/PasswordTestCase.php",
 
index 00c29ee..a8cffd1 100644 (file)
@@ -80,22 +80,22 @@ class TitleTest extends MediaWikiTestCase {
 
        public static function provideInvalidSecureAndSplit() {
                return array(
-                       array( '' ),
-                       array( ':' ),
-                       array( '__  __' ),
-                       array( '  __  ' ),
+                       array( '', 'title-invalid-empty' ),
+                       array( ':', 'title-invalid-empty' ),
+                       array( '__  __', 'title-invalid-empty' ),
+                       array( '  __  ', 'title-invalid-empty' ),
                        // Bad characters forbidden regardless of wgLegalTitleChars
-                       array( 'A [ B' ),
-                       array( 'A ] B' ),
-                       array( 'A { B' ),
-                       array( 'A } B' ),
-                       array( 'A < B' ),
-                       array( 'A > B' ),
-                       array( 'A | B' ),
+                       array( 'A [ B', 'title-invalid-characters' ),
+                       array( 'A ] B', 'title-invalid-characters' ),
+                       array( 'A { B', 'title-invalid-characters' ),
+                       array( 'A } B', 'title-invalid-characters' ),
+                       array( 'A < B', 'title-invalid-characters' ),
+                       array( 'A > B', 'title-invalid-characters' ),
+                       array( 'A | B', 'title-invalid-characters' ),
                        // URL encoding
-                       array( 'A%20B' ),
-                       array( 'A%23B' ),
-                       array( 'A%2523B' ),
+                       array( 'A%20B', 'title-invalid-characters' ),
+                       array( 'A%23B', 'title-invalid-characters' ),
+                       array( 'A%2523B', 'title-invalid-characters' ),
                        // XML/HTML character entity references
                        // Note: Commented out because they are not marked invalid by the PHP test as
                        // Title::newFromText runs Sanitizer::decodeCharReferencesAndNormalize first.
@@ -103,29 +103,30 @@ class TitleTest extends MediaWikiTestCase {
                        //'A &#233; B',
                        //'A &#x00E9; B',
                        // Subject of NS_TALK does not roundtrip to NS_MAIN
-                       array( 'Talk:File:Example.svg' ),
+                       array( 'Talk:File:Example.svg', 'title-invalid-talk-namespace' ),
                        // Directory navigation
-                       array( '.' ),
-                       array( '..' ),
-                       array( './Sandbox' ),
-                       array( '../Sandbox' ),
-                       array( 'Foo/./Sandbox' ),
-                       array( 'Foo/../Sandbox' ),
-                       array( 'Sandbox/.' ),
-                       array( 'Sandbox/..' ),
+                       array( '.', 'title-invalid-relative' ),
+                       array( '..', 'title-invalid-relative' ),
+                       array( './Sandbox', 'title-invalid-relative' ),
+                       array( '../Sandbox', 'title-invalid-relative' ),
+                       array( 'Foo/./Sandbox', 'title-invalid-relative' ),
+                       array( 'Foo/../Sandbox', 'title-invalid-relative' ),
+                       array( 'Sandbox/.', 'title-invalid-relative' ),
+                       array( 'Sandbox/..', 'title-invalid-relative' ),
                        // Tilde
-                       array( 'A ~~~ Name' ),
-                       array( 'A ~~~~ Signature' ),
-                       array( 'A ~~~~~ Timestamp' ),
-                       array( str_repeat( 'x', 256 ) ),
+                       array( 'A ~~~ Name', 'title-invalid-magic-tilde' ),
+                       array( 'A ~~~~ Signature', 'title-invalid-magic-tilde' ),
+                       array( 'A ~~~~~ Timestamp', 'title-invalid-magic-tilde' ),
+                       // Length
+                       array( str_repeat( 'x', 256 ), 'title-invalid-too-long' ),
                        // Namespace prefix without actual title
-                       array( 'Talk:' ),
-                       array( 'Talk:#' ),
-                       array( 'Category: ' ),
-                       array( 'Category: #bar' ),
+                       array( 'Talk:', 'title-invalid-empty' ),
+                       array( 'Talk:#', 'title-invalid-empty' ),
+                       array( 'Category: ', 'title-invalid-empty' ),
+                       array( 'Category: #bar', 'title-invalid-empty' ),
                        // interwiki prefix
-                       array( 'localtestiw: Talk: # anchor' ),
-                       array( 'localtestiw: Talk:' )
+                       array( 'localtestiw: Talk: # anchor', 'title-invalid-empty' ),
+                       array( 'localtestiw: Talk:', 'title-invalid-empty' )
                );
        }
 
@@ -164,9 +165,14 @@ class TitleTest extends MediaWikiTestCase {
         * @dataProvider provideInvalidSecureAndSplit
         * @note This mainly tests MediaWikiTitleCodec::parseTitle().
         */
-       public function testSecureAndSplitInvalid( $text ) {
+       public function testSecureAndSplitInvalid( $text, $expectedErrorMessage ) {
                $this->secureAndSplitGlobals();
-               $this->assertNull( Title::newFromText( $text ), "Invalid: $text" );
+               try {
+                       Title::newFromTextThrow( $text ); // should throw
+                       $this->assertTrue( false, "Invalid: $text" );
+               } catch ( MalformedTitleException $ex ) {
+                       $this->assertEquals( $expectedErrorMessage, $ex->getErrorMessage(), "Invalid: $text" );
+               }
        }
 
        public static function provideConvertByteClassToUnicodeClass() {
@@ -632,4 +638,26 @@ class TitleTest extends MediaWikiTestCase {
                $title = Title::makeTitle( NS_MAIN, 'Interwiki link', '', 'externalwiki' );
                $this->assertTrue( $title->isAlwaysKnown() );
        }
+
+       /**
+        * @covers Title::exists
+        */
+       public function testExists() {
+               $title = Title::makeTitle( NS_PROJECT, 'New page' );
+               $linkCache = LinkCache::singleton();
+
+               $article = new Article( $title );
+               $page = $article->getPage();
+               $page->doEditContent( new WikitextContent( 'Some [[link]]' ), 'summary' );
+
+               // Tell Title it doesn't know whether it exists
+               $title->mArticleID = -1;
+
+               // Tell the link cache it doesn't exists when it really does
+               $linkCache->clearLink( $title );
+               $linkCache->addBadLinkObj( $title );
+
+               $this->assertEquals( false, $title->exists(), 'exists() should rely on link cache unless GAID_FOR_UPDATE is used' );
+               $this->assertEquals( true, $title->exists( Title::GAID_FOR_UPDATE ), 'exists() should re-query database when GAID_FOR_UPDATE is used' );
+       }
 }
index 0dba183..e39c382 100644 (file)
@@ -76,6 +76,19 @@ class RecentChangeTest extends MediaWikiTestCase {
                        ),
                        $this->user_comment
                );
+               # block/block - legacy
+               $this->assertIRCComment(
+                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                               . $sep . $this->user_comment,
+                       'block', 'block',
+                       array(
+                               'duration',
+                               'flags',
+                       ),
+                       $this->user_comment,
+                       '',
+                       true
+               );
                # block/unblock
                $this->assertIRCComment(
                        $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
@@ -332,7 +345,7 @@ class RecentChangeTest extends MediaWikiTestCase {
         * @param string $msg (optional) A message for PHPUnit :-)
         */
        protected function assertIRCComment( $expected, $type, $action, $params,
-               $comment = null, $msg = ''
+               $comment = null, $msg = '', $legacy = false
        ) {
                $logEntry = new ManualLogEntry( $type, $action );
                $logEntry->setPerformer( $this->user );
@@ -341,6 +354,7 @@ class RecentChangeTest extends MediaWikiTestCase {
                        $logEntry->setComment( $comment );
                }
                $logEntry->setParameters( $params );
+               $logEntry->setLegacy( $legacy );
 
                $formatter = LogFormatter::newFromEntry( $logEntry );
                $formatter->setContext( $this->context );
diff --git a/tests/phpunit/includes/logging/BlockLogFormatterTest.php b/tests/phpunit/includes/logging/BlockLogFormatterTest.php
new file mode 100644 (file)
index 0000000..c7dc641
--- /dev/null
@@ -0,0 +1,372 @@
+<?php
+
+class BlockLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideBlockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Old legacy log
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Old legacy log without flag
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array(),
+                                       ),
+                               ),
+                       ),
+
+                       // Very old legacy log without duration
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array(),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideBlockLogDatabaseRows
+        */
+       public function testBlockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideReblockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Old log
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Older log without flag
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                       )
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of indefinite',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array(),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideReblockLogDatabaseRows
+        */
+       public function testReblockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideUnblockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'unblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'Sysop unblocked Logtestuser',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUnblockLogDatabaseRows
+        */
+       public function testUnblockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressBlockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // legacy log
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressBlockLogDatabaseRows
+        */
+       public function testSuppressBlockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressReblockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressReblockLogDatabaseRows
+        */
+       public function testSuppressReblockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/DeleteLogFormatterTest.php b/tests/phpunit/includes/logging/DeleteLogFormatterTest.php
new file mode 100644 (file)
index 0000000..28e7efa
--- /dev/null
@@ -0,0 +1,527 @@
+<?php
+
+class DeleteLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideDeleteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User deleted page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User deleted page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideDeleteLogDatabaseRows
+        */
+       public function testDeleteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRestoreLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'restore',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User restored page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'restore',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User restored page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRestoreLogDatabaseRows
+        */
+       public function testRestoreLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRevisionLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'revision',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::type' => 'archive',
+                                               '5::ids' => array( '1', '3', '4' ),
+                                               '6::ofield' => '1',
+                                               '7::nfield' => '2',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User changed visibility of 3 revisions on page Page: edit summary '
+                                               . 'hidden and content unhidden',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'revision',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               'archive',
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=2',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User changed visibility of 3 revisions on page Page: edit summary '
+                                               . 'hidden and content unhidden',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRevisionLogDatabaseRows
+        */
+       public function testRevisionLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideEventLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'event',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::ids' => array( '1', '3', '4' ),
+                                               '5::ofield' => '1',
+                                               '6::nfield' => '2',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User changed visibility of 3 log events on Page: edit summary hidden '
+                                               . 'and content unhidden',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'event',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=2',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User changed visibility of 3 log events on Page: edit summary hidden '
+                                               . 'and content unhidden',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideEventLogDatabaseRows
+        */
+       public function testEventLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressRevisionLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'revision',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::type' => 'archive',
+                                               '5::ids' => array( '1', '3', '4' ),
+                                               '6::ofield' => '1',
+                                               '7::nfield' => '10',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User secretly changed visibility of 3 revisions on page Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'revision',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               'archive',
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=10',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User secretly changed visibility of 3 revisions on page Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressRevisionLogDatabaseRows
+        */
+       public function testSuppressRevisionLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressEventLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'event',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::ids' => array( '1', '3', '4' ),
+                                               '5::ofield' => '1',
+                                               '6::nfield' => '10',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User secretly changed visibility of 3 log events on Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'event',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=10',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User secretly changed visibility of 3 log events on Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressEventLogDatabaseRows
+        */
+       public function testSuppressEventLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressDeleteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User suppressed page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User suppressed page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressDeleteLogDatabaseRows
+        */
+       public function testSuppressDeleteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/LogFormatterTestCase.php b/tests/phpunit/includes/logging/LogFormatterTestCase.php
new file mode 100644 (file)
index 0000000..e58711f
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @since 1.26
+ */
+abstract class LogFormatterTestCase extends MediaWikiLangTestCase {
+
+       public function doTestLogFormatter( $row, $extra ) {
+               RequestContext::resetMain();
+               $row = $this->expandDatabaseRow( $row, $this->isLegacy( $extra ) );
+
+               $formatter = LogFormatter::newFromRow( $row );
+
+               $this->assertEquals(
+                       $extra['text'],
+                       self::removeSomeHtml( $formatter->getActionText() ),
+                       'Action text is equal to expected text'
+               );
+
+               $this->assertEquals(
+                       $extra['api'],
+                       self::removeApiMetaData( $formatter->formatParametersForApi() ),
+                       'Api log params is equal to expected array'
+               );
+       }
+
+       protected function isLegacy( $extra ) {
+               return isset( $extra['legacy'] ) && $extra['legacy'];
+       }
+
+       protected function expandDatabaseRow( $data, $legacy ) {
+               return array(
+                       // no log_id because no insert in database
+                       'log_type' => $data['type'],
+                       'log_action' => $data['action'],
+                       'log_timestamp' => isset( $data['timestamp'] ) ? $data['timestamp'] : wfTimestampNow(),
+                       'log_user' => isset( $data['user'] ) ? $data['user'] : 0,
+                       'log_user_text' => isset( $data['user_text'] ) ? $data['user_text'] : 'User',
+                       'log_namespace' => isset( $data['namespace'] ) ? $data['namespace'] : NS_MAIN,
+                       'log_title' => isset( $data['title'] ) ? $data['title'] : 'Main_Page',
+                       'log_page' => isset( $data['page'] ) ? $data['page'] : 0,
+                       'log_comment' => isset( $data['comment'] ) ? $data['comment'] : '',
+                       'log_params' => $legacy
+                               ? LogPage::makeParamBlob( $data['params'] )
+                               : LogEntryBase::makeParamBlob( $data['params'] ),
+                       'log_deleted' => isset( $data['deleted'] ) ? $data['deleted'] : 0,
+               );
+       }
+
+       private static function removeSomeHtml( $html ) {
+               return trim( preg_replace( '/<(a|span)[^>]*>([^<]*)<\/\1>/', '$2', $html ) );
+       }
+
+       private static function removeApiMetaData( $val ) {
+               if ( is_array( $val ) ) {
+                       unset( $val['_element'] );
+                       unset( $val['_type'] );
+                       foreach ( $val as $key => $value ) {
+                               $val[$key] = self::removeApiMetaData( $value );
+                       }
+               }
+               return $val;
+       }
+}
diff --git a/tests/phpunit/includes/logging/MergeLogFormatterTest.php b/tests/phpunit/includes/logging/MergeLogFormatterTest.php
new file mode 100644 (file)
index 0000000..5a0b906
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+class MergeLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideMergeLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'merge',
+                                       'action' => 'merge',
+                                       'comment' => 'Merge comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::dest' => 'NewPage',
+                                               '5::mergepoint' => '20140804160710',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User merged OldPage into NewPage (revisions up to 16:07, 4 August 2014)',
+                                       'api' => array(
+                                               'mergepoint' => '2014-08-04T16:07:10Z',
+                                               'dest_ns' => 0,
+                                               'dest_title' => 'NewPage',
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'merge',
+                                       'action' => 'merge',
+                                       'comment' => 'merge comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '20140804160710',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User merged OldPage into NewPage (revisions up to 16:07, 4 August 2014)',
+                                       'api' => array(
+                                               'mergepoint' => '2014-08-04T16:07:10Z',
+                                               'dest_ns' => 0,
+                                               'dest_title' => 'NewPage',
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMergeLogDatabaseRows
+        */
+       public function testMergeLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/MoveLogFormatterTest.php b/tests/phpunit/includes/logging/MoveLogFormatterTest.php
new file mode 100644 (file)
index 0000000..fdc4b7e
--- /dev/null
@@ -0,0 +1,270 @@
+<?php
+
+class MoveLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideMoveLogDatabaseRows() {
+               return array(
+                       // Current format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment with redirect',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '0',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Current format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '1',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // old format without flag for redirect suppression
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMoveLogDatabaseRows
+        */
+       public function testMoveLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideMoveRedirLogDatabaseRows() {
+               return array(
+                       // Current format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment with redirect',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '0',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage over redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Current format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage over a redirect without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage over redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '1',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage over a redirect without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // old format without flag for redirect suppression
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage over redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMoveRedirLogDatabaseRows
+        */
+       public function testMoveRedirLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/NewUsersLogFormatterTest.php b/tests/phpunit/includes/logging/NewUsersLogFormatterTest.php
new file mode 100644 (file)
index 0000000..13dd839
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+
+/**
+ * @group Database
+ */
+class NewUsersLogFormatterTest extends LogFormatterTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               // Register LogHandler, see $wgNewUserLog in Setup.php
+               $this->mergeMwGlobalArrayValue( 'wgLogActionsHandlers', array(
+                       'newusers/newusers' => 'NewUsersLogFormatter',
+                       'newusers/create' => 'NewUsersLogFormatter',
+                       'newusers/create2' => 'NewUsersLogFormatter',
+                       'newusers/byemail' => 'NewUsersLogFormatter',
+                       'newusers/autocreate' => 'NewUsersLogFormatter',
+               ) );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideNewUsersLogDatabaseRows() {
+               return array(
+                       // Only old logs
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'newusers',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'New user',
+                                       'namespace' => NS_USER,
+                                       'title' => 'New user',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User account New user was created',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideNewUsersLogDatabaseRows
+        */
+       public function testNewUsersLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideCreateLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'create',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'New user',
+                                       'namespace' => NS_USER,
+                                       'title' => 'New user',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account New user was created',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideCreateLogDatabaseRows
+        */
+       public function testCreateLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideCreate2LogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'create2',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'User',
+                                       'namespace' => NS_USER,
+                                       'title' => 'UTSysop',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account UTSysop was created by User',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideCreate2LogDatabaseRows
+        */
+       public function testCreate2LogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideByemailLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'byemail',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'UTSysop',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account UTSysop was created by Sysop and password was sent by email',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideByemailLogDatabaseRows
+        */
+       public function testByemailLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideAutocreateLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'autocreate',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'New user',
+                                       'namespace' => NS_USER,
+                                       'title' => 'New user',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account New user was created automatically',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideAutocreateLogDatabaseRows
+        */
+       public function testAutocreateLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/PageLangLogFormatterTest.php b/tests/phpunit/includes/logging/PageLangLogFormatterTest.php
new file mode 100644 (file)
index 0000000..226e492
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+class PageLangLogFormatterTest extends LogFormatterTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               // Disable cldr extension
+               $this->setMwGlobals( 'wgHooks', array() );
+               // Register LogHandler, see $wgPageLanguageUseDB in Setup.php
+               $this->mergeMwGlobalArrayValue( 'wgLogActionsHandlers', array(
+                       'pagelang/pagelang' => 'PageLangLogFormatter',
+               ) );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function providePageLangLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'pagelang',
+                                       'action' => 'pagelang',
+                                       'comment' => 'page lang comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::oldlanguage' => 'en',
+                                               '5::newlanguage' => 'de[def]',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User changed page language for Page from English (en) to Deutsch (de) [default].',
+                                       'api' => array(
+                                               'oldlanguage' => 'en',
+                                               'newlanguage' => 'de[def]'
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider providePageLangLogDatabaseRows
+        */
+       public function testPageLangLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/PatrolLogFormatterTest.php b/tests/phpunit/includes/logging/PatrolLogFormatterTest.php
new file mode 100644 (file)
index 0000000..6e1c5ef
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+
+class PatrolLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function providePatrolLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::curid' => 2,
+                                               '5::previd' => 1,
+                                               '6::auto' => 0,
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Current format - autopatrol
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::curid' => 2,
+                                               '5::previd' => 1,
+                                               '6::auto' => 1,
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User automatically marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '2',
+                                               '1',
+                                               '0',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format - autopatrol
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '2',
+                                               '1',
+                                               '1',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User automatically marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => true,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider providePatrolLogDatabaseRows
+        */
+       public function testPatrolLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/RightsLogFormatterTest.php b/tests/phpunit/includes/logging/RightsLogFormatterTest.php
new file mode 100644 (file)
index 0000000..e9577f1
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+
+class RightsLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRightsLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => array(
+                                               '4::oldgroups' => array(),
+                                               '5::newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop changed group membership for User:User from (none) to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array(),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => array(
+                                               '',
+                                               'sysop, bureaucrat',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed group membership for User:User from (none) to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array(),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Really old entry
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed group membership for User:User',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRightsLogDatabaseRows
+        */
+       public function testRightsLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideAutopromoteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'autopromote',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Sysop',
+                                       'params' => array(
+                                               '4::oldgroups' => array( 'sysop' ),
+                                               '5::newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop was automatically promoted from administrator to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array( 'sysop' ),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'autopromote',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Sysop',
+                                       'params' => array(
+                                               'sysop',
+                                               'sysop, bureaucrat',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop was automatically promoted from administrator to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array( 'sysop' ),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideAutopromoteLogDatabaseRows
+        */
+       public function testAutopromoteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/UploadLogFormatterTest.php b/tests/phpunit/includes/logging/UploadLogFormatterTest.php
new file mode 100644 (file)
index 0000000..12f5161
--- /dev/null
@@ -0,0 +1,166 @@
+<?php
+
+class UploadLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideUploadLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'upload',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '20150101000000',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '2015-01-01T00:00:00Z',
+                                       ),
+                               ),
+                       ),
+
+                       // Old format without params
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'upload',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUploadLogDatabaseRows
+        */
+       public function testUploadLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideOverwriteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'overwrite',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '20150101000000',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User uploaded a new version of File:File.png',
+                                       'api' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '2015-01-01T00:00:00Z',
+                                       ),
+                               ),
+                       ),
+
+                       // Old format without params
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'overwrite',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User uploaded a new version of File:File.png',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideOverwriteLogDatabaseRows
+        */
+       public function testOverwriteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRevertLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'revert',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '20150101000000',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '2015-01-01T00:00:00Z',
+                                       ),
+                               ),
+                       ),
+
+                       // Old format without params
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'revert',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRevertLogDatabaseRows
+        */
+       public function testRevertLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
index b89526f..4f199bd 100644 (file)
@@ -80,6 +80,7 @@
 
                // Get editToken for local wiki, this should not make
                // a request as it should be retrieved from user.tokens.
+               // This means that this test must run before the #badToken test below.
                api.getToken( 'edit' )
                        .done( function ( token ) {
                                assert.ok( token.length, 'Got a token' );
                assert.equal( this.server.requests.length, 0, 'Requests made' );
        } );
 
+       QUnit.test( 'badToken()', function ( assert ) {
+               QUnit.expect( 2 );
+
+               var api = new mw.Api();
+
+               // Clear the default cached token
+               api.badToken( 'edit' );
+
+               api.getToken( 'edit' )
+                       .done( function ( token ) {
+                               assert.equal( token, '0123abc', 'Got a non-cached token' );
+                       } )
+                       .fail( function ( err ) {
+                               assert.equal( '', err, 'API error' );
+                       } );
+
+               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "edittoken": "0123abc" } }'
+               );
+
+               assert.equal( this.server.requests.length, 1, 'Requests made' );
+       } );
+
        QUnit.test( 'getToken()', function ( assert ) {
                QUnit.expect( 5 );
 
index cdb2624..5329be6 100644 (file)
                        assert.assertTrue( this.timeStamp >= now, 'thisValue has sane timestamp' );
                } );
        } );
+
+       QUnit.test( 'trackUnsubscribe', 1, function ( assert ) {
+               var sequence = [];
+               function unsubber( topic, data ) {
+                       sequence.push( [ topic, data ] );
+               }
+
+               mw.track( 'unsub', { key: 1 } );
+               mw.trackSubscribe( 'unsub', unsubber );
+               mw.track( 'unsub', { key: 2 } );
+               mw.trackUnsubscribe( unsubber );
+               mw.track( 'unsub', { key: 3 } );
+
+               assert.deepEqual( sequence, [
+                       [ 'unsub', { key: 1 } ],
+                       [ 'unsub', { key: 2 } ]
+               ], 'Stop when unsubscribing' );
+       } );
 }( mediaWiki ) );
index 6011961..5ea7a81 100644 (file)
@@ -86,7 +86,9 @@
                        'Mozilla/5.0 (Series40; NokiaX3-02/05.60; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/3.2.0.0.6',
                        'Mozilla/5.0 (Series40; Nokia305/05.92; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/3.7.0.0.11',
                        // Google Glass
-                       'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Glass 1 Build/IMM76L; XE11) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
+                       'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Glass 1 Build/IMM76L; XE11) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
+                       // MeeGo
+                       'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13'
                ],
                // No explicit support for or against these browsers, they're given a shot at Grade A.
                gradeX: [