Merge "API: Overhaul ApiResult, make format=xml not throw, and add json formatversion"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 16 Apr 2015 01:05:51 +0000 (01:05 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 16 Apr 2015 01:05:51 +0000 (01:05 +0000)
306 files changed:
CREDITS
HISTORY
RELEASE-NOTES-1.25
RELEASE-NOTES-1.26 [new file with mode: 0644]
api.php
autoload.php
composer.json
docs/extension.schema.json
includes/Block.php
includes/ChangeTags.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/Html.php
includes/Import.php
includes/MediaWiki.php
includes/Message.php
includes/PHPVersionError.php
includes/Preferences.php
includes/ProtectionForm.php
includes/RevisionList.php
includes/SiteStats.php
includes/Title.php
includes/User.php
includes/WatchedItem.php
includes/actions/Action.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/RevisiondeleteAction.php
includes/actions/SpecialPageAction.php [new file with mode: 0644]
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiEditPage.php
includes/api/ApiHelp.php
includes/api/ApiMain.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiProtect.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiTag.php [new file with mode: 0644]
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/is.json [new file with mode: 0644]
includes/api/i18n/ja.json
includes/api/i18n/ksh.json
includes/api/i18n/lb.json
includes/api/i18n/oc.json
includes/api/i18n/pl.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/ta.json [new file with mode: 0644]
includes/api/i18n/yi.json [new file with mode: 0644]
includes/api/i18n/zh-hans.json
includes/cache/MessageCache.php
includes/changetags/ChangeTagsList.php [new file with mode: 0644]
includes/changetags/ChangeTagsLogItem.php [new file with mode: 0644]
includes/changetags/ChangeTagsLogList.php [new file with mode: 0644]
includes/changetags/ChangeTagsRevisionItem.php [new file with mode: 0644]
includes/changetags/ChangeTagsRevisionList.php [new file with mode: 0644]
includes/db/Database.php
includes/db/DatabasePostgres.php
includes/db/LoadBalancer.php
includes/debug/logger/LegacyLogger.php
includes/debug/logger/LoggerFactory.php
includes/debug/logger/Shims.php
includes/debug/logger/monolog/Shims.php [new file with mode: 0644]
includes/deferred/SiteStatsUpdate.php
includes/deferred/SqlDataUpdate.php
includes/exception/MWExceptionHandler.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/i18n/azb.json [new file with mode: 0644]
includes/installer/i18n/de.json
includes/installer/i18n/el.json
includes/installer/i18n/ko.json
includes/installer/i18n/ksh.json
includes/installer/i18n/lb.json
includes/installer/i18n/ne.json
includes/installer/i18n/pt-br.json
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/JobSpecification.php
includes/libs/BufferingStatsdDataFactory.php
includes/libs/MapCacheLRU.php
includes/logging/DeleteLogFormatter.php
includes/logging/LogEntry.php
includes/logging/LogFormatter.php
includes/logging/TagLogFormatter.php [new file with mode: 0644]
includes/media/SVG.php
includes/mime.info
includes/mime.types
includes/objectcache/RedisBagOStuff.php
includes/page/Article.php
includes/page/CategoryPage.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/profiler/TransactionProfiler.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/revisiondelete/RevDelList.php
includes/skins/Skin.php
includes/skins/SkinFallbackTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/QueryPage.php
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialDiff.php
includes/specials/SpecialEditTags.php [new file with mode: 0644]
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialFilepath.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialLog.php
includes/specials/SpecialMyLanguage.php
includes/specials/SpecialMyRedirectPages.php
includes/specials/SpecialPermanentLink.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialUpload.php
includes/specials/SpecialWhatlinkshere.php
jsduck.json
languages/Language.php
languages/i18n/ace.json
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/bgn.json
languages/i18n/bho.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/cu.json
languages/i18n/cv.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/fy.json
languages/i18n/gl.json
languages/i18n/gsw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/khw.json
languages/i18n/kk-cyrl.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/oc.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/rup.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/si.json
languages/i18n/sl.json
languages/i18n/so.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/th.json
languages/i18n/tr.json
languages/i18n/uk.json
languages/i18n/yi.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/i18n/zh-tw.json
languages/messages/MessagesBgn.php
languages/messages/MessagesCe.php
languages/messages/MessagesFa.php
languages/messages/MessagesLrc.php
maintenance/Maintenance.php
maintenance/archives/patch-il_from_namespace.sql
maintenance/archives/patch-pl_from_namespace.sql
maintenance/archives/patch-tl_from_namespace.sql
maintenance/cleanupUploadStash.php
maintenance/convertExtensionToRegistration.php
maintenance/jsduck/categories.json
maintenance/mergeMessageFileList.php
maintenance/populateBloomCache.php [deleted file]
maintenance/tables.sql
maintenance/update.php
resources/Resources.php
resources/lib/oojs-ui/i18n/cu.json
resources/lib/oojs-ui/i18n/hsb.json
resources/lib/oojs-ui/i18n/or.json
resources/lib/oojs-ui/i18n/zh-hans.json
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg [new file with mode: 0644]
resources/src/jquery/jquery.suggestions.js
resources/src/mediawiki.action/mediawiki.action.history.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js [new file with mode: 0644]
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js [new file with mode: 0644]
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.edittags.css [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.edittags.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.apihelp.css
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.searchSuggest.js
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/actions/ActionTest.php
tests/phpunit/includes/api/query/ApiQueryTestBase.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/deferred/SearchUpdateTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/filerepo/file/LocalFileTest.php
tests/phpunit/includes/json/FormatJsonTest.php
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php
tests/phpunit/includes/specials/SpecialPreferencesTest.php
tests/phpunit/includes/utils/IPTest.php
tests/phpunit/includes/utils/UIDGeneratorTest.php
tests/phpunit/phpunit.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

diff --git a/CREDITS b/CREDITS
index f58fabb..49616a3 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1,6 +1,6 @@
 {{int:version-credits-summary}}
 <!--
-MediaWiki 1.25 is a collaborative project released under the
+MediaWiki 1.26 is a collaborative project released under the
 GNU General Public License v2. We would like to recognize the
 following names for their contribution to the product.
 -->
@@ -56,6 +56,7 @@ following names for their contribution to the product.
 * Marius Hoch
 * Matěj Grabovský
 * Matt Johnston
+* Matthew Flaschen
 * Max Semenik
 * Meno25
 * MinuteElectron
diff --git a/HISTORY b/HISTORY
index 6ea5c2e..0cf6b08 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,4 +1,4 @@
-Change notes from older releases. For current info see RELEASE-NOTES-1.25.
+Change notes from older releases. For current info see RELEASE-NOTES-1.26.
 
 == MediaWiki 1.24 ==
 
index 5ba3968..4f648f5 100644 (file)
@@ -94,8 +94,7 @@ production.
 * Update QUnit from v1.14.0 to v1.16.0.
 * Update Moment.js from v2.8.3 to v2.8.4.
 * Special:Tags now allows for manipulating the list of user-modifiable change
-  tags. Actually modifying the tagging of a revision or log entry is not
-  implemented yet.
+  tags.
 * Added 'managetags' user right and 'ChangeTagCanCreate', 'ChangeTagCanDelete',
   and 'ChangeTagCanCreate' hooks to allow for managing user-modifiable change
   tags.
@@ -119,6 +118,13 @@ production.
   proper, published library, which is now tagged as v1.0.0.
 * A new message (defaulting to blank), 'editnotice-notext', can be shown to users
   when they are editing if no edit notices apply to the page being edited.
+* (T94536) You can now make the sitenotice appear to logged-in users only by
+  editing MediaWiki:Anonnotice and replacing its content with "". Setting it to
+  "-" (default) will continue disable it and fallback to MediaWiki:Sitenotice.
+* Modifying the tagging of a revision or log entry is now available via
+  Special:EditTags, generally accessed via the revision-deletion-like interface
+  on history pages and Special:Log is likely to be more useful.
+* Added 'applychangetags' and 'changetags' user rights.
 
 ==== External libraries ====
 * MediaWiki now requires certain external libraries to be installed. In the past
@@ -181,6 +187,7 @@ production.
   HTML validation.
 * $wgUseTidy is now set when parserTests are run with the tidy option to match
   output on wiki.
+* (T37472) update.php will purge ResourceLoader cache unless --nopurge is passed to it.
 
 === Action API changes in 1.25 ===
 * (T67403) XML tag highlighting is now only performed for formats
@@ -450,6 +457,11 @@ changes to languages because of Bugzilla reports.
   retrievedfrom, thisisdeleted, viewsourcelink, lastmodifiedat, laggedslavemode,
   protect-summary-cascade
 * All BloomCache related code has been removed. This was largely experimental.
+* $wgResourceModuleSkinStyles no longer supports per-module local or remote paths. They
+  can only be set for the entire skin.
+* Removed global function swap(). (deprecated since 1.24)
+* The global importScript and importStylesheet functions, as well as the loadedScripts object,
+  from wikibits.js (deprecated since 1.17) now emit warnings through mw.log.warn when accessed.
 
 == Compatibility ==
 
diff --git a/RELEASE-NOTES-1.26 b/RELEASE-NOTES-1.26
new file mode 100644 (file)
index 0000000..46509be
--- /dev/null
@@ -0,0 +1,97 @@
+Security reminder: If you have PHP's register_globals option set, you must
+turn it off. MediaWiki will not work with it enabled.
+
+== MediaWiki 1.26 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.26 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.26 ===
+
+=== New features in 1.26 ===
+
+==== External libraries ====
+
+=== Bug fixes in 1.26 ===
+
+=== Action API changes in 1.26 ===
+
+=== Action API internal changes in 1.26 ===
+
+=== Languages updated in 1.26 ===
+
+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.
+
+
+=== Other changes in 1.26 ===
+
+
+== Compatibility ==
+
+MediaWiki 1.26 requires PHP 5.3.3 or later. There is experimental support for
+HHVM 3.3.0.
+
+MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
+support for them is somewhat less mature. There is experimental support for
+Oracle and Microsoft SQL Server.
+
+The supported versions are:
+
+* MySQL 5.0.3 or later
+* PostgreSQL 8.3 or later
+* SQLite 3.3.7 or later
+* Oracle 9.0.1 or later
+* Microsoft SQL Server 2005 (9.00.1399)
+
+== Upgrading ==
+
+1.26 has several database changes since 1.25, and will not work without schema
+updates. Note that due to changes to some very large tables like the revision
+table, the schema update may take quite long (minutes on a medium sized site,
+many hours on a large site).
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
+If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
+1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
+with MediaWiki 1.21.
+
+Don't forget to always back up your database before upgrading!
+
+See the file UPGRADE for more detailed upgrade instructions.
+
+For notes on 1.25.x and older releases, see HISTORY.
+
+== Online documentation ==
+
+Documentation for both end-users and site administrators is available on
+MediaWiki.org, and is covered under the GNU Free Documentation License (except
+for pages that explicitly state that their contents are in the public domain):
+
+       https://www.mediawiki.org/wiki/Documentation
+
+== Mailing list ==
+
+A mailing list is available for MediaWiki user support and discussion:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+== IRC help ==
+
+There's usually someone online in #mediawiki on irc.freenode.net.
diff --git a/api.php b/api.php
index 9212747..ea2f60a 100644 (file)
--- a/api.php
+++ b/api.php
@@ -61,7 +61,7 @@ if ( !$wgEnableAPI ) {
 
 // Set a dummy $wgTitle, because $wgTitle == null breaks various things
 // In a perfect world this wouldn't be necessary
-$wgTitle = Title::makeTitle( NS_MAIN, 'API' );
+$wgTitle = Title::makeTitle( NS_SPECIAL, 'Badtitle/dummy title for API calls set in api.php' );
 
 // RequestContext will read from $wgTitle, but it will also whine about it.
 // In a perfect world this wouldn't be necessary either.
index 367793a..93f8e43 100644 (file)
@@ -130,6 +130,7 @@ $wgAutoloadLocalClasses = array(
        'ApiSerializable' => __DIR__ . '/includes/api/ApiSerializable.php',
        'ApiSetNotificationTimestamp' => __DIR__ . '/includes/api/ApiSetNotificationTimestamp.php',
        'ApiStashEdit' => __DIR__ . '/includes/api/ApiStashEdit.php',
+       'ApiTag' => __DIR__ . '/includes/api/ApiTag.php',
        'ApiTokens' => __DIR__ . '/includes/api/ApiTokens.php',
        'ApiUnblock' => __DIR__ . '/includes/api/ApiUnblock.php',
        'ApiUndelete' => __DIR__ . '/includes/api/ApiUndelete.php',
@@ -205,6 +206,11 @@ $wgAutoloadLocalClasses = array(
        'CgzCopyTransaction' => __DIR__ . '/maintenance/storage/recompressTracked.php',
        'ChangePassword' => __DIR__ . '/maintenance/changePassword.php',
        'ChangeTags' => __DIR__ . '/includes/ChangeTags.php',
+       'ChangeTagsList' => __DIR__ . '/includes/changetags/ChangeTagsList.php',
+       'ChangeTagsLogItem' => __DIR__ . '/includes/changetags/ChangeTagsLogItem.php',
+       'ChangeTagsLogList' => __DIR__ . '/includes/changetags/ChangeTagsLogList.php',
+       'ChangeTagsRevisionItem' => __DIR__ . '/includes/changetags/ChangeTagsRevisionItem.php',
+       'ChangeTagsRevisionList' => __DIR__ . '/includes/changetags/ChangeTagsRevisionList.php',
        'ChangesFeed' => __DIR__ . '/includes/changes/ChangesFeed.php',
        'ChangesList' => __DIR__ . '/includes/changes/ChangesList.php',
        'ChangesListSpecialPage' => __DIR__ . '/includes/specialpage/ChangesListSpecialPage.php',
@@ -705,11 +711,11 @@ $wgAutoloadLocalClasses = array(
        'MWLoggerFactory' => __DIR__ . '/includes/debug/logger/Shims.php',
        'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/Shims.php',
        'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/Shims.php',
-       'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/Shims.php',
-       'MWLoggerMonologLegacyFormatter' => __DIR__ . '/includes/debug/logger/Shims.php',
-       'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/Shims.php',
-       'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
-       'MWLoggerMonologSyslogHandler' => __DIR__ . '/includes/debug/logger/Shims.php',
+       'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologLegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologSyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
        'MWLoggerNullSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
        'MWLoggerSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
        'MWMemcached' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
@@ -893,7 +899,6 @@ $wgAutoloadLocalClasses = array(
        'PoolCounter_Stub' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
        'PoolWorkArticleView' => __DIR__ . '/includes/poolcounter/PoolWorkArticleView.php',
        'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php',
-       'PopulateBloomFilter' => __DIR__ . '/maintenance/populateBloomCache.php',
        'PopulateCategory' => __DIR__ . '/maintenance/populateCategory.php',
        'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php',
        'PopulateImageSha1' => __DIR__ . '/maintenance/populateImageSha1.php',
@@ -1110,6 +1115,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialContributions' => __DIR__ . '/includes/specials/SpecialContributions.php',
        'SpecialCreateAccount' => __DIR__ . '/includes/specials/SpecialCreateAccount.php',
        'SpecialDiff' => __DIR__ . '/includes/specials/SpecialDiff.php',
+       'SpecialEditTags' => __DIR__ . '/includes/specials/SpecialEditTags.php',
        'SpecialEditWatchlist' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
        'SpecialEmailUser' => __DIR__ . '/includes/specials/SpecialEmailuser.php',
        'SpecialExpandTemplates' => __DIR__ . '/includes/specials/SpecialExpandTemplates.php',
@@ -1133,6 +1139,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialNewFiles' => __DIR__ . '/includes/specials/SpecialNewimages.php',
        'SpecialNewpages' => __DIR__ . '/includes/specials/SpecialNewpages.php',
        'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
+       'SpecialPageAction' => __DIR__ . '/includes/actions/SpecialPageAction.php',
        'SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
        'SpecialPageLanguage' => __DIR__ . '/includes/specials/SpecialPageLanguage.php',
        'SpecialPagesWithProp' => __DIR__ . '/includes/specials/SpecialPagesWithProp.php',
@@ -1202,6 +1209,7 @@ $wgAutoloadLocalClasses = array(
        'TableCleanupTest' => __DIR__ . '/maintenance/cleanupTable.inc',
        'TableDiffFormatter' => __DIR__ . '/includes/diff/TableDiffFormatter.php',
        'TablePager' => __DIR__ . '/includes/pager/TablePager.php',
+       'TagLogFormatter' => __DIR__ . '/includes/logging/TagLogFormatter.php',
        'TempFSFile' => __DIR__ . '/includes/filebackend/TempFSFile.php',
        'TempFileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
        'TemplateParser' => __DIR__ . '/includes/TemplateParser.php',
index 88ee9cf..d0c8f53 100644 (file)
@@ -20,7 +20,7 @@
                "ext-iconv": "*",
                "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.12",
-               "oojs/oojs-ui": "0.9.7",
+               "oojs/oojs-ui": "0.9.8",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
index dd35d05..d1b982c 100644 (file)
@@ -8,6 +8,10 @@
                        "description": "The extension's canonical name.",
                        "required": true
                },
+               "namemsg": {
+                       "type": "string",
+                       "description": "i18n message key of the extension's name."
+               },
                "type": {
                        "type": "string",
                        "description": "The extension's type, as an index to $wgExtensionCredits.",
                                }
                        }
                },
+               "ResourceModuleSkinStyles": {
+                       "type": "object",
+                       "description": "ResourceLoader modules for custom skin styles"
+               },
                "ResourceLoaderSources": {
                        "type": "object",
                        "description": "ResourceLoader sources to register"
index 4698f45..0e2188d 100644 (file)
@@ -122,11 +122,7 @@ class Block {
                $this->mAuto = $auto;
                $this->isHardblock( !$anonOnly );
                $this->prevents( 'createaccount', $createAccount );
-               if ( $expiry == 'infinity' || $expiry == wfGetDB( DB_SLAVE )->getInfinity() ) {
-                       $this->mExpiry = 'infinity';
-               } else {
-                       $this->mExpiry = wfTimestamp( TS_MW, $expiry );
-               }
+               $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $expiry );
                $this->isAutoblocking( $enableAutoblock );
                $this->mHideName = $hideName;
                $this->prevents( 'sendemail', $blockEmail );
@@ -379,12 +375,7 @@ class Block {
                $this->mParentBlockId = $row->ipb_parent_block_id;
 
                // I wish I didn't have to do this
-               $db = wfGetDB( DB_SLAVE );
-               if ( $row->ipb_expiry == $db->getInfinity() ) {
-                       $this->mExpiry = 'infinity';
-               } else {
-                       $this->mExpiry = wfTimestamp( TS_MW, $row->ipb_expiry );
-               }
+               $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $row->ipb_expiry );
 
                $this->isHardblock( !$row->ipb_anon_only );
                $this->isAutoblocking( $row->ipb_enable_autoblock );
@@ -442,19 +433,33 @@ class Block {
                        $dbw = wfGetDB( DB_MASTER );
                }
 
-               # Don't collide with expired blocks
-               Block::purgeExpired();
+               # Periodic purge via commit hooks
+               if ( mt_rand( 0, 9 ) == 0 ) {
+                       Block::purgeExpired();
+               }
 
                $row = $this->getDatabaseArray();
                $row['ipb_id'] = $dbw->nextSequenceValue( "ipblocks_ipb_id_seq" );
 
-               $dbw->insert(
-                       'ipblocks',
-                       $row,
-                       __METHOD__,
-                       array( 'IGNORE' )
-               );
+               $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) );
                $affected = $dbw->affectedRows();
+
+               # Don't collide with expired blocks.
+               # Do this after trying to insert to avoid pointless gap locks.
+               if ( !$affected ) {
+                       $dbw->delete( 'ipblocks',
+                               array(
+                                       'ipb_address' => $row['ipb_address'],
+                                       'ipb_user' => $row['ipb_user'],
+                                       'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() )
+                               ),
+                               __METHOD__
+                       );
+
+                       $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) );
+                       $affected = $dbw->affectedRows();
+               }
+
                $this->mId = $dbw->insertId();
 
                if ( $affected ) {
index d597d6d..3103edd 100644 (file)
@@ -18,6 +18,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
+ * @ingroup Change tagging
  */
 
 class ChangeTags {
@@ -41,17 +42,13 @@ class ChangeTags {
        public static function formatSummaryRow( $tags, $page ) {
                global $wgLang;
 
-               $tags = explode( ',', $tags );
-
-               // XXX(Ori Livneh, 2014-11-08): remove once bug 73181 is resolved.
-               $tags = array_diff( $tags, array( 'HHVM', '' ) );
-
                if ( !$tags ) {
                        return array( '', array() );
                }
 
                $classes = array();
 
+               $tags = explode( ',', $tags );
                $displayTags = array();
                foreach ( $tags as $tag ) {
                        $displayTags[] = Xml::tags(
@@ -95,21 +92,50 @@ class ChangeTags {
         *
         * @throws MWException
         * @return bool False if no changes are made, otherwise true
-        *
-        * @exception MWException When $rc_id, $rev_id and $log_id are all null
         */
        public static function addTags( $tags, $rc_id = null, $rev_id = null,
                $log_id = null, $params = null
        ) {
-               if ( !is_array( $tags ) ) {
-                       $tags = array( $tags );
-               }
+               $result = self::updateTags( $tags, null, $rc_id, $rev_id, $log_id, $params );
+               return (bool)$result[0];
+       }
+
+       /**
+        * Add and remove tags to/from a change given its rc_id, rev_id and/or log_id,
+        * without verifying that the tags exist or are valid. If a tag is present in
+        * both $tagsToAdd and $tagsToRemove, it will be removed.
+        *
+        * This function should only be used by extensions to manipulate tags they
+        * have registered using the ListDefinedTags hook. When dealing with user
+        * input, call updateTagsWithChecks() instead.
+        *
+        * @param string|array|null $tagsToAdd Tags to add to the change
+        * @param string|array|null $tagsToRemove Tags to remove from the change
+        * @param int|null &$rc_id The rc_id of the change to add the tags to.
+        * Pass a variable whose value is null if the rc_id is not relevant or unknown.
+        * @param int|null &$rev_id The rev_id of the change to add the tags to.
+        * Pass a variable whose value is null if the rev_id is not relevant or unknown.
+        * @param int|null &$log_id The log_id of the change to add the tags to.
+        * Pass a variable whose value is null if the log_id is not relevant or unknown.
+        * @param string $params Params to put in the ct_params field of table
+        * 'change_tag' when adding tags
+        *
+        * @throws MWException When $rc_id, $rev_id and $log_id are all null
+        * @return array Index 0 is an array of tags actually added, index 1 is an
+        * array of tags actually removed, index 2 is an array of tags present on the
+        * revision or log entry before any changes were made
+        *
+        * @since 1.25
+        */
+       public static function updateTags( $tagsToAdd, $tagsToRemove, &$rc_id = null,
+               &$rev_id = null, &$log_id = null, $params = null ) {
 
-               $tags = array_filter( $tags ); // Make sure we're submitting all tags...
+               $tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure we're submitting all tags...
+               $tagsToRemove = array_filter( (array)$tagsToRemove );
 
                if ( !$rc_id && !$rev_id && !$log_id ) {
                        throw new MWException( 'At least one of: RCID, revision ID, and log ID MUST be ' .
-                               'specified when adding a tag to a change!' );
+                               'specified when adding or removing a tag from a change!' );
                }
 
                $dbw = wfGetDB( DB_MASTER );
@@ -148,11 +174,85 @@ class ChangeTags {
                        );
                }
 
+               // update the tag_summary row
+               $prevTags = array();
+               if ( !self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $rc_id, $rev_id,
+                       $log_id, $prevTags ) ) {
+
+                       // nothing to do
+                       return array( array(), array(), $prevTags );
+               }
+
+               // insert a row into change_tag for each new tag
+               if ( count( $tagsToAdd ) ) {
+                       $tagsRows = array();
+                       foreach ( $tagsToAdd as $tag ) {
+                               // Filter so we don't insert NULLs as zero accidentally.
+                               // Keep in mind that $rc_id === null means "I don't care/know about the
+                               // rc_id, just delete $tag on this revision/log entry". It doesn't
+                               // mean "only delete tags on this revision/log WHERE rc_id IS NULL".
+                               $tagsRows[] = array_filter(
+                                       array(
+                                               'ct_tag' => $tag,
+                                               'ct_rc_id' => $rc_id,
+                                               'ct_log_id' => $log_id,
+                                               'ct_rev_id' => $rev_id,
+                                               'ct_params' => $params
+                                       )
+                               );
+                       }
+
+                       $dbw->insert( 'change_tag', $tagsRows, __METHOD__, array( 'IGNORE' ) );
+               }
+
+               // delete from change_tag
+               if ( count( $tagsToRemove ) ) {
+                       foreach ( $tagsToRemove as $tag ) {
+                               $conds = array_filter(
+                                       array(
+                                               'ct_tag' => $tag,
+                                               'ct_rc_id' => $rc_id,
+                                               'ct_log_id' => $log_id,
+                                               'ct_rev_id' => $rev_id
+                                       )
+                               );
+                               $dbw->delete( 'change_tag', $conds, __METHOD__ );
+                       }
+               }
+
+               self::purgeTagUsageCache();
+               return array( $tagsToAdd, $tagsToRemove, $prevTags );
+       }
+
+       /**
+        * Adds or removes a given set of tags to/from the relevant row of the
+        * tag_summary table. Modifies the tagsToAdd and tagsToRemove arrays to
+        * reflect the tags that were actually added and/or removed.
+        *
+        * @param array &$tagsToAdd
+        * @param array &$tagsToRemove If a tag is present in both $tagsToAdd and
+        * $tagsToRemove, it will be removed
+        * @param int|null $rc_id Null if not known or not applicable
+        * @param int|null $rev_id Null if not known or not applicable
+        * @param int|null $log_id Null if not known or not applicable
+        * @param array &$prevTags Optionally outputs a list of the tags that were
+        * in the tag_summary row to begin with
+        * @return bool True if any modifications were made, otherwise false
+        * @since 1.25
+        */
+       protected static function updateTagSummaryRow( &$tagsToAdd, &$tagsToRemove,
+               $rc_id, $rev_id, $log_id, &$prevTags = array() ) {
+
+               $dbw = wfGetDB( DB_MASTER );
+
                $tsConds = array_filter( array(
                        'ts_rc_id' => $rc_id,
                        'ts_rev_id' => $rev_id,
-                       'ts_log_id' => $log_id )
-               );
+                       'ts_log_id' => $log_id
+               ) );
+
+               // Can't both add and remove a tag at the same time...
+               $tagsToAdd = array_diff( $tagsToAdd, $tagsToRemove );
 
                // Update the summary row.
                // $prevTags can be out of date on slaves, especially when addTags is called consecutively,
@@ -160,42 +260,276 @@ class ChangeTags {
                $prevTags = $dbw->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ );
                $prevTags = $prevTags ? $prevTags : '';
                $prevTags = array_filter( explode( ',', $prevTags ) );
-               $newTags = array_unique( array_merge( $prevTags, $tags ) );
+
+               // add tags
+               $tagsToAdd = array_values( array_diff( $tagsToAdd, $prevTags ) );
+               $newTags = array_unique( array_merge( $prevTags, $tagsToAdd ) );
+
+               // remove tags
+               $tagsToRemove = array_values( array_intersect( $tagsToRemove, $newTags ) );
+               $newTags = array_values( array_diff( $newTags, $tagsToRemove ) );
+
                sort( $prevTags );
                sort( $newTags );
-
                if ( $prevTags == $newTags ) {
                        // No change.
                        return false;
                }
 
-               $dbw->replace(
-                       'tag_summary',
-                       array( 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ),
-                       array_filter( array_merge( $tsConds, array( 'ts_tags' => implode( ',', $newTags ) ) ) ),
-                       __METHOD__
-               );
-
-               // Insert the tags rows.
-               $tagsRows = array();
-               foreach ( $tags as $tag ) { // Filter so we don't insert NULLs as zero accidentally.
-                       $tagsRows[] = array_filter(
-                               array(
-                                       'ct_tag' => $tag,
-                                       'ct_rc_id' => $rc_id,
-                                       'ct_log_id' => $log_id,
-                                       'ct_rev_id' => $rev_id,
-                                       'ct_params' => $params
-                               )
+               if ( !$newTags ) {
+                       // no tags left, so delete the row altogether
+                       $dbw->delete( 'tag_summary', $tsConds, __METHOD__ );
+               } else {
+                       $dbw->replace( 'tag_summary',
+                               array( 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ),
+                               array_filter( array_merge( $tsConds, array( 'ts_tags' => implode( ',', $newTags ) ) ) ),
+                               __METHOD__
                        );
                }
 
-               $dbw->insert( 'change_tag', $tagsRows, __METHOD__, array( 'IGNORE' ) );
-
-               self::purgeTagUsageCache();
                return true;
        }
 
+       /**
+        * Helper function to generate a fatal status with a 'not-allowed' type error.
+        *
+        * @param string $msgOne Message key to use in the case of one tag
+        * @param string $msgMulti Message key to use in the case of more than one tag
+        * @param array $tags Restricted tags (passed as $1 into the message, count of
+        * $tags passed as $2)
+        * @return Status
+        * @since 1.25
+        */
+       protected static function restrictedTagError( $msgOne, $msgMulti, $tags ) {
+               $lang = RequestContext::getMain()->getLanguage();
+               $count = count( $tags );
+               return Status::newFatal( ( $count > 1 ) ? $msgMulti : $msgOne,
+                       $lang->commaList( $tags ), $count );
+       }
+
+       /**
+        * Is it OK to allow the user to apply all the specified tags at the same time
+        * as they edit/make the change?
+        *
+        * @param array $tags Tags that you are interested in applying
+        * @param User|null $user User whose permission you wish to check, or null if
+        * you don't care (e.g. maintenance scripts)
+        * @return Status
+        * @since 1.25
+        */
+       public static function canAddTagsAccompanyingChange( array $tags,
+               User $user = null ) {
+
+               if ( !is_null( $user ) && !$user->isAllowed( 'applychangetags' ) ) {
+                       return Status::newFatal( 'tags-apply-no-permission' );
+               }
+
+               // to be applied, a tag has to be explicitly defined
+               // @todo Allow extensions to define tags that can be applied by users...
+               $allowedTags = self::listExplicitlyDefinedTags();
+               $disallowedTags = array_diff( $tags, $allowedTags );
+               if ( $disallowedTags ) {
+                       return self::restrictedTagError( 'tags-apply-not-allowed-one',
+                               'tags-apply-not-allowed-multi', $disallowedTags );
+               }
+
+               return Status::newGood();
+       }
+
+       /**
+        * Adds tags to a given change, checking whether it is allowed first, but
+        * without adding a log entry. Useful for cases where the tag is being added
+        * along with the action that generated the change (e.g. tagging an edit as
+        * it is being made).
+        *
+        * Extensions should not use this function, unless directly handling a user
+        * request to add a particular tag. Normally, extensions should call
+        * ChangeTags::updateTags() instead.
+        *
+        * @param array $tags Tags to apply
+        * @param int|null $rc_id The rc_id of the change to add the tags to
+        * @param int|null $rev_id The rev_id of the change to add the tags to
+        * @param int|null $log_id The log_id of the change to add the tags to
+        * @param string $params Params to put in the ct_params field of table
+        * 'change_tag' when adding tags
+        * @param User $user Who to give credit for the action
+        * @return Status
+        * @since 1.25
+        */
+       public static function addTagsAccompanyingChangeWithChecks( array $tags,
+               $rc_id, $rev_id, $log_id, $params, User $user ) {
+
+               // are we allowed to do this?
+               $result = self::canAddTagsAccompanyingChange( $tags, $user );
+               if ( !$result->isOK() ) {
+                       $result->value = null;
+                       return $result;
+               }
+
+               // do it!
+               self::addTags( $tagsToAdd, $rc_id, $rev_id, $log_id, $params );
+
+               return Status::newGood( true );
+       }
+
+       /**
+        * Is it OK to allow the user to adds and remove the given tags tags to/from a
+        * change?
+        *
+        * @param array $tagsToAdd Tags that you are interested in adding
+        * @param array $tagsToRemove Tags that you are interested in removing
+        * @param User|null $user User whose permission you wish to check, or null if
+        * you don't care (e.g. maintenance scripts)
+        * @return Status
+        * @since 1.25
+        */
+       public static function canUpdateTags( array $tagsToAdd, array $tagsToRemove,
+               User $user = null ) {
+
+               if ( !is_null( $user ) && !$user->isAllowed( 'changetags' ) ) {
+                       return Status::newFatal( 'tags-update-no-permission' );
+               }
+
+               // to be added, a tag has to be explicitly defined
+               // @todo Allow extensions to define tags that can be applied by users...
+               $explicitlyDefinedTags = self::listExplicitlyDefinedTags();
+               $diff = array_diff( $tagsToAdd, $explicitlyDefinedTags );
+               if ( $diff ) {
+                       return self::restrictedTagError( 'tags-update-add-not-allowed-one',
+                               'tags-update-add-not-allowed-multi', $diff );
+               }
+
+               // to be removed, a tag has to be either explicitly defined or not defined
+               // at all
+               $definedTags = self::listDefinedTags();
+               $diff = array_diff( $tagsToRemove, $explicitlyDefinedTags );
+               if ( $diff ) {
+                       $intersect = array_intersect( $diff, $definedTags );
+                       if ( $intersect ) {
+                               return self::restrictedTagError( 'tags-update-remove-not-allowed-one',
+                                       'tags-update-remove-not-allowed-multi', $intersect );
+                       }
+               }
+
+               return Status::newGood();
+       }
+
+       /**
+        * Adds and/or removes tags to/from a given change, checking whether it is
+        * allowed first, and adding a log entry afterwards.
+        *
+        * Includes a call to ChangeTag::canUpdateTags(), so your code doesn't need
+        * to do that. However, it doesn't check whether the *_id parameters are a
+        * valid combination. That is up to you to enforce. See ApiTag::execute() for
+        * an example.
+        *
+        * @param array|null $tagsToAdd If none, pass array() or null
+        * @param array|null $tagsToRemove If none, pass array() or null
+        * @param int|null $rc_id The rc_id of the change to add the tags to
+        * @param int|null $rev_id The rev_id of the change to add the tags to
+        * @param int|null $log_id The log_id of the change to add the tags to
+        * @param string $params Params to put in the ct_params field of table
+        * 'change_tag' when adding tags
+        * @param string $reason Comment for the log
+        * @param User $user Who to give credit for the action
+        * @return Status If successful, the value of this Status object will be an
+        * object (stdClass) with the following fields:
+        *  - logId: the ID of the added log entry, or null if no log entry was added
+        *    (i.e. no operation was performed)
+        *  - addedTags: an array containing the tags that were actually added
+        *  - removedTags: an array containing the tags that were actually removed
+        * @since 1.25
+        */
+       public static function updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
+               $rc_id, $rev_id, $log_id, $params, $reason, User $user ) {
+
+               if ( is_null( $tagsToAdd ) ) {
+                       $tagsToAdd = array();
+               }
+               if ( is_null( $tagsToRemove ) ) {
+                       $tagsToRemove = array();
+               }
+               if ( !$tagsToAdd && !$tagsToRemove ) {
+                       // no-op, don't bother
+                       return Status::newGood( (object)array(
+                               'logId' => null,
+                               'addedTags' => array(),
+                               'removedTags' => array(),
+                       ) );
+               }
+
+               // are we allowed to do this?
+               $result = self::canUpdateTags( $tagsToAdd, $tagsToRemove, $user );
+               if ( !$result->isOK() ) {
+                       $result->value = null;
+                       return $result;
+               }
+
+               // basic rate limiting
+               if ( $user->pingLimiter( 'changetag' ) ) {
+                       return Status::newFatal( 'actionthrottledtext' );
+               }
+
+               // do it!
+               list( $tagsAdded, $tagsRemoved, $initialTags ) = self::updateTags( $tagsToAdd,
+                       $tagsToRemove, $rc_id, $rev_id, $log_id, $params );
+               if ( !$tagsAdded && !$tagsRemoved ) {
+                       // no-op, don't log it
+                       return Status::newGood( (object)array(
+                               'logId' => null,
+                               'addedTags' => array(),
+                               'removedTags' => array(),
+                       ) );
+               }
+
+               // log it
+               $logEntry = new ManualLogEntry( 'tag', 'update' );
+               $logEntry->setPerformer( $user );
+               $logEntry->setComment( $reason );
+
+               // find the appropriate target page
+               if ( $rev_id ) {
+                       $rev = Revision::newFromId( $rev_id );
+                       if ( $rev ) {
+                               $title = $rev->getTitle();
+                               $logEntry->setTarget( $rev->getTitle() );
+                       }
+               } elseif ( $log_id ) {
+                       // This function is from revision deletion logic and has nothing to do with
+                       // change tags, but it appears to be the only other place in core where we
+                       // perform logged actions on log items.
+                       $logEntry->setTarget( RevDelLogList::suggestTarget( 0, array( $log_id ) ) );
+               }
+
+               if ( !$logEntry->getTarget() ) {
+                       // target is required, so we have to set something
+                       $logEntry->setTarget( SpecialPage::getTitleFor( 'Tags' ) );
+               }
+
+               $logParams = array(
+                       '4::revid' => $rev_id,
+                       '5::logid' => $log_id,
+                       '6:list:tagsAdded' => $tagsAdded,
+                       '7:number:tagsAddedCount' => count( $tagsAdded ),
+                       '8:list:tagsRemoved' => $tagsRemoved,
+                       '9:number:tagsRemovedCount' => count( $tagsRemoved ),
+                       'initialTags' => $initialTags,
+               );
+               $logEntry->setParameters( $logParams );
+               $logEntry->setRelations( array( 'Tag' => array_merge( $tagsAdded, $tagsRemoved ) ) );
+
+               $dbw = wfGetDB( DB_MASTER );
+               $logId = $logEntry->insert( $dbw );
+               // Only send this to UDP, not RC, similar to patrol events
+               $logEntry->publish( $logId, 'udp' );
+
+               return Status::newGood( (object)array(
+                       'logId' => $logId,
+                       'addedTags' => $tagsAdded,
+                       'removedTags' => $tagsRemoved,
+               ) );
+       }
+
        /**
         * Applies all tags-related changes to a query.
         * Handles selecting tags, and filtering.
@@ -348,8 +682,8 @@ class ChangeTags {
         * it was deleted.
         * @since 1.25
         */
-       protected static function logTagAction( $action, $tag, $reason, User $user,
-               $tagCount = null ) {
+       protected static function logTagManagementAction( $action, $tag, $reason,
+               User $user, $tagCount = null ) {
 
                $dbw = wfGetDB( DB_MASTER );
 
@@ -432,7 +766,7 @@ class ChangeTags {
                self::defineTag( $tag );
 
                // log it
-               $logId = self::logTagAction( 'activate', $tag, $reason, $user );
+               $logId = self::logTagManagementAction( 'activate', $tag, $reason, $user );
                return Status::newGood( $logId );
        }
 
@@ -487,7 +821,7 @@ class ChangeTags {
                self::undefineTag( $tag );
 
                // log it
-               $logId = self::logTagAction( 'deactivate', $tag, $reason, $user );
+               $logId = self::logTagManagementAction( 'deactivate', $tag, $reason, $user );
                return Status::newGood( $logId );
        }
 
@@ -562,7 +896,7 @@ class ChangeTags {
                self::defineTag( $tag );
 
                // log it
-               $logId = self::logTagAction( 'create', $tag, $reason, $user );
+               $logId = self::logTagManagementAction( 'create', $tag, $reason, $user );
                return Status::newGood( $logId );
        }
 
@@ -580,7 +914,7 @@ class ChangeTags {
         */
        public static function deleteTagEverywhere( $tag ) {
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
+               $dbw->startAtomic( __METHOD__ );
 
                // delete from valid_tag
                self::undefineTag( $tag );
@@ -591,44 +925,17 @@ class ChangeTags {
                        array( 'ct_tag' => $tag ),
                        __METHOD__ );
                foreach ( $result as $row ) {
-                       if ( $row->ct_rev_id ) {
-                               $field = 'ts_rev_id';
-                               $fieldValue = $row->ct_rev_id;
-                       } elseif ( $row->ct_log_id ) {
-                               $field = 'ts_log_id';
-                               $fieldValue = $row->ct_log_id;
-                       } elseif ( $row->ct_rc_id ) {
-                               $field = 'ts_rc_id';
-                               $fieldValue = $row->ct_rc_id;
-                       } else {
-                               // don't know what's up; just skip it
-                               continue;
-                       }
-
                        // remove the tag from the relevant row of tag_summary
-                       $tsResult = $dbw->selectField( 'tag_summary',
-                               'ts_tags',
-                               array( $field => $fieldValue ),
-                               __METHOD__ );
-                       $tsValues = explode( ',', $tsResult );
-                       $tsValues = array_values( array_diff( $tsValues, array( $tag ) ) );
-                       if ( !$tsValues ) {
-                               // no tags left, so delete the row altogether
-                               $dbw->delete( 'tag_summary',
-                                       array( $field => $fieldValue ),
-                                       __METHOD__ );
-                       } else {
-                               $dbw->update( 'tag_summary',
-                                       array( 'ts_tags' => implode( ',', $tsValues ) ),
-                                       array( $field => $fieldValue ),
-                                       __METHOD__ );
-                       }
+                       $tagsToAdd = array();
+                       $tagsToRemove = array( $tag );
+                       self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $row->ct_rc_id,
+                               $row->ct_rev_id, $row->ct_log_id );
                }
 
                // delete from change_tag
                $dbw->delete( 'change_tag', array( 'ct_tag' => $tag ), __METHOD__ );
 
-               $dbw->commit( __METHOD__ );
+               $dbw->endAtomic( __METHOD__ );
 
                // give extensions a chance
                $status = Status::newGood();
@@ -718,7 +1025,7 @@ class ChangeTags {
                }
 
                // log it
-               $logId = self::logTagAction( 'delete', $tag, $reason, $user, $tagUsage[$tag] );
+               $logId = self::logTagManagementAction( 'delete', $tag, $reason, $user, $tagUsage[$tag] );
                $deleteResult->value = $logId;
                return $deleteResult;
        }
index fe67adf..d5801cb 100644 (file)
@@ -75,7 +75,7 @@ $wgConfigRegistry = array(
  * MediaWiki version number
  * @since 1.2
  */
-$wgVersion = '1.25alpha';
+$wgVersion = '1.26alpha';
 
 /**
  * Name of the site. It must be changed in LocalSettings.php
@@ -1855,13 +1855,6 @@ $wgDBerrorLog = false;
  */
 $wgDBerrorLogTZ = false;
 
-/**
- * Scale load balancer polling time so that under overload conditions, the
- * database server receives a SHOW STATUS query at an average interval of this
- * many microseconds
- */
-$wgDBAvgStatusPoll = 2000;
-
 /**
  * Set to true to engage MySQL 4.1/5.0 charset-related features;
  * for now will just cause sending of 'SET NAMES=utf8' on connect.
@@ -3338,8 +3331,6 @@ $wgResourceModules = array();
  *
  * As with $wgResourceModules, paths default to being relative to the MediaWiki root.
  * You should always provide a localBasePath and remoteBasePath (or remoteExtPath/remoteSkinPath).
- * Either for all skin styles at once (first example below) or for each module separately (second
- * example).
  *
  * @par Example:
  * @code
@@ -3349,19 +3340,6 @@ $wgResourceModules = array();
  *     'remoteSkinPath' => 'Foo',
  *     'localBasePath' => __DIR__,
  *   );
- *
- *   $wgResourceModuleSkinStyles['foo'] = array(
- *     'bar' => array(
- *       'bar.css',
- *       'remoteSkinPath' => 'Foo',
- *       'localBasePath' => __DIR__,
- *     ),
- *     'quux' => array(
- *       'quux.css',
- *       'remoteSkinPath' => 'Foo',
- *       'localBasePath' => __DIR__,
- *     ),
- *   );
  * @endcode
  */
 $wgResourceModuleSkinStyles = array();
@@ -4578,6 +4556,8 @@ $wgGroupPermissions['user']['reupload-shared'] = true;
 $wgGroupPermissions['user']['minoredit'] = true;
 $wgGroupPermissions['user']['purge'] = true; // can use ?action=purge without clicking "ok"
 $wgGroupPermissions['user']['sendemail'] = true;
+$wgGroupPermissions['user']['applychangetags'] = true;
+$wgGroupPermissions['user']['changetags'] = true;
 
 // Implicit group for accounts that pass $wgAutoConfirmAge
 $wgGroupPermissions['autoconfirmed']['autoconfirmed'] = true;
@@ -5058,7 +5038,11 @@ $wgRateLimits = array(
                'newbie' => null,
                'ip' => null,
                'subnet' => null,
-       )
+       ),
+       'changetag' => array( // adding or removing change tags
+               'user' => null,
+               'newbie' => null,
+       ),
 );
 
 /**
@@ -6588,6 +6572,7 @@ $wgLogTypes = array(
        'patrol',
        'merge',
        'suppress',
+       'tag',
        'managetags',
 );
 
@@ -6625,7 +6610,8 @@ $wgLogRestrictions = array(
  * for the link text.
  */
 $wgFilterLogTypes = array(
-       'patrol' => true
+       'patrol' => true,
+       'tag' => true,
 );
 
 /**
@@ -6710,6 +6696,7 @@ $wgLogActionsHandlers = array(
        'upload/overwrite' => 'LogFormatter',
        'upload/revert' => 'LogFormatter',
        'merge/merge' => 'MergeLogFormatter',
+       'tag/update' => 'TagLogFormatter',
        'managetags/create' => 'LogFormatter',
        'managetags/delete' => 'LogFormatter',
        'managetags/activate' => 'LogFormatter',
@@ -6787,6 +6774,7 @@ $wgActions = array(
        'credits' => true,
        'delete' => true,
        'edit' => true,
+       'editchangetags' => 'SpecialPageAction',
        'history' => true,
        'info' => true,
        'markpatrolled' => true,
@@ -6795,7 +6783,7 @@ $wgActions = array(
        'raw' => true,
        'render' => true,
        'revert' => true,
-       'revisiondelete' => true,
+       'revisiondelete' => 'SpecialPageAction',
        'rollback' => true,
        'submit' => true,
        'unprotect' => true,
index c9263da..262471e 100644 (file)
  * @defgroup Constants MediaWiki constants
  */
 
-/**
- * Version constants for the benefit of extensions
- */
-define( 'MW_SPECIALPAGE_VERSION', 2 );
-
 /**@{
  * Database related constants
  */
index e113426..8d27eac 100644 (file)
@@ -156,6 +156,12 @@ class EditPage {
         */
        const AS_SELF_REDIRECT = 236;
 
+       /**
+        * Status: an error relating to change tagging. Look at the message key for
+        * more details
+        */
+       const AS_CHANGE_TAG_ERROR = 237;
+
        /**
         * Status: can't parse content
         */
@@ -351,6 +357,9 @@ class EditPage {
        /** @var null|string */
        public $contentFormat = null;
 
+       /** @var null|array */
+       public $changeTags = null;
+
        # Placeholders for text injection by hooks (must be HTML)
        # extensions should take care to _append_ to the present value
 
@@ -844,6 +853,14 @@ class EditPage {
 
                        $this->allowBlankArticle = $request->getBool( 'wpIgnoreBlankArticle' );
                        $this->allowSelfRedirect = $request->getBool( 'wpIgnoreSelfRedirect' );
+
+                       $changeTags = $request->getVal( 'wpChangeTags' );
+                       if ( is_null( $changeTags ) || $changeTags === '' ) {
+                               $this->changeTags = array();
+                       } else {
+                               $this->changeTags = array_filter( array_map( 'trim', explode( ',',
+                                       $changeTags ) ) );
+                       }
                } else {
                        # Not a posted form? Start with nothing.
                        wfDebug( __METHOD__ . ": Not a posted form.\n" );
@@ -1642,6 +1659,15 @@ class EditPage {
                        return $status;
                }
 
+               if ( $this->changeTags ) {
+                       $changeTagsStatus = ChangeTags::canAddTagsAccompanyingChange(
+                               $this->changeTags, $wgUser );
+                       if ( !$changeTagsStatus->isOK() ) {
+                               $changeTagsStatus->value = self::AS_CHANGE_TAG_ERROR;
+                               return $changeTagsStatus;
+                       }
+               }
+
                if ( wfReadOnly() ) {
                        $status->fatal( 'readonlytext' );
                        $status->value = self::AS_READ_ONLY_PAGE;
@@ -1915,7 +1941,18 @@ class EditPage {
                        $wgUser->pingLimiter( 'linkpurge' );
                }
                $result['redirect'] = $content->isRedirect();
+
                $this->updateWatchlist();
+
+               if ( $this->changeTags && isset( $doEditStatus->value['revision'] ) ) {
+                       // If a revision was created, apply any change tags that were requested
+                       ChangeTags::addTags(
+                               $this->changeTags,
+                               isset( $doEditStatus->value['rc'] ) ? $doEditStatus->value['rc']->mAttribs['rc_id'] : null,
+                               $doEditStatus->value['revision']->getId()
+                       );
+               }
+
                return $status;
        }
 
index 7c4ebc2..3931be3 100644 (file)
@@ -1344,6 +1344,12 @@ function wfReadOnlyReason() {
                } else {
                        $wgReadOnly = false;
                }
+               // Callers use this method to be aware that data presented to a user
+               // may be very stale and thus allowing submissions can be problematic.
+               if ( $wgReadOnly === false && wfGetLB()->getLaggedSlaveMode() ) {
+                       $wgReadOnly = 'The database has been automatically locked ' .
+                               'while the slave database servers catch up to the master';
+               }
        }
 
        return $wgReadOnly;
@@ -2467,20 +2473,6 @@ function wfIsHHVM() {
        return defined( 'HHVM_VERSION' );
 }
 
-/**
- * Swap two variables
- *
- * @deprecated since 1.24
- * @param mixed $x
- * @param mixed $y
- */
-function swap( &$x, &$y ) {
-       wfDeprecated( __FUNCTION__, '1.24' );
-       $z = $x;
-       $x = $y;
-       $y = $z;
-}
-
 /**
  * Tries to get the system directory for temporary files. First
  * $wgTmpDirectory is checked, and then the TMPDIR, TMP, and TEMP
@@ -2529,7 +2521,7 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
                wfDebug( "$caller: called wfMkdirParents($dir)\n" );
        }
 
-       if ( strval( $dir ) === '' || ( file_exists( $dir ) && is_dir( $dir ) ) ) {
+       if ( strval( $dir ) === '' || is_dir( $dir ) ) {
                return true;
        }
 
index d312e0a..6907245 100644 (file)
@@ -109,7 +109,7 @@ class Html {
         * @see https://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return array $attrs A modified attribute array
         */
-       public static function buttonAttributes( $attrs, $modifiers = array() ) {
+       public static function buttonAttributes( array $attrs, array $modifiers = array() ) {
                global $wgUseMediaWikiUIEverywhere;
                if ( $wgUseMediaWikiUIEverywhere ) {
                        if ( isset( $attrs['class'] ) ) {
@@ -137,11 +137,8 @@ class Html {
         * @param array $attrs An attribute array.
         * @return array $attrs A modified attribute array
         */
-       public static function getTextInputAttributes( $attrs ) {
+       public static function getTextInputAttributes( array $attrs ) {
                global $wgUseMediaWikiUIEverywhere;
-               if ( !$attrs ) {
-                       $attrs = array();
-               }
                if ( $wgUseMediaWikiUIEverywhere ) {
                        if ( isset( $attrs['class'] ) ) {
                                if ( is_array( $attrs['class'] ) ) {
@@ -169,7 +166,7 @@ class Html {
         * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return string Raw HTML
         */
-       public static function linkButton( $contents, $attrs, $modifiers = array() ) {
+       public static function linkButton( $contents, array $attrs, array $modifiers = array() ) {
                return self::element( 'a',
                        self::buttonAttributes( $attrs, $modifiers ),
                        $contents
@@ -189,7 +186,7 @@ class Html {
         * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return string Raw HTML
         */
-       public static function submitButton( $contents, $attrs, $modifiers = array() ) {
+       public static function submitButton( $contents, array $attrs, array $modifiers = array() ) {
                $attrs['type'] = 'submit';
                $attrs['value'] = $contents;
                return self::element( 'input', self::buttonAttributes( $attrs, $modifiers ) );
@@ -337,8 +334,7 @@ class Html {
         *   further documentation.
         * @return array An array of attributes functionally identical to $attribs
         */
-       private static function dropDefaults( $element, $attribs ) {
-
+       private static function dropDefaults( $element, array $attribs ) {
                // Whenever altering this array, please provide a covering test case
                // in HtmlTest::provideElementsWithAttributesHavingDefaultValues
                static $attribDefaults = array(
@@ -485,11 +481,10 @@ class Html {
         * @return string HTML fragment that goes between element name and '>'
         *   (starting with a space if at least one attribute is output)
         */
-       public static function expandAttributes( $attribs ) {
+       public static function expandAttributes( array $attribs ) {
                global $wgWellFormedXml;
 
                $ret = '';
-               $attribs = (array)$attribs;
                foreach ( $attribs as $key => $value ) {
                        // Support intuitive array( 'checked' => true/false ) form
                        if ( $value === false || is_null( $value ) ) {
@@ -714,7 +709,7 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function input( $name, $value = '', $type = 'text', $attribs = array() ) {
+       public static function input( $name, $value = '', $type = 'text', array $attribs = array() ) {
                $attribs['type'] = $type;
                $attribs['value'] = $value;
                $attribs['name'] = $name;
@@ -794,7 +789,7 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function hidden( $name, $value, $attribs = array() ) {
+       public static function hidden( $name, $value, array $attribs = array() ) {
                return self::input( $name, $value, 'hidden', $attribs );
        }
 
@@ -810,7 +805,7 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function textarea( $name, $value = '', $attribs = array() ) {
+       public static function textarea( $name, $value = '', array $attribs = array() ) {
                $attribs['name'] = $name;
 
                if ( substr( $value, 0, 1 ) == "\n" ) {
@@ -937,7 +932,7 @@ class Html {
         *   attributes, passed to Html::element() of html tag.
         * @return string Raw HTML
         */
-       public static function htmlHeader( $attribs = array() ) {
+       public static function htmlHeader( array $attribs = array() ) {
                $ret = '';
 
                global $wgHtml5Version, $wgMimeType, $wgXhtmlNamespaces;
@@ -1047,7 +1042,7 @@ class Html {
         * @param string[] $urls
         * @return string
         */
-       static function srcSet( $urls ) {
+       static function srcSet( array $urls ) {
                $candidates = array();
                foreach ( $urls as $density => $url ) {
                        // Cast density to float to strip 'x'.
index 06355ed..1e0f8e2 100644 (file)
@@ -49,8 +49,13 @@ class WikiImporter {
         * Creates an ImportXMLReader drawing from the source provided
         * @param ImportSource $source
         * @param Config $config
+        * @throws Exception
         */
        function __construct( ImportSource $source, Config $config = null ) {
+               if ( !class_exists( 'XMLReader' ) ) {
+                       throw new Exception( 'Import requires PHP to have been compiled with libxml support' );
+               }
+
                $this->reader = new XMLReader();
                if ( !$config ) {
                        wfDeprecated( __METHOD__ . ' without a Config instance', '1.25' );
@@ -62,11 +67,22 @@ class WikiImporter {
                        stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
                }
                $id = UploadSourceAdapter::registerSource( $source );
+
+               // Enable the entity loader, as it is needed for loading external URLs via
+               // XMLReader::open (T86036)
+               $oldDisable = libxml_disable_entity_loader( false );
                if ( defined( 'LIBXML_PARSEHUGE' ) ) {
-                       $this->reader->open( "uploadsource://$id", null, LIBXML_PARSEHUGE );
+                       $status = $this->reader->open( "uploadsource://$id", null, LIBXML_PARSEHUGE );
                } else {
-                       $this->reader->open( "uploadsource://$id" );
+                       $status = $this->reader->open( "uploadsource://$id" );
                }
+               if ( !$status ) {
+                       $error = libxml_get_last_error();
+                       libxml_disable_entity_loader( $oldDisable );
+                       throw new MWException( 'Encountered an internal error while initializing WikiImporter object: ' .
+                               $error->message );
+               }
+               libxml_disable_entity_loader( $oldDisable );
 
                // Default callbacks
                $this->setPageCallback( array( $this, 'beforeImportPage' ) );
@@ -528,10 +544,10 @@ class WikiImporter {
                $oldDisable = libxml_disable_entity_loader( true );
                $this->reader->read();
 
-               if ( $this->reader->name != 'mediawiki' ) {
+               if ( $this->reader->localName != 'mediawiki' ) {
                        libxml_disable_entity_loader( $oldDisable );
                        throw new MWException( "Expected <mediawiki> tag, got " .
-                               $this->reader->name );
+                               $this->reader->localName );
                }
                $this->debug( "<mediawiki> tag is correct." );
 
@@ -542,7 +558,7 @@ class WikiImporter {
                $rethrow = null;
                try {
                        while ( $keepReading ) {
-                               $tag = $this->reader->name;
+                               $tag = $this->reader->localName;
                                $type = $this->reader->nodeType;
 
                                if ( !Hooks::run( 'ImportHandleToplevelXMLTag', array( $this ) ) ) {
@@ -593,11 +609,11 @@ class WikiImporter {
 
                while ( $this->reader->read() ) {
                        if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
-                                       $this->reader->name == 'siteinfo' ) {
+                                       $this->reader->localName == 'siteinfo' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( $tag == 'namespace' ) {
                                $this->foreignNamespaces[ $this->nodeAttribute( 'key' ) ] =
@@ -621,11 +637,11 @@ class WikiImporter {
 
                while ( $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'logitem' ) {
+                                       $this->reader->localName == 'logitem' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( !Hooks::run( 'ImportHandleLogItemXMLTag', array(
                                $this, $logInfo
@@ -685,13 +701,13 @@ class WikiImporter {
 
                while ( $skip ? $this->reader->next() : $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'page' ) {
+                                       $this->reader->localName == 'page' ) {
                                break;
                        }
 
                        $skip = false;
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( $badTitle ) {
                                // The title is invalid, bail out of this page
@@ -758,11 +774,11 @@ class WikiImporter {
 
                while ( $skip ? $this->reader->next() : $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'revision' ) {
+                                       $this->reader->localName == 'revision' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( !Hooks::run( 'ImportHandleRevisionXMLTag', array(
                                $this, $pageInfo, $revisionInfo
@@ -850,11 +866,11 @@ class WikiImporter {
 
                while ( $skip ? $this->reader->next() : $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'upload' ) {
+                                       $this->reader->localName == 'upload' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( !Hooks::run( 'ImportHandleUploadXMLTag', array(
                                $this, $pageInfo
@@ -948,11 +964,11 @@ class WikiImporter {
 
                while ( $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'contributor' ) {
+                                       $this->reader->localName == 'contributor' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( in_array( $tag, $fields ) ) {
                                $info[$tag] = $this->nodeContents();
index 68d03c8..ec2f40f 100644 (file)
@@ -464,7 +464,9 @@ class MediaWiki {
                // Send Ajax requests to the Ajax dispatcher.
                if ( $this->config->get( 'UseAjax' ) && $request->getVal( 'action' ) === 'ajax' ) {
                        // Set a dummy title, because $wgTitle == null might break things
-                       $title = Title::makeTitle( NS_MAIN, 'AJAX' );
+                       $title = Title::makeTitle( NS_SPECIAL, 'Badtitle/performing an AJAX call in '
+                               . __METHOD__
+                       );
                        $this->context->setTitle( $title );
                        $wgTitle = $title;
 
@@ -529,7 +531,7 @@ class MediaWiki {
                                        wfDebugLog( 'RedirectedPosts', "Redirected from HTTP to HTTPS: $oldUrl" );
                                }
                                // Setup dummy Title, otherwise OutputPage::redirect will fail
-                               $title = Title::newFromText( NS_MAIN, 'REDIR' );
+                               $title = Title::newFromText( 'REDIR', NS_MAIN );
                                $this->context->setTitle( $title );
                                $output = $this->context->getOutput();
                                // Since we only do this redir to change proto, always send a vary header
index 134af0e..4935e33 100644 (file)
@@ -597,7 +597,7 @@ class Message implements MessageSpecifier {
                if ( $lang instanceof Language || $lang instanceof StubUserLang ) {
                        $this->language = $lang;
                } elseif ( is_string( $lang ) ) {
-                       if ( $this->language->getCode() != $lang ) {
+                       if ( !$this->language instanceof Language || $this->language->getCode() != $lang ) {
                                $this->language = Language::factory( $lang );
                        }
                } else {
index b061990..3a2f9f8 100644 (file)
@@ -39,7 +39,7 @@
  * version are hardcoded here
  */
 function wfPHPVersionError( $type ) {
-       $mwVersion = '1.25';
+       $mwVersion = '1.26';
        $minimumVersionPHP = '5.3.3';
 
        $phpVersion = PHP_VERSION;
index 40c3a2b..74a917d 100644 (file)
@@ -657,8 +657,9 @@ class Preferences {
                $now = wfTimestampNow();
                $lang = $context->getLanguage();
                $nowlocal = Xml::element( 'span', array( 'id' => 'wpLocalTime' ),
-                       $lang->time( $now, true ) );
-               $nowserver = $lang->time( $now, false ) .
+                       $lang->userTime( $now, $user ) );
+               $nowserver = $lang->userTime( $now, $user,
+                               array( 'format' => false, 'timecorrection' => false ) ) .
                        Html::hidden( 'wpServerTime', (int)substr( $now, 8, 2 ) * 60 + (int)substr( $now, 10, 2 ) );
 
                $defaultPreferences['nowserver'] = array(
index 1219da5..c546de7 100644 (file)
@@ -157,7 +157,7 @@ class ProtectionForm {
                        $value = $this->mExpirySelection[$action];
                }
                if ( wfIsInfinity( $value ) ) {
-                       $time = wfGetDB( DB_SLAVE )->getInfinity();
+                       $time = 'infinity';
                } else {
                        $unix = strtotime( $value );
 
index d10b541..1cb43f7 100644 (file)
@@ -317,7 +317,7 @@ class RevisionItem extends RevisionItemBase {
        }
 
        public function getAuthorNameField() {
-               return 'user_name'; // see Revision::selectUserFields()
+               return 'rev_user_text';
        }
 
        public function canView() {
@@ -334,15 +334,19 @@ class RevisionItem extends RevisionItemBase {
 
        /**
         * Get the HTML link to the revision text.
-        * Overridden by RevDelArchiveItem.
+        * @todo Essentially a copy of RevDelRevisionItem::getRevisionLink. That class
+        * should inherit from this one, and implement an appropriate interface instead
+        * of extending RevDelItem
         * @return string
         */
        protected function getRevisionLink() {
-               $date = $this->list->getLanguage()->timeanddate( $this->revision->getTimestamp(), true );
+               $date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
+                       $this->revision->getTimestamp(), $this->list->getUser() ) );
+
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $date;
                }
-               return Linker::link(
+               return Linker::linkKnown(
                        $this->list->title,
                        $date,
                        array(),
@@ -355,30 +359,34 @@ class RevisionItem extends RevisionItemBase {
 
        /**
         * Get the HTML link to the diff.
-        * Overridden by RevDelArchiveItem
+        * @todo Essentially a copy of RevDelRevisionItem::getDiffLink. That class
+        * should inherit from this one, and implement an appropriate interface instead
+        * of extending RevDelItem
         * @return string
         */
        protected function getDiffLink() {
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $this->context->msg( 'diff' )->escaped();
                } else {
-                       return Linker::link(
+                       return Linker::linkKnown(
                                        $this->list->title,
-                                       $this->context->msg( 'diff' )->escaped(),
+                                       $this->list->msg( 'diff' )->escaped(),
                                        array(),
                                        array(
                                                'diff' => $this->revision->getId(),
                                                'oldid' => 'prev',
                                                'unhide' => 1
-                                       ),
-                                       array(
-                                               'known',
-                                               'noclasses'
                                        )
                                );
                }
        }
 
+       /**
+        * @todo Essentially a copy of RevDelRevisionItem::getHTML. That class
+        * should inherit from this one, and implement an appropriate interface instead
+        * of extending RevDelItem
+        * @return string
+        */
        public function getHTML() {
                $difflink = $this->context->msg( 'parentheses' )
                        ->rawParams( $this->getDiffLink() )->escaped();
index 15c18f3..81172a1 100644 (file)
@@ -68,6 +68,8 @@ class SiteStats {
         * @return bool|ResultWrapper
         */
        static function loadAndLazyInit() {
+               global $wgMiserMode;
+
                wfDebug( __METHOD__ . ": reading site_stats from slave\n" );
                $row = self::doLoad( wfGetDB( DB_SLAVE ) );
 
@@ -77,7 +79,7 @@ class SiteStats {
                        $row = self::doLoad( wfGetDB( DB_MASTER ) );
                }
 
-               if ( !self::isSane( $row ) ) {
+               if ( !$wgMiserMode && !self::isSane( $row ) ) {
                        // Normally the site_stats table is initialized at install time.
                        // Some manual construction scenarios may leave the table empty or
                        // broken, however, for instance when importing from a dump into a
index 9868b2e..b0df15f 100644 (file)
@@ -96,7 +96,7 @@ class Title {
        /** @var array Array of groups allowed to edit this article */
        public $mRestrictions = array();
 
-       /** @var bool */
+       /** @var string|bool */
        protected $mOldRestrictions = false;
 
        /** @var bool Cascade restrictions on this page to included templates and images? */
@@ -260,8 +260,10 @@ class Title {
         * @return Title|null Title or null on an error.
         */
        public static function newFromText( $text, $defaultNamespace = NS_MAIN ) {
-               if ( !is_string( $text ) ) {
-                       throw new InvalidArgumentException( 'Title::newFromText given something that isn\'t a string' );
+               if ( is_object( $text ) ) {
+                       throw new InvalidArgumentException( '$text must be a string.' );
+               } elseif ( !is_string( $text ) ) {
+                       wfWarn( __METHOD__ . ': $text must be a string. This will throw an InvalidArgumentException in future.', 2 );
                }
 
                $cache = self::getTitleCache();
@@ -449,6 +451,9 @@ class Title {
                        if ( isset( $row->page_lang ) ) {
                                $this->mDbPageLanguage = (string)$row->page_lang;
                        }
+                       if ( isset( $row->page_restrictions ) ) {
+                               $this->mOldRestrictions = $row->page_restrictions;
+                       }
                } else { // page not found
                        $this->mArticleID = 0;
                        $this->mLength = 0;
@@ -2572,6 +2577,7 @@ class Title {
                                if ( $row['permission'] == 'autoconfirmed' ) {
                                        $row['permission'] = 'editsemiprotected'; // B/C
                                }
+                               $row['expiry'] = $dbr->decodeExpiry( $row['expiry'] );
                        }
                        $this->mTitleProtection = $row;
                }
@@ -2709,7 +2715,6 @@ class Title {
         *        false.
         */
        public function getCascadeProtectionSources( $getPages = true ) {
-               global $wgContLang;
                $pagerestrictions = array();
 
                if ( $this->mCascadeSources !== null && $getPages ) {
@@ -2752,7 +2757,7 @@ class Title {
                $now = wfTimestampNow();
 
                foreach ( $res as $row ) {
-                       $expiry = $wgContLang->formatExpiry( $row->pr_expiry, TS_MW );
+                       $expiry = $dbr->decodeExpiry( $row->pr_expiry );
                        if ( $expiry > $now ) {
                                if ( $getPages ) {
                                        $page_id = $row->pr_page;
@@ -2885,28 +2890,29 @@ class Title {
         *   restrictions from page table (pre 1.10)
         */
        public function loadRestrictionsFromRows( $rows, $oldFashionedRestrictions = null ) {
-               global $wgContLang;
                $dbr = wfGetDB( DB_SLAVE );
 
                $restrictionTypes = $this->getRestrictionTypes();
 
                foreach ( $restrictionTypes as $type ) {
                        $this->mRestrictions[$type] = array();
-                       $this->mRestrictionsExpiry[$type] = $wgContLang->formatExpiry( '', TS_MW );
+                       $this->mRestrictionsExpiry[$type] = 'infinity';
                }
 
                $this->mCascadeRestriction = false;
 
                # Backwards-compatibility: also load the restrictions from the page record (old format).
+               if ( $oldFashionedRestrictions !== null ) {
+                       $this->mOldRestrictions = $oldFashionedRestrictions;
+               }
 
-               if ( $oldFashionedRestrictions === null ) {
-                       $oldFashionedRestrictions = $dbr->selectField( 'page', 'page_restrictions',
+               if ( $this->mOldRestrictions === false ) {
+                       $this->mOldRestrictions = $dbr->selectField( 'page', 'page_restrictions',
                                array( 'page_id' => $this->getArticleID() ), __METHOD__ );
                }
 
-               if ( $oldFashionedRestrictions != '' ) {
-
-                       foreach ( explode( ':', trim( $oldFashionedRestrictions ) ) as $restrict ) {
+               if ( $this->mOldRestrictions != '' ) {
+                       foreach ( explode( ':', trim( $this->mOldRestrictions ) ) as $restrict ) {
                                $temp = explode( '=', trim( $restrict ) );
                                if ( count( $temp ) == 1 ) {
                                        // old old format should be treated as edit/move restriction
@@ -2919,9 +2925,6 @@ class Title {
                                        }
                                }
                        }
-
-                       $this->mOldRestrictions = true;
-
                }
 
                if ( count( $rows ) ) {
@@ -2938,7 +2941,7 @@ class Title {
 
                                // This code should be refactored, now that it's being used more generally,
                                // But I don't really see any harm in leaving it in Block for now -werdna
-                               $expiry = $wgContLang->formatExpiry( $row->pr_expiry, TS_MW );
+                               $expiry = $dbr->decodeExpiry( $row->pr_expiry );
 
                                // Only apply the restrictions if they haven't expired!
                                if ( !$expiry || $expiry > $now ) {
@@ -2960,11 +2963,9 @@ class Title {
         *   restrictions from page table (pre 1.10)
         */
        public function loadRestrictions( $oldFashionedRestrictions = null ) {
-               global $wgContLang;
                if ( !$this->mRestrictionsLoaded ) {
+                       $dbr = wfGetDB( DB_SLAVE );
                        if ( $this->exists() ) {
-                               $dbr = wfGetDB( DB_SLAVE );
-
                                $res = $dbr->select(
                                        'page_restrictions',
                                        array( 'pr_type', 'pr_expiry', 'pr_level', 'pr_cascade' ),
@@ -2978,7 +2979,7 @@ class Title {
 
                                if ( $title_protection ) {
                                        $now = wfTimestampNow();
-                                       $expiry = $wgContLang->formatExpiry( $title_protection['expiry'], TS_MW );
+                                       $expiry = $dbr->decodeExpiry( $title_protection['expiry'] );
 
                                        if ( !$expiry || $expiry > $now ) {
                                                // Apply the restrictions
@@ -2988,7 +2989,7 @@ class Title {
                                                $this->mTitleProtection = false;
                                        }
                                } else {
-                                       $this->mRestrictionsExpiry['create'] = $wgContLang->formatExpiry( '', TS_MW );
+                                       $this->mRestrictionsExpiry['create'] = 'infinity';
                                }
                                $this->mRestrictionsLoaded = true;
                        }
@@ -3272,6 +3273,7 @@ class Title {
                }
                $this->mRestrictionsLoaded = false;
                $this->mRestrictions = array();
+               $this->mOldRestrictions = false;
                $this->mRedirect = null;
                $this->mLength = -1;
                $this->mLatestID = false;
@@ -3418,8 +3420,6 @@ class Title {
         * @return array Array of Title objects linking here
         */
        public function getLinksFrom( $options = array(), $table = 'pagelinks', $prefix = 'pl' ) {
-               global $wgContentHandlerUseDB;
-
                $id = $this->getArticleID();
 
                # If the page doesn't exist; there can't be any link from this page
@@ -3433,49 +3433,36 @@ class Title {
                        $db = wfGetDB( DB_SLAVE );
                }
 
-               $namespaceFiled = "{$prefix}_namespace";
-               $titleField = "{$prefix}_title";
-
-               $fields = array(
-                       $namespaceFiled,
-                       $titleField,
-                       'page_id',
-                       'page_len',
-                       'page_is_redirect',
-                       'page_latest'
-               );
-
-               if ( $wgContentHandlerUseDB ) {
-                       $fields[] = 'page_content_model';
-               }
+               $blNamespace = "{$prefix}_namespace";
+               $blTitle = "{$prefix}_title";
 
                $res = $db->select(
                        array( $table, 'page' ),
-                       $fields,
+                       array_merge(
+                               array( $blNamespace, $blTitle ),
+                               WikiPage::selectFields()
+                       ),
                        array( "{$prefix}_from" => $id ),
                        __METHOD__,
                        $options,
                        array( 'page' => array(
                                'LEFT JOIN',
-                               array( "page_namespace=$namespaceFiled", "page_title=$titleField" )
+                               array( "page_namespace=$blNamespace", "page_title=$blTitle" )
                        ) )
                );
 
                $retVal = array();
-               if ( $res->numRows() ) {
-                       $linkCache = LinkCache::singleton();
-                       foreach ( $res as $row ) {
-                               $titleObj = Title::makeTitle( $row->$namespaceFiled, $row->$titleField );
-                               if ( $titleObj ) {
-                                       if ( $row->page_id ) {
-                                               $linkCache->addGoodLinkObjFromRow( $titleObj, $row );
-                                       } else {
-                                               $linkCache->addBadLinkObj( $titleObj );
-                                       }
-                                       $retVal[] = $titleObj;
-                               }
+               $linkCache = LinkCache::singleton();
+               foreach ( $res as $row ) {
+                       if ( $row->page_id ) {
+                               $titleObj = Title::newFromRow( $row );
+                       } else {
+                               $titleObj = Title::makeTitle( $row->$blNamespace, $row->$blTitle );
+                               $linkCache->addBadLinkObj( $titleObj );
                        }
+                       $retVal[] = $titleObj;
                }
+
                return $retVal;
        }
 
@@ -4422,35 +4409,29 @@ class Title {
         * @return string|null
         */
        public function getNotificationTimestamp( $user = null ) {
-               global $wgUser, $wgShowUpdatedMarker;
+               global $wgUser;
+
                // Assume current user if none given
                if ( !$user ) {
                        $user = $wgUser;
                }
                // Check cache first
                $uid = $user->getId();
+               if ( !$uid ) {
+                       return false;
+               }
                // avoid isset here, as it'll return false for null entries
                if ( array_key_exists( $uid, $this->mNotificationTimestamp ) ) {
                        return $this->mNotificationTimestamp[$uid];
                }
-               if ( !$uid || !$wgShowUpdatedMarker || !$user->isAllowed( 'viewmywatchlist' ) ) {
-                       $this->mNotificationTimestamp[$uid] = false;
-                       return $this->mNotificationTimestamp[$uid];
-               }
                // Don't cache too much!
                if ( count( $this->mNotificationTimestamp ) >= self::CACHE_MAX ) {
                        $this->mNotificationTimestamp = array();
                }
-               $dbr = wfGetDB( DB_SLAVE );
-               $this->mNotificationTimestamp[$uid] = $dbr->selectField( 'watchlist',
-                       'wl_notificationtimestamp',
-                       array(
-                               'wl_user' => $user->getId(),
-                               'wl_namespace' => $this->getNamespace(),
-                               'wl_title' => $this->getDBkey(),
-                       ),
-                       __METHOD__
-               );
+
+               $watchedItem = WatchedItem::fromUserTitle( $user, $this );
+               $this->mNotificationTimestamp[$uid] = $watchedItem->getNotificationTimestamp();
+
                return $this->mNotificationTimestamp[$uid];
        }
 
index 322f8af..3c2939f 100644 (file)
@@ -102,6 +102,7 @@ class User implements IDBAccessObject {
         */
        protected static $mCoreRights = array(
                'apihighlimits',
+               'applychangetags',
                'autoconfirmed',
                'autopatrol',
                'bigdelete',
@@ -109,6 +110,7 @@ class User implements IDBAccessObject {
                'blockemail',
                'bot',
                'browsearchive',
+               'changetags',
                'createaccount',
                'createpage',
                'createtalk',
@@ -452,7 +454,7 @@ class User implements IDBAccessObject {
                // The cache needs good consistency due to its high TTL, so the user
                // should have been loaded from the master to avoid lag amplification.
                if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
-                       wfWarn( "Cannot save slave-loaded User object data to cache." );
+                       wfWarn( "Cannot cache slave-loaded User object with ID '{$this->mId}'." );
                        return;
                }
 
@@ -1371,10 +1373,10 @@ class User implements IDBAccessObject {
         */
        private function loadGroups() {
                if ( is_null( $this->mGroups ) ) {
-                       $dbr = ( $this->queryFlagsUsed & self::READ_LATEST )
+                       $db = ( $this->queryFlagsUsed & self::READ_LATEST )
                                ? wfGetDB( DB_MASTER )
                                : wfGetDB( DB_SLAVE );
-                       $res = $dbr->select( 'user_groups',
+                       $res = $db->select( 'user_groups',
                                array( 'ug_group' ),
                                array( 'ug_user' => $this->mId ),
                                __METHOD__ );
@@ -1395,10 +1397,17 @@ class User implements IDBAccessObject {
         * @since 1.24
         */
        private function loadPasswords() {
-               if ( $this->getId() !== 0 && ( $this->mPassword === null || $this->mNewpassword === null ) ) {
-                       $this->loadFromRow( wfGetDB( DB_MASTER )->selectRow(
+               if ( $this->getId() !== 0 &&
+                       ( $this->mPassword === null || $this->mNewpassword === null )
+               ) {
+                       $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+                               ? wfGetDB( DB_MASTER )
+                               : wfGetDB( DB_SLAVE );
+
+                       $this->loadFromRow( $db->selectRow(
                                'user',
-                               array( 'user_password', 'user_newpassword', 'user_newpass_time', 'user_password_expires' ),
+                               array( 'user_password', 'user_newpassword',
+                                       'user_newpass_time', 'user_password_expires' ),
                                array( 'user_id' => $this->getId() ),
                                __METHOD__
                        ) );
@@ -2195,6 +2204,8 @@ class User implements IDBAccessObject {
         *   page. Ignored if null or !$val.
         */
        public function setNewtalk( $val, $curRev = null ) {
+               global $wgMemc;
+
                if ( wfReadOnly() ) {
                        return;
                }
@@ -2209,7 +2220,6 @@ class User implements IDBAccessObject {
                        $field = 'user_id';
                        $id = $this->getId();
                }
-               global $wgMemc;
 
                if ( $val ) {
                        $changed = $this->updateNewtalk( $field, $id, $curRev );
@@ -2233,9 +2243,15 @@ class User implements IDBAccessObject {
         * user_touched field when we update things.
         * @return string Timestamp in TS_MW format
         */
-       private static function newTouchedTimestamp() {
+       private function newTouchedTimestamp() {
                global $wgClockSkewFudge;
-               return wfTimestamp( TS_MW, time() + $wgClockSkewFudge );
+
+               $time = wfTimestamp( TS_MW, time() + $wgClockSkewFudge );
+               if ( $this->mTouched && $time <= $this->mTouched ) {
+                       $time = wfTimestamp( TS_MW, wfTimestamp( TS_UNIX, $this->mTouched ) + 1 );
+               }
+
+               return $time;
        }
 
        /**
@@ -2255,37 +2271,13 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Immediately touch the user data cache for this account.
-        * Updates user_touched field, and removes account data from memcached
-        * for reload on the next hit.
+        * Immediately touch the user data cache for this account
+        *
+        * Calls touch() and removes account data from memcached
         */
        public function invalidateCache() {
-               if ( wfReadOnly() ) {
-                       return;
-               }
-               $this->load();
-               if ( $this->mId ) {
-                       $this->mTouched = self::newTouchedTimestamp();
-
-                       $dbw = wfGetDB( DB_MASTER );
-                       $userid = $this->mId;
-                       $touched = $this->mTouched;
-                       $method = __METHOD__;
-                       $dbw->onTransactionIdle( function () use ( $dbw, $userid, $touched, $method ) {
-                               // Prevent contention slams by checking user_touched first
-                               $encTouched = $dbw->addQuotes( $dbw->timestamp( $touched ) );
-                               $needsPurge = $dbw->selectField( 'user', '1',
-                                       array( 'user_id' => $userid, 'user_touched < ' . $encTouched ) );
-                               if ( $needsPurge ) {
-                                       $dbw->update( 'user',
-                                               array( 'user_touched' => $dbw->timestamp( $touched ) ),
-                                               array( 'user_id' => $userid, 'user_touched < ' . $encTouched ),
-                                               $method
-                                       );
-                               }
-                       } );
-                       $this->clearSharedCache();
-               }
+               $this->touch();
+               $this->clearSharedCache();
        }
 
        /**
@@ -2307,7 +2299,7 @@ class User implements IDBAccessObject {
 
                if ( $this->mId ) {
                        $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
-                       $timestamp = self::newTouchedTimestamp();
+                       $timestamp = $this->newTouchedTimestamp();
                        $wgMemc->set( $key, $timestamp );
                        $this->mQuickTouched = $timestamp;
                }
@@ -3044,10 +3036,10 @@ class User implements IDBAccessObject {
                $this->load();
 
                if ( is_null( $this->mFormerGroups ) ) {
-                       $dbr = ( $this->queryFlagsUsed & self::READ_LATEST )
+                       $db = ( $this->queryFlagsUsed & self::READ_LATEST )
                                ? wfGetDB( DB_MASTER )
                                : wfGetDB( DB_SLAVE );
-                       $res = $dbr->select( 'user_former_groups',
+                       $res = $db->select( 'user_former_groups',
                                array( 'ufg_group' ),
                                array( 'ufg_user' => $this->mId ),
                                __METHOD__ );
@@ -3586,22 +3578,33 @@ class User implements IDBAccessObject {
                global $wgAuth;
 
                if ( wfReadOnly() ) {
-                       return; // @TODO: caller should deal with this instead!
+                       // @TODO: caller should deal with this instead!
+                       // This should really just be an exception.
+                       MWExceptionHandler::logException( new DBExpectedError(
+                               null,
+                               "Could not update user with ID '{$this->mId}'; DB is read-only."
+                       ) );
+                       return;
                }
 
                $this->load();
                $this->loadPasswords();
                if ( 0 == $this->mId ) {
-                       return;
+                       return; // anon
                }
 
                // This method is for updating existing users, so the user should
                // have been loaded from the master to begin with to avoid problems.
                if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
-                       wfWarn( "Attempting to save slave-loaded User object data." );
+                       wfWarn( "Attempting to save slave-loaded User object with ID '{$this->mId}'." );
                }
 
-               $this->mTouched = self::newTouchedTimestamp();
+               // Get a new user_touched that is higher than the old one.
+               // This will be used for a CAS check as a last-resort safety
+               // check against race conditions and slave lag.
+               $oldTouched = $this->mTouched;
+               $this->mTouched = $this->newTouchedTimestamp();
+
                if ( !$wgAuth->allowSetLocalPassword() ) {
                        $this->mPassword = self::getPasswordFactory()->newFromCiphertext( null );
                }
@@ -3622,10 +3625,22 @@ class User implements IDBAccessObject {
                                'user_email_token_expires' => $dbw->timestampOrNull( $this->mEmailTokenExpires ),
                                'user_password_expires' => $dbw->timestampOrNull( $this->mPasswordExpires ),
                        ), array( /* WHERE */
-                               'user_id' => $this->mId
+                               'user_id' => $this->mId,
+                               'user_touched' => $dbw->timestamp( $oldTouched ) // CAS check
                        ), __METHOD__
                );
 
+               if ( !$dbw->affectedRows() ) {
+                       // User was changed in the meantime or loaded with stale data
+                       MWExceptionHandler::logException( new MWException(
+                               "CAS update failed on user_touched for user ID '{$this->mId}'."
+                       ) );
+                       // Maybe the problem was a missed cache update; clear it to be safe
+                       $this->clearSharedCache();
+
+                       return;
+               }
+
                $this->saveOptions();
 
                Hooks::run( 'UserSaveSettings', array( $this ) );
@@ -3694,7 +3709,7 @@ class User implements IDBAccessObject {
                        'user_token' => strval( $user->mToken ),
                        'user_registration' => $dbw->timestamp( $user->mRegistration ),
                        'user_editcount' => 0,
-                       'user_touched' => $dbw->timestamp( self::newTouchedTimestamp() ),
+                       'user_touched' => $dbw->timestamp( $user->newTouchedTimestamp() ),
                );
                foreach ( $params as $name => $value ) {
                        $fields["user_$name"] = $value;
@@ -3741,7 +3756,7 @@ class User implements IDBAccessObject {
                        $this->setToken(); // init token
                }
 
-               $this->mTouched = self::newTouchedTimestamp();
+               $this->mTouched = $this->newTouchedTimestamp();
 
                $dbw = wfGetDB( DB_MASTER );
                $inWrite = $dbw->writesOrCallbacksPending();
@@ -4724,38 +4739,51 @@ class User implements IDBAccessObject {
                return $groups;
        }
 
+       /**
+        * Deferred version of incEditCountImmediate()
+        */
+       public function incEditCount() {
+               $that = $this;
+               wfGetDB( DB_MASTER )->onTransactionPreCommitOrIdle( function() use ( $that ) {
+                       $that->incEditCountImmediate();
+               } );
+       }
+
        /**
         * Increment the user's edit-count field.
         * Will have no effect for anonymous users.
+        * @since 1.26
         */
-       public function incEditCount() {
-               if ( !$this->isAnon() ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->update(
-                               'user',
-                               array( 'user_editcount=user_editcount+1' ),
-                               array( 'user_id' => $this->getId() ),
-                               __METHOD__
-                       );
+       public function incEditCountImmediate() {
+               if ( $this->isAnon() ) {
+                       return;
+               }
 
-                       // Lazy initialization check...
-                       if ( $dbw->affectedRows() == 0 ) {
-                               // Now here's a goddamn hack...
-                               $dbr = wfGetDB( DB_SLAVE );
-                               if ( $dbr !== $dbw ) {
-                                       // If we actually have a slave server, the count is
-                                       // at least one behind because the current transaction
-                                       // has not been committed and replicated.
-                                       $this->initEditCount( 1 );
-                               } else {
-                                       // But if DB_SLAVE is selecting the master, then the
-                                       // count we just read includes the revision that was
-                                       // just added in the working transaction.
-                                       $this->initEditCount();
-                               }
+               $dbw = wfGetDB( DB_MASTER );
+               // No rows will be "affected" if user_editcount is NULL
+               $dbw->update(
+                       'user',
+                       array( 'user_editcount=user_editcount+1' ),
+                       array( 'user_id' => $this->getId() ),
+                       __METHOD__
+               );
+               // Lazy initialization check...
+               if ( $dbw->affectedRows() == 0 ) {
+                       // Now here's a goddamn hack...
+                       $dbr = wfGetDB( DB_SLAVE );
+                       if ( $dbr !== $dbw ) {
+                               // If we actually have a slave server, the count is
+                               // at least one behind because the current transaction
+                               // has not been committed and replicated.
+                               $this->initEditCount( 1 );
+                       } else {
+                               // But if DB_SLAVE is selecting the master, then the
+                               // count we just read includes the revision that was
+                               // just added in the working transaction.
+                               $this->initEditCount();
                        }
                }
-               // edit count in user cache too
+               // Edit count in user cache too
                $this->invalidateCache();
        }
 
index 4d22692..524e701 100644 (file)
@@ -240,11 +240,7 @@ class WatchedItem {
                        } else {
                                // Oldid given and isn't the latest; update the timestamp.
                                // This will result in no further notification emails being sent!
-                               $dbr = wfGetDB( DB_SLAVE );
-                               $notificationTimestamp = $dbr->selectField(
-                                       'revision', 'rev_timestamp',
-                                       array( 'rev_page' => $title->getArticleID(), 'rev_id' => $oldid )
-                               );
+                               $notificationTimestamp = Revision::getTimestampFromId( $title, $oldid );
                                // We need to go one second to the future because of various strict comparisons
                                // throughout the codebase
                                $ts = new MWTimestamp( $notificationTimestamp );
index 8d11d90..aca4363 100644 (file)
@@ -132,6 +132,8 @@ abstract class Action {
                if ( $actionName === 'historysubmit' ) {
                        if ( $request->getBool( 'revisiondelete' ) ) {
                                $actionName = 'revisiondelete';
+                       } elseif ( $request->getBool( 'editchangetags' ) ) {
+                               $actionName = 'editchangetags';
                        } else {
                                $actionName = 'view';
                        }
index 7189372..6693178 100644 (file)
@@ -432,8 +432,13 @@ class HistoryPager extends ReverseChronologicalPager {
                        $latest = ( $this->counter == 1 && $this->mIsFirst );
                        $firstInList = $this->counter == 1;
                        $this->counter++;
-                       $s = $this->historyLine( $this->lastRow, $row,
-                               $this->getTitle()->getNotificationTimestamp( $this->getUser() ), $latest, $firstInList );
+
+                       $notifTimestamp = $this->getConfig()->get( 'ShowUpdatedMarker' )
+                               ? $this->getTitle()->getNotificationTimestamp( $this->getUser() )
+                               : false;
+
+                       $s = $this->historyLine(
+                               $this->lastRow, $row, $notifTimestamp, $latest, $firstInList );
                } else {
                        $s = '';
                }
@@ -479,6 +484,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        'id' => 'mw-history-compare' ) ) . "\n";
                $s .= Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n";
                $s .= Html::hidden( 'action', 'historysubmit' ) . "\n";
+               $s .= Html::hidden( 'type', 'revision' ) . "\n";
 
                // Button container stored in $this->buttons for re-use in getEndBody()
                $this->buttons = '<div>';
@@ -489,8 +495,17 @@ class HistoryPager extends ReverseChronologicalPager {
                        $attrs
                ) . "\n";
 
-               if ( $this->getUser()->isAllowed( 'deleterevision' ) ) {
-                       $this->buttons .= $this->getRevisionButton( 'revisiondelete', 'showhideselectedversions' );
+               $user = $this->getUser();
+               $actionButtons = '';
+               if ( $user->isAllowed( 'deleterevision' ) ) {
+                       $actionButtons .= $this->getRevisionButton( 'revisiondelete', 'showhideselectedversions' );
+               }
+               if ( $user->isAllowed( 'changetags' ) ) {
+                       $actionButtons .= $this->getRevisionButton( 'editchangetags', 'history-edit-tags' );
+               }
+               if ( $actionButtons ) {
+                       $this->buttons .= Xml::tags( 'div', array( 'class' =>
+                               'mw-history-revisionactions' ), $actionButtons );
                }
                $this->buttons .= '</div>';
 
@@ -532,8 +547,13 @@ class HistoryPager extends ReverseChronologicalPager {
                                $next = $this->mPastTheEndRow;
                        }
                        $this->counter++;
-                       $s = $this->historyLine( $this->lastRow, $next,
-                               $this->getTitle()->getNotificationTimestamp( $this->getUser() ), $latest, $firstInList );
+
+                       $notifTimestamp = $this->getConfig()->get( 'ShowUpdatedMarker' )
+                               ? $this->getTitle()->getNotificationTimestamp( $this->getUser() )
+                               : false;
+
+                       $s = $this->historyLine(
+                               $this->lastRow, $next, $notifTimestamp, $latest, $firstInList );
                } else {
                        $s = '';
                }
@@ -606,11 +626,15 @@ class HistoryPager extends ReverseChronologicalPager {
 
                $del = '';
                $user = $this->getUser();
-               // Show checkboxes for each revision
-               if ( $user->isAllowed( 'deleterevision' ) ) {
+               $canRevDelete = $user->isAllowed( 'deleterevision' );
+               $canModifyTags = $user->isAllowed( 'changetags' );
+               // Show checkboxes for each revision, to allow for revision deletion and
+               // change tags
+               if ( $canRevDelete || $canModifyTags ) {
                        $this->preventClickjacking();
-                       // If revision was hidden from sysops, disable the checkbox
-                       if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
+                       // If revision was hidden from sysops and we don't need the checkbox
+                       // for anything else, disable it
+                       if ( !$canModifyTags && !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
                                $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
                        // Otherwise, enable the checkbox...
                        } else {
index b5a7391..4f6efd4 100644 (file)
@@ -434,6 +434,9 @@ class InfoAction extends FormlessAction {
                                        $message = $message->escaped();
                                }
                        }
+                       $expiry = $title->getRestrictionExpiry( $restrictionType );
+                       $formattedexpiry = $this->msg( 'parentheses', $this->getLanguage()->formatExpiry( $expiry ) )->escaped();
+                       $message .= $this->msg( 'word-separator' )->escaped() . $formattedexpiry;
 
                        // Messages: restriction-edit, restriction-move, restriction-create,
                        // restriction-upload
index b6eeb7b..dbcb848 100644 (file)
  * An action that just pass the request to Special:RevisionDelete
  *
  * @ingroup Actions
+ * @deprecated since 1.25 This class has been replaced by SpecialPageAction, but
+ * you really shouldn't have been using it outside core in the first place
  */
 class RevisiondeleteAction extends FormlessAction {
+       public function __construct( Page $page, IContextSource $context = null ) {
+               wfDeprecated( 'RevisiondeleteAction class', '1.25' );
+               parent::__construct( $page, $context );
+       }
 
        public function getName() {
                return 'revisiondelete';
diff --git a/includes/actions/SpecialPageAction.php b/includes/actions/SpecialPageAction.php
new file mode 100644 (file)
index 0000000..9b72163
--- /dev/null
@@ -0,0 +1,79 @@
+<?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
+ *
+ * @file
+ * @ingroup Actions
+ */
+
+/**
+ * An action that just passes the request to the relevant special page
+ *
+ * @ingroup Actions
+ * @since 1.25
+ */
+class SpecialPageAction extends FormlessAction {
+
+       /**
+        * @var array A mapping of action names to special page names.
+        */
+       public static $actionToSpecialPageMapping = array(
+               'revisiondelete' => 'Revisiondelete',
+               'editchangetags' => 'EditTags',
+       );
+
+       public function getName() {
+               $request = $this->getRequest();
+               $actionName = $request->getVal( 'action', 'view' );
+               // TODO: Shouldn't need to copy-paste this code from Action::getActionName!
+               if ( $actionName === 'historysubmit' ) {
+                       if ( $request->getBool( 'revisiondelete' ) ) {
+                               $actionName = 'revisiondelete';
+                       } elseif ( $request->getBool( 'editchangetags' ) ) {
+                               $actionName = 'editchangetags';
+                       }
+               }
+
+               if ( isset( self::$actionToSpecialPageMapping[$actionName] ) ) {
+                       return $actionName;
+               }
+               return 'nosuchaction';
+       }
+
+       public function requiresUnblock() {
+               return false;
+       }
+
+       public function getDescription() {
+               return '';
+       }
+
+       public function onView() {
+               return '';
+       }
+
+       public function show() {
+               $action = self::getName();
+               if ( $action === 'nosuchaction' ) {
+                       throw new ErrorPageError( $this->msg( 'nosuchaction' ), $this->msg( 'nosuchactiontext' ) );
+               }
+
+               // map actions to (whitelisted) special pages
+               $special = SpecialPageFactory::getPage( self::$actionToSpecialPageMapping[$action] );
+               $special->setContext( $this->getContext() );
+               $special->getContext()->setTitle( $special->getPageTitle() );
+               $special->run( '' );
+       }
+}
index e38d13c..143fc0f 100644 (file)
@@ -98,12 +98,17 @@ abstract class ApiBase extends ContextSource {
         */
        const GET_VALUES_FOR_HELP = 1;
 
+       /** @var array Maps extension paths to info arrays */
+       private static $extensionInfo = null;
+
        /** @var ApiMain */
        private $mMainModule;
        /** @var string */
        private $mModuleName, $mModulePrefix;
        private $mSlaveDB = null;
        private $mParamCache = array();
+       /** @var array|null|bool */
+       private $mModuleSource = false;
 
        /**
         * @param ApiMain $mainModule
@@ -1677,6 +1682,10 @@ abstract class ApiBase extends ContextSource {
                        'code' => 'nosuchrcid',
                        'info' => "There is no change with rcid \"\$1\""
                ),
+               'nosuchlogid' => array(
+                       'code' => 'nosuchlogid',
+                       'info' => "There is no log entry with ID \"\$1\""
+               ),
                'protect-invalidaction' => array(
                        'code' => 'protect-invalidaction',
                        'info' => "Invalid protection type \"\$1\""
@@ -2198,6 +2207,93 @@ abstract class ApiBase extends ContextSource {
                return $flags;
        }
 
+       /**
+        * Returns information about the source of this module, if known
+        *
+        * Returned array is an array with the following keys:
+        * - path: Install path
+        * - name: Extension name, or "MediaWiki" for core
+        * - namemsg: (optional) i18n message key for a display name
+        * - license-name: (optional) Name of license
+        *
+        * @return array|null
+        */
+       protected function getModuleSourceInfo() {
+               global $IP;
+
+               if ( $this->mModuleSource !== false ) {
+                       return $this->mModuleSource;
+               }
+
+               // First, try to find where the module comes from...
+               $rClass = new ReflectionClass( $this );
+               $path = $rClass->getFileName();
+               if ( !$path ) {
+                       // No path known?
+                       $this->mModuleSource = null;
+                       return null;
+               }
+               $path = realpath( $path ) ?: $path;
+
+               // Build map of extension directories to extension info
+               if ( self::$extensionInfo === null ) {
+                       self::$extensionInfo = array(
+                               realpath( __DIR__ ) ?: __DIR__ => array(
+                                       'path' => $IP,
+                                       'name' => 'MediaWiki',
+                                       'license-name' => 'GPL-2.0+',
+                               ),
+                               realpath( "$IP/extensions" ) ?: "$IP/extensions" => null,
+                       );
+                       $keep = array(
+                               'path' => null,
+                               'name' => null,
+                               'namemsg' => null,
+                               'license-name' => null,
+                       );
+                       foreach ( $this->getConfig()->get( 'ExtensionCredits' ) as $group ) {
+                               foreach ( $group as $ext ) {
+                                       if ( !isset( $ext['path'] ) || !isset( $ext['name'] ) ) {
+                                               // This shouldn't happen, but does anyway.
+                                               continue;
+                                       }
+
+                                       $extpath = $ext['path'];
+                                       if ( !is_dir( $extpath ) ) {
+                                               $extpath = dirname( $extpath );
+                                       }
+                                       self::$extensionInfo[realpath( $extpath ) ?: $extpath] =
+                                               array_intersect_key( $ext, $keep );
+                               }
+                       }
+                       foreach ( ExtensionRegistry::getInstance()->getAllThings() as $ext ) {
+                               $extpath = $ext['path'];
+                               if ( !is_dir( $extpath ) ) {
+                                       $extpath = dirname( $extpath );
+                               }
+                               self::$extensionInfo[realpath( $extpath ) ?: $extpath] =
+                                       array_intersect_key( $ext, $keep );
+                       }
+               }
+
+               // Now traverse parent directories until we find a match or run out of
+               // parents.
+               do {
+                       if ( array_key_exists( $path, self::$extensionInfo ) ) {
+                               // Found it!
+                               $this->mModuleSource = self::$extensionInfo[$path];
+                               return $this->mModuleSource;
+                       }
+
+                       $oldpath = $path;
+                       $path = dirname( $path );
+               } while ( $path !== $oldpath );
+
+               // No idea what extension this might be.
+               $this->mModuleSource = null;
+               return null;
+       }
+
        /**
         * Called from ApiHelp before the pieces are joined together and returned.
         *
index f03cef2..72aee32 100644 (file)
@@ -39,6 +39,8 @@ class ApiBlock extends ApiBase {
         * of success. If it fails, the result will specify the nature of the error.
         */
        public function execute() {
+               global $wgContLang;
+
                $user = $this->getUser();
                $params = $this->extractRequestParams();
 
@@ -100,11 +102,9 @@ class ApiBlock extends ApiBase {
                $res['user'] = $params['user'];
                $res['userID'] = $target instanceof User ? $target->getId() : 0;
 
-               $block = Block::newFromTarget( $target );
+               $block = Block::newFromTarget( $target, null, true );
                if ( $block instanceof Block ) {
-                       $res['expiry'] = $block->mExpiry == $this->getDB()->getInfinity()
-                               ? 'infinite'
-                               : wfTimestamp( TS_ISO_8601, $block->mExpiry );
+                       $res['expiry'] = $wgContLang->formatExpiry( $block->mExpiry, TS_ISO_8601, 'infinite' );
                        $res['id'] = $block->getId();
                } else {
                        # should be unreachable
index 0767e03..56c67e0 100644 (file)
@@ -331,6 +331,15 @@ class ApiEditPage extends ApiBase {
                        $requestArray['wpWatchthis'] = '';
                }
 
+               // Apply change tags
+               if ( count( $params['tags'] ) ) {
+                       if ( $user->isAllowed( 'applychangetags' ) ) {
+                               $requestArray['wpChangeTags'] = implode( ',', $params['tags'] );
+                       } else {
+                               $this->dieUsage( 'You don\'t have permission to set change tags.', 'taggingnotallowed' );
+                       }
+               }
+
                // Pass through anything else we might have been given, to support extensions
                // This is kind of a hack but it's the best we can do to make extensions work
                $requestArray += $this->getRequest()->getValues();
@@ -475,6 +484,9 @@ class ApiEditPage extends ApiBase {
                        case EditPage::AS_TEXTBOX_EMPTY:
                                $this->dieUsageMsg( 'emptynewsection' );
 
+                       case EditPage::AS_CHANGE_TAG_ERROR:
+                               $this->dieStatus( $status );
+
                        case EditPage::AS_SUCCESS_NEW_ARTICLE:
                                $r['new'] = '';
                                // fall-through
@@ -531,6 +543,10 @@ class ApiEditPage extends ApiBase {
                        ),
                        'text' => null,
                        'summary' => null,
+                       'tags' => array(
+                               ApiBase::PARAM_TYPE => ChangeTags::listExplicitlyDefinedTags(),
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
                        'minor' => false,
                        'notminor' => false,
                        'bot' => false,
index 53e8c34..00fc12e 100644 (file)
@@ -277,25 +277,55 @@ class ApiHelp extends ApiBase {
                                );
                        }
 
-                       $flags = $module->getHelpFlags();
-                       if ( $flags ) {
-                               $help['flags'] .= Html::openElement( 'div',
-                                       array( 'class' => 'apihelp-block apihelp-flags' ) );
-                               $msg = $context->msg( 'api-help-flags' );
-                               if ( !$msg->isDisabled() ) {
-                                       $help['flags'] .= self::wrap(
-                                               $msg->numParams( count( $flags ) ), 'apihelp-block-head', 'div'
-                                       );
+                       $help['flags'] .= Html::openElement( 'div',
+                               array( 'class' => 'apihelp-block apihelp-flags' ) );
+                       $msg = $context->msg( 'api-help-flags' );
+                       if ( !$msg->isDisabled() ) {
+                               $help['flags'] .= self::wrap(
+                                       $msg->numParams( count( $flags ) ), 'apihelp-block-head', 'div'
+                               );
+                       }
+                       $help['flags'] .= Html::openElement( 'ul' );
+                       foreach ( $module->getHelpFlags() as $flag ) {
+                               $help['flags'] .= Html::rawElement( 'li', null,
+                                       self::wrap( $context->msg( "api-help-flag-$flag" ), "apihelp-flag-$flag" )
+                               );
+                       }
+                       $sourceInfo = $module->getModuleSourceInfo();
+                       if ( $sourceInfo ) {
+                               if ( isset( $sourceInfo['namemsg'] ) ) {
+                                       $extname = $context->msg( $sourceInfo['namemsg'] )->text();
+                               } else {
+                                       $extname = $sourceInfo['name'];
                                }
-                               $help['flags'] .= Html::openElement( 'ul' );
-                               foreach ( $flags as $flag ) {
-                                       $help['flags'] .= Html::rawElement( 'li', null,
-                                               self::wrap( $context->msg( "api-help-flag-$flag" ), "apihelp-flag-$flag" )
-                                       );
+                               $help['flags'] .= Html::rawElement( 'li', null,
+                                       self::wrap(
+                                               $context->msg( 'api-help-source', $extname, $sourceInfo['name'] ),
+                                               'apihelp-source'
+                                       )
+                               );
+
+                               $link = SpecialPage::getTitleFor( 'Version', 'License/' . $sourceInfo['name'] );
+                               if ( isset( $sourceInfo['license-name'] ) ) {
+                                       $msg = $context->msg( 'api-help-license', $link, $sourceInfo['license-name'] );
+                               } elseif ( SpecialVersion::getExtLicenseFileName( dirname( $sourceInfo['path'] ) ) ) {
+                                       $msg = $context->msg( 'api-help-license-noname', $link );
+                               } else {
+                                       $msg = $context->msg( 'api-help-license-unknown' );
                                }
-                               $help['flags'] .= Html::closeElement( 'ul' );
-                               $help['flags'] .= Html::closeElement( 'div' );
+                               $help['flags'] .= Html::rawElement( 'li', null,
+                                       self::wrap( $msg, 'apihelp-license' )
+                               );
+                       } else {
+                               $help['flags'] .= Html::rawElement( 'li', null,
+                                       self::wrap( $context->msg( 'api-help-source-unknown' ), 'apihelp-source' )
+                               );
+                               $help['flags'] .= Html::rawElement( 'li', null,
+                                       self::wrap( $context->msg( 'api-help-license-unknown' ), 'apihelp-license' )
+                               );
                        }
+                       $help['flags'] .= Html::closeElement( 'ul' );
+                       $help['flags'] .= Html::closeElement( 'div' );
 
                        foreach ( $module->getFinalDescription() as $msg ) {
                                $msg->setContext( $context );
index 5f6bd95..465025c 100644 (file)
@@ -89,6 +89,7 @@ class ApiMain extends ApiBase {
                'imagerotate' => 'ApiImageRotate',
                'revisiondelete' => 'ApiRevisionDelete',
                'managetags' => 'ApiManageTags',
+               'tag' => 'ApiTag',
        );
 
        /**
@@ -457,7 +458,13 @@ class ApiMain extends ApiBase {
                // Bug 63145: Rollback any open database transactions
                if ( !( $e instanceof UsageException ) ) {
                        // UsageExceptions are intentional, so don't rollback if that's the case
-                       MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+                       try {
+                               MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+                       } catch ( DBError $e2 ) {
+                               // Rollback threw an exception too. Log it, but don't interrupt
+                               // our regularly scheduled exception handling.
+                               MWExceptionHandler::logException( $e2 );
+                       }
                }
 
                // Allow extra cleanup and logging
index 04cd3df..bb661b2 100644 (file)
@@ -195,6 +195,24 @@ class ApiParamInfo extends ApiBase {
                }
                $ret['prefix'] = $module->getModulePrefix();
 
+               $sourceInfo = $module->getModuleSourceInfo();
+               if ( $sourceInfo ) {
+                       $ret['source'] = $sourceInfo['name'];
+                       if ( isset( $sourceInfo['namemsg'] ) ) {
+                               $ret['sourcename'] = $this->context->msg( $sourceInfo['namemsg'] )->text();
+                       } else {
+                               $ret['sourcename'] = $ret['source'];
+                       }
+
+                       $link = SpecialPage::getTitleFor( 'Version', 'License/' . $sourceInfo['name'] )->getFullUrl();
+                       if ( isset( $sourceInfo['license-name'] ) ) {
+                               $ret['licensetag'] = $sourceInfo['license-name'];
+                               $ret['licenselink'] = (string)$link;
+                       } elseif ( SpecialVersion::getExtLicenseFileName( dirname( $sourceInfo['path'] ) ) ) {
+                               $ret['licenselink'] = (string)$link;
+                       }
+               }
+
                $this->formatHelpMessages( $ret, 'description', $module->getFinalDescription() );
 
                foreach ( $module->getHelpFlags() as $flag ) {
index 3ca62c6..267bced 100644 (file)
@@ -107,7 +107,10 @@ class ApiParse extends ApiBase {
                                $popts = $this->makeParserOptions( $pageObj, $params );
 
                                // If for some reason the "oldid" is actually the current revision, it may be cached
-                               if ( $rev->isCurrent() ) {
+                               // Deliberately comparing $pageObj->getLatest() with $rev->getId(), rather than
+                               // checking $rev->isCurrent(), because $pageObj is what actually ends up being used,
+                               // and if its ->getLatest() is outdated, $rev->isCurrent() won't tell us that.
+                               if ( $rev->getId() == $pageObj->getLatest() ) {
                                        // May get from/save to parser cache
                                        $p_result = $this->getParsedContent( $pageObj, $popts,
                                                $pageid, isset( $prop['wikitext'] ) );
index 552e444..496db8f 100644 (file)
@@ -29,6 +29,8 @@
  */
 class ApiProtect extends ApiBase {
        public function execute() {
+               global $wgContLang;
+
                $params = $this->extractRequestParams();
 
                $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
@@ -78,7 +80,7 @@ class ApiProtect extends ApiBase {
                        }
 
                        if ( wfIsInfinity( $expiry[$i] ) ) {
-                               $expiryarray[$p[0]] = $db->getInfinity();
+                               $expiryarray[$p[0]] = 'infinity';
                        } else {
                                $exp = strtotime( $expiry[$i] );
                                if ( $exp < 0 || !$exp ) {
@@ -93,10 +95,7 @@ class ApiProtect extends ApiBase {
                        }
                        $resultProtections[] = array(
                                $p[0] => $protections[$p[0]],
-                               'expiry' => ( $expiryarray[$p[0]] == $db->getInfinity()
-                                       ? 'infinite'
-                                       : wfTimestamp( TS_ISO_8601, $expiryarray[$p[0]] )
-                               )
+                               'expiry' => $wgContLang->formatExpiry( $expiryarray[$p[0]], TS_ISO_8601, 'infinite' ),
                        );
                }
 
index a15754c..89e92b8 100644 (file)
@@ -123,6 +123,7 @@ abstract class ApiQueryBase extends ApiBase {
         */
        public function selectNamedDB( $name, $db, $groups ) {
                $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
+               return $this->mDb;
        }
 
        /**
index 2e63480..a626c8a 100644 (file)
@@ -322,7 +322,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                $vals2['flags'] = isset( $params[$flagsKey] ) ? $params[$flagsKey] : '';
 
                                // Indefinite blocks have no expiry time
-                               if ( SpecialBlock::parseExpiryInput( $params[$durationKey] ) !== wfGetDB( DB_SLAVE )->getInfinity() ) {
+                               if ( SpecialBlock::parseExpiryInput( $params[$durationKey] ) !== 'infinity' ) {
                                        $vals2['expiry'] = wfTimestamp( TS_ISO_8601,
                                                strtotime( $params[$durationKey], wfTimestamp( TS_UNIX, $ts ) ) );
                                }
@@ -366,11 +366,11 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                                unset( $params[$idsKey] );
                                        }
                                        if ( isset( $params[$ofieldKey] ) ) {
-                                               $params[] = $params[$ofieldKey];
+                                               $params[] = 'ofield=' . $params[$ofieldKey];
                                                unset( $params[$ofieldKey] );
                                        }
                                        if ( isset( $params[$nfieldKey] ) ) {
-                                               $params[] = $params[$nfieldKey];
+                                               $params[] = 'nfield=' . $params[$nfieldKey];
                                                unset( $params[$nfieldKey] );
                                        }
                                }
index fceded6..22447f7 100644 (file)
@@ -674,8 +674,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
        protected function appendRightsInfo( $property ) {
                $config = $this->getConfig();
-               $title = Title::newFromText( $config->get( 'RightsPage' ) );
-               $url = $title ? wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ) : $config->get( 'RightsUrl' );
+               $rightsPage = $config->get( 'RightsPage' );
+               if ( is_string( $rightsPage ) ) {
+                       $title = Title::newFromText( $rightsPage );
+                       $url = wfExpandUrl( $title, PROTO_CURRENT );
+               } else {
+                       $title = false;
+                       $url = $config->get( 'RightsUrl' );
+               }
                $text = $config->get( 'RightsText' );
                if ( !$text && $title ) {
                        $text = $title->getPrefixedText();
index 4ef1a34..fd095fc 100644 (file)
@@ -52,6 +52,8 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        protected function getCurrentUserInfo() {
+               global $wgContLang;
+
                $user = $this->getUser();
                $result = $this->getResult();
                $vals = array();
@@ -70,9 +72,9 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                $vals['blockedbyid'] = $block->getBy();
                                $vals['blockreason'] = $user->blockedFor();
                                $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
-                               $vals['blockexpiry'] = $block->getExpiry() === 'infinity'
-                                       ? 'infinite'
-                                       : wfTimestamp( TS_ISO_8601, $block->getExpiry() );
+                               $vals['blockexpiry'] = $wgContLang->formatExpiry(
+                                       $block->getExpiry(), TS_ISO_8601, 'infinite'
+                               );
                        }
                }
 
diff --git a/includes/api/ApiTag.php b/includes/api/ApiTag.php
new file mode 100644 (file)
index 0000000..fcf0ac1
--- /dev/null
@@ -0,0 +1,178 @@
+<?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 API
+ * @since 1.25
+ */
+class ApiTag extends ApiBase {
+
+       protected function getAvailableTags() {
+               return ChangeTags::listExplicitlyDefinedTags();
+       }
+
+       public function execute() {
+               $params = $this->extractRequestParams();
+
+               // make sure the user is allowed
+               if ( !$this->getUser()->isAllowed( 'changetags' ) ) {
+                       $this->dieUsage( "You don't have permission to add or remove change tags from individual edits",
+                               'permissiondenied' );
+               }
+
+               // validate and process each revid, rcid and logid
+               $this->requireAtLeastOneParameter( $params, 'revid', 'rcid', 'logid' );
+               $result = $this->getResult();
+               $ret = array();
+               if ( $params['revid'] ) {
+                       foreach ( $params['revid'] as $id ) {
+                               $ret[] = $this->processIndividual( 'revid', $params, $id, $result );
+                       }
+               }
+               if ( $params['rcid'] ) {
+                       foreach ( $params['rcid'] as $id ) {
+                               $ret[] = $this->processIndividual( 'rcid', $params, $id, $result );
+                       }
+               }
+               if ( $params['logid'] ) {
+                       foreach ( $params['logid'] as $id ) {
+                               $ret[] = $this->processIndividual( 'logid', $params, $id, $result );
+                       }
+               }
+
+               $result->setIndexedTagName( $ret, 'result' );
+               $result->addValue( null, $this->getModuleName(), $ret );
+       }
+
+       protected static function validateLogId( $logid ) {
+               $dbr = wfGetDB( DB_SLAVE );
+               $result = $dbr->selectField( 'logging', 'log_id', array( 'log_id' => $logid ),
+                       __METHOD__ );
+               return (bool)$result;
+       }
+
+       protected function processIndividual( $type, $params, $id, &$result ) {
+               $idResult = array( $type => $id );
+
+               // validate the ID
+               $valid = false;
+               switch ( $type ) {
+                       case 'rcid':
+                               $valid = RecentChange::newFromId( $id );
+                               break;
+                       case 'revid':
+                               $valid = Revision::newFromId( $id );
+                               break;
+                       case 'logid':
+                               $valid = self::validateLogId( $id );
+                               break;
+               }
+
+               if ( !$valid ) {
+                       $idResult['status'] = 'error';
+                       $idResult += $this->parseMsg( array( "nosuch$type", $id ) );
+                       return $idResult;
+               }
+
+               $status = ChangeTags::updateTagsWithChecks( $params['add'],
+                       $params['remove'],
+                       ( $type === 'rcid' ? $id : null ),
+                       ( $type === 'revid' ? $id : null ),
+                       ( $type === 'logid' ? $id : null ),
+                       null,
+                       $params['reason'],
+                       $this->getUser() );
+
+               if ( !$status->isOK() ) {
+                       if ( $status->hasWarning( 'actionthrottledtext' ) ) {
+                               $idResult['status'] = 'skipped';
+                       } else {
+                               $idResult['status'] = 'failure';
+                               $ret['errors'] = $result->convertStatusToArray( $status, 'error' );
+                       }
+               } else {
+                       $idResult['status'] = 'success';
+                       if ( is_null( $status->value->logId ) ) {
+                               $idResult['noop'] = '';
+                       } else {
+                               $idResult['actionlogid'] = $status->value->logId;
+                               $idResult['added'] = $status->value->addedTags;
+                               $result->setIndexedTagName( $idResult['added'], 't' );
+                               $idResult['removed'] = $status->value->removedTags;
+                               $result->setIndexedTagName( $idResult['removed'], 't' );
+                       }
+               }
+               return $idResult;
+       }
+
+       public function mustBePosted() {
+               return true;
+       }
+
+       public function isWriteMode() {
+               return true;
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'rcid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
+                       'revid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
+                       'logid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
+                       'add' => array(
+                               ApiBase::PARAM_TYPE => $this->getAvailableTags(),
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
+                       'remove' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
+                       'reason' => array(
+                               ApiBase::PARAM_DFLT => '',
+                       ),
+               );
+       }
+
+       public function needsToken() {
+               return 'csrf';
+       }
+
+       protected function getExamplesMessages() {
+               return array(
+                       'action=tag&revid=123&add=vandalism&token=123ABC'
+                               => 'apihelp-tag-example-rev',
+                       'action=tag&logid=123&remove=spam&reason=Wrongly+applied&token=123ABC'
+                               => 'apihelp-tag-example-log',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Tag';
+       }
+}
index 059eb82..d6a1fec 100644 (file)
        "apihelp-delete-param-title": "Název stránky, která se má smazat. Není možné použít společně s <var>$1pageid</var>.",
        "apihelp-delete-param-pageid": "ID stránky, která se má smazat. Není možné použít společně s <var>$1title</var>.",
        "apihelp-delete-param-watch": "Přidat stránku na seznam sledovaných.",
+       "apihelp-delete-param-unwatch": "Odstranit stránku ze seznamu sledovaných.",
        "apihelp-delete-example-simple": "Smazat stránku <kbd>Main Page</kbd>.",
+       "apihelp-delete-example-reason": "Smazat stránku <kbd>Main Page</kbd> s odůvodněním <kbd>Preparing for move</kbd>.",
        "apihelp-disabled-description": "Tento modul byl deaktivován.",
        "apihelp-edit-description": "Vytvářet a upravovat stránky.",
+       "apihelp-edit-param-title": "Název stránky, kterou chcete editovat. Nelze použít společně s <var>$1pageid</var>.",
+       "apihelp-edit-param-pageid": "ID stránky, která se má editovat. Není možné použít společně s <var>$1title</var>.",
        "apihelp-edit-param-sectiontitle": "Název nové sekce.",
        "apihelp-edit-param-text": "Obsah stránky.",
        "apihelp-edit-param-minor": "Malá editace.",
        "apihelp-emailuser-description": "Poslat uživateli e-mail.",
        "apihelp-emailuser-param-text": "Tělo zprávy.",
        "apihelp-emailuser-param-ccme": "Odeslat mi kopii této zprávy.",
+       "apihelp-expandtemplates-description": "Rozbalí všechny šablony ve wikitextu.",
+       "apihelp-expandtemplates-param-title": "Název stránky.",
        "apihelp-expandtemplates-param-text": "Wikitext k převedení.",
+       "apihelp-expandtemplates-param-revid": "ID revize, pro <nowiki>{{REVISIONID}}</nowiki> a podobné proměnné.",
        "apihelp-feedcontributions-description": "Vrátí kanál příspěvků uživatele.",
        "apihelp-feedcontributions-param-feedformat": "Formát kanálu.",
        "apihelp-feedcontributions-param-year": "Od roku (a dříve).",
index 9617204..070a6ff 100644 (file)
        "apihelp-query+allimages-param-limit": "Wie viele Gesamtbilder zurückgegeben werden sollen.",
        "apihelp-query+allimages-example-recent": "Zeigt eine Liste von kürzlich hochgeladenen Dateien ähnlich zu [[Special:NewFiles]].",
        "apihelp-query+alllinks-example-unique": "Einheitlich verlinkte Titel auflisten",
+       "apihelp-query+allpages-description": "Listet alle Seiten in einem Namensraum nacheinander auf.",
+       "apihelp-query+allpages-param-from": "Seitentitel, bei dem die Auflistung beginnen soll.",
+       "apihelp-query+allpages-param-to": "Seitentitel, bei dem die Auflistung enden soll.",
+       "apihelp-query+allpages-param-prefix": "Nach Seitentiteln suchen, die mit diesem Wert beginnen.",
+       "apihelp-query+allpages-param-namespace": "Der zu untersuchende Namensraum.",
        "apihelp-query+allpages-param-filterredir": "Welche Seiten aufgelistet werden sollen.",
+       "apihelp-query+allpages-param-minsize": "Nur Seiten auflisten, die mindestens diese Größe in Byte haben.",
+       "apihelp-query+allpages-param-maxsize": "Nur Seiten auflisten, die höchstens diese Größe in Byte haben.",
+       "apihelp-query+allpages-param-prtype": "Nur geschützte Seiten auflisten.",
+       "apihelp-query+allpages-param-prlevel": "Seitenschutze nach Schutzstufe filtern (muss zusammen mit $1prtype=parameter angegeben werden).",
+       "apihelp-query+allpages-param-prfiltercascade": "Seitenschutze nach Kaskadierung filtern (wird ignoriert, wenn $1prtype nicht gesetzt ist).",
+       "apihelp-query+allpages-param-limit": "Gesamtanzahl der aufzulistenden Seiten.",
+       "apihelp-query+allpages-param-dir": "Aufzählungsrichtung.",
+       "apihelp-query+allpages-param-filterlanglinks": "Nur Seiten auflisten, die Sprachlinks haben. Beachte, dass von Erweiterungen gesetzte Sprachlinks möglicherweise nicht beachtet werden.",
+       "apihelp-query+allpages-param-prexpiry": "Ablaufzeit des Seitenschutzes, nach dem die Auflistung gefiltert werden soll:\n; indefinite: Nur unbeschränkt geschützte Seiten auflisten.\n; definite: Nur für einen bestimmten Zeitraum geschützte Seiten auflisten.\n; all: geschützte Seiten unabhängig von der Schutzlänge auflisten.",
+       "apihelp-query+allpages-example-B": "Bezieht eine Liste von Seiten, die mit dem Buchstaben <kbd>B</kbd> beginnen.",
+       "apihelp-query+allpages-example-generator": "Gibt Informationen über vier Seiten mit dem Anfangsbuchstaben <kbd>T</kbd> zurück.",
+       "apihelp-query+allpages-example-generator-revisions": "Übermittelt den Inhalt der ersten beiden Seiten, die mit <kbd>Re</kbd> beginnen und keine Weiterleitungen sind.",
+       "apihelp-query+allredirects-description": "Bezieht alle Weiterleitungen in einem Namensraum.",
+       "apihelp-query+allredirects-param-from": "Titel der Weiterleitung, bei der die Auflistung beginnen soll.",
+       "apihelp-query+allredirects-param-to": "Titel der Weiterleitung, bei der die Auflistung enden soll.",
+       "apihelp-query+allredirects-param-prefix": "Weiterleitungen auflisten, deren Zielseiten mit diesem Wert beginnen.",
+       "apihelp-query+allredirects-param-unique": "Nur Weiterleitungen mit unterschiedlichen Zielseiten anzeigen. Kann nicht zusammen mit $1prop=ids|fragment|interwiki benutzt werden. Bei Nutzung als Generator werden die Zielseiten anstelle der Ursprungsseiten zurückgegeben.",
+       "apihelp-query+allredirects-param-prop": "Zu beziehende Informationen:\n; ids: Ergänzt die Seitenkennung der Weiterleitungsseite (kann nicht zusammen mit <var>$1unique</var> benutzt werden).\n; title: Ergänzt den Titel der Weiterleitung.\n; fragment: Ergänzt das Abschnittsziel der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).\n; interwiki: Ergänzt das Interwiki-Präfix der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
+       "apihelp-query+allredirects-param-namespace": "Der zu untersuchende Namensraum.",
+       "apihelp-query+allredirects-param-limit": "Gesamtanzahl der aufzulistenden Einträge.",
+       "apihelp-query+allredirects-param-dir": "Aufzählungsrichtung.",
+       "apihelp-query+allredirects-example-B": "Listet Zielseiten, auch fehlende, mit den Seitenkennungen der Weiterleitung auf, beginnend bei <kbd>B</kbd>.",
        "apihelp-query+allredirects-example-unique": "Einzigartige Zielseiten auflisten.",
+       "apihelp-query+allredirects-example-unique-generator": "Bezieht alle Zielseiten und markiert die Fehlenden.",
        "apihelp-query+allredirects-example-generator": "Seiten abrufen, die die Weiterleitungen enthalten",
        "apihelp-query+alltransclusions-param-namespace": "Der aufzulistende Namensraum.",
        "apihelp-query+alltransclusions-example-unique": "Einzigartige eingebundene Titel auflisten.",
index 1d117b6..ee66238 100644 (file)
@@ -85,6 +85,7 @@
        "apihelp-edit-param-sectiontitle": "The title for a new section.",
        "apihelp-edit-param-text": "Page content.",
        "apihelp-edit-param-summary": "Edit summary. Also section title when $1section=new and $1sectiontitle is not set.",
+       "apihelp-edit-param-tags": "Change tags to apply to the revision.",
        "apihelp-edit-param-minor": "Minor edit.",
        "apihelp-edit-param-notminor": "Non-minor edit.",
        "apihelp-edit-param-bot": "Mark this edit as bot.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "Set the notification timestamp for <kbd>Main page</kbd> so all edits since 1 January 2012 are unviewed.",
        "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the <kbd>{{ns:user}}</kbd> namespace.",
 
+       "apihelp-tag-description": "Add or remove change tags from individual revisions or log entries.",
+       "apihelp-tag-param-rcid": "One or more recent changes IDs from which to add or remove the tag.",
+       "apihelp-tag-param-revid": "One or more revision IDs from which to add or remove the tag.",
+       "apihelp-tag-param-logid": "One or more log entry IDs from which to add or remove the tag.",
+       "apihelp-tag-param-add": "Tags to add. Only manually defined tags can be added.",
+       "apihelp-tag-param-remove": "Tags to remove. Only tags that are either manually defined or completely undefined can be removed.",
+       "apihelp-tag-param-reason": "Reason for the change.",
+       "apihelp-tag-example-rev": "Add the <kbd>vandalism</kbd> tag from revision ID 123 without specifying a reason",
+       "apihelp-tag-example-log": "Remove the <kbd>spam</kbd> tag from log entry ID 123 with the reason <kbd>Wrongly applied</kbd>",
+
        "apihelp-tokens-description": "Get tokens for data-modifying actions.\n\nThis module is deprecated in favor of [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-tokens-param-type": "Types of token to request.",
        "apihelp-tokens-example-edit": "Retrieve an edit token (the default).",
        "api-help-flag-writerights": "This module requires write rights.",
        "api-help-flag-mustbeposted": "This module only accepts POST requests.",
        "api-help-flag-generator": "This module can be used as a generator.",
+       "api-help-source": "Source: $1",
+       "api-help-source-unknown": "Source: <span class=\"apihelp-unknown\">unknown</span>",
+       "api-help-license": "License: [[$1|$2]]",
+       "api-help-license-noname": "License: [[$1|See link]]",
+       "api-help-license-unknown": "License: <span class=\"apihelp-unknown\">unknown</span>",
        "api-help-help-urls": "",
        "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
        "api-help-param-deprecated": "Deprecated.",
index 318cd96..5efe91d 100644 (file)
        "api-help-flag-writerights": "Este módulo requiere permisos de escritura.",
        "api-help-flag-mustbeposted": "Este módulo solo acepta solicitudes POST.",
        "api-help-flag-generator": "Este módulo puede utilizarse como un generador.",
+       "api-help-source": "Fuente: $1",
+       "api-help-source-unknown": "Fuente: <span class=\"apihelp-unknown\">desconocida</span>",
+       "api-help-license": "Licencia: [[$1|$2]]",
+       "api-help-license-noname": "Licencia: [[$1|Ver enlace]]",
+       "api-help-license-unknown": "Licencia: <span class=\"apihelp-unknown\">desconocida</span>",
        "api-help-parameters": "{{PLURAL:$1|Parámetro|Parámetros}}:",
        "api-help-param-deprecated": "En desuso.",
        "api-help-param-required": "Este parámetro es obligatorio.",
        "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe estar vacío|Puede estar vacío, o $2}}",
        "api-help-param-multi-separate": "Separar los valores con <kbd>|</kbd>.",
-       "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:"
+       "api-help-param-default": "Predeterminado: $1",
+       "api-help-param-default-empty": "Predeterminado: <span class=\"apihelp-empty\">(vacío)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(sin descripción)</span>",
+       "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:",
+       "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Concedido a|Concedidos a}}: $2",
+       "api-credits-header": "Créditos",
+       "api-credits": "Desarrolladores de la API:\n* Roan Kattouw (desarrollador principal sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creador, desarrollador principal sep 2006–sep 2007)\n* Brad Jorsch (desarrollador principal 2013–actualidad)\n\nEnvía comentarios, sugerencias y preguntas a mediawiki-api@lists.wikimedia.org\no reporta un error en https://phabricator.wikimedia.org/."
 }
index 114e36c..baf874c 100644 (file)
        "api-help-flag-writerights": "Ce module nécessite des droits d’écriture.",
        "api-help-flag-mustbeposted": "Ce module n’accepte que les requêtes POST.",
        "api-help-flag-generator": "Ce module peut être utilisé comme générateur.",
+       "api-help-source": "Source : $1",
+       "api-help-source-unknown": "Source : <span class=\"apihelp-unknown\">inconnue</span>",
+       "api-help-license": "Licence : [[$1|$2]]",
+       "api-help-license-noname": "Licence : [[$1|Voir le lien]]",
+       "api-help-license-unknown": "Licence : <span class=\"apihelp-unknown\">inconnue</span>",
        "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
        "api-help-param-deprecated": "Obsolète.",
        "api-help-param-required": "Ce paramètre est obligatoire.",
index 065ced3..dcc27e7 100644 (file)
        "apihelp-paraminfo-param-pagesetmodule": "Obter información sobre o módulo pageset (proporcionando títulos= e amigos).",
        "apihelp-paraminfo-param-formatmodules": "Lista dos nomes de módulo de formato (valores do parámetro <var>formato</var>). No canto use <var>$1modules</var>.",
        "apihelp-paraminfo-example-1": "Amosar información para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, e <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+       "apihelp-parse-description": "Analiza o contido e devolve o resultado do analizador.\n\nVexa varios módulos propostos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obter información sobre a versión actual dunha páxina.\n\nHai varias formas de especificar o texto a analizar:\n# Especificar unha páxina ou revisión, usando <var>$1page</var>, <var>$1pageid</var>, ou <var>$1oldid</var>.\n# Especificando contido explícitamente, usando <var>$1text</var>, <var>$1title</var>, and <var>$1contentmodel</var>.\n# Especificando só un resumo a analizar. <var>$1prop</var> debe ter un valor baleiro.",
        "apihelp-parse-param-title": "Título da páxina á que pertence o texto. Se non se indica, debe especificarse <var>$1contentmodel</var>, e [[API]] usarase como o título.",
        "apihelp-parse-param-text": "Texto a analizar. Use <var>$1title</var> ou <var>$1contentmodel</var> para controlar o modelo de contido.",
        "apihelp-parse-param-summary": "Resumo a analizar.",
        "api-help-flag-writerights": "Este módulo precisa permisos de escritura.",
        "api-help-flag-mustbeposted": "Este módulo só acepta peticións POST.",
        "api-help-flag-generator": "Este módulo pode usarse como xenerador.",
+       "api-help-source": "Fonte: $1",
+       "api-help-source-unknown": "Fonte: <span class=\"apihelp-unknown\">descoñecida</span>",
+       "api-help-license": "Licenza: [[$1|$2]]",
+       "api-help-license-noname": "Licenza: [[$1|Ver ligazón]]",
+       "api-help-license-unknown": "Licenza: <span class=\"apihelp-unknown\">descoñecida</span>",
        "api-help-parameters": "{{PLURAL:$1|Parámetro|Parámetros}}:",
        "api-help-param-deprecated": "Obsoleto.",
        "api-help-param-required": "Este parámetro é obrigatorio.",
diff --git a/includes/api/i18n/is.json b/includes/api/i18n/is.json
new file mode 100644 (file)
index 0000000..956ace8
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sveinn í Felli"
+               ]
+       },
+       "api-help-license": "Notkunarleyfi: [[$1|$2]]",
+       "api-help-license-noname": "Notkunarleyfi: [[$1|Sjá tengil]]",
+       "api-help-license-unknown": "Notkunarleyfi: <span class=\"apihelp-unknown\">óþekkt</span>"
+}
index e0e32f5..a68efc4 100644 (file)
@@ -4,7 +4,8 @@
                        "Shirayuki",
                        "2nd-player",
                        "Los688",
-                       "Whym"
+                       "Whym",
+                       "Mfuji"
                ]
        },
        "apihelp-main-param-action": "実行する操作です。",
@@ -18,6 +19,7 @@
        "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": "有効期限。相対的 (例: <kbd>5 months</kbd> または <kbd>2 weeks</kbd>) または絶対的 (e.g. <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": "アカウントの作成を禁止します。",
@@ -64,6 +66,7 @@
        "apihelp-edit-param-unwatch": "そのページを現在の利用者のウォッチリストから除去します。",
        "apihelp-edit-param-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
        "apihelp-edit-example-edit": "ページを編集",
+       "apihelp-edit-example-prepend": "<kbd>_&#95;NOTOC_&#95;</kbd> をページの先頭に挿入する。",
        "apihelp-emailuser-description": "利用者に電子メールを送信します。",
        "apihelp-emailuser-param-target": "送信先の利用者名。",
        "apihelp-emailuser-param-text": "電子メールの本文。",
        "apihelp-help-example-query": "2つの下位モジュールのヘルプ",
        "apihelp-imagerotate-example-simple": "<kbd>File:Example.png</kbd> を <kbd>90</kbd> 度回転させる。",
        "apihelp-imagerotate-example-generator": "<kbd>Category:Flip</kbd> 内のすべての画像を <kbd>180</kbd> 度回転させる。",
+       "apihelp-import-param-summary": "ページ取り込みの要約。",
        "apihelp-import-param-xml": "XMLファイルをアップロード",
        "apihelp-import-param-rootpage": "このページの下位ページとしてインポートする。",
        "apihelp-import-example-import": "[[meta:Help:Parserfunctions]] をすべての履歴とともに名前空間100 にインポートする。",
        "apihelp-move-param-from": "移動するページのページ名です。<var>$1fromid</var> とは同時に使用できません。",
        "apihelp-move-param-fromid": "移動するページのページIDです。<var>$1from</var> とは同時に使用できません。",
        "apihelp-move-param-to": "移動後のページ名。",
-       "apihelp-move-param-reason": "移動の理由。",
+       "apihelp-move-param-reason": "改名の理由。",
        "apihelp-move-param-movetalk": "存在する場合、トークページも名前を変更します。",
        "apihelp-move-param-movesubpages": "可能であれば、下位ページも名前を変更します。",
        "apihelp-move-param-noredirect": "転送ページを作成しません。",
        "apihelp-opensearch-param-limit": "返す結果の最大数。",
        "apihelp-opensearch-param-namespace": "検索する名前空間。",
        "apihelp-opensearch-param-suggest": "<var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> が false の場合、何もしません。",
+       "apihelp-opensearch-param-format": "出力する形式。",
+       "apihelp-opensearch-example-te": "<kbd>Te</kbd> から始まるページを検索する。",
        "apihelp-paraminfo-description": "API モジュールに関する情報を取得します。",
+       "apihelp-paraminfo-param-modules": "モジュールの名前のリスト (<var>action</var> および <var>format</var> パラメーターの値, または <kbd>main</kbd>). <kbd>+</kbd> を使用して下位モジュールを指定できます。",
        "apihelp-patrol-description": "ページまたは版を巡回済みにします。",
        "apihelp-patrol-param-revid": "巡回済みにする版ID。",
        "apihelp-patrol-example-rcid": "最近の更新を巡回",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
        "apihelp-query+alldeletedrevisions-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
        "apihelp-query+alldeletedrevisions-example-ns-main": "標準名前空間にある削除された最初の50版を一覧表示する。",
+       "apihelp-query+allmessages-param-args": "メッセージ中に展開される引数。",
+       "apihelp-query+allmessages-param-filter": "この文字列を含んだ名前のメッセージのみを返す。",
+       "apihelp-query+allmessages-param-customised": "変更された状態のメッセージのみを返す。",
+       "apihelp-query+allmessages-param-lang": "返すメッセージの言語。",
+       "apihelp-query+allmessages-example-ipb": "<kbd>ipb-</kbd> で始まるメッセージを表示する。",
+       "apihelp-query+allmessages-example-de": "ドイツ語のメッセージ <kbd>august</kbd> および <kbd>mainpage</kbd> を表示する。",
+       "apihelp-query+allusers-param-activeusers": "最近 $1 {{PLURAL:$1|日間}}のアクティブな利用者のみを一覧表示する。",
+       "apihelp-query+allusers-example-Y": "<kbd>Y</kbd> で始まる利用者を一覧表示する。",
+       "apihelp-query+backlinks-example-simple": "<kbd>Main page<kbd> へのリンクを表示する。",
+       "apihelp-query+backlinks-example-generator": "<kbd>Main page<kbd> にリンクしているページの情報を取得する。",
+       "apihelp-query+blocks-example-simple": "ブロックを一覧表示する。",
+       "apihelp-query+blocks-example-users": "利用者<kbd>Alice</kbd> および <kbd>Bob</kbd> のブロックを一覧表示する。",
+       "apihelp-query+categories-example-simple": "ページ <kbd>Albert Einstein</kbd> が属しているカテゴリの一覧を取得する。",
+       "apihelp-query+categories-example-generator": "ページ <kbd>Albert Einstein</kbd> で使われているすべてのカテゴリに関する情報を取得する。",
+       "apihelp-query+categoryinfo-description": "与えられたカテゴリに関する情報を返します。",
+       "apihelp-query+categoryinfo-example-simple": "<kbd>Category:Foo</kbd> および <kbd>Category:Bar</kbd> に関する情報を取得する。",
        "apihelp-query+categorymembers-example-simple": "<kbd>Category:Physics</kbd> に含まれる最初の10ページを取得する。",
        "apihelp-query+categorymembers-example-generator": "<kbd>Category:Physics</kbd> に含まれる最初の10ページのページ情報を取得する。",
        "apihelp-query+contributors-example-simple": "<kbd>Main Page</kbd> への投稿者を表示する。",
        "apihelp-query+iwbacklinks-example-generator": "[[wikibooks:Test]] へリンクしているページの情報を取得する。",
        "apihelp-query+langbacklinks-example-simple": "[[:fr:Test]] へリンクしているページを取得する。",
        "apihelp-query+langbacklinks-example-generator": "[[:fr:Test]] へリンクしているページの情報を取得する。",
+       "apihelp-query+links-param-namespace": "この名前空間へのリンクのみ表示する。",
+       "apihelp-query+links-param-limit": "返すリンクの数。",
+       "apihelp-query+links-example-simple": "<kbd>Main Page</kbd> からのリンクを取得する。",
+       "apihelp-query+links-example-generator": "<kbd>Main Page</kbd> からリンクされているページに関する情報を取得する。",
+       "apihelp-query+links-example-namespaces": "<kbd>Main Page</kbd> からの {{ns:user}} および {{ns:template}} 名前空間へのリンクを取得する。",
+       "apihelp-revisiondelete-description": "版の削除および復元を行います。",
+       "apihelp-revisiondelete-param-reason": "削除または復元の理由。",
+       "apihelp-revisiondelete-example-revision": "<kbd>Main Page</kbd> の版 <kbd>12345</kbd> の本文を隠す。",
+       "apihelp-rollback-param-title": "巻き戻すページ名です。<var>$1pageid</var> とは同時に使用できません。",
+       "apihelp-rollback-param-pageid": "巻き戻すページのページIDです。<var>$1title</var> とは同時に使用できません。",
+       "apihelp-unblock-description": "利用者のブロックを解除します。",
+       "apihelp-unblock-param-id": "解除するブロックのID (<kbd>list=blocks</kbd>で取得できます)。<var>$1user</var> とは同時に使用できません。",
+       "apihelp-unblock-param-user": "ブロックを解除する利用者名、IPアドレスまたはIPレンジ。<var>$1id</var>とは同時に使用できません。",
+       "apihelp-unblock-param-reason": "ブロック解除の理由。",
+       "apihelp-unblock-example-id": "ブロックID #<kbd>105</kbd> を解除する。",
+       "apihelp-undelete-description": "削除されたページの版を復元します。\n\n削除された版の一覧 (タイムスタンプを含む) は[[Special:ApiHelp/query+deletedrevs|list=deletedrevs]]に、また削除されたファイルのID一覧は[[Special:ApiHelp/query+filearchive|list=filearchive]]で見つけることができます。",
+       "apihelp-undelete-param-title": "復元するページ名。",
+       "apihelp-undelete-param-reason": "復元の理由。",
+       "apihelp-undelete-param-timestamps": "復元する版のタイムスタンプ。<var>$1timestamps</var> と <var>$1fileids</var> の両方が空の場合、すべての版が復元されます。",
+       "apihelp-undelete-example-page": "<kbd>Main Page</kbd> を復元する。",
+       "apihelp-undelete-example-revisions": "<kbd>Main Page</kbd> の2つの版を復元する。",
        "apihelp-format-example-generic": "クエリの結果を $1 形式に整形します",
        "apihelp-dbg-description": "データを PHP の <code>var_export()</code> 形式で出力します。",
        "apihelp-dbgfm-description": "データを PHP の <code>var_export()</code> 形式 (HTML に埋め込んだ形式) で出力します。",
index cdcca37..25e1002 100644 (file)
        "apihelp-delete-description": "Schmieß en Sigg fott.",
        "apihelp-delete-param-watch": "Donn di Sigg en däm aktoälle Metmaacher sing Oppaßleß opnämme.",
        "apihelp-delete-param-unwatch": "Schmihß di Sigg us däm aktoälle Metmaacher singe Oppaßless erus.",
+       "apihelp-delete-param-oldimage": "Der Nahme vom ahle Beld zom fottschmiiße, wi hä vun [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] kütt.",
        "apihelp-delete-example-simple": "Schmiiß de <kbd>Houpsigg</kbd> fott",
        "apihelp-delete-example-reason": "Schmiiß de <kbd>Houpsigg</kbd> fott mem Jrond: <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Preparing for move</kbd>.",
        "apihelp-disabled-description": "Dat Moduhl wohd affjeschalldt.",
        "apihelp-edit-description": "Sigge aanlähje un verändere.",
+       "apihelp-edit-param-title": "De Övverschreff vun dä Sigg zom Ändere. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+       "apihelp-edit-param-pageid": "De Känong vun dä Sigg zom Ändere. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+       "apihelp-edit-param-section": "De Nommer vum Affschnedd. Nemm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">0</kbd>“ för wat vör der eezde Övverschreff schteihd. Ene neue Affscnedd määt mer met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</var>“.",
        "apihelp-edit-param-sectiontitle": "De Övverschreff för ene neue Affschnett.",
        "apihelp-edit-param-text": "Dä Sigg ehre Ennhalld.",
        "apihelp-edit-param-minor": "En klein Änderong.",
        "apihelp-edit-param-notminor": "Kein klein Änderong.",
        "apihelp-edit-param-bot": "Makeer heh di Änderog als vun enem Bot jemaat.",
+       "apihelp-edit-param-recreate": "Övverjangk alle Fähler övver di Sigg, die en der Zweschezigg fott jeschneße wohd.",
        "apihelp-edit-param-createonly": "Donn di Sigg nit ändere, wann se ald doh es.",
        "apihelp-edit-param-nocreate": "Mäld ene Fähler, wann di Sigg nit doh es.",
        "apihelp-edit-param-watch": "Donn di Sigg op dem aktälle Metmaacher sing Oppaßleß.",
        "apihelp-edit-param-unwatch": "schmiiß di Sigg uß heh däm Metmaacher singe oppaßleß.",
+       "apihelp-edit-param-watchlist": "Donn en Sigg en däm aktoälle Metmaacher sing Opaßleß enndrahre udder ußdrahre udder donn däm sing Vörenschtällonge nämme udder jaa nix ändere.",
+       "apihelp-edit-param-prependtext": "Donn dä Täx aam Aanfng vun dä Sigg enndrahre. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“.",
+       "apihelp-edit-param-appendtext": "Donn dä Täx aam Ängk vun dä Sigg aanhange. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“.\n\nNemm „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$section=new</code>“ ömm ene neuje Affschnedd aanzehange, anschtatt vun heh dämm Parramehter.",
+       "apihelp-edit-param-undo": "Donn heh di Väsjohn widder retuhr nämme. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“, „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prependtext </code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1appendtext</code>“.",
+       "apihelp-edit-param-undoafter": "Donn alle Väsjohne vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1undo </code>“ bes zeläz heh di Väsjohn widder retuhr nämme. Wann nix ennjedrahre es, nämm blohß ein Väsjohn retuhr nämme.",
        "apihelp-edit-param-redirect": "Verfollsch de Ömleidonge automattesch.",
        "apihelp-edit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
        "apihelp-edit-example-edit": "Veränder en Sigg.",
        "apihelp-edit-example-prepend": "Donn <kbd>_&#95;NOTOC_&#95;</kbd> för en Sigg säze.",
+       "apihelp-edit-example-undo": "Donn alle Väsjohne vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">13579</code>“ bes zeläz „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">13585</code>“ widder retuhr nämme u en autmatesche Zersamfaßong derför enndrahre.",
        "apihelp-emailuser-description": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher schecke.",
        "apihelp-emailuser-param-target": "D ä Metmaacher, dä di <i lang=\"en\" xml:lang=\"en\">e-mail</i> krijje sull.",
        "apihelp-emailuser-param-subject": "Koppeih mem Beträff.",
        "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg.",
        "apihelp-expandtemplates-param-text": "Dä Wikitäx zom ömwandelle.",
        "apihelp-expandtemplates-param-includecomments": "Ov Aanmärkonge em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fommaht med ußjejovve wähde sulle.",
+       "apihelp-expandtemplates-param-generatexml": "Donn ene Boum vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Paaser opboue. Es dorsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=parsetree</code>“ ässäz.",
+       "apihelp-feedcontributions-description": "Jidd ene Kannahl met de Beidräsch vun enem Metmaacher uß.",
        "apihelp-feedcontributions-param-feedformat": "Däm Kannahl sing Fommaht.",
+       "apihelp-feedcontributions-param-user": "De Beijdrähsch för wat för en Metmaacher holle.",
+       "apihelp-feedcontributions-param-namespace": "Wat för ene Appachtemang för de Beijdrähsch ußjeschloße wähde sull.",
        "apihelp-feedcontributions-param-year": "Vum johr un fröhjer.",
        "apihelp-feedcontributions-param-month": "Vun däm Mohnd un derför",
+       "apihelp-feedcontributions-param-tagfilter": "Op wat för en Makkehronge de Beijdrähsch bschrängk wähde sulle.",
        "apihelp-feedcontributions-param-deletedonly": "zeijsch blohß de fottjeschmeße Beijdrähsch.",
        "apihelp-feedcontributions-param-toponly": "Zeich blohß de Änderonge, di och de neußte sin.",
        "apihelp-feedcontributions-param-newonly": "Zeich blohß de Änderonge, woh Sigge neu aanjelaat woode sin.",
        "apihelp-feedcontributions-param-showsizediff": "Zeijsch de Ongerscheijd en de Jrühße zwesche de Väsjohne.",
        "apihelp-feedcontributions-example-simple": "Zeijsch de Änderonge vum Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>.",
+       "apihelp-feedrecentchanges-description": "Donn ene Kannahl för de neuste Änderonge ußjävve.",
        "apihelp-feedrecentchanges-param-feedformat": "Däm Kannahl sing Fommaht.",
+       "apihelp-feedrecentchanges-param-namespace": "Op wat för ene Appachtemang de Beijdrähsch beschrängk wähde sulle.",
+       "apihelp-feedrecentchanges-param-invert": "Alle Appachtemangs ußer däm ußjesöhkte.",
+       "apihelp-feedrecentchanges-param-associated": "Donn et drop betroke Appachtemang — Klaafsigge udder Atikelle — med enschlehße.",
+       "apihelp-feedrecentchanges-param-days": "Wadd eruß küdd op di Dähsch enschrängke.",
        "apihelp-feedrecentchanges-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
        "apihelp-feedrecentchanges-param-from": "Zeijsch de Änderonge zigg dämm.",
        "apihelp-feedrecentchanges-param-hideminor": "De kein Minni_Änderonge verschteijsche.",
+       "apihelp-feedrecentchanges-param-hidebots": "Änderonge ußschlehße, di vun Bots jemaht wohde.",
+       "apihelp-feedrecentchanges-param-hideanons": "Änderonge ußschlehße, di vun nahmelohse Metmaacher jemaht wohde.",
+       "apihelp-feedrecentchanges-param-hideliu": "Änderonge ußschlehße, di vun aanjemälldete Metmaacher jemaht wohde.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Nohjelohrte Änderonge övverjonn.",
        "apihelp-feedrecentchanges-param-hidemyself": "Änderonge vun heh dämm Metmaacher övverjonn.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Noh Makehronge beschängke.",
+       "apihelp-feedrecentchanges-param-target": "Zeijsch Änderonge aan Sigge, op di vun heh dä Sigg ene Lengk jeihd.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Zeijsch Änderonge aan Sigge, op di vun dä ußjesöhk Sigg ene Lengk jeihd.",
+       "apihelp-feedrecentchanges-example-simple": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}}",
+       "apihelp-feedrecentchanges-example-30days": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}} vun de läzde 30 Dähsch.",
+       "apihelp-feedwatchlist-description": "Donn ene Kannahl met dä Oppaßleß zerökjävve.",
        "apihelp-feedwatchlist-param-feedformat": "Däm Kannahl sing Fommaht.",
+       "apihelp-feedwatchlist-param-hours": "Zeijsch de Sigge, di en de läzde su un esu vill Schtonde vun jäz aan veränder wohde sin.",
+       "apihelp-feedwatchlist-param-linktosections": "Lengk tirägg od der veränderte Affschnedd, woh müjjelesch.",
+       "apihelp-feedwatchlist-example-default": "Zeijsch ene Kannahl met dä Oppaßleß.",
+       "apihelp-feedwatchlist-example-all6hrs": "Zeijsch alle Änderonge aan Sgge obb Oppaßleßte us de läzde 6 Schtunde.",
+       "apihelp-filerevert-description": "Säz en Dattei obb en ahle Väsohn zerök.",
        "apihelp-filerevert-param-filename": "De Zih_Dattei, der ohne „{{ne:file}}“ derför.",
        "apihelp-filerevert-param-comment": "Aanmärkong huh lahde.",
+       "apihelp-filerevert-example-revert": "Donn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Wiki.png</kbd> op di Väsohn vum <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2011-03-05T15:27:40Z</kbd> zerök säze.",
        "apihelp-help-description": "zeisch Hölp för de aanjejovve Moduhle.",
+       "apihelp-help-param-submodules": "Donn Hölp för de Ongermoduhle vun dämm aanjejovve Moduhl enschschlehße.",
+       "apihelp-help-param-recursivesubmodules": "Donn Hölp för de Ongermoduhle allesammp enschschlehße, esu deef, wi et jeiht.",
+       "apihelp-help-param-helpformat": "Et Fommaht vun de Ußjahbe för de Hölp.",
+       "apihelp-help-param-wrap": "Donn de Ußjahbe en dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> sing schtandattmähßejje Schtruktuhr vun de Antwood enschlehße.",
+       "apihelp-help-param-toc": "Donn en Enhhaldserzeijschensß en de Ußjahbe vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ennschlehße.",
+       "apihelp-help-example-main": "Hölp för et Houpmoduhl.",
        "apihelp-help-example-recursive": "Alle Hölp en eine Sigg.",
        "apihelp-help-example-help": "Alle Hölp övver de Hölp säälver.",
+       "apihelp-help-example-query": "Hölp för zwei Ongermoduhle för Frohre.",
        "apihelp-imagerotate-description": "Ein udder mieh Bellder driehje.",
        "apihelp-imagerotate-param-rotation": "Öm wi vill Jrahd sulle de Bellder noh de Uhr drieh wääde?",
        "apihelp-imagerotate-example-simple": "Drieh de <kbd>Dattei:Beijschpell.png</kbd> öm <kbd>90</kbd> Jrahd.",
        "apihelp-imagerotate-example-generator": "Drieh alle Bellder en dä <kbd>Saachjropp:Ömdriehje</kbd> öm <kbd>180</kbd> Jrahd.",
+       "apihelp-import-param-summary": "Zersammefaßong för der Empohrt.",
        "apihelp-import-param-xml": "Donn en Dattei em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommaht huhjahde.",
+       "apihelp-import-param-interwikisource": "För et Empottehre us enem andere Wikki: Dat Wikki vun woh der Empohrt kumme sull.",
+       "apihelp-import-param-interwikipage": "För et Empottehre us enem andere Wikki: De Sigg zom Empottehre.",
+       "apihelp-import-param-fullhistory": "För et Empottehre us enem andere Wikki: Donn de jannze Verjangeheid empottehre, nit blohß de aktoälle Väsjohn.",
+       "apihelp-import-param-templates": "För et Empottehre us enem andere Wikki: Donn all de nühdejje Schablohne met empottehre.",
+       "apihelp-import-param-namespace": "För et Empottehre us enem andere Wikki: Donn ene heh dat Appachtemang empottehre.",
        "apihelp-import-param-rootpage": "Als Ongersiff vun heh dä Sigg empottehre-",
+       "apihelp-import-example-import": "Donn di Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[meta:Help:Parserfunctions]]</code>“ en et Appachtemang 100 empottehre, met alle älldere Väsjohne.",
        "apihelp-login-param-name": "Metmaacher_Nahme.",
        "apihelp-login-param-password": "Paßwoot.",
        "apihelp-login-param-domain": "De Domaijn (kann fott bliehve)",
        "apihelp-login-example-login": "Enlogge.",
        "apihelp-logout-example-logout": "Donn dä aktoälle Metmaacher ußlogge.",
+       "apihelp-managetags-param-ignorewarnings": "Ov alle Warnonge övverjange wöhde sull, die bei dämm Opdracht opkumme.",
+       "apihelp-managetags-example-create": "Donn en Makkehrong aanlähje mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
+       "apihelp-managetags-example-delete": "Schmiiß de Makkehrong mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandlaism</kbd>“ fott mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Misspelt</kbd>“.",
+       "apihelp-managetags-example-activate": "Donn en Makkehrong aktevehre mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
+       "apihelp-managetags-example-deactivate": "Donn en Makkehrong mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ nit mieh aktihv maache, mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
        "apihelp-move-description": "Donn en Sigg ömbenänne",
+       "apihelp-move-param-from": "De Övverschreff vun dä Sigg zom Ömbenänne. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1fromid</var>“ bruche.",
+       "apihelp-move-param-fromid": "De ännong vun dä Sigg zom Ömbenänne. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1from</var>“ bruche.",
        "apihelp-move-param-to": "De neue Övverschreff för di Sigg drop ömzebenänne.",
        "apihelp-move-param-reason": "Der jrond för di Sigg ömzebenänne.",
        "apihelp-move-param-movetalk": "Donn de Klaafsigg ömbenänne, wann et se jitt.",
        "apihelp-options-example-reset": "Alle enschtälloonge retuur schtälle.",
        "apihelp-paraminfo-description": "Holl Aanjahbe övver dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Moduhle.",
        "apihelp-paraminfo-param-helpformat": "Et Fommaht vun de Täxe för Hölp.",
-       "apihelp-paraminfo-param-formatmodules": "Leß met de Nahme vun de Moduhle zom Fommatehre (Wäät vum „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format</var>“-Parramehter). Nemm schtatt dämm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1modules</kbd>“.",
+       "apihelp-paraminfo-param-formatmodules": "Leß met de Nahme vun de Moduhle zom Fommatehre (Wäät vum „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format</var>“-Parramehter). Nemm schtatt dämm „<varlang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1modules</var>“.",
        "apihelp-paraminfo-example-1": "Zisch Aanjahbe övver <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, un <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-parse-param-summary": "De Zersammefaßong för ze pahse.",
        "apihelp-parse-param-section": "Holl blohß dann der Ennhalld vun däm Affschnett met dä Nommer, udder wann „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd>“ enjejovve es, maach ene neu Affschnett derbei.",
index ac2a1d3..0b19d91 100644 (file)
        "apihelp-userrights-param-userid": "Benotzer Id.",
        "apihelp-userrights-param-reason": "Grond fir d'Ännerung.",
        "apihelp-watch-example-watch": "D'Säit <kbd>Haaptsäit</kbd> iwwerwaachen.",
+       "api-help-source": "Quell: $1",
+       "api-help-source-unknown": "Quell: <span class=\"apihelp-unknown\">onbekannt</span>",
+       "api-help-license": "Lizenz: [[$1|$2]]",
+       "api-help-license-noname": "LiZenz: [[$1|Kuckt de Link]]",
+       "api-help-license-unknown": "Lizenz: <span class=\"apihelp-unknown\">onbekannt</span>",
        "api-help-param-deprecated": "Vereelst.",
        "api-help-param-required": "Dëse Parameter ass obligatoresch.",
        "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:"
index dc12b66..3b6f8ea 100644 (file)
        "apihelp-block-param-reason": "Motiu del blocatge.",
        "apihelp-block-param-nocreate": "Empachar la creacion de compte.",
        "apihelp-checktoken-param-token": "Geton de testar.",
+       "apihelp-compare-param-fromtitle": "Primièr títol de comparar.",
+       "apihelp-compare-param-fromid": "ID de la primièra pagina de comparar.",
+       "apihelp-compare-param-fromrev": "Primièra revision de comparar.",
+       "apihelp-compare-param-totitle": "Segond títol de comparar.",
+       "apihelp-compare-param-toid": "ID de la segonda pagina de comparar.",
+       "apihelp-compare-param-torev": "Segonda revision de comparar.",
+       "apihelp-createaccount-description": "Creatz un novèl compte d'utilizaire.",
        "apihelp-createaccount-param-name": "Nom d'utilizaire.",
+       "apihelp-createaccount-param-password": "Senhal (ignorat se <var>$1mailpassword</var> es definit).",
+       "apihelp-createaccount-param-realname": "Nom vertadièr de l’utilizaire (facultatiu).",
+       "apihelp-delete-description": "Suprimir una pagina.",
        "apihelp-delete-example-simple": "Suprimir la <kbd>Pagina principala</kbd>.",
+       "apihelp-disabled-description": "Aqueste modul es estat desactivat.",
+       "apihelp-edit-description": "Crear e modificar las paginas.",
        "apihelp-edit-param-text": "Contengut de la pagina.",
-       "apihelp-edit-param-minor": "Modificacion menora."
+       "apihelp-edit-param-minor": "Modificacion menora.",
+       "apihelp-edit-param-notminor": "Modificacion pas menora.",
+       "apihelp-edit-param-bot": "Marcar aquesta modificacion coma robòt.",
+       "apihelp-edit-example-edit": "Modificar una pagina",
+       "apihelp-edit-example-prepend": "Prefixar una pagina per <kbd>_&#95;NOTOC_&#95;</kbd>",
+       "apihelp-emailuser-description": "Mandar un corrièr electronic un l’utilizaire.",
+       "apihelp-emailuser-param-subject": "Entèsta del subjècte.",
+       "apihelp-emailuser-param-text": "Còs del corrièr electronic.",
+       "apihelp-emailuser-param-ccme": "Me mandar una còpia d'aqueste corrièr electronic.",
+       "apihelp-expandtemplates-param-title": "Títol de la pagina.",
+       "apihelp-expandtemplates-param-text": "Wikitèxte de convertir.",
+       "apihelp-feedcontributions-param-feedformat": "Lo format del flux.",
+       "apihelp-feedrecentchanges-param-feedformat": "Lo format del flux.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtrar per balisa.",
+       "apihelp-filerevert-param-comment": "Telecargar lo comentari.",
+       "apihelp-filerevert-param-archivename": "Nom d’archiu de la revision de restablir.",
+       "apihelp-import-param-summary": "Importar lo resumit.",
+       "apihelp-import-param-xml": "Fichièr XML telecargat.",
+       "apihelp-login-param-name": "Nom d'utilizaire.",
+       "apihelp-login-param-password": "Senhal.",
+       "apihelp-login-param-domain": "Domeni (facultatiu).",
+       "apihelp-login-example-login": "Se connectar.",
+       "apihelp-move-description": "Desplaçar una pagina.",
+       "apihelp-opensearch-param-search": "Cadena de recèrca.",
+       "apihelp-parse-example-page": "Analisar una pagina.",
+       "apihelp-parse-example-text": "Analisar lo wikitèxte.",
+       "apihelp-parse-example-summary": "Analisar un resumit.",
+       "apihelp-protect-example-protect": "Protegir una pagina",
+       "apihelp-query-param-list": "Quinas listas obténer.",
+       "apihelp-query-param-meta": "Quinas metadonadas obténer.",
+       "apihelp-query+alldeletedrevisions-param-from": "Aviar la lista a aqueste títol.",
+       "apihelp-query+allimages-param-sort": "Proprietat per la quala cal triar.",
+       "apihelp-query+blocks-example-simple": "Listar los blocatges",
+       "apihelp-query+blocks-example-users": "Listar los blocatges dels utilizaires <kbd>Alice</kbd> e <kbd>Bob</kbd>."
 }
index fc92c43..416df79 100644 (file)
@@ -8,7 +8,8 @@
                        "Devwebtel",
                        "Macofe",
                        "Pio387",
-                       "Peter Bowman"
+                       "Peter Bowman",
+                       "Darellur"
                ]
        },
        "apihelp-main-param-action": "Wybierz akcję do wykonania.",
@@ -32,6 +33,8 @@
        "apihelp-edit-param-minor": "Drobna zmiana.",
        "apihelp-edit-param-notminor": "Nie drobna zmiana.",
        "apihelp-edit-param-bot": "Oznacz tę edycję jako edycję bota.",
+       "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-example-edit": "Edytuj stronę",
        "apihelp-emailuser-description": "Wyślij e‐mail do użytkownika.",
        "apihelp-feedrecentchanges-example-simple": "Pokaż ostatnie zmiany.",
        "api-help-flag-writerights": "Ten moduł wymaga praw zapisu.",
        "api-help-flag-mustbeposted": "Ten moduł akceptuje tylko żądania POST.",
        "api-help-flag-generator": "Ten moduł może być użyty jako generator.",
+       "api-help-source": "Źródło: $1",
+       "api-help-source-unknown": "Źródło: <span class=\"apihelp-unknown\">nieznane</span>",
+       "api-help-license": "Licencja: [[$1|$2]]",
+       "api-help-license-noname": "Licencja: [[$1|Zobacz link]]",
+       "api-help-license-unknown": "Licencja: <span class=\"apihelp-unknown\">nieznana</span>",
        "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
        "api-help-param-deprecated": "Przestarzałe.",
        "api-help-param-required": "Ten parametr jest wymagany.",
        "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być nie większa niż $3.",
        "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
        "api-help-param-multi-separate": "Oddziel wartości za pomocą <kbd>|</kbd>.",
-       "api-help-param-multi-max": "Maksymalna ilość wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
+       "api-help-param-multi-max": "Maksymalna liczba wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
        "api-help-param-default": "Domyślnie: $1",
        "api-help-param-default-empty": "Domyślnie: <span class=\"apihelp-empty\">(puste)</span>",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez opisu)</span>",
index 7645503..d2c6ec9 100644 (file)
@@ -81,6 +81,7 @@
        "apihelp-edit-param-sectiontitle": "{{doc-apihelp-param|edit|sectiontitle}}",
        "apihelp-edit-param-text": "{{doc-apihelp-param|edit|text}}",
        "apihelp-edit-param-summary": "{{doc-apihelp-param|edit|summary}}",
+       "apihelp-edit-param-tags": "{{doc-apihelp-param|edit|tags}}",
        "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}\n{{Identical|Minor edit}}",
        "apihelp-edit-param-notminor": "{{doc-apihelp-param|edit|notminor}}",
        "apihelp-edit-param-bot": "{{doc-apihelp-param|edit|bot}}",
        "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
        "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-tag-description": "{{doc-apihelp-description|tag}}",
+       "apihelp-tag-param-rcid": "{{doc-apihelp-param|tag|rcid}}",
+       "apihelp-tag-param-revid": "{{doc-apihelp-param|tag|revid}}",
+       "apihelp-tag-param-logid": "{{doc-apihelp-param|tag|logid}}",
+       "apihelp-tag-param-add": "{{doc-apihelp-param|tag|add}}",
+       "apihelp-tag-param-remove": "{{doc-apihelp-param|tag|remove}}",
+       "apihelp-tag-param-reason": "{{doc-apihelp-param|tag|reason}}",
+       "apihelp-tag-example-rev": "{{doc-apihelp-example|tag}}",
+       "apihelp-tag-example-log": "{{doc-apihelp-example|tag}}",
        "apihelp-tokens-description": "{{doc-apihelp-description|tokens}}",
        "apihelp-tokens-param-type": "{{doc-apihelp-param|tokens|type}}",
        "apihelp-tokens-example-edit": "{{doc-apihelp-example|tokens}}",
        "api-help-flag-writerights": "Flag displayed for an API module that requires write rights",
        "api-help-flag-mustbeposted": "Flag displayed for an API module that only accepts POST requests",
        "api-help-flag-generator": "Flag displayed for an API module that can be used as a generator",
+       "api-help-source": "Displayed in the flags box to indicate the source of an API module.\n\nParameters:\n* $1 - Possibly-localised extension name, or \"MediaWiki\" if it's a core module\n* $2 - Non-localised extension name.\n\nSee also:\n* {{msg-mw|api-help-source-unknown}}",
+       "api-help-source-unknown": "Displayed in the flags box to indicate that the source of an API module is not known.\n\nSee also:\n* {{msg-mw|api-help-source}}",
+       "api-help-license": "Displayed in the flags box to indicate the license of an API module.\n\nParameters:\n* $1 - Page to link to display the full license text\n* $2 - Display text for the link\n\nSee also:\n* {{msg-mw|api-help-license-noname}}\n* {{msg-mw|api-help-license-unknown}}",
+       "api-help-license-noname": "Displayed in the flags box to indicate the license of an API module, when the tag for the license is not known.\n\nParameters:\n* $1 - Page to link to display the full license text\n\nSee also:\n* {{msg-mw|api-help-license}}\n* {{msg-mw|api-help-license-unknown}}",
+       "api-help-license-unknown": "Displayed in the flags box to indicate that the license of the API module is not known.\n\nSee also:\n* {{msg-mw|api-help-license}}\n* {{msg-mw|api-help-license-noname}}",
        "api-help-help-urls": "{{optional}} Label for the API help urls section\n\nParameters:\n* $1 - Number of urls to be displayed",
        "api-help-parameters": "Label for the API help parameters section\n\nParameters:\n* $1 - Number of parameters to be displayed\n{{Identical|Parameter}}",
        "api-help-param-deprecated": "Displayed in the API help for any deprecated parameter\n{{Identical|Deprecated}}",
index e533d79..2ccfd92 100644 (file)
@@ -4,7 +4,8 @@
                        "Mahairod",
                        "Okras",
                        "Eakarpov",
-                       "Kaganer"
+                       "Kaganer",
+                       "Mariya"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на  [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
@@ -44,6 +45,9 @@
        "apihelp-query+recentchanges-example-simple": "Список последних изменений.",
        "apihelp-upload-example-url": "Загрузить через URL",
        "api-help-main-header": "Главный модуль",
+       "api-help-source": "Источник: $1",
+       "api-help-source-unknown": "Источник: <span class=\"apihelp-unknown\">unknown</span>",
+       "api-help-license": "Лицензия: [[$1|$2]]",
        "api-help-parameters": "Параметр{{PLURAL:$1||ы}}:",
        "api-help-param-deprecated": "Устаревший.",
        "api-help-param-required": "Этот параметр является обязательным.",
diff --git a/includes/api/i18n/ta.json b/includes/api/i18n/ta.json
new file mode 100644 (file)
index 0000000..c47d254
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AntanO"
+               ]
+       },
+       "api-help-source": "மூலம்: $1",
+       "api-help-license": "அனுமதி: [[$1|$2]]",
+       "api-help-license-noname": "அனுமதி: [[$1|இணைப்பைப் பார்]]"
+}
diff --git a/includes/api/i18n/yi.json b/includes/api/i18n/yi.json
new file mode 100644 (file)
index 0000000..c24d4ce
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "פוילישער"
+               ]
+       },
+       "api-help-source": "מקור: $1"
+}
index 722803b..1670966 100644 (file)
        "apihelp-query+allcategories-param-limit": "要返回多少个类别。",
        "apihelp-query+allcategories-param-prop": "要获取的属性:\n;size:在分类中添加页面数。\n;hidden:标记由_&#95;HIDDENCAT_&#95;隐藏的分类。",
        "apihelp-query+allcategories-example-size": "列出分类及其含有多少页面的信息。",
+       "apihelp-query+alldeletedrevisions-description": "列举由一位用户或在一个名字空间中所有已删除的修订。",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "只可以与<var>$3user</var>一起使用。",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能与<var>$3user</var>一起使用。",
        "apihelp-query+alldeletedrevisions-param-start": "枚举的起始时间戳。",
        "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
        "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
        "apihelp-query+allpages-param-limit": "返回的总计页面数。",
+       "apihelp-query+allpages-param-dir": "罗列所采用的方向。",
        "apihelp-query+allpages-example-B": "显示以字母<kbd>B</kbd>开头的页面的列表。",
        "apihelp-query+allpages-example-generator": "显示有关4个以字母<kbd>T</kbd>开头的页面的信息。",
        "apihelp-query+allpages-example-generator-revisions": "显示前2个以<kbd>Re</kbd>开头的非重定向页面的内容。",
        "apihelp-query+redirects-param-limit": "返回多少重定向。",
        "apihelp-query+redirects-example-simple": "获取至[[Project:首页]]的重定向列表",
        "apihelp-query+redirects-example-generator": "获取所有重定向至[[首页]]的信息",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "可能只能与单一页面使用(模式#2)。",
        "apihelp-query+revisions-example-content": "获得带内容的数据,用于标题<kbd>API</kbd>和<kbd>Main Page</kbd>的最近修订。",
        "apihelp-query+revisions-example-last5": "获取<kbd>Main Page</kbd>的最近5次修订。",
        "apihelp-query+revisions-example-first5": "获取<kbd>Main Page</kbd>的前5次修订。",
        "api-help-flag-writerights": "此模块需要写入权限。",
        "api-help-flag-mustbeposted": "此模块只允许POST请求。",
        "api-help-flag-generator": "此模块可作为发生器使用。",
+       "api-help-source": "来源:$1",
+       "api-help-source-unknown": "来源:<span class=\"apihelp-unknown\">未知</span>",
+       "api-help-license": "许可协议:[[$1|$2]]",
+       "api-help-license-noname": "许可协议:[[$1|参见链接]]",
+       "api-help-license-unknown": "许可协议:<span class=\"apihelp-unknown\">未知</span>",
        "api-help-parameters": "{{PLURAL:$1|参数}}:",
        "api-help-param-deprecated": "不推荐使用。",
        "api-help-param-required": "这个参数是必须的。",
index 82919c7..a55e25a 100644 (file)
@@ -1049,7 +1049,7 @@ class MessageCache {
                if ( !$title ) {
                        # It's not uncommon having a null $wgTitle in scripts. See r80898
                        # Create a ghost title in such case
-                       $title = Title::newFromText( 'Dwimmerlaik' );
+                       $title = Title::makeTitle( NS_SPECIAL, 'Badtitle/title not set in ' . __METHOD__ );
                }
 
                $this->mInParser = true;
diff --git a/includes/changetags/ChangeTagsList.php b/includes/changetags/ChangeTagsList.php
new file mode 100644 (file)
index 0000000..dd8bab9
--- /dev/null
@@ -0,0 +1,77 @@
+<?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 Change tagging
+ */
+
+/**
+ * Generic list for change tagging.
+ */
+abstract class ChangeTagsList extends RevisionListBase {
+       function __construct( IContextSource $context, Title $title, array $ids ) {
+               parent::__construct( $context, $title );
+               $this->ids = $ids;
+       }
+
+       /**
+        * Creates a ChangeTags*List of the requested type.
+        *
+        * @param string $typeName 'revision' or 'logentry'
+        * @param IContextSource $context
+        * @param Title $title
+        * @param array $ids
+        * @return ChangeTagsList An instance of the requested subclass
+        * @throws Exception If you give an unknown $typeName
+        */
+       public static function factory( $typeName, IContextSource $context,
+               Title $title, array $ids ) {
+
+               switch ( $typeName ) {
+                       case 'revision':
+                               $className = 'ChangeTagsRevisionList';
+                               break;
+                       case 'logentry':
+                               $className = 'ChangeTagsLogList';
+                               break;
+                       default:
+                               throw new Exception( "Class $className requested, but does not exist" );
+               }
+               return new $className( $context, $title, $ids );
+       }
+
+       /**
+        * Reload the list data from the master DB.
+        */
+       function reloadFromMaster() {
+               $dbw = wfGetDB( DB_MASTER );
+               $this->res = $this->doQuery( $dbw );
+       }
+
+       /**
+        * Add/remove change tags from all the items in the list.
+        *
+        * @param array $tagsToAdd
+        * @param array $tagsToRemove
+        * @param array $params
+        * @param string $reason
+        * @param User $user
+        * @return Status
+        */
+       abstract function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params,
+               $reason, $user );
+}
diff --git a/includes/changetags/ChangeTagsLogItem.php b/includes/changetags/ChangeTagsLogItem.php
new file mode 100644 (file)
index 0000000..565d159
--- /dev/null
@@ -0,0 +1,100 @@
+<?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 Change tagging
+ */
+
+/**
+ * Item class for a logging table row with its associated change tags.
+ * @todo Abstract out a base class for this and RevDelLogItem, similar to the
+ * RevisionItem class but specifically for log items.
+ * @since 1.25
+ */
+class ChangeTagsLogItem extends RevisionItemBase {
+       public function getIdField() {
+               return 'log_id';
+       }
+
+       public function getTimestampField() {
+               return 'log_timestamp';
+       }
+
+       public function getAuthorIdField() {
+               return 'log_user';
+       }
+
+       public function getAuthorNameField() {
+               return 'log_user_text';
+       }
+
+       public function canView() {
+               return LogEventsList::userCan( $this->row, Revision::DELETED_RESTRICTED, $this->list->getUser() );
+       }
+
+       public function canViewContent() {
+               return true; // none
+       }
+
+       /**
+        * @return string Comma-separated list of tags
+        */
+       public function getTags() {
+               return $this->row->ts_tags;
+       }
+
+       /**
+        * @return string A HTML <li> element representing this revision, showing
+        * change tags and everything
+        */
+       public function getHTML() {
+               $date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
+                       $this->row->log_timestamp, $this->list->getUser() ) );
+               $title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title );
+               $formatter = LogFormatter::newFromRow( $this->row );
+               $formatter->setContext( $this->list->getContext() );
+               $formatter->setAudience( LogFormatter::FOR_THIS_USER );
+
+               // Log link for this page
+               $loglink = Linker::link(
+                       SpecialPage::getTitleFor( 'Log' ),
+                       $this->list->msg( 'log' )->escaped(),
+                       array(),
+                       array( 'page' => $title->getPrefixedText() )
+               );
+               $loglink = $this->list->msg( 'parentheses' )->rawParams( $loglink )->escaped();
+               // User links and action text
+               $action = $formatter->getActionText();
+               // Comment
+               $comment = $this->list->getLanguage()->getDirMark() .
+                       $formatter->getComment();
+
+               if ( LogEventsList::isDeleted( $this->row, LogPage::DELETED_COMMENT ) ) {
+                       $comment = '<span class="history-deleted">' . $comment . '</span>';
+               }
+
+               $content = "$loglink $date $action $comment";
+               $attribs = array();
+               $tags = $this->getTags();
+               if ( $tags ) {
+                       list( $tagSummary, $classes ) = ChangeTags::formatSummaryRow( $tags, 'edittags' );
+                       $content .= " $tagSummary";
+                       $attribs['class'] = implode( ' ', $classes );
+               }
+               return Xml::tags( 'li', $attribs, $content );
+       }
+}
diff --git a/includes/changetags/ChangeTagsLogList.php b/includes/changetags/ChangeTagsLogList.php
new file mode 100644 (file)
index 0000000..fe80695
--- /dev/null
@@ -0,0 +1,89 @@
+<?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 Change tagging
+ */
+
+/**
+ * Stores a list of taggable log entries.
+ * @since 1.25
+ */
+class ChangeTagsLogList extends ChangeTagsList {
+       public function getType() {
+               return 'logentry';
+       }
+
+       /**
+        * @param DatabaseBase $db
+        * @return mixed
+        */
+       public function doQuery( $db ) {
+               $ids = array_map( 'intval', $this->ids );
+               $queryInfo = DatabaseLogEntry::getSelectQueryData();
+               $queryInfo['conds'] += array( 'log_id' => $ids );
+               $queryInfo['options'] += array( 'ORDER BY' => 'log_id DESC' );
+               ChangeTags::modifyDisplayQuery(
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
+                       $queryInfo['conds'],
+                       $queryInfo['join_conds'],
+                       $queryInfo['options']
+               );
+               return $db->select(
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
+                       $queryInfo['conds'],
+                       __METHOD__,
+                       $queryInfo['options'],
+                       $queryInfo['join_conds']
+               );
+       }
+
+       public function newItem( $row ) {
+               return new ChangeTagsLogItem( $this, $row );
+       }
+
+       /**
+        * Add/remove change tags from all the log entries in the list.
+        *
+        * @param array $tagsToAdd
+        * @param array $tagsToRemove
+        * @param array $params
+        * @param string $reason
+        * @param User $user
+        * @return Status
+        */
+       public function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params,
+               $reason, $user ) {
+
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+               for ( $this->reset(); $this->current(); $this->next() ) {
+                       // @codingStandardsIgnoreEnd
+                       $item = $this->current();
+                       $status = ChangeTags::updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
+                               null, null, $item->getId(), $params, $reason, $user );
+                       // Should only fail on second and subsequent times if the user trips
+                       // the rate limiter
+                       if ( !$status->isOK() ) {
+                               break;
+                       }
+               }
+
+               return $status;
+       }
+}
diff --git a/includes/changetags/ChangeTagsRevisionItem.php b/includes/changetags/ChangeTagsRevisionItem.php
new file mode 100644 (file)
index 0000000..e90a1b4
--- /dev/null
@@ -0,0 +1,58 @@
+<?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 Change tagging
+ */
+
+/**
+ * Item class for a live revision table row with its associated change tags.
+ * @since 1.25
+ */
+class ChangeTagsRevisionItem extends RevisionItem {
+       /**
+        * @return string Comma-separated list of tags
+        */
+       public function getTags() {
+               return $this->row->ts_tags;
+       }
+
+       /**
+        * @return string A HTML <li> element representing this revision, showing
+        * change tags and everything
+        */
+       public function getHTML() {
+               $difflink = $this->list->msg( 'parentheses' )
+                       ->rawParams( $this->getDiffLink() )->escaped();
+               $revlink = $this->getRevisionLink();
+               $userlink = Linker::revUserLink( $this->revision );
+               $comment = Linker::revComment( $this->revision );
+               if ( $this->isDeleted() ) {
+                       $revlink = "<span class=\"history-deleted\">$revlink</span>";
+               }
+
+               $content = "$difflink $revlink $userlink $comment";
+               $attribs = array();
+               $tags = $this->getTags();
+               if ( $tags ) {
+                       list( $tagSummary, $classes ) = ChangeTags::formatSummaryRow( $tags, 'edittags' );
+                       $content .= " $tagSummary";
+                       $attribs['class'] = implode( ' ', $classes );
+               }
+               return Xml::tags( 'li', $attribs, $content );
+       }
+}
diff --git a/includes/changetags/ChangeTagsRevisionList.php b/includes/changetags/ChangeTagsRevisionList.php
new file mode 100644 (file)
index 0000000..842d327
--- /dev/null
@@ -0,0 +1,99 @@
+<?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 Change tagging
+ */
+
+/**
+ * Stores a list of taggable revisions.
+ * @since 1.25
+ */
+class ChangeTagsRevisionList extends ChangeTagsList {
+       public function getType() {
+               return 'revision';
+       }
+
+       /**
+        * @param DatabaseBase $db
+        * @return mixed
+        */
+       public function doQuery( $db ) {
+               $ids = array_map( 'intval', $this->ids );
+               $queryInfo = array(
+                       'tables' => array( 'revision', 'user' ),
+                       'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ),
+                       'conds' => array(
+                               'rev_page' => $this->title->getArticleID(),
+                               'rev_id' => $ids,
+                       ),
+                       'options' => array( 'ORDER BY' => 'rev_id DESC' ),
+                       'join_conds' => array(
+                               'page' => Revision::pageJoinCond(),
+                               'user' => Revision::userJoinCond(),
+                       ),
+               );
+               ChangeTags::modifyDisplayQuery(
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
+                       $queryInfo['conds'],
+                       $queryInfo['join_conds'],
+                       $queryInfo['options']
+               );
+               return $db->select(
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
+                       $queryInfo['conds'],
+                       __METHOD__,
+                       $queryInfo['options'],
+                       $queryInfo['join_conds']
+               );
+       }
+
+       public function newItem( $row ) {
+               return new ChangeTagsRevisionItem( $this, $row );
+       }
+
+       /**
+        * Add/remove change tags from all the revisions in the list.
+        *
+        * @param array $tagsToAdd
+        * @param array $tagsToRemove
+        * @param array $params
+        * @param string $reason
+        * @param User $user
+        * @return Status
+        */
+       public function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params,
+               $reason, $user ) {
+
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+               for ( $this->reset(); $this->current(); $this->next() ) {
+                       // @codingStandardsIgnoreEnd
+                       $item = $this->current();
+                       $status = ChangeTags::updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
+                               null, $item->getId(), null, $params, $reason, $user );
+                       // Should only fail on second and subsequent times if the user trips
+                       // the rate limiter
+                       if ( !$status->isOK() ) {
+                               break;
+                       }
+               }
+
+               return $status;
+       }
+}
index cbd8be5..0bef28a 100644 (file)
@@ -1226,13 +1226,10 @@ abstract class DatabaseBase implements IDatabase {
         * @throws DBQueryError
         */
        public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
-               # Ignore errors during error handling to avoid infinite recursion
-               $ignore = $this->ignoreErrors( true );
                ++$this->mErrorCount;
 
-               if ( $ignore || $tempIgnore ) {
+               if ( $this->ignoreErrors() || $tempIgnore ) {
                        wfDebug( "SQL ERROR (ignored): $error\n" );
-                       $this->ignoreErrors( $ignore );
                } else {
                        $sql1line = mb_substr( str_replace( "\n", "\\n", $sql ), 0, 5 * 1024 );
                        wfLogDBError(
@@ -3324,41 +3321,40 @@ abstract class DatabaseBase implements IDatabase {
         * @return bool
         */
        public function deadlockLoop() {
-               $this->begin( __METHOD__ );
                $args = func_get_args();
                $function = array_shift( $args );
-               $oldIgnore = $this->ignoreErrors( true );
                $tries = self::DEADLOCK_TRIES;
-
                if ( is_array( $function ) ) {
                        $fname = $function[0];
                } else {
                        $fname = $function;
                }
 
-               do {
-                       $retVal = call_user_func_array( $function, $args );
-                       $error = $this->lastError();
-                       $errno = $this->lastErrno();
-                       $sql = $this->lastQuery();
+               $this->begin( __METHOD__ );
 
-                       if ( $errno ) {
+               $e = null;
+               do {
+                       try {
+                               $retVal = call_user_func_array( $function, $args );
+                               break;
+                       } catch ( DBQueryError $e ) {
+                               $error = $this->lastError();
+                               $errno = $this->lastErrno();
+                               $sql = $this->lastQuery();
                                if ( $this->wasDeadlock() ) {
-                                       # Retry
+                                       // Retry after a randomized delay
                                        usleep( mt_rand( self::DEADLOCK_DELAY_MIN, self::DEADLOCK_DELAY_MAX ) );
                                } else {
-                                       $this->reportQueryError( $error, $errno, $sql, $fname );
+                                       // Throw the error back up
+                                       throw $e;
                                }
                        }
-               } while ( $this->wasDeadlock() && --$tries > 0 );
-
-               $this->ignoreErrors( $oldIgnore );
+               } while ( --$tries > 0 );
 
                if ( $tries <= 0 ) {
+                       // Too many deadlocks; give up
                        $this->rollback( __METHOD__ );
-                       $this->reportQueryError( $error, $errno, $sql, $fname );
-
-                       return false;
+                       throw $e;
                } else {
                        $this->commit( __METHOD__ );
 
@@ -3529,7 +3525,11 @@ abstract class DatabaseBase implements IDatabase {
                if ( !$this->mTrxLevel ) {
                        $this->begin( $fname );
                        $this->mTrxAutomatic = true;
-                       $this->mTrxAutomaticAtomic = true;
+                       // If DBO_TRX is set, a series of startAtomic/endAtomic pairs will result
+                       // in all changes being in one transaction to keep requests transactional.
+                       if ( !$this->getFlag( DBO_TRX ) ) {
+                               $this->mTrxAutomaticAtomic = true;
+                       }
                }
 
                $this->mTrxAtomicLevels->push( $fname );
@@ -4332,7 +4332,7 @@ abstract class DatabaseBase implements IDatabase {
         * @return string
         */
        public function decodeExpiry( $expiry, $format = TS_MW ) {
-               return ( $expiry == '' || $expiry == $this->getInfinity() )
+               return ( $expiry == '' || $expiry == 'infinity' || $expiry == $this->getInfinity() )
                        ? 'infinity'
                        : wfTimestamp( $format, $expiry );
        }
index 3d0ed86..9287f7a 100644 (file)
@@ -530,10 +530,12 @@ class DatabasePostgres extends DatabaseBase {
                                return;
                        }
                }
-               /* Transaction stays in the ERROR state until rolledback */
+               /* Transaction stays in the ERROR state until rolled back */
                if ( $this->mTrxLevel ) {
+                       $ignore = $this->ignoreErrors( true );
                        $this->rollback( __METHOD__ );
-               };
+                       $this->ignoreErrors( $ignore );
+               }
                parent::reportQueryError( $error, $errno, $sql, $fname, false );
        }
 
index d9584e1..bc17911 100644 (file)
@@ -214,7 +214,7 @@ class LoadBalancer {
         * @return bool|int|string
         */
        public function getReaderIndex( $group = false, $wiki = false ) {
-               global $wgReadOnly, $wgDBtype;
+               global $wgDBtype;
 
                # @todo FIXME: For now, only go through all this for mysql databases
                if ( $wgDBtype != 'mysql' ) {
@@ -258,7 +258,7 @@ class LoadBalancer {
                # meets our criteria
                $currentLoads = $nonErrorLoads;
                while ( count( $currentLoads ) ) {
-                       if ( $wgReadOnly || $this->mAllowLagged || $laggedSlaveMode ) {
+                       if ( $this->mAllowLagged || $laggedSlaveMode ) {
                                $i = ArrayUtils::pickRandom( $currentLoads );
                        } else {
                                $i = false;
@@ -277,8 +277,6 @@ class LoadBalancer {
                                if ( $i === false && count( $currentLoads ) != 0 ) {
                                        # All slaves lagged. Switch to read-only mode
                                        wfDebugLog( 'replication', "All slaves lagged. Switch to read-only mode" );
-                                       $wgReadOnly = 'The database has been automatically locked ' .
-                                               'while the slave database servers catch up to the master';
                                        $i = ArrayUtils::pickRandom( $currentLoads );
                                        $laggedSlaveMode = true;
                                }
@@ -330,6 +328,10 @@ class LoadBalancer {
                        }
                        if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group === false ) {
                                $this->mReadIndex = $i;
+                               # Record if the generic reader index is in "lagged slave" mode
+                               if ( $laggedSlaveMode ) {
+                                       $this->mLaggedSlaveMode = true;
+                               }
                        }
                        $serverName = $this->getServerName( $i );
                        wfDebug( __METHOD__ . ": using server $serverName for group '$group'\n" );
@@ -1096,9 +1098,12 @@ class LoadBalancer {
        }
 
        /**
-        * @return bool
+        * @return bool Whether the generic connection for reads is highly "lagged"
         */
        public function getLaggedSlaveMode() {
+               # Get a generic reader connection
+               $this->getConnection( DB_SLAVE );
+
                return $this->mLaggedSlaveMode;
        }
 
index 9cf104a..edaef4a 100644 (file)
@@ -20,6 +20,7 @@
 
 namespace MediaWiki\Logger;
 
+use DateTimeZone;
 use MWDebug;
 use Psr\Log\AbstractLogger;
 use Psr\Log\LogLevel;
index b3078b9..f6699ec 100644 (file)
@@ -47,7 +47,7 @@ class LoggerFactory {
 
        /**
         * Service provider.
-        * @var Spi $spi
+        * @var \MediaWiki\Logger\Spi $spi
         */
        private static $spi;
 
@@ -56,7 +56,7 @@ class LoggerFactory {
         * Register a service provider to create new \Psr\Log\LoggerInterface
         * instances.
         *
-        * @param Spi $provider Provider to register
+        * @param \MediaWiki\Logger\Spi $provider Provider to register
         */
        public static function registerProvider( Spi $provider ) {
                self::$spi = $provider;
@@ -71,7 +71,7 @@ class LoggerFactory {
         * Spi registration. $wgMWLoggerDefaultSpi is expected to be an
         * array usable by ObjectFactory::getObjectFromSpec() to create a class.
         *
-        * @return Spi
+        * @return \MediaWiki\Logger\Spi
         * @see registerProvider()
         * @see ObjectFactory::getObjectFromSpec()
         */
index c78b0dc..0476d0f 100644 (file)
@@ -100,56 +100,6 @@ class MWLoggerLegacyLogger extends \MediaWiki\Logger\LegacyLogger {
 class MWLoggerLegacySpi extends \MediaWiki\Logger\LegacySpi {
 }
 
-/**
- * Backwards compatibility stub for usage from before the introduction of
- * the MediaWiki\Logger namespace.
- *
- * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyHandler
- * @todo This class should be removed before the 1.25 final release.
- */
-class MWLoggerMonologHandler extends \MediaWiki\Logger\Monolog\LegacyHandler {
-}
-
-/**
- * Backwards compatibility stub for usage from before the introduction of
- * the MediaWiki\Logger namespace.
- *
- * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyFormatter
- * @todo This class should be removed before the 1.25 final release.
- */
-class MWLoggerMonologLegacyFormatter extends \MediaWiki\Logger\Monolog\LegacyFormatter {
-}
-
-/**
- * Backwards compatibility stub for usage from before the introduction of
- * the MediaWiki\Logger namespace.
- *
- * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\WikiProcessor
- * @todo This class should be removed before the 1.25 final release.
- */
-class MWLoggerMonologProcessor extends \MediaWiki\Logger\Monolog\WikiProcessor {
-}
-
-/**
- * Backwards compatibility stub for usage from before the introduction of
- * the MediaWiki\Logger namespace.
- *
- * @deprecated since 1.25 Use \MediaWiki\Logger\MonologSpi
- * @todo This class should be removed before the 1.25 final release.
- */
-class MWLoggerMonologSpi extends \MediaWiki\Logger\MonologSpi {
-}
-
-/**
- * Backwards compatibility stub for usage from before the introduction of
- * the MediaWiki\Logger namespace.
- *
- * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\SyslogHandler
- * @todo This class should be removed before the 1.25 final release.
- */
-class MWLoggerMonologSyslogHandler extends \MediaWiki\Logger\Monolog\SyslogHandler {
-}
-
 /**
  * Backwards compatibility stub for usage from before the introduction of
  * the MediaWiki\Logger namespace.
diff --git a/includes/debug/logger/monolog/Shims.php b/includes/debug/logger/monolog/Shims.php
new file mode 100644 (file)
index 0000000..f250713
--- /dev/null
@@ -0,0 +1,69 @@
+<?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
+ */
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyHandler
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologHandler extends \MediaWiki\Logger\Monolog\LegacyHandler {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyFormatter
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologLegacyFormatter extends \MediaWiki\Logger\Monolog\LegacyFormatter {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\WikiProcessor
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologProcessor extends \MediaWiki\Logger\Monolog\WikiProcessor {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\MonologSpi
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologSpi extends \MediaWiki\Logger\MonologSpi {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\SyslogHandler
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologSyslogHandler extends \MediaWiki\Logger\Monolog\SyslogHandler {
+}
index 97a17c3..3c77238 100644 (file)
@@ -128,7 +128,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
         */
        public static function cacheUpdate( $dbw ) {
                global $wgActiveUserDays;
-               $dbr = wfGetDB( DB_SLAVE, array( 'SpecialStatistics', 'vslow' ) );
+               $dbr = wfGetDB( DB_SLAVE, 'vslow' );
                # Get non-bot users than did some recent action other than making accounts.
                # If account creation is included, the number gets inflated ~20+ fold on enwiki.
                $activeUsers = $dbr->selectField(
index 5823b2e..49164e3 100644 (file)
@@ -111,39 +111,40 @@ abstract class SqlDataUpdate extends DataUpdate {
                        return;
                }
 
-               /**
-                * Determine which pages need to be updated
-                * This is necessary to prevent the job queue from smashing the DB with
-                * large numbers of concurrent invalidations of the same page
-                */
-               $now = $this->mDb->timestamp();
-               $ids = array();
-               $res = $this->mDb->select( 'page', array( 'page_id' ),
-                       array(
-                               'page_namespace' => $namespace,
-                               'page_title' => $dbkeys,
-                               'page_touched < ' . $this->mDb->addQuotes( $now )
-                       ), __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $ids[] = $row->page_id;
-               }
-
-               if ( $ids === array() ) {
-                       return;
-               }
-
-               /**
-                * Do the update
-                * We still need the page_touched condition, in case the row has changed since
-                * the non-locking select above.
-                */
-               $this->mDb->update( 'page', array( 'page_touched' => $now ),
-                       array(
-                               'page_id' => $ids,
-                               'page_touched < ' . $this->mDb->addQuotes( $now )
-                       ), __METHOD__
-               );
+               $dbw = $this->mDb;
+               $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $namespace, $dbkeys ) {
+                       /**
+                        * Determine which pages need to be updated
+                        * This is necessary to prevent the job queue from smashing the DB with
+                        * large numbers of concurrent invalidations of the same page
+                        */
+                       $now = $dbw->timestamp();
+                       $ids = $dbw->selectFieldValues( 'page',
+                               'page_id',
+                               array(
+                                       'page_namespace' => $namespace,
+                                       'page_title' => $dbkeys,
+                                       'page_touched < ' . $dbw->addQuotes( $now )
+                               ),
+                               __METHOD__
+                       );
+
+                       if ( $ids === array() ) {
+                               return;
+                       }
+
+                       /**
+                        * Do the update
+                        * We still need the page_touched condition, in case the row has changed since
+                        * the non-locking select above.
+                        */
+                       $dbw->update( 'page',
+                               array( 'page_touched' => $now ),
+                               array(
+                                       'page_id' => $ids,
+                                       'page_touched < ' . $dbw->addQuotes( $now )
+                               ), __METHOD__
+                       );
+               } );
        }
 }
index ed0f3c2..c50b6c8 100644 (file)
@@ -150,22 +150,24 @@ class MWExceptionHandler {
         * @since 1.25
         * @param Exception $e
         */
-       public static function handleException( $e ) {
-               global $wgFullyInitialised;
+       public static function handleException( Exception $e ) {
+               try {
+                       // Rollback DBs to avoid transaction notices. This may fail
+                       // to rollback some DB due to connection issues or exceptions.
+                       // However, any sane DB driver will rollback implicitly anyway.
+                       self::rollbackMasterChangesAndLog( $e );
+               } catch ( DBError $e2 ) {
+                       // If the DB is unreacheable, rollback() will throw an error
+                       // and the error report() method might need messages from the DB,
+                       // which would result in an exception loop. PHP may escalate such
+                       // errors to "Exception thrown without a stack frame" fatals, but
+                       // it's better to be explicit here.
+                       self::logException( $e2 );
+               }
 
-               self::rollbackMasterChangesAndLog( $e );
                self::logException( $e );
                self::report( $e );
 
-               // Final cleanup
-               if ( $wgFullyInitialised ) {
-                       try {
-                               // uses $wgRequest, hence the $wgFullyInitialised condition
-                               wfLogProfilingData();
-                       } catch ( Exception $e ) {
-                       }
-               }
-
                // Exit value should be nonzero for the benefit of shell jobs
                exit( 1 );
        }
index 12ef91a..702f850 100644 (file)
@@ -934,6 +934,7 @@ abstract class DatabaseUpdater {
                }
                $blobStore = new MessageBlobStore();
                $blobStore->clear();
+               $this->db->delete( 'module_deps', '*', __METHOD__ );
                $this->output( "done.\n" );
        }
 
index b40b3f1..f9c885d 100644 (file)
@@ -1492,16 +1492,31 @@ abstract class Installer {
                 */
                global $wgAutoloadClasses;
                $wgAutoloadClasses = array();
+               $queue = array();
 
                require "$IP/includes/DefaultSettings.php";
 
                foreach ( $exts as $e ) {
-                       require_once "$IP/extensions/$e/$e.php";
+                       if ( file_exists( "$IP/extensions/$e/extension.json" ) ) {
+                               $queue["$IP/extensions/$e/extension.json"] = 1;
+                       } else {
+                               require_once "$IP/extensions/$e/$e.php";
+                       }
                }
 
+               $registry = new ExtensionRegistry();
+               $data = $registry->readFromQueue( $queue );
+               $wgAutoloadClasses += $data['autoload'];
+
                $hooksWeWant = isset( $wgHooks['LoadExtensionSchemaUpdates'] ) ?
                        $wgHooks['LoadExtensionSchemaUpdates'] : array();
 
+               if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
+                       $hooksWeWant = array_merge_recursive(
+                               $hooksWeWant,
+                               $data['globals']['wgHooks']['LoadExtensionSchemaUpdates']
+                       );
+               }
                // Unset everyone else's hooks. Lord knows what someone might be doing
                // in ParserFirstCallInit (see bug 27171)
                $GLOBALS['wgHooks'] = array( 'LoadExtensionSchemaUpdates' => $hooksWeWant );
diff --git a/includes/installer/i18n/azb.json b/includes/installer/i18n/azb.json
new file mode 100644 (file)
index 0000000..baf4f6d
--- /dev/null
@@ -0,0 +1,27 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mousa"
+               ]
+       },
+       "config-desc": "مئدیاویکی قوروجوسو",
+       "config-title": "مئدیاویکی $1 قورماغی",
+       "config-information": "بیلگیلر",
+       "config-localsettings-key": "یوکسلتمک کلیدی:",
+       "config-localsettings-badkey": "وئردیگینیز کیلید دوغرو دئییل.",
+       "config-your-language": "دیلینیز:",
+       "config-wiki-language": "ویکی دیلی:",
+       "config-back": "→ دالی",
+       "config-continue": "سونرا ←",
+       "config-page-language": "دیل",
+       "config-page-welcome": "مئدیاویکی‌یه خوش گلدینیز!",
+       "config-page-name": "آد",
+       "config-page-options": "سئچیملر",
+       "config-page-install": "قور",
+       "config-page-readme": "منی اوخو",
+       "config-env-php": "PHP $1 قورولوبدور.",
+       "config-env-hhvm": "HHVM $1 قورولوبدور.",
+       "config-help": "یاردیم",
+       "config-help-tooltip": "گئنیشلتمک اوچون کلیک ائدین",
+       "config-nofile": "«$1» فایلی تاپیلانمادی. سیلینیبدیرمی؟"
+}
index b45b8f2..b348a1b 100644 (file)
        "config-restart": "Ja, erneut starten",
        "config-welcome": "=== Prüfung der Installationsumgebung ===\nDie Basisprüfungen werden jetzt durchgeführt, um festzustellen, ob die Installationsumgebung für MediaWiki geeignet ist.\nNotiere diese Informationen und gib sie an, sofern du Hilfe beim Installieren benötigst.",
        "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine <doclink href=Copying>Kopie der GNU General Public License</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
-       "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzeranleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratorenanleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* <doclink href=Readme>Lies mich</doclink>\n* <doclink href=ReleaseNotes>Versionsinformationen</doclink>\n* <doclink href=Copying>Lizenzbestimmungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisierung</doclink>",
+       "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzer­anleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratoren­anleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* <doclink href=Readme>Lies mich</doclink>\n* <doclink href=ReleaseNotes>Versions­informationen</doclink>\n* <doclink href=Copying>Lizenz­bestimmungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisierung</doclink>",
        "config-env-good": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann installiert werden.",
        "config-env-bad": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann nicht installiert werden.",
        "config-env-php": "Die Skriptsprache „PHP“ ($1) ist installiert.",
        "config-env-hhvm": "HHVM $1 ist installiert.",
-       "config-unicode-using-utf8": "Zur Unicode-Normalisierung wird Brion Vibbers <code>utf8_normalize.so</code> eingesetzt.",
        "config-unicode-using-intl": "Zur  Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.",
        "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
        "config-unicode-update-warning": "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek des [http://site.icu-project.org/ ICU-Projekts].\nDiese sollte [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.",
index 27b930a..e163a9b 100644 (file)
@@ -4,7 +4,8 @@
                        "Glavkos",
                        "Protnet",
                        "ZaDiak",
-                       "Astralnet"
+                       "Astralnet",
+                       "Geraki"
                ]
        },
        "config-desc": "Το πρόγραμμα εγκατάστασης για το MediaWiki",
        "config-install-interwiki-list": "Αδυναμία ανάγνωσης του αρχείου <code>interwiki.list</code>.",
        "config-help": "βοήθεια",
        "mainpagetext": "<strong>To MediaWiki εγκαταστάθηκε με επιτυχία.</strong>",
-       "mainpagedocfooter": "ΠεÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 Ï\80ληÏ\81οÏ\86οÏ\81ίεÏ\82 Ï\83Ï\87εÏ\84ικά Î¼Îµ Ï\84η Ï\87Ï\81ήÏ\83η ÎºÎ±Î¹ Î¼Îµ Ï\84η Ï\81Ï\8dθμιÏ\83η Ï\80αÏ\81αμέÏ\84Ï\81Ï\89ν Î¸Î± Î²Ï\81είÏ\84ε Ï\83Ï\84οÏ\85Ï\82 Ï\83Ï\85νδέÏ\83μοÏ\85Ï\82: [//meta.wikimedia.org/wiki/MediaWiki_localisation Î\9fδηγίεÏ\82 Î³Î¹Î± Ï\84Ï\81οÏ\80οÏ\80οίηÏ\83η Ï\84οÏ\85 Ï\80εÏ\81ιβάλλονÏ\84οÏ\82 ÎµÏ\81γαÏ\83ίαÏ\82] ÎºÎ±Î¹ [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Î\95γÏ\87ειÏ\81ίδιο Ï\87Ï\81ήÏ\83Ï\84η]."
+       "mainpagedocfooter": "ΣÏ\85μβοÏ\85λεÏ\85Ï\84είÏ\84ε Ï\84ο [//meta.wikimedia.org/wiki/Help:Contents Î\95γÏ\87ειÏ\81ίδιο Ï\87Ï\81ήÏ\83Ï\84η] Î³Î¹Î± Ï\80ληÏ\81οÏ\86οÏ\81ίεÏ\82 Ï\83Ï\87εÏ\84ικά Î¼Îµ Ï\84η Ï\87Ï\81ήÏ\83η Ï\84οÏ\85 Î»Î¿Î³Î¹Ï\83μικοÏ\8d wiki.\n\n== Î\9eεκινÏ\8eνÏ\84αÏ\82 ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Î\9aαÏ\84άλογοÏ\82 Ï\81Ï\85θμίÏ\83εÏ\89ν]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Î\9bίÏ\83Ï\84α Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 ÎµÎºÎ´Ï\8cÏ\83εÏ\89ν MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Î¤Î¿Ï\80ικοÏ\80οιήÏ\83Ï\84ε Ï\84ο MediaWiki Î³Î¹Î± Ï\84η Î³Î»Ï\8eÏ\83Ï\83α Ï\83αÏ\82]"
 }
index 10ca898..f7160b6 100644 (file)
@@ -52,7 +52,6 @@
        "config-env-bad": "환경이 확인되었습니다.\n미디어위키를 설치할 수 없습니다.",
        "config-env-php": "PHP $1이(가) 설치되어 있습니다.",
        "config-env-hhvm": "HHMV $1이(가) 설치되어 있습니다.",
-       "config-unicode-using-utf8": "유니코드 정규화에 Brion Vibber의 utf8_normalize.so를 사용합니다.",
        "config-unicode-using-intl": "유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.",
        "config-unicode-pure-php-warning": "<strong>경고</strong>: 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보셔야 합니다.",
        "config-unicode-update-warning": "<strong>경고</strong>: 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.",
index 367db40..113c7ab 100644 (file)
        "config-env-bad": "De Ömjävung es jeprööf.\nDo kanns MediaWiki nit opsäze.",
        "config-env-php": "PHP $1 es doh.",
        "config-env-hhvm": "HHVM $1 es enschtalleerd.",
-       "config-unicode-using-utf8": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer däm <i lang=\"en\">Brion Vibber</i> sing Projramm <code lang=\"en\">utf8_normalize.so</code> nämme.",
        "config-unicode-using-intl": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] nämme.",
        "config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] för et <i lang=\"en\">Unicode</i>-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, <i lang=\"en\">PHP</i>-Projrammshtöck doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch die Sigg övver et [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations <i lang=\"en\">Unicode</i>-Nommaliseere] (es op Änglesch) aanloore.",
        "config-unicode-update-warning": "'''Opjepaß:''' Dat Projramm för der <i lang=\"en\">Unicode</i> zo normaliseere boud em Momang op en  ählter Version vun dä Bibliothek vum [http://site.icu-project.org/ ICU-Projäk] op.\nDoht di [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations op der neuste Shtand bränge], wann auf dat Wiki em Äänz <i lang=\"en\">Unicode</i> bruche sull.",
-       "config-no-db": "Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.\nMer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.\nMer künne met heh dä Daatebangke ömjonn: $1.\n\nWann De nit om eijene Rääshner bes, moß De Dinge <i lang=\"en\">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.\nWann de PHP sellver övversaz häs, donn e Zohjangsprojramm för en Daatebangk enbenge, för e Beishpell met: <code  lang=\"en\">./configure --with-mysql</code>.\nWann De PHP uss enem <i lang=\"en\">Debian</i> udder <i lang=\"en\">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang=\"en\">php5-mysql</code> op Dinge Räschner bränge.",
+       "config-no-db": "Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.\nMer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.\nMer künne met heh dä {{PLURAL:$2|Daatebangk|Daatebangke|Daatebangk}} ömjonn: $1.\n\nWann De nit om eijene Rääshner bes, moß De Dinge <i lang=\"en\">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.\nWann de PHP sellver övversaz häs, donn e Zohjangsprojramm för en Daatebangk enbenge, för e Beishpell met: <code  lang=\"en\">./configure --with-mysql</code>.\nWann De PHP uss enem <i lang=\"en\">Debian</i> udder <i lang=\"en\">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang=\"en\">php5-mysql</code> op Dinge Räschner bränge.",
        "config-outdated-sqlite": "'''Opjepaß:''' <i lang=\"en\">SQLite</i> $1 es enschtaleert. Avver MediaWiki bruch <i lang=\"en\">SQLite</i> $2 udder hühter. <i lang=\"en\">SQLite</i> kann dröm nit enjesaz wääde.",
        "config-no-fts3": "'''Opjepaß:''' De Projramme vum <i lang=\"en\">SQLite</i> sin der ohne et [//sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.",
        "config-register-globals-error": "<strong>Fähler: dem PHP sing Enschtällong <code>[http://php.net/register_globals register_globals]</code> es aanjeschalldt.\nSe moß ußjeschalldt sin, domet mer heh wigger maache kann.</strong>\nLoor op dä Sigg [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] wi mer se ußschallde kann.",
index 2dccc50..ac54d87 100644 (file)
@@ -37,7 +37,7 @@
        "config-page-copying": "Kopéieren",
        "config-page-upgradedoc": "Aktualiséieren",
        "config-page-existingwiki": "Wiki déi et gëtt",
-       "config-help-restart": "Wëllt dir all gespäichert Donnéeë läschen déi dir bis elo aginn hutt an den Installatiounsprozess nei starten?",
+       "config-help-restart": "Wëllt Dir all gespäichert Donnéeë läschen déi Dir bis elo aginn hutt an den Installatiounsprozess nei starten?",
        "config-restart": "Jo, neistarten",
        "config-welcome": "=== Iwwerpréifung vum Installatiounsenvironnement ===\nEt gi grondsätzlech Iwwerpréifunge gemaach fir ze kucken ob den Environnment gëeegent ass fir MediaWiki z'installéieren.\nDir sollt d'Resultater vun dëser Iwwerpréifung ugi wann Dir während der Installatioun Hëllef frot wéi Dir D'Installatioun ofschléisse kënnt.",
        "config-sidebar": "* [//www.mediawiki.org MediaWiki Haaptsäit]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Benotzerguide]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guide fir Administrateuren]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Liest dëst</doclink>\n* <doclink href=ReleaseNotes>Informatioune vun der aktueller Versioun</doclink>\n* <doclink href=Copying>Lizenzbedingungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisatioun</doclink>",
@@ -45,7 +45,6 @@
        "config-env-bad": "Den Environnement gouf iwwerpréift.\nDir kënnt MediWiki net installéieren.",
        "config-env-php": "PHP $1 ass installéiert.",
        "config-env-hhvm": "HHVM $1 ass installéiert.",
-       "config-unicode-using-utf8": "Fir d'Unicode-Normalisatioun gëtt dem Brion Vibber säin <code>utf8_normalize.so</code> benotzt.",
        "config-no-db": "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.\n{{PLURAL:$2|Dësn Datebank-Typ gëtt|Dës Datebank-Type ginn}} ënnerstëtzt: $1.\n\nWann Dir PHP selwer compiléiert hutt, da rekonfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir <code>./configure --with-mysql</code> benotzt.\nWann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.",
        "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.",
        "config-memory-bad": "'''Opgepasst:''' De Parameter <code>memory_limit</code> vu PHP ass $1.\nDat ass wahrscheinlech ze niddreg.\nD'Installatioun kéint net funktionéieren.",
index 836e0fc..b3d40d2 100644 (file)
        "config-your-language": "तपाईंको भाषा:",
        "config-your-language-help": "इन्स्टल गर्दा उपयोग गर्ने भाषा छान्नुहोस् ।",
        "config-wiki-language": "विकि भाषाहरू",
+       "config-back": "← पछाडी",
+       "config-continue": "जारी राख्ने →",
+       "config-page-language": "भाषा",
+       "config-page-welcome": "मिडीयाविकिमा तपाईंलाई स्वागत छ!",
+       "config-page-dbconnect": "डेटाबेससँग सम्बन्ध बनाउने",
        "config-page-name": "नाम",
        "config-page-options": "विकल्पहरु",
        "config-page-install": "स्थापना गर्ने",
@@ -20,6 +25,7 @@
        "config-page-restart": "स्थापना फेरि सुरु गर्ने",
        "config-page-readme": "पढ्नुहोस्",
        "config-page-releasenotes": "प्रकाशन टिप्पणी",
+       "config-help": "सहायता",
        "config-help-tooltip": "विस्तार गर्न क्लीक गर्नुहोस्",
        "mainpagetext": "'''मीडिया सफलतापूर्वक कम्प्यूटरमा स्थापित भयो ।'''",
        "mainpagedocfooter": " विकी अनुप्रयोग कसरी प्रयोग गर्ने भन्ने जानकारीको लागि  [//meta.wikimedia.org/wiki/Help:Contents प्रयोगकर्ता सहायता] हेर्नुहोस्\n\n== सुरू गर्नको लागि  ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings विन्यास सेटिङ्ग सूची]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ मेडियाविकि सामान्य प्रश्नका उत्तरहरु]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मेडियाविकि सुचना मेलिङ्ग सूची]"
index 132644d..003507f 100644 (file)
@@ -14,7 +14,8 @@
                        "Rodrigo codignoli",
                        "Tuliouel",
                        "Marcos dias de oliveira",
-                       "Fasouzafreitas"
+                       "Fasouzafreitas",
+                       "TheEduGobi"
                ]
        },
        "config-desc": "O instalador do MediaWiki",
        "config-env-bad": "O ambiente foi verificado.\nVocê não pode instalar o MediaWiki.",
        "config-env-php": "O PHP $1 está instalado.",
        "config-env-hhvm": "HHVM $1 está instalado.",
-       "config-unicode-using-utf8": "Usando o utf8_normalize.so, de Brion Vibber, para a normalização Unicode.",
        "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "<strong>Aviso</strong>: A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode, abortando e passando para a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalização Unicode].",
        "config-unicode-update-warning": "<strong>Aviso:</strong> A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [//www.site.icu-project.org/projeto ICU].\nVocê deve [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizar] se você tem quaisquer preocupações com o uso do Unicode.",
        "config-no-db": "Não foi possível encontrar um driver de banco de dados adequado! É necessário instalar um driver de banco de dados para o PHP.\nSão suportados os seguintes tipos de bancos de dados: $1.\n\nSe você mesmo tiver compilado o PHP, reconfigure-o com um cliente de banco de dados ativado usando, por exemplo <code>./configure --with-mysqli</code>.\nSe você instalou o PHP a partir de um pacote do Debian ou do Ubuntu, então será também necessário instalar, por exemplo, o pacote <code>php5-mysql</code>.",
        "config-outdated-sqlite": "<strong>Aviso:</strong> você tem o SQLite versão $1, que é menor do que a versão mínima necessária $2. O SQLite não estará disponível.",
        "config-no-fts3": "<strong>Aviso</strong> O SQLite foi compilado sem o [//sqlite.org/fts3.html módulo FTS3], as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
+       "config-register-globals-error": "<strong>Erro: a opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.\nA mesma deve ser desativada para continuar a instalação.</strong>\nVeja [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obter ajuda com isto.",
+       "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está ativa!</strong>\nEsta opção corrompe a entrada de dados imprevisivelmente.\nVocê não pode instalar ou usar a MediaWiki a menos que esta opção seja desativada.",
        "config-magic-quotes-runtime": "<strong>Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está ativada!</strong>\nEsta opção causa corrupção dos dados de entrada de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.",
        "config-magic-quotes-sybase": "<strong>Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativada!</strong>\nEsta opção corrompe os dados de entrada de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.",
        "config-mbstring": "<strong>Erro fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativada!</strong>\nEsta opção causa erros e pode corromper os dados de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.",
@@ -77,6 +79,7 @@
        "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
        "config-memory-bad": "<strong>Aviso:</strong> A configuração <code>memory_limit</code> do PHP é $1.\nIsso provavelmente é muito baixo.\nA instalação pode falhar!",
        "config-ctype": "<strong>Erro fatal:</strong> O PHP deve ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
+       "config-iconv": "<strong>Fatal:</strong> O PHP deve ser compilado com suporte para a [http://www.php.net/manual/en/iconv.installation.php extensão iconv].",
        "config-json": "<strong>Erro fatal:</strong> O PHP foi compilado sem suporte a JSON.\nVocê deve instalar a extensão PHP JSON ou a extensão [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar o MediaWiki.\n* A extensão JSON do PHP já está incluída no Red Hat Enterprise Linux (CentOS) 5 e 6, mas deve ser habilitado no <code>/etc/php.ini</code> ou no <code>/etc/php.d/json.ini</code>.\n* Algumas distribuições Linux lançadas após maio de 2013 omitem a extensão PHP, oferecendo em seu lugar a extensão PECL como parte do pacote <code>php5-json</code> ou do <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado",
        "config-apc": "[http://www.php.net/apc APC] está instalado",
index d5f47ff..9e85e40 100644 (file)
@@ -314,12 +314,7 @@ class JobQueueDB extends JobQueue {
                                }
                                JobQueue::incrStats( 'job-pop', $this->type, 1, $this->wiki );
                                // Get the job object from the row...
-                               $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
-                               if ( !$title ) {
-                                       $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
-                                       wfDebug( "Row has invalid title '{$row->job_title}'.\n" );
-                                       continue; // try again
-                               }
+                               $title = Title::makeTitle( $row->job_namespace, $row->job_title );
                                $job = Job::factory( $row->job_cmd, $title,
                                        self::extractBlob( $row->job_params ), $row->job_id );
                                $job->metadata['id'] = $row->job_id;
index 6c823fb..82537f4 100644 (file)
@@ -631,15 +631,11 @@ LUA;
         * @return Job|bool
         */
        protected function getJobFromFields( array $fields ) {
-               $title = Title::makeTitleSafe( $fields['namespace'], $fields['title'] );
-               if ( $title ) {
-                       $job = Job::factory( $fields['type'], $title, $fields['params'] );
-                       $job->metadata['uuid'] = $fields['uuid'];
+               $title = Title::makeTitle( $fields['namespace'], $fields['title'] );
+               $job = Job::factory( $fields['type'], $title, $fields['params'] );
+               $job->metadata['uuid'] = $fields['uuid'];
 
-                       return $job;
-               }
-
-               return false;
+               return $job;
        }
 
        /**
index b8c5d6c..1725b74 100644 (file)
@@ -117,6 +117,11 @@ class JobRunner implements LoggerAwareInterface {
                        return $response;
                }
 
+               // Catch huge single updates that lead to slave lag
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
+               $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ );
+
                // Bail out if there is too much DB lag
                list( , $maxLag ) = wfGetLBFactory()->getMainLB( wfWikiID() )->getMaxLag();
                if ( $maxLag >= 5 ) {
@@ -230,7 +235,7 @@ class JobRunner implements LoggerAwareInterface {
                                // This only waits for so long before exiting and letting
                                // other wikis in the farm (on different masters) get a chance.
                                $timePassed = microtime( true ) - $lastTime;
-                               if ( $timePassed >= 5 || $timePassed < 0 ) {
+                               if ( $timePassed >= 3 || $timePassed < 0 ) {
                                        if ( !wfWaitForSlaves( $lastTime, false, '*', 5 ) ) {
                                                $response['reached'] = 'slave-lag-limit';
                                                break;
index 42d2a39..84cfd47 100644 (file)
@@ -108,7 +108,7 @@ class JobSpecification implements IJobSpecification {
 
                $this->type = $type;
                $this->params = $params;
-               $this->title = $title ?: Title::newMainPage();
+               $this->title = $title ?: Title::makeTitle( NS_SPECIAL, 'Badtitle/' . get_class( $this ) );
                $this->opts = $opts;
        }
 
index ea5b09d..457237a 100644 (file)
  * @file
  */
 
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
 use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 
+
 /**
  * A factory for application metric data.
  *
@@ -38,8 +40,8 @@ class BufferingStatsdDataFactory extends StatsdDataFactory {
                $this->prefix = $prefix;
        }
 
-       public function produceStatsdData( $key, $value = 1, $metric = self::STATSD_METRIC_COUNT ) {
-               $this->buffer[] = $entity = $this->produceStatsdDataEntity();
+       public function produceStatsdData( $key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT ) {
+               $entity = $this->produceStatsdDataEntity();
                if ( $key !== null ) {
                        $prefixedKey = ltrim( $this->prefix . '.' . $key, '.' );
                        $entity->setKey( $prefixedKey );
@@ -50,6 +52,10 @@ class BufferingStatsdDataFactory extends StatsdDataFactory {
                if ( $metric !== null ) {
                        $entity->setMetric( $metric );
                }
+               // Don't bother buffering a counter update with a delta of zero.
+               if ( !( $metric === StatsdDataInterface::STATSD_METRIC_COUNT && !$value ) ) {
+                       $this->buffer[] = $entity;
+               }
                return $entity;
        }
 
index b0cb078..0b6db32 100644 (file)
@@ -74,11 +74,7 @@ class MapCacheLRU {
         * @return bool
         */
        public function has( $key ) {
-               if ( is_string( $key ) || is_integer( $key ) ) {
-                       return array_key_exists( $key, $this->cache );
-               }
-               wfWarn( __METHOD__ . ": Key passed isn't a string or an integer.", 2 );
-               return false;
+               return array_key_exists( $key, $this->cache );
        }
 
        /**
index 4f13d37..7fe77b4 100644 (file)
@@ -196,6 +196,9 @@ class DeleteLogFormatter extends LogFormatter {
                                }
                                // This is a CSV of the IDs
                                $query = $params[3];
+                               if ( is_array( $query ) ) {
+                                       $query = implode( ',', $query );
+                               }
                                // Link to each hidden object ID, $params[1] is the url param
                                $revert = Linker::linkKnown(
                                        SpecialPage::getTitleFor( 'Revisiondelete' ),
index 66c2bde..b391be3 100644 (file)
@@ -115,6 +115,28 @@ abstract class LogEntryBase implements LogEntry {
        public function isLegacy() {
                return false;
        }
+
+       /**
+        * Create a blob from a parameter array
+        *
+        * @param array $params
+        * @return string
+        * @since 1.26
+        */
+       public static function makeParamBlob( $params ) {
+               return serialize( (array)$params );
+       }
+
+       /**
+        * Extract a parameter array from a blob
+        *
+        * @param string $blob
+        * @return array
+        * @since 1.26
+        */
+       public static function extractParams( $blob ) {
+               return unserialize( $blob );
+       }
 }
 
 /**
@@ -225,13 +247,13 @@ class DatabaseLogEntry extends LogEntryBase {
                if ( !isset( $this->params ) ) {
                        $blob = $this->getRawParameters();
                        wfSuppressWarnings();
-                       $params = unserialize( $blob );
+                       $params = LogEntryBase::extractParams( $blob );
                        wfRestoreWarnings();
                        if ( $params !== false ) {
                                $this->params = $params;
                                $this->legacy = false;
                        } else {
-                               $this->params = $blob === '' ? array() : explode( "\n", $blob );
+                               $this->params = LogPage::extractParams( $blob );
                                $this->legacy = true;
                        }
                }
@@ -516,7 +538,7 @@ class ManualLogEntry extends LogEntryBase {
                        'log_title' => $this->getTarget()->getDBkey(),
                        'log_page' => $this->getTarget()->getArticleID(),
                        'log_comment' => $comment,
-                       'log_params' => serialize( (array)$this->getParameters() ),
+                       'log_params' => LogEntryBase::makeParamBlob( $this->getParameters() ),
                );
                if ( isset( $this->deleted ) ) {
                        $data['log_deleted'] = $this->deleted;
@@ -584,7 +606,7 @@ class ManualLogEntry extends LogEntryBase {
                        $this->getSubtype(),
                        $this->getTarget(),
                        $this->getComment(),
-                       serialize( (array)$this->getParameters() ),
+                       LogEntryBase::makeParamBlob( $this->getParameters() ),
                        $newId,
                        $formatter->getIRCActionComment() // Used for IRC feeds
                );
index cf9fb53..6571888 100644 (file)
@@ -540,8 +540,8 @@ class LogFormatter {
         *     * title-link: The value is a page title,
         *                   returns link to this page
         *     * number: Format value as number
-        * @param string $value The parameter value that should
-        *                      be formated
+        *     * list: Format value as a comma-separated list
+        * @param mixed $value The parameter value that should be formatted
         * @return string|array Formated value
         * @since 1.21
         */
@@ -552,6 +552,9 @@ class LogFormatter {
                        case 'raw':
                                $value = Message::rawParam( $value );
                                break;
+                       case 'list':
+                               $value = $this->context->getLanguage()->commaList( $value );
+                               break;
                        case 'msg':
                                $value = $this->msg( $value )->text();
                                break;
diff --git a/includes/logging/TagLogFormatter.php b/includes/logging/TagLogFormatter.php
new file mode 100644 (file)
index 0000000..5a58c33
--- /dev/null
@@ -0,0 +1,49 @@
+<?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
+ */
+
+/**
+ * This class formats tag log entries.
+ *
+ * Parameters (one-based indexes):
+ * 4::revid
+ * 5::logid
+ * 6:list:tagsAdded
+ * 7:number:tagsAddedCount
+ * 8:list:tagsRemoved
+ * 9:number:tagsRemovedCount
+ *
+ * @since 1.25
+ */
+class TagLogFormatter extends LogFormatter {
+       protected function getMessageKey() {
+               $key = parent::getMessageKey();
+               $params = $this->getMessageParameters();
+
+               $add = ( isset( $params[6] ) && isset( $params[6]['num'] ) && $params[6]['num'] );
+               $remove = ( isset( $params[8] ) && isset( $params[8]['num'] ) && $params[8]['num'] );
+               $key .= ( $remove ? ( $add ? '' : '-remove' ) : '-add' );
+
+               if ( isset( $params[4] ) && $params[4] ) {
+                       $key .= '-logentry';
+               } else {
+                       $key .= '-revision';
+               }
+
+               return $key;
+       }
+}
index 8fdfa47..b505280 100644 (file)
@@ -307,9 +307,9 @@ class SvgHandler extends ImageHandler {
         */
        function getImageSize( $file, $path, $metadata = false ) {
                if ( $metadata === false ) {
-                       $metadata = $file->getMetaData();
+                       $metadata = $file->getMetadata();
                }
-               $metadata = $this->unpackMetaData( $metadata );
+               $metadata = $this->unpackMetadata( $metadata );
 
                if ( isset( $metadata['width'] ) && isset( $metadata['height'] ) ) {
                        return array( $metadata['width'], $metadata['height'], 'SVG',
index 07b2495..243e280 100644 (file)
@@ -72,6 +72,7 @@ text/tab-separated-values     [TEXT]
 application/zip application/x-zip      [ARCHIVE]
 application/x-gzip     [ARCHIVE]
 application/x-bzip     [ARCHIVE]
+application/x-bzip2    [ARCHIVE]
 application/x-tar      [ARCHIVE]
 application/x-stuffit  [ARCHIVE]
 application/x-opc+zip  [ARCHIVE]
index 75017db..210610a 100644 (file)
@@ -21,7 +21,8 @@ application/vnd.wap.wmlc wmlc
 application/vnd.wap.wmlscriptc wmlsc
 application/voicexml+xml vxml
 application/x-bcpio bcpio
-application/x-bzip gz bz2
+application/x-bzip bz
+application/x-bzip2 bz2
 application/x-cdlink vcd
 application/x-chess-pgn pgn
 application/x-cpio cpio
index de3511d..23c8b6d 100644 (file)
@@ -25,6 +25,8 @@ class RedisBagOStuff extends BagOStuff {
        protected $redisPool;
        /** @var array List of server names */
        protected $servers;
+       /** @var array Map of (tag => server name) */
+       protected $serverTagMap;
        /** @var bool */
        protected $automaticFailover;
 
@@ -34,7 +36,8 @@ class RedisBagOStuff extends BagOStuff {
         *   - servers: An array of server names. A server name may be a hostname,
         *     a hostname/port combination or the absolute path of a UNIX socket.
         *     If a hostname is specified but no port, the standard port number
-        *     6379 will be used. Required.
+        *     6379 will be used. Arrays keys can be used to specify the tag to
+        *     hash on in place of the host/port. Required.
         *
         *   - connectTimeout: The timeout for new connections, in seconds. Optional,
         *     default is 1 second.
@@ -66,6 +69,10 @@ class RedisBagOStuff extends BagOStuff {
                $this->redisPool = RedisConnectionPool::singleton( $redisConf );
 
                $this->servers = $params['servers'];
+               foreach ( $this->servers as $key => $server ) {
+                       $this->serverTagMap[is_int( $key ) ? $server : $key] = $server;
+               }
+
                if ( isset( $params['automaticFailover'] ) ) {
                        $this->automaticFailover = $params['automaticFailover'];
                } else {
@@ -348,23 +355,25 @@ class RedisBagOStuff extends BagOStuff {
         * @return array (server, RedisConnRef) or (false, false)
         */
        protected function getConnection( $key ) {
-               if ( count( $this->servers ) === 1 ) {
-                       $candidates = $this->servers;
-               } else {
-                       $candidates = $this->servers;
+               $candidates = array_keys( $this->serverTagMap );
+
+               if ( count( $this->servers ) > 1 ) {
                        ArrayUtils::consistentHashSort( $candidates, $key, '/' );
                        if ( !$this->automaticFailover ) {
                                $candidates = array_slice( $candidates, 0, 1 );
                        }
                }
 
-               foreach ( $candidates as $server ) {
+               foreach ( $candidates as $tag ) {
+                       $server = $this->serverTagMap[$tag];
                        $conn = $this->redisPool->getConnection( $server );
                        if ( $conn ) {
                                return array( $server, $conn );
                        }
                }
+
                $this->setLastError( BagOStuff::ERR_UNREACHABLE );
+
                return array( false, false );
        }
 
index eb597d2..91e9971 100644 (file)
@@ -378,7 +378,7 @@ class Article implements Page {
                # Pre-fill content with error message so that if something
                # fails we'll have something telling us what we intended.
                //XXX: this isn't page content but a UI message. horrible.
-               $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ), array() );
+               $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ) );
 
                if ( $oldid ) {
                        # $this->mRevision might already be fetched by getOldIDFromRequest()
@@ -390,17 +390,20 @@ class Article implements Page {
                                }
                        }
                } else {
-                       if ( !$this->mPage->getLatest() ) {
+                       $oldid = $this->mPage->getLatest();
+                       if ( !$oldid ) {
                                wfDebug( __METHOD__ . " failed to find page data for title " .
                                        $this->getTitle()->getPrefixedText() . "\n" );
                                return false;
                        }
 
+                       # Update error message with correct oldid
+                       $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ) );
+
                        $this->mRevision = $this->mPage->getRevision();
 
                        if ( !$this->mRevision ) {
-                               wfDebug( __METHOD__ . " failed to retrieve current page, rev_id " .
-                                       $this->mPage->getLatest() . "\n" );
+                               wfDebug( __METHOD__ . " failed to retrieve current page, rev_id $oldid\n" );
                                return false;
                        }
                }
index 03a5b89..2edf1af 100644 (file)
@@ -113,6 +113,8 @@ class CategoryPage extends Article {
                        $until,
                        $reqArray
                );
-               $this->getContext()->getOutput()->addHTML( $viewer->getHTML() );
+               $out = $this->getContext()->getOutput();
+               $out->addHTML( $viewer->getHTML() );
+               $out->addHelpLink( 'Help:Categories' );
        }
 }
index b435c5c..059a3f8 100644 (file)
@@ -367,14 +367,12 @@ class WikiPage implements Page, IDBAccessObject {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
                } elseif ( $from === self::READ_NORMAL ) {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
-                       // Use a "last rev inserted" timestamp key to diminish the issue of slave lag.
-                       // Note that DB also stores the master position in the session and checks it.
-                       $touched = $this->getCachedLastEditTime();
-                       if ( $touched ) { // key set
-                               if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
-                                       $from = self::READ_LATEST;
-                                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
-                               }
+                       if ( !$data
+                               && wfGetLB()->getServerCount() > 1
+                               && wfGetLB()->hasOrMadeRecentMasterChanges()
+                       ) {
+                               $from = self::READ_LATEST;
+                               $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
                        }
                } else {
                        // No idea from where the caller got this data, assume slave database.
@@ -810,29 +808,6 @@ class WikiPage implements Page, IDBAccessObject {
                }
        }
 
-       /**
-        * Get the cached timestamp for the last time the page changed.
-        * This is only used to help handle slave lag by comparing to page_touched.
-        * @return string MW timestamp
-        */
-       protected function getCachedLastEditTime() {
-               global $wgMemc;
-               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
-               return $wgMemc->get( $key );
-       }
-
-       /**
-        * Set the cached timestamp for the last time the page changed.
-        * This is only used to help handle slave lag by comparing to page_touched.
-        * @param string $timestamp
-        * @return void
-        */
-       public function setCachedLastEditTime( $timestamp ) {
-               global $wgMemc;
-               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
-               $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60 * 15 );
-       }
-
        /**
         * Determine whether a page would be suitable for being counted as an
         * article in the site_stats table based on the title & its content
@@ -1167,7 +1142,12 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                // Update newtalk / watchlist notification status
-               $user->clearNotification( $this->mTitle, $oldid );
+               try {
+                       $user->clearNotification( $this->mTitle, $oldid );
+               } catch ( DBError $e ) {
+                       // Avoid outage if the master is not reachable
+                       MWExceptionHandler::logException( $e );
+               }
        }
 
        /**
@@ -1175,28 +1155,24 @@ class WikiPage implements Page, IDBAccessObject {
         * @return bool
         */
        public function doPurge() {
-               global $wgUseSquid;
-
                if ( !Hooks::run( 'ArticlePurge', array( &$this ) ) ) {
                        return false;
                }
 
-               // Invalidate the cache
-               $this->mTitle->invalidateCache();
-
-               if ( $wgUseSquid ) {
-                       // Commit the transaction before the purge is sent
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->commit( __METHOD__ );
-
-                       // Send purge
-                       $update = SquidUpdate::newSimplePurge( $this->mTitle );
-                       $update->doUpdate();
-               }
+               $title = $this->mTitle;
+               wfGetDB( DB_MASTER )->onTransactionIdle( function() use ( $title ) {
+                       global $wgUseSquid;
+                       // Invalidate the cache in auto-commit mode
+                       $title->invalidateCache();
+                       if ( $wgUseSquid ) {
+                               // Send purge now that page_touched update was committed above
+                               $update = SquidUpdate::newSimplePurge( $title );
+                               $update->doUpdate();
+                       }
+               } );
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
                        // @todo move this logic to MessageCache
-
                        if ( $this->exists() ) {
                                // NOTE: use transclusion text for messages.
                                //       This is consistent with  MessageCache::getMsgFromNamespace()
@@ -1213,6 +1189,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                        MessageCache::singleton()->replace( $this->mTitle->getDBkey(), $text );
                }
+
                return true;
        }
 
@@ -1311,7 +1288,6 @@ class WikiPage implements Page, IDBAccessObject {
                if ( $result ) {
                        $this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect );
                        $this->setLastEdit( $revision );
-                       $this->setCachedLastEditTime( $now );
                        $this->mLatest = $revision->getId();
                        $this->mIsRedirect = (bool)$rt;
                        // Update the LinkCache.
@@ -1513,8 +1489,18 @@ class WikiPage implements Page, IDBAccessObject {
 
                $baseRevId = null;
                if ( $edittime && $sectionId !== 'new' ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $rev = Revision::loadFromTimestamp( $dbr, $this->mTitle, $edittime );
+                       // Try the master if this thread may have just added it.
+                       // This could be abstracted into a Revision method, but we don't want
+                       // to encourage loading of revisions by timestamp.
+                       if ( !$rev
+                               && wfGetLB()->getServerCount() > 1
+                               && wfGetLB()->hasOrMadeRecentMasterChanges()
+                       ) {
+                               $dbw = wfGetDB( DB_MASTER );
+                               $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+                       }
                        if ( $rev ) {
                                $baseRevId = $rev->getId();
                        }
@@ -1553,10 +1539,7 @@ class WikiPage implements Page, IDBAccessObject {
                        if ( is_null( $baseRevId ) || $sectionId === 'new' ) {
                                $oldContent = $this->getContent();
                        } else {
-                               // TODO: try DB_SLAVE first
-                               $dbw = wfGetDB( DB_MASTER );
-                               $rev = Revision::loadFromId( $dbw, $baseRevId );
-
+                               $rev = Revision::newFromId( $baseRevId );
                                if ( !$rev ) {
                                        wfDebug( __METHOD__ . " asked for bogus section (page: " .
                                                $this->getId() . "; section: $sectionId)\n" );
@@ -2097,7 +2080,7 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                // The edit may have already been prepared via api.php?action=stashedit
-               $cachedEdit = $useCache && $wgAjaxEditStash
+               $cachedEdit = $useCache && $wgAjaxEditStash && !$user->isAllowed( 'bot' )
                        ? ApiStashEdit::checkCache( $this->getTitle(), $content, $user )
                        : false;
 
@@ -2389,8 +2372,8 @@ class WikiPage implements Page, IDBAccessObject {
                $dbw = wfGetDB( DB_MASTER );
 
                foreach ( $restrictionTypes as $action ) {
-                       if ( !isset( $expiry[$action] ) ) {
-                               $expiry[$action] = $dbw->getInfinity();
+                       if ( !isset( $expiry[$action] ) || $expiry[$action] === $dbw->getInfinity() ) {
+                               $expiry[$action] = 'infinity';
                        }
                        if ( !isset( $limit[$action] ) ) {
                                $limit[$action] = '';
@@ -2630,10 +2613,8 @@ class WikiPage implements Page, IDBAccessObject {
         */
        protected function formatExpiry( $expiry ) {
                global $wgContLang;
-               $dbr = wfGetDB( DB_SLAVE );
 
-               $encodedExpiry = $dbr->encodeExpiry( $expiry );
-               if ( $encodedExpiry != 'infinity' ) {
+               if ( $expiry != 'infinity' ) {
                        return wfMessage(
                                'protect-expiring',
                                $wgContLang->timeanddate( $expiry, false, false ),
index 7c221d8..ace63a0 100644 (file)
@@ -4945,7 +4945,7 @@ class Parser {
        /**
         * Clean up signature text
         *
-        * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures @see cleanSigInSig
+        * 1) Strip 3, 4 or 5 tildes out of signatures @see cleanSigInSig
         * 2) Substitute all transclusions
         *
         * @param string $text
@@ -4984,7 +4984,7 @@ class Parser {
        }
 
        /**
-        * Strip ~~~, ~~~~ and ~~~~~ out of signatures
+        * Strip 3, 4 or 5 tildes out of signatures.
         *
         * @param string $text
         * @return string Signature text with /~{3,5}/ removed
index 5fa52ff..100656d 100644 (file)
@@ -145,9 +145,7 @@ class ParserOptions {
 
        /**
         * Clean up signature texts?
-        *
-        * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures
-        * 2) Substitute all transclusions
+        * @see Parser::cleanSig
         */
        public $mCleanSignatures;
 
index baec181..f02d66f 100644 (file)
@@ -263,10 +263,12 @@ class TransactionProfiler implements LoggerAwareInterface {
         * @param string $query
         */
        protected function reportExpectationViolated( $expect, $query ) {
+               global $wgRequest;
+
                $n = $this->expect[$expect];
                $by = $this->expectBy[$expect];
                $this->logger->info(
-                       "Expectation ($expect <= $n) by $by not met:\n$query\n" . wfBacktrace( true )
+                       "[{$wgRequest->getMethod()}] Expectation ($expect <= $n) by $by not met:\n$query\n" . wfBacktrace( true )
                );
        }
 }
index f85b878..a5349fb 100644 (file)
@@ -54,6 +54,7 @@ class ExtensionProcessor implements Processor {
         */
        protected static $creditsAttributes = array(
                'name',
+               'namemsg',
                'author',
                'version',
                'url',
@@ -193,15 +194,17 @@ class ExtensionProcessor implements Processor {
                        $defaultPaths['localBasePath'] = "$dir/{$defaultPaths['localBasePath']}";
                }
 
-               if ( isset( $info['ResourceModules'] ) ) {
-                       foreach ( $info['ResourceModules'] as $name => $data ) {
-                               if ( isset( $data['localBasePath'] ) ) {
-                                       $data['localBasePath'] = "$dir/{$data['localBasePath']}";
+               foreach ( array( 'ResourceModules', 'ResourceModuleSkinStyles' ) as $setting ) {
+                       if ( isset( $info[$setting] ) ) {
+                               foreach ( $info[$setting] as $name => $data ) {
+                                       if ( isset( $data['localBasePath'] ) ) {
+                                               $data['localBasePath'] = "$dir/{$data['localBasePath']}";
+                                       }
+                                       if ( $defaultPaths ) {
+                                               $data += $defaultPaths;
+                                       }
+                                       $this->globals["wg$setting"][$name] = $data;
                                }
-                               if ( $defaultPaths ) {
-                                       $data += $defaultPaths;
-                               }
-                               $this->globals['wgResourceModules'][$name] = $data;
                        }
                }
        }
index c06f7e3..5ef3853 100644 (file)
@@ -91,41 +91,55 @@ class ExtensionRegistry {
                if ( $data ) {
                        $this->exportExtractedData( $data );
                } else {
-                       $data = array( 'globals' => array( 'wgAutoloadClasses' => array() ) );
-                       $autoloadClasses = array();
-                       foreach ( $this->queued as $path => $mtime ) {
-                               $json = file_get_contents( $path );
-                               $info = json_decode( $json, /* $assoc = */ true );
-                               if ( !is_array( $info ) ) {
-                                       throw new Exception( "$path is not a valid JSON file." );
-                               }
-                               $autoload = $this->processAutoLoader( dirname( $path ), $info );
-                               // Set up the autoloader now so custom processors will work
-                               $GLOBALS['wgAutoloadClasses'] += $autoload;
-                               $autoloadClasses += $autoload;
-                               if ( isset( $info['processor'] ) ) {
-                                       $processor = $this->getProcessor( $info['processor'] );
-                               } else {
-                                       $processor = $this->getProcessor( 'default' );
-                               }
-                               $processor->extractInfo( $path, $info );
-                       }
-                       foreach ( $this->processors as $processor ) {
-                               $data = array_merge_recursive( $data, $processor->getExtractedInfo() );
-                       }
-                       foreach ( $data['credits'] as $credit ) {
-                               $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
-                       }
-                       $this->processors = array(); // Reset
+                       $data = $this->readFromQueue( $this->queued );
                        $this->exportExtractedData( $data );
                        // Do this late since we don't want to extract it since we already
                        // did that, but it should be cached
-                       $data['globals']['wgAutoloadClasses'] += $autoloadClasses;
+                       $data['globals']['wgAutoloadClasses'] += $data['autoload'];
+                       unset( $data['autoload'] );
                        $this->cache->set( $key, $data );
                }
                $this->queued = array();
        }
 
+       /**
+        * Process a queue of extensions and return their extracted data
+        *
+        * @param array $queue keys are filenames, values are ignored
+        * @return array extracted info
+        * @throws Exception
+        */
+       public function readFromQueue( array $queue ) {
+               $data = array( 'globals' => array( 'wgAutoloadClasses' => array() ) );
+               $autoloadClasses = array();
+               foreach ( $queue as $path => $mtime ) {
+                       $json = file_get_contents( $path );
+                       $info = json_decode( $json, /* $assoc = */ true );
+                       if ( !is_array( $info ) ) {
+                               throw new Exception( "$path is not a valid JSON file." );
+                       }
+                       $autoload = $this->processAutoLoader( dirname( $path ), $info );
+                       // Set up the autoloader now so custom processors will work
+                       $GLOBALS['wgAutoloadClasses'] += $autoload;
+                       $autoloadClasses += $autoload;
+                       if ( isset( $info['processor'] ) ) {
+                               $processor = $this->getProcessor( $info['processor'] );
+                       } else {
+                               $processor = $this->getProcessor( 'default' );
+                       }
+                       $processor->extractInfo( $path, $info );
+               }
+               foreach ( $this->processors as $processor ) {
+                       $data = array_merge_recursive( $data, $processor->getExtractedInfo() );
+               }
+               foreach ( $data['credits'] as $credit ) {
+                       $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
+               }
+               $this->processors = array(); // Reset
+               $data['autoload'] = $autoloadClasses;
+               return $data;
+       }
+
        protected function getProcessor( $type ) {
                if ( !isset( $this->processors[$type] ) ) {
                        $processor = $type === 'default' ? new ExtensionProcessor() : new $type();
index 976275b..3d5cc51 100644 (file)
@@ -346,12 +346,9 @@ class ResourceLoader {
                                        }
 
                                        // Add new file paths, remapping them to refer to our directories and not use settings
-                                       // from the module we're modifying. These can come from the base definition or be defined
-                                       // for each module.
+                                       // from the module we're modifying, which come from the base definition.
                                        list( $localBasePath, $remoteBasePath ) =
                                                ResourceLoaderFileModule::extractBasePaths( $skinStyles );
-                                       list( $localBasePath, $remoteBasePath ) =
-                                               ResourceLoaderFileModule::extractBasePaths( $paths, $localBasePath, $remoteBasePath );
 
                                        foreach ( $paths as $path ) {
                                                $styleFiles[] = new ResourceLoaderFilePath( $path, $localBasePath, $remoteBasePath );
index 12d1e82..bf68fdd 100644 (file)
@@ -117,7 +117,7 @@ class ResourceLoaderImage {
         * @param ResourceLoaderContext $context Any context
         * @return string
         */
-       protected function getPath( ResourceLoaderContext $context ) {
+       public function getPath( ResourceLoaderContext $context ) {
                $desc = $this->descriptor;
                if ( is_string( $desc ) ) {
                        return $this->basePath . '/' . $desc;
index bf6a7dd..7efdb26 100644 (file)
@@ -303,6 +303,49 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                return false;
        }
 
+       /**
+        * Get the definition summary for this module.
+        *
+        * @param ResourceLoaderContext $context
+        * @return array
+        */
+       public function getDefinitionSummary( ResourceLoaderContext $context ) {
+               $summary = parent::getDefinitionSummary( $context );
+               foreach ( array(
+                       'localBasePath',
+                       'images',
+                       'variants',
+                       'prefix',
+                       'selectorWithoutVariant',
+                       'selectorWithVariant',
+               ) as $member ) {
+                       $summary[$member] = $this->{$member};
+               };
+               return $summary;
+       }
+
+       /**
+        * Get the last modified timestamp of this module.
+        *
+        * @param ResourceLoaderContext $context Context in which to calculate
+        *     the modified time
+        * @return int UNIX timestamp
+        */
+       public function getModifiedTime( ResourceLoaderContext $context ) {
+               $files = array();
+               foreach ( $this->getImages() as $name => $image ) {
+                       $files[] = $image->getPath( $context );
+               }
+
+               $files = array_values( array_unique( $files ) );
+               $filesMtime = max( array_map( array( __CLASS__, 'safeFilemtime' ), $files ) );
+
+               return max(
+                       $filesMtime,
+                       $this->getDefinitionMtime( $context )
+               );
+       }
+
        /**
         * Extract a local base path from module definition information.
         *
index 840fd77..f16fd15 100644 (file)
@@ -92,7 +92,7 @@ abstract class RevDelList extends RevisionListBase {
                $this->res = false;
                $dbw = wfGetDB( DB_MASTER );
                $this->doQuery( $dbw );
-               $dbw->begin( __METHOD__ );
+               $dbw->startAtomic( __METHOD__ );
                $status = Status::newGood();
                $missing = array_flip( $this->ids );
                $this->clearFileOps();
@@ -207,10 +207,15 @@ abstract class RevDelList extends RevisionListBase {
                        'authorIds' => $authorIds,
                        'authorIPs' => $authorIPs
                ) );
-               $dbw->commit( __METHOD__ );
 
                // Clear caches
-               $status->merge( $this->doPostCommitUpdates() );
+               $that = $this;
+               $dbw->onTransactionIdle( function() use ( $that ) {
+                       $that->doPostCommitUpdates();
+               } );
+
+               $dbw->endAtomic( __METHOD__ );
+
                return $status;
        }
 
index dc25c6c..ac7a85b 100644 (file)
@@ -1477,7 +1477,8 @@ abstract class Skin extends ContextSource {
         * Get a cached notice
         *
         * @param string $name Message name, or 'default' for $wgSiteNotice
-        * @return string HTML fragment
+        * @return string|bool HTML fragment, or false to indicate that the caller
+        *   should fall back to the next notice in its sequence
         */
        private function getCachedNotice( $name ) {
                global $wgRenderHashAppend, $parserMemc, $wgContLang;
@@ -1493,7 +1494,9 @@ abstract class Skin extends ContextSource {
                        }
                } else {
                        $msg = $this->msg( $name )->inContentLanguage();
-                       if ( $msg->isDisabled() ) {
+                       if ( $msg->isBlank() ) {
+                               return '';
+                       } elseif ( $msg->isDisabled() ) {
                                return false;
                        }
                        $notice = $msg->plain();
@@ -1554,13 +1557,13 @@ abstract class Skin extends ContextSource {
                                $siteNotice = $this->getCachedNotice( 'sitenotice' );
                        } else {
                                $anonNotice = $this->getCachedNotice( 'anonnotice' );
-                               if ( !$anonNotice ) {
+                               if ( $anonNotice === false ) {
                                        $siteNotice = $this->getCachedNotice( 'sitenotice' );
                                } else {
                                        $siteNotice = $anonNotice;
                                }
                        }
-                       if ( !$siteNotice ) {
+                       if ( $siteNotice === false ) {
                                $siteNotice = $this->getCachedNotice( 'default' );
                        }
                }
index 1c5f3a6..312769f 100644 (file)
@@ -65,7 +65,9 @@ class SkinFallbackTemplate extends BaseTemplate {
                        return $this->getMsg( 'default-skin-not-found' )->params(
                                $defaultSkin,
                                implode( "\n", $skinsInstalledText ),
-                               implode( "\n", $skinsInstalledSnippet )
+                               implode( "\n", $skinsInstalledSnippet ) )->numParams(
+                                       count( $skinsInstalledText ),
+                                       count( $skinsInstalledSnippet )
                        )->parseAsBlock();
                } else {
                        return $this->getMsg( 'default-skin-not-found-no-skins' )->params(
index b0390e9..61aad92 100644 (file)
@@ -717,7 +717,7 @@ class SkinTemplate extends Skin {
                        $text = $msg->text();
                } else {
                        global $wgContLang;
-                       $text = $wgContLang->getFormattedNsText(
+                       $text = $wgContLang->getConverter()->convertNamespace(
                                MWNamespace::getSubject( $title->getNamespace() ) );
                }
 
index 1ff7e3f..da752f6 100644 (file)
@@ -527,7 +527,7 @@ abstract class QueryPage extends SpecialPage {
 
                $this->numRows = $res->numRows();
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getRecacheDB();
                $this->preprocessResults( $dbr, $res );
 
                $out->addHTML( Xml::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) );
index 2e6e55a..a866ba7 100644 (file)
@@ -33,8 +33,11 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
        // Query parameters added by redirects
        protected $mAddedRedirectParams = array();
 
-       public function execute( $par ) {
-               $redirect = $this->getRedirect( $par );
+       /**
+        * @param string|null $subpage
+        */
+       public function execute( $subpage ) {
+               $redirect = $this->getRedirect( $subpage );
                $query = $this->getRedirectQuery();
                // Redirect to a page title with possible query parameters
                if ( $redirect instanceof Title ) {
@@ -58,10 +61,10 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
         * If the special page is a redirect, then get the Title object it redirects to.
         * False otherwise.
         *
-        * @param string $par Subpage string
+        * @param string|null $subpage
         * @return Title|bool
         */
-       abstract public function getRedirect( $par );
+       abstract public function getRedirect( $subpage );
 
        /**
         * Return part of the request string for a special redirect page
@@ -112,12 +115,16 @@ abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
                $this->mAddedRedirectParams = $addedRedirectParams;
        }
 
+       /**
+        * @param string|null $subpage
+        * @return Title|bool
+        */
        public function getRedirect( $subpage ) {
                if ( $this->redirSubpage === false ) {
                        return SpecialPage::getTitleFor( $this->redirName, $subpage );
-               } else {
-                       return SpecialPage::getTitleFor( $this->redirName, $this->redirSubpage );
                }
+
+               return SpecialPage::getTitleFor( $this->redirName, $this->redirSubpage );
        }
 }
 
index c262519..dedfcb6 100644 (file)
@@ -159,6 +159,7 @@ class SpecialPageFactory {
                'ApiHelp' => 'SpecialApiHelp',
                'Blankpage' => 'SpecialBlankpage',
                'Diff' => 'SpecialDiff',
+               'EditTags' => 'SpecialEditTags',
                'Emailuser' => 'SpecialEmailUser',
                'Movepage' => 'MovePageForm',
                'Mycontributions' => 'SpecialMycontributions',
index a031dad..2c00175 100644 (file)
@@ -302,7 +302,7 @@ class SpecialActiveUsers extends SpecialPage {
         * @return int How many seconds old the cache is
         */
        public static function mergeActiveUsers( $period, $days ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = wfGetDB( DB_SLAVE, 'recentchanges' );
                $cTime = $dbr->selectField( 'querycache_info',
                        'qci_timestamp',
                        array( 'qci_type' => 'activeusers' )
index c237401..3f13510 100644 (file)
@@ -848,16 +848,11 @@ class SpecialBlock extends FormSpecialPage {
         * Convert a submitted expiry time, which may be relative ("2 weeks", etc) or absolute
         * ("24 May 2034", etc), into an absolute timestamp we can put into the database.
         * @param string $expiry Whatever was typed into the form
-        * @return string Timestamp or "infinity" string for the DB implementation
+        * @return string Timestamp or 'infinity'
         */
        public static function parseExpiryInput( $expiry ) {
-               static $infinity;
-               if ( $infinity == null ) {
-                       $infinity = wfGetDB( DB_SLAVE )->getInfinity();
-               }
-
                if ( wfIsInfinity( $expiry ) ) {
-                       $expiry = $infinity;
+                       $expiry = 'infinity';
                } else {
                        $expiry = strtotime( $expiry );
 
index 4583430..0ec144a 100644 (file)
@@ -113,11 +113,6 @@ class SpecialBlockList extends SpecialPage {
        }
 
        function showList() {
-               # Purge expired entries on one in every 10 queries
-               if ( !mt_rand( 0, 10 ) ) {
-                       Block::purgeExpired();
-               }
-
                $conds = array();
                # Is the user allowed to see hidden blocks?
                if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
@@ -398,6 +393,10 @@ class BlockListPager extends TablePager {
                        'join_conds' => array( 'user' => array( 'LEFT JOIN', 'user_id = ipb_by' ) )
                );
 
+               # Filter out any expired blocks
+               $db = $this->getDatabase();
+               $info['conds'][] = 'ipb_expiry > ' . $db->addQuotes( $db->timestamp() );
+
                # Is the user allowed to see hidden blocks?
                if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
                        $info['conds']['ipb_deleted'] = 0;
index eca307d..3ed3c04 100644 (file)
@@ -129,7 +129,8 @@ class SpecialChangeEmail extends FormSpecialPage {
        public function onSuccess() {
                $request = $this->getRequest();
 
-               $titleObj = Title::newFromText( $request->getVal( 'returnto' ) );
+               $returnto = $request->getVal( 'returnto' );
+               $titleObj = $returnto !== null ? Title::newFromText( $returnto ) : null;
                if ( !$titleObj instanceof Title ) {
                        $titleObj = Title::newMainPage();
                }
index 168095f..6a4347d 100644 (file)
@@ -179,7 +179,8 @@ class SpecialChangePassword extends FormSpecialPage {
                }
 
                if ( $request->getCheck( 'wpCancel' ) ) {
-                       $titleObj = Title::newFromText( $request->getVal( 'returnto' ) );
+                       $returnto = $request->getVal( 'returnto' );
+                       $titleObj = $returnto !== null ? Title::newFromText( $returnto ) : null;
                        if ( !$titleObj instanceof Title ) {
                                $titleObj = Title::newMainPage();
                        }
index 799e526..9f91a10 100644 (file)
  * @since 1.23
  */
 class SpecialDiff extends RedirectSpecialPage {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'Diff' );
                $this->mAllowedRedirectParams = array();
        }
 
-       function getRedirect( $subpage ) {
+       /**
+        * @param string|null $subpage
+        * @return Title|bool
+        */
+       public function getRedirect( $subpage ) {
                $parts = explode( '/', $subpage );
 
                // Try to parse the values given, generating somewhat pretty URLs if possible
diff --git a/includes/specials/SpecialEditTags.php b/includes/specials/SpecialEditTags.php
new file mode 100644 (file)
index 0000000..14850ff
--- /dev/null
@@ -0,0 +1,459 @@
+<?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 SpecialPage
+ */
+
+/**
+ * Special page for adding and removing change tags to individual revisions.
+ * A lot of this is copied out of SpecialRevisiondelete.
+ *
+ * @ingroup SpecialPage
+ * @since 1.25
+ */
+class SpecialEditTags extends UnlistedSpecialPage {
+       /** @var bool Was the DB modified in this request */
+       protected $wasSaved = false;
+
+       /** @var bool True if the submit button was clicked, and the form was posted */
+       private $submitClicked;
+
+       /** @var array Target ID list */
+       private $ids;
+
+       /** @var Title Title object for target parameter */
+       private $targetObj;
+
+       /** @var string Deletion type, may be revision or logentry */
+       private $typeName;
+
+       /** @var ChangeTagsList Storing the list of items to be tagged */
+       private $revList;
+
+       /** @var bool Whether user is allowed to perform the action */
+       private $isAllowed;
+
+       /** @var string */
+       private $reason;
+
+       public function __construct() {
+               parent::__construct( 'EditTags', 'changetags' );
+       }
+
+       public function execute( $par ) {
+               $this->checkPermissions();
+               $this->checkReadOnly();
+
+               $output = $this->getOutput();
+               $user = $this->getUser();
+               $request = $this->getRequest();
+
+               $this->setHeaders();
+               $this->outputHeader();
+
+               $this->getOutput()->addModules( array( 'mediawiki.special.edittags',
+                       'mediawiki.special.edittags.styles' ) );
+
+               $this->submitClicked = $request->wasPosted() && $request->getBool( 'wpSubmit' );
+
+               // Handle our many different possible input types
+               $ids = $request->getVal( 'ids' );
+               if ( !is_null( $ids ) ) {
+                       // Allow CSV from the form hidden field, or a single ID for show/hide links
+                       $this->ids = explode( ',', $ids );
+               } else {
+                       // Array input
+                       $this->ids = array_keys( $request->getArray( 'ids', array() ) );
+               }
+               $this->ids = array_unique( array_filter( $this->ids ) );
+
+               // No targets?
+               if ( count( $this->ids ) == 0 ) {
+                       throw new ErrorPageError( 'tags-edit-nooldid-title', 'tags-edit-nooldid-text' );
+               }
+
+               $this->typeName = $request->getVal( 'type' );
+               $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
+
+               // sanity check of parameter
+               switch ( $this->typeName ) {
+                       case 'logentry':
+                       case 'logging':
+                               $this->typeName = 'logentry';
+                               break;
+                       default:
+                               $this->typeName = 'revision';
+                               break;
+               }
+
+               // Allow the list type to adjust the passed target
+               // Yuck! Copied straight out of SpecialRevisiondelete, but it does exactly
+               // what we want
+               $this->targetObj = RevisionDeleter::suggestTarget(
+                       $this->typeName === 'revision' ? 'revision' : 'logging',
+                       $this->targetObj,
+                       $this->ids
+               );
+
+               $this->isAllowed = $user->isAllowed( 'changetags' );
+
+               $this->reason = $request->getVal( 'wpReason' );
+               // We need a target page!
+               if ( is_null( $this->targetObj ) ) {
+                       $output->addWikiMsg( 'undelete-header' );
+                       return;
+               }
+               // Give a link to the logs/hist for this page
+               $this->showConvenienceLinks();
+
+               // Either submit or create our form
+               if ( $this->isAllowed && $this->submitClicked ) {
+                       $this->submit( $request );
+               } else {
+                       $this->showForm();
+               }
+
+               // Show relevant lines from the tag log
+               $tagLogPage = new LogPage( 'tag' );
+               $output->addHTML( "<h2>" . $tagLogPage->getName()->escaped() . "</h2>\n" );
+               LogEventsList::showLogExtract(
+                       $output,
+                       'tag',
+                       $this->targetObj,
+                       '', /* user */
+                       array( 'lim' => 25, 'conds' => array(), 'useMaster' => $this->wasSaved )
+               );
+       }
+
+       /**
+        * Show some useful links in the subtitle
+        */
+       protected function showConvenienceLinks() {
+               // Give a link to the logs/hist for this page
+               if ( $this->targetObj ) {
+                       // Also set header tabs to be for the target.
+                       $this->getSkin()->setRelevantTitle( $this->targetObj );
+
+                       $links = array();
+                       $links[] = Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Log' ),
+                               $this->msg( 'viewpagelogs' )->escaped(),
+                               array(),
+                               array(
+                                       'page' => $this->targetObj->getPrefixedText(),
+                                       'hide_tag_log' => '0',
+                               )
+                       );
+                       if ( !$this->targetObj->isSpecialPage() ) {
+                               // Give a link to the page history
+                               $links[] = Linker::linkKnown(
+                                       $this->targetObj,
+                                       $this->msg( 'pagehist' )->escaped(),
+                                       array(),
+                                       array( 'action' => 'history' )
+                               );
+                       }
+                       // Link to Special:Tags
+                       $links[] = Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Tags' ),
+                               $this->msg( 'tags-edit-manage-link' )->escaped()
+                       );
+                       // Logs themselves don't have histories or archived revisions
+                       $this->getOutput()->addSubtitle( $this->getLanguage()->pipeList( $links ) );
+               }
+       }
+
+       /**
+        * Get the list object for this request
+        * @return ChangeTagsList
+        */
+       protected function getList() {
+               if ( is_null( $this->revList ) ) {
+                       $this->revList = ChangeTagsList::factory( $this->typeName, $this->getContext(),
+                               $this->targetObj, $this->ids );
+               }
+
+               return $this->revList;
+       }
+
+       /**
+        * Show a list of items that we will operate on, and show a form which allows
+        * the user to modify the tags applied to those items.
+        */
+       protected function showForm() {
+               $userAllowed = true;
+
+               $out = $this->getOutput();
+               // Messages: tags-edit-revision-selected, tags-edit-logentry-selected
+               $out->wrapWikiMsg( "<strong>$1</strong>", array(
+                       "tags-edit-{$this->typeName}-selected",
+                       $this->getLanguage()->formatNum( count( $this->ids ) ),
+                       $this->targetObj->getPrefixedText()
+               ) );
+
+               $out->addHelpLink( 'Help:Tags' );
+               $out->addHTML( "<ul>" );
+
+               $numRevisions = 0;
+               // Live revisions...
+               $list = $this->getList();
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+               for ( $list->reset(); $list->current(); $list->next() ) {
+                       // @codingStandardsIgnoreEnd
+                       $item = $list->current();
+                       $numRevisions++;
+                       $out->addHTML( $item->getHTML() );
+               }
+
+               if ( !$numRevisions ) {
+                       throw new ErrorPageError( 'tags-edit-nooldid-title', 'tags-edit-nooldid-text' );
+               }
+
+               $out->addHTML( "</ul>" );
+               // Explanation text
+               $out->wrapWikiMsg( '<p>$1</p>', "tags-edit-{$this->typeName}-explanation" );
+
+               // Show form if the user can submit
+               if ( $this->isAllowed ) {
+                       $form = Xml::openElement( 'form', array( 'method' => 'post',
+                                       'action' => $this->getPageTitle()->getLocalURL( array( 'action' => 'submit' ) ),
+                                       'id' => 'mw-revdel-form-revisions' ) ) .
+                               Xml::fieldset( $this->msg( "tags-edit-{$this->typeName}-legend",
+                                       count( $this->ids ) )->text() ) .
+                               $this->buildCheckBoxes() .
+                               Xml::openElement( 'table' ) .
+                               "<tr>\n" .
+                                       '<td class="mw-label">' .
+                                               Xml::label( $this->msg( 'tags-edit-reason' )->text(), 'wpReason' ) .
+                                       '</td>' .
+                                       '<td class="mw-input">' .
+                                               Xml::input(
+                                                       'wpReason',
+                                                       60,
+                                                       $this->reason,
+                                                       array( 'id' => 'wpReason', 'maxlength' => 100 )
+                                               ) .
+                                       '</td>' .
+                               "</tr><tr>\n" .
+                                       '<td></td>' .
+                                       '<td class="mw-submit">' .
+                                               Xml::submitButton( $this->msg( "tags-edit-{$this->typeName}-submit",
+                                                       $numRevisions )->text(), array( 'name' => 'wpSubmit' ) ) .
+                                       '</td>' .
+                               "</tr>\n" .
+                               Xml::closeElement( 'table' ) .
+                               Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() ) .
+                               Html::hidden( 'target', $this->targetObj->getPrefixedText() ) .
+                               Html::hidden( 'type', $this->typeName ) .
+                               Html::hidden( 'ids', implode( ',', $this->ids ) ) .
+                               Xml::closeElement( 'fieldset' ) . "\n" .
+                               Xml::closeElement( 'form' ) . "\n";
+               } else {
+                       $form = '';
+               }
+               $out->addHTML( $form );
+       }
+
+       /**
+        * @return string HTML
+        */
+       protected function buildCheckBoxes() {
+               // If there is just one item, provide the user with a multi-select field
+               $list = $this->getList();
+               if ( $list->length() == 1 ) {
+                       $list->reset();
+                       $tags = $list->current()->getTags();
+                       if ( $tags ) {
+                               $tags = explode( ',', $tags );
+                       } else {
+                               $tags = array();
+                       }
+
+                       $html = '<table id="mw-edittags-tags-selector">';
+                       $html .= '<tr><td>' . $this->msg( 'tags-edit-existing-tags' )->escaped() .
+                               '</td><td>';
+                       if ( $tags ) {
+                               $html .= $this->getLanguage()->commaList( array_map( 'htmlspecialchars', $tags ) );
+                       } else {
+                               $html .= $this->msg( 'tags-edit-existing-tags-none' )->parse();
+                       }
+                       $html .= '</td></tr>';
+                       $tagSelect = $this->getTagSelect( $tags, $this->msg( 'tags-edit-new-tags' )->plain() );
+                       $html .= '<tr><td>' . $tagSelect[0] . '</td><td>' . $tagSelect[1];
+                       // also output the tags currently applied as a hidden form field, so we
+                       // know what to remove from the revision/log entry when the form is submitted
+                       $html .= Html::hidden( 'wpExistingTags', implode( ',', $tags ) );
+                       $html .= '</td></tr></table>';
+               } else {
+                       // Otherwise, use a multi-select field for adding tags, and a list of
+                       // checkboxes for removing them
+                       $tags = array();
+
+                       // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+                       for ( $list->reset(); $list->current(); $list->next() ) {
+                               // @codingStandardsIgnoreEnd
+                               $currentTags = $list->current()->getTags();
+                               if ( $currentTags ) {
+                                       $tags = array_merge( $tags, explode( ',', $currentTags ) );
+                               }
+                       }
+                       $tags = array_unique( $tags );
+
+                       $html = '<table id="mw-edittags-tags-selector-multi"><tr><td>';
+                       $tagSelect = $this->getTagSelect( array(), $this->msg( 'tags-edit-add' )->plain() );
+                       $html .= '<p>' . $tagSelect[0] . '</p>' . $tagSelect[1] . '</td><td>';
+                       $html .= Xml::element( 'p', null, $this->msg( 'tags-edit-remove' )->plain() );
+                       $html .= Xml::checkLabel( $this->msg( 'tags-edit-remove-all-tags' )->plain(),
+                               'wpRemoveAllTags', 'mw-edittags-remove-all' );
+                       $i = 0; // used for generating checkbox IDs only
+                       foreach ( $tags as $tag ) {
+                               $html .= Xml::element( 'br' ) . "\n" . Xml::checkLabel( $tag,
+                                       'wpTagsToRemove[]', 'mw-edittags-remove-' . $i++, false, array(
+                                               'value' => $tag,
+                                               'class' => 'mw-edittags-remove-checkbox',
+                                       ) );
+                       }
+                       $html .= '</td></tr></table>';
+               }
+
+               return $html;
+       }
+
+       /**
+        * Returns a <select multiple> element with a list of change tags that can be
+        * applied by users.
+        *
+        * @param array $selectedTags The tags that should be preselected in the
+        * list. Any tags in this list, but not in the list returned by
+        * ChangeTags::listExplicitlyDefinedTags, will be appended to the <select>
+        * element.
+        * @param string $label The text of a <label> to precede the <select>
+        * @return array HTML <label> element at index 0, HTML <select> element at
+        * index 1
+        */
+       protected function getTagSelect( $selectedTags, $label ) {
+               $result = array();
+               $result[0] = Xml::label( $label, 'mw-edittags-tag-list' );
+               $result[1] = Xml::openElement( 'select', array(
+                       'name' => 'wpTagList[]',
+                       'id' => 'mw-edittags-tag-list',
+                       'multiple' => 'multiple',
+                       'size' => '8',
+               ) );
+
+               $tags = ChangeTags::listExplicitlyDefinedTags();
+               $tags = array_unique( array_merge( $tags, $selectedTags ) );
+               foreach ( $tags as $tag ) {
+                       $result[1] .= Xml::option( $tag, $tag, in_array( $tag, $selectedTags ) );
+               }
+
+               $result[1] .= Xml::closeElement( 'select' );
+               return $result;
+       }
+
+       /**
+        * UI entry point for form submission.
+        * @throws PermissionsError
+        * @return bool
+        */
+       protected function submit() {
+               // Check edit token on submission
+               $request = $this->getRequest();
+               $token = $request->getVal( 'wpEditToken' );
+               if ( $this->submitClicked && !$this->getUser()->matchEditToken( $token ) ) {
+                       $this->getOutput()->addWikiMsg( 'sessionfailure' );
+                       return false;
+               }
+
+               // Evaluate incoming request data
+               $tagList = $request->getArray( 'wpTagList' );
+               if ( is_null( $tagList ) ) {
+                       $tagList = array();
+               }
+               $existingTags = $request->getVal( 'wpExistingTags' );
+               if ( is_null( $existingTags ) || $existingTags === '' ) {
+                       $existingTags = array();
+               } else {
+                       $existingTags = explode( ',', $existingTags );
+               }
+
+               if ( count( $this->ids ) > 1 ) {
+                       // multiple revisions selected
+                       $tagsToAdd = $tagList;
+                       if ( $request->getBool( 'wpRemoveAllTags' ) ) {
+                               $tagsToRemove = $existingTags;
+                       } else {
+                               $tagsToRemove = $request->getArray( 'wpTagsToRemove' );
+                       }
+               } else {
+                       // single revision selected
+                       // The user tells us which tags they want associated to the revision.
+                       // We have to figure out which ones to add, and which to remove.
+                       $tagsToAdd = array_diff( $tagList, $existingTags );
+                       $tagsToRemove = array_diff( $existingTags, $tagList );
+               }
+
+               //var_dump( array( 'add' => $tagsToAdd, 'remove' => $tagsToRemove ) );
+
+               if ( !$tagsToAdd && !$tagsToRemove ) {
+                       $status = Status::newFatal( 'tags-edit-none-selected' );
+               } else {
+                       $status = $this->getList()->updateChangeTagsOnAll( $tagsToAdd,
+                               $tagsToRemove, null, $this->reason, $this->getUser() );
+               }
+
+               if ( $status->isGood() ) {
+                       $this->success();
+                       return true;
+               } else {
+                       $this->failure( $status );
+                       return false;
+               }
+       }
+
+       /**
+        * Report that the submit operation succeeded
+        */
+       protected function success() {
+               $this->getOutput()->setPageTitle( $this->msg( 'actioncomplete' ) );
+               $this->getOutput()->wrapWikiMsg( "<span class=\"success\">\n$1\n</span>",
+                       'tags-edit-success' );
+               $this->wasSaved = true;
+               $this->revList->reloadFromMaster();
+               $this->reason = ''; // no need to spew the reason back at the user
+               $this->showForm();
+       }
+
+       /**
+        * Report that the submit operation failed
+        * @param Status $status
+        */
+       protected function failure( $status ) {
+               $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
+               $this->getOutput()->addWikiText( $status->getWikiText( 'tags-edit-failure' ) );
+               $this->showForm();
+       }
+
+       public function getDescription() {
+               return $this->msg( 'tags-edit-title' )->text();
+       }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
+}
index ffe7892..910fe25 100644 (file)
@@ -344,7 +344,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         */
        protected function getWatchlistInfo() {
                $titles = array();
-               $dbr = wfGetDB( DB_MASTER );
+               $dbr = wfGetDB( DB_SLAVE );
 
                $res = $dbr->select(
                        array( 'watchlist' ),
index 9323211..542589f 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialFilepath extends RedirectSpecialPage {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'Filepath' );
                $this->mAllowedRedirectParams = array( 'width', 'height' );
        }
 
-       // implement by redirecting through Special:Redirect/file
-       function getRedirect( $par ) {
+       /**
+        * Implement by redirecting through Special:Redirect/file.
+        *
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $par ) {
                $file = $par ?: $this->getRequest()->getText( 'file' );
 
                if ( $file ) {
index d4b45fb..2d79aaf 100644 (file)
@@ -84,14 +84,26 @@ class ImageListPager extends TablePager {
        function __construct( IContextSource $context, $userName = null, $search = '',
                $including = false, $showAll = false
        ) {
+               $this->setContext( $context );
                $this->mIncluding = $including;
                $this->mShowAll = $showAll;
 
                if ( $userName !== null && $userName !== '' ) {
                        $nt = Title::newFromText( $userName, NS_USER );
+                       $user = User::newFromName( $userName, false );
                        if ( !is_null( $nt ) ) {
                                $this->mUserName = $nt->getText();
                        }
+                       if ( !$user || ( $user->isAnon() && !User::isIP( $user->getName() ) ) ) {
+                               $this->getOutput()->wrapWikiMsg(
+                                       "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
+                                       array(
+                                               'listfiles-userdoesnotexist',
+                                               wfEscapeWikiText( $userName ),
+                                       )
+                               );
+                       }
+
                }
 
                if ( $search !== '' && !$this->getConfig()->get( 'MiserMode' ) ) {
@@ -107,7 +119,7 @@ class ImageListPager extends TablePager {
                }
 
                if ( !$including ) {
-                       if ( $context->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) {
+                       if ( $this->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) {
                                $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                        } else {
                                $this->mDefaultDirection = IndexPager::DIR_ASCENDING;
index 88184f9..f16e5ba 100644 (file)
@@ -203,7 +203,7 @@ class SpecialLog extends SpecialPage {
                if ( $logBody ) {
                        $this->getOutput()->addHTML(
                                $pager->getNavigationBar() .
-                                       $this->getRevisionButton(
+                                       $this->getActionButtons(
                                                $loglist->beginLogEventsList() .
                                                        $logBody .
                                                        $loglist->endLogEventsList()
@@ -215,30 +215,50 @@ class SpecialLog extends SpecialPage {
                }
        }
 
-       private function getRevisionButton( $formcontents ) {
-               # If the user doesn't have the ability to delete log entries,
-               # don't bother showing them the button.
-               if ( !$this->getUser()->isAllowedAll( 'deletedhistory', 'deletelogentry' ) ) {
+       private function getActionButtons( $formcontents ) {
+               $user = $this->getUser();
+               $canRevDelete = $user->isAllowedAll( 'deletedhistory', 'deletelogentry' );
+               $canModifyTags = $user->isAllowed( 'changetags' );
+               # If the user doesn't have the ability to delete log entries nor edit tags,
+               # don't bother showing them the button(s).
+               if ( !$canRevDelete && !$canModifyTags ) {
                        return $formcontents;
                }
 
-               # Show button to hide log entries
+               # Show button to hide log entries and/or edit change tags
                $s = Html::openElement(
                        'form',
                        array( 'action' => wfScript(), 'id' => 'mw-log-deleterevision-submit' )
                ) . "\n";
-               $s .= Html::hidden( 'title', SpecialPage::getTitleFor( 'Revisiondelete' ) ) . "\n";
-               $s .= Html::hidden( 'target', SpecialPage::getTitleFor( 'Log' ) ) . "\n";
+               $s .= Html::hidden( 'action', 'historysubmit' ) . "\n";
                $s .= Html::hidden( 'type', 'logging' ) . "\n";
-               $button = Html::element(
-                       'button',
-                       array(
-                               'type' => 'submit',
-                               'class' => "deleterevision-log-submit mw-log-deleterevision-button"
-                       ),
-                       $this->msg( 'showhideselectedlogentries' )->text()
-               ) . "\n";
-               $s .= $button . $formcontents . $button;
+
+               $buttons = '';
+               if ( $canRevDelete ) {
+                       $buttons .= Html::element(
+                               'button',
+                               array(
+                                       'type' => 'submit',
+                                       'name' => 'revisiondelete',
+                                       'value' => '1',
+                                       'class' => "deleterevision-log-submit mw-log-deleterevision-button"
+                               ),
+                               $this->msg( 'showhideselectedlogentries' )->text()
+                       ) . "\n";
+               }
+               if ( $canModifyTags ) {
+                       $buttons .= Html::element(
+                               'button',
+                               array(
+                                       'type' => 'submit',
+                                       'name' => 'editchangetags',
+                                       'value' => '1',
+                                       'class' => "editchangetags-log-submit mw-log-editchangetags-button"
+                               ),
+                               $this->msg( 'log-edit-tags' )->text()
+                       ) . "\n";
+               }
+               $s .= $buttons . $formcontents . $buttons;
                $s .= Html::closeElement( 'form' );
 
                return $s;
index 6cea158..3d8ff97 100644 (file)
@@ -41,11 +41,11 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
         * If the special page is a redirect, then get the Title object it redirects to.
         * False otherwise.
         *
-        * @param string $par Subpage string
-        * @return Title|bool
+        * @param string|null $subpage
+        * @return Title
         */
-       public function getRedirect( $par ) {
-               $title = $this->findTitle( $par );
+       public function getRedirect( $subpage ) {
+               $title = $this->findTitle( $subpage );
                // Go to the main page if given invalid title.
                if ( !$title ) {
                        $title = Title::newMainPage();
@@ -59,18 +59,22 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
         * it returns Page/fi if it exists, otherwise Page/de if it exists,
         * otherwise Page.
         *
-        * @param string $par
+        * @param string|null $subpage
         * @return Title|null
         */
-       public function findTitle( $par ) {
+       public function findTitle( $subpage ) {
                // base = title without language code suffix
                // provided = the title as it was given
-               $base = $provided = Title::newFromText( $par );
+               $base = $provided = null;
+               if ( $subpage !== null ) {
+                       $provided = Title::newFromText( $subpage );
+                       $base = $provided;
+               }
 
-               if ( $base && strpos( $par, '/' ) !== false ) {
-                       $pos = strrpos( $par, '/' );
-                       $basepage = substr( $par, 0, $pos );
-                       $code = substr( $par, $pos + 1 );
+               if ( $provided && strpos( $subpage, '/' ) !== false ) {
+                       $pos = strrpos( $subpage, '/' );
+                       $basepage = substr( $subpage, 0, $pos );
+                       $code = substr( $subpage, $pos + 1 );
                        if ( strlen( $code ) && Language::isKnownLanguageTag( $code ) ) {
                                $base = Title::newFromText( $basepage );
                        }
index 9b8d52b..c8db1d8 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialMypage extends RedirectSpecialArticle {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'Mypage' );
        }
 
-       function getRedirect( $subpage ) {
-               if ( strval( $subpage ) !== '' ) {
-                       return Title::makeTitle( NS_USER, $this->getUser()->getName() . '/' . $subpage );
-               } else {
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
+               if ( $subpage === null || $subpage === '' ) {
                        return Title::makeTitle( NS_USER, $this->getUser()->getName() );
                }
+
+               return Title::makeTitle( NS_USER, $this->getUser()->getName() . '/' . $subpage );
        }
 }
 
@@ -49,16 +53,20 @@ class SpecialMypage extends RedirectSpecialArticle {
  * @ingroup SpecialPage
  */
 class SpecialMytalk extends RedirectSpecialArticle {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'Mytalk' );
        }
 
-       function getRedirect( $subpage ) {
-               if ( strval( $subpage ) !== '' ) {
-                       return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() . '/' . $subpage );
-               } else {
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
+               if ( $subpage === null || $subpage === '' ) {
                        return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() );
                }
+
+               return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() . '/' . $subpage );
        }
 }
 
@@ -68,13 +76,17 @@ class SpecialMytalk extends RedirectSpecialArticle {
  * @ingroup SpecialPage
  */
 class SpecialMycontributions extends RedirectSpecialPage {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'Mycontributions' );
                $this->mAllowedRedirectParams = array( 'limit', 'namespace', 'tagfilter',
                        'offset', 'dir', 'year', 'month', 'feed' );
        }
 
-       function getRedirect( $subpage ) {
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
                return SpecialPage::getTitleFor( 'Contributions', $this->getUser()->getName() );
        }
 }
@@ -85,12 +97,16 @@ class SpecialMycontributions extends RedirectSpecialPage {
  * @ingroup SpecialPage
  */
 class SpecialMyuploads extends RedirectSpecialPage {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'Myuploads' );
                $this->mAllowedRedirectParams = array( 'limit', 'ilshowall', 'ilsearch' );
        }
 
-       function getRedirect( $subpage ) {
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
                return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() );
        }
 }
@@ -101,12 +117,16 @@ class SpecialMyuploads extends RedirectSpecialPage {
  * @ingroup SpecialPage
  */
 class SpecialAllMyUploads extends RedirectSpecialPage {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'AllMyUploads' );
                $this->mAllowedRedirectParams = array( 'limit', 'ilsearch' );
        }
 
-       function getRedirect( $subpage ) {
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
                $this->mAddedRedirectParams['ilshowall'] = 1;
 
                return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() );
index 17115e8..53789c0 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialPermanentLink extends RedirectSpecialPage {
-       function __construct() {
+       public function __construct() {
                parent::__construct( 'PermanentLink' );
                $this->mAllowedRedirectParams = array();
        }
 
-       function getRedirect( $subpage ) {
+       /**
+        * @param string|null $subpage
+        * @return Title|bool
+        */
+       public function getRedirect( $subpage ) {
                $subpage = intval( $subpage );
                if ( $subpage === 0 ) {
                        # throw an error page when no subpage was given
index cea00fa..ef61f94 100644 (file)
@@ -55,6 +55,8 @@ class SpecialPreferences extends SpecialPage {
                        );
                }
 
+               $out->addHelpLink( 'Help:Preferences' );
+
                $htmlForm = Preferences::getFormObject( $this->getUser(), $this->getContext() );
                $htmlForm->setSubmitCallback( array( 'Preferences', 'tryUISubmit' ) );
 
index dd9198c..0e1ce53 100644 (file)
@@ -68,12 +68,6 @@ class SpecialProtectedtitles extends SpecialPage {
         */
        function formatRow( $row ) {
 
-               static $infinity = null;
-
-               if ( is_null( $infinity ) ) {
-                       $infinity = wfGetDB( DB_SLAVE )->getInfinity();
-               }
-
                $title = Title::makeTitleSafe( $row->pt_namespace, $row->pt_title );
                if ( !$title ) {
 
@@ -100,9 +94,9 @@ class SpecialProtectedtitles extends SpecialPage {
                $lang = $this->getLanguage();
                $expiry = strlen( $row->pt_expiry ) ?
                        $lang->formatExpiry( $row->pt_expiry, TS_MW ) :
-                       $infinity;
+                       'infinity';
 
-               if ( $expiry != $infinity ) {
+               if ( $expiry !== 'infinity' ) {
                        $user = $this->getUser();
                        $description_items[] = $this->msg(
                                'protect-expiring-local',
index 64b0eca..1387988 100644 (file)
@@ -263,6 +263,10 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        );
        }
 
+       protected function getDB() {
+               return wfGetDB( DB_SLAVE, 'recentchanges' );
+       }
+
        public function outputFeedLinks() {
                $this->addFeedLinks( $this->getFeedQuery() );
        }
index e0a964e..bdfe911 100644 (file)
@@ -132,18 +132,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                // $this->ids = array_map( 'intval', $this->ids );
                $this->ids = array_unique( array_filter( $this->ids ) );
 
-               if ( $request->getVal( 'action' ) == 'historysubmit'
-                       || $request->getVal( 'action' ) == 'revisiondelete'
-               ) {
-                       // For show/hide form submission from history page
-                       // Since we are access through index.php?title=XXX&action=historysubmit
-                       // getFullTitle() will contain the target title and not our title
-                       $this->targetObj = $this->getFullTitle();
-                       $this->typeName = 'revision';
-               } else {
-                       $this->typeName = $request->getVal( 'type' );
-                       $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
-               }
+               $this->typeName = $request->getVal( 'type' );
+               $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
 
                # For reviewing deleted files...
                $this->archiveName = $request->getVal( 'file' );
index eff06f4..ed3ad5b 100644 (file)
@@ -45,6 +45,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                        return;
                }
 
+               $out->addHelpLink( 'Help:Special pages' );
                $this->outputPageList( $groups );
        }
 
index 1f339d1..0acbf95 100644 (file)
@@ -126,7 +126,7 @@ class SpecialStatistics extends SpecialPage {
         * @return string
         */
        private function getPageStats() {
-               return Xml::openElement( 'tr' ) .
+               $pageStatsHtml = Xml::openElement( 'tr' ) .
                        Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-header-pages' )->parse() ) .
                        Xml::closeElement( 'tr' ) .
                                $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'Allpages' ),
@@ -136,11 +136,17 @@ class SpecialStatistics extends SpecialPage {
                                $this->formatRow( $this->msg( 'statistics-pages' )->parse(),
                                        $this->getLanguage()->formatNum( $this->total ),
                                        array( 'class' => 'mw-statistics-pages' ),
-                                       'statistics-pages-desc' ) .
-                               $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'MediaStatistics' ),
-                                       $this->msg( 'statistics-files' )->parse() ),
-                                       $this->getLanguage()->formatNum( $this->images ),
-                                       array( 'class' => 'mw-statistics-files' ) );
+                                       'statistics-pages-desc' );
+
+               // Show the image row only, when there are files or upload is possible
+               if ( $this->images !== 0 || $this->getConfig()->get( 'EnableUploads' ) ) {
+                       $pageStatsHtml .= $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'MediaStatistics' ),
+                               $this->msg( 'statistics-files' )->parse() ),
+                               $this->getLanguage()->formatNum( $this->images ),
+                               array( 'class' => 'mw-statistics-files' ) );
+               }
+
+               return $pageStatsHtml;
        }
 
        private function getEditStats() {
index 6f9254b..3f1ea42 100644 (file)
@@ -787,6 +787,10 @@ class UploadForm extends HTMLForm {
        protected $mMaxUploadSize = array();
 
        public function __construct( array $options = array(), IContextSource $context = null ) {
+               if ( $context instanceof IContextSource ) {
+                       $this->setContext( $context );
+               }
+
                $this->mWatch = !empty( $options['watch'] );
                $this->mForReUpload = !empty( $options['forreupload'] );
                $this->mSessionKey = isset( $options['sessionkey'] ) ? $options['sessionkey'] : '';
index 40cce5e..0b3175a 100644 (file)
@@ -73,7 +73,9 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
 
                $this->target = Title::newFromURL( $opts->getValue( 'target' ) );
                if ( !$this->target ) {
-                       $out->addHTML( $this->whatlinkshereForm() );
+                       if ( !$this->including() ) {
+                               $out->addHTML( $this->whatlinkshereForm() );
+                       }
 
                        return;
                }
index 24ca33f..ae723e9 100644 (file)
@@ -15,6 +15,7 @@
                "resources/src/mediawiki.action",
                "resources/src/mediawiki.api",
                "resources/src/mediawiki.language",
+               "resources/src/mediawiki.messagePoster",
                "resources/src/mediawiki.page",
                "resources/src/mediawiki.special",
                "resources/src/mediawiki.toolbar",
index 07d47ed..e1a2047 100644 (file)
@@ -4483,21 +4483,20 @@ class Language {
        /**
         * Decode an expiry (block, protection, etc) which has come from the DB
         *
-        * @todo FIXME: why are we returnings DBMS-dependent strings???
-        *
         * @param string $expiry Database expiry String
         * @param bool|int $format True to process using language functions, or TS_ constant
         *     to return the expiry in a given timestamp
+        * @param string $inifinity If $format is not true, use this string for infinite expiry
         * @return string
         * @since 1.18
         */
-       public function formatExpiry( $expiry, $format = true ) {
-               static $infinity;
-               if ( $infinity === null ) {
-                       $infinity = wfGetDB( DB_SLAVE )->getInfinity();
+       public function formatExpiry( $expiry, $format = true, $infinity = 'infinity' ) {
+               static $dbInfinity;
+               if ( $dbInfinity === null ) {
+                       $dbInfinity = wfGetDB( DB_SLAVE )->getInfinity();
                }
 
-               if ( $expiry == '' || $expiry == $infinity ) {
+               if ( $expiry == '' || $expiry === 'infinity' || $expiry == $dbInfinity ) {
                        return $format === true
                                ? $this->getMessageFromDB( 'infiniteblock' )
                                : $infinity;
index 6ef231d..02bcc5f 100644 (file)
        "metadata-expand": "Peuleumah tapeusili teunamah",
        "metadata-collapse": "Peusom tapeusili teunamah",
        "metadata-fields": "Bideuëng mètadata gamba nyang na lam peusan nyoë keuneuk geupasoë bak tampilan halaman gamba 'oh watèë tabel mètadata geutôp.\nData nyang la'én eunteuk teupeusom keudroë.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Orientasi",
        "exif-xresolution": "Resolusi linteuëng",
        "exif-yresolution": "Rèsolusi buju",
+       "exif-software": "Software geungui",
+       "exif-exifversion": "Versi Exif",
+       "exif-datetimedigitized": "Uroë buleuën ngön watèë digital",
+       "exif-orientation-1": "Biasa",
        "namespacesall": "ban dum",
        "monthsall": "ban dum",
        "recreate": "Peugöt ulang",
index 9221af9..921072d 100644 (file)
@@ -21,7 +21,7 @@
        "tog-newpageshidepatrolled": "Hȳdan weardode trametas in nīwra andwendinga getæle",
        "tog-extendwatchlist": "Sprǣdan behealdungtæl tō īwenne ealla andwendinga, nā synderlīce þā nīwostan",
        "tog-usenewrc": "Settan andwendunga on hēapas on trametum on nīwra andwendunga getæle and behealdungtæle",
-       "tog-numberheadings": "Settan rīm on fōrecwidas selflīce",
+       "tog-numberheadings": "Settan rīm on forecwidas selflīce",
        "tog-showtoolbar": "Īwan þā adihtunge tōlmearce",
        "tog-editondblclick": "Adihtan trametas mid twifealdum mȳs swenge",
        "tog-editsectiononrightclick": "Þafian dǣla adihtunge þurh swīðran healfe mȳs swengas on dǣla titulum",
        "disclaimers": "Ætsacunga",
        "disclaimerpage": "Project:Gemǣne ætsacung",
        "edithelp": "Help on adihtunge",
+       "helppage-top-gethelp": "Help",
        "mainpage": "Hēafodtramet",
        "mainpage-description": "Hēafodtramet",
        "policy-url": "Project:Rǣd",
        "exception-nologin": "Ne inloggod",
        "virus-badscanner": "Yfel gesetedness: Uncūþ wyrmsēcend: <em>$1</em>",
        "virus-unknownscanner": "uncūþ andgund:",
-       "logouttext": "'''Þū eart nū ūtmeldod.'''\n\nÞū canst ætfeolan þǣre nytte {{SITENAME}} tō ungecūðum, oþþe þū canst <span class='plainlinks'>[$1 inmeldian eft]</span> tō þǣm ylcan oþþe ōðrum brūcende.\nCnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmeldod, oþ þæt þū clǣnsie þīnes sēcendtōles hord.",
+       "logouttext": "'''Þū eart nū ūtmeldod.'''\n\nWit þū þe sume trametas wēnunga sīen gīet geīwed swā þū sīe inmeldod, ōþ þū ǣmetgie þīnes webbsēcendes hord.",
        "welcomeuser": "Wilcume, $1!",
        "yourname": "Þīn brūcendnama:",
        "userlogin-yourname": "Brūcendnama:",
        "gotaccount": "Hafast þū reccinge ǣr? $1.",
        "gotaccountlink": "Inmeldian",
        "userlogin-resetpassword-link": "Forgēate þū þīn gelēafword?",
+       "createacct-emailrequired": "Spearcǣrenda nama",
+       "createacct-emailoptional": "Spearcǣrenda nama (ungenēdedlic)",
+       "createacct-email-ph": "Besettan þīnne spearcǣrenda naman",
+       "createacct-another-email-ph": "Besettan spearcǣrenda naman",
        "createaccountmail": "Notian hwīlendlic hlīetlic þafungword and sendan hit tō þǣm genamodan spearcǣrendnaman",
+       "createacct-realname": "Sōt nama (ungenēdedlic)",
        "createaccountreason": "Racu:",
+       "createacct-reason": "Racu",
+       "createacct-reason-ph": "For hwȳ wyrcest þū ōðerne grīman",
+       "createacct-imgcaptcha-ph": "Besettan þone traht þe þū sīhst būfan",
+       "createacct-submit": "Scieppan þīnne grīman",
+       "createacct-another-submit": "Scieppan ōðerne grīman",
+       "createacct-benefit-heading": "{{SITENAME}} is geworht fram hādum swilce þū.",
+       "createacct-benefit-body1": "{{PLURAL:$1|adihtung|adihtunga}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|tramet|trameta}}",
        "badretype": "Þā þafungword þe write þū, bēoþ ungelīc.",
        "userexists": "Se brūcendnama is ǣr gebrocen. Cēos lā ōðerne naman.",
        "loginerror": "Inmeldunge wōh",
+       "createacct-error": "Grīman scieppunge misfeng",
        "createaccounterror": "Ne cūðe scieppan reccinge: $1",
        "nocookiesnew": "Sēo brūcendreccing wæs gemacod, ac þū neart inmeldod.\n{{SITENAME}} brȳcþ cȳþþu grētunga tō inmeldienne brūcendas.\nÞū hafast forwierned cȳþþu grētunga.\nLīef him lā, and siþþan inmelda þīnne nīwan brūcendnaman and þīn nīwe þafungword.",
+       "noname": "Þū nafast gewriten gengne brūcendes naman.",
        "loginsuccesstitle": "Inmeldung gesǣlde",
        "loginsuccess": "'''Þu eart nū inmeldod tō {{SITENAME}} tō \"$1\".'''",
        "nosuchuser": "Þǣr nis nān brūcend þe hæfþ þone naman \"$1\".\nStafena micelnessa sind hefiga and ānlica on brūcendnamum.\nScēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe reccinge]].",
        "nosuchusershort": "Þǣr nis nān brūcend mid þǣm naman \"$1\".  Scēawa þīne wrītunge.",
+       "nouserspecified": "Þū scealt wrītan brūcendes naman.",
+       "login-userblocked": "Þes brūcend is fortȳned. Inmeldung nis gelīfed.",
+       "wrongpassword": "Nā riht þafungword wæs gewriten. Sēc þū eft lā.",
+       "wrongpasswordempty": "Þū ne write nǣnig þafungword. \nSēc þū eft lā.",
        "passwordtooshort": "Þafungword sculon habban læst {{PLURAL:$1|1 stafan|$1 stafena}}.",
+       "passwordtoolong": "Þafungword ne cunnon wesan lengran þonne {{PLURAL:$1|1 stafa|$1 stafena}}.",
+       "password-name-match": "Þīn þafungword sceal wesan ungelīc þīnum brūcendes naman.",
+       "password-login-forbidden": "Sēo nytt þisses brūcendes naman and þafungwordes nis gelīfed.",
        "mailmypassword": "Settan þafungword eft",
+       "passwordremindertitle": "Nīwe hwīlendlic þafungword for {{SITENAME}}",
+       "noemail": "Þær nis nǣnig spearcǣrenda nama gewriten for \"$1\" brūcende.",
+       "noemailcreate": "Þū þearft wrītan gengne spearcǣrenda naman.",
+       "blocked-mailpassword": "Þīn IP nama is fortȳned and ne cann adihtan; þæs ne cann  hit brūcan þone þafungworda eftgemyndgunge tōl swā þæt man ne miswende hine.",
        "acct_creation_throttle_hit": "Nēosiende tō þissum wici, þe þīnne IP-Stōwe brȳcþ, hæfþ gesett {{PLURAL:$1|1 hordcleofan|$1 hordcleofan}} in þǣm læsten dæge. Þu ne canst settan ǣnige māran. Þǣrfram ne cunnon Nēosiende, þe þisne IP-Stōwe brȳcþ, settan ǣnige hordcleofan māran on þisse handhwīle.",
        "accountcreated": "Scōp reccinge",
        "loginlanguagelabel": "Sprǣc: $1",
        "recentchanges-label-bot": "Searuþrǣl fremede þās adihtunge",
        "recentchanges-label-plusminus": "Þæs trametes micelness wæs andwended þȳs rīme grēatbitena",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (seoh ēac [[Special:NewPages|getæl nīwra trameta]])",
-       "rcnotefrom": "Niðer sind þā andwendunga fram <strong>$2</strong> (mǣst īweþ <strong>$1</strong>).",
+       "rcnotefrom": "Niðer {{PLURAL:$5|is sēo andwendung|sindon þā andwendunga}} fram <strong>$4 of $3</strong> (swā fela swā <strong>$1</strong> sind geīwed).",
        "rclistfrom": "Īwan nīwa andwendunga fram $3 $2 and siþþan",
        "rcshowhideminor": "$1 lytela adihtunga",
        "rcshowhideminor-show": "Īwan",
        "uploadbtn": "Hladan ymelan forþ",
        "uploadnologin": "Nā inmeldod",
        "uploaderror": "Wōh on forþhladunge",
-       "upload-permitted": "Geþafod ymelena cynn: $1.",
-       "upload-preferred": "Fōreboren ymelena cynn: $1.",
-       "upload-prohibited": "Forboden ymelena cynn: $1.",
+       "upload-permitted": "Geþafod ymelena {{PLURAL:$2|cynn|cynn}}: $1.",
+       "upload-preferred": "Foreboren ymelena {{PLURAL:$2|cynn|cynn}}: $1.",
+       "upload-prohibited": "Forboden ymelena {{PLURAL:$2|cynn|cynn}}: $1.",
        "uploadlogpage": "Hladan ealdhord forþ",
        "filename": "Ymelan nama",
        "filedesc": "Scortness",
        "wantedpages": "Gewilnode trametas",
        "mostlinked": "Trametas mid þǣm mǣstan rīme hlencena",
        "mostlinkedcategories": "Floccas mid þǣm mǣstan rīme hlencena",
-       "mostlinkedtemplates": "Bysena mid þǣm mǣstan rīme hlencena",
-       "prefixindex": "Ealle trametas mid fōredǣle",
+       "mostlinkedtemplates": "Trametas mid þǣm mǣstan rīme hlencena",
+       "prefixindex": "Ealle trametas mid foredǣle",
        "shortpages": "Scorte trametas",
        "longpages": "Lange trametas",
        "listusers": "Brūcenda getæl",
        "unwatch": "Ablinnan behealdunge",
        "unwatchthispage": "Ablinnan behealdunge",
        "watchlist-details": "{{PLURAL:$1|Þǣr is $1 tramet|Þǣr sind $1 trameta}} on þīnum behealdunggetæle, nā sunderlīce arīmedum mōtunga trametum.",
-       "wlnote": "Niðer {{PLURAL:$1|is sēo nīwoste andwendung|sind þā nīwostan '''$1''' andwendunga}} in {{PLURAL:$2|þǣre latostan tīde|þǣm latostan '''$2''' tīda}}, fram: $3, $4.",
+       "wlnote": "Niðer {{PLURAL:$1|is sēo nīwoste andwendung|sind þā nīwostan '''$1''' andwendunga}} in {{PLURAL:$2|þǣre nīwostan tīde|þǣm nīwostum '''$2''' tīda}}, fram $4 of $3.",
        "wlshowlast": "Īwan þā nīwostan $1 tīda $2 daga",
        "watchlist-options": "Behealdungtæles cyras",
        "watching": "Behealdende...",
        "tooltip-pt-logout": "Ūtmeldian",
        "tooltip-pt-createaccount": "Þū āhst wyrcan grīman tō brūcenne, ac þū ne þearft þæt dōn.",
        "tooltip-ca-talk": "Mōtung ymbe þone innunge tramet",
-       "tooltip-ca-edit": "Þū meaht þisne tramet adihtan. Brūc lā þone fōrebysene cnæpp ǣr þū hordie.",
+       "tooltip-ca-edit": "Þū meaht þisne tramet adihtan. Brūc lā þone forebysene cnæpp ǣr þū hordie.",
        "tooltip-ca-addsection": "Beginnan nīwne dǣl",
        "tooltip-ca-viewsource": "Þes tramet is borgen.\nÞū canst his fruman sēon.",
        "tooltip-ca-history": "Ǣrran fadunga þisses trametes",
        "tooltip-ca-nstab-category": "Sēon þone flocces tramet",
        "tooltip-minoredit": "Mearcian þās tō lytelre adihtunge",
        "tooltip-save": "Hordian þīna andwendunga",
-       "tooltip-preview": "Seoh fōrebysene þīnra andwendunga. Brūc þis lā ǣr þū hordie!",
+       "tooltip-preview": "Seoh forebysene þīnra andwendunga. Brūc þis lā ǣr þū hordie!",
        "tooltip-diff": "Īwan þā andwendunga þā þū dydest wiþ þone traht",
        "tooltip-compareselectedversions": "Sēon þā gescēad betweonan þǣm twǣm gecorenum fadungum þisses trametes",
        "tooltip-watch": "Ēacnian þīn behealdungtæl mid þissum tramete",
-       "tooltip-undo": "\"Undōn\" undēþ þās adihtunge and openaþ þǣre adihtunge bysene tō fōrebysene. Man cann secgan race on þǣre sceortnesse.",
+       "tooltip-undo": "\"Undōn\" undēþ þās adihtunge and openaþ þǣre adihtunge bysene tō forebysene. Man cann secgan race on þǣre sceortnesse.",
        "tooltip-summary": "Wrītan sceorte gemearcunge",
        "anonymous": "{{PLURAL:$1|uncūþ brūcend|uncūðra brūcenda}} of {{SITENAME}}",
        "siteuser": "{{SITENAME}}n brūcend $1",
        "exif-gpsdirection-t": "Sōþ rihtung",
        "namespacesall": "eall",
        "monthsall": "eall",
-       "confirmemail_body": "Hwilchwega, gewēne þu of IP stōwe $1, hæfþ in namanbēc gestt ǣnne hordcleofan\n\"$2\" mid þissum e-ǣrendes naman on {{SITENAME}}n.\n\nTō āsēðenne þæt þes hordcleofa tō þē gebyraþ and tō openienne\ne-ǣrenda hwilcnessa on {{SITENAME}}n, opena þisne bend in þīnum webbscēawere:\n\n$3\n\nGif þis is *nā* þū, ne folga þisne bend.\n\n$5\n\nÞēos āsēðungrūn forealdaþ æt $4.",
+       "confirmemail_body": "Hwilchwega, gewēne þu of IP stōwe $1, hæfþ in namanbēc gesett ǣnne grīman\n\"$2\" mid þissum spearcǣrenda naman on {{SITENAME}}.\n\nTō asēðenne þæt þes grīma tō þē gebȳraþ and tō openienne\nspearcǣrenda hwilcnessa on {{SITENAME}}, opena þisne bend in þīnum webbsēcende:\n\n$3\n\nGif þis *nis* þū, ne folga þisne bend.\n\n$5\n\nÞis asēðunge rūnword forealdaþ æt $4.",
        "scarytranscludefailed": "[Bysene feccung trucode for $1]",
        "scarytranscludetoolong": "[URL is tō lang]",
        "imgmultigo": "Gān!",
        "logentry-delete-delete": "$1 {{GENDER:$2|forlēas}} tramet $3",
        "logentry-newusers-create": "Brūcendes grīma $1 wæs {{GENDER:$2|geworht}}",
        "revdelete-summary": "ādihtscortnes",
-       "searchsuggest-search": "Sēcan"
+       "searchsuggest-search": "Sēcan",
+       "special-characters-group-latin": "Lǣden",
+       "special-characters-group-latinextended": "Ēacnod Lǣden",
+       "special-characters-group-symbols": "Tācnu",
+       "special-characters-group-greek": "Grēcisc",
+       "special-characters-group-cyrillic": "Cyrillisc",
+       "special-characters-group-arabic": "Arabisc",
+       "special-characters-group-persian": "Perseanisc"
 }
index a702bf7..f0b1caf 100644 (file)
@@ -50,7 +50,8 @@
                        "Bibas",
                        "Khaled",
                        "Emara",
-                       "Macofe"
+                       "Macofe",
+                       "Yahya Sakhnini"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "notextmatches": "لم يتم إيجاد أي نص مطابق",
        "prevn": "{{PLURAL:$1|$1}} السابقة",
        "nextn": "{{PLURAL:$1|$1}} التالية",
+       "prev-page": "الصفحة السابقة",
+       "next-page": "الصفحة التالية",
        "prevn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
        "nextn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} تالية",
        "shown-title": "عرض $1 {{PLURAL:$1|نتيجة|نتيجة}} لكل صفحة",
        "tags-source-header": "المصدر",
        "tags-active-header": "نشط؟",
        "tags-hitcount-header": "تغييرات موسومة",
+       "tags-actions-header": "إجراءات",
        "tags-active-yes": "نعم",
        "tags-active-no": "لا",
        "tags-edit": "عدل",
        "tags-delete": "احذف",
        "tags-activate": "نشط",
+       "tags-deactivate": "تعطيل",
        "tags-hitcount": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
        "tags-create-tag-name": "اسم الوسم:",
        "tags-create-reason": "السبب:",
        "tags-create-submit": "أنشئ",
+       "tags-delete-reason": "سبب:",
+       "tags-activate-submit": "تفعيل",
+       "tags-deactivate-reason": "سبب",
        "comparepages": "قارن صفحات",
        "compare-page1": "صفحة 1",
        "compare-page2": "صفحة 2",
index 40a7b4c..ccd793c 100644 (file)
        "faqpage": "Project:چوْخ سوْروشولان سوْال‌لار",
        "actions": "چالیشمالار",
        "namespaces": "آد فضالاری",
-       "variants": "واریانتلار",
+       "variants": "دئییش‌لر",
        "navigation-heading": "دوْلانماق مِنوسو",
        "errorpagetitle": "خطا",
        "returnto": "$1-ه قاییت.",
        "tagline": "{{SITENAME}} سایتیندان",
-       "help": "یاردیم",
+       "help": "کؤمک",
        "search": "آختار",
        "searchbutton": "آختار",
        "go": "گئت",
        "history": "صفحه‌‌نین گئچمیشی",
        "history_short": "گئچمیش",
        "updatedmarker": "سوْن باخیشیمدان سوْنرا یئنی‌لنیب‌دیر",
-       "printableversion": "یازدیریرا بیلن نۆسخه",
-       "permalink": "قالان باغلانتی",
+       "printableversion": "یازدیریرا بیلن سۆروم",
+       "permalink": "قالیجی باغلانتی",
        "print": "یازدیر",
        "view": "باخ",
        "view-foreign": "$1 گور",
        "talkpage": "بۇ صحیفه‌نی دانیش",
        "talkpagelinktext": "دانیشیق",
        "specialpage": "اؤزل صفحه",
-       "personaltools": "شخصی آراجلار",
+       "personaltools": "شخصی آراجلار",
        "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
-       "views": "گؤرونوشلر",
-       "toolbox": "آراجلار",
+       "views": "گؤرونوشلر",
+       "toolbox": "آراجلار",
        "userpage": "ایستیفاده‌چی صحیفه‌‌سینه باخ",
        "projectpage": "پروژه صحیفه‌سینه باخ",
        "imagepage": "فایل صحیفه‌سینه باخ",
        "redirectedfrom": "($1-دن يوْل‌لاندیریلمیش)",
        "redirectpagesub": "یوْل‌لاندیرما صحیفه‌سی",
        "redirectto": "مسیزپرین دَییشیب:",
-       "lastmodifiedat": "بۇ صحیفه‌‌ سوْن دفعه‌‌ $1، $2 چاغیندا دَییشیلمیشدیر.",
+       "lastmodifiedat": "بۇ صفحه‌‌ سوْن کز $1، $2 چاغیندا دَییشیلمیش‌دیر.",
        "viewcount": "بۇ صحیفه {{PLURAL:$1|بیر|$1}} دفعه گؤرولوبدور.",
        "protectedpage": "قوْرونموش صحیفه",
        "jumpto": "آتیل:",
        "jumptonavigation": "دوْلانماق",
        "jumptosearch": "آختار",
        "view-pool-error": "باغیشلایین، ایندی خیدمت‌چیلر آرتیق یۆک آلتیندادیلار.\nچوْخلو ایستیفاده‌چیلر بۇ صحیفه‌نی گؤرمک ایسته‌ییرلر.\nلۆطفاً یئنی‌دن بۇ صحیفه‌یه ال تاپماغا چالیشماقدان اؤنجه، بیر آز دؤزون.\n\n$1",
+       "generic-pool-error": "تاسوف لرله ایندیلیکده سئرور لر آرتیق یوکون آلتیندادیلار.\nچوخلو ایشلدن لر چالیشیرلار بو صفحه لری گورسون لر.\nلوطفا بو صفحه نین گورمگ چالیشماسیندان اونجه بیر آز دوزم ائدین.",
        "pool-timeout": "قیفیلا دؤزماغین واختی بیتیردی",
        "pool-queuefull": "مخزن صفی دوْلودور",
        "pool-errorunknown": "بیلینمه‌ین خطا",
        "pool-servererror": "پول سنتر سئرویسی الده دئییل ( $1 ).",
        "poolcounter-usage-error": "$1:ایشلتمک خطاسی",
-       "aboutsite": "{{SITENAME}} حاقیندا",
-       "aboutpage": "Project:حاقیندا",
+       "aboutsite": "{{SITENAME}} گؤره",
+       "aboutpage": "Project:گؤره",
        "copyright": "ایچینده‌کیلر $1 لیسانسی احاطه‌سینده‌دیلر.",
        "copyrightpage": "{{ns:project}}:کوْپی حاقلاری",
-       "currentevents": "ایندیکی اولایلار",
-       "currentevents-url": "Project:ایندیکی اولایلار",
-       "disclaimers": "رد ائتمک",
-       "disclaimerpage": "Project:عمومی رد ائتمک",
+       "currentevents": "ایندیکی اولایلار",
+       "currentevents-url": "Project:ایندیکی اولایلار",
+       "disclaimers": "یالانلامالار",
+       "disclaimerpage": "Project:گنل یالانلاما",
        "edithelp": "ديَیشتیرمک یاردیمی",
+       "helppage-top-gethelp": "یاردیم",
        "mainpage": "آنا صفحه",
        "mainpage-description": "آنا صفحه",
        "policy-url": "Project:قایدالار",
        "versionrequired": "مِدیاویکی یازیلیمینین $1 نۆسخه‌سی لازیمدیر",
        "versionrequiredtext": "بۇ صحیفه‌نی ایشلتمک اۆچون، مِدیاویکی یازیلیمینین $1 نۆسخه‌سی لازیم‌دیر.\n[[Special:Version|نۆسخه صحیفه‌سینه]] باخ.",
        "ok": "اوْلسون",
-       "retrievedfrom": "«$1»-دن آلینمیشدیر",
+       "retrievedfrom": "«$1»-دن آلینمیشدیر",
        "youhavenewmessages": "سیزین $1 ($2) وارینیزدیر.",
        "youhavenewmessagesfromusers": "سیزین {{PLURAL:$3|بیر آیری ایستیفاده‌چی‌دن|$3 ایستیفاده‌چی‌دن}} $1 وارینیزدیر ($2).",
        "youhavenewmessagesmanyusers": "سیزین چوْخلو ایستیفاده‌چیلردن $1 وارینیزدیر ($2).",
        "hidetoc": "گیزلت",
        "collapsible-collapse": "ییغیشلات",
        "collapsible-expand": "گئنیشلت",
+       "confirmable-confirm": "{{GENDER:$1|سیز}} اطمینانیز وار می؟",
        "confirmable-yes": "هن",
        "confirmable-no": "یوْخ",
        "thisisdeleted": "$1-نا باخ یا اوْنو قایتار؟",
        "site-atom-feed": "$1 آتوم فید",
        "page-rss-feed": "«$1» آراِس‌اِس فید",
        "page-atom-feed": "«$1» آتوم فید",
-       "red-link-title": "$1 (صحیفه یوْخدور)",
+       "red-link-title": "$1 (صفحه یوْخ‌دور)",
        "sort-descending": "آزالان سیرالاماق",
        "sort-ascending": "چوْخالان سیرالاماق",
        "nstab-main": "صفحه",
        "nstab-user": "ایشلدن صفحه‌سی",
        "nstab-media": "مئدیا صحیفه‌سی",
-       "nstab-special": "اؤزل صحیفه",
+       "nstab-special": "اؤزل صفحه",
        "nstab-project": "پروژه صحیفه‌سی",
        "nstab-image": "فایل",
        "nstab-mediawiki": "مئساژ",
        "readonly_lag": "ایکینجی درجه‌لی دیتابیس خیدمت‌چیلری، آنا دیتابیسه یئتیشماغا گؤره، بو دیتابیس اوتوماتیک باغلانیب‌دیر",
        "internalerror": "ایچ خطاسی",
        "internalerror_info": "ایچ خطاسی: $1",
+       "internalerror-fatal-exception": "استثنای مخرب \"$1\"نوعو",
        "filecopyerror": "«$1» فایلی، «$2»-ه کوپی اولانمادی.",
        "filerenameerror": "«$1» فایلین آدی «$2»-نا دَییشدیریلنمه‌دی.",
        "filedeleteerror": "«$1» فایلی سیلیننمه‌دی.",
        "virus-badscanner": "پیس تنظیملر: تانینمامیش ویروس یوخلایان: ''$1''",
        "virus-scanfailed": "یوخلاماق باشا چاتمادی (کود $1)",
        "virus-unknownscanner": "تانینمامیش آنتی‌ویروس:",
-       "logouttext": "<strong>سÛ\8cز Ø§Û\8cÙ\86دÛ\8c Ø³Û\8cستÙ\90Ù\85â\80\8cدÙ\86 Ú\86Û\8cخدÛ\8cÙ\86Û\8cز.</strong>\n\nسÛ\8cز {{SITENAME}}-Û\8c ØªØ§Ù\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ Ø§Ù\88Ù\84اراÙ\82 Ø§Û\8cØ´Ù\84دÙ\87 Ø¨Û\8cÙ\84رسÛ\8cÙ\86Û\8cزØ\8c Û\8cÙ\88خسا Ù\87Ù\85Ù\86 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø¢Ø¯Û\8c Û\8cا Ø¨Ø§Ø´Ù\82ا Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø¢Ø¯Û\8c Ø§Û\8cÙ\84Ù\87 <span class='plainlinks'>[$1Û\8cئÙ\86Û\8câ\80\8cدÙ\86 Ú¯Û\8cرÛ\8cØ´]</span> Ø§Ø¦Ø¯Ù\87 Ø¨Û\8cÙ\84رسÛ\8cÙ\86Û\8cز.\nبÙ\88Ù\86ا Ø¯Û\8cÙ\82ت Ø§Ø¦Ø¯Û\8cÙ\86 Ú©Û\8c Ø¨Ø¹Ø¶Û\8c ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84رØ\8c کَش-ینیزی سیلمه‌میش کیمی، هله ده سیزین گیریش ائتدیگینیز کیمی گؤستریله‌جکلر.",
+       "logouttext": "<strong>سÛ\8cز Ø§Û\8cÙ\86دÛ\8c Ø³Û\8cستÙ\90Ù\85â\80\8cدÙ\86 Ú\86Û\8cخدÛ\8cÙ\86Û\8cز.</strong>\n\nبÙ\88Ù\86ا Ø¯Û\8cÙ\82ت Ø§Ø¦Ø¯Û\8cÙ\86 Ú©Û\8c Ù\88ب Ø­Ø§Ù\81Û\8cظÙ\87 Ù\86Û\8cزÛ\8c Ø³Û\8cÙ\84Ù\85Ù\87 Û\8cÙ\86Ø\8cبعضÛ\8c ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84ر کَش-ینیزی سیلمه‌میش کیمی، هله ده سیزین گیریش ائتدیگینیز کیمی گؤستریله‌جکلر.",
        "welcomeuser": "خوش گلمیسینیز، $1!",
        "welcomecreation-msg": "حسابینیز آچیلدی.\n[[Special:Preferences|{{SITENAME}}ترجیحلر]] دییشدیرمیی اونوتمایین.",
        "yourname": "ایستیفاده‌چی آدی:",
-       "userlogin-yourname": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آدی",
+       "userlogin-yourname": "اÛ\8cØ´Ù\84دÙ\86 آدی",
        "userlogin-yourname-ph": "ایستیفاده‌چی آدینیزی دَییشدیرین",
        "createacct-another-username-ph": "ایستیفاده‌چی آدینیزی داخیل ائدین",
        "yourpassword": "رمز:",
        "wrongpassword": "یانلیش رمز وئریلدی.\nیئنی‌دن یازین.",
        "wrongpasswordempty": "بوش رمز وئردینیز.\nیئنی‌دن یازین.",
        "passwordtooshort": "رمز، آزی {{PLURAL:$1|بیر|$1}} کاراکتئر اولمالی‌دیر.",
+       "passwordtoolong": "رمز،سوزو چوخلوغو {{PLURAL:$1|۱ سوز|$1 سوز}} کاراکتئر اولمامالی‌دیر.",
        "password-name-match": "رمزینیز ایستیفاده‌چی آدینیزلا فرق‌لی اولمالی‌دیر.",
        "password-login-forbidden": "بو ایستیفاده‌چی آدی و رمزی ایشلدمک، قاداغان اولوب‌دور.",
        "mailmypassword": "یئنی رمزی ایمیل ایله گؤندر",
        "resetpass-submit-cancel": "لغو ائت",
        "resetpass-wrong-oldpass": "یانلیش گئچیجی یا ایندیکی رمز.\nاولا بیلر سیز باشاریلیق‌لا رمزینیزی دَییشمیسینیز یوخسا یئنی گئچرلی رمز ایسته‌میسینیز.",
        "resetpass-recycled": "لوطفا گیریش رمزینیزی ایندیکی اولمایان بیر ایری گیریش رمزینه دَییشین",
+       "resetpass-temp-emailed": "سیز بیر کدلانمیش موقت ایمیل له گیریش ائدیب سیز.\nگیریشینیزه سون وئرمک اوچون یئنی دن بیر گیریش رمزی وئرمه لی سیز:",
        "resetpass-temp-password": "گئچیجی رمز:",
        "resetpass-abort-generic": "رمز دَییشدیرمک، بیر اوزانتی ایله یاریدا کسیلیب‌دیر.",
+       "resetpass-expired": "گیریش رمزینیز بایات اولوب.لطفا گیریشینیز اوچون یئنی بیر گیریش رمزی سئچین.",
+       "resetpass-expired-soft": "گیریش رمزینیز بایات اولوب و یئنی دن تنظیم اولونمالی دیر. لوطفا ایندی بیر یئنی رمز سئچیب یا دا یئنی دن تنظیم ائتمک اوچون سونرالیقدا\"{{int:resetpass-submit-cancel}}\" دویمه سین باسین.",
+       "resetpass-validity-soft": "گیریش رمزینیز دوز دئیییل:$1\nلوطفا ایندی بیر یئنی گیریش رمزی سئچین یا دا\"{{int:resetpass-submit-cancel}}\" باسین کی سونرا اونو یئنی دن سئچرسیز.",
        "passwordreset": "رمزی یئنی‌له",
        "passwordreset-text-one": "رمزینیزی صیفیرلاماق اوچون بو فورمو باشا چاتدیرین.",
        "passwordreset-text-many": "{{PLURAL:$1|رمزینیزی صیفیرلاماق اوچون، بیرینی دولدورون.}}",
        "changeemail-none": "(هئچ)",
        "changeemail-password": "سیزین {{SITENAME}} رمزینیز:",
        "changeemail-submit": "ایمیلی دَییشدیر",
+       "changeemail-throttled": "سیز دفعه لرجه گیریش اوچون چالیشیب سیز.\nلوطفا یئنی دن چالیشمامیشدان اونجه $1 دوزوم ائدین.",
+       "resettokens": "نیشانلی لاری یئنیلمه",
+       "resettokens-no-tokens": "هئچ بیر نیشانلی یئنیلنمک اوچون یوخدور.",
+       "resettokens-legend": "نیشانلی لاری یئنیلمه",
+       "resettokens-tokens": "نیشانلی:",
+       "resettokens-token-label": "$1 (ایندیکی میقداری: $2)",
+       "resettokens-watchlist-token": "نیشانلامیش یئمک وپی [[Special:Watchlist|ایزلنمیش سون دییشیک اولان صفحه لر]](اتم/آراس‌اس)",
+       "resettokens-done": "رمز لری دَییشلندی.",
+       "resettokens-resetbutton": "سئچیلمیش دَییشلنن رمزلر.",
        "bold_sample": "قالین یازی",
        "bold_tip": "قالین یازی",
        "italic_sample": "اَیری یازی",
        "link_sample": "باغلانتی باشلیغی",
        "link_tip": "ایچری باغلانتی‌سی",
        "extlink_sample": "http://www.example.com باغلانتی باشلیغی",
-       "extlink_tip": "خارÛ\8cجÛ\8c باغلانتی (http:// اؤن‌اکی‌نی اونوتمایین)",
+       "extlink_tip": "ائشÛ\8cÚ© باغلانتی (http:// اؤن‌اکی‌نی اونوتمایین)",
        "headline_sample": "باشلیق متنی",
        "headline_tip": "۲ یوکسک باشلیق",
        "nowiki_sample": "فورمت‌لشدیریلمه‌میش یازی‌نی بورا داخیل ائدین",
        "subject": "قونو/باشلیق:",
        "minoredit": "بو بیر کیچیک دَییشدیرمه‌دیر",
        "watchthis": "بو صفحه‌نی ایزله",
-       "savearticle": "صحیفه‌نی قئید ائت",
+       "savearticle": "صفحه‌نی ساخلا",
        "preview": "اؤن‌گؤستریش",
        "showpreview": "سیناق گؤستریش",
        "showdiff": "دَییشیکلیکلری گؤستر",
+       "blankarticle": "<strong>دیققت:</strong>سیز بیر بوش صفحه نین یاراتماق حالیندا سیز .\nایر«{{int:savearticle}}» بیر ده باسایلا،بوش صفحه یاراناجاق.",
        "anoneditwarning": "<strong>دیقت:</strong> سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلب و گورسنجک.هر دَییشدیرمه ائتسز.<strong>[$1 گیریش ائتسز]</strong> یا <strong>[$2 بیر ایشلدن حسابی آچاسیز]</strong>, دَییشدیرمه لرینیز سیزین ایشلدن حساب آدینیزا نیسبت وئریلجک و آرتیق مزیت لرله.",
        "anonpreviewwarning": "''سیستمه گیرمه‌میسینیز. قئید ائتمک‌له، سیزین آی‌پی آدرسینیز بو صحیفه‌نین گئچمیشین‌ده ثبت اولوناجاقدیر.''",
        "missingsummary": "'''یادا سالما:''' سیز بیر دَییشیکلیک قیساسی یازمامیسینیز. «{{int:savearticle}}» دویمه‌سینی تیک‌لاسازسا، دَییشیکلیگینیز، قیسا شرح‌سیز اولاراق قئید اولوناجاق.",
+       "selfredirect": "<strong>دیققت:</strong>سیز صفحه نین یولون اوزونه دَییشدیریمک حالیندا سیز.\nایمکانی وار یانلیش سون بیر یئری یولون دَییشمک اوچون سئچیب سیز،یا دا صفحه نی یانلیش دَییشدیرسیز.\nایر\"{{int:savearticle}}\" اوستون یئنی دن باساسینیز یولون دَییشیکلیگی دوزلجک.",
        "missingcommenttext": "لوطفاً آشاغی‌دا بیر یوروم یازین.",
        "missingcommentheader": "'''یادا سالما:''' سیز یورومونوز اوچون بیر قونو/باشلیق یازمامیسینیز.\n«{{int:savearticle}}»-ی تیک‌لاسازسا، دَییشیکلیگینیز، قونو/باشلیق-ی اولمایاراق قئید اولوناجاق‌دیر.",
        "summary-preview": "قیسا اؤن‌گؤستریش:",
        "subject-preview": "قونو/باشلیق اؤن‌گؤستریشی:",
+       "previewerrortext": "سیزین دَییشدیرمه‌لرینیزین اؤن‌گؤسترمه‌سینده بیر خطا قاباغا گلدی.",
        "blockedtitle": "ایستیفاده‌چی باغلانیب",
        "blockedtext": "' 'ایستیفاده‌چی آدی و یا آی پی عنوانینیز قاباغی باغلانیب دیر.'\n\nسیزی باغلایان$ 1. الیله اولوب دیر \nباغلاماق سببی:' $ 2.\n\n* باغلانمانین باشلانان زامانی: $ 8\n* باغلانمانین قورتولان زامانی: $ 6\n* باغلانما مدتی: $ 7\n\nگؤستریلن سببه گؤره ائنگئللئنمئنیزین اویغون اولمادیغینی دوشونورسونوزسه، $ 1 یا دا باشقا بیر [[{{MediaWiki:Grouppage-sysop}}|مدیر]]  ایله بو وضعیتی گؤروشه بیلرسینیز. [[Special:Preferences|ترجیح لرینیز]] قیسمینده اعتبارلی بیر ائ-پوچت اونوانی گیرمئدیسئنیز \"ایستیفاده‌چییه ائ-پوچت گؤندر\" خصوصیتینی ایستیفاده ائده، ترجیهلرینیز ایمیل عنوانینیزی علاوه ایمیل گؤندرمک حقوقونا صاحب اولاجاقسینیز.\nبو آنکی باغلانما عنوانینیز $ 3، ائنگئللئنمئ نؤمره‌نیز # $ 5.\nبیر ایداره‌چی‌لر وضعیتینیز حاقیندا معلومات آلماق ایستدیگینیزده و یا هر هانسی بیر سورگودا بو معلومات‌لار لازیم اولا‌جاق، خاهیش ائدیریک نوت ائدین.",
        "autoblockedtext": "\n' 'ایستیفاده‌چی آدی و یا آی پی عنوانینیز قاباغی باغلانیب دیر.'\n\nسیزی باغلایان$ 1. الیله اولوب دیر \nباغلاماق سببی:' $ 2.\n\n* باغلانمانین باشلانان زامانی: $ 8\n* باغلانمانین قورتولان زامانی: $ 6\n* باغلانما مدتی: $ 7\n\nگؤستریلن سببه گؤره ائنگئللئنمئنیزین اویغون اولمادیغینی دوشونورسونوزسه، $ 1 یا دا باشقا بیر [[{{MediaWiki:Grouppage-sysop}}|مدیر]]  ایله بو وضعیتی گؤروشه بیلرسینیز. [[Special:Preferences|ترجیح لرینیز]] قیسمینده اعتبارلی بیر ائ-پوچت اونوانی گیرمئدیسئنیز \"ایستیفاده‌چییه ائ-پوچت گؤندر\" خصوصیتینی ایستیفاده ائده، ترجیهلرینیز ایمیل عنوانینیزی علاوه ایمیل گؤندرمک حقوقونا صاحب اولاجاقسینیز.\nبو آنکی باغلانما عنوانینیز $ 3، ائنگئللئنمئ نؤمره‌نیز # $ 5.\nبیر ایداره‌چی‌لر وضعیتینیز حاقیندا معلومات آلماق ایستدیگینیزده و یا هر هانسی بیر سورگودا بو معلومات‌لار لازیم اولا‌جاق، خاهیش ائدیریک نوت ائدین.",
        "edit-conflict": "سیزله برابر دییشدیرمه",
        "edit-no-change": "سیزین دییشدیر قئیده آلینمامیش‌دیر. بئله کی، متنده هئچ بیر دییشدیر ائدیلممیش‌دیر.",
        "postedit-confirmation-created": "به صفحه یارانیب‌دیر.",
+       "postedit-confirmation-restored": "صفحه گئری یوکلندی.",
        "postedit-confirmation-saved": "سیزین دَییشدیرمه‌نیز قئید اولونوب‌دور.",
        "edit-already-exists": "یئنی صحیفنی یاراتماق مومکون دئییل.\nبئله کی، بو آددا صحیفه آرتیق مؤوجوددور.",
        "defaultmessagetext": "دفالت دانیشیق متنی",
        "invalid-content-data": "اعتبارسیز مضمون معلوماتی",
        "content-not-allowed-here": "\"$1\" مقاله‌سینه، [[$2]] صحیفه‌سینده ایجازه وئریلممیش دیر.",
        "editwarning-warning": "بو صحیفه‌نی ترک ائتمک، دَییشدیرمه‌لرینیزی الدن وئرمگه سبب اولا بیلر. اگر گیریش ائتمیسینیز بو ایخطاری، ترجیحلرینیزین «دَییشدیرمک» بؤلوموندن، \"{{int:prefs-editing}}\"ایشدن سالا بیلرسینیز.",
+       "editpage-notsupportedcontentformat-title": "فایلین فرمتی دستکلنمیر.",
+       "editpage-notsupportedcontentformat-text": "$1 فایلین فرمتی  $2 فایل مدلی ایله دستکلنمیر.",
        "content-model-wikitext": "ویکی‌یازی",
        "content-model-text": "ساده یازی",
        "content-model-javascript": "جاوااسکریپت",
        "content-model-css": "سی‌اس‌اس",
+       "content-json-empty-object": "مقصدی بوش",
+       "content-json-empty-array": "بوش ماتریس",
+       "duplicate-args-category": "تیکراری داده قالیب لریندن ایشلنمیش صفحه لر",
        "expensive-parserfunction-warning": "خبردارلیق: بو ​​صحیفه چوخ چوخ زنگین ییغیجی تجزیه ائدن چاغیریشی دستورلار ائدیر.\n\nبو $2 مراجعت آز اولما‌لی، بو آندا {{PLURAL:$2|چاغیرش وار|چاغریش وار}} و اینک {{PLURAL:$1|چاغیرش وار|$1چاغریش وار}} .",
        "expensive-parserfunction-category": "کیفایت قدر بؤیوک سایدا گئنیشرئسورس‌لو فونکسیا‌لارین مراجعت اولوندوغو صحیفه‌لر",
        "post-expand-template-inclusion-warning": "'''دیققت!''' داخیل ائدیلن شابلوْنلارین حجمی حددیندن آرتیق بؤيوکدور.\nبعضی شابلوْنلار علاوه‌‌ اوْلونماياجاق.",
        "parser-template-recursion-depth-warning": "($1) شابلوندا درین‌لیک لیمیتی کئچیلدی",
        "language-converter-depth-warning": "($1) دیل کونوئرتورونون لیمیتی کئچیلدی",
        "node-count-exceeded-category": "دویون سایی آشیلان صحیفه‌لر",
+       "node-count-exceeded-category-desc": "بو صفحه ایشکال حدی چوخلوغوندان یوخاری گئدیب دیر.",
        "node-count-exceeded-warning": "صحیفه دویون سیاهییاالما آشیلدی",
        "expansion-depth-exceeded-category": "گئنیشلمه درین‌لیگی آشیلان صحیفه‌لر",
        "expansion-depth-exceeded-warning": "صحیفه گئنیشلنمه درین‌لیگی آشیلدی",
        "undo-success": "بو دَییشیک‌لیک گئری آلینا بیلر. لطفاً آشاغی‌داکی موقاییسه ائتمیی نظارت ائدین، حقیقتن بو دییشیک‌لیگی ائتمک ایستدیگینیزدن امین اولون و صحیفنی یازا‌راق بیر اوولکی دییشیک‌لیگی گئرییه آلین.",
        "undo-failure": "دییشیک‌لیک‌لرین توققوشماسی نتیجه‌سینده گئرییه قایتارما ایشی اوغورسوز اولدو.",
        "undo-norev": "دوزلیش‌لر گئری قایتاریلا بیلینمیر، چونکی اونلار یا مؤوجود دئییل، یا دا سیلینیب.",
+       "undo-nochange": "نظره گلیر دَییشدیرمه قاباغجادان قایتاریلیب.",
        "undo-summary": "$1 دییشیک‌لیک [[Special:Contributions/$2|$2]] ([[User talk:$2|دانیشیق]]) طرفین‌دن گئری آلیندی​​.",
        "undo-summary-username-hidden": "گیزلی ایستیفاده‌چی ایله ائدیلمیش $1 نوسخه‌سینی قایتارماق",
        "cantcreateaccounttitle": "حساب یارادماق اولمور",
        "cantcreateaccount-text": "بو ای پی عنوانین‌دان ('$1) ایستیفاده‌چی حسابی یارادیلماسی [[User:$3|$3]] طرفین‌دن انگللنمیش‌دیر.\n\n$3 طرفین‌دن وئریلن سبب '$2",
+       "cantcreateaccount-range-text": "'''$1''' آی‌پی آدرس آرالیغیندان حساب یارانماق، [[User:$3|$3]] ایشلدنی طرفیندن یاساقلانیب‌دیر. سیزین‌ده آی‌پی آدرسیز ('''$4''') بو آرادادیر.\n\n$3 طرفین‌دن وئریلن سبب بودور: «$2»",
        "viewpagelogs": "بو صحیفه‌نین قئیدلرینه باخ",
        "nohistory": "بو صحیفه اوچون دَییشدیرمه گئچمیشی یوخدور.",
        "currentrev": "سون نوسخه",
        "currentrev-asof": "$1 تاریخینه کیمی سون حال",
        "revisionasof": "$1 نوسخه‌سی",
        "revision-info": "$1- یارادیلمیش نوسخه{{GENDER:$6|$2}}$7 الیله",
-       "previousrevision": "اونجه‌کی وئرسیيا",
+       "previousrevision": "قاباق‌کی سۆروم",
        "nextrevision": "داها یئنی نوسخه ←",
        "currentrevisionlink": "سون نوسخه",
        "cur": "ایندی",
        "rev-deleted-event": "(قئيد سیلیندی)",
        "rev-deleted-user-contribs": "[ایستیفاده‌چی آدی و يا ای-پی اونوانی سیلیندی - ديَیشیکلیک چالیشمالاردان چیخاریلدی]",
        "rev-deleted-text-permission": "بو ديَیشیکلیک بو صحیفه‌دن '''سیلینیب دیر.'''",
+       "rev-suppressed-text-permission": "بو صفحه نوسخه‌سی <strong>باسدیریلیب‌دیر</strong>.\nآرتیق بیلگیلری [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} باسدیری قئیدین‌دن] تاپا بیلرسیز.",
        "rev-deleted-text-unhide": "بو صحیفه رئویزیونو 'سیلینمیش.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاهه سیلینمش] دئتال‌لاری بیلر.\nبیر خیدمتله اولا‌راق اگر داوام ائتسه‌نیز [$1 بو رئویزیونو هله گؤره بیلرسینیز].",
        "rev-suppressed-text-unhide": "صحیفه‌نین بو نوسخه سی سیلینیب.\nمومکون‌دور کی، بونون سببی [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمه قئیدلرینده]گؤستریلمیش‌دیر.\nسیز ایداره‌چی اولدوغونوزا گؤره سیلینن [$1 بو وئرسیانی] نظردن کئچیره بیلرسینیز.",
        "rev-deleted-text-view": "صحیفه‌نین بو نوسخه سی سیلینیب.\nسیز ایداره‌چی اولدوغونوزا گؤره سیلینن بو وئرسیانی نظردن کئچیره بیلرسینیز. مومکون‌دور کی، سیلینمه‌نین سببی [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمه قئیدلرینده] گؤستریلمیش‌دیر.",
        "rev-suppressed-unhide-diff": "بو دییشیک‌لیگی‌نین رئویزیون‌لارین‌دان بیری 'باسدیریلمیش.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} دایاندیرما گوندلیگینده] دئتال‌لار اولا بیلر.\nبیر خیدمتله اولا‌راق اگر داوام ائتسه‌نیز [$1 بو دییشیک‌لیگی هله گؤره بیلرسینیز].",
        "rev-deleted-diff-view": "بو دییشیک‌لیگی‌نین رئویزیون‌لارین‌دان بیری 'سیلینمیش.\nبیر خیدمتله اولا‌راق بو دییشیک‌لیگی گؤره بیلرسینیز؛ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمه گوندلیگینده] دئتال‌لار اولا بیلر.",
        "rev-suppressed-diff-view": "بو دییشیک‌لیگی‌نین رئویزیون‌لارین‌دان بیری 'باسدیریلمیش.\nبیر خیدمتله اولا‌راق بو دییشیک‌لیگی گؤره بیلرسینیز؛ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} دایاندیرما گوندلیگینده] دئتال‌لار اولا بیلر.",
-       "rev-delundel": "گؤستر/گیزلت",
+       "rev-delundel": "گؤرست/گیزلت",
        "rev-showdeleted": "گؤستر",
        "revisiondelete": "نوسخه‌لری سیل/قایتار",
        "revdelete-nooldid-title": "هدف نوسخه گئچرسیزدیر",
        "revdelete-no-file": "آختاریلان فايل مؤوجود دئيیل",
        "revdelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" فایلینین $2 $3 تاریخ‌لی سیلینمیش بیر رئداکته‌سینی گؤرمک ایستدیگینیزدن امینسیزینیزمی؟",
        "revdelete-show-file-submit": "بلی",
+       "revdelete-selected-text": "{{PLURAL:$1|سئچیلمیش نوسخه|سئچیلمیش نوسخه لر}} [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|سئچیلمیش نوسخه|سئچیلمیش نوسخه لر}} [[:$2]]:",
        "logdelete-selected": "'ژورنالین {{PLURAL:$1|سئچیلمیش قئیدی|سئچیلمیش قئیدلری}}:'",
+       "revdelete-text-text": "سیلینمیش نوسخه لرین بیلگی لر هله لیک صفحه نین گئچمیشینده گورسنجک سانکی بو نوسخه لرین ایچرینه لرینه ال تاپماق هامی اوچون امکانلی دئییل.",
+       "revdelete-text-file": "سیلنمیش نوسخه لر هله لیک پرونده نین گئچمیشینده گورستریلیر سانکی اونون ایچریسینین بولوملریندن هامی اوچون ال تاپماق ایمکانی یوخدور.",
+       "logdelete-text": "سیلینمیش نوسخه لرین هله لیک صفحه نین گئچمیشینده گورسنجک سانکی ایچرینین بولملریندن ال تاپماق هامی اوچون امکانلی دئییل.",
+       "revdelete-text-others": "آیری مودیرلر ائلیه بیلرلر گیزلنمیش بو یازیلاری گورسونلر بو یوللا پوزولموش موردلری قایترلر یوخسا بو ایشه ایجازه وئریلمیه.",
        "revdelete-confirm": "خاهیش ائدیریک، بونو ائتمک ایستدیگینیزی، نتیجه‌لرینی آنلادیغینیزی، و بونو [[{{MediaWiki:Policy-url}}| پرینسیپ‌لره]] گؤره ائدیر اولدوغونوزو تسدیق ائدین.",
        "revdelete-suppress-text": "ساخلاما <strong>یالنیز</strong> آشاغی‌داکی حال‌لار اوچون ایستیفاده ائدیلمه‌لی‌دیر:\n* اویگون‌سوز فردی معلومات\n*:<em> ائو اونوان‌لاری و تئلئفون نؤمره‌لری، سوسیال تهلوکه‌سیزلیک نؤمره‌لری، و س.</em>",
        "revdelete-legend": "گؤرونوش محدودیتلری قوی:",
        "mergehistory-empty": "نوسخه‌لرین هئچ بیری بیرلشدیریلنمزلر.",
        "mergehistory-success": "[[:$1]]-ین {{PLURAL:$3|بیر|$3}} نوسخه‌سی باشاری‌لا [[:$2]]-له بیرلشدیریلدی.",
        "mergehistory-fail": "گئچمیش بیرلشدیریلنمه‌دی، لوطفاً صحیفه و زامان پارامئترلرینی یئنی‌دن یوخلایین.",
+       "mergehistory-fail-toobig": "گئچمیش بیرلشمک ایشینی گورمک اولمور نئجه کی $1 محدودیتی چوخلوغوندان{{PLURAL:$1|نوسخه}} انتقال تاپاجاق.",
        "mergehistory-no-source": "$1 قایناق صحیفه‌سی یوخدور.",
        "mergehistory-no-destination": "$1 مقصد صحیفه‌سی یوخدور.",
        "mergehistory-invalid-source": "قایناق صحیفه‌نین گرک دوزگون باشلیغی اولسون.",
        "compareselectedversions": "سئچیلمیش نوسخه‌لری قارشیلاشدیر",
        "showhideselectedversions": "سئچیلمیش نوسخه‌لری گؤستر/گیزلد",
        "editundo": "قایتار",
+       "diff-empty": "فرقیسیز",
+       "diff-multi-sameuser": "(همن کی ایشلدیچی طرفیندن ائدیلمیش  {{PLURAL:$1|بیر دَییشلیک|$1 بیر نئچه دَییشلیک}} گوستریلمیر)",
+       "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": "هئچ بیر بنزر صحیفه یازی‌سی تاپیلمادی",
        "prevn": "اؤنجه‌کی {{PLURAL:$1|$1}}",
        "nextn": "سونراکی {{PLURAL:$1|$1}}",
+       "prev-page": "قاباغکی صحیفه",
+       "next-page": "سونراکی صفحه",
        "prevn-title": "قاباقکی {{PLURAL:$1|بیر|$1}} نتیجه",
        "nextn-title": "سونراکی {{PLURAL:$1|بیر|$1}} سونوج",
-       "shown-title": "هر صحیفه‌ده {{PLURAL:$1|بیر|$1}} نتیجه گؤستر",
+       "shown-title": "هر صفحه‌ده {{PLURAL:$1|بیر|$1}} نتیجه گؤرست",
        "viewprevnext": "گؤستر ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''بو ویکی‌ده «[[:$1]]» آدلی صحیفه واردیر.'''",
        "searchmenu-new": "<strong>بو ویکی‌ده «[[:$1]]» صحیفه‌‌سینی يارات!</strong> {{PLURAL:$2|0=|هابئله تاپیلمیش صفحه نی آختاریشینیزلا گورون.|هابئله تاپیلمیش آختاریشین نتیجه سین گورون.}}",
        "search-result-category-size": "{{PLURAL:$1|بیر|$1}} عوضو ({{PLURAL:$2|بیر|$}} آلت‌بؤلمه، {{PLURAL:$3|بیر|$3}} فایل)",
        "search-redirect": "یول‌لاندیرما $1",
        "search-section": "(بؤلوم $1)",
+       "search-category": "(رده  $1)",
+       "search-file-match": "(فایلین ایچری اوخشاری)",
        "search-suggest": "بونو نظرده توتوردونوزمو: $1",
        "search-interwiki-caption": "قارداش پروژه‌لر",
-       "search-interwiki-default": "$1 Ø³Ù\88Ù\86Ù\88ج:",
+       "search-interwiki-default": "$1 Ø¯Ø§Ù\86 Ø³Ù\88Ù\86Ù\88جÙ\84ار:",
        "search-interwiki-more": "(داها)",
        "search-relatedarticle": "ایلگیلی",
        "searchrelated": "ایلگیلی",
        "searchall": "بوتون",
        "showingresults": "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$1|'''بیر'''|'''$1'''}} سونوجا قدر گؤستریلیر.",
+       "showingresultsinrange": "آشاغی دا گوسترمک {{PLURAL:$1|<strong>1</strong> سونو|<strong>$1</strong> سونو}} چان محدوده سینده #<strong>$2</strong> چان #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|نتیجه لر <strong>$1</strong> از <strong>$3</strong>|نتیجه لر<strong>$1 - $2</strong> از <strong>$3</strong>}}",
        "search-nonefound": "سیزین سورونوزا اویغون نتیجه تاپیلمادی.",
        "powersearch-legend": "گلیشمیش آختاریش",
        "powersearch-togglelabel": "یوخلا:",
        "powersearch-toggleall": "بوتون",
        "powersearch-togglenone": "هئچ بیری",
+       "powersearch-remember": "سچمگی گلجک سون آختاریشلارا یاد دا ساخلا",
        "search-external": "ائشیک آختاریش",
        "searchdisabled": "{{SITENAME}} آختاریشی باغلانیب‌دیر.\nایندی گوگل ایله آختارا بیلرسینیز.\nدیقت ائدین کی اونون {{SITENAME}} ایندئکسی، کؤهنه اولا بیلر.",
        "search-error": "آختاراندا بیر خطا قاباغا گلدی: $1",
        "preferences": "ترجیحلر",
        "mypreferences": "ترجیحلر",
        "prefs-edits": "دَییشمه‌لرین سایی:",
+       "prefsnologintext2": "خواهیش اولونور تنظیملرینیزی دَییشمک اوچون گیریش ائدین.",
        "prefs-skin": "قابیق",
        "skin-preview": "اؤن‌گؤستریش",
        "datedefault": "سئچیم‌سیز",
        "prefs-rc": "سون دَییشیکلیکلر",
        "prefs-watchlist": "ایزله‌دیکلر",
        "prefs-editwatchlist": "ایزله‌دیگیم صحیفه‌‌لری دَییشدیر",
+       "prefs-editwatchlist-label": "هامی ایزلدیکلرینیزین دَییشدیرمه سی:",
+       "prefs-editwatchlist-edit": "ایزلدیکلرینیزدن گورمک هابئله باشلیق لارین سیلمک",
+       "prefs-editwatchlist-raw": "ایزله‌دیگیم خام لیستی دَییشدیر",
+       "prefs-editwatchlist-clear": "ایزله دیگیم لیستی سیلمک",
        "prefs-watchlist-days": "ایزله‌دیکلرده گؤستریلن گونلر",
        "prefs-watchlist-days-max": "چوخو {{PLURAL:$1|بیر|$1}} گون",
        "prefs-watchlist-edits": "گنیشلنمیش ایزله‌مه‌لرده گؤستریلن دَییشیکلیکلرین چوخو:",
        "recentchangesdays-max": "ماکسیموم $1 {{PLURAL:$1|گون |گون}}",
        "recentchangescount": "سون ديَیشیکلیکلرده باشلیق سايی:",
        "prefs-help-recentchangescount": "بورایا یئنی دییشیک‌لیک‌لر، صحیفه‌لرین و ژورنال‌لارین تاریخچه‌سی داخیل‌دیر.",
+       "prefs-help-watchlist-token2": "بو کیلید ایزلدیگیز لیستین وب تغذیه سی رمزی دیر.\nهر کیم اونا ال تاپسا ایزلدیکلرینیز لیستی اوخویا بیلر بئله لیکله اونا پایلاشمایین [[Special:ResetTokens|لازیم اولسا اونو دَییشدیرمک اوچون بورانی باسین]].",
        "savedprefs": "سئچیمینیز قئيد ائدیلدی.",
        "timezonelegend": "چاغ بؤلگه‌سی:",
        "localtime": "یئرلی چاغ:",
        "prefs-help-signature": "دانیشیق صحیفه‌لرینده یاخیشلار گرک «<nowiki>~~~~</nowiki>» ایله ایمضالانالار. بو نیشان اوتوماتیک‌جه سیزین آدینیز و تاریخه دؤنه‌جک‌دیر.",
        "badsig": "یانلیش خام ایمضا.\nاچ‌تی‌ام‌ال تگ‌لرینی یوخلایین.",
        "badsiglength": "ایمضانیز چوخ اوزون‌دور.\nاو گرک {{PLURAL:$1|بیر|$1}} حرف‌دن اوزون اولمایا.",
-       "yourgender": "جÛ\8cÙ\86س:",
-       "gender-unknown": "بÛ\8cÙ\84Û\8cÙ\86دÛ\8cرÙ\85Ù\87â\80\8cÙ\85Û\8cØ´",
+       "yourgender": "ترجÛ\8cØ­ Ù\88ئرÛ\8cرسÛ\8cز Ù\86جÙ\88ر ØªÙ\88صÛ\8cÙ\81 Ø§Ù\88Ù\84Ù\88Ù\86سÙ\88Ù\86Ø\9f",
+       "gender-unknown": "ترجÛ\8cØ­ Ù\88ئرÛ\8cرÙ\85 Ø¨Û\8cÙ\84Û\8cÙ\86دÛ\8cرÙ\85Û\8cÛ\8cÙ\85",
        "gender-male": "کیشی",
        "gender-female": "قادین",
-       "prefs-help-gender": "اÛ\8cستگÙ\87 Û\8cاغÙ\84Û\8c: Û\8cازÛ\8cÙ\84Û\8cÙ\85â\80\8cÙ\84اØ\8c Ø¯Ù\88زگÙ\88Ù\86 Ø¬Ù\86سÛ\8cتÙ\87 Ø§Û\8cÙ\84Ú¯Û\8câ\80\8cÙ\84Û\8c Ø¢Ø¯Ø±Ø³ Ù\88ئرÙ\85Ú© Ø§Ù\88Ú\86Ù\88Ù\86 Ø§Û\8cØ´Ù\86یر.\nبو بیلگی، عمومی اولاجاق‌دیر.",
+       "prefs-help-gender": "بÙ\88 ØªØ±Ø¬Û\8cØ­ Ø§Û\8cستگÙ\87 Ø¨Ø§ØºÙ\84Û\8câ\80\8cدÛ\8cر.\nبÙ\88Ù\86Ù\88Ù\86 Ù\85Û\8cÙ\82دارÛ\8cØ\8c Ø³Û\8cزÛ\8c Ø¨Ø§Ø´Ù\82اÙ\84ارا Ø¯Ù\88زگÙ\88Ù\86 Ø¢Ø¯Ø±Ø³ Ù\88ئرÙ\85Ú© Ø§Ù\88Ú\86Ù\88Ù\86 Ø§Û\8cØ´Ù\84Ù\86Ù\87â\80\8cجکدیر.\nبو بیلگی، عمومی اولاجاق‌دیر.",
        "email": "ایمیل",
-       "prefs-help-realname": "اصÙ\84Û\8c Ø¢Ø¯ Ø§Û\8cستگÙ\87 Ø¨Ø§ØºÙ\84Û\8câ\80\8cدیر.\nاگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.",
+       "prefs-help-realname": "اصÙ\84Û\8c Ø¢Ø¯ Ø§Û\8cختÛ\8cارÛ\8c دیر.\nاگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.",
        "prefs-help-email": "ایمیل آدرسی ایستگه باغلی‌دیر، آنجاق رمزینیزی اونوتدوغونوز واخت، سیزه يئنی رمز گؤندرمگه گرکلی‌دیر.",
        "prefs-help-email-others": "سیز هم‌ده آیری ایستیفاده‌چیلره ایجازه وئره بیلرسیز، سیزین ایستیفاده‌چی یا دانیشیق صحیفه‌نیزده بیر باغلانتی ایله، سیزله ایلگی قورسونلار.\nآیری ایستیفاده‌چیلر سیزینله ایلگی قوراندا، سیزین ایمیل آدرسیز گؤستریلمه‌یه‌جک‌دیر.",
        "prefs-help-email-required": "ایمیل آدرس گرکلی‌دیر.",
        "prefs-advancedwatchlist": "گلیشمیش سئچَنکلر",
        "prefs-displayrc": "گؤرونتو سئچَنکلری",
        "prefs-displaywatchlist": "گؤرونتو سئچَنکلری",
+       "prefs-tokenwatchlist": "سیمگه",
        "prefs-diffs": "فرقلر",
+       "prefs-help-prefershttps": "سیزین بو ترجیحینیزین اثری سیزین سونراکی گیریشینیز دن سونرا اولاجاق.",
+       "prefswarning-warning": "ترجیحلرینیزه اولان دَییشیک لر هله آرتیریلمیب.\nایر بو صفحه نین \"$1\" اوستونه باسیلمامیشدان اونجه ترک ائتسز ترجیحلرینیز آرتیریلمییاجاق.",
+       "prefs-tabs-navigation-hint": "ایپ اوجو : سیز ائلیه بیلرسیز ساغ و سول جهت نیما کیلید لریندن نیشانه نه نین دولانماسی نیشانه لر لیستینده ایستفاده ائده سیز.",
        "email-address-validity-valid": "ایمیل آدرسی، گئچرلی نظره گلیر",
        "email-address-validity-invalid": "گئچرلی بیر ایمیل آدرسی وئرین",
        "userrights": "ایستیفاده‌چی حاقلاری ایداره‌سی",
        "userrights-notallowed": "سیزین ایستیفاده‌چی حسابینیزا دیگر ایستیفاده‌چی‌لره حقوق‌لار وئرمک و یا آلماغا ایجازه وئریلمه‌ییب.",
        "userrights-changeable-col": "ديَیشدیره بیلدیگینیز قروپلار",
        "userrights-unchangeable-col": "ديَیشدیره بیلمه‌دیگینیز قروپلار",
-       "userrights-conflict": "ایستیفاده‌چی حاقلاری توققوشماسی! لوطفاً دَییشدیرمه‌لرینیزی یئنی‌دن ائدین.",
+       "userrights-conflict": "ایستیفاده‌چی حاقلاری توققوشماسی! لوطفاً گوزله ین و دَییشدیرمه‌لرینیزی یئنی‌دن ائدین.",
        "userrights-removed-self": "سیز باشاریلیق‌لا اؤز حاق‌لارینیزی قالدیردینیز. اونا گؤره داها بو صحیفه‌یه یول تاپماغا قادیر دئییل‌سینیز.",
        "group": "قروپ:",
        "group-user": "ایستفاده‌چیلر",
        "right-move": "صحیفه‌لرین آدینی دَییشدیر",
        "right-move-subpages": "صحیفه‌لرین آدلارینی، آلت‌صحیفه‌لری ایله بیرلیکده، دَییشدیر",
        "right-move-rootuserpages": "ایستیفاده‌چی کؤک صحیفه‌لرینین آدلارینی دَییشدیر",
+       "right-move-categorypages": "صفحهٔ رده نین داشینماسی",
        "right-movefile": "فایل‌لارین آدلارینی دَییشدیر",
        "right-suppressredirect": "صحیفه‌لرین آدینی دَییشدیرنده، قایناق صحیفه‌لردن یوللاندیرما یارادما",
        "right-upload": "فایل یوکله‌یین",
        "right-deletedtext": "سیلینمیش یازی و سیلینمیش نوسخه‌لر آراسینداکی فرقلره باخ",
        "right-browsearchive": "سیلینمیش صحیفه‌لری آختار",
        "right-undelete": "بیر صحیفه‌نین سیلینمگینی قایتار",
-       "right-suppressrevision": "ایداره‌چیلردن گیزلی اولان نوسخه‌لره باخ و قایتار",
+       "right-suppressrevision": "گیزلی اولان ایشلدچیلرین اولان دَییشدیرمه لرینه باخ و قایتار",
+       "right-viewsuppressed": "گیزلی اولان ایشلدچی نوسخه لرین گور",
        "right-suppressionlog": "خصوصی سیاهی‌لره باخ",
        "right-block": "باشقا ایستیفاده‌چیلرله دَییشدیرمگی باغلا",
        "right-blockemail": "بیر ایستیفاده‌چینین ایمیل گؤندرمگینی باغلا",
        "right-protect": "قوروماق سطحینی و شلاله‌لی قورونموش صحیفه‌لری دَییشدیر",
        "right-editprotected": "«{{int:protect-level-sysop}}» جوره قورونموش صحیفه‌لری دَییشدیر",
        "right-editsemiprotected": "«{{int:protect-level-autoconfirmed}}» جوره قورونموش صحیفه‌لری دَییشدیر",
+       "right-editcontentmodel": "صفحه نین ایچریک مودلین دَییشدیر",
        "right-editinterface": "ایستیفاده‌چی آرا-اوزونو دَییشدیر",
        "right-editusercssjs": "باشقا ایستیفاده‌چیلرین سی‌اس‌اس و جاوااسکریپت فایل‌لارینی دَییشدیر",
        "right-editusercss": "باشقا ایستفاده‌چیلرین سی‌اس‌اس فایل‌لارینی دَییشدیر",
        "action-createpage": "صحیفه یارات",
        "action-createtalk": "دانیشیق صحیفه‌سی یاراد",
        "action-createaccount": "بو ایستیفاده‌چی حسابینی یاراد",
+       "action-history": "بو صفحه نین گئچمیشین گور",
        "action-minoredit": "بو دَییشیکلیگی، کیچیک اولاراق نیشانلا",
        "action-move": "بو صحیفه‌‌نین آدینی ديَیشدیر",
        "action-move-subpages": "بو صحیفه‌نین آدینی، آلت‌صحیفه‌لری ایله بیرلیکده دَییشدیر",
        "action-move-rootuserpages": "ایستیفاده‌چی کؤک صحیفه‌لرینین آدلارینی دَییشدیر",
+       "action-move-categorypages": "صفحهٔ رده نین داشینماسی",
        "action-movefile": "بو فایلین آدینی دَییشدیر",
        "action-upload": "بو فایلی یوکله",
        "action-reupload": "بو اؤنجه‌دن اولان فایلین اوستونه یاز",
        "action-block": "بو ایستیفاده‌چی‌نین دَییشدیرمه‌سینین قاباغینی آل",
        "action-protect": "بو صحیفه اوچون قورونماق سطحلرینی دَییشدیر",
        "action-rollback": "بیر خاص صحیفه‌نی سون دفعه دَییشدیرن ایستیفاده‌چینین دَییشیکلیکلرینی تئزلیکله قایتار",
-       "action-import": "بÙ\88 ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\86Û\8c Ø¨Ø§Ø´Ù\82ا Ø¨Û\8cر Ù\88Û\8cÚ©Û\8câ\80\8cدÙ\86 Ú¯Û\8cردÛ\8cر",
+       "action-import": "صحÛ\8cÙ\81Ù\87â\80\8c Ø¨Ø§Ø´Ù\82ا Ø¨Û\8cر Ù\88Û\8cÚ©Û\8câ\80\8cدÙ\86 Ú¯Û\8cردÛ\8cرÙ\85Ù\87 Ø³Û\8c",
        "action-importupload": "بو صحیفه‌نی بیر فایل یوکلمه‌سیندن گیردیر",
        "action-patrol": "باشقالارین دَییشیکلیکلرینی، نظارتلنمیش اولاراق نیشانلا",
        "action-autopatrol": "اؤز دَییشیکلیکلرینیزی نظارتلنمیش اولاراق نیشانلا",
        "action-viewmywatchlist": "ایزله‌دیکلرینی گؤر",
        "action-viewmyprivateinfo": "گیزلی بیلگیلرینی گؤر",
        "action-editmyprivateinfo": "گیزلی بیلگیلرینی دَییشدیر",
+       "action-editcontentmodel": "بیر صفحه نین ایچریک مودلین دَییشدیر",
        "nchanges": "$1 {{PLURAL:$1|دَییشیکلیک}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|سون گوروش دن}}",
        "enhancedrc-history": "گئچمیش",
-       "recentchanges": "سون دَییشیکلیکلر",
+       "recentchanges": "سون دَییشیکلیکلر",
        "recentchanges-legend": "سون دَییشیکلیکلر سئچمه‌لری",
        "recentchanges-summary": "بو صحیفه‌ده، بو ویکی‌ده وئریلن ان سون دَییشیکلیکلری ایزله‌یین.",
        "recentchanges-noresult": "وئریلمیش دؤنم‌ده، بو معیارلارا تطبیق اولان دَییشدیرمه یوخدور.",
        "recentchanges-feed-description": "ویکی‌ده‌کی ان سون ديَیشیکلیک‌لری بو يايیم کانالیندان ایزله‌يین.",
-       "recentchanges-label-newpage": "بو دییشیک یئنی بیر صحیفه یاراتدی",
+       "recentchanges-label-newpage": "بو دییشیک یئنی بیر صفحه یاراتدی",
        "recentchanges-label-minor": "بو بیر کیچیک دَییشدیرمه‌دیر",
        "recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
        "recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
        "recentchanges-label-plusminus": "صحیفه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
        "recentchanges-legend-heading": "'''ایختیصارلار:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
-       "rcnotefrom": "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر گلیبلر.",
+       "rcnotefrom": "آشاغی داکی دَییشیک لرده <strong>$3, $4</strong> (دن <strong>$1</strong> {{PLURAL:$5|چان گوستریلیب|چان گوستریلیب دیر}}).",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
        "rcshowhideminor": "کیچیک دَییشیکلری $1",
        "rcshowhideminor-show": "گؤستر",
        "diff": "فرق",
        "hist": "گئچمیش",
        "hide": "گیزلت",
-       "show": "گؤستر",
+       "show": "گؤرست",
        "minoreditletter": "ک",
        "newpageletter": "ی",
        "boteditletter": "ب",
        "rc-old-title": "ایلک‌جه «$1» آدی‌له یارانمیشدیر",
        "recentchangeslinked": "ایلگیلی دَییشیکلیکلر",
        "recentchangeslinked-feed": "ایلگیلی دَییشیکلیکلر",
-       "recentchangeslinked-toolbox": "ایلگیلی دَییشیکلیکلر",
+       "recentchangeslinked-toolbox": "ایلگیلی دَییشیکلیکلر",
        "recentchangeslinked-title": "''$1'' ایله ایلگی‌لی دییشیکلر",
        "recentchangeslinked-summary": "آشاغیداکی سیياهی، قئيد اوْلونان صحیفه‌‌يه (و يا قئيد اوْلونان کاتئقوْرياداکی صحیفه‌‌لره) داخیلی کئچید وئرن صحیفه‌‌لرده ائدیلمیش سوْن ديَیشیکلیکلرین سیياهیسیدیر. \n[[Special:Watchlist|ایزله‌مه سیياهینیزداکی]] صحیفه‌‌لر '''قالین''' شریفتله گؤستریلمیشدیر.",
-       "recentchangeslinked-page": "صحیفه آدی:",
+       "recentchangeslinked-page": "صفحه آدی:",
        "recentchangeslinked-to": "قئيد اوْلونان صحیفه‌‌ده‌کی دئيیل، اوْنا داخیلی کئچید وئرن صحیفه‌‌لرده‌کی ديَیشیکلیکلری گؤستر",
        "upload": "فایل یوکله‌",
        "uploadbtn": "فایل یوکله‌یین",
        "uploaderror": "یوکلمه خطاسی",
        "upload-recreate-warning": "'دیققت: بو آددا فایل سیلینیب، یاخود آدی دییشدیریلیب.'\n\nبو صحیفه‌نین سیلینمه و آددییشمه ژورنا‌لی آشاغیدا گؤستریلمیش‌دیر:",
        "uploadtext": "فایل یوکلمک اوچون آشاغی‌داکی فورما‌دان ایستیفاده ائدین.\nاول‌لر یوکلنمیش فایل‌لارا باخماق اوچون [[Special:FileList|یوکلنمیش فایل‌لار سیاهی‌سینا]] کئچین، هم‌چی‌نین (تکرار) یوکلنمیش فایل‌لارا [[Special:Log/upload|یوکلمه ژورنالیندا]]، سیلینمیش فایل‌لارا [[Special:Log/delete|سیلینمه ژورنالیندا]] باخا بیلرسینیز.\n\nمقاله‌یه فایل یئرلش‌دیرمک اوچون آشاغیداکی فورما‌لاردان بیرینی ایستیفاده ائدین:\n* فایلین تام نوسخه لری یئرلش‌دیرمک اوچون: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''';\n* فایلین 200 پیکسئلدک کیچیلدیلمیش وئرسیاسینی متن‌دن سولدا، آلتیندا ایزاهلا یئرلش‌دیرمک اوچون: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|təsvir]]</nowiki></code>''';\n* صحیفه‌ده فایلین اؤزونو گؤسترمه‌دن اونا بیرباشا کئچید یئرلش‌دیرمک اوچون: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''.",
-       "upload-permitted": "ایجازه وئریلن فايل تیپلری: $1.",
-       "upload-preferred": "اÛ\8cجازÙ\87 Ù\88ئرÛ\8cÙ\84Ù\86 Ù\81اÙ\8aÙ\84 ØªÛ\8cÙ¾Ù\84رÛ\8c: $1.",
-       "upload-prohibited": "ایجازه وئریلمه‌ين فايل تیپلری: $1.",
+       "upload-permitted": "{{PLURAL:$2|تیپ|تیپ لر}} مجاز پرونده لر: $1.",
+       "upload-preferred": "ترجÛ\8cØ­ Ù\88ئرÛ\8cÙ\84Ù\86 Ù\81اÙ\8aÙ\84 ØªÛ\8cÙ¾Ù\84رÛ\8c{{PLURAL:$2|تÛ\8cÙ¾|تÛ\8cÙ¾ Ù\84ر}}: $1.",
+       "upload-prohibited": "ایجازه وئریلمه‌ين فايل تیپلری{{PLURAL:$2|تیپ|تیپ لر}}: $1.",
        "uploadlogpage": "یوکلمه قئیدلری",
        "uploadlogpagetext": "آشاغیدا ان سون یوکله‌نیلن فایل‌لارین لیستی گؤستریلیر.\nداها گؤرونوش‌لو گؤسترمک اوچون، [[Special:NewFiles|یئنی فایل‌لار گالئری‌سینه]] باخین.",
        "filename": "فایل آدی",
        "largefileserver": "فایلین اؤلچوسو یول وئریلن حدی آشیر.",
        "emptyfile": "یوکلدیگینیز فایل بوش‌دور. بو فایلین آدیندا اولان هرف سهوی ایله باغ‌لی اولا بیلر. خاهیش اولونور کی، دوغوردان دا بو فای‌لی یوکلمک ایستدیگینیزی یوخلایاسینیز.",
        "windows-nonascii-filename": "بو wiki فایل آدلاریندا خصوصی کاراکتئر ایستیفاده‌سینی دستکلمیر",
-       "fileexists": "یوکلمک ایستدیگینیز آددا فایل مؤوجوددور.\nلطفاً <strong>[[:$1]]</strong> کئچیدینی یوخلایین و بو فای‌لی یوکلمک ایستدیگینیزدن عمین اولون.\n[[$1|thumb]]",
+       "fileexists": "\nیوکلمک ایستدیگینیز آددا فایل مؤوجوددور،ایر اطمینانیز {{GENDER:|یوخدور}} ایستیرسیز فایلی دَییشه سیز  لوطفاً <strong>[[:$1]]</strong> گوزله ین.\n[[$1|thumb]]",
        "filepageexists": "بو فایل اوچون شرح صحیفه‌سی <strong>[[:$1]]</strong> عنوانیندا اونسوز دا یارادیلمیش، لاکین بو آددا بیر فایل بو آندا مؤوجود دئییل.\nگیرجیینیز خلاصه شرح صحیفه‌سینده گؤرونمه‌یه‌جک.\nاؤزئتینیزین اورادا گؤرونمه‌سی اوچون، بونو الله دییشدیرملیسینیز.\n[[$1|کیچیک شکیل]]",
-       "fileexists-extension": "بئÙ\86زئر Ø¢Ø¯Ù\84ا Ø¨Ø§Ø´Ù\82ا Ø¨Û\8cر Ù\81اÛ\8cÙ\84 Ù\85ؤÙ\88جÙ\88د: [[$2|thumb]]\n* Ú\86Ú©Û\8cÙ\84Ù\85Û\8cØ´ Ù\81اÛ\8cÙ\84Û\8cÙ\86 Ø¢Ø¯Û\8c: <strong>[[:$1]]</strong>\n* Ù\85ؤÙ\88جÙ\88د Ù\81اÛ\8cÙ\84Û\8cÙ\86 Ø¢Ø¯Û\8c: <strong>[[:$2]]</strong>\nخاÙ\87Û\8cØ´ Ø§Ø¦Ø¯Û\8cرÛ\8cÚ© Ø¨Ø§Ø´Ù\82ا Ø¨Û\8cر Ø¢Ø¯ Ø³Ø¦Ú\86Û\8cÙ\86",
+       "fileexists-extension": "اÙ\88خشار Ø¢Ø¯Ù\84ا Ø¨Ø§Ø´Ù\82ا Ø¨Û\8cر Ù\81اÛ\8cÙ\84 Ù\85ؤÙ\88جÙ\88د: [[$2|thumb]]\n* Ú\86Ú©Û\8cÙ\84Ù\85Û\8cØ´ Ù\81اÛ\8cÙ\84Û\8cÙ\86 Ø¢Ø¯Û\8c: <strong>[[:$1]]</strong>\n* Ù\85ؤÙ\88جÙ\88د Ù\81اÛ\8cÙ\84Û\8cÙ\86 Ø¢Ø¯Û\8c: <strong>[[:$2]]</strong>\nاÛ\8cستÛ\8cرسÛ\8cز Ø¨Û\8cر Ú\86Ù\88Ø® Ù\81رÙ\82Û\8cÙ\84Û\8c Ø¢Ø¯ Ø§Û\8cØ´Ù\84دسÛ\8cÙ\86Û\8cزØ\9f",
        "fileexists-thumbnail-yes": "بو فایل، بیر رسمی فور وئرسیاسی کیمی گؤرونور (تهومبنایل)'. [[$1|thumb]]\nخاهیش ائدیریک <سترونگ> [[:$1]] </strong> فایلینی نظارت ائدین.\nاگر نظارت ائدیلن فایل ایله خصوصی اؤلچوسون‌دکی عینی دوسیایسا آرتیق کیچیک شکیل یوکلمه‌یه احتیاج یوخ‌دور.",
        "file-thumbnail-no": "بو فایلین آدی <strong>$1</strong> ایله باشلاییر.\nبو باشقا بیر شکیل فور نوسخه سینه بنزییر (thumbnail)'\nاگر سیزده بو شکیلین تام نظر گلیر نسخه سی وارسا اونو یوکلیین، عکس حالدا خاهیش ائدیریک فایل آدینی دییش‌دیرین.",
        "fileexists-forbidden": "بو آددا بیر فايل وار، و اوزرینه يازیلما اولماز. \nفايلینیزی يئنه ده يوکله‌مک ایسته‌يیرسینیزسه، خاهیش ائدیریک گئری دؤنوب يئنی بیر آد ایستیفاده ائدین.\n[[File:$1|thumb|center|$1]]",
        "license": "لیسانس:",
        "license-header": "لیسانس",
        "nolicense": "هئچ‌بیری سئچیلمه‌ییب",
+       "licenses-edit": "مجویزلی اولان سئچکیلری دَییشدیر",
        "license-nopreview": "(اؤن‌گؤستریش یوخدور)",
-       "upload_source_url": "(بÛ\8cر Ú¯Ø¦Ú\86رÙ\84Û\8c Ù\88 Ø¹Ù\85Ù\88Ù\85 Ú¯Ø¤Ø±Ù\87 Ø¨Û\8cÙ\84Ù\86 Ø§Û\8cÙ\86ترÙ\86ت Ø¢Ø¯Ø±Ø³Û\8c)",
-       "upload_source_file": "(بیلگی‌سایارینیزدا بیر فایل)",
+       "upload_source_url": "(سÛ\8cز Ø¯Ù\88زگÙ\88Ù\86Ø\8c Ù\87ر Ú©Ø³Û\8cÙ\86 Ø¯Ø§Ø®Û\8cÙ\84 Ø§Ù\88Ù\84ا Ø¨Û\8cÙ\84جÛ\8cÛ\8c Ø§Ù\88رÙ\84 Ø³Ø¦Ú\86دÛ\8cÙ\86Û\8cز)",
+       "upload_source_file": "(بیلگی‌سایارینیزدان بیر فایل سئچیلیب دیر)",
        "listfiles-delete": "سیل",
        "listfiles-summary": "بۇ اؤزل صحیفه، بۆتون یۆکله‌نیلن فایل‌لاری گؤستریر.",
        "listfiles_search_for": "مئدیا آدی اوچون آختار:",
+       "listfiles-userdoesnotexist": "«$1» ایشلدن حسابی ثبت اولونماییب‌دیر.",
        "imgfile": "فایل",
        "listfiles": "فایل لیستی",
        "listfiles_thumb": "کیچیک شکیل",
        "filehist-current": "ایندیکی",
        "filehist-datetime": "تاریخ/واخت",
        "filehist-thumb": "کیچیک شکیل",
-       "filehist-thumbtext": "$1 تاریخینده‌کی نوسخه‌نین کیچیک گؤرونتوسو",
+       "filehist-thumbtext": "$1 تاریخینده‌کی سۆروموندن کیچیک گؤرونتوسو",
        "filehist-nothumb": "کیچیک شکیل یوخدو",
-       "filehist-user": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c",
+       "filehist-user": "اÛ\8cØ´Ù\84دÙ\86",
        "filehist-dimensions": "اؤلچولر",
        "filehist-filesize": "فایل اؤلچوسو",
        "filehist-comment": "باخیش",
        "filedelete-maintenance": "ساخلاماق سیراسیندا، فایل‌لاری سیلمک و قایتارماق، گئچرلی اولاراق باغلی‌دیر.",
        "filedelete-maintenance-title": "فایل سیلیننمه‌دی",
        "mimesearch": "MIME آختار",
-       "mimesearch-summary": "بو صحیفه، فایل‌لارین MIME-لارینا گؤره فیلترله‌مگی آچار.\nوئرمک: contenttype/subtype، میثال: <code>image/jpeg</code>.",
+       "mimesearch-summary": "با کمک این صفحه شما می‌توانید پرونده‌هایی که یک نوع MIME به خصوص دارند را پیدا کنید.\nورودی: به صورت contenttype/subtype یا contenttype/*&lrm;، نظیر <code>image/jpeg</code>.\n\nسیز بو صحیفه نین یاردیمی ایله ائلیه بیلرسیز MIME تیپینده اولان فایلاری تاپاسینیز.\nگیریش: contenttype/subtype،یاداcontenttype/*&lrm;،\nمیثال: \n<code>image/jpeg</code>.",
        "mimetype": "MIME تیپی:",
        "download": "اندیر",
        "unwatchedpages": "ایزلنمه‌میش صحیفه‌لر",
        "unusedtemplates": "ایشلدیلمه‌میش شابلونلار",
        "unusedtemplatestext": "بو صحیفه بوتون، {{ns:template}} آدفضاسیندا اولان و باشقا صحیفه‌لرده اولمایان صحیفه‌لری لیست ائدیر.\nشابلونلاری سیلمک‌دن اؤنجه، لوطفاً اونلارا اولان باشقا باغلانتیلاری یوخلایین.",
        "unusedtemplateswlh": "باشقا باغلانتیلار",
-       "randompage": "راست‌گله صحیفه",
+       "randompage": "راست‌گله صفحه",
        "randompage-nopages": "بو {{PLURAL:$2|آدفضاسیندا|آدفضالاریندا}} هئچ صحیفه یوخدور: $1.",
        "randomincategory": "بؤلمه‌ده راست‌گله صحیفه",
        "randomincategory-invalidcategory": "«$1» بیر گئچرلی بؤلمه آدی دئییل.",
        "wantedpages-badtitle": "مراجعت زامانتی يانلیش باشلیق: $1",
        "wantedfiles": "ایسته نن فایللار",
        "wantedfiletext-cat": "آشاغیداکی فایل‌لار ایشله‌نیبلر اما یوخدورلار. ائشیک آنباردا اولان فایل‌لار دا اولدوقلارینا باخمایاراق، لیست‌ده گلیبلر. ائله یانلیش باخیشلار <del>خطلنه‌جکلر</del>. هم‌ده، اولمایان فایل‌لاری ایشلدن صحیفه‌لر ده [[:$1]]-ده لیست اولونوبلار.",
+       "wantedfiletext-cat-noforeign": "آشاغی دا کی اولان فایل لار ایستفاده اولونور سانکی یوخدولار. بوندان اونجه فایل لاری اولموش صفحه لر [[:$1]] ده لیست اولوب لار.",
        "wantedfiletext-nocat": "اشاغی داکی فایل لار ایستفاده اولور سانکی یوخدولار.حتی مومکین دیر خارجی حویض مخزن لریندن اولماق  ایله بو ردا فهرست اولا . وهر مثب رتبه سی یانلیش <del> خط یئمیش اولاجاق.</del>",
+       "wantedfiletext-nocat-noforeign": "آشاغی داکی فایل لار ایشلنیلیر سانکی یوخدورلار.",
        "wantedtemplates": "ایسته نن شابلونلار",
        "mostlinked": "ان چوخ کئچیدلنن صحیفه‌‌لر",
        "mostlinkedcategories": "ان چوخ مقاله‌سی اولان بولمه لر",
-       "mostlinkedtemplates": "اÙ\86 Ú\86Ù\88Ø® Ø§Û\8cستÛ\8cÙ\81ادÙ\87 Ø§Ù\88Ù\84Ù\88Ù\86اÙ\86 Ø´Ø§Ø¨Ù\84Ù\88Ù\86â\80\8cÙ\84ار",
+       "mostlinkedtemplates": "اÙ\86 Ú\86Ù\88Ø® Ø§Û\8cستÛ\8cÙ\81ادÙ\87 Ø§Ù\88Ù\84Ù\88Ù\86اÙ\86 ØµÙ\81Ø­Ù\87 Ù\84ر",
        "mostcategories": "بؤلمه‌سی ان چوخ اولان صحیفه‌لر",
        "mostimages": "ان چوخ ایستیفاده ائدیلمیش شکیللر",
        "mostinterwikis": "اینتر ویکی‌سی ان چوخ اولان صحیفه‌لر",
        "listusers-desc": "آزالان سیرادا سیرالا",
        "usereditcount": "$1 {{PLURAL:$1|دَییشدیرمه}}",
        "usercreated": "$1 تاریخینده، ساعات $2-ده {{GENDER:$3|یارانیب‌دیر}}",
-       "newpages": "يئنی صحیفه‌‌‌لر",
+       "newpages": "يئنی صفحه‌‌‌لر",
        "newpages-username": "ایستیفاده‌چی آدی:",
        "ancientpages": "ان اسکی صحیفه‌لر",
        "move": "آدینی دَییشدیر",
        "pager-older-n": "{{PLURAL:$1|بیر داها کؤهنه|$1 داها کؤهنه}}",
        "suppress": "باخان",
        "querypage-disabled": "پِرفورمانس اوچون بو اؤزل صحیفه باغلانیب‌دیر.",
+       "apihelp": "API یاردیمی",
+       "apihelp-no-such-module": "«$1» ماژول تاپیلمادی.",
        "booksources": "کیتاب قایناقلاری",
        "booksources-search-legend": "کیتاب قایناقلارین آختار",
        "booksources-search": "آختار",
        "trackingcategories-msg": "ایزله‌مک بؤلومو",
        "trackingcategories-name": "مئساژ آدی",
        "trackingcategories-desc": "بؤلمه ایچری آلماق معیارلاری",
+       "noindex-category-desc": "بو صفحه، ایچینده <code><nowiki>__NOINDEX__</nowiki></code> سؤزجوک اولدوغونا گؤره و بونو ایجازه وئرن آدفضاسیندا اولدوغونا گؤره، بوتلارلا ایندِکس اولونماییب‌دیر.",
+       "index-category-desc": "بو صفحه، ایچینده <code><nowiki>__INDEX__</nowiki></code> سؤزجوک اولدوغونا گؤره و بونو ایجازه وئرن آدفضاسیندا اولدوغونا گؤره، بوتلارلا ایندِکس اولونوب‌دور، اوحال‌داکی عموماً اولونمازدیر.",
+       "post-expand-template-inclusion-category-desc": "شابلونلاری گئنیشلندیرن‌دن سونرا، صفحه‌نین اؤلچو <code>$wgMaxArticleSize</code>-دن چوخ اولور، بونا گؤره شابلونلار گئنیشلندیریلمه‌ییبلر.",
+       "post-expand-template-argument-category-desc": "بیر شابلون آرگومانینی (اوچ آکولاد آرالی بیر شِی، میثال <code>{{{Foo}}}</code>) گئنیشلندیرن‌دن سونرا، صفحه‌نین اؤلچو <code>$wgMaxArticleSize</code>-دن چوخ اولور.",
+       "trackingcategories-nodesc": "آچیقلاما یوخدور.",
+       "trackingcategories-disabled": "بؤلمه باغلانیب‌دیر.",
        "mailnologin": "گؤندرمه آدرسی یوخدور",
        "mailnologintext": "باشقا ایستیفاده‌چیلره ایمیل گؤندرک اوچون، [[Special:UserLogin|گیریش]] ائدیب و [[Special:Preferences|ترجیحلر]]ینیزده گئچرلی ایمیل آدرسی وئرمه‌لیسینیز.",
        "emailuser": "بو ایستیفاده‌چی‌یه ایمیل گؤندر",
        "emailccsubject": "سیزین $1-ه مئساژینیزین کوپی‌سی: $2",
        "emailsent": "ایمیل گؤنده‌ریلدی",
        "emailsenttext": "ایمیل مئساژینیز گئنده‌ریلدی.",
-       "emailuserfooter": "بو ایمیل، {{SITENAME}}-ده «ایستیفاده‌چی‌یه ایمیل گؤندر» ایمکانی ایله، $1-دن $2-ه گؤنده‌ریلیب‌دیر.",
+       "emailuserfooter": "بو ایمیل، {{SITENAME}}-ده «{{int:emailpage}}» ایمکانی ایله، $1-دن $2-ه گؤندریلیب‌دیر.",
        "usermessage-summary": "مئساژ گئنده‌ریلدی.",
        "usermessage-editor": "سیستِم مئساژ گؤندَرَنی",
        "watchlist": "ایزله‌دیکلر",
        "mywatchlist": "ایزله‌دیکلر",
        "watchlistfor2": "$1 اوچون $2",
        "nowatchlist": "ایزلمه سیاهینیز بؤش‌دور.",
-       "watchlistanontext": "Ù\84Ø·Ù\81اÙ\8bØ\8c Ø§Û\8cزÙ\84دÛ\8cÚ¯Û\8cÙ\86Û\8cز ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84رÛ\8c Ú¯Ø¤Ø±Ù\85Ú© Ù\88 Û\8cا Ø±Ø¦Ø¯Ø§Ú©ØªÙ\87 Ø§Ø¦ØªÙ\85Ú© Ø§Ù\88Ú\86Ù\88Ù\86 $1.",
+       "watchlistanontext": "Ù\84Ø·Ù\81اÙ\8bØ\8c Ø§Û\8cزÙ\84دÛ\8cÚ¯Û\8cÙ\86Û\8cز ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84رÛ\8c Ú¯Ø¤Ø±Ù\85Ú© Ù\88 Û\8cا Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ú© Ø§Ù\88Ú\86Ù\88Ù\86 Ú¯Û\8cرÛ\8cØ´ Ø§Ø¦Ø¯Û\8cÙ\86.",
        "watchnologin": "داخیل اولمامیسینیز",
        "addwatch": "ایزلمه سیاهی‌سینا علاوه ائت",
        "addedwatchtext": "\"[[:$1]]\" صحیفه‌سی [[Special:Watchlist|ایزله‌دیکلرینیزه]] آرتیریلدی. بو صحیفه‌ده و ایلگیلی دانیشیق صحیفه‌سین‌ده‌کی بوتون دییشیکلیکلر اوردا گؤستریله‌جکلر.",
+       "addedwatchtext-short": "«$1» صفحه‌سی سیزین ایزله‌دیلرینیزه آرتیریلدی.",
        "removewatch": "بو صحیفنی ایزلدیگیم صحیفه‌لر سیاهی‌سین‌دان چیخار",
        "removedwatchtext": "\"[[:$1]]\" صحیفه‌سی [[Special:Watchlist|ایزلمه سیاهینیزدان]] چیخاریلدی.",
+       "removedwatchtext-short": "«$1» صفحه‌سی سیزین ایزلدیگینیز صفحه‌لریندن سیلیندی.",
        "watch": "ایزله",
        "watchthispage": "بو صفحه‌نی ایزله",
        "unwatch": "ایزله‌مه",
        "unwatchthispage": "صحیفه ایزلمیی دایان‌دیر",
        "notanarticle": "مضمون صحیفه‌سی دئییل",
        "notvisiblerev": "باشقا ایستیفادی‌چی‌نین سون دییشیک‌لیگی سیلینیب",
-       "watchlist-details": "دانیشیق صفحه‌لرینی سایمایاراق، {{PLURAL:$1|$1 صفحه‌نی}} ایزله‌ییرسینیز.",
+       "watchlist-details": "داÙ\86Û\8cØ´Û\8cÙ\82 ØµÙ\81Ø­Ù\87â\80\8cÙ\84رÛ\8cÙ\86Û\8c Ø¢Û\8cرÛ\8c Ø³Ø§Û\8cÙ\85اÛ\8cاراÙ\82Ø\8c {{PLURAL:$1|$1 ØµÙ\81Ø­Ù\87â\80\8cÙ\86Û\8c}} Ø§Û\8cزÙ\84Ù\87â\80\8cÛ\8cÛ\8cرسÛ\8cÙ\86Û\8cز.",
        "wlheader-enotif": "ایمیل ایله بیلدیریش آچیلیب‌دیر.",
        "wlheader-showupdated": "سون گؤروشونوزدن سونرا ائدیلن دییشیکلیکلر '''قالین''' گؤستریلیبدیلر.",
-       "wlnote": "آشاغیداکی {{PLURAL:$1|'''$1''' ديَیشیک‌لیک|'''$1'''ديَیشیک‌لیک}}  سون {{PLURAL:$2|ساعتدا|'''$2''' ساعتدا}} ائدیلمیشدیر.$3، $4",
+       "wlnote": "آشاغیداکی {{PLURAL:$1|بیر ديَیشیک‌لیک|<strong>$1</strong> ديَیشیک‌لیک}}  سون {{PLURAL:$2|ساعتدا|<strong>$2</strong> ساعتدا}} ائدیلمیشدیر. $3، $4",
        "wlshowlast": "سون $1 ساعات $2 گون گؤستر",
        "watchlist-options": "ایزله‌دیکلر سئچمه‌لری",
        "watching": "ایزله‌نیلیر...",
        "enotif_lastvisited": "سونونجو زیارتینیزدن ایندیدک اولان بوتون دییشیک‌لیک‌لری گؤرمک اوچون باخین: $1.",
        "enotif_lastdiff": "بو دییشیک‌لیگی گؤرمک اوچون $1 صحیفه‌سینه باخین.",
        "enotif_anon_editor": "قئیدیات‌سیز ایستیفاده‌چی $1",
-       "enotif_body": "حؤرمتلی $WATCHINGUSERNAME,\n\n{{SITENAME}} وئب-سايتینداکی $PAGETITLE آدلی صحیفه‌‌ $PAGETITLE تاریخینده $PAGEEDITOR طرفیندن $CHANGEDORCREATED. صحیفه‌‌نین سونونجو وئرسیياسینا باخماق اوچون $PAGETITLE_URL کئچیدیندن ایستیفاده ائدین. \n\n$نئwپاگئ \n\nديَیشیکلیگی ائدن ایستیفاده‌چی‌نین ایضاهی: $PAGESUMMARY $PAGEMINOREDIT\n\nصحیفه‌‌نی ديَیشدیرن ایستیفاده‌چی‌نین علاقه‌‌ معلوماتلاری: \nائ-پوچت:$PAGEEDITOR_EMAIL\nویکی:$PAGEEDITOR_WIKI\n\nسیز حاقیندا صؤحبت گئدن صحیفه‌‌يه باخانادک صحیفه‌‌دکی دیگر ديَیشیکلیکلرله باغلی باشقا بیلدیریش مکتوبو آلماياجاقسینیز. سیز همچی‌نین، ایزله‌مه سیياهینیزداکی بوتون صحیفه‌‌لرله باغلی بیلدیریش معلوماتلارینی سیله بیلرسینیز. \n\n               {{SITENAME}} سايتی‌نین خبردارلیق سیستمی. \n\n-- \nایزله‌مه سیياهیسی‌نین تنزیمله‌مه‌لرینی ديَیشمک اوچون: \n{{canonicalurl:Special:Watchlist/edit}}\n\nياردیم و تکلیفلرینیز اوچون: \n$HELPPAGE",
+       "enotif_body": "حؤرمتلی $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nدَییشدیرنین قیساسی: $PAGESUMMARY $PAGEMINOREDIT\n\nدَییشدیرن‌له تماس تاپماق:\nایمیل: $PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nگلن دفعه سایتا گیریش ائدیب و بو صفحه‌یه باخمایانا کیمی، داها آیری خبر سیزه گؤندریلمه‌یه‌جک. سیز هم‌ده ایزلدیکلرینیزده، بوتون صفحه‌لرین خبر یوللاماق ترجیحینی دَییشدیره بیلرسیز.\n\nسیزین یولداش {{SITENAME}} خبر سیستِمی\n\n--\nایمیل خبرلندیرمه ترجیحلرینی دَییشدیرمک اوچون بورا باخین:\n{{canonicalurl:{{#special:Preferences}}}}\n\nایزله‌دیکلر لیستینین ترجیحلرینی دَییشدیرمک اوچون بورا باخین:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nبو صفحه‌نی ایزله‌دیکلر لیستین‌دن سیلمک اوچون بورا باخین:\n$UNWATCHURL\n\nنظر وئرماق و آرتیق یاردیم:\n$HELPPAGE",
        "created": "یارادیلیب",
        "changed": "ديَیشدی",
        "deletepage": "صحیفه‌‌نی سیل",
        "exbeforeblank": "سیلینمه‌دن اوولکی مزمون: '$1",
        "delete-confirm": "سیل $1",
        "delete-legend": "سیل",
-       "historywarning": "'خبردارلیق:' سیلینه‌جک صحیفه‌نین تاریخچه‌سینده قئید اولونموش $1 {{PLURAL::$1|دییشدیر|دییشدیرمه}} وار:",
+       "historywarning": "<strong>خبردارلیق:</strong> سیلینه‌جک صحیفه‌نین تاریخچه‌سینده قئید اولونموش $1 {{PLURAL:$1|دییشدیرمه}} وار:",
        "confirmdeletetext": "بو صحیفه و یا فایل بوتون تاریخچه‌سی ایله بیرلیکده بیردفه‌لیک سیلینه‌جک. بونو [[{{MediaWiki:Policy-url}}|قایدا‌لارا]] اویغون ائتدیگینیزی و عملیاتین نتیجه‌لرینی باشا دوشدوگونوزو تسدیق ائدین.",
        "actioncomplete": "چالیشما سوناچاتدی",
        "actionfailed": "چالیشما اوغورسوز اولدو",
        "deletecomment": "ندن:",
        "deleteotherreason": "باشقا/آرتیق دلیل:",
        "deletereasonotherlist": "باشقا سبب",
-       "deletereason-dropdown": "*ساس سیلمه سببی\n** یازان ایستیی\n** یازانلار حقوق پوزونتوسو\n** واندالیزم",
+       "deletereason-dropdown": "*معمول سیلمک سببلری\n** اِسپم\n** خرابکارلیق\n** یازانلار حقوق پوزونتوسو\n** یازان ایستگی\n** خراب یول‌لاندیرما",
        "delete-edit-reasonlist": "سیلمک دلیل‌لرینی دَییشدیر",
        "delete-toobig": "بو صحیفه، $1 {{PLURAL:$1 | دنه دییشیک‌لیک | دنه دییشیک‌لیک}} ایله چوخ اوزون بیر کئچمیشه مالیک‌دیر.\nبئله صحیفه‌لرین سیلینمه‌سی، {{SITENAME}} سایتینی پوزماماق اوچون مهدودلاشدیریلماقدا‌دیر.",
        "delete-warning-toobig": "بو صحیفه‌‌نین بؤيوک بیر ديَیشیکلیک کئچمیشی وار، $1 {{PLURAL:$1|نسخه| نسخه}} اوزرینده. \nبونو سیلمک {{SITENAME}} عملیاتلارینی مخدل‌ائده‌بیلیر؛ \nدیقتله داوام ائدین.",
+       "deleteprotected": "سیز بو صفحه‌نی، قورونماغینا گؤره، سیله بیلنمزسیز.",
+       "deleting-backlinks-warning": "'''اخطار:''' بو سیلمگه قصدینیز اولان صفحه‌یه، [[Special:WhatLinksHere/{{FULLPAGENAME}}|باشقا صفحه‌لر]] باغلانتی وئریب یا اونو اؤزلرین‌ده ایشلدیب‌لر.",
        "rollback": "اوولکی نوسخه لر",
-       "rollbacklink": "گئری‌دؤندر",
+       "rollbacklink": "قایتار",
        "rollbacklinkcount": "گیتیرلمه $1  {{PLURAL:$1|دییشمک |دییشمک}} دییشدیرمه",
        "rollbacklinkcount-morethan": "گیتیرلمه آرتیق $1 {{PLURAL:$1|دییشمک |دییشمک}} دییشدیرمه",
        "rollbackfailed": "گئری قایتارما اوغورسوزدور",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|موزاکیره]] {{int:pipe-separator}} [[Special:Contributions/$2| {{int:contribslink}}]]) طرفین‌دن [[:$1]] صحیفه‌سینده ائدیلمیش سون دییشیک‌لیک گئرییه آلینا بیلمیر؛\nباشقا بیری صحیفه‌ده دییشیک‌لیک ائتدی یا دا صحیفنی گئرییه آلدی.\n\nسون دییشیک‌لیگی ائدن: [[User:$3|$3]] ([[User talk:$3|تالک]] {{int:pipe-separator}} [[Special:Contributions/$3| {{int:contribslink}}]] ).",
        "editcomment": "دییشیک‌لیک خلاصه‌سی: ''\" $1''\" ایدی.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|دانیشیق]]) طرفین‌دن ائدیلمیش دییشیک‌لیک‌لر [[User:$1|$1]] طرفین‌دن ائدیلمیش دییشیک‌لیک‌لره قایتاریلدی.",
-       "revertpage-nouser": "[[User:$1|$1]] ایله ائدیلمیش سون نوسخه‌یه، بیر گیزلی ایستیفاده‌چی طرفین‌دن قایتاریلان دییشیکلیک‌لر",
+       "revertpage-nouser": "{{GENDER:$1|[[User:$1|$1]]}} ایله ائدیلمیش سون نوسخه‌یه، بیر گیزلی ایشلدن طرفین‌دن قایتاریلان دییشیکلیک‌لر",
        "rollback-success": "$1 طرفین‌دن ائدیلمیش دییشدیر‌لر گئری قایتاریلدی؛ $2 طرفین‌دن یارادیلمیش سون وئرسیا برپا اولوندو.",
        "sessionfailure-title": "گیریش خطاسی",
        "sessionfailure": "گیریش اوتورومونوزلا ایلگی‌لی بیر سورون وار گیبی گؤرونویور؛\nبو ائیلئم، اوتوروم گاسپینا کارشی اؤنلئم اولاراک ایپتال ائدیلدی.\nلوتفن \"گئری\" گیدین و گئلدیغینیز سایفایی یئنی‌دئن یوکلئیین، سونرا تئکرار دئنئیین.",
        "protect-locked-blocked": "صحیفه‌نین بلوک‌لو اولدوغو مدتده سیز محافظه سویه‌سینی دییشه بیلمزسینیز.\n'$1 صحیفه‌سینده حال-حاضردا ائده بیلجیینیز عملیات‌لار بون‌لاردیر:",
        "protect-locked-dblock": "وئریلن‌لر بازاسی کیلیدلی اولدوغو اوچون محافظه سویه‌سی دییشیله بیلمز.\n'$1 صحیفه‌سینده حال-حاضردا ائده بیلجیینیز عملیات‌لار بون‌لاردیر:",
        "protect-locked-access": "سیزین حسابینیزین محافظه سویه‌سینی دییشمه‌یه ایختیاری یوخ‌دور.\n'$1 صحیفه‌سینده حال-حاضردا ائده بیلجیینیز عملیات‌لار بون‌لاردیر:",
-       "protect-cascadeon": "بو صحیفه محافظه‌لی‌دیر، چونکی بو صحیفه {{PLURAL:$1|باشقا بیر}} صحیفه‌دن کاسکاد محافظه ائدیلمیش‌دیر. سیز بو صحیفه‌نین محافظه سویه‌سینی دییش‌دیره بیلرسینیز، بو کاسکاد محافظه‌یه تأثیر ائتمه‌یه‌جک.",
+       "protect-cascadeon": "بو صحیفه محافظه‌لی‌دیر، چونکی بو صفحه {{PLURAL:$1|باشقا بیر}} صفحه‌دن کاسکاد محافظه ائدیلمیش‌دیر. سیز بو صفحه‌نین محافظه سویه‌سینی دییشدیره بیلرسینیز، بو کاسکاد محافظه‌یه تأثیر ائتمه‌یه‌جک.",
        "protect-default": "بوتون ایستیفاده‌چی‌لره ایجازه وئر",
        "protect-fallback": "یالنیز «$1» ایجازه‌سی اولان ایستیفاده‌چیلره ایجازه وئر",
        "protect-level-autoconfirmed": "یالنیز اوتوماتیک دوغرولانان ایستیفاده‌چیلره ایجازه وئر",
        "namespace": "آد فضاسی:",
        "invert": "سئچیلنی دؤندر",
        "tooltip-invert": "بو قوتونی علامتله یین تا انتخاب اولان آد فضا سینین ایچری صحیفه لری دییشیک لیک لری(و اوبیری علامتلنمیش فضالار) گیزله نه آدی",
+       "tooltip-whatlinkshere-invert": "سئچیلمیش آدفضاسیندان اولان باغلانتیلاری گیزلتمک اوچون بو قوتویا نیشان قویون.",
        "namespace_association": "علاقه‌لی آد ساحه‌سی",
        "tooltip-namespace_association": "بو قوتونو علامت له ین یالنیز آد بحث فضاسی یا مرتبط اولان آد فضاسی ایله انتخاب اولا",
        "blanknamespace": "(آنا)",
        "contributions": "{{GENDER:$1|ایستیفاده‌چی}} چالیشمالاری",
        "contributions-title": "$1 ایستیفاده‌چی چالیشمالاری",
        "mycontris": "چالیشمالار",
-       "contribsub2": "$1 اوچون ($2)",
+       "contribsub2": "{{GENDER:$3|$1}} اوچون ($2)",
+       "contributions-userdoesnotexist": "«$1» ایشلدن حسابی ثبت اولونماییب‌دیر.",
        "nocontribs": "بو موشخصاتا اویغون دییشدیر تاپیلمادی",
        "uctop": "(ایندیکی)",
        "month": "بو آی‌دان (و اؤنجه‌سی):",
        "sp-contributions-newbies-sub": "یئنی ایستیفاده‌چی‌لر اوچون",
        "sp-contributions-newbies-title": "یئنی حساب‌لار اوچون ایستیفاده‌چی فالیت‌لری",
        "sp-contributions-blocklog": "باغلاما قئیدلری",
+       "sp-contributions-suppresslog": "باسدیریلمیش ایشلدن فعالیت‌لری",
        "sp-contributions-deleted": "سیلینمیش ایستیفاده‌چی چالیشمالاری",
        "sp-contributions-uploads": "یوکله‌نَنلر",
        "sp-contributions-logs": "قئیدلر",
        "sp-contributions-search": "چالیشمالاری آختار",
        "sp-contributions-username": "آی‌پی آدرسی ویا ایستیفاده‌چی آدی:",
        "sp-contributions-toponly": "تکجه سون نوسخه اولان دییشیکلری گؤستر",
+       "sp-contributions-newonly": "یالنیز صفحه یاراتماق دَییشیکلیکلرینی گؤستر",
        "sp-contributions-submit": "آختار",
-       "whatlinkshere": "بو صØ­Û\8cÙ\81Ù\87â\80\8cÛ\8cÙ\87 Ø¨Ø§ØºÙ\84اÙ\86تÛ\8cÙ\84ار",
+       "whatlinkshere": "بو صÙ\81Ø­Ù\87â\80\8cÛ\8cÙ\87 Ø¨Ø§ØºÙ\84اÙ\86تÛ\8câ\80\8cÙ\84ار",
        "whatlinkshere-title": "«$1»-ه باغلانان صحیفه‌لر",
-       "whatlinkshere-page": "صحیفه:",
+       "whatlinkshere-page": "صفحه:",
        "linkshere": "آشاغیداکی صحیفه‌لر '''[[:$1]]'''-ه باغلانیب:",
        "nolinkshere": "'''[[:$1]]'''-ه هئچ بیر صحیفه باغلانماییب‌دیر.",
        "nolinkshere-ns": "سئچیلمیش آدفضاسیندا، هئچ صحیفه '''[[:$1]]'''-ه باغلانتی‌سی یوخدور.",
-       "isredirect": "یوللاندیرما صحیفه‌سی",
+       "isredirect": "یوللاندیرما صفحه‌سی",
        "istemplate": "داخیل اولموش",
        "isimage": "فایلا باغلانتی",
        "whatlinkshere-prev": "{{PLURAL:$1|اؤنجه‌کی|اؤنجه‌کی $1}}",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] باغلاندی.<br />\nباخ [[Special:BlockList|آی پی باغلانماق سیاهی‌سی]] باغلانمیش آی پ-لر.",
        "ipb-blockingself": "اؤزونوزو باغلاماق حالیندا سیز.! بونو ائتمک ایستدیگینیزدن اطمینانییز وار می؟",
        "ipb-confirmhideuser": "ایستیفادچینی باغلاماق و دییشدیر سیاهی‌سین‌دان اونون آدینی سیلمک اوزرسینیز. بونو ائتمک ایستدیگینیزدن اطمینانیز وار می؟",
+       "ipb-confirmaction": "بونو ائتمک‌دن آرخایین اولساز، دیب‌ده‌کی «{{int:ipb-confirm}}» قوتوسونا نیشان قویون.",
        "ipb-edit-dropdown": "باغلاما سبب‌لرینی دییشدیر",
        "ipb-unblock-addr": "$1 آچیلدی",
        "ipb-unblock": "ایستیفاده چی نین یا دا آی پی نین آچیلماسی",
        "ipb-blocklist": "مؤوجود بلوکلاری گؤستر",
-       "ipb-blocklist-contribs": "$1 ایستیفاده‌چی فعالیتلری",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} ایستیفاده‌چی فعالیتلری",
        "unblockip": "ایستیفاده‌چی‌نین باغلانماسین گؤتور",
        "unblockiptext": "اولجه‌دن باغلانمیش بیر ای پی عنوانینا و یا ایستیفاده‌چی آدینا یازما گئری وئرمک اوچون آشاغی‌داکی فورمادا ایستیفاده ائدین.",
        "ipusubmit": "بو بلوکو گؤتور",
        "unblocked": "[[User:$1|$1]]  - نین بلوکو گؤتورولدو",
        "unblocked-range": "$1-نین بلوکو گؤتورولدو",
        "unblocked-id": "$1-نین بلوکو گؤتورولدو",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] قاداغاسی قالدیریلدی.",
        "blocklist": "بلوکلانمیش ایستیفاده‌چیلر",
        "ipblocklist": "باغلانمیش ایستیفاده‌چیلر",
        "ipblocklist-legend": "بلوکلانمیش ایستیفاده‌چینی آختار",
        "change-blocklink": "بلوکلامانی ديَیشدیر",
        "contribslink": "چالیشمالار",
        "emaillink": "ایمیل گؤندر",
-       "autoblocker": "آوتوماتیک اولا‌راق باغلانمیسینیز. چونکی، قیسا مدت اول سیزین ای پی-عنوانینیز \"آوتوماتیک اولا‌راق بلوکلانمیسینیز. چونکی، قیسا مدت اول سیزین ایپ-اونوانینیز \"[[User:$1|$1]]\" طرفین‌دن ایستیفاده ائدیلمیش‌دیر.\n$1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: \"$2\"",
+       "autoblocker": "یاخینلیقدا سیزین آی‌پی آدرسیز «[[User:$1|$1]]» ایله ایشلدیلمک اوچون، اوتوماتیک اولاراق باغلانیلمیسیز.\n$1-ین وئریلمیش باغلانماق سببی: «$2»",
        "blocklogpage": "باغلاما قئیدلری",
        "blocklog-showlog": "بو ایستیفاده‌چی داها اول بلوکلانمیش‌دیر. بلوکلاما گونده‌لیگی رئفئرانس اوچون آشاغیدا گؤستریلیب:",
        "blocklog-showsuppresslog": "بو ایستیفاده‌چی داها اول باغلانمیش‌دیر. باغلانما گونده‌لیگی رئفئرانس اوچون آشاغیدا گؤستریلیب:",
        "range_block_disabled": "ایداره‌چیلره دیاپازونو بلوکلاماق قاداغاندیر.",
        "ipb_expiry_invalid": "بیتمه واختی سهودیر",
        "ipb_expiry_temp": "گیزلی ایستیفاده‌چی آدی بلوکلاما‌لاری مدت‌سیز اولما‌لی‌دیر.",
-       "ipb_hide_invalid": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ù\87ئسابÛ\8cÙ\86Ù\84Ù\86 Ú¯Û\8cزÙ\84دÛ\8cÙ\84Ù\85Ù\87â\80\8cسÛ\8c Ù\82ئÛ\8cرÛ\8c\85Ù\88Ù\85Ú©Ù\88Ù\86â\80\8cدÙ\88رØ\9b Ø­Ø¯Ø¯Ù\86 Ú\86Ù\88Ø® Ø±Ø¦Ø¯Ø§Ú©Øªه‌سی وار.",
+       "ipb_hide_invalid": "بÙ\88 Ø­Ø³Ø§Ø¨ Ø¨Ø§Ø³Ø¯Û\8cرÛ\8cÙ\84اÙ\86Ù\85ادÛ\8cØ\9b Ø§Ù\88Ù\86Ù\88 {{PLURAL:$1|بÛ\8cردÙ\86|$1-دÙ\86}} Ú\86Ù\88Ø® Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\85ه‌سی وار.",
        "ipb_already_blocked": "\"$1\" آرتیق بلوکلانیب",
        "ipb-needreblock": "$1 آرتیق باغلانیب.\nباغلاما شرط‌لرینی دییشمک ایستییرسینیز؟",
        "ipb-otherblocks-header": "آیری {{PLURAL:$1|باغلانماا|باغلاما‌لار}}",
        "thumbnail_gd-library": "' 'قئید:' صحیفه‌لرین بوتون کئچمیشینی بو فورملا خاریجه اؤتورولمه‌سی، پئرفورمانس سبب‌لرین‌دن اؤتری دؤوره خاریجی بوراخیلمیش‌دیر.$1",
        "thumbnail_image-missing": "بئله گؤرونور کی، $1 فایلی یوخ‌دور",
        "import": "صحیفه‌لری ایدخال ائت",
-       "importinterwiki": "ویکیلر اراسی چیخارما",
-       "import-interwiki-text": "ایچه کؤچورمک اوچون بیر wiki و صحیفه باش‌لیغی سئچین.\nرئویزیون تاریخ‌لری و یازارلارین آدلاری قورونا‌جاق.\nبوتون ویکیلئراراسی ایچه کؤچورمه حرکت‌لری [[Special:Log/import|ایچه کؤچورمه گوندلیگینده]] یازیلماقدا‌دیر.",
+       "importinterwiki": "آیری ویکی‌دن ایچری گتیرمک",
+       "import-interwiki-text": "ایچری گتیرمک اوچون بیر ویکی و صفحه باشلیغی سئچین.\nنوسخه تاریخلری و یازارلارین آدلاری قورونا‌جاق.\nآیری ویکیلردن بوتون ایچری گتیرمه‌لر، [[Special:Log/import|ایچری گتیرمک ثبت‌لرین‌ده]] یازیلیر.\nبوتون ویکیلئراراسی ایچه کؤچورمه حرکت‌لری [[Special:Log/import|ایچه کؤچورمه گوندلیگینده]] یازیلماقدا‌دیر.",
+       "import-interwiki-sourcewiki": "قایناق ویکی:",
        "import-interwiki-sourcepage": "قایناق صفحه:",
        "import-interwiki-history": "صحیفه‌نین دییشمه تاریخچه‌لری‌نین هامی‌سینی کؤچور",
        "import-interwiki-templates": "بوتون شابلون‌لارلا بیرلیکده",
        "importuploaderrortemp": "ایچه کؤچورولن فایلین یوکلنمه‌سی اوغورسوز اولدو.\nمووققتی فایل ایتکین.",
        "import-parse-failure": "اکس ام ال ایچری کؤچورمه ییغماسی موفقیت‌سیز",
        "import-noarticle": "یوکلمگه صحیفه یوخدور!",
-       "import-nonewrevisions": "بوتون نوسخه لر اول‌دن ایچه کؤچورولموش.",
+       "import-nonewrevisions": "هئچ نوسخه ایچری گتیریلمه‌دی (هامیسی اؤنجه‌دن واریدیلار، یوخسا خطا قاباغا گلماغا گؤره آتلانیلدیلار).",
        "xml-error-string": "$1 $2 سترینده، $3 سوتونوندا ($4 بایت): $5",
        "import-upload": "XML-وئریلنی یوکله",
        "import-token-mismatch": "سئانس معلومات‌لارینین ایتیریلمه‌سی. لطفاً، یئنی‌دن جهد ائدین.",
        "import-invalid-interwiki": "گؤستریلن ویکی‌دن کؤچورمک مومکون دئییل",
-       "import-error-edit": "\"$1\" صحیفه‌سی ایدخال ائدیله بیلینمیر، چونکی اونو دییشمک سلاهیتینیز یوخ‌دور.",
-       "import-error-create": "\"$1\" صحیفه‌سی آچیلمیر، چونکی اونو یاراتماق سلاهیتینیز یوخ‌دور.",
-       "import-error-interwiki": "صحیفه \"$1\" داخیل ائدیلممیش‌دیر. چونکی اونون خاریجی باغلانتی سی (interwiki) یئری توتولوب و رئزرو اولوب.",
-       "import-error-special": "صحیفه «$1» ایچری توکمه اولنمادی، نیه کی بیر اجازه سیز آد ین فضاسینا تعلوقو وار.",
-       "import-error-invalid": "صحÛ\8cÙ\81Ù\87 \"$1\" Ø§Ø¹ØªØ¨Ø§Ø± Ø³Û\8cز Ø§Ù\88Ù\84Ù\85اÙ\82 Ø¯Ù\84Û\8cÙ\84 Ø§Ù\88Ú\86Ù\88Ù\86 Ø¢Ø¯Û\8c Ø¯Ø§Ø®Û\8cÙ\84 Ø§Ù\88Ù\84Ù\86Ù\85Ù\88ر.",
+       "import-error-edit": "سیزین «$1» صفحه‌سینی دَییشدیرمک ایجازه‌نیز اولمادیغینا گؤره، بو صفحه ایچری گتیریلمه‌دی.",
+       "import-error-create": "سیزین «$1» صفحه‌سینی یاراتماق ایجازه‌نیز اولمادیغینا گؤره، بو صفحه ایچری گتیریلمه‌دی.",
+       "import-error-interwiki": "«$1» صفحه‌نین آدی، خاریجی باغلانتی (interwiki) قورماغا رِزِرو اولدوغو اوچون، ایچری گتیریلمه‌دی.",
+       "import-error-special": "«$1» صفحه، صفحه‌لره ایجازه وئرمه‌ین اؤزل بیر آدفضاسیندا یئر آلدیغینا گؤره، ایچری گتیریلمه‌دی.",
+       "import-error-invalid": "بÙ\88 Ù\88Û\8cÚ©Û\8câ\80\8cدÙ\87 Ø¢Ø¯Û\8c Ú¯Ø¦Ú\86رسÛ\8cز Ø§Ù\88Ù\84دÙ\88غÙ\88Ù\86ا Ú¯Ø¤Ø±Ù\87Ø\8c Â«$1» ØµÙ\81Ø­Ù\87â\80\8cسÛ\8c Ø§Û\8cÚ\86رÛ\8c Ú¯ØªÛ\8cرÛ\8cÙ\84Ù\85Ù\87â\80\8cدÛ\8c.",
        "import-error-unserialize": "«$1» صحیفه‌سینین $2 نوسخه‌سی سِریالیزه‌لیقدان چیخاردیلانمادی. بو نوسخه، $4 کیمی سِریالیزه اولان $3 مودِلینی ایشلدمگه بیلدیریلدی.",
        "import-options-wrong": "{{PLURAL:$2|جزئیات| جزئیات}} یانلیش: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "وئریلن کؤک صحیفه‌‌سی اعتبارسیز آددیر.",
        "import-rootpage-nosubpage": "آد فضا سی  \"$1\" آنا باسئ ٔآلت صحیفه اوچون اجازه وئرمیر.",
        "importlogpage": "چیخاریلما گونده‌لیگی",
        "importlogpagetext": "باشقا ویکیلردن، دَییشیکلیک گئچمیشلریله بیرلیک‌ده گتیریلمیش صحیفه‌لر.",
-       "import-logentry-upload-detail": "{{PLURAL:$1|بیر|$1}} نوسخه",
-       "import-logentry-interwiki-detail": "$2-دن {{PLURAL:$1|بیر|$1}} نوسخه",
+       "import-logentry-upload-detail": "{{PLURAL:$1|بیر|$1}} نوسخه ایچری گتیریلدی",
+       "import-logentry-interwiki-detail": "$2-دن {{PLURAL:$1|بیر|$1}} نوسخه ایچری گتیریلدی",
        "javascripttest": "جاوااسکریپت تِستی",
        "javascripttest-pagetext-noframework": "بو صحیفه، جاوااسکریپت تِستلرینی ایشلدمگه ساخلانیلیب‌دیر.",
        "javascripttest-pagetext-unknownframework": "تانینمامیش تِست ائتمه سیستِمی «$1».",
+       "javascripttest-pagetext-unknownaction": "تانینمایان ایش «$1».",
        "javascripttest-pagetext-frameworks": "لوطفاً بو تِست ائتمه سیستِملرین بیرینی سئچین: $1",
        "javascripttest-pagetext-skins": "تِستلرین ایجرا ائتمک اوچون بیر قابیق سئچین:",
        "javascripttest-qunit-intro": "mediawiki.org-دا [$1 تِست ائتمه سندلندیرمه‌لری]نه باخین.",
-       "tooltip-pt-userpage": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c صفحه‌نیز",
+       "tooltip-pt-userpage": "اÛ\8cØ´Ù\84دÙ\86 صفحه‌نیز",
        "tooltip-pt-anonuserpage": "سیز او آی‌پی آدرسیله دَییشیکلیک ائتدیگینیز ایستیفاده‌چی صحیفه‌سی",
-       "tooltip-pt-mytalk": "دانیشیق صحیفه‌نیز",
+       "tooltip-pt-mytalk": "دانیشیق صفحه‌نیز",
        "tooltip-pt-anontalk": "بو آی‌پی آدرسینین دَییشیکلیکلرینه گؤره دانیشیق",
        "tooltip-pt-preferences": "ترجیحلرینیز",
        "tooltip-pt-watchlist": "دییشمکلرینی ایزله‌دیگینیز صفحه‌لرین سیاهی‌سی",
        "tooltip-pt-logout": "چیخیش",
        "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده سیز،آنجاق حساب یارتماق اختیاری دیر.",
        "tooltip-ca-talk": "ایچینده‌کیلره گؤره دانیشیق",
-       "tooltip-ca-edit": "سیز بو صحیفه‌نی دَییشدیره بیلرسینیز. لوطفاً قئید ائتمه‌دن اونجه اؤن‌گؤستریش دویگه‌سینی ایشلدین",
+       "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": "بو صحیفه‌‌نی سیل",
        "tooltip-ca-undelete": "بو صحیفه‌‌نین محافظه‌‌سینی کنارلاشدیر",
        "tooltip-ca-move": "بو صحیفه‌‌نین آدینی ديَیشدیر",
-       "tooltip-ca-watch": "بو صحیفه‌‌نی ایزله",
+       "tooltip-ca-watch": "بو صفحه‌‌نی ایزله",
        "tooltip-ca-unwatch": "بو صفحه‌نی ایزله‌دیگینیز صفحه‌لردن قالدیرین",
        "tooltip-search": "{{SITENAME}}-دا آختار",
-       "tooltip-search-go": "اولورسا بو آددا بیر صحیفه‌یه گئت",
-       "tooltip-search-fulltext": "بو یازی اولان صحیفه‌لری آختار",
+       "tooltip-search-go": "اولورسا بو آددا بیر صفحه‌یه گئت",
+       "tooltip-search-fulltext": "بو یازی اولان صفحه‌لری آختار",
        "tooltip-p-logo": "آنا صفحه‌یه باخ",
-       "tooltip-n-mainpage": "آنا صحیفه‌‌یه باخین",
+       "tooltip-n-mainpage": "آنا صفحه‌‌یه باخین",
        "tooltip-n-mainpage-description": "آنا صفحه‌یه باخ",
        "tooltip-n-portal": "پروژه‌ یه گؤره، سیز نه ایش گوره بیلرسیز، هاردا نه‌لری تاپا بیلرسیز",
-       "tooltip-n-currentevents": "ایندیکی اولایÙ\84ارا Ø§Û\8cÙ\84Ú¯Û\8cÙ\84Û\8c Ø¨Û\8cÙ\84Ú¯Û\8cÙ\84ر ØªØ§Ù¾",
+       "tooltip-n-currentevents": "ایندیکی اولایâ\80\8cÙ\84ارا Ø§Û\8cÙ\84Ú¯Û\8cÙ\84Û\8c Ø¨Û\8cÙ\84Ú¯Û\8câ\80\8cÙ\84ر ØªØ§Ù¾",
        "tooltip-n-recentchanges": "بو ویکی‌ده سون دَییشیکلرین لیستی",
-       "tooltip-n-randompage": "بیر راست‌گله صحیفه گتیر",
+       "tooltip-n-randompage": "بیر راست‌گله صفحه گتیر",
        "tooltip-n-help": "آنلاماق یئری",
-       "tooltip-t-whatlinkshere": "بورایا باغلانان بوتون ویکی صحیفه‌لرین لیستی",
-       "tooltip-t-recentchangeslinked": "بو صحیفه‌دن باغلانان صحیفه‌لرین سون دَییشیکلیکلری",
+       "tooltip-t-whatlinkshere": "بورایا باغلانان بوتون ویکی صفحه‌لرین لیستی",
+       "tooltip-t-recentchangeslinked": "بو صفحه‌دن باغلانان صفحه‌لرین سون دَییشیکلیک‌لری",
        "tooltip-feed-rss": "بو صحیفه‌‌ اوچون آراس‌اس يايیمی",
        "tooltip-feed-atom": "بو صحیفه‌‌ اوچون آتوم يايیمی",
        "tooltip-t-contributions": "بو ایستیفاده‌چی‌نین وئردیگی دییشیکلر سیاهی‌سی",
        "tooltip-t-emailuser": "بو ایستیفاده‌چی‌یه بیر ایمیل گؤندر",
+       "tooltip-t-info": "بو صفحه‌یه گؤره آرتیق بیلگی",
        "tooltip-t-upload": "فایل‌لار یوکله",
-       "tooltip-t-specialpages": "بوتون اؤزل صحیفه‌لرین لیستی",
-       "tooltip-t-print": "بو صحیفه‌‌نین چاپ ائدیلن نوسخه‌سی",
-       "tooltip-t-permalink": "صحیفه‌نین بو نوسخه‌سینه دَییشیلمز باغلانتی",
+       "tooltip-t-specialpages": "بوتون اؤزل صفحه‌لرین لیستی",
+       "tooltip-t-print": "بو صفحه‌‌نین چاپ ائدیلن سۆرومو",
+       "tooltip-t-permalink": "صفحه‌نین بو سۆرومونه دَییشیلمز باغلانتی",
        "tooltip-ca-nstab-main": "مقاله‌یه باخین",
        "tooltip-ca-nstab-user": "ایستیفاده‌چی صفحه‌سینه باخ",
        "tooltip-ca-nstab-media": "مئدیا-فايل",
-       "tooltip-ca-nstab-special": "بو بیر اؤزل صحیفه‌دیر، سیز اونو دَییشدیره بیلمزسیز",
+       "tooltip-ca-nstab-special": "بو بیر اؤزل صفحه‌دیر، سیز اونو دَییشدیره بیلمزسیز",
        "tooltip-ca-nstab-project": "پروژه صحیفه‌سینه باخ",
-       "tooltip-ca-nstab-image": "فايل صحیفه‌‌سینه باخین",
+       "tooltip-ca-nstab-image": "فايل صفحه‌‌سینه باخین",
        "tooltip-ca-nstab-mediawiki": "سیستم مئساژلرینه باخ",
        "tooltip-ca-nstab-template": "شابلونا باخ",
        "tooltip-ca-nstab-help": "یاردیم صحیفه‌‌سی",
        "tooltip-watchlistedit-raw-submit": "ایزلدیگیم صحیفه‌لرین سیاهی‌سینین یئنی‌لنمه‌سی",
        "tooltip-recreate": "اول سیلینمه‌سینه باخمایا‌راق صحیفنی برپا ائت",
        "tooltip-upload": "یوکلمنی باشلات",
-       "tooltip-rollback": "سÙ\88Ù\92Ù\86Ù\88Ù\86جÙ\88 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø·Ø±Ù\81Û\8cÙ\86دÙ\86 Ø§Ø¦Ø¯Û\8cÙ\84Ù\85Û\8cØ´ Ø¨Û\86تÙ\88Ù\86 Ø¯Ù\8aÙ\8eÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©لری بیر دفعه‌‌يه گئری قايتار",
+       "tooltip-rollback": "سÙ\88Ù\92Ù\86Ù\88Ù\86جÙ\88 Ø§Û\8cØ´Ù\84دÙ\86 Ø·Ø±Ù\81Û\8cÙ\86دÙ\86 Ø§Ø¦Ø¯Û\8cÙ\84Ù\85Û\8cØ´ Ø¨Û\86تÙ\88Ù\86 Ø¯Ù\8aÙ\8eÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©â\80\8cلری بیر دفعه‌‌يه گئری قايتار",
        "tooltip-undo": "ائدیلمیش ديَیشیکلیگی گئری قايتار و گئری قايتارما سببینی قئيد ائتمک اۆچون سێناق گؤستریشینی آچ",
        "tooltip-preferences-save": "ترجیحلری ساخلا",
        "tooltip-summary": "قیسا بیر خولاصه‌‌ یازین",
        "pageinfo-length": "صحیفه‌‌ اوزونلوغو (بايت)",
        "pageinfo-article-id": "صحیفه آی‌دی-سی",
        "pageinfo-language": "صحیفه مضمونونون دیلی",
-       "pageinfo-robot-policy": "آختارÛ\8cØ´ Ø³Û\8cستÙ\85Û\8cÙ\86 Ø¯Ù\88رÙ\88Ù\85Ù\88",
-       "pageinfo-robot-index": "سÛ\8cÛ\8cاÙ\87Ù\87 Ø¢Ù\84Û\8cÙ\86Û\8cØ´ی",
-       "pageinfo-robot-noindex": "ایندِکسله‌نه بیلمز",
+       "pageinfo-robot-policy": "بÙ\88تÙ\84ارÙ\84ا Ø§Û\8cÙ\86دÙ\90کسÙ\84Ù\86Û\8cر",
+       "pageinfo-robot-index": "اÛ\8cجازÙ\87â\80\8cÙ\84ی",
+       "pageinfo-robot-noindex": "ایجازه‌سیز",
        "pageinfo-watchers": "صحیفه‌نین تاماشا‌چی سایی",
        "pageinfo-few-watchers": "$1-دن آز {{PLURAL:$1|ایزله‌ین}}",
-       "pageinfo-redirects-name": "بو صحیفه‌یه یول‌لاندیرمالار",
+       "pageinfo-redirects-name": "بو صحیفه‌یه یول‌لاندیرما سایی‌سی",
        "pageinfo-subpages-name": "بو صحیفه‌نین آلت‌صحیفه‌لری",
        "pageinfo-subpages-value": "$1 ({{PLURAL:$2|بیر|$2}} یول‌لاندیرما؛ {{PLURAL:$3|بیر|$3}} قِیری-یول‌لاندیرما)",
        "pageinfo-firstuser": "صحیفنی یارا‌دان",
        "pageinfo-hidden-categories": "گیزلی {{PLURAL:$1|بؤلمه|بؤلمه‌لر}} ($1)",
        "pageinfo-templates": "ایشله‌دیلمیش {{PLURAL:$1|بیر|$1}} شابلون ($1)",
        "pageinfo-transclusions": "ایچینده گلن {{PLURAL:$1|صحیفه|صحیفه‌لر}} ($1)",
-       "pageinfo-toolboxlink": "صحیفه بیلگی‌سی",
+       "pageinfo-toolboxlink": "صفحه بیلگی‌سی",
        "pageinfo-redirectsto": "ایستیقامتلن‌دیریلن",
        "pageinfo-redirectsto-info": "بیلگی",
        "pageinfo-contentpage": "بیر مزمون صحیفه‌سی ساییلیر",
        "newimages-summary": "بو خصوصی صحیفه، ان سون یوک‌لنن فایل‌لاری گؤستریر.",
        "newimages-legend": "سۆزگَج",
        "newimages-label": "فایلین (و یا اونون بیر حیسه‌سی‌نین) آدی:",
+       "newimages-showbots": "بوت یوکله‌مه‌لرینی گؤستر",
        "noimages": "هئچ نیی گؤرممک.",
        "ilsubmit": "آختار",
        "bydate": "تاریخین اوستوندن",
        "sunday-at": "یکشنبه، $1",
        "yesterday-at": "دونن $1",
        "bad_image_list": "فورمت بئله اولمالیدیر:\n\nيالنیز لیست آیتِملری (* ایله باشلايان سطرلر) نظره آلینیر.\nسطرده‌کی ایلک باغلانتی، بیر پیس فایلا باغلانان اولمالیدیر.\nائله بو سطرده سونراکی باغلانتیلار استثنا حساب اولونور. مثلاً، فايل صحیفه‌ده سطرین ایچینده گؤرونه بیلر.",
-       "metadata": "مِتابیلگیلر",
+       "metadata": "مِتابیلگیلر",
        "metadata-help": "بۇ فايلدا فوْتوْاپارات و يا سکانئرله علاوه‌‌ اوْلونموش معلوماتلار وار. اگر فايل سوْنرادان دَییشدیریلیبسه، بعضی پارامئترلر بۇ شکیلده گؤستریلنلردن فرقلی اوْلا بیلر.",
        "metadata-expand": "جزئیات معلومات‌لاری گؤستر",
        "metadata-collapse": "جزئیات معلومات‌لاری گیزلت",
        "exif-software": "پروقرام تمیناتی",
        "exif-artist": "یازار",
        "exif-copyright": "یازانلار حقوقو صاحبی",
-       "exif-exifversion": "exif نوسخه سی",
+       "exif-exifversion": "exif سۆرومو",
        "exif-flashpixversion": "دستک‌لنن Flashpix نوسخه سی",
        "exif-colorspace": "رنگ ساحه‌سی",
        "exif-componentsconfiguration": "هر بیلشنین معناسی",
        "exif-compression-3": "رمز قرار وئرمک سی‌سی‌آی‌تی‌تی قروپ ۳",
        "exif-compression-4": "رمز قرار وئرمک سی‌سی‌آی‌تی‌تی قروپ 4",
        "exif-copyrighted-true": "مؤلف‌لیک حقوقو ایله قورونور",
-       "exif-copyrighted-false": "عمومی دامنه",
+       "exif-copyrighted-false": "کوپی‌رایت وضعیتی بلیرتیلمه‌میش",
        "exif-unknowndate": "تانینمامیش تاریخ",
        "exif-orientation-1": "نورمال",
        "exif-orientation-2": "یاتای چئویریلیب",
        "confirm-watch-top": "بو صفحه‌نی ایزله‌دیکلرینیزه آرتیریلدی",
        "confirm-unwatch-button": "اولدو",
        "confirm-unwatch-top": "بو صفحه‌نی ایزله‌دیگینیز صفحه‌لردن قالدیریلدی",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "&larr; اولکی صحیفه‌‌",
        "imgmultipagenext": "سونراکی صحیفه‌‌ &rarr;",
        "imgmultigo": "گئت!",
        "imgmultigoto": "$1 صحیفه‌‌يه گئت",
        "img-lang-default": "(وارساییلان دیل)",
+       "img-lang-info": "بو عکسی $1-ده گؤستر. $2",
        "img-lang-go": "گئت",
        "ascending_abbrev": "آرتما سیراسینا گؤره",
        "descending_abbrev": "آزالما سیراسینا گؤره",
        "autosumm-replace": "صحیفه‌‌نین مظمونو ' $1' يازیسی ایله ديَیشدیریلدی",
        "autoredircomment": "[[$1]] صحیفه‌‌سینه ایستیقامتلندیریلیر",
        "autosumm-new": "صحیفه‌‌نی ' $1' ایله يارات",
+       "autosumm-newblank": "بوش صحفه یاراندی",
        "lag-warn-normal": "$1 {{PLURAL:$1 | سانیيه‌دن | سانیيه‌ده}} يئنی ديَیشیکلیکلر بو سیياهیدا گؤرولمه‌يه.",
        "lag-warn-high": "وئریلنلر بازاسی سونوجوسونداکی هددیندن آرتیق گئجیکمه‌دن گؤره، $1 {{PLURAL:$1 | سانیيه‌دن | سانیيه‌دن}} يئنی ديَیشیکلیکلر بو سیياهیدا گؤرونمئيئبیلیر.",
        "watchlistedit-normal-title": "ایزله‌دیگیم صحیفه‌‌لری دَییشدیر",
        "version-no-ext-name": "[آد سیز]",
        "version-license": "مِدیاویکی لیسانسی",
        "version-ext-license": "لیسانس",
+       "version-ext-colheader-name": "اوزانتی",
        "version-skin-colheader-name": "قابیق",
        "version-ext-colheader-version": "سۆروم",
        "version-ext-colheader-license": "لیسانس",
        "version-ext-colheader-description": "آچیقلاما",
        "version-ext-colheader-credits": "یازیچی‌لار",
+       "version-license-title": "$1 اوچون ایجازه سی",
+       "version-credits-title": "$1 اوچون اعتبارلار",
        "version-poweredby-credits": "بو wیکی ' ''[https://www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیله‌رک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
        "version-poweredby-others": "آیریلار",
+       "version-poweredby-translators": "مترجیم لری translatewiki.net",
        "version-credits-summary": "بو ایستفاده چیلر دییشدیر لرینه گوره [[Special:Version|مئدیاویکی]] تانیش ائدیرم.",
        "version-license-info": "مئدیاویکی بیر اؤزگور یازیلیم‌دیر؛ سیز اونو، اؤزگور یازیلیم قورولوشو یایان GNU گنل عمومی لیسانسی اساسی‌له یئنی‌دن داغیدیب یوخسا دَییشه بیلرسینیز؛ یا لیسانسین ۲-نجی نوسخه‌سی، یا دا (اؤز سئچدیگینیزله) هر هانکی سونراکی نوسخه‌سی.\n\nمئدیاویکی، فایدالی اولماق اومودویله داغینیب‌دیر، اما هئچ قارانتی‌سی یوخدور؛ حتی تیجارت یا بیر ایشه اویغون اولماق قارانتی‌سی ده یوخدور.باشقا بیلگیلر اوچون GNU گنل عمومی لیسانسینا باخین.\n\nسیز گرک بو یازیلیم‌لا، [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU گنل عمومی لیسانسی]نین بیر نوسخه‌نی‌ده آلمیش اولاسینیز؛ ائله اولماسا، [//www.gnu.org/licenses/old-licenses/gpl-2.0.html اونو آنلاین اوخویون]، یوخسا اؤزگور یازیلیم قورولوشونا بو آدرس‌ده یازین: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301",
        "version-software": "يوکلو پروقرام",
        "version-entrypoints": "گیریش نقطه‌‌سی‌نین آدرسی",
        "version-entrypoints-header-entrypoint": "گیریش نقطه‌‌سی",
        "version-entrypoints-header-url": "اینترنت آدرسی",
-       "redirect": "فایل، ایستیفاده‌چی یا نوسخه ID-سی ایله یول‌لاندیرما",
+       "version-libraries": "نصب اولونموش کیتابخانا",
+       "version-libraries-library": "کیتاب‌ائوی",
+       "version-libraries-version": "نوسخه‌",
+       "redirect": "فایل، ایستیفاده‌چی، صفحه یا نوسخه آی‌دی-سی ایله یول‌لاندیرما",
        "redirect-legend": "بیر فایل یا صحیفه‌یه یول‌لاندیرما",
-       "redirect-summary": "بو اؤزل صحیفه، بیر فایلا (فایل آدی ایله)، صحیفه‌یه (نوسخه ID-سی ایله) یا ایستیفاده‌چی صحیفه‌سینه (ایستیفاده‌چی نومره ID-سی ایله) یول‌لاندیریر.",
+       "redirect-summary": "بو اؤزل صحیفه، بیر فایلا (فایل آدی ایله)، صفحه‌یه (نوسخه یا صفحه آی‌دی-سی ایله) یا ایستیفاده‌چی صفحه‌سینه (ایستیفاده‌چی نومره آی‌دی-سی ایله) یول‌لاندیریر. ایشلتمک: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]]، یا [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "گئت",
        "redirect-lookup": "آختار:",
        "redirect-value": "دَگَر:",
        "redirect-user": "ایستیفاده‌چی ID",
+       "redirect-page": "صفحه کیملیگی",
        "redirect-revision": "صحیفه نوسخه‌سی",
        "redirect-file": "فایل آدی",
        "redirect-not-exists": "دَگَر تاپیلمادی",
        "fileduplicatesearch-result-1": "«$1» فایلینین هئچ بیر عینی کوپیسی یوخدور.",
        "fileduplicatesearch-result-n": "«$1» فایلینین، {{PLURAL:$2|بیر|$2}} عینی کوپیسی واردیر.",
        "fileduplicatesearch-noresults": "\"$1\" آدیندا فایل تاپیلمادی.",
-       "specialpages": "اؤزل صحیفه‌لر",
-       "specialpages-note": "* نورمال اؤزل صحیفه‌لر.\n* <span class=\"mw-specialpagerestricted\">محدودلاشدیریلمیش اؤزل صحیفه‌لر.</span>",
+       "specialpages": "اؤزل صفحه‌لر",
+       "specialpages-note": "* نورمال اؤزل صفحه‌لر.\n* <span class=\"mw-specialpagerestricted\">محدودلاشدیریلمیش اؤزل صفحه‌لر.</span>",
        "specialpages-group-maintenance": "جاری مروزه‌لر",
        "specialpages-group-other": "دیگر خصوصی صحیفه‌لر",
        "specialpages-group-login": "گیریش / حساب یاراد",
        "tags-tag": "یاپیشقان آدی",
        "tags-display-header": "ديَیشیکلیک لیستئلئریندئکی گؤرونوش",
        "tags-description-header": "آنلامینین تام آچیقلاماسی",
+       "tags-source-header": "قایناق",
        "tags-active-header": "چالیشقلان؟",
        "tags-hitcount-header": "یاپیشقانلی دییشیک‌لیک‌لر",
+       "tags-actions-header": "چالیشمالار",
        "tags-active-yes": "بلی",
        "tags-active-no": "یوْخ",
        "tags-edit": "دَییشدیر",
+       "tags-delete": "سیل",
        "tags-hitcount": "$1 {{PLURAL:$1|دییشیکلیک|دییشیک‌لیک}}",
+       "tags-create-submit": "یارات",
        "comparepages": "صحیفه‌لری قارشی‌لاش‌دیر",
        "compare-page1": "صحیفه 1",
        "compare-page2": "صحیفه 2",
        "compare-revision-not-exists": "بَلیرتدیگینیز نوسخه یوخدور.",
        "dberr-problems": "عوذر ایسته‌ییریک! بو سایت‌دا تِکنیکی ایشکال‌لار واردیر.",
        "dberr-again": "بیر نئچه دقیقه دؤزوب سونرا یئنی‌دن یوکله‌یین.",
-       "dberr-info": "(دیتابیس خیدمت‌چیسی‌یه باغلانماق اولونمادی: $1)",
+       "dberr-info": "(دیتابیسه باغلانماق اولونمادی: $1)",
        "dberr-usegoogle": "بو آرادا، گوگل‌ده آختارابیلرسینیز.",
        "dberr-outofdate": "دیقت ائدین کی اوردا بیزیم سایتیمیزین ایندِکسی کؤهنه اولا بیلر.",
        "dberr-cachederror": "بو ایسته‌نیلن صحیفه‌نین بیر کَش اولونموش کوپی‌سیدیر و کؤهنه اولا بیلر.",
        "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": "بÛ\8cر Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c حسابی $1 {{GENDER:$2|یاراتدی}}",
+       "logentry-newusers-create": "بÛ\8cر Ø§Û\8cØ´Ù\84دÙ\86 حسابی $1 {{GENDER:$2|یاراتدی}}",
        "logentry-newusers-create2": "$1 ایستیفاده‌چی، $3 حسابی {{GENDER:$2|یاراتدی}}",
        "logentry-newusers-byemail": "$3 ایستیفاده‌چی حسابی، $1 ایله {{GENDER:$2|یارادیلیب}} و رمز، ایمیل ایله گؤندریلیب‌دیر",
        "logentry-newusers-autocreate": "$1 ایستیفاده‌چی حسابی اوتوماتیک {{GENDER:$2|یارادیلدی}}",
index c1b6145..997fed0 100644 (file)
        "prevn": "{{PLURAL:$1|папярэдняя|папярэднія|папярэднія}} $1",
        "nextn": "{{PLURAL:$1|наступная|наступныя|наступныя}} $1",
        "prev-page": "папярэдняя старонка",
+       "next-page": "наступная старонка",
        "prevn-title": "{{PLURAL:$1|Папярэдні $1 вынік|Папярэднія $1 вынікі|Папярэднія $1 вынікаў}}",
        "nextn-title": "{{PLURAL:$1|Наступны $1 вынік|Наступныя $1 вынікі|Наступныя $1 вынікаў}}",
        "shown-title": "Паказваць $1 {{PLURAL:$1|вынік|вынікі|вынікаў}} на старонцы",
        "emailccsubject": "Копія Вашага ліста да $1: $2",
        "emailsent": "Ліст адасланы",
        "emailsenttext": "Ваш ліст быў адасланы.",
-       "emailuserfooter": "Гэты ліст быў дасланы ўдзельнікам $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «Даслаць ліст» {{GRAMMAR:родны|{{SITENAME}}}}.",
+       "emailuserfooter": "Гэты ліст быў дасланы {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «{{int:emailpage}}» {{GRAMMAR:родны|{{SITENAME}}}}.",
        "usermessage-summary": "Паведамленьне пра выхад з сыстэмы.",
        "usermessage-editor": "Дастаўка сыстэмных паведамленьняў",
        "watchlist": "Сьпіс назіраньня",
        "tags-create-submit": "Стварыць",
        "tags-create-no-name": "Вы мусіце пазначыць назву меткі.",
        "tags-create-invalid-chars": "Назвы метак ня мусяць утрымліваць коскі (<code>,</code>) або сымбалі касых рысаў (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Назвы метак ня мусяць утрымліваць сымбалі, якія нельга ўжываць у назвах старонак.",
+       "tags-create-already-exists": "Метка «$1» ужо існуе.",
+       "tags-create-warnings-above": "Пры спробе стварыць метку «$1» {{PLURAL:$2|выяўленае наступнае папярэджаньне|выяўленыя наступныя папярэджаньні}}:",
        "comparepages": "Параўнаньне старонак",
        "compare-page1": "Старонка 1",
        "compare-page2": "Старонка 2",
index f86214f..32587a0 100644 (file)
        "wrongpassword": "ای پاسورد یا چیهر گالا که داخل کورته ایت صحیح نه اینت.\nمهربانی بکنیت، پدا امتحان بکینت.",
        "wrongpasswordempty": "ای پاسورد یا چیهر گالا که داخل کورته ایت ، خالی اینت.\nمهربانی پدا کوشش بکنیت.",
        "passwordtooshort": "پاسورد باید کم شه کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته بیئت.",
+       "passwordtoolong": "پاسورد نه باید گیشتیر شه {{PLURAL:$1|۱ حرف|$1 حرفا}}  داشته بیئت.",
        "password-name-match": "شمی چیهرگال یا پاسورد باید شه شمی کار زورکی ئین ناما فرق داشته بیئت.",
        "password-login-forbidden": "استفاده شه ای کار زوروکی ناما و شه ای چیهرگالا اجازه نه اینت.",
        "mailmypassword": "پاک کورتین پاسوردئ",
        "loginreqpagetext": "په دیگه تاکدیمانئ دیستینا باید  $1.",
        "accmailtitle": "پاسورد دیم داته بوت.",
        "newarticle": "(نوکین)",
+       "newarticletext": "شما یک لینک ئی پدا گیپته ئیت و بي ورّق ئی رسیته ئيت که تا انون موجود نه اینت .\nپه ای ورّق ئی جۆڑ کورتینی خاتیرا، به جهلگین چارگوش ئی تا په نیوشیتین ئا شرو بکنیت (په گیشتیرین مالوماتان [$1 کومک ئی ورّق  ] ئا بگیندیت).\nاگه نالوٹگ ایدا آته ئیت، وتی بروزیر تا «بێرگشت» ئی کیلی ئا پرینچیت.",
        "noarticletext": "ای تاکدیم همی انون هیچ متنئ نداریت .\nشما ئه توانیت که بئ دیگه تاکدیمانئ [[Special:Search/{{PAGENAME}}|ای تاکدیمی ئنوانا بگردیت]]،\n<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}}}} پاک بوته ئین سیاه چال ئی] تا بگیندیت.",
        "recentchangeslinked-feed": "مربوتین تغیراتان",
        "recentchangeslinked-toolbox": "مربوتین تغیراتان",
        "recentchangeslinked-title": "مربوتین تغیراتان گو $1",
+       "recentchangeslinked-summary": "بئ جهلگا یک لڑلیست ئی شه آخیرئین ٹگلان گیندیت که بئ تاکدیما لینک بوته انت (یا چَمّی چیهری شریکین تهر) ئانه گیندیت .\nآ تاکدیمان که [[Special:Watchlist|شمی پدگیری لیست]] ئی تا به ینت '''پررنگ''' نشان داته ئه به ینت.",
        "recentchangeslinked-page": "تاکدیم نام:",
        "recentchangeslinked-to": "نشان داتین تاکدیماني تغیرات که گۆ ای تاکدیما لینک دارنت",
        "upload": "فایلی بُرز کورتین",
        "undelete-show-file-submit": "هان",
        "namespace": "نامی فضا:",
        "invert": "انتخاب سرچپی بیئت",
+       "tooltip-invert": "ای جئبه ئا ئلامت بجنیت تا که پزای نام تا ئین انتخاب بوته ئین تاکدیمانی تغیرات (و دیگرین ئلامت جته بوته ئین پزای نام ئان) چیهر به ینت",
        "namespace_association": "Associated namespace",
+       "tooltip-namespace_association": "ای جئبه ئا ئلامت بجنیت تا که مربوتین موزو ئی پزای نامی گپ گۆ\nانتخاب بوته ئین پزای ناما شامل بیت",
        "blanknamespace": "(بُنیادی)",
        "contributions": "{{GENDER:$1|کار زوروک}} ئی شراکت ئان",
        "contributions-title": "$1 ئی کار زوروکئ شراکت ئان",
        "tooltip-recreate": "پداجۆڑ کورتین تاکدیمی نه دیستین ایشیرا که ای تاکدیم دیما پاک بوته",
        "tooltip-upload": "بُرز کورتینی شرو",
        "tooltip-rollback": "«بیئرگردینتین» ای دیمی آخیرئین ایڈیٹ کنۆک ئی ایڈیٹ(هان) گۆ یک کلیک ئا.",
+       "tooltip-undo": "«خنثی‌کورتین» این دستکاری ئا  خنثی ئه کنیت و دستکاری جئبه ئا بي پیش نمایش ئی رقما پاچ ئه کنیت تا که دلیل ئی ایزاپه کورتین بئ دستکاری خولاسه ئی تا مومکن بیت.",
        "tooltip-preferences-save": "تنظیماتانی ذخیره کورتین",
        "tooltip-summary": "خلاصه ئا داخل بکنیت",
        "anonymous": "زیان نامین {{PLURAL:$1|کار زوروک|کار زوروکان}} شه {{SITENAME}}",
        "sunday-at": "یک‌شنبی $1",
        "yesterday-at": "زئ  بی $1",
        "metadata": "فرادیتا",
+       "metadata-help": "ای ورّک شه وت ایزاپه ئین مالومات داریت که احتمالان گۆ دیجیتالین کامره ئی گیپته بوته یا په ایشی سکن وجۆڑ کورتین ئا شه دیجیتال ئا کار گیپته بوته. اگه ورّک شه وتی اولی ئین حالا تغیرداته داته بوته بیت، مومکن اینت که بي ایشی باره ئا موچین مالومات ئانه نشان مه دنت.",
        "metadata-expand": "تپسیلی ئین مالوماتی نشان داتین",
        "metadata-collapse": "تپسیلی ئین مالوماتی چیهرداتین",
        "metadata-fields": "ای پیامی تا اکس ئی میتادیتا نشان داته بوته و وختی که میتادیتا ئی لیست جم بیئت هم نشان داته ئه بیئت . دیگه موارید تانا وختی نشان داته ئه بیئنت که جدول پاچ بیئت.\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",
index 3e003ed..f1d18b8 100644 (file)
        "tog-enotifminoredits": "पन्ना आ फाईल पर छोटो परिवर्तन होखे त हमके ई मेल करल जाव",
        "tog-enotifrevealaddr": "अधिसूचना ई-मेल में हमार ई मेल पता दिखावल जाव",
        "tog-shownumberswatching": "ध्यान रखे वालन सदस्यन के देखावल जाव",
-       "tog-oldsig": "वरà¥\8dतमान à¤¹à¤¸à¥\8dताà¤\95à¥\8dषर:",
-       "tog-fancysig": "हसà¥\8dताà¤\95à¥\8dषर के विकी पाठ के रुप में उपयोग करीं (बिना स्वचालित कड़ी के)",
+       "tog-oldsig": "वरà¥\8dतमान à¤¦à¤¸à¤\96त",
+       "tog-fancysig": "दसà¤\96त के विकी पाठ के रुप में उपयोग करीं (बिना स्वचालित कड़ी के)",
        "tog-uselivepreview": "लाइव पुर्वालोकन के प्रयोग करीं",
-       "tog-forceeditsummary": "यदि à¤¸à¤®à¥\8dपादन सारांश ना दिहल होखे त हमके सूचित करब",
-       "tog-watchlisthideown": "हमार à¤§à¥\8dयान à¤¦à¤¿à¤¹à¤² à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¹à¤®à¤°à¤¾ à¤\96ातिर à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन छिपाईं",
-       "tog-watchlisthidebots": "हमार à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¬à¥\8bà¤\9f à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\88ल परिवर्तन के छिपाईं",
+       "tog-forceeditsummary": "यदि à¤¸à¤\82पादन सारांश ना दिहल होखे त हमके सूचित करब",
+       "tog-watchlisthideown": "हमरà¥\80 à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¹à¤®à¤¾à¤° à¤\96à¥\81द à¤\95à¥\87 à¤¸à¤\82पादन छिपाईं",
+       "tog-watchlisthidebots": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¬à¥\8bà¤\9f à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल परिवर्तन के छिपाईं",
        "tog-watchlisthideminor": "हमार ध्यान सूची से छोट परिवर्तन के छुपाईं",
-       "tog-watchlisthideliu": "हमार à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97-à¤\87न à¤­à¤\87ल à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤¸à¤®à¥\8dपादन à¤¨à¤¾ à¤¦à¤¿खाईं",
-       "tog-watchlisthideanons": "आइ॰पी सदस्यन द्वारा करल गइल सम्पादन के हमार ध्यानसूची में न दिखाईं",
-       "tog-watchlisthidepatrolled": "à¤\9cाà¤\81à¤\9aल à¤\97à¤\88ल सम्पादन के हमार ध्यानसूची में न दिखाईं",
-       "tog-ccmeonemails": "हमरा à¤¦à¥\8dवारा à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\97à¤\88ल à¤\88-मेल के कॉपी हमरो के भेजीं",
-       "tog-diffonly": "अवतरणं में अन्तर दर्शाते समय पुरान अवतरण न दिखाईं",
-       "tog-showhiddencats": "à¤\9bà¥\81पल à¤¶à¥\8dरà¥\87णà¥\80यन à¤\95à¥\87 दिखाईं",
-       "tog-norollbackdiff": "समà¥\8dपादन वापस लेला के बाद अन्तर न दिखाईं",
-       "tog-useeditwarning": "यदि à¤\95à¤\89नà¥\8b à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤®à¥\8dपादन à¤\95रतà¥\87 à¤¸à¤®à¤¯ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¬à¤¿à¤¨à¤¾ à¤¸à¥\81रà¤\95à¥\8dषित à¤\95à¤\87लà¥\87 à¤\9bà¥\8bड़ à¤¦à¤¿à¤\82 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\96बर à¤\95रब।",
-       "tog-prefershttps": "à¤\9cब à¤\96ाता à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श à¤\95रà¥\80à¤\82 à¤¤ à¤¹à¤®à¥\87शा à¤¸à¥\81रà¤\95à¥\8dषित à¤\95नà¥\87à¤\95à¥\8dशन à¤\95à¥\87 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रà¥\80à¤\82",
+       "tog-watchlisthideliu": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97-à¤\87न à¤­à¤\87ल à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤¸à¤\82पादन à¤®à¤¤ à¤¦à¥\87खाईं",
+       "tog-watchlisthideanons": "आइ॰पी॰ सदस्यन द्वारा करल गइल सम्पादन के हमार धियानसूची में न दिखाईं",
+       "tog-watchlisthidepatrolled": "à¤\9cाà¤\81à¤\9aल à¤\97à¤\87ल सम्पादन के हमार ध्यानसूची में न दिखाईं",
+       "tog-ccmeonemails": "हमरा à¤¦à¥\8dवारा à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\97à¤\87ल à¤\88मेल के कॉपी हमरो के भेजीं",
+       "tog-diffonly": "अवतरण कुल में अन्तर देखावत समय पुरान अवतरण न दिखाईं",
+       "tog-showhiddencats": "à¤\9bà¥\81पल à¤¶à¥\8dरà¥\87णियन à¤\95à¥\87 à¤­à¥\80 दिखाईं",
+       "tog-norollbackdiff": "सà¤\82पादन वापस लेला के बाद अन्तर न दिखाईं",
+       "tog-useeditwarning": "यदि à¤\95à¤\89नà¥\8b à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤\82पादन à¤\95रत à¤\98रà¥\80 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¬à¤¿à¤¨à¤¾ à¤¸à¥\81रà¤\95à¥\8dषित à¤\95à¤\87लà¥\87 à¤\9bà¥\8bड़ à¤¦à¤¿à¤\82 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\96बर à¤\95à¤\87ल à¤\9cाय",
+       "tog-prefershttps": "à¤\9cब à¤\96ाता à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श à¤\95रà¥\80à¤\82 à¤¤ à¤¹à¤®à¥\87शा à¤¸à¥\81रà¤\95à¥\8dषित à¤\95नà¥\87à¤\95à¥\8dशन à¤\95à¥\87 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95à¤\87ल à¤\9cाय",
        "underline-always": "हमेशा",
        "underline-never": "कभी ना",
-       "underline-default": "तà¥\8dवà¤\9aा या ब्राउजर डिफॉल्ट",
-       "editfont-style": "समà¥\8dपादन à¤\95à¥\8dषà¥\87तà¥\8dर à¤\95à¥\87 à¤«à¥\89नà¥\8dà¤\9f à¤¸à¥\8dà¤\9fाà¤\88ल:",
-       "editfont-default": "बà¥\8dराà¤\89à¤\9c़र à¤¡à¤¿à¤«à¤¼à¥\89ल्ट",
+       "underline-default": "à¤\9cिलà¥\8dद या ब्राउजर डिफॉल्ट",
+       "editfont-style": "समà¥\8dपादन à¤\95à¥\8dषà¥\87तà¥\8dर à¤\95à¥\87 à¤«à¥\89नà¥\8dà¤\9f à¤¸à¥\8dà¤\9fाà¤\87ल:",
+       "editfont-default": "बà¥\8dराà¤\89à¤\9cर à¤¡à¤¿à¤«à¤¾ल्ट",
        "editfont-monospace": "मोनोस्पेस्ड फोंट",
        "editfont-sansserif": "सन्स-सेरिफ फॉन्ट",
        "editfont-serif": "सेरिफ फॉन्ट",
        "january": "जनवरी",
        "february": "फरवरी",
        "march": "मार्च",
-       "april": "à¤\85पà¥\8dरिल",
+       "april": "à¤\85पà¥\8dरà¥\88ल",
        "may_long": "मई",
        "june": "जून",
        "july": "जुलाई",
        "august": "अगस्त",
-       "september": "सितमà¥\8dबर",
+       "september": "सितà¤\82बर",
        "october": "अक्टूबर",
-       "november": "नवमà¥\8dबर",
-       "december": "दिसमà¥\8dबर",
+       "november": "नवà¤\82बर",
+       "december": "दिसà¤\82बर",
        "january-gen": "जनवरी",
        "february-gen": "फरवरी",
        "march-gen": "मार्च",
-       "april-gen": "à¤\85पà¥\8dरिल",
+       "april-gen": "à¤\85पà¥\8dरà¥\88ल",
        "may-gen": "मई",
        "june-gen": "जून",
        "july-gen": "जुलाई",
        "august-gen": "अगस्त",
-       "september-gen": "सितमà¥\8dबर",
+       "september-gen": "सितà¤\82बर",
        "october-gen": "अक्टूबर",
-       "november-gen": "नवमà¥\8dबर",
-       "december-gen": "दिसमà¥\8dबर",
+       "november-gen": "नवà¤\82बर",
+       "december-gen": "दिसà¤\82बर",
        "jan": "जन",
        "feb": "फर",
        "mar": "मार्च",
-       "apr": "à¤\85पà¥\8dरिल",
+       "apr": "à¤\85पà¥\8dरà¥\88",
        "may": "मई",
        "jun": "जून",
        "jul": "जुल",
        "nov": "नव",
        "dec": "दिस",
        "january-date": "जनवरी $1",
-       "february-date": "फ़रवरà¥\80 $1",
+       "february-date": "फरवरी $1",
        "march-date": "मार्च $1",
        "april-date": "अप्रैल $1",
        "may-date": "मई $1",
        "june-date": "जून $1",
        "july-date": "जुलाई $1",
        "august-date": "अगस्त $1",
-       "september-date": "सितमà¥\8dबर $1",
+       "september-date": "सितà¤\82बर $1",
        "october-date": "अक्टूबर $1",
-       "november-date": "नवमà¥\8dबर $1",
-       "december-date": "दिसमà¥\8dबर $1",
+       "november-date": "नवà¤\82बर $1",
+       "december-date": "दिसà¤\82बर $1",
        "pagecategories": "{{PLURAL:$1|श्रेणी|श्रेणी}}",
        "category_header": "\"$1\" श्रेणी में पन्ना",
        "subcategories": "उपश्रेणी",
        "category-media-header": "\"$1\" श्रेणी में मीडिया",
        "category-empty": "''इ श्रेणी में इ समय कउनो पन्ना या मीडिया नइखे।''",
        "hidden-categories": "{{PLURAL:$1|छुपावल गईल श्रेणी|छुपावल गईल श्रेणीं}}",
-       "hidden-category-category": "छुपावल गइल श्रेणी",
-       "category-subcat-count": "{{PLURAL:$2|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤®à¤¾à¤¤à¥\8dर à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित à¤\89पशà¥\8dरà¥\87णà¥\80 à¤¬à¤¾|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णियाà¤\82}} à¤¬à¤¾à¤¡à¤¼à¥\87, à¤\95à¥\81ल à¤\89पशà¥\8dरà¥\87णियाà¤\81$2}}",
-       "category-subcat-count-limited": "à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80 à¤¬à¤¾|$1 à¤\89पशà¥\8dरà¥\87णà¥\80à¤\82 à¤¬à¤¾à¤¡à¤¼à¥\87}}।",
-       "category-article-count": "{{PLURAL:$2|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤®à¤¾à¤¤à¥\8dर à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित à¤ªà¤¨à¥\8dन à¤¬à¤¾à¥¤|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|पनà¥\8dना à¤¬à¤¾|$1 à¤ªà¤¨à¥\8dना à¤¬à¤¾à¤¡à¤¼à¥\87}, कुल पन्ना $2}}",
+       "hidden-category-category": "छुपावल गइल श्रेणी",
+       "category-subcat-count": "{{PLURAL:$2|à¤\8f à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤\96ालà¥\80 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित à¤\89पशà¥\8dरà¥\87णà¥\80 à¤¬à¤¾à¥¤|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤\95à¥\81ल $2 à¤\89पशà¥\8dरà¥\87णिन à¤®à¥\87à¤\82 à¤¸à¥\87 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80}} à¤¬à¤¾à¤¡à¤¼à¥\80à¤\82 à¤\95à¥\81ल।}}",
+       "category-subcat-count-limited": "à¤\8f à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80 à¤¬à¤¾|$1 à¤\89पशà¥\8dरà¥\87णà¥\80 à¤¬à¤¾à¤¡à¤¼à¥\80à¤\82।}}",
+       "category-article-count": "{{PLURAL:$2|à¤\8f à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤®à¤¾à¤¤à¥\8dर à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित à¤ªà¤¨à¥\8dन à¤¬à¤¾à¥¤|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|पनà¥\8dना à¤¬à¤¾|$1 à¤ªà¤¨à¥\8dना à¤¬à¤¾à¤¡à¤¼à¥\87}}, कुल पन्ना $2}}",
        "category-article-count-limited": "निम्नलिखित {{PLURAL:$1|पन्ना|$1 पन्ना}} इ श्रेणीं में बा।",
        "category-file-count": "{{PLURAL:$2|इ श्रेणी में मात्र निम्नलिखित फ़ाइल बा।|इ श्रेणी में निम्नलिखित {{PLURAL:$1|फ़ाइल|$1 फ़ाइलं}} बाड़े, कुल फ़ाइलं $2}}",
        "category-file-count-limited": "वर्तमान में निम्नलिखित {{PLURAL:$1|पन्ना|$1 पन्नां}} इ श्रेणीं में बाड़े।",
-       "listingcontinuesabbrev": "निरà¤\82.",
+       "listingcontinuesabbrev": "à¤\9cारà¥\80",
        "index-category": "सूचीबद्ध पृष्ठ",
        "noindex-category": "असूचीबद्ध पृष्ठ",
        "broken-file-category": "टूटल फ़ाइल कड़ियन वाला पन्ना",
        "and": "&#32;अउर",
        "qbfind": "खोज",
        "qbbrowse": "ब्राउज",
-       "qbedit": "समà¥\8dपादन",
+       "qbedit": "सà¤\82पादन",
        "qbpageoptions": "ई पन्ना",
        "qbmyoptions": "हमार पन्ना",
        "faq": "साधारण सवाल",
        "print": "छापीं",
        "view": "देखीं",
        "view-foreign": "$1 पर देखीं",
-       "edit": "समà¥\8dपादन",
-       "edit-local": "à¤\95à¥\8dषà¥\87तà¥\8dरà¥\80य विवरण देखीं",
+       "edit": "सà¤\82पादन",
+       "edit-local": "लà¥\8bà¤\95ल विवरण देखीं",
        "create": "बनाईं",
-       "create-local": "à¤\95à¥\8dषà¥\87तà¥\8dरà¥\80य विवरण जोड़ीं",
-       "editthispage": "à¤\88 पन्ना के सम्पादन करीं",
-       "create-this-page": "à¤\88 पन्ना के निर्माण करीं",
+       "create-local": "लà¥\8bà¤\95ल विवरण जोड़ीं",
+       "editthispage": "à¤\8f पन्ना के सम्पादन करीं",
+       "create-this-page": "à¤\8f पन्ना के निर्माण करीं",
        "delete": "मिटाईं",
        "deletethispage": "ई पन्ना के मिटाईं",
        "undeletethispage": "ई पन्ना के फिर से स्थापित करीं",
        "newpage": "नया पन्ना",
        "talkpage": "इ पन्ना पर चर्चा करीं",
        "talkpagelinktext": "बात-चीत",
-       "specialpage": "à¤\96़ाश पन्ना",
+       "specialpage": "à¤\96ास पन्ना",
        "personaltools": "ब्यक्तिगत औजार",
        "articlepage": "सामग्री पन्ना देखीं",
        "talk": "बात-चीत",
        "toolbox": "उपकरण",
        "userpage": "प्रयोगकर्ता पन्ना देखीं",
        "projectpage": "परियोजना पन्ना देखीं",
-       "imagepage": "फाà¤\88ल à¤ªà¤¨à¥\8dना à¤¦à¥\87à¤\96à¥\80à¤\81",
+       "imagepage": "फाà¤\87ल à¤ªà¤¨à¥\8dना à¤¦à¥\87à¤\96à¥\80à¤\82",
        "mediawikipage": "सन्देश पन्ना देखीं",
        "templatepage": "टेम्पलेट पन्ना देखीं",
        "viewhelppage": "मदद पन्ना देखीं",
        "nstab-media": "मिडीया पन्ना",
        "nstab-special": "विशेष पन्ना",
        "nstab-project": "परियोजना पन्ना",
-       "nstab-image": "फाà¤\88ल",
+       "nstab-image": "फाà¤\87ल",
        "nstab-mediawiki": "सन्देश",
        "nstab-template": "टेम्पलेट",
        "nstab-help": "मदद पन्ना",
        "filereadonlyerror": "फाइल \"$1\" के बदलल सक्षम नइखे काहे कि संग्रह \"$2\" 'खाली पाठन हेतु' (रिड ऑन्ली) मोड में बा।\n\nजउन प्रबंधक इ प्रबंध लगउले बानी उहाँ के निम्न विवरण प्रदान कइले बानी: \"$3\"।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान आ \"$3\" पाठ्य वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आ नाम \"$2\" वाला गलत शीर्षक",
-       "exception-nologin": "à¤\96ाता à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श à¤¨à¤\88à¤\96à¥\80à¤\82 à¤­à¤\88ल",
-       "exception-nologin-text": "à¤\87 à¤ªà¤¨à¥\8dना à¤\85थवा à¤\95ारà¥\8dय à¤\95à¥\87 à¤¸à¤\95à¥\8dषम à¤\95रà¥\87 à¤\96ातिर à¤\95à¥\83पया प्रवेश करीं।",
+       "exception-nologin": "à¤\96ाता à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श à¤¨à¤\87à¤\96à¥\87",
+       "exception-nologin-text": "à¤\88 à¤ªà¤¨à¥\8dना à¤\9aाहà¥\87 à¤\95ारà¥\8dय à¤\95à¥\87 à¤¸à¤\95à¥\8dषम à¤\95रà¥\87 à¤\96ातिर à¤\95à¥\83पया à¤\96ाताप्रवेश करीं।",
        "exception-nologin-text-manual": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया $1 करीं।",
        "virus-badscanner": "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
        "virus-scanfailed": "जाँच विफल (कोड $1)",
        "userlogin-resetpassword-link": "आपन गुप्तशब्द भूला गईनी का?",
        "userlogin-helplink2": "खाता प्रवेश साथ मदद",
        "userlogin-loggedin": "रउआ {{GENDER:$1|$1}} के रूप में पहिले से लॉग्ड इन बानीं।\nकौनो अन्य सदस्य के रूप में लॉग इन करे खातिर निम्नलिखित फ़ॉर्म के प्रयोग करीं।",
-       "userlogin-createanother": "à¤\8fà¤\97à¥\8b à¤¦à¥\8bसर खाता बनाईं",
+       "userlogin-createanother": "à¤\8fà¤\97à¥\8b à¤¦à¥\82सर खाता बनाईं",
        "createacct-emailrequired": "ई-मेल पता",
        "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
        "createacct-email-ph": "आपन ई-मेल पता लिखीं",
        "template-protected": "(संरक्षित)",
        "template-semiprotected": "(अर्ध-सुरक्षित)",
        "nocreate-loggedin": "नया पन्ना बनावे रउआ अधिकार नइखे।",
+       "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नइखे",
+       "sectioneditnotsupported-text": "इ पन्ना पर अनुभाग सम्पादन समर्थित नइखे",
        "permissionserrors": "अनुमति त्रुटी",
+       "permissionserrorstext": "निम्नलिखित {{PLURAL:$1|कारण|कारणन}} के चलते आपके अइसन करे के अनुमति नइखे:",
        "log-fulllog": "पूरा लॉग देखीं",
        "edit-conflict": "संपादन अंतर्विरोध",
        "postedit-confirmation-created": "पन्ना बना दिहल गईल।",
        "postedit-confirmation-saved": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
+       "defaultmessagetext": "संदेश के डिफ़ॉल्ट पाठ्य",
        "invalid-content-data": "अवैध डाटा सामग्री",
        "content-model-wikitext": "विकीपाठ्य",
        "content-model-text": "सामान्य पाठ",
        "content-model-css": "सी॰एस॰एस",
        "post-expand-template-inclusion-category": "अइसन पृष्ठ जे पर साँचा जोडे के सीमा पार हो गइल बा",
        "cantcreateaccounttitle": "खाता खुल नईखे सकत",
+       "nohistory": "ए पन्ना के कौनों संपादन इतिहास नइखे",
+       "currentrev": "सबसे नया बदलाव",
+       "currentrev-asof": "$1 ले भइल नया बदलाव",
        "revisionasof": "$1 के रुप में संशोधन",
        "revision-info": "{{GENDER:$6|$2}}$7 के द्वारा $1 के संशोधन",
        "previousrevision": "← पुरान संशोधन",
        "rev-deleted-event": "(लॉग विवरण हटा दिहल गईल बा)",
        "rev-deleted-user-contribs": "[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]",
        "rev-deleted-text-permission": "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।\nमेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
+       "rev-suppressed-text-permission": "ए पन्ना के बदलाव<strong>दबा दिहल गइल बा</strong>।\nबिस्तृत जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} दबावल चीज के लॉग] पर मिल जाई।",
        "rev-delundel": "दिखाईं/छुपाईं",
        "rev-showdeleted": "देखाईं",
        "revdelete-show-file-submit": "जी",
        "prefs-user-pages": "सदस्य पन्ना",
        "prefs-personal": "सदस्य प्रोफाईल",
        "prefs-rc": "तुरंत भइल परिवर्तन",
+       "prefs-watchlist": "धियानसूची",
+       "prefs-editwatchlist": "धियानसूची संपादन",
+       "prefs-editwatchlist-label": "अपनी धियानसूची के चीज संपादित करीं:",
+       "prefs-editwatchlist-edit": "अपनी धियानसूची के टाइटिल देखीं आ हटाईं",
+       "prefs-editwatchlist-raw": "टटका धियानसूची संपादित करीं",
+       "prefs-editwatchlist-clear": "आपन धियानसूची साफ करीं",
+       "prefs-watchlist-days": "धियानसूची में देखावे खातिर दिन",
+       "prefs-watchlist-days-max": "अधिकतम $1 {{PLURAL:$1|दिन}}",
+       "prefs-watchlist-edits": "बिस्तारित धियानसूची में देखावे खातिर अधिकतम बदलाव संख्या:",
+       "prefs-watchlist-edits-max": "अधिकतम संख्या:1000",
+       "prefs-watchlist-token": "धियानसूची टोकन:",
+       "prefs-misc": "अउरी कुल",
+       "prefs-resetpass": "पासवर्ड बदलीं",
+       "prefs-changeemail": "ईमेल पता बदलीं",
+       "prefs-setemail": "ईमेल पता सेट करीं",
+       "prefs-email": "ईमेल बिकल्प",
+       "prefs-rendering": "रंगरूप",
        "saveprefs": "सुरक्षित करीं",
+       "restoreprefs": "सगरी डिफाल्ट सेटिंग पहिले जइसन करीं (सगरी खंड में)",
        "prefs-editing": "संपादन",
+       "rows": "रो कुल:",
+       "columns": "कालम कुल:",
        "searchresultshead": "खोज",
+       "stub-threshold-disabled": "निरस्त",
+       "recentchangesdays": "हाल में भइल परिवर्तन में देखावे खातिर दिन:",
+       "recentchangesdays-max": "अधिकतम $1{{PLURAL:$1|दिन}}",
+       "recentchangescount": "डिफाल्ट में देखावे खातिर संपादन संख्या:",
+       "prefs-help-recentchangescount": "एम्में हाल में भइल परिवर्तन, पन्ना इतिहास, आ लॉग सब बाटे।",
        "savedprefs": "राउर वरीयताएँ सुरक्षित कर दिहल गईल।",
+       "timezonelegend": "समय जोन:",
+       "localtime": "लोकल समय:",
+       "timezoneuseserverdefault": "विकि डिफाल्ट ($1) प्रयोग करीं",
+       "timezoneuseoffset": "दूसर (विचलन बताईं)",
+       "servertime": "सर्वर समय:",
+       "guesstimezone": "ब्राउजर फार्म भरीं",
        "timezoneregion-africa": "अफ़्रीका",
        "timezoneregion-america": "अमेरिका",
        "timezoneregion-antarctica": "अंटार्कटिका",
        "timezoneregion-europe": "यूरोप",
        "timezoneregion-indian": "हिंद महासागर",
        "timezoneregion-pacific": "प्रशांत महासागर",
+       "allowemail": "दुसरे सदस्य से ईमेल पावल चालू",
        "prefs-searchoptions": "खोजीं",
        "prefs-namespaces": "नामस्थान",
+       "default": "डिफाल्ट",
+       "prefs-files": "फाइल सब",
+       "prefs-custom-css": "व्यक्तिगत CSS",
+       "prefs-custom-js": "व्यक्तिगत जावास्क्रिप्ट",
+       "prefs-common-css-js": "सगरी जिल्द खातिर साझा CSS/जावास्क्रिप्ट:",
+       "prefs-reset-intro": "रउआँ आपन पसंद बदल के डिफाल्ट करे खातिर ए पन्ना के इस्तेमाल नइखीं कर सकत।\n\nई फिर से वापस ना हो पाई।",
+       "prefs-emailconfirm-label": "ईमेल जाँच:",
+       "youremail": "ईमेल:",
+       "prefs-registration": "रजिस्ट्रेशन के समय:",
        "yourrealname": "असली नाम",
        "yourlanguage": "भाषा:",
+       "yourvariant": "सामग्री भाषा के अपरूप:",
+       "prefs-help-variant": "ए विकि कि सामग्री पन्नवन के देखावे खातिर राउर पसंद वाला भाषारूप।",
+       "yournick": "नया दसखत:",
+       "yourgender": "रउआँ के का बोलावल जाय?",
+       "gender-unknown": "हम न बताइब",
+       "email": "ईमेल",
+       "prefs-info": "बेसिक जानकारी",
+       "prefs-i18n": "वैश्वीकरण",
+       "prefs-signature": "दसखत",
+       "prefs-dateformat": "तारीख रूप",
+       "prefs-timeoffset": "समय अंतर",
+       "prefs-advancedediting": "सामान्य बिकल्प",
+       "prefs-editor": "संपादक",
        "prefs-preview": "पूर्वावलोकन",
+       "prefs-advancedrc": "एडवांस बिकल्प",
+       "group": "मंडली (ग्रुप):",
+       "group-user": "सदस्य",
+       "group-autoconfirmed": "खुद परीक्षित सदस्य",
+       "group-bot": "बॉट",
+       "group-sysop": "प्रबंधक",
+       "group-bureaucrat": "ब्यूरोक्रेट",
+       "group-suppress": "ओवरसाइटर",
+       "group-all": "(सब)",
+       "right-read": "पन्ना पढ़ीं",
+       "right-createpage": "पन्ना बनाईं (बातचीत पन्ना की अलावा)",
+       "right-createtalk": "बातचीत पन्ना बनाईं",
+       "right-createaccount": "नया सदस्य खाता बनाईं",
+       "right-minoredit": "छोट संपादन चिह्नित करीं",
+       "right-move": "पन्ना स्थानांतरण करीं",
+       "right-move-subpages": "पन्नवन के उनहन की उपपन्नवन की संघे स्थानांतरित करीं",
+       "right-move-rootuserpages": "मूल (root) सदस्य पन्नवन के स्थानांतरित करीं",
+       "right-move-categorypages": "श्रेणी पन्नवन के स्थानांतरित करीं",
+       "right-movefile": "फाइल सब स्थानांतरित करीं",
+       "right-suppressredirect": "स्थानांतरण करत घरी मूल पन्ना से पुनर्निदेश मत बनाईं",
+       "right-upload": "फाइल लादीं",
+       "right-reupload": "पुरान फाइल की ऊपर नया लादीं",
+       "right-reupload-own": "खुदे लादल फाइल पर नया फाइल लादीं",
+       "right-delete": "पन्ना हटाईं",
+       "right-bigdelete": "लंबा इतिहास वाला पन्ना हटाईं",
+       "right-deletelogentry": "लॉग आइटम के हटाईं या वापस करीं",
+       "right-deleterevision": "पन्ना संशोधन के हटाईं या वापस ले आईं",
+       "right-browsearchive": "हटवाल पन्ना खोजीं",
+       "right-undelete": "हटावल पन्ना वापस ले आईं",
+       "newuserlogpage": "खाता निर्माण के लॉग",
+       "newuserlogpagetext": "ई खाता निर्माण के लॉग बा",
+       "rightslog": "सदस्य अधिकार लॉग",
+       "rightslogtext": "ई सदस्यन के सदस्य-अधिकार के बदलाव के लॉग बा",
+       "action-read": "ई पन्ना पढ़ीं",
+       "action-edit": "ई पन्ना संपादित करीं",
+       "action-createpage": "पन्ना बनाईं",
+       "action-createtalk": "वार्ता पन्ना बनाईं",
+       "action-createaccount": "ई सदस्यखाता बनाईं",
+       "action-history": "ए पन्ना के इतिहास देखीं",
+       "action-minoredit": "ए संपादन के छोट चिह्नित करीं",
        "action-move": "ई पन्ना के स्थांतरण करीं",
+       "action-move-subpages": "ई पन्ना, आ एकर उपपन्ना स्थानांतरित करीं",
+       "action-move-rootuserpages": "मूल सदस्यपन्ना स्थानांतरित करीं",
+       "action-move-categorypages": "श्रेणी पन्ना स्थानांतरित करीं",
+       "action-movefile": "ई फाइल स्थानांतरित करीं",
+       "action-upload": "ई फाइल लादीं",
+       "action-reupload": "पहिले से मौजूद ए फाइल पर दूसर लादीं",
        "action-delete": "ई पन्ना के मिटाईं",
        "recentchanges": "तुरंत भइल परिवर्तन",
        "recentchanges-legend": "हाल के परिवर्तन संबंधी विकल्प",
        "rcshowhideminor": "$1 छोट सम्पादन",
        "rcshowhideminor-show": "दिखाईं",
        "rcshowhideminor-hide": "छुपाँई",
+       "rcshowhidebots": "बॉट $1",
+       "rcshowhidebots-show": "देखाईं",
+       "rcshowhidebots-hide": "छिपाईं",
+       "rcshowhideliu": "रजिस्टर्ड सदस्य $1",
+       "rcshowhideliu-show": "देखाईं",
+       "rcshowhideliu-hide": "छिपाईं",
+       "rcshowhideanons": "बेनाम सदस्य $1",
+       "rcshowhideanons-show": "देखाईं",
+       "rcshowhideanons-hide": "छिपाईं",
+       "rcshowhidepatr": "जाँचल बदलाव $1",
+       "rcshowhidepatr-show": "देखाईं",
+       "rcshowhidepatr-hide": "छिपाईं",
+       "rcshowhidemine": "हमार संपादन $1",
+       "rcshowhidemine-show": "देखाईं",
+       "rcshowhidemine-hide": "छिपाईं",
+       "rclinks": "पिछला $2 दिन में भइल $1 बदलाव देखाईं<br />$3",
        "diff": "अन्तर",
        "hist": "इति",
        "hide": "छुपाँई",
        "newpageletter": "न",
        "boteditletter": "बो",
        "number_of_watching_users_pageview": "[$1 देखल जा रहल बा {{PLURAL:$1|प्रयोगकर्ता|प्रयोगकर्ता}}]",
+       "rc_categories": "श्रेणिन के सीमा (\"|\" से अलगा करीं)",
+       "rc_categories_any": "कौनों",
        "rc-change-size-new": "$1 {{PLURAL:$1|बाइट|बाइट सब}} बदलाव के बाद",
        "recentchangeslinked": "सम्बन्धित बदलाव",
        "recentchangeslinked-feed": "सम्बन्धित बदलाव",
        "recentchangeslinked-toolbox": "सम्बन्धित बदलाव",
        "recentchangeslinked-page": "पन्ना नाम:",
        "upload": "फाईल लादीं",
+       "uploadlogpage": "लदनी (अपलोड) के लॉग",
+       "filename": "फाइलनाँव",
        "filedesc": "सारांश",
        "fileuploadsummary": "सारांश:",
+       "filereuploadsummary": "फाइल बदलाव:",
+       "filestatus": "कापीराइट स्टेटस",
        "filesource": "स्रोत:",
+       "ignorewarning": "चेतावनी के न मान के फाइल सहेज दीं",
+       "ignorewarnings": "चेतावनी छोड़ीं",
+       "minlength1": "फाइलनाँव कमसेकम एक अच्छर के चाही",
        "unknown-error": "अज्ञात त्रुटि उत्पन्न हो गईल बा।",
+       "license": "लाइसेंस जानकारी:",
        "license-header": "लाईसेंसिंग",
+       "nolicense": "कौनों नइखे",
+       "licenses-edit": "लाइसेंस बिकल्प संपादन",
+       "license-nopreview": "(नमूना देखल उपलब्ध नइखे)",
+       "listfiles_thumb": "चिप्पी",
+       "listfiles_date": "तिथि",
+       "listfiles_name": "नाँव",
        "file-anchor-link": "फ़ाइल",
        "filehist": "पन्ना के इतिहास",
        "filehist-deleteall": "सब मिटाईं",
        "filedelete-nofile": "'''$1''' उपलब्ध नईखे।",
        "randompage": "अविशिष्ट पन्ना",
        "nbytes": "$1 {{PLURAL:$1|बाईट|बाईट्स}}",
+       "lonelypages": "अनाथ पन्ना",
+       "lonelypagestext": "ई पन्ना कुल कौनों दूसर पन्ना से नइखें जुड़ल न कौनों में ट्रांसक्लूड बाड़ें",
+       "uncategorizedpages": "बिना श्रेणी के पन्ना",
+       "uncategorizedcategories": "बिना श्रेणी के श्रेणी",
+       "uncategorizedimages": "बिना श्रेणी के फाइल",
+       "uncategorizedtemplates": "बिना श्रेणी के टेम्पलेट",
+       "unusedcategories": "बिना इस्तेमाल श्रेणी",
+       "unusedimages": "बिना इस्तेमाल फाइल",
+       "wantedcategories": "श्रेणी चाहत बा",
+       "wantedpages": "पन्ना चाहत बा",
        "newpages": "नवका पन्ना",
        "move": "स्थान्तरण",
        "movethispage": "ई पन्ना के स्थांतरण करीं",
index 5e079d3..bb5d745 100644 (file)
        "edit-local": "স্থানীয় বিবরণ সম্পাদনা করুন",
        "create": "তৈরি",
        "create-local": "স্থানীয় বিবরণ যোগ করুন",
-       "editthispage": "পাতাটি সম্পাদনা করুন",
+       "editthispage": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à¦®à§\8dপাদনা à¦\95রà§\81ন",
        "create-this-page": "পাতাটি তৈরি করো",
        "delete": "অপসারণ",
        "deletethispage": "এই পাতাটি মুছে ফেলুন",
        "talkpagelinktext": "আলোচনা",
        "specialpage": "বিশেষ পাতা",
        "personaltools": "নিজস্ব সরঞ্জামসমূহ",
-       "articlepage": "বিষয়বস্তু পাতাটি দেখুন",
+       "articlepage": "বিষয়বস্তু পাতাটি দেখুন",
        "talk": "আলোচনা",
        "views": "দৃষ্টিকোণ",
        "toolbox": "সরঞ্জাম",
        "notextmatches": "কোন পাতার লেখার সাথে মিলে নেই",
        "prevn": "পূর্ববর্তী {{PLURAL:$1|$1}}টি",
        "nextn": "পরবর্তী {{PLURAL:$1|$1}}টি",
+       "prev-page": "পূর্ববর্তী পাতা",
+       "next-page": "পরবর্তী পাতা",
        "prevn-title": "পূর্ববর্তী $1 {{PLURAL:$1|ফলাফল|ফলাফলসমূহ}}",
        "nextn-title": "পরবর্তী $1টি {{PLURAL:$1|ফলাফল}}",
        "shown-title": "প্রতি পাতায় $1টি {{PLURAL:$1|ফলাফল}} দেখাও",
        "listfiles-delete": "অপসারণ",
        "listfiles-summary": "এই বিশেষ পাতাটি আপলোড করা সকল ফাইল প্রদর্শন করে।",
        "listfiles_search_for": "ছবির নাম অনুসন্ধান:",
+       "listfiles-userdoesnotexist": "ব্যবহারকারী অ্যাকাউন্ট \"$1\" নিবন্ধিত নয়।",
        "imgfile": "ফাইল",
        "listfiles": "ছবির তালিকা",
        "listfiles_thumb": "সংক্ষেপচিত্র",
index 0d5f6fb..24cffd6 100644 (file)
@@ -47,7 +47,8 @@
                        "Loupeter",
                        "Macofe",
                        "Gerardduenas",
-                       "Medol"
+                       "Medol",
+                       "Xavier Dengra"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
        "wrongpassword": "La contrasenya que heu introduït és incorrecta. Torneu-ho a provar.",
        "wrongpasswordempty": "La contrasenya que s'ha introduït estava en blanc. Torneu-ho a provar.",
        "passwordtooshort": "La contrasenya ha de tenir un mínim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
+       "passwordtoolong": "La contrasenya ha de tenir un màxim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
        "password-name-match": "La contrasenya ha de ser diferent al vostre nom d'usuari.",
        "password-login-forbidden": "No és permès d'utilitzar aquest nom d'usuari i contrasenya.",
        "mailmypassword": "Restableix la contrasenya",
        "emailccsubject": "Còpia del vostre missatge a $1: $2",
        "emailsent": "Correu electrònic enviat",
        "emailsenttext": "S'ha enviat el vostre correu electrònic.",
-       "emailuserfooter": "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «e-mail» del projecte {{SITENAME}}.",
+       "emailuserfooter": "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «{{int:emailpage}}» de {{SITENAME}}.",
        "usermessage-summary": "Deixant missatges de sistema.",
        "usermessage-editor": "Missatger del sistema",
        "watchlist": "Llista de seguiment",
        "tags-create-invalid-chars": "Els noms d'etiqueta no han de contenir comes (<code>,</code>) o barres (<code>/</code>).",
        "tags-create-invalid-title-chars": "Els noms d'etiqueta no poden contenir caracters que no es poden usar en els títols de pàgina",
        "tags-create-already-exists": "L'etiqueta \"$1\" ja existeix.",
+       "tags-create-warnings-above": "{{PLURAL:$2|S'ha registrat la següent advertència|S'han registrat les següents advertències}} durant la creació de l'etiqueta \"$1\":",
        "tags-create-warnings-below": "Voleu continuar creant l'etiqueta?",
        "tags-delete-title": "Elimina l'etiqueta",
        "tags-delete-explanation-initial": "Esteu a punt d'eliminar l'etiqueta «$1» de la base de dades.",
+       "tags-delete-explanation-in-use": "Se suprimirà de {{PLURAL:$2|$2 revisió o entrada de registre|totes les $2 revisions i/o entrades de registre}} on s'aplica actualment.",
+       "tags-delete-explanation-warning": "Aquesta acció és <strong>irreversible</strong> i <strong>no es pot desfer</strong>, ni tan sols els administradors de la base de dades poden desfer-la. Assegureu-vos que aquesta és l'etiqueta que voleu suprimir.",
+       "tags-delete-explanation-active": "<strong>L'etiqueta \"$1\" encara està activa, i continuarà aplicant-se en el futur.</strong> Per evitar que això passi, dirigiu-vos al lloc (o llocs) d'activació de l'etiqueta i deshabiliteu-la allà.",
        "tags-delete-reason": "Motiu:",
        "tags-delete-submit": "Suprimeix irreversiblement aquesta etiqueta",
+       "tags-delete-not-allowed": "Les etiquetes definides per una extensió no es poden esborrar tret que l'extensió ho permeti específicament.",
        "tags-delete-not-found": "L'etiqueta «$1» no existeix.",
        "tags-delete-too-many-uses": "L'etiqueta «$1» s'aplica a més {{PLURAL:$2|d'$2 revisió|de $2 revisions}} i, per tant, no pot eliminar-se.",
+       "tags-delete-warnings-after-delete": "L'etiqueta \"$1\" ha estat esborrada satisfactòriament, però {{PLURAL:$2|s'ha registrat l'advertència següent|s'han registrat les advertències següents}}:",
        "tags-activate-title": "Activa l'etiqueta",
        "tags-activate-question": "Esteu a punt d'activar l'etiqueta «$1».",
        "tags-activate-reason": "Motiu:",
        "revdelete-uname-unhid": "ha revelat un nom d'usuari que era ocult",
        "revdelete-restricted": "ha aplicat restriccions als administradors",
        "revdelete-unrestricted": "ha tret les restriccions als administradors",
+       "logentry-block-block": "$1 {{GENDER:$2|ha estat blocat|ha estat blocada}} {{GENDER:$4|$3}} per un període de temps de $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|va desblocar}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|ha canviat}} la configuració del blocatge de {{GENDER:$4|$3}} per un període de temps de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|ha blocat}} {{GENDER:$4|$3}} per un període de temps de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|ha canviat}} la configuració de blocatge de {{GENDER:$4|$3}} per un període de temps de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|va importar}} $3 a través de càrrega de fitxer",
        "logentry-import-interwiki": "$1 {{GENDER:$2|va importar}} $3 d'un altre wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|ha fusionat}} $3 en $4 (revisions fins a $5)",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ha carregat}} una nova versió de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha carregat}} $3",
        "log-name-managetags": "Registre de gestió d'etiquetes",
+       "log-description-managetags": "Aquesta pàgina té llistades les tasques de gestió referents a les [[Special:Tags|etiquetes]]. El registre conté només les accions dutes a terme manuament per un administrador; algunes etiquetes poden ser creades o eliminades pel programari wiki sense deixar inventariada una entrada en aquest registre.",
        "logentry-managetags-create": "$1 {{GENDER:$2|va crear}} l'etiqueta «$4»",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|ha activat}} l'etiqueta \"$4\" per a ser utilitzada en usuaris i bots",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|ha desactivat}} l'etiqueta \"$4\" per a ser utilitzada en usuaris i bots",
        "rightsnone": "(cap)",
        "revdelete-summary": "el resum d'edició",
        "feedback-adding": "S'està afegint el comentari a la pàgina...",
        "feedback-message": "Missatge:",
        "feedback-subject": "Assumpte:",
        "feedback-submit": "Envia",
+       "feedback-terms": "Entenc que la informació del meu agent d'usuari inclou les versions exactes del meu navegador i del meu sistema operatiu i que seran publicades amb els meus comentaris.",
+       "feedback-termsofuse": "Accepto proporcionar informació d'acord amb les Condicions d'ús.",
        "feedback-thanks": "Gràcies! S'ha publicat la vostra opinió a la pàgina «[$2 $1]».",
        "feedback-thanks-title": "Gràcies!",
        "feedback-useragent": "Agent d'usuari:",
        "log-description-pagelang": "Aquest és un registre dels canvis en les llengües de les pàgines.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha canviat}} la llengua de la pàgina per a $3 de $4 a $5.",
        "default-skin-not-found": "Òndia! L'aparença per defecte per al wiki, definit en <code dir=\"ltr\">$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nLa vostra instal·lació sembla que inclou les següents aparences. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuració d'aparences] per a la informació de com habilitar-les i triar-ne el valor per defecte.\n\n$2\n\n; Si heu acabat d'instal·lar MediaWiki:\n: Probablement l'instal·làveu des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Intenteu instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki.\n\n; Si només heu actualitzat MediaWiki:\n: Per MediaWiki 1.24 i posteriors ja no permet aparences instal·lades automàticament (consulteu [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Aparences autodiscovery]). Podeu enganxar les línies següents en <code>LocalSettings.php</code> per permetre totes les aparences instal·lades actualment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si només heu modificat <code>LocalSettings.php</code>:\n: Reviseu els noms de l'aparença per errors tipogràfics.",
-       "default-skin-not-found-no-skins": "Òndia! L'aparença per defecte per al wiki, definit en <code>$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nNo teniu cap aparença instal·lada.\n\n\n; Si heu acabat d'instal·lar o actualitzar MediaWiki:\n: Probablement l'heu instal·lat des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Per MediaWiki 1.24 i posteriors ja no s'inclouen aparences en el repositori principal. Proveu d'instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: configuració de l'aparença] per informació de com permetre aparences i triar-ne per defecte.",
+       "default-skin-not-found-no-skins": "Òndia! L'aparença per defecte pel vostre wiki, definida a <code>$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nNo teniu cap aparença instal·lada.\n\n\n; Si heu acabat d'instal·lar o actualitzar MediaWiki:\n: Probablement l'heu instal·lat des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Per MediaWiki 1.24 i posteriors ja no s'inclouen aparences en el repositori principal. Proveu d'instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org] per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador ''tarball''], que ve amb diverses aparences i extensions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre repositori de git si sou un desenvolupador de MediaWiki. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] per a més informació sobre com permetre aparences i triar-ne per defecte.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (habilitat)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inhabilitat''')",
        "mediastatistics": "Estadístiques dels multimèdia",
index db1256a..1676227 100644 (file)
@@ -52,7 +52,7 @@
        "tog-prefershttps": "Даима лела йе лардина системин чудалар",
        "underline-always": "Даимна",
        "underline-never": "Цкъа а",
-       "underline-default": "Ð\9bелайа Ð±Ñ\80аÑ\83зеÑ\80ан Ð½Ð¸Ñ\81йарца",
+       "underline-default": "Ð\9bелае Ð±Ñ\80аÑ\83зеÑ\80ан Ð½Ð¸Ñ\81Ñ\8fрца",
        "editfont-style": "Тадар чохь долу шрифт:",
        "editfont-default": "Браузеран гӀирса чура шрифт",
        "editfont-monospace": "Цхьатерра доцу шрифт",
        "storedversion": "Ӏалашйина верси",
        "editingold": "'''ДӀахьедар. Ахьа таеш ю хӀокху агӀона шира елла верси.'''\nАгӀо Ӏалаш йинчул тӀехьа хьалхо бина хийцамаш дӀабяра бу.",
        "yourdiff": "Башхаллаш",
-       "copyrightwarning": "ТеÑ\80гаме Ñ\85Ñ\8cажа, Ð¼Ð°Ñ\81Ñ\81о Ñ\8fззаман Ñ\87Ñ\83Ñ\82Ñ\83Ñ\85Ñ\83Ñ\88 Ð´Ð¾Ð»Ñ\83 Ð¹Ð¾Ð·Ð°Ð½ Ñ\85ийÑ\86ам Ñ\85Ñ\8cажаÑ\80еÑ\85Ñ\8c Ð±Ñ\83, Ð°Ñ\80аÑ\85оÑ\8cÑ\86Ñ\83Ñ\88Ñ\81анна Ð¾Ñ\86Ñ\83 Ð±Ð°ÐºÑ\8aойалаÑ\80 Ñ\85Ñ\8cолÑ\8fÑ\85Ñ\8c $2 (Ñ\85Ñ\8cаж. $1).\nÐ\9dагаÑ\85Ñ\8c Ñ\85Ñ\8cо Ð»Ñ\83Ñ\83Ñ\88 Ð²Ð°Ñ\86аÑ\85Ñ\8c Ñ\85Ñ\8cай Ð¹Ð¾Ð·Ð°Ð½Ð°Ñ\88 Ð¼Ð°Ñ\8cÑ\80Ñ\88а Ð´Ð°Ñ\80жа Ð° ÐºÑ\85еÑ\87аÑ\8cÑ\80га Ñ\85ийÑ\86ам Ð±Ð°Ð¹Ñ\82а, Ð¼Ð°Ð´Ð°Ñ\85а Ñ\83Ñ\8cÑ\88 ÐºÑ\85Ñ\83 Ñ\87Ñ\83.<br />\nÐ\98Ñ\88Ñ\82а Ñ\87lагlо Ð¹Ð¾Ð¹ Ð°Ñ\85Ñ\8cа, Ð°Ð¹Ñ\85Ñ\8cа Ð´Ð°Ð»Ð¾Ñ\88 Ð´Ð¾Ð»Ñ\83Ñ\87Ñ\83Ñ\8cн Ñ\85Ñ\8cо ÐºÑ\83Ñ\8cг Ð´Ð° Ð²Ñ\83 Ð°Ñ\8cлла, Ð¹Ð° Ñ\85Ñ\8cаÑ\8dÑ\86на Ñ\86Ñ\85Ñ\8cан\nÑ\85Ñ\8cоÑ\81Ñ\82еÑ\80а, Ñ\85ийÑ\86ам Ð±Ð° Ð° Ð´lаÑ\81а Ð´Ð°Ñ\80жада Ð° Ñ\87Ñ\83лаÑ\86ам Ð±Ð¾Ð»Ñ\83Ñ\88.<br />\n'''Ð\9cÐ\90ТÐ\9eÐ¥Ð\98Ð\99Ш Ð\91Ð\90Ð\9aЪÐ\9e Ð\99Ð\9eЦУ Ð\93lИРСАШ КХУ ЧУ, КУЬГ ДЕ БАКЪО ЛАР ЙЕШ ЙОЛУ!'''",
+       "copyrightwarning": "ТеÑ\80гаме Ñ\85Ñ\8cажа, Ð¼Ð°Ñ\81Ñ\81о Ñ\8fззаман Ñ\87Ñ\83Ñ\82Ñ\83Ñ\85Ñ\83Ñ\88 Ð´Ð¾Ð»Ñ\83 Ð¹Ð¾Ð·Ð°Ð½ Ñ\85ийÑ\86ам Ñ\85Ñ\8cажаÑ\80еÑ\85Ñ\8c Ð±Ñ\83, Ð°Ñ\80аÑ\85оÑ\8cÑ\86Ñ\83Ñ\88Ñ\81анна Ð¾Ñ\86Ñ\83 Ð»Ð¸Ñ\86ензи Ñ\85Ñ\8cолÑ\8fÑ\85Ñ\8c $2 (Ñ\85Ñ\8cаж. $1).\nÐ\9dагаÑ\85Ñ\8c Ñ\85Ñ\8cо Ð»Ñ\83Ñ\83Ñ\88 Ð²Ð°Ñ\86аÑ\85Ñ\8c Ñ\85Ñ\8cай Ð¹Ð¾Ð·Ð°Ð½Ð°Ñ\88 Ð¼Ð°Ñ\8cÑ\80Ñ\88а Ð´Ð°Ñ\80жа Ð° ÐºÑ\85еÑ\87аÑ\8cÑ\80га Ñ\85ийÑ\86ам Ð±Ð°Ð¹Ñ\82а, Ð¼Ð°Ð´Ð°Ñ\85а Ñ\83Ñ\8cÑ\88 ÐºÑ\85Ñ\83 Ñ\87Ñ\83.<br />\nÐ\98Ñ\88Ñ\82а Ñ\87Ó\80агÓ\80о Ð¹Ð¾Ð¹ Ð°Ñ\85Ñ\8cа, Ð°Ð¹Ñ\85Ñ\8cа Ð´Ð°Ð»Ð¾Ñ\88 Ð´Ð¾Ð»Ñ\83Ñ\87Ñ\83Ñ\8cн Ñ\85Ñ\8cо ÐºÑ\83Ñ\8cг Ð´Ð° Ð²Ñ\83 Ð°Ñ\8cлла, Ñ\8f Ñ\85Ñ\8cаÑ\8dÑ\86на Ñ\86Ñ\85Ñ\8cан\nÑ\85Ñ\8cоÑ\81Ñ\82еÑ\80а, Ñ\85ийÑ\86ам Ð±Ð° Ð° Ð´Ó\80аÑ\81а Ð´Ð°Ñ\80жада Ð° Ñ\87Ñ\83лаÑ\86ам Ð±Ð¾Ð»Ñ\83Ñ\88.<br />\n'''Ð\9cÐ\90ТÐ\9eÐ¥Ð\98Ð\99Ш Ð\91Ð\90Ð\9aЪÐ\9e Ð\99Ð\9eЦУ Ð\93Ó\80ИРСАШ КХУ ЧУ, КУЬГ ДЕ БАКЪО ЛАР ЙЕШ ЙОЛУ!'''",
        "readonlywarning": "'''ДӀАХЬЕДО. ГӀирса бух блоктоьхна оьшуш долучу хьаштан, цундера хӀинц хьоьга дӀа ца йазло хийцам.\nХила мега, ахьа Ӏалаш дан дезаш хьайн йоза, юха тӀаьхьо леладан иза йоза.'''\n\nКуьйгалхочо блоктоьхна гӀирса бух, цо битина кхетош хӀара хаам: $1",
        "protectedpagewarning": "'''ДӀахьедар. ХӀара агӀо гӀаролла дина ю хийцам цабайта, иза хийца йа нисйа а бакъо йолуш куьйгалла лелош болу декъашхой бе бац.'''\nЛахахьа гойту хаамаш тӀаьхьара бина болу хийцамна тептар чура:",
        "semiprotectedpagewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "http-curl-error": "URLан гӀалат: $1",
        "upload-curl-error6": "Билгал дина адресе хьажа цало.",
        "upload-curl-error28": "Чуйоккху хан чеккхелла",
-       "license": "Ð\91акÑ\8aойалаÑ\80:",
-       "license-header": "Ð\91акÑ\8aойалаÑ\80",
+       "license": "Ð\9bиÑ\86ензи:",
+       "license-header": "Ð\9bиÑ\86ензи",
        "nolicense": "Яц",
        "licenses-edit": "Лицензин параметраш хийца",
        "license-nopreview": "(Хьалха хьажа цало)",
        "ancientpages": "ТӀаьххьарлерачу хенаца нисбина яззамаш",
        "move": "ЦӀе хийца",
        "movethispage": "ХӀокху агӀон цӀе хийца",
-       "unusedimagestext": "Ð\94еÑ\85аÑ\80 Ð´Ð¾, Ñ\82идаме Ñ\8dÑ\86а, ÐºÑ\85ин Ð¹Ð¾Ð»Ñ\83 Ð´Ñ\83Ñ\8cнана Ð¼Ð°Ñ\88ан-меÑ\82Ñ\82игаÑ\88 Ð° Ð»ÐµÐ»Ð¾Ñ\88 Ñ\85ила Ð¼ÐµÐ³Ð° Ð½Ð¸Ð¹Ñ\81Ñ\81а Ð¹Ð¾Ð³Ó\80Ñ\83 Ñ\85Ñ\8cажоÑ\80г (URL) Ñ\85Ó\80окÑ\85Ñ\83 Ñ\85Ó\80Ñ\83ман, Ñ\85Ó\80окÑ\85Ñ\83 Ð¼Ð¾Ð³Ó\80аме Ð¹Ð¾Ð³Ó\80Ñ\83Ñ\88 Ñ\8fлаÑ\85Ñ\8c Ñ\8fÑ\86ахь а иза хила мега жигара лелош.",
+       "unusedimagestext": "Ð\9bаÑ\85аÑ\80а Ñ\84айлаÑ\88 Ñ\86Ñ\85Ñ\8cана Ð°Ð³Ó\80онгаÑ\85Ñ\8c Ð»ÐµÐ»Ð¾Ñ\88 Ñ\8fÑ\86.\nÐ\94еÑ\85аÑ\80 Ð´Ð¾, Ñ\82идаме Ð±Ðµ, ÐºÑ\85ин Ð¹Ð¾Ð»Ñ\83 Ð²ÐµÐ±-Ñ\81айÑ\82аÑ\88 Ð° Ð»ÐµÐ»Ð¾Ñ\88 Ñ\85ила Ð¼ÐµÐ³Ð° Ð½Ð¸Ð¹Ñ\81Ñ\81а Ð¹Ð¾Ð³Ó\80Ñ\83 Ñ\85Ñ\8cажоÑ\80г (URL), Ñ\85Ó\80окÑ\85Ñ\83 Ð¼Ð¾Ð³Ó\80аме Ð¹Ð¾Ð³Ó\80Ñ\83Ñ\88 Ñ\8fлахь а иза хила мега жигара лелош.",
        "unusedcategoriestext": "ХӀокху категорешан чохь агӀонаш я кхин категореш яц.",
        "notargettitle": "Ӏалашо билгал йина яц",
        "notargettext": "И кхочушдан ахьа билгал йина яц Ӏалашонан агӀо я декъашхо.",
        "exif-whitepoint": "Къайн тӀадаман бос",
        "exif-primarychromaticities": "Коьрта беснийн бос",
        "exif-referenceblackwhite": "Ӏаьржа а къай а тӀадамийн меттиг",
-       "exif-datetime": "Файл хийцина терахь а хан",
+       "exif-datetime": "Файлан хийцам бина терахь а, хан а",
        "exif-imagedescription": "Суьртан цӏе",
        "exif-make": "Камера арахоьцург",
        "exif-model": "Камеран модель",
        "exif-exposuretime-format": "$1 ($2) чура",
        "exif-fnumber": "Диафрагмин дукхалла",
        "exif-exposureprogram": "Экспозицин программа",
+       "exif-isospeedratings": "ISO серло хааялар",
        "exif-shutterspeedvalue": "APEX чура дешнаш",
        "exif-aperturevalue": "APEX чура оьз",
        "exif-exposurebiasvalue": "Сурт доккхуш яла оьшу серло меттаяло",
index edc1553..56bbec3 100644 (file)
        "listfiles-delete": "smazat",
        "listfiles-summary": "Tato speciální stránka zobrazuje všechny načtené soubory.",
        "listfiles_search_for": "Hledat soubor podle názvu:",
+       "listfiles-userdoesnotexist": "Uživatelský účet „$1“ není zaregistrován.",
        "imgfile": "soubor",
        "listfiles": "Seznam souborů",
        "listfiles_thumb": "Náhled",
        "emailccsubject": "Kopie Vaší zprávy pro uživatele $1: $2",
        "emailsent": "E-mail odeslán",
        "emailsenttext": "Váš e-mail byl odeslán.",
-       "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „Poslat e-mail“; odeslal ho uživatel $1 uživateli $2",
+       "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „{{int:emailpage}}“; {{GENDER:$1|odeslal ho uživatel|odeslala ho uživatelka}} $1 {{GENDER:$2|uživateli|uživatelce}} $2.",
        "usermessage-summary": "Doručena zpráva od systému.",
        "usermessage-editor": "Systémový poslíček",
        "watchlist": "Sledované stránky",
        "feedback-error1": "Chyba: Nerozpoznaný výsledek z API",
        "feedback-error2": "Chyba: Editace se nezdařila",
        "feedback-error3": "Chyba: API nevrátilo žádnou odpověď",
+       "feedback-error4": "Chyba: Nelze napsat na uvedenou stránku pro zpětnou vazbu",
        "feedback-message": "Zpráva:",
        "feedback-subject": "Předmět:",
        "feedback-submit": "Odeslat",
        "feedback-terms": "Jsem srozuměn s tím, že informace o mém uživatelském agentu zahrnují informace o přesné verzi mého prohlížeče a operačního systému a budou zveřejněny u mého komentáře.",
+       "feedback-termsofuse": "Souhlasím s tím, že budu poskytovat zpětnou vazbu v souladu s Podmínkami užití.",
        "feedback-thanks": "Děkujeme! Váš komentář byl přidán na stránku „[$2 $1]“.",
        "feedback-thanks-title": "Děkujeme!",
        "feedback-useragent": "Uživatelský agent:",
        "log-name-pagelang": "Kniha změn jazyků",
        "log-description-pagelang": "Toto je protokol změn jazyků stránek.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|změnil|změnila}} jazyk stránky $3 z $4 na $5.",
-       "default-skin-not-found": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nVaše instalace zřejmě obsahuje následující vzhledy. Informace o tom, jak je povolit a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].\n\n$2\n\n; Pokud jste právě nainstalovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalaci v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code dir=\"ltr\">skins/</code>.\n:* Nebo si můžete stáhnout tarbally jednotlivých vzhledů z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code>skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář.\n\n; Pokud jste právě aktualizovali MediaWiki:\n: MediaWiki 1.24 a novější již automaticky nepovolují nainstalované vzhledy (vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_autodiscovery/cs Manual:Skin autodiscovery]). Pro povolení všech právě nainstalovaných vzhledů vlepte následující řádky do <code>LocalSettings.php</code>:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Pokud jste právě upravili <code>LocalSettings.php</code>:\n: Překontrolujte případné překlepy v názvech vzhledů.",
+       "default-skin-not-found": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nVaše instalace zřejmě obsahuje následující {{PLURAL:$4|vzhled|vzhledy}}. Informace o tom, jak {{PLURAL:$4|jej|je}} povolit a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].\n\n$2\n\n; Pokud jste právě nainstalovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalaci v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code dir=\"ltr\">skins/</code>.\n:* Nebo si můžete stáhnout tarbally jednotlivých vzhledů z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code>skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář.\n\n; Pokud jste právě aktualizovali MediaWiki:\n: MediaWiki 1.24 a novější již automaticky nepovolují nainstalované vzhledy (vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_autodiscovery/cs Manual:Skin autodiscovery]). Pro povolení {{PLURAL:$5|právě nainstalovaného vzhledu|všech právě nainstalovaných vzhledů}} vlepte následující {{PLURAL:$5|řádku|řádky}} do <code>LocalSettings.php</code>:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Pokud jste právě upravili <code>LocalSettings.php</code>:\n: Překontrolujte případné překlepy v názvech vzhledů.",
        "default-skin-not-found-no-skins": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nNemáte nainstalovány žádné vzhledy.\n\n; Pokud jste právě nainstalovali nebo aktualizovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. MediaWiki 1.24 a novější již v hlavním repozitáři neobsahují žádné vzhledy. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalaci v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code>skins/</code>.\n:* Nebo si můžete stáhnout tarbally jednotlivých vzhledů z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code dir=\"ltr\">skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář. Informace o tom, jak povolit vzhledy a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
index f59c963..144fcbe 100644 (file)
@@ -98,6 +98,7 @@
        "faqpage": "Project:Чѧстꙑ въпроси",
        "actions": "дѣиства",
        "namespaces": "имєнъ просторꙑ",
+       "navigation-heading": "плаваниѥ",
        "errorpagetitle": "блаꙁна",
        "tagline": "{{grammar:genitive|{{SITENAME}}}} страница",
        "help": "помощь",
        "userloginnocreate": "въниди",
        "logout": "ис̾ходъ",
        "userlogout": "ис̾ходъ",
+       "userlogin-noaccount": "мѣсто ти нѣстъ ли ?",
        "nologin": "мѣсто ти нѣстъ ли ? $1",
        "nologinlink": "съꙁижди си мѣсто",
        "createaccount": "съꙁижди си мѣсто",
        "accountcreated": "мѣсто сътворєно ѥстъ",
        "accountcreatedtext": "польꙃєватєльско мѣсто [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|бєсѣда]]) сътворєно бѣ",
        "loginlanguagelabel": "ѩꙁꙑкъ : $1",
+       "pt-login": "въниди",
+       "pt-login-button": "въниди",
+       "pt-createaccount": "съꙁижди си мѣсто",
        "pt-userlogout": "ис̾ходъ",
        "changepassword": "таина словєсє иꙁмѣнѥниѥ",
        "resetpass_header": "таина слова иꙁмѣнѥниѥ",
        "template-protected": "(ꙁабранєно ѥстъ)",
        "template-semiprotected": "(чѧстьно ꙁабранѥно)",
        "hiddencategories": "сꙗ страница въ {{PLURAL:$1|1 съкрꙑтѣи катигорїи|$1 съкрꙑтѣхъ катигорїѩ}} сѧ авлꙗѥтъ :",
+       "moveddeleted-notice": "сꙗ страница поничьжєна ѥстъ ⁙\nпоничьжєниꙗ и прѣимєнованиꙗ їстории си страницѧ нижѣ видѣти можєши",
        "postedit-confirmation-saved": "твоꙗ мѣна съхранѥна ѥстъ",
        "viewpagelogs": "си страницѧ їсторїѩ",
        "cur": "нꙑ҃н",
        "rightslog": "чинодатєльства їсторїꙗ",
        "action-edit": "си страницѧ исправлєниѥ",
        "nchanges": "$1 {{PLURAL:$1|мѣна|мѣнꙑ|мѣнъ}}",
+       "enhancedrc-history": "їсторїꙗ",
        "recentchanges": "послѣдьнѩ мѣнꙑ",
        "recentchanges-legend": "послѣдьн҄ь мѣнъ строи",
        "recentchanges-summary": "с҄ьдє послѣдьнѩ мѣнꙑ сѥѩ викиопꙑтьствованиꙗ видѣти можєши",
        "recentchanges-label-minor": "малаꙗ мѣна",
        "recentchanges-label-bot": "сѭ мѣноу аѵтоматъ сътворилъ",
        "rcshowhideminor": "$1 малꙑ мѣнꙑ",
+       "rcshowhideminor-show": "каꙁаниѥ",
+       "rcshowhideminor-hide": "съкрꙑтиѥ",
        "rcshowhidebots": "$1 аѵтоматъ",
+       "rcshowhidebots-show": "каꙁаниѥ",
+       "rcshowhidebots-hide": "съкрꙑтиѥ",
        "rcshowhideliu": "$1 польꙃєватєлъ · ѩжє съꙁижьдє сѥ мѣсто · мѣнꙑ",
+       "rcshowhideliu-hide": "съкрꙑтиѥ",
        "rcshowhideanons": "$1 анѡнѷмьнъ польꙃєватєлъ мѣнꙑ",
+       "rcshowhideanons-show": "каꙁаниѥ",
+       "rcshowhideanons-hide": "съкрꙑтиѥ",
        "rcshowhidemine": "$1 моꙗ мѣнꙑ",
+       "rcshowhidemine-show": "каꙁаниѥ",
+       "rcshowhidemine-hide": "съкрꙑтиѥ",
        "rclinks": "$1 послѣдьн҄ь  мѣнъ · ѩжє $2 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ<br />$3",
        "diff": "ра҃ꙁн",
        "hist": "їс҃т",
        "minoreditletter": "м҃л",
        "newpageletter": "н҃в",
        "boteditletter": "а҃ѵ",
+       "rc-change-size-new": "$1 {{PLURAL:$1|баитъ|баита|баитъ}} послѣди мѣнꙑ",
        "rc-old-title": "напрьва страница створѥна ꙗко ⁖ $1 ⁖",
        "recentchangeslinked": "съвѧꙁанꙑ страницѧ",
        "recentchangeslinked-feed": "съвѧꙁанꙑ страницѧ",
        "movethispage": "си страницѧ прѣимєнованиѥ",
        "pager-newer-n": "{{PLURAL:$1|нова 1|новꙑ $1|новъ $1}}",
        "pager-older-n": "{{PLURAL:$1|давьнꙗ 1|давьни $1|давьн҄ь $1}}",
+       "booksources-search": "исканиѥ",
        "specialloguserlabel": "испльнитєл҄ь :",
        "speciallogtitlelabel": "страницѧ или польꙃєватєлꙗ имѧ :",
        "log": "їсторїѩ",
        "whatlinkshere-hidelinks": "$1 съвѧꙁи",
        "whatlinkshere-filters": "ситꙑ",
        "block": "ꙁагради польꙃєватєл҄ь",
-       "blockip": "ꙁагради польꙃєватєл҄ь",
+       "blockip": "ꙁагради {{GENDER:$1|польꙃєватєл҄ь}}",
        "blockip-legend": "ꙁагради польꙃєватєл҄ь",
        "ipaddressorusername": "IP число или польꙃєватєлꙗ имѧ :",
        "ipbreason": "какъ съмꙑслъ :",
        "logentry-move-move": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ",
        "logentry-newusers-create": "польꙃєватєльско мѣсто ⁖ $1 ⁖ {{GENDER:$2|сътворѥно}} ѥстъ",
+       "logentry-upload-upload": "$1 {{GENDER:$2|положишє}} $3",
        "revdelete-summary": "мѣнꙑ опьсаниѥ",
        "searchsuggest-search": "исканиѥ",
        "searchsuggest-containing": "сѥ дрьжащи···",
-       "api-error-unknownerror": "нєвѣдома блаꙁна : ⁖ $1 ⁖"
+       "api-error-unknownerror": "нєвѣдома блаꙁна : ⁖ $1 ⁖",
+       "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-bangla": "бангальска аꙁъбоукꙑ",
+       "special-characters-group-telugu": "тєлоужьска аꙁъбоукꙑ",
+       "special-characters-group-sinhala": "синхальска аꙁъбоукꙑ"
 }
index 94aa115..5f1e17c 100644 (file)
@@ -96,9 +96,9 @@
        "nov": "Чӳк",
        "dec": "Раш",
        "pagecategories": "{{PLURAL:$1|Категори|Категорисем}}",
-       "category_header": "«$1» категорири статьясем",
+       "category_header": "\"$1\" категоринчи статьясем",
        "subcategories": "Подкатегорисем",
-       "category-media-header": "«$1» категорири файлсем",
+       "category-media-header": "\"$1\" категоринчи файлсем",
        "category-empty": "''Хальхи вăхăтра ку категори пушă.''",
        "hidden-categories": "{{PLURAL:$1|Пытарнă категори|Пытарнă категорисем}}",
        "hidden-category-category": "Пытарнă категорисем",
        "unprotect": "Хӳтĕлеве пăрахăçла",
        "unprotectthispage": "Хӳтĕлеве пăрахăçла",
        "newpage": "Çĕнĕ статья",
-       "talkpage": "СӳÑ\82Ñ\81е Ñ\8fваÑ\81Ñ\81и",
+       "talkpage": "СӳÑ\82Ñ\81е Ñ\8fвни",
        "talkpagelinktext": "Сӳтсе явни",
        "specialpage": "Ятарлă страницă",
        "personaltools": "Ман хатĕрсем",
        "page-rss-feed": "«$1» - RSS хăю",
        "page-atom-feed": "«$1» - Atom хăю",
        "red-link-title": "$1 (хальлĕхе çырман)",
-       "nstab-main": "Страницă",
+       "nstab-main": "Страница",
        "nstab-user": "Хутшăнакан страници",
        "nstab-media": "Мультимеди",
        "nstab-special": "Ятарлă страницă",
        "namespaceprotected": "Сирĕн «$1» ят уçлăхĕнчи статьясене тӳрлетмелли май çук..",
        "ns-specialprotected": "«{{ns:special}}» ят уçлăхĕнчи страницăсене эсир тӳрлетейместĕр.",
        "titleprotected": "Ку ятлă страницăна хатĕрлессине [[Хутшăнакан:$1|$1]] хутшăнакан чарса хунă.\nÇак сăлтава кăтартнă: ''$2''.",
+       "exception-nologin": "Кĕмен",
        "virus-badscanner": "Ĕнерлев йăнăшĕ. Вирус сканерĕ паллă мар: ''$1''",
        "virus-scanfailed": "скенерланă чухнехи йăнăш (код $1)",
        "virus-unknownscanner": "паллă мар антивирус:",
        "logouttext": "Эсир палласа илмен хутшăнакан евĕр ĕçлетĕр.\nСайт сире ятпа мар, IP-адрес урлă пĕлет.\nЭсир анонимла, е малтанхи евĕрлĕ çĕнĕ сеанс уçса, е  урăх ятпа ĕçлеме пултаратăр.\nХăш-пĕр страницăсем эсир сайта кĕнĕ пек курăнма пултараççĕ, ăна тӳрлетмешкĕн браузер кэшне çĕнетĕр.",
-       "yourname": "Усăкуракан ят:",
+       "yourname": "Усă куракан ят:",
        "userlogin-yourname": "Усă куракан ят",
        "yourpassword": "Вăрттăн сăмах:",
        "yourpasswordagain": "Вăрттăн сăмах тепре çырăр:",
        "logout": "Сеансне пĕтерни",
        "userlogout": "Тухрăр",
        "notloggedin": "Эсир сайта кĕмен",
-       "nologin": "ЭÑ\81иÑ\80 Ñ\85алÄ\95 Ñ\82е Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иленмен-и? '''$1'''.",
+       "nologin": "Ð\90ккаÑ\83нÑ\82 Ã§Ñ\83к-и? $1.",
        "nologinlink": "Çĕнĕ хутшăнакана регистрацилесси",
-       "createaccount": "Çĕнĕ хутшăнакана регистрацилесси",
-       "gotaccount": "ЭÑ\81иÑ\80 Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иленÑ\81е-и? '''$1'''.",
+       "createaccount": "Аккаунт ту",
+       "gotaccount": "Ð\90ккаÑ\83нÑ\82 Ð¿Ñ\83Ñ\80-и? $1.",
        "gotaccountlink": "Кĕрĕр",
        "createaccountmail": "эл. почта тăрăх",
+       "createacct-realname": "Чăн-чăн ят (пулсан)",
        "createacct-submit": "Аккаунт ту",
+       "createacct-benefit-body1": "{{PLURAL:$1|тӳрлетни|тӳрлетнисем}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|страница|страницасем}}",
        "badretype": "Эсир кăтартнă парольсем пĕр пек мар.",
        "userexists": "Эсир усă курас теекен ята йышăннă. Тархасшăн, урăх ят суйласа илĕр.",
        "loginerror": "Хутшăнакана палласа илеймерĕмĕр",
        "media_tip": "Медиа-файл çине каçă",
        "sig_tip": "Сирĕн алă пусни тата вăхăт",
        "hr_tip": "Горизонтальлĕ йĕр (сахалтарах усă курăр)",
-       "summary": "Улшăнусен ăнлантарăвĕ:",
+       "summary": "Улăштарнисене ăнлантарни:",
        "subject": "Тема:",
        "minoredit": "Пĕчĕк улшăну",
        "watchthis": "Ку страницăна сăна",
        "copyrightwarning": "Эсир кĕртнĕ, е улăштарнă пур статьясен тексчĕсем $2 ($1 пăхăр) лизензине пăхăнаççĕ. Енчен те эсир кĕртнĕ текста пурте усă курма, тӳрлетсе улăштарма пултарнипе килĕшместĕр пулсан кунта ăна ан кĕртĕр. <br /> Çавăн пекех эсир кĕртнĕ текстăн е авторĕ, е ăна ирĕклĕ усă курма юракан çăлкуçсенчен илнине çирĕплететĕр. <br /> '''АВТОР ПРАВИСЕМПЕ ХӲТĔЛЕНĔ МАТЕРИАЛСЕНЕ АН КĔРТĔР!'''",
        "protectedpagewarning": "'''АСĂРХАТТАРНИ: ку страницăна улшăнусем кĕртессинчен хӳтĕленĕ, ăна тӳрлетме администраторсем кăна пултараççĕ.'''",
        "titleprotectedwarning": "'''Асăрхаттару. Ку страницăпа ĕçлеме чарнă, ăна хăш-пĕр хутшăнакан кăна хатерлеме пултарать.'''",
-       "templatesused": "Ку страницă çинче усă курнă {{PLURAL:$1|Шаблон|Шаблонсем}}:",
+       "templatesused": "Ку страницă çинче усă курнă {{PLURAL:$1|шаблон|шаблонсем}}:",
        "templatesusedpreview": "Пăхакан страница çинче усă курнă шаблонсем:",
        "templatesusedsection": "Ку пайра усă курнă шаблонсем:",
        "template-protected": "(сыхланă)",
        "nohistory": "Ку страницăн улшăнусен журналĕ çук.",
        "currentrev": "Хальхи верси",
        "revisionasof": "$1 сăнташ",
-       "revision-info": "$1 версийĕ; $2",
+       "revision-info": "Версийĕ $1 {{GENDER:$6|$2}}$7",
        "previousrevision": "← Малтанхи сăнташ",
        "nextrevision": "Тепĕр сăнташ →",
        "currentrevisionlink": "хальхи верси çине куç",
        "mypreferences": "Ĕнерлев",
        "prefs-edits": "Тӳрлетӳсен шучĕ:",
        "prefs-skin": "Тир",
-       "skin-preview": "Малтанхи курăну",
+       "skin-preview": "Маларах пăхни",
        "datedefault": "Палăртман чухнехи",
        "prefs-rc": "Юлашки улшăнусен страници",
        "prefs-watchlist": "Сăнав списокĕ",
        "prefs-searchoptions": "Шырамалли",
        "prefs-files": "Файлсем",
        "youremail": "Электронлă почта:",
-       "username": "{{GENDER:$1|Ð¥Ñ\83Ñ\82Ñ\88Ä\83наканÄ\83н Ñ\8fÑ\87Ä\95}}:",
+       "username": "{{GENDER:$1|УÑ\81Ä\83 ÐºÑ\83Ñ\80акан Ñ\8fÑ\82}}:",
        "prefs-registration": "Регистрацин вăхăтчĕ:",
        "yourrealname": "Чăн-чăн ят:",
        "yourlanguage": "Интерфейс чĕлхи:",
        "group-bureaucrat": "Бюрократсем",
        "group-suppress": "Тĕрĕслекенсем",
        "group-all": "(пурте)",
+       "group-user-member": "{{GENDER:$1|хутшăнакан}}",
        "group-autoconfirmed-member": "автоподтверждённый участник",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|администратор}}",
        "recentchanges-legend": "Çĕнĕ улшăнусен ĕнерлевĕ",
        "recentchanges-label-bot": "Ку улшăнăва бот тунă",
        "recentchanges-legend-newpage": "$1 — çĕнĕ страница",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rclistfrom": "Юлашки улшăнусене $3 $2 вăхăтран пуçласа кăтартнă",
        "rcshowhideminor": "пĕчĕк тӳрлетнисене $1",
        "rcshowhidebots": "ботсене $1",
        "uploadlogpagetext": "Аяларах эсир юлашкинчен кĕртнĕ файлсене куратăр.\nПур çĕрте те сервер вăхăтне (Гринвич тăрăх, UTC) кăтартнă.",
        "filename": "Файл ячĕ",
        "filedesc": "Кĕскен ăнлантарни",
-       "fileuploadsummary": "Кĕске ăнлантару:",
+       "fileuploadsummary": "Кĕскен ăнлантарни:",
        "filestatus": "Усă курмалли майсем",
        "filesource": "Çăлкуç",
        "ignorewarning": "Асăрхаттарусене пăхмасăр файла çав-çавах çырса хумалла.",
        "unusedtemplates": "Усă курман шаблонсем",
        "unusedtemplatestext": "Ку страница çинче страницăсенче усă курман «Шаблон» ятлă ятсен уçлăхне шутне кĕрекен страницăсене куратăр.",
        "unusedtemplateswlh": "ытти каçăсем",
-       "randompage": "Ä\82нÑ\81Ä\83Ñ\80Ñ\82Ñ\80ан Ð¸Ð»Ð½Ä\9b Ñ\81Ñ\82Ñ\80аниÑ\86Ä\83",
+       "randompage": "Ä\82нÑ\81Ä\83Ñ\80Ñ\82Ñ\80ан Ð»ÐµÐºÐ½Ä\95 Ñ\81Ñ\82Ñ\80аниÑ\86а",
        "randomincategory-category": "Категори:",
        "randomredirect": "Ăнсăртран илнĕ куçару",
        "statistics": "Статистика",
        "brokenredirects-edit": "тӳрлет",
        "brokenredirects-delete": "кăларса пăрах",
        "fewestrevisions": "Сахал тӳрлетнĕ статьясем",
-       "nbytes": "$1 {{PLURAL:$1|1=байт|байт}}",
+       "nbytes": "$1 {{PLURAL:$1|байт|байтсем}}",
        "ncategories": "$1 {{PLURAL:$1|категори|категорисем}}",
        "nlinks": "$1 {{PLURAL:$1|1=каçă|каçă}}",
        "nviews": "$1 {{PLURAL:$1|пăхни|пăхнисем}}",
        "nextpage": "Тепĕр страницă ($1)",
        "prevpage": "Унчченхи страницă ($1)",
        "allarticles": "Пĕтĕм статьясем",
-       "allinnamespace": "Пĕтĕм статьясем («$1» ят уçлăхĕ)",
+       "allinnamespace": "Пĕтĕм статьясем ($1 ят хушшинче)",
        "allpagessubmit": "Ту",
        "allpagesprefix": "Çак йĕрекесенчен пуçланакансен страницăсене шыра:",
        "allpagesbadtitle": "Страницăн ячĕ тĕрĕс мар. Ятĕнче е интервики, е чĕлхе префиксĕ е усă курма юраман символсем пур.",
        "watching": "Сăнамаллисем шутне хушасси…",
        "unwatching": "Сăнав ят-йышĕнчен кăларса пăрахасси…",
        "enotif_reset": "Пур страницăсене те пăхнă пек палăрт",
+       "enotif_impersonal_salutation": "{{SITENAME}} хутшăнакан",
        "enotif_anon_editor": "$1 анонимлă хутшăнакан",
        "created": "хатĕрленĕ",
        "changed": "улăштарнă",
        "undelete-search-submit": "Шыра",
        "blanknamespace": "(Тĕп)",
        "contributions": "{{GENDER:$1|Усă куракан}} ӳсĕмĕсем",
+       "contributions-title": "Усă куракан $1 хушни",
        "mycontris": "Ӳсĕм",
-       "contribsub2": "{{GENDER:$3|$1}} ӳсĕмĕ ($2)",
+       "contribsub2": "{{GENDER:$3|$1}} валли ($2)",
        "uctop": " (пуçламăш)",
        "month": "Уйăхран (тата маларах):",
        "year": "Çултан (тата маларах):",
        "sp-contributions-talk": "сӳтсе яв",
        "sp-contributions-userrights": "Хутшăнакансен прависемпе ĕçлесси",
        "sp-contributions-search": "Тӳпе шыравĕ",
+       "sp-contributions-username": "IP адрес е усă куракан ят:",
        "sp-contributions-submit": "Шыра",
        "whatlinkshere": "Кунта килекен каçăсем",
        "linkshere": "Çак страницăсем '''[[:$1]]''' çине илсе килеççĕ:",
        "whatlinkshere-prev": "{{PLURAL:$1|унчченхи|унчченхи $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|урăххи|урăххисем $1}}",
        "whatlinkshere-links": "← каçăсем",
+       "whatlinkshere-hideredirs": "куçарнисене $1",
        "whatlinkshere-filters": "Аласем",
        "blockip": "Хăтшăнакана ĕçлеме чар",
+       "ipaddressorusername": "IP адрес е усă куракан ят:",
        "ipbreason": "Сăлтавĕ",
        "ipbother": "Урăх вăхăт:",
        "ipboptions": "2 сехет:2 hours,1 кун:1 day,3 кун:3 days,1 эрне:1 week,2 эрне:2 weeks,1 уйăх:1 month,3 уйăх:3 months,6 уйăх:6 months,1 çул:1 year,яванлăха:infinite",
        "tooltip-feed-atom": "Ку страницăн Atom куçару",
        "tooltip-ca-nstab-image": "Файлăн страници",
        "tooltip-ca-nstab-template": "Шаблонăн страници",
-       "tooltip-ca-nstab-category": "Категори страницине уç",
+       "tooltip-ca-nstab-category": "Категорин страницине пăхни",
        "tooltip-save": "Тӳрлетӳсене астуса хăвармалла",
        "tooltip-watch": "Çак страницăна пăхса тăмаллисем шутне хуш",
        "tooltip-summary": "Кĕскĕн ăнлантарса парăр",
        "creditspage": "Пархатарлăх",
        "spambot_username": "MediaWiki спамран тасатни",
        "pageinfo-title": "\"$1\" çинчен",
+       "pageinfo-language": "Страницин чĕлхи",
+       "pageinfo-templates": "{{PLURAL:$1|шаблон|шаблонсем}} ($1)",
        "pageinfo-toolboxlink": "Страници çинчен",
+       "pageinfo-category-info": "Категори çинчен",
        "markaspatrolleddiff": "Тĕрĕсленĕ тесе палăрт",
        "markaspatrolledtext": "Ку статьяна тĕрĕсленĕ тесе палăртмалла",
        "markedaspatrolled": "Тĕрĕсленĕ пек палăртнă",
        "markedaspatrolledtext": "Суйланă версине тĕрĕсленĕ пек палăртнă.",
        "deletedrevision": "$1 кивĕ версине кăларса парахнă.",
        "filedeleteerror-short": "Файла кăларса пăрахнă чухне йăнăш тухрĕ: $1",
-       "nextdiff": "Малаллахи тӳрлетӳ →",
+       "previousdiff": "← Кивĕрех тӳрлетни",
+       "nextdiff": "Çĕнĕрех тӳрлетни →",
        "file-info": "файл пысăкăшĕ: $1, MIME-тĕсĕ: $2",
        "file-info-size": "$1 × $2 пиксел, файл пысăкăше: $3, MIME-тĕсĕ: $4",
        "file-nohires": "Пысăкрах калăпăшли çук.",
        "confirm_purge_button": "OK",
        "confirm-watch-button": "OK",
        "confirm-unwatch-button": "OK",
+       "pipe-separator": "&#32;|&#32;",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← малтанхи страница",
        "imgmultipagenext": "тепĕр страница →",
        "autoredircomment": "[[$1]] çине куçарни",
        "autosumm-new": "Çĕнĕ страница \"$1\"",
        "watchlisttools-view": "Ку тӳрлетӳпе çыхăннăскерсем",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|сӳтсе явни]])",
        "version": "Верси",
        "fileduplicatesearch": "Пĕр пек файлсен шыравĕ",
        "fileduplicatesearch-legend": "Дубликатсен шыравĕ",
        "specialpages-group-highuse": "Нумай усă куракан страницăсем",
        "htmlform-selectorother-other": "Урăххи",
        "htmlform-no": "Çук",
+       "logentry-move-move": "$1 страницă {{GENDER:$2|ятне улăштарчĕ}} $3 - $4",
        "rightsnone": "(çук)",
        "feedback-back": "Каялла",
        "searchsuggest-search": "Шырамалли",
index 1f54788..6f3ab07 100644 (file)
        "revdelete-show-file-confirm": "Er du sikker på, at du vil vise en slettet version af filen \"<nowiki>$1</nowiki>\" fra den $2, klokken $3?",
        "revdelete-show-file-submit": "Ja",
        "logdelete-selected": "{{PLURAL:$1|Valgt logindførsel|Valgte logindførsler}}:",
-       "revdelete-text-text": "Slettede version vil stadigt fremgå af sidehistorikken, men dele af indholdet vil ikke være offentlig tilgængeligt.",
+       "revdelete-text-text": "Slettede versioner vil stadig fremgå af sidehistorikken, men dele af indholdet vil ikke være offentlig tilgængeligt.",
        "revdelete-text-others": "Andre administratorer vil fortsat have adgang til det skjulte indhold og have mulighed for at genskabe det, med mindre andre begrænsninger er sat.",
        "revdelete-confirm": "Vær venlig at bekræfte at du vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].",
        "revdelete-suppress-text": "Der bør '''kun''' skjules i de følgende tilfælde:\n* Potentielt injurierende oplysninger\n* Upassende personlige oplysninger\n*: ''hjemmeadresser og -telefonnumre, CPR-numre og lign.''",
index f765cab..bb0340b 100644 (file)
        "listfiles-delete": "löschen",
        "listfiles-summary": "Diese Spezialseite listet alle hochgeladenen Dateien auf.",
        "listfiles_search_for": "Suche nach Datei:",
+       "listfiles-userdoesnotexist": "Das Benutzerkonto „$1“ ist nicht registriert.",
        "imgfile": "Datei",
        "listfiles": "Dateiliste",
        "listfiles_thumb": "Vorschaubild",
        "emailccsubject": "Kopie deiner Nachricht an $1: $2",
        "emailsent": "E-Mail verschickt",
        "emailsenttext": "Deine E-Mail wurde verschickt.",
-       "emailuserfooter": "Diese E-Mail wurde von {{SITENAME}}-Benutzer „$1“ an „$2“ gesendet.",
+       "emailuserfooter": "Diese E-Mail wurde von „$1“ an „$2“ durch die Funktion „{{int:emailpage}}“ bei {{SITENAME}} gesendet.",
        "usermessage-summary": "Systemnachricht gespeichert.",
        "usermessage-editor": "System-Messenger",
        "usermessage-template": "MediaWiki:Benutzernachricht",
        "feedback-error1": "Fehler: Unbekanntes Ergebnis der API",
        "feedback-error2": "Fehler: Bearbeitung gescheitert",
        "feedback-error3": "Fehler: Keine Antwort von der API",
+       "feedback-error4": "Fehler: Der Beitrag konnte nicht unter dem angegebenen Rückmeldungstitel gespeichert werden",
        "feedback-message": "Nachricht:",
        "feedback-subject": "Betreff:",
        "feedback-submit": "Senden",
        "log-name-pagelang": "Sprachenänderungs-Logbuch",
        "log-description-pagelang": "Dies ist ein Logbuch mit Änderungen an Seitensprachen.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|änderte}} die Seitensprache für $3 von $4 nach $5.",
-       "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDie folgende(n) Benutzeroberfläche(n) scheinen vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neueren Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
+       "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\n{{PLURAL:$4|Die folgende Benutzeroberfläche scheint|Die folgenden Benutzeroberflächen scheinen}} vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neueren Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die {{PLURAL:$5|folgende Zeile|folgenden Zeilen}} in die Datei <code>LocalSettings.php</code> einfügen, um {{PLURAL:$5|die derzeit installierte Benutzeroberfläche|alle derzeit installierten Benutzeroberflächen}} zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
        "default-skin-not-found-no-skins": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDu hast keine Benutzeroberfläche installiert.\n\n; Sofern du MediaWiki gerade installiert oder aktualisiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten, da MediaWiki 1.24 und neuere Versionen keine Benutzeroberflächen im Hauptrepositorium enthalten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n: Siehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
index a497dec..e4f40e8 100644 (file)
        "readonly": "database kılit biyo",
        "enterlockreason": "Database kılit biyo",
        "readonlytext": "Qey pawıtış ri yew sebeb vace. Texmini yew tarix vace şıma key pawıtış wedarneni:  $1",
-       "missing-article": "Banqa, pela be namê \"$1\" $2 ke gunê bıbo, nêdiye.\n\nEna belki seba yew vurnayışo kıhan ya zi tarixê gırê yew pele esteriya.\n\nEke wına niyo, belki ''software''i de yew xeta esta.\nKerem kerê, naye be namey ''URL''i yew [[Special:ListUsers/sysop|karber]]i ra vacê.",
+       "missing-article": "Banqa, pela be nameyê \"$1\" $2 ke gani bıbo, nêdiye.\n\nEna belki seba yew vurnayışo kıhan ya zi tarixê gıreyê yew pele esteriya.\n\nEke wına niyo, belki ''software'' de yew xeta esta.\nKerem kerên, naye be nameyê ''URL''yi yew [[Special:ListUsers/sysop|karber]]i ra vacên.",
        "missingarticle-rev": "(rewizyon#: $1)",
        "missingarticle-diff": "(Ferq: $1, $2)",
        "readonly_lag": "Daegeh (database) otomatikmen kılit bi, sureo ke  daegehê bınêni resay daegehê serêni.",
        "wrongpasswordempty": "Parola tola, venga. tekrar bınuse.",
        "passwordtooshort": "Paroley gani tewr senık be {{PLURAL:$1|1 karakter|$1 karakteran}} derg bê.",
        "password-name-match": "Parola u nameyê şıma gani zeypê (seypê) nêbo.",
-       "password-login-forbidden": "No namey karberi u parola karkerdışê cı  kerdo xırab.",
+       "password-login-forbidden": "Nameyê nê karberi û gurenayışê parola biyo qedeğen.",
        "mailmypassword": "Parola reset ke",
        "passwordremindertitle": "Qandê {{SITENAME}}'i idareten parolaya newiye",
        "passwordremindertext": "Yew ten (muhtemelen, şıma na aderesê IP ra $1 ) {{SITENAME}} ($4) newe yew parola waşt. \"$2\" no name ri emanet yew parola vıraziya \"$3\". Eke na şıma waşta, hesabê xo akere u newe yew parola bıvıraze. Muddetê parolayê şıma yo emanet {{PLURAL:$5|1 roc|$5 roci}}.\n\nEke vurnayişê parolayi, şıma nêwaşt ya zi parolayê şıma ameyo şıma vir u şıma hini qayil nşye parolayê xo bıvurni; no mesaj peygoş kere u bıewne gureyê xo.",
        "summary-preview": "Verqaytê xulasa:",
        "subject-preview": "Verqaytê mewzu/sernuştey:",
        "blockedtitle": "Karber blokekerdeo",
-       "blockedtext": "'''No namey karberi ya ki no adresê IP blokekerdeo.'''\n\nVıraştoğê blokey: $1\nSebebê blokey: ''$2''.\n\n* Sıftekerdena blokey: $8\n* Qediyayışê blokey: $6\n* Blokebiyae: $7\n\nŞıma şenê  $1 de ya ki  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de jû e-postawa ke vêrena, beli biye u şıam gureynayışê cı ra mehrum nêbiyê.\nIP adresê şımao nıkaên $3o u numrey bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
+       "blockedtext": "<strong>No nameyê karberi ya zi na adresa IP blokekerdeya.</strong>\n\nVıraştoğê blokeyi: $1\nSebebê blokeyi: <em>$2</em>.\n\n* Sıftekerdena blokeyi: $8\n* Qediyayışê blokeyi: $6\n* Blokebiyaye: $7\n\nŞıma şenê  $1 de ya zi  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de yew e-posteyo ke vêreno, beli bi û şıma gureynayışê cı ra mehrum nêbiyê.\nIP adresa şımaya nıkayêne $3o û numreyê bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
        "autoblockedtext": "IP adresê şıma otomotikmen kerda kılit, çıkı $1 verniya nê hesabi grota.\nSebebê cı zi:\n\n:''$2''\n\n* Dest pê kerdışê verni grotışi: $8\n* Qedyayişê verni grotışi: $6\n* Qayile ke bloqe bıbo: $7\n\nŞıma qayile qey weri kewtışê na mesela,  $1 ya na [[{{MediaWiki:Grouppage-sysop}}|serkaran ra]] yewi ra şenê irtibat kewê.\n\nNot, [[Special:Preferences|Tercihê karberi]] eke şıma yew e-postayo raşt nênuşt se şıma nêşenê na xususiyet ra \"karber rê e-posta bırışê\" istifade bıkeri.\n\nIP adresiya şıma yo nıkayên $3 u ID şıma yo ke musade nêdaye #$5. Eke şıma yew tehqiqat vırazeni malumatê corênan xo vira mekerê.",
        "blockednoreason": "sebeb nidaniyo",
        "whitelistedittext": "Qandê vurnayış kerdışi rê $1.",
        "rev-deleted-comment": "(Timarkerdışe enay hewadeyayo)",
        "rev-deleted-user": "(nameyê karberi esteriyo)",
        "rev-deleted-event": "(fealiyetê cıkewtışi esteriyo)",
-       "rev-deleted-user-contribs": "[namey karberi ya zi adresa IPy esteriya - vurnayış iştırakan ra nımniyo]",
+       "rev-deleted-user-contribs": "[nameyê karberi ya zi adresa IPy esteriya - vurnayış iştırakan ra nımniyo]",
        "rev-deleted-text-permission": "Çımraviyarnayışê ena pele '''esteriyo'''.\nBeno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] de teferruat esto.",
        "rev-deleted-text-unhide": "Çımra viyarnayışê ena pele '''besterêno'''.\nBeno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} besternayış] de teferruat esto.\nŞıma be idarekerina xo ra şenê hewna [$1 nê çımra viyarnayışi bıvinê], eke wazenê dewam kerê.",
        "rev-suppressed-text-unhide": "Çımra viyarnayışê ena pele '''Degusneyayo'''.\nBeno ke [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} degustış] de teferruat esto.\nŞıma be idarekerina xo ra şenê hewna [$1 nê çımraviyarnayışi bıvênê], eke wazenê dewam kerê.",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]",
        "redirect": "Serşıkıtena dosya, karberi, pele ya ki revizyonê kamiya dosya",
        "redirect-legend": "Hetenayışa dosya yana pela",
-       "redirect-summary": "Na pela xase to hetê jû dosya (namey dosya daeyo), jû pele (kamiya revizyoni ya ki pele daiya) ya ki jû pela karberi (kamiya karberia reqemkiye daiya) ser şıknena. Gurenayış: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya ki  [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Na pela xase to hetê yew dosya (nameyê dosya dayeyo), yew pele (kamiya revizyoni ya zi pele dayiya) ya zi yew pela karberi (kamiya karberiya reqemkiye dayiya) ser şıknena. Gurenayış: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya zi  [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Şo",
        "redirect-lookup": "Bewni",
        "redirect-value": "Erc:",
index 0187afb..e788f0d 100644 (file)
        "upload-file-error": "Erōr intêren",
        "upload-file-error-text": "É sucès un erōr intêren mèinter a s' ēra drê fêr un file pruvişôri inséma 'l servèint. Cuntatêr un [[Special:ListUsers/sysop|aministradōr]].",
        "upload-misc-error": "Erōr in cârga mia cgnusû",
+       "upload-misc-error-text": "S'é verifichê un erōr mìa cgnusû mèinter a 's carghêva al file. Verifichêr che la URL la sia giósta e ch'es pôsa druvêr. Se al problēma al gh'é incòra, cuntatêr un [[Special:ListUsers/sysop|aministradōr]].",
+       "upload-too-many-redirects": "L'URL al gh'îva dèinter trôp redirect",
+       "upload-http-error": "A s'é verifichê un erōr HTTP: $1",
+       "upload-copy-upload-invalid-domain": "An n'é mìa permés carghêr dal côpi da cl'indirés ché.",
+       "backend-fail-stream": "An n'é mìa pusébil traşmèter al file \"$1\".",
+       "backend-fail-backup": "An n'é mìa pusébil fêr 'na côpia 'd sicurèsa dal file $1.",
+       "backend-fail-notexists": "Al file $1 al gh'é mìa.",
+       "backend-fail-hashes": "An n'é mìa pusébil utgnîr la divisiòun di file per cunfrûnt.",
        "license": "Licèinsa:",
        "license-header": "Licèinsa",
        "nolicense": "Nisóna licèinsa sgnêda",
index 78c64a3..62ca344 100644 (file)
        "disclaimers": "Αποποίηση ευθυνών",
        "disclaimerpage": "Project:Γενική αποποίηση",
        "edithelp": "Βοήθεια σχετικά με την επεξεργασία",
+       "helppage-top-gethelp": "Βοήθεια",
        "mainpage": "Αρχική σελίδα",
        "mainpage-description": "Αρχική σελίδα",
        "policy-url": "Project:Πολιτική",
        "portal": "Πύλη κοινότητας",
        "portal-url": "Project:Πύλη κοινότητας",
-       "privacy": "Πολιτική ιδιωτικού απορρήτου",
-       "privacypage": "Project:Πολιτική ιδιωτικού απορρήτου",
+       "privacy": "Πολιτική ιδιωτικότητας",
+       "privacypage": "Project:Πολιτική ιδιωτικότητας",
        "badaccess": "Σφάλμα άδειας",
        "badaccess-group0": "Δεν επιτρέπεται να εκτελέσετε την ενέργεια που ζητήσατε.",
        "badaccess-groups": "Η ενέργεια που ζητήσατε είναι περιορισμένη σε χρήστες που ανήκουν {{PLURAL:$2|στην ομάδα|σε μία από τις ομάδες}}: $1.",
        "wrongpassword": "Ο κωδικός που πληκτρολογήσατε είναι λανθασμένος. Παρακαλούμε προσπαθήστε ξανά.",
        "wrongpasswordempty": "Ο κωδικός πρόσβασης που εισάχθηκε ήταν κενός. Παρακαλούμε προσπαθήστε ξανά.",
        "passwordtooshort": "Οι κωδικοί πρέπει να περιέχουν τουλάχιστον {{PLURAL:$1|1 χαρακτήρα|$1 χαρακτήρες}}.",
+       "passwordtoolong": "Οι κωδικοί πρόσβασης δεν μπορούν να υπερβαίνουν {{PLURAL:$1|τον 1 χαρακτήρα|τους $1 χαρακτήρες}}.",
        "password-name-match": "Ο κωδικός σου θα πρέπει να είναι διαφορετικός από το όνομα χρήστη σου.",
        "password-login-forbidden": "Η χρήση αυτού του ονόματος χρήστη και συνθηματικού έχουν  απαγορευτεί.",
        "mailmypassword": "Επαναφορά κωδικού",
        "missingcommentheader": "'''Υπενθύμιση:''' Δεν έχετε γράψει ένα θέμα/επικεφαλίδα για αυτό το σχόλιο.\nΑν κάνετε πάλι κλικ στο κουμπί \"{{int:savearticle}}\", η επεξεργασία σας θα αποθηκευτεί χωρίς θέμα ή επικεφαλίδα.",
        "summary-preview": "Προεπισκόπηση σύνοψης:",
        "subject-preview": "Προεπισκόπηση θέματος/επικεφαλίδας:",
+       "previewerrortext": "Παρουσιάστηκε σφάλμα κατά την προσπάθεια για να κάνετε προεπισκόπηση των αλλαγών σας.",
        "blockedtitle": "Ο χρήστης έχει υποστεί φραγή.",
        "blockedtext": "'''Το όνομα χρήστη σας ή η διεύθυνση IP σας έχει υποστεί φραγή.'''\n\nΗ φραγή έγινε από τον/την $1.\nΗ αιτιολογία που δόθηκε είναι: ''$2''.\n\n* Έναρξη φραγής: $8\n* Λήξη φραγής: $6\n* Η φραγή προορίζεται για το χρήστη: $7\n\nΜπορείτε να απευθυνθείτε στον/στην $1 ή σε κάποιον άλλον [[{{MediaWiki:Grouppage-sysop}}|διαχειριστή]] για να συζητήσετε τη φραγή.\nΔεν μπορείτε να χρησιμοποιήσετε την δυνατότητα «αποστολή e-mail σε αυτό το χρήστη» εκτός αν μια έγκυρη ηλεκτρονική διεύθυνση έχει οριστεί στις [[Special:Preferences|προτιμήσεις χρήστη]] σας.\nΗ τρέχουσα διεύθυνση IP σας είναι $3, και ο αριθμός αναγνώρισης της φραγής είναι #$5.\nΠαρακαλούμε περιλαμβάνετε οποιοδήποτε ή και τα δύο από αυτά σε οποιαδήποτε ερωτήματα σας.",
        "autoblockedtext": "Η διεύθυνση IP σας έχει υποστεί φραγή αυτόματα επειδή χρησιμοποιήθηκε από έναν άλλο χρήστη, ο οποίος και αποκλείστηκε από τον/την $1.\nΗ αιτία που δόθηκε είναι ο εξής:\n\n:''$2''\n\n* Έναρξη φραγής: $8\n* Λήξη φραγής: $6\n* Επιδιωκόμενος αποκλεισμένος: $7\n\nΜπορείτε να επικοινωνήσετε με τον/την $1 ή με έναν από τους άλλους [[{{MediaWiki:Grouppage-sysop}}|διαχειριστές]] για να συζητήσετε τη φραγή.\n\nΣημειώστε ότι δεν μπορείτε να χρησιμοποιήσετε το χαρακτηριστικό \"στείλτε e-mail σε αυτό τον χρήστη\" εκτός αν έχετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου καταχωρημένη στις [[Special:Preferences|προτιμήσεις χρήστη]] σας.\n\nΗ τρέχουσα διεύθυνση IP σας είναι $3, και ο αριθμός αναγνώρισης της φραγής σας είναι #$5. Παρακαλώ συμπεριλάβετε τις παραπάνω λεπτομέρειες σε όποια ερωτήματα κάνετε.",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-json-empty-object": "Κενό αντικείμενο",
+       "content-json-empty-array": "Κενός πίνακα",
        "duplicate-args-category": "Σελίδες που χρησιμοποιούν διπλές παραμέτρους σε κλήσεις προτύπων",
        "duplicate-args-category-desc": "Η σελίδα περιέχει κλήσεις πρότυπων που χρησιμοποιούν διπλές παραμέτρους, όπως <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.\n\nΠρέπει να περιέχει λιγότερες από $2 {{PLURAL:$2|κλήση|κλήσεις}}, τώρα {{PLURAL:$1|υπάρχει $1 κλήση|υπάρχουν $1 κλήσεις}}.",
        "revdelete-selected-text": "{{PLURAL:$1|Επιλεγμένη έκδοση|Επιλεγμένες εκδόσεις}} της [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Επιλεγμένη έκδοση αρχείου|Επιλεγμένες εκδόσεις αρχείου}} του [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Επιλεγμένο γεγονός αρχείου καταγραφής|Επιλεγμένα γεγονότα αρχείου καταγραφής}}:",
+       "revdelete-text-text": "Οι διαγραμμένες αναθεωρήσεις θα εξακολουθούν να εμφανίζονται στο ιστορικό της σελίδας, αλλά τα μέρη του περιεχομένου τους θα είναι απροσπέλαστα για το κοινό.",
+       "logdelete-text": "Οι διαγραμμένες καταγραφές ενεργειών θα εξακολουθούν να εμφανίζονται στις σελίδες καταγραφών, αλλά μέρη του περιεχομένου τους, θα είναι απροσπέλαστα για το κοινό.",
+       "revdelete-text-others": "Άλλοι διαχειριστές θα εξακολουθεί να είναι σε θέση να αποκτήσουν πρόσβαση στο κρυφό περιεχόμενο και για να αναιρέσουν τη διαγραφή, εκτός αν τίθενται πρόσθετοι περιορισμοί.",
        "revdelete-confirm": "Παρακαλούμε επιβεβαιώστε ότι σκοπεύετε να το κάνετε αυτό, ότι αντιλαμβάνεσθε τις συνέπειες, και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
        "revdelete-suppress-text": "Η καταστολή μπορεί να χρησιμοποιηθεί <strong> μόνο </strong> για τις ακόλουθες περιπτώσεις:\n* Ενδεχόμενη συκοφαντική δυσφήμιση\n* Ακατάλληλες προσωπικές πληροφορίες\n*: <em>διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. </em>",
        "revdelete-legend": "Θέστε περιορισμούς ορατότητας",
index 16a1e6a..ff16dda 100644 (file)
        "history-feed-description": "Revision history for this page on the wiki",
        "history-feed-item-nocomment": "$1 at $2",
        "history-feed-empty": "The requested page does not exist.\nIt may have been deleted from the wiki, or renamed.\nTry [[Special:Search|searching on the wiki]] for relevant new pages.",
+       "history-edit-tags": "Edit tags of selected revisions",
        "rev-deleted-comment": "(edit summary removed)",
        "rev-deleted-user": "(username removed)",
        "rev-deleted-event": "(log details removed)",
        "right-sendemail": "Send email to other users",
        "right-passwordreset": "View password reset emails",
        "right-managechangetags": "Create and delete [[Special:Tags|tags]] from the database",
+       "right-applychangetags": "Apply [[Special:Tags|tags]] along with one's changes",
+       "right-changetags": "Add and remove arbitrary [[Special:Tags|tags]] on individual revisions and log entries",
        "newuserlogpage": "User creation log",
        "newuserlogpagetext": "This is a log of user creations.",
        "rightslog": "User rights log",
        "action-editmyprivateinfo": "edit your private information",
        "action-editcontentmodel": "edit the content model of a page",
        "action-managechangetags": "create and delete tags from the database",
+       "action-applychangetags": "apply tags along with your changes",
+       "action-changetags": "add and remove arbitrary tags on individual revisions and log entries",
        "nchanges": "$1 {{PLURAL:$1|change|changes}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|since last visit}}",
        "enhancedrc-history": "history",
        "listfiles-delete": "delete",
        "listfiles-summary": "This special page shows all uploaded files.",
        "listfiles_search_for": "Search for media name:",
+       "listfiles-userdoesnotexist": "User account \"$1\" is not registered.",
        "imgfile": "file",
        "listfiles": "File list",
        "listfiles_thumb": "Thumbnail",
        "logempty": "No matching items in log.",
        "log-title-wildcard": "Search titles starting with this text",
        "showhideselectedlogentries": "Change visibility of selected log entries",
+       "log-edit-tags": "Edit tags of selected log entries",
        "allpages": "All pages",
        "allpages-summary": "",
        "nextpage": "Next page ($1)",
        "emailccsubject": "Copy of your message to $1: $2",
        "emailsent": "Email sent",
        "emailsenttext": "Your email message has been sent.",
-       "emailuserfooter": "This email was sent by $1 to $2 by the \"Email user\" function at {{SITENAME}}.",
+       "emailuserfooter": "This email was sent by $1 to $2 by the \"{{int:emailpage}}\" function at {{SITENAME}}.",
        "usermessage-summary": "Leaving system message.",
        "usermessage-editor": "System messenger",
        "usermessage-template": "MediaWiki:UserMessage",
        "patrol-log-page": "Patrol log",
        "patrol-log-header": "This is a log of patrolled revisions.",
        "log-show-hide-patrol": "$1 patrol log",
+       "log-show-hide-tag": "$1 tag log",
        "deletedrevision": "Deleted old revision $1",
        "filedeleteerror-short": "Error deleting file: $1",
        "filedeleteerror-long": "Errors were encountered while deleting the file:\n\n$1",
        "tags-deactivate-reason": "Reason:",
        "tags-deactivate-not-allowed": "It is not possible to deactivate the tag \"$1\".",
        "tags-deactivate-submit": "Deactivate",
+       "tags-apply-no-permission": "You do not have permission to apply change tags along with your changes.",
+       "tags-apply-not-allowed-one": "The tag \"$1\" is not allowed to be manually applied.",
+       "tags-apply-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually applied: $1",
+       "tags-update-no-permission": "You do not have permission to add or remove change tags from individual revisions or log entries.",
+       "tags-update-add-not-allowed-one": "The tag \"$1\" is not allowed to be manually added.",
+       "tags-update-add-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually added: $1",
+       "tags-update-remove-not-allowed-one": "The tag \"$1\" is not allowed to be removed.",
+       "tags-update-remove-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually removed: $1",
+       "tags-edit-title": "Edit tags",
+       "tags-edit-manage-link": "Manage tags",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Selected revision|Selected revisions}} of [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Selected log event|Selected log events}}:",
+       "tags-edit-revision-explanation": "",
+       "tags-edit-logentry-explanation": "",
+       "tags-edit-revision-legend": "Add or remove tags from {{PLURAL:$1|this revision|all $1 revisions}}",
+       "tags-edit-logentry-legend": "Add or remove tags from {{PLURAL:$1|this log entry|all $1 log entries}}",
+       "tags-edit-existing-tags": "Existing tags:",
+       "tags-edit-existing-tags-none": "''None''",
+       "tags-edit-new-tags": "New tags:",
+       "tags-edit-add": "Add these tags:",
+       "tags-edit-remove": "Remove these tags:",
+       "tags-edit-remove-all-tags": "(remove all tags)",
+       "tags-edit-chosen-placeholder": "Select some tags",
+       "tags-edit-chosen-no-results": "No tags found that match",
+       "tags-edit-reason": "Reason:",
+       "tags-edit-revision-submit": "Apply changes to {{PLURAL:$1|this revision|$1 revisions}}",
+       "tags-edit-logentry-submit": "Apply changes to {{PLURAL:$1|this log entry|$1 log entries}}",
+       "tags-edit-success": "<strong>The changes were successfully applied.</strong>",
+       "tags-edit-failure": "<strong>The changes could not be applied:</strong>\n$1",
+       "tags-edit-nooldid-title": "Invalid target revision",
+       "tags-edit-nooldid-text": "You have either not specified a target revision(s) to perform this function, or the specified revision does not exist.",
+       "tags-edit-none-selected": "Please select at least one tag to add or remove.",
        "comparepages": "Compare pages",
        "comparepages-summary": "",
        "compare-page1": "Page 1",
        "logentry-managetags-delete": "$1 {{GENDER:$2|deleted}} the tag \"$4\" (removed from $5 {{PLURAL:$5|revision or log entry|revisions and/or log entries}})",
        "logentry-managetags-activate": "$1 {{GENDER:$2|activated}} the tag \"$4\" for use by users and bots",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|deactivated}} the tag \"$4\" for use by users and bots",
+       "log-name-tag": "Tag log",
+       "log-description-tag": "This page shows when users have added or removed [[Special:Tags|tags]] from individual revisions or log entries. The log does not list tagging actions when they occur as part of an edit, deletion, or similar action.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|added}} the {{PLURAL:$7|tag|tags}} $6 to revision $4 of page $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|added}} the {{PLURAL:$7|tag|tags}} $6 to log entry $5 of page $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|removed}} the {{PLURAL:$9|tag|tags}} $8 from revision $4 of page $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|removed}} the {{PLURAL:$9|tag|tags}} $8 from log entry $5 of page $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|updated}} tags on revision $4 of page $3 ({{PLURAL:$7|added}} $6; {{PLURAL:$9|removed}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|updated}} tags on log entry $5 of page $3 ({{PLURAL:$7|added}} $6; {{PLURAL:$9|removed}} $8)",
        "rightsnone": "(none)",
        "revdelete-logentry": "changed revision visibility of \"[[$1]]\"",
        "logdelete-logentry": "changed event visibility of \"[[$1]]\"",
        "feedback-error1": "Error: Unrecognized result from API",
        "feedback-error2": "Error: Edit failed",
        "feedback-error3": "Error: No response from API",
+       "feedback-error4": "Error: Unable to post to given feedback title",
        "feedback-message": "Message:",
        "feedback-subject": "Subject:",
        "feedback-submit": "Submit",
        "log-name-pagelang": "Change language log",
        "log-description-pagelang": "This is a log of changes in page languages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|changed}} page language for $3 from $4 to $5.",
-       "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
+       "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following {{PLURAL:$4|skin|skins}}. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following {{PLURAL:$5|line|lines}} into <code>LocalSettings.php</code> to enable {{PLURAL:$5|the|all}} currently installed {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
        "default-skin-not-found-no-skins": "Whoops! The default skin for your wiki, defined in <code>$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabled''')",
index 4703218..3759bc8 100644 (file)
        "ipboptions": "2 horoj:2 hours,1 tago:1 day,3 tagoj:3 days,1 semajno:1 week,2 semajnoj:2 weeks,1 monato:1 month,3 monatoj:3 months,6 monatoj:6 months,1 jaro:1 year,porĉiam:infinite",
        "ipbhidename": "Kaŝi salutnomon de redaktoj kaj listoj",
        "ipbwatchuser": "Atenti la paĝojn por uzanto kaj diskuto de ĉi tiu uzanto.",
-       "ipb-disableusertalk": "Preventi ĉi tiun uzanton de redaktante ties propran diskuto-paĝon kiam forbarita",
+       "ipb-disableusertalk": "Preventi ĉi tiun uzanton redakti sian diskuto-paĝon, dum li estas forbarita",
        "ipb-change-block": "Reforbari la uzanton kun ĉi tiuj preferoj",
        "ipb-confirm": "Konfirmi forbaron",
        "badipaddress": "Neniu uzanto, aŭ la IP-adreso estas misformita.",
        "blockipsuccesssub": "Forbaro sukcesis.",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] estas forbarita. <br />\nVidu la [[Special:BlockList|liston de forbaroj]] por kontroli.",
        "ipb-blockingself": "Vi preskaŭ forbaros vin mem! Ĉu vi certas ke vi volas fari ĉi tiel?",
-       "ipb-confirmhideuser": "Vi preskaŭ forbaras uzanto kun \"kaŝi uzanton\" ŝalta. Ĉi tiu kaŝi la nomon de uzanto en ĉiuj listoj ka protokoloj. Ĉu vi certas ke vi volas fari ĉi tiel?",
+       "ipb-confirmhideuser": "Vi preskaŭ forbaras uzanton kun ŝaltita modo \"kaŝi uzanton\". Ĉi tio kaŝos la nomon de uzanto en ĉiuj listoj kaj protokoloj. Ĉu vi certas, ke vi volas fari ĉi tion?",
        "ipb-edit-dropdown": "Redakti kialojn por forbaro.",
        "ipb-unblock-addr": "Restarigi $1",
        "ipb-unblock": "Malforbari salutnomon aŭ IP-adreson",
        "ipb_already_blocked": "\"$1\" estas jam forbarita",
        "ipb-needreblock": "$1 estas jam forbarita. Ĉu vi volas ŝanĝi la opciojn?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Alia forbaro|Aliaj forbaroj}}",
-       "unblock-hideuser": "Vi ne povas malforbari ĉi tiun uzanton, pro ties salutnomo estis kaŝita.",
+       "unblock-hideuser": "Vi ne povas malforbari ĉi tiun uzanton, ĉar ties salutnomo estis kaŝita.",
        "ipb_cant_unblock": "Eraro: Forbar-identigo $1 ne estas trovita. Ĝi eble estis jam malforbarita.",
        "ipb_blocked_as_range": "Eraro: La IP-adreso $1 ne estas forbarita rekte kaj ne povas esti malforbarita. Tamen ĝi estas forbarita kiel parto de la intervalo $2, kiu ne povas esti malforbarita.",
        "ip_range_invalid": "Malvalida IP-adresa intervalo.",
        "import-rootpage-nosubpage": "La nomspaco \"$1\" de la radikopaĝo ne permesas subpaĝoj.",
        "importlogpage": "Protokolo de importaĵoj",
        "importlogpagetext": "Administrantecaj importoj de paĝoj kun redakto-historio de aliaj vikioj.",
-       "import-logentry-upload": "importita [[$1]] de dosiera alŝuto",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizio importita|revizioj importitaj}}",
-       "import-logentry-interwiki": "transvikiigita $1",
        "import-logentry-interwiki-detail": "Importis $1 {{PLURAL:$1|revizion|reviziojn}} de $2",
        "javascripttest": "Ĝavoskripta testado",
        "javascripttest-pagetext-noframework": "Ĉi tiu paĝo estas konservita por funkciigi testojn de JavaScript.",
        "logentry-upload-revert": "$1 {{GENDER:$2|alŝutis}} $3",
        "rightsnone": "(nenia)",
        "revdelete-summary": "redaktoresumon",
+       "feedback-adding": "Aldonanta respondon al la paĝo...",
+       "feedback-bugcheck": "Bonega! Nur konfirmu ke ĝi ne jam ekzistas inter la [$1 konataj cimoj].",
+       "feedback-bugnew": "Mi konfirmis. Raportu novan cimon.",
        "feedback-bugornote": "Se vi pretas priskribi teknikan problemon detale, bonvolu [$1 raporti cimon].\nAŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la paĝo \"[$3 $2]\", kune kun via salutnomo kaj uzita retumilo.",
-       "feedback-subject": "Temo:",
-       "feedback-message": "Mesaĝo:",
        "feedback-cancel": "Nuligi",
-       "feedback-submit": "Sendi Mesaĝon",
-       "feedback-adding": "Aldonanta respondon al la paĝo...",
+       "feedback-close": "Farita",
        "feedback-error1": "Eraro: Nerekonita rezulto de API",
        "feedback-error2": "Eraro: La redakto malsukcesis",
        "feedback-error3": "Eraro: Neniu respondo de API",
+       "feedback-message": "Mesaĝo:",
+       "feedback-subject": "Temo:",
+       "feedback-submit": "Sendi Mesaĝon",
        "feedback-thanks": "Dankon! Via opinio-esprimo estis afiŝita al la paĝo \"[$2 $1]\".",
-       "feedback-close": "Farita",
-       "feedback-bugcheck": "Bonega! Nur konfirmu ke ĝi ne jam ekzistas inter la [$1 konataj cimoj].",
-       "feedback-bugnew": "Mi konfirmis. Raportu novan cimon.",
        "searchsuggest-search": "Serĉi",
        "searchsuggest-containing": "enhavas...",
        "api-error-badaccess-groups": "Vi ne havas permeson alŝuti dosierojn al tiu ĉi vikio.",
        "mediastatistics-header-text": "Tekstaj",
        "mediastatistics-header-executable": "Plenumeblaj dosieroj",
        "json-error-state-mismatch": "JSON estas malvalida aŭ malformigita",
-       "json-error-syntax": "Sintaksa eraro"
+       "json-error-syntax": "Sintaksa eraro",
+       "special-characters-group-latin": "Latina",
+       "special-characters-group-latinextended": "Latina etendita",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboloj",
+       "special-characters-group-greek": "Greka",
+       "special-characters-group-cyrillic": "Cirila",
+       "special-characters-group-arabic": "Araba",
+       "special-characters-group-arabicextended": "araba etendite",
+       "special-characters-group-persian": "persa",
+       "special-characters-group-hebrew": "Hebrea",
+       "special-characters-group-bangla": "Bengala",
+       "special-characters-group-tamil": "Tamila",
+       "special-characters-group-telugu": "Telegua",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guĝarata",
+       "special-characters-group-devanagari": "Nagario",
+       "special-characters-group-thai": "Taja",
+       "special-characters-group-lao": "laŭa",
+       "special-characters-group-khmer": "kmera",
+       "special-characters-title-endash": "mallonga streketo",
+       "special-characters-title-emdash": "longa streketo",
+       "special-characters-title-minus": "minus-signo"
 }
index 4f38639..9f2744c 100644 (file)
                        "Paynekiller92",
                        "Kroji",
                        "JasterTDC",
-                       "Laurenslimb"
+                       "Laurenslimb",
+                       "Tusca"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "listfiles-delete": "borrar",
        "listfiles-summary": "Esta página especial muestra todos los archivos subidos.\nCuando el usuario la filtra, solo se muestran los archivos cargados por el usuario en su versión más reciente.",
        "listfiles_search_for": "Buscar por nombre de imagen:",
+       "listfiles-userdoesnotexist": "El usuario «$1» no está registrado.",
        "imgfile": "archivo",
        "listfiles": "Lista de archivos",
        "listfiles_thumb": "Miniatura",
        "feedback-error1": "Error: No se reconoce resultado de API",
        "feedback-error2": "Error: Falló la edición",
        "feedback-error3": "Error: No hay respuesta de la API",
+       "feedback-error4": "Error: correo no enviado por título no avalado",
        "feedback-message": "Mensaje:",
        "feedback-subject": "Asunto:",
        "feedback-submit": "Enviar",
        "log-name-pagelang": "Registro de cambios en idiomas",
        "log-description-pagelang": "Este es un registro de los cambios en los idiomas de las páginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} el idioma de la página «$3» del $4 al $5.",
-       "default-skin-not-found": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nLa instalación parece contener las siguientes apariencias. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para más información sobre cómo configurar y seleccionar la apariencia predeterminada.\n\n$2\n\n; Si acabas de instalar MediaWiki:\n: Probablemente la hayas instalado desde git, o directamente desde el código fuente usando algún otro método. Es normal que ocurra esto. Intenta instalar algunas apariencias desde [https://www.mediawiki.org/wiki/Category:All_skins el directorio de apariencias de mediawiki.org] ya sea:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio git si eres un desarrollador de MediaWiki.\n\n; Si acabas de actualizar MediaWiki:\n: A partir de MediaWiki 1.24 ya no se habilitan automáticamente las apariencias instaladas (revisa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puedes pegar las siguientes líneas en <code>LocalSettings.php</code> para habilitar todas las apariencias instaladas:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabas de modificar <code>LocalSettings.php</code>:\n: Comprueba detenidamente posibles errores tipográficos en los nombres de las apariencias.",
+       "default-skin-not-found": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nLa instalación parece contener {{PLURAL:$4|la siguiente apariencia|las siguientes apariencias}}. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para más información sobre cómo {{PLURAL:$4|activarla|activarlas y seleccionar la predeterminada}}.\n\n$2\n\n; Si acabas de instalar MediaWiki:\n: Probablemente la hayas instalado desde git, o directamente desde el código fuente usando algún otro método. Es normal que ocurra esto. Intenta instalar algunas apariencias desde [https://www.mediawiki.org/wiki/Category:All_skins el directorio de apariencias de mediawiki.org] ya sea:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> de ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio git si eres un desarrollador de MediaWiki.\n\n; Si acabas de actualizar MediaWiki:\n: A partir de MediaWiki 1.24 ya no se habilitan automáticamente las apariencias instaladas (revisa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puedes pegar {{PLURAL:$5|la siguiente línea|las siguientes líneas}} en <code>LocalSettings.php</code> para habilitar {{PLURAL:$5|la apariencia instalada|todas las apariencias instaladas}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabas de modificar <code>LocalSettings.php</code>:\n: Comprueba detenidamente posibles errores tipográficos en los nombres de las apariencias.",
        "default-skin-not-found-no-skins": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code>$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nNo tienes apariencias instaladas.\n\n; Si has instalado o actualizado MediaWiki recientemente:\n: Probablemente has instalado desde git, o directamente desde el código fuente usando algún otro método. Esto puede ocurrir en este caso. A partir de MediaWiki 1.24 ya no se incluye ninguna apariencia en el repositorio principal. Trata de instalar algunas apariencias desde el [https://www.mediawiki.org/wiki/Category:All_skins directorio de apariencias de mediawiki.org], ya sea:\n:* Descargando el [https://www.mediawiki.org/wiki/Download instalador tarball], que viene con varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando alguno de los repositorios en <code>mediawiki/skins/*</code> usando git en el directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio de MediaWiki si eres un desarrollador de MediaWiki. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para información sobre cómo habilitar las apariencias y seleccionar la predeterminada.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activado)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivado''')",
index b0afd78..af51a24 100644 (file)
        "listfiles-delete": "kustuta",
        "listfiles-summary": "Sellel erileheküljel näidatakse kõiki üles laaditud faile.",
        "listfiles_search_for": "Nimeotsing:",
+       "listfiles-userdoesnotexist": "Kasutajakonto \"$1\" pole registreeritud.",
        "imgfile": "fail",
        "listfiles": "Piltide loend",
        "listfiles_thumb": "Pisipilt",
        "emailccsubject": "Koopia sinu sõnumist kasutajale $1: $2",
        "emailsent": "E-kiri saadetud",
        "emailsenttext": "Sinu teade on e-kirjaga saadetud.",
-       "emailuserfooter": "Selle e-kirja saatis $1 {{GRAMMAR:elative|{{SITENAME}}}} kasutajale $2 toimingu \"Saada sellele kasutajale e-kiri\" abil.",
+       "emailuserfooter": "Selle e-kirja saatis $1 {{GRAMMAR:elative|{{SITENAME}}}} kasutajale $2 toimingu \"{{int:emailpage}}\" abil.",
        "usermessage-summary": "Jätan süsteemiteate.",
        "usermessage-editor": "Süsteemiteadete edastaja",
        "watchlist": "Jälgimisloend",
        "protect-locked-dblock": "Kaitstuse taset ei saa muuta, sest andmebaas on lukustatud.\nAllpool on toodud lehekülje '''$1''' hetkel kehtivad seaded:",
        "protect-locked-access": "Sinu kontol pole õigust muuta lehekülje kaitsetaset.\nAllpool on toodud lehekülje '''$1''' hetkel kehtivad seaded:",
        "protect-cascadeon": "See lehekülg on kaitstud, kuna ta on kasutusel {{PLURAL:$1|järgmisel leheküljel|järgmistel lehekülgedel}}, mis on omakorda kaskaadkaitse all.\nSelle lehekülje kaitsetaseme muutmine ei mõjuta kaskaadkaitset.",
-       "protect-default": "Luba kõigile kasutajatele",
+       "protect-default": "Lubatud kõigile kasutajatele",
        "protect-fallback": "Lubatud vaid kasutajatele õigusega \"$1\"",
        "protect-level-autoconfirmed": "Lubatud vaid automaatselt kinnitatud kasutajatele",
        "protect-level-sysop": "Lubatud vaid administraatoritele",
        "feedback-error1": "Tõrge: Tundmatu API tulemus",
        "feedback-error2": "Tõrge: Redigeerimine ebaõnnestus",
        "feedback-error3": "Tõrge: API ei vasta",
+       "feedback-error4": "Tõrge: Antud pealkirja alla ei õnnestunud tagasisidet postitada.",
        "feedback-message": "Sõnum:",
        "feedback-subject": "Teema:",
        "feedback-submit": "Saada",
        "log-name-pagelang": "Keele muutmise logi",
        "log-description-pagelang": "Siia on logitud lehekülgede keele muutmised.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5.",
-       "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
+       "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab {{PLURAL:$4|järgmist kujundust|järgmisi kujundusi}}. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas {{PLURAL:$4|seda|neid}} lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida {{PLURAL:$5|järgmise rea|järgmised read}} leheküljele <code>LocalSettings.php</code>, et lubada {{PLURAL:$5|ainus praegu paigaldatud kujundus|kõik praegu paigaldatud kujundused}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
        "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')",
index 0bf854a..ce80478 100644 (file)
        "disclaimers": "Fyrivarni",
        "disclaimerpage": "Project:Generelt fyrivarni",
        "edithelp": "Rættingarhjálp",
+       "helppage-top-gethelp": "Hjálp",
        "mainpage": "Forsíða",
        "mainpage-description": "Forsíða",
        "policy-url": "Project:Handfaring av persónligum upplýsingum",
        "hidetoc": "fjal",
        "collapsible-collapse": "Samanbrot",
        "collapsible-expand": "Víðka",
+       "confirmable-confirm": "Ert {{GENDER:$1|tú}} sikkur?",
        "confirmable-yes": "Ja",
        "confirmable-no": "Nei",
        "thisisdeleted": "Sí ella endurstovna $1?",
        "notextmatches": "Ongin síðutekstur samsvarar",
        "prevn": "undanfarnu {{PLURAL:$1|$1}}",
        "nextn": "næstu {{PLURAL:$1|$1}}",
+       "next-page": "næsta síða",
        "prevn-title": "Gomul $1 {{PLURAL:$1|úrslit|úrslit}}",
        "nextn-title": "Næstu $1 {{PLURAL:$1|úrslit|úrslit}}",
        "shown-title": "Vís $1 {{PLURAL:$1|úrslit|úrslit}} á hvørjari síðu",
        "search-result-category-size": "{{PLURAL:$1|1 limur|$1 limir}} ({{PLURAL:$2|1 undirbólkur|$2 undirbólkar}}, {{PLURAL:$3|1 fíla|$3 fílur}})",
        "search-redirect": "(umstilling $1)",
        "search-section": "(sektión $1)",
+       "search-category": "(bólkur $1)",
        "search-suggest": "Meinti tú: $1",
        "search-interwiki-caption": "Líknandi verkætlanir",
        "search-interwiki-default": "Úrslit frá $1:",
        "suppress": "Yvirlit",
        "booksources": "Bókakeldur",
        "booksources-search-legend": "Leita eftir bókum",
+       "booksources-search": "Leita",
        "specialloguserlabel": "Gjørt hevur:",
        "speciallogtitlelabel": "Mál (heiti ella brúkari):",
        "log": "Gerðabøkur",
        "import-options-wrong": "{{PLURAL:$2|Ikki loyvd innstilling|Ikki loyvdar innstillingar}}: <nowiki>$1</nowiki>",
        "importlogpage": "Innflutningsloggur.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versjón|versjónir}}",
-       "import-logentry-interwiki": "$1 varð flutt millum wikiir",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versjón|versjónir}} frá $2",
        "javascripttest": "Royndarkoyring av JavaScript",
        "javascripttest-pagetext-noframework": "Henda síðan er løgd av til at koyra JavaScript royndir.",
        "spambot_username": "MediaWiki spamm-reinsan",
        "spam_blanking": "Allar versjónir innihildu leinkjur til $1, tømir síðuna",
        "spam_deleting": "Allar versjónir innihalda leinkjur til $1, slettar",
+       "simpleantispam-label": "Anti-spam eftirlit.\nTú mást <strong>IKKI</strong> útfylla her!",
        "pageinfo-title": "Kunning um \"$1\"",
        "pageinfo-not-current": "Tað er tíverri ómøguligt at veita hesa kunning viðvíkjandi gomlum útgávum.",
        "pageinfo-header-basic": "Grundleggjandi kunning",
        "show-big-image": "Upprunafíla",
        "show-big-image-preview": "Stødd av hesi forskoðan: $1.",
        "show-big-image-other": "{{PLURAL:$2|Onnur upploysn|Aðrar upploysnir}}: $1.",
+       "show-big-image-size": "$1 × $2 pixels",
        "file-info-gif-frames": "$1 {{PLURAL:$1|ramma|rammur}}",
        "file-info-png-repeat": "spælt $1 {{PLURAL:$1|ferð|ferðir}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|ramma|rammur}}",
        "watchlisttools-view": "Vís viðkomandi broytingar",
        "watchlisttools-edit": "Vís og rætta eftirlit",
        "watchlisttools-raw": "Rætta rátt eftirlit",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|kjak]])",
        "duplicate-defaultsort": "'''Ávaring:''' Standard sorteringslykilin \"$2\" yvirtekur fyrrverandi standard sorteringslykilin \"$1\".",
        "version": "Útgáva",
        "version-skins": "Útsjóndir",
        "compare-rev1": "Versjón 1",
        "compare-rev2": "Versjón 2",
        "compare-submit": "Samanber",
+       "logentry-newusers-create": "Brúkarakonta $1 varð {{GENDER:$2|upprættað}}",
        "rightsnone": "(ongin)",
        "revdelete-summary": "yvirlit yvir broytingar",
        "searchsuggest-search": "Leita",
index 36c91e6..cedbfad 100644 (file)
        "wrongpassword": "Le mot de passe est incorrect. Veuillez essayer à nouveau.",
        "wrongpasswordempty": "Vous n'avez pas entré de mot de passe. Veuillez essayer à nouveau.",
        "passwordtooshort": "Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.",
+       "passwordtoolong": "Les mots de passe ne peuvent pas dépasser {{PLURAL:$1|1 caractère|$1 caractères}}.",
        "password-name-match": "Votre mot de passe doit être différent de votre nom d'utilisateur.",
        "password-login-forbidden": "L'utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
        "mailmypassword": "Réinitialiser le mot de passe",
        "notextmatches": "Aucun texte de page ne correspond à la recherche.",
        "prevn": "{{PLURAL:$1|précédente|$1 précédentes}}",
        "nextn": "{{PLURAL:$1|suivante|$1 suivantes}}",
+       "prev-page": "page précédente",
+       "next-page": "page suivante",
        "prevn-title": "$1 {{PLURAL:$1|résultat précédent|résultats précédents}}",
        "nextn-title": "$1 {{PLURAL:$1|résultat suivant|résultats suivants}}",
        "shown-title": "Afficher $1 résultat{{PLURAL:$1||s}} par page",
        "listfiles-delete": "supprimer",
        "listfiles-summary": "Cette page spéciale permet de lister tous les fichiers importés.",
        "listfiles_search_for": "Rechercher un nom de média :",
+       "listfiles-userdoesnotexist": "Le compte utilisateur « $1 » n’est pas enregistré.",
        "imgfile": "fichier",
        "listfiles": "Liste de fichiers",
        "listfiles_thumb": "Miniature",
        "emailccsubject": "Copie de votre message à $1 : $2",
        "emailsent": "Courriel envoyé",
        "emailsenttext": "Votre message a été envoyé par courriel.",
-       "emailuserfooter": "Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « Envoyer un courriel à l'utilisateur » de {{SITENAME}}.",
+       "emailuserfooter": "Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « {{int:emailpage}} » de {{SITENAME}}.",
        "usermessage-summary": "A laissé un message système.",
        "usermessage-editor": "Messager du système",
        "watchlist": "Liste de suivi",
        "feedback-error1": "Erreur : Résultat de l'IPA non reconnu",
        "feedback-error2": "Erreur : la modification a échoué",
        "feedback-error3": "Erreur : aucune réponse de l'API",
+       "feedback-error4": "Erreur : Impossible de publier sous le titre d’avis donné",
        "feedback-message": "Message :",
        "feedback-subject": "Objet :",
        "feedback-submit": "Envoyer",
        "log-name-pagelang": "Tracer les changements de langue",
        "log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.",
-       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
+       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure {{PLURAL:$4|l’habillage suivant|les habillages suivants}}. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment {{PLURAL:$4|l’|les }}activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller {{PLURAL:$5|la ligne suivante|les lignes suivantes}} dans <code>LocalSettings.php</code> pour activer {{PLURAL:$5|l’habillage actuellement installé|tous les habillages actuellement installés}} :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
        "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')",
index 570fd00..28daf16 100644 (file)
        "subject": "Ûnderwerp/kop:",
        "minoredit": "Dit is in tekstwiziging",
        "watchthis": "Folgje dizze side",
-       "savearticle": "Fêstlizze",
+       "savearticle": "Side bewarje",
        "preview": "Oerlêze",
        "showpreview": "Earst oerlêze",
        "showdiff": "Wizigings",
        "post-expand-template-argument-category": "Siden dy't missende sjabloaneleminten befetsje",
        "parser-template-loop-warning": "Der is in lus yn sjabloanen fûn: [[$1]]",
        "parser-template-recursion-depth-warning": "De werhellingsdjipte foar sjabloanen is oer de grins ($1)",
-       "undo-success": "De feroaring kin werom set wurde. Kontrolearje de ferliking hjirûnder om wis te wêzen dat jo dit feroarje wolle en druk dan op fêstlizze om it werom setten troch te fieren.",
+       "undo-success": "De feroaring kin werom set wurde.\nKontrolearje de ferliking hjirûnder om wis te wêzen dat jo dit feroarje wolle en druk dan op bewarje om it werom setten troch te fieren.",
        "undo-failure": "De feroarings kinne net werom set wurde troch in konflikt mei oare feroarings tuskentroch.",
        "undo-norev": "De feroaring kin werom set wurde, omdat it net bestiet of is wiske.",
        "undo-summary": "Werom sette fan ferzje $1 fan [[Special:Contributions/$2|$2]] ([[User talk:$2|Oerlis]])",
        "prefs-watchlist-edits-max": "Maksimum oantal: 1000",
        "prefs-misc": "Ferskaat",
        "prefs-resetpass": "Wachtwurd feroarje",
-       "saveprefs": "Fêstlizze",
+       "prefs-email": "E-mail",
+       "prefs-rendering": "Uterlik",
+       "saveprefs": "Bewarje",
        "restoreprefs": "Tebek nei de standertynstellings",
        "prefs-editing": "Siden bewurkje",
        "rows": "Rigen",
        "prefs-help-realname": "Echte namme is net ferplicht; as jo dy opjouwe kin dy namme brûkt wurde om jo erkenning te jaan foar jo wurk.",
        "prefs-help-email": "E-mail is opsjoneel, mar makket it mûglik jo wachtwurd te stjoeren as jo it fergetten hawwe.\nJo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwizing op jo brûkers- en oerlisside, sûnder dat jo jo identiteit oer hoege te jaan.",
        "prefs-help-email-required": "Hjir is in e-mailadres foar nedich.",
+       "prefs-info": "Basisynformaasje",
+       "prefs-i18n": "Taalynstellingen",
        "prefs-signature": "Sinjatuer",
        "prefs-dateformat": "Datumopmaak",
        "prefs-timeoffset": "Tiidsferskil",
        "editusergroup": "Wizigje meidoggerrjochten",
        "editinguser": "Bewurkje meidoggerrjochten fan <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Wizigje meidoggerrjochten",
-       "saveusergroups": "Meidoggerrjochten fêstlizze",
+       "saveusergroups": "Meidoggerrjochten bewarje",
        "userrights-groupsmember": "Sit yn group:",
        "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Jo kinne de groepen feroarje dêr't dizze brûker lid fan is.\n* In oankrúst fekje betsjut dat de brûker lid is fan 'e groep.\n* In net oankrúst fekje betsjut dat de brûker gjin lid is fan 'e groep.\n* In \"*\" betsjut dat jo in brûker net út in groep weihelje kinne nei't jo dy tafoege hawwe, of oarsom.",
        "fileexists-forbidden": "Der bestiet al in triem mei dizze namme.\nBied jo triem ûnder in oare namme oan.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Der bestiet al in triem mei dizze namme by de dielde triemmen.\nAs jo de triem dochs noch oanbiede wolle, gean dan werom en kies in oare namme.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Dizze triem is idintyk oan {{PLURAL:$1|de folgjende triem|de folgjende triemmen}}:",
-       "file-deleted-duplicate": "In bestân idintyk oan dit bestân ([[:$1]]) is foarhinne fuorthelle.\nRieplachtsje it fuorthel-logboek foar't jo fierder geane.",
+       "file-deleted-duplicate": "In triem idintyk oan dizze triem ([[:$1]]) is foarhinne fuorthelle.\nRieplachtsje it fuorthel-logboek foar't jo fierder geane.",
        "uploadwarning": "Oanbied-warskôging",
        "savefile": "Lis triem fêst",
        "uploaddisabled": "Sorry, op dizze tsjinner kin net oanbean wurde.",
        "listfiles-summary": "Op dizze spesjale side binne alle tafoege triemmen te besjen.\nStandert wurde de lêst tafoege triemmen boppe oan de list werjûn.\nKlikken op in kolomkop feroaret de sortearring.",
        "listfiles_search_for": "Sykje nei triem:",
        "imgfile": "triem",
-       "listfiles": "Ofbyld list",
+       "listfiles": "Triemlist",
        "listfiles_thumb": "Miniatuerôfbylding",
        "listfiles_date": "Datum",
        "listfiles_name": "Namme",
        "export-addcattext": "Siden tafoegje fan kategory:",
        "export-addcat": "Tafoegje",
        "export-addns": "Tafoegje",
-       "export-download": "Fêstlizze as triem",
+       "export-download": "Bewarje as triem",
        "export-templates": "Tafoegje berjochten",
        "allmessages": "Alle wikiberjochten",
        "allmessagesname": "Namme",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|meidogger|meidoggers}} $1",
        "spamprotectiontext": "De side dy't jo fêstlizze woene is blokkearre troch in spam filter. Dit wurdt wierskynlik feroarsake troch in ferwizing nei in ekstern webstee.",
        "spamprotectionmatch": "De neikommende tekst hat it spam filter aktivearre: $1",
+       "pageinfo-header-basic": "Basisynformaasje",
+       "pageinfo-header-properties": "Side-eigenskippen",
        "pageinfo-redirects-value": "$1",
        "pageinfo-toolboxlink": "Sidegegevens",
        "pageinfo-contentpage-yes": "Ja",
index e6adeee..7a79bd8 100644 (file)
        "wrongpassword": "O contrasinal escrito é incorrecto.\nPor favor, insira outro.",
        "wrongpasswordempty": "O campo do contrasinal estaba en branco.\nPor favor, inténteo de novo.",
        "passwordtooshort": "Os contrasinais deben conter, como mínimo, {{PLURAL:$1|1 carácter|$1 caracteres}}.",
+       "passwordtoolong": "Os contrasinais non deben ser máis longo de {{PLURAL:$1|1 carácter|$1 caracteres}}.",
        "password-name-match": "O seu contrasinal debe ser diferente do seu nome de usuario.",
        "password-login-forbidden": "O uso deste nome de usuario e contrasinal foi prohibido.",
        "mailmypassword": "Restablecer o contrasinal",
        "notextmatches": "Non se atopou o texto en ningunha páxina",
        "prevn": "{{PLURAL:$1|$1}} previas",
        "nextn": "{{PLURAL:$1|$1}} seguintes",
+       "prev-page": "páxina anterior",
+       "next-page": "páxina seguinte",
        "prevn-title": "{{PLURAL:$1|O resultado anterior|Os anteriores $1 resultados}}",
        "nextn-title": "{{PLURAL:$1|O seguinte resultado|Os seguintes $1 resultados}}",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por páxina",
        "listfiles-delete": "borrar",
        "listfiles-summary": "Esta páxina especial mostra todos os ficheiros cargados.",
        "listfiles_search_for": "Buscar polo nome do ficheiro multimedia:",
+       "listfiles-userdoesnotexist": "A conta de usuario \"$1\" non está rexistrada.",
        "imgfile": "ficheiro",
        "listfiles": "Lista de ficheiros",
        "listfiles_thumb": "Miniatura",
        "emailccsubject": "Copia da súa mensaxe para $1: $2",
        "emailsent": "Mensaxe enviada",
        "emailsenttext": "A súa mensaxe de correo electrónico foi enviada.",
-       "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"Enviar un correo electrónico a este usuario\" de {{SITENAME}}.",
+       "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"{{int:emailpage}}\" en {{SITENAME}}.",
        "usermessage-summary": "Mensaxe deixada polo sistema.",
        "usermessage-editor": "Editor das mensaxes do sistema",
        "watchlist": "Lista de vixilancia",
        "feedback-error1": "Erro: Resultado da API non recoñecido",
        "feedback-error2": "Erro: Fallo de edición",
        "feedback-error3": "Erro: Non hai resposta da API",
+       "feedback-error4": "Erro: Non foi posible enviar o seu comentario sobre o título selecionado",
        "feedback-message": "Mensaxe:",
        "feedback-subject": "Asunto:",
        "feedback-submit": "Enviar",
        "log-name-pagelang": "Rexistro de cambios de lingua",
        "log-description-pagelang": "Este é un rexistro dos cambios na lingua das páxinas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiou}} a lingua da páxina \"$3\" do $4 ao $5.",
-       "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír os aspectos da seguinte lista. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como activalos e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar as seguintes liñas no seu ficheiro <code>LocalSettings.php</code> para activar todos os aspectos instalados actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
+       "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír {{PLURAL:$4|o seguinte aspecto|os seguintes aspectos}}. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como {{PLURAL:$4|activalo|activalos}} e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar {{PLURAL:$5|a seguinte liña|as seguintes liñas}} no seu ficheiro <code>LocalSettings.php</code> para activar {{PLURAL:$5|o|todos os}} {{PLURAL:$5|aspecto instalado|aspectos instalados}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
        "default-skin-not-found-no-skins": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nNon ten aspectos instalados.\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración de aspectos] para obter información sobre como activar aspectos e escoller o aspecto predeterminado.",
        "default-skin-not-found-row-enabled": "* <code>$1</code>/$2 (activada)",
        "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')",
index dd47af1..3ac5b34 100644 (file)
@@ -47,7 +47,7 @@
        "tog-shownumberswatching": "Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)",
        "tog-oldsig": "Vorschau vu dr Unterschrift:",
        "tog-fancysig": "Signatur as Wikitext behandle (ohni automatischi Vergleichig)",
-       "tog-uselivepreview": "Live-Vorschau bruche (experimentell)",
+       "tog-uselivepreview": "Vorschau sofort aazeige",
        "tog-forceeditsummary": "Sag mer s, wänn i s Zämmefassigsfeld läär loss",
        "tog-watchlisthideown": "Eigeni Änderige uf d Beobachtigslischt usblände",
        "tog-watchlisthidebots": "Bot-Änderige in d Beobachtigslischt usblende",
        "pool-queuefull": "D Warteschlang isch voll",
        "pool-errorunknown": "Nit bekannte Fähler",
        "pool-servererror": "Dr Poolzellerdienscht isch nit verfiegbar ($1).",
+       "poolcounter-usage-error": "Verwändigsfähler: $1",
        "aboutsite": "Über {{GRAMMAR:akkusativ|{{SITENAME}}}}",
        "aboutpage": "Project:Über {{UCFIRST:{{GRAMMAR:akkusativ|{{SITENAME}}}}}}",
        "copyright": "Dr Inhalt vu dere Syte stoht unter dr Lizänz $1, wänn s nit andersch aagee isch.",
        "disclaimers": "Impressum",
        "disclaimerpage": "Project:Impressum",
        "edithelp": "Rotschläg fir s Bearbeite",
+       "helppage-top-gethelp": "Hilf",
        "mainpage": "Houptsyte",
        "mainpage-description": "Houptsyte",
        "policy-url": "Project:Leitlinie",
        "readonly_lag": "D Datebank isch automatisch gperrt wore, wil di verteilte Datebankserver (Sklave) mien mit em Hauptdatebankserver (Meischter) abgliche wäre.",
        "internalerror": "Interner Fähler",
        "internalerror_info": "Interne Fähler: $1",
+       "internalerror-fatal-exception": "Fatale Uusnahmefähler vum Typ „$1“",
        "filecopyerror": "D Datei $1 het nit no $2 chenne kopiert wäre.",
        "filerenameerror": "D Datei \"$1\" het nit in \"$2\" umgnennt werre kinne.",
        "filedeleteerror": "Datei \"$1\" het nit glöscht werre kinne.",
        "directorycreateerror": "S Verzeichnis „$1“ het nit chenne aaglait wäre.",
+       "directoryreadonlyerror": "S Werterbuech „$1“ isch schrybgschitzt.",
+       "directorynotreadableerror": "S Werterbuech „$1“ cha nit gläse wäre.",
        "filenotfound": "Datei \"$1\" isch nit gfunde worre.",
        "unexpected": "Wärt, wu nit erwartet woren isch: „$1“=„$2“.",
        "formerror": "Fähler: Ds Formular het nid chönne verarbeitet wärde",
        "wrongpassword": "Des Passwort isch falsch (oder fählt). Bitte versuech s nomol.",
        "wrongpasswordempty": "Du hesch vergässe dyy Passwort yyzgee. Bitte versuech s nomol.",
        "passwordtooshort": "Passwerter mien zmindescht {{PLURAL:$1|1 Zeiche|$1 Zeiche}} haa.",
+       "passwordtoolong": "Passwerter derfe nit lenger syy wie {{PLURAL:$1|ei|$1}} Zeiche.",
        "password-name-match": "Dyy Passwort muess sich vu Dyynem Benutzername unterscheide.",
        "password-login-forbidden": "D Verwändig vu däm Benutzernamen un Passwort isch verbotte.",
        "mailmypassword": "E nei Passwort schicke",
        "showhideselectedversions": "Uusgwehlti Versione zeige/verstecke",
        "editundo": "rückgängig",
        "diff-empty": "(kei Unterschid)",
+       "diff-multi-sameuser": "({{PLURAL:$1|E Version vum nämlige Benutzer, wu derzwische lyt, wird|$1 Versione vum nämlige Benutzer, wu derzwische lige, wäre}} nit aazeigt)",
        "diff-multi-manyusers": "({{PLURAL:$1|Ei Version|$1 Versione}} vu meh {{PLURAL:$2|eim Benutzer|$2 Benutzer}}, {{PLURAL:$1|wu derzwische lyt un nit aazeigt wird|wu derzwische lige un nit aazeigt wäre}})",
        "difference-missing-revision": "{{PLURAL:$2|Ei Version|$2 Versione}} vui däre Unterschidsaazeig ($1) {{PLURAL:$2|isch|sin}} nit gfunde wore.\n\nDää Fähler chunnt normalerwyys dur e veraltete Link zue dr Versionsgschicht vun ere Syte, wu in dr Zwischezyt glescht woren isch.\nEinzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech] bschaue.",
        "searchresults": "Suech-Ergäbnis",
        "shown-title": "Zeig $1 {{PLURAL:$1|Ergebnis|Ergebnis}} pro Syte",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) aazeige; ($3) uf ds Mal",
        "searchmenu-exists": "* Syte '''[[$1]]'''",
-       "searchmenu-new": "'''[[:$1|Leg d Syte ''$1'' in dem Wiki aa!]]'''",
+       "searchmenu-new": "<strong>Leg d Syte „[[:$1]]“ in däm Wiki aa.</strong> {{PLURAL:$2|0=|Lueg au d Syte, wu iber Dy Suech gfunde wore sin.|Lueg au di gfundene Suechergebnis.}}",
        "searchprofile-articles": "Inhaltssyte",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "searchrelated": "verwandt",
        "searchall": "alli",
        "showingresults": "Do {{PLURAL:$1|isch '''1''' Ergebnis|sin '''$1''' Ergebniss}}, s fangt aa mit dr Nummerer '''$2.'''",
+       "search-showingresults": "{{PLURAL:$4|Ergebnis <strong>$1</strong> vu <strong>$3</strong>|Ergebnis <strong>$1 bis $2</strong> vu <strong>$3</strong>}}",
        "search-nonefound": "Fir Dyyni Suechaafrog sin keini Ergebniss gfunde wore.",
        "powersearch-legend": "Erwytereti Suech",
        "powersearch-ns": "Suech in Namensryym:",
        "action-siteadmin": "d Datebank z sperre oder frejzgee",
        "action-sendemail": "E-Mail z schicke",
        "nchanges": "$1 {{PLURAL:$1|Änderig|Änderige}}",
+       "enhancedrc-history": "Versionsgschicht",
        "recentchanges": "Letschti Änderige",
        "recentchanges-legend": "Optione vu dr Aazeig",
        "recentchanges-summary": "Uf däre Syte chasch di letschte Änderige in däm Wiki aaluege.",
        "recentchanges-label-bot": "Die Bearbeitig isch dur e Bott uusgfiert wore",
        "recentchanges-label-unpatrolled": "Die Bearbeitig isch nonig vun eme Fäldhieter aagluegt wore",
        "recentchanges-label-plusminus": "Di gänderet Sytegreßi (Aazahl in Byte)",
+       "recentchanges-legend-heading": "'''Legänd:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lueg au d [[Special:NewPages|Lischt vu neie Syte]])",
        "rcnotefrom": "Des sin d Ändrige syter <b>$2</b> (bis zem <b>$1</b> zeigt).",
        "rclistfrom": "Nume Änderige syt $3, $2 Uhr zeige.",
        "querypage-disabled": "Die Spezialsyte isch deaktiviert wore us Leischtigserhaltigs-Grind.",
        "booksources": "ISBN-Suech",
        "booksources-search-legend": "Suech no Bezugsquälle fir Biecher",
+       "booksources-search": "Sueche",
        "booksources-text": "Des isch e Lischt mit Link zue Netzsyte, wu neiji un bruchti Biecher verchaufe. S cha syy, ass es dert au meh Informatione zue dr Biecher git. {{SITENAME}} isch mit keinem vu däne Aabieter gschäftli verbunde.",
        "booksources-invalid-isbn": "D ISBN isch schyyns falsch. Lueg no Fähler in dr Kopii.",
        "specialloguserlabel": "Benutzer, wu des gmacht het:",
        "import-rootpage-nosubpage": "Im Namensruum „$1“ vu dr Stammsyte sin kei Untersyte erlaubt.",
        "importlogpage": "Import-Logbuech",
        "importlogpagetext": "Adminischtrativer Import vo Sytene mit Versionsgschichte us anderi Wikis.",
-       "import-logentry-upload": "„[[$1]]“ isch vunere Datei importiert worde",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|Vérsion|Vérsiona}}",
-       "import-logentry-interwiki": "„$1“ isch importiert worde (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} vo $2",
        "javascripttest": "JavaScript-Tescht",
        "javascripttest-pagetext-noframework": "Die Syte isch reserviert fir JavaSkript-Tescht.",
        "tooltip-pt-mycontris": "Lischt vu Dyyne Byyträg",
        "tooltip-pt-login": "Aamälde",
        "tooltip-pt-logout": "Abmälde",
+       "tooltip-pt-createaccount": "Du chasch gärn e Bentuzerkonto aalege un Di aamälde. Du muesch s aber nit",
        "tooltip-ca-talk": "Diskussion zum Artikelinhalt",
        "tooltip-ca-edit": "Syte bearbeite. Bitte vor em Spychere d Vorschou aaluege.",
        "tooltip-ca-addsection": "Neje Abschnitt aafange",
        "spam_reverting": "Letschti Version ohni Links zue $1 widerhärgstellt.",
        "spam_blanking": "In allene Versione het s Links zue $1 gha, sufer gmacht.",
        "spam_deleting": "Alli Versione mit eme Link zue $1 sin glescht woret.",
-       "simpleantispam-label": "Spamschutz-Priefig. Do '''nyt''' yytrage!",
+       "simpleantispam-label": "Spamschutz-Priefig. \nDo <strong>NYT</strong> yytrage!",
        "pageinfo-title": "Informatione zue „$1“",
        "pageinfo-not-current": "Die Informatione chenne leider nit fir alti Versionen aazeigt wäre.",
        "pageinfo-header-basic": "Basisinformatione",
        "htmlform-chosen-placeholder": "Wehl en Option",
        "sqlite-has-fts": "$1 mit Unterstitzig vu dr Volltextsuechi",
        "sqlite-no-fts": "$1 ohni Unterstitzig vu dr Volltextsuechi",
-       "logentry-delete-delete": "$1 het d Syte $3 glöscht",
+       "logentry-delete-delete": "{{GENDER:$2|Dr|D|Dr}} $1 het d Syte $3 glöscht",
        "logentry-delete-restore": "$1 het d Syte $3 wiiderhergstellt",
        "logentry-delete-event": "$1 het die Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} uff $3: $4 gänderet",
        "logentry-delete-revision": "$1 het die Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} uff $3: $4 gänderet",
        "revdelete-uname-unhid": "Benutzername freigee",
        "revdelete-restricted": "Yyschränkige gälte au fir Ammanne",
        "revdelete-unrestricted": "Yyschränkige fir Ammanne ufghobe",
-       "logentry-move-move": "$1 het d Syte $3 nooch $4 verschobe",
+       "logentry-move-move": "{{GENDER:$2|Dr|D}} $1 het d Seite $3 uf $4 verschobe",
        "logentry-move-move-noredirect": "$1 het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
        "logentry-move-move_redir": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
        "logentry-move-move_redir-noredirect": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
        "logentry-patrol-patrol": "$1 het Version $4 vo Syte $3 als kontrolliert markiert",
        "logentry-patrol-patrol-auto": "$1 het Version $4 vo Syte $3 automatisch als kontrolliert markiert",
        "logentry-newusers-newusers": "Benutzerkonto $1 isch aagleit wore.",
-       "logentry-newusers-create": "Benutzerkonto $1 isch aagleit wore.",
+       "logentry-newusers-create": "Benutzerkonto $1 {{GENDER:$2|isch aagleit wore}}",
        "logentry-newusers-create2": "Benutzerkonto $3 isch aalgeit wore vu $1",
        "logentry-newusers-autocreate": "S Benutzerchonto $1 isch automatisch erstellt worde",
        "logentry-rights-rights": "$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
        "logentry-rights-rights-legacy": "$1 het d Gruppezuegherigkeit fir $3 gänderet",
        "logentry-rights-autopromote": "$1 isch automatisch vu $4 zue $5 zuegordnet wore",
+       "logentry-upload-upload": "{{GENDER:$2|Dr|D}} $1 het $3 uffeglade",
        "rightsnone": "(keini)",
        "revdelete-summary": "Zämmefassig",
        "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
        "expand_templates_remove_comments": "Kommentar useneh",
        "expand_templates_remove_nowiki": "<nowiki>-Befähl im Ergebnis unterdrucke",
        "expand_templates_generate_xml": "Zeig XML-Parser-Baum",
-       "expand_templates_preview": "Vorschou"
+       "expand_templates_preview": "Vorschou",
+       "special-characters-group-latin": "Latynisch",
+       "special-characters-group-latinextended": "Latin Extended",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbol",
+       "special-characters-group-greek": "Griechisch",
+       "special-characters-group-cyrillic": "Kyrillisch",
+       "special-characters-group-arabic": "Arabisch",
+       "special-characters-group-arabicextended": "Erwyyterts Arabisch",
+       "special-characters-group-persian": "Persisch",
+       "special-characters-group-hebrew": "Hebräisch",
+       "special-characters-group-bangla": "Bengalisch",
+       "special-characters-group-tamil": "Tamilisch",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singhalesisch",
+       "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"
 }
index 1c36479..0734b74 100644 (file)
@@ -28,7 +28,8 @@
                        "תומר ט",
                        "Matanya",
                        "GilCahana",
-                       "Ldorfman"
+                       "Ldorfman",
+                       "LaG roiL"
                ]
        },
        "tog-underline": "סימון קישורים בקו תחתי:",
        "go": "הצגה",
        "searcharticle": "לדף",
        "history": "היסטוריית הדף",
-       "history_short": "×\94×\99ס×\98×\95ר×\99×\99ת ×\94×\93×£",
+       "history_short": "×\94×\99ס×\98×\95ר×\99×\94",
        "updatedmarker": "עודכן מאז ביקורך האחרון",
        "printableversion": "גרסת הדפסה",
        "permalink": "קישור קבוע",
        "history-feed-description": "היסטוריית הגרסאות של הדף הזה בוויקי",
        "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": "(פרטים מהיומן הוסרו)",
        "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": "{{PLURAL:$1|שינוי אחד|$1 שינויים}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$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)",
        "emailccsubject": "העתק של הודעתך למשתמש $1: $2",
        "emailsent": "הדואר נשלח",
        "emailsenttext": "הודעת הדואר האלקטרוני שלך נשלחה.",
-       "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"שליחת דואר אלקטרוני למשתמש זה\" באתר {{SITENAME}}.",
+       "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"{{int:emailpage}}\" ב{{GRAMMAR:תחילית|{{SITENAME}}}}.",
        "usermessage-summary": "השארת הודעת מערכת.",
        "usermessage-editor": "שולח הודעות המערכת",
        "watchlist": "רשימת המעקב",
        "tooltip-n-portal": "אודות המיזם, כיצד תוכלו לעזור, היכן למצוא דברים",
        "tooltip-n-currentevents": "מציאת מידע רקע על האירועים האחרונים",
        "tooltip-n-recentchanges": "רשימת השינויים האחרונים באתר",
-       "tooltip-n-randompage": "צפ×\99×\99×\94 ×\91×\93×£ ×ª×\95×\9b×\9f אקראי",
+       "tooltip-n-randompage": "×\98×¢×\99נת ×\93×£ אקראי",
        "tooltip-n-help": "עזרה בשימוש באתר",
        "tooltip-t-whatlinkshere": "רשימת כל הדפים המקושרים לכאן",
        "tooltip-t-recentchangeslinked": "השינויים האחרונים שבוצעו בדפים המקושרים מדף זה",
        "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": "עריכת תגים",
        "comparepages": "השוואת דפים",
        "compare-page1": "דף 1",
        "compare-page2": "דף 2",
        "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> כ־<code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
+       "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את {{PLURAL:$4|העיצוב|העיצובים}} הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל {{PLURAL:$4|אותו|אותם ולבחור את עיצוב ברירת המחדל}}.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את {{PLURAL:$5|השורה הבאה|השורות הבאות}} לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את {{PLURAL:$5|העיצוב שמותקן|כל העיצובים שמותקנים}} כעת.\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
        "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה‏‏־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד ממאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (מופעל)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''מבוטל''')",
index a5f5815..3b11ca5 100644 (file)
@@ -60,7 +60,8 @@
                        "Phoenix303",
                        "Steinsplitter",
                        "Macofe",
-                       "Ankita-ks"
+                       "Ankita-ks",
+                       "Sahilrathod"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
@@ -70,7 +71,7 @@
        "tog-extendwatchlist": "केवल हालिया ही नहीं, बल्कि सभी परिवर्तनों को दिखाने के लिए ध्यानसूची को विस्तारित करें",
        "tog-usenewrc": "हाल में हुए परिवर्तनों में और ध्यानसूची में परिवर्तनों को पृष्ठ अनुसार समूहों में बाँटें",
        "tog-numberheadings": "शीर्षक स्व-क्रमांकित करें",
-       "tog-showtoolbar": "समà¥\8dपादन à¤\94à¤\9c़ारपट्टी दिखाएँ",
+       "tog-showtoolbar": "समà¥\8dपादन à¤\89पà¤\95रण पट्टी दिखाएँ",
        "tog-editondblclick": "दुगुने क्लिक पर पृष्ठ संपादित करें",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक करने पर अनुभाग सम्पादित करें",
        "tog-watchcreations": "मेरे द्वारा निर्मित पृष्ठों और मेरी अपलोड की फ़ाइलों को मेरी ध्यानसूची में जोड़ें",
        "notextmatches": "किसी भी पृष्ठ में यह सामग्री नहीं मिली",
        "prevn": "पिछले {{PLURAL:$1|$1}}",
        "nextn": "अगले {{PLURAL:$1|$1}}",
+       "prev-page": "पिछला पृष्ठ",
+       "next-page": "अगला पृष्ठ",
        "prevn-title": "{{PLURAL:$1|पिछला|पिछले}} $1 परिणाम",
        "nextn-title": "{{PLURAL:$1|अगला|अगले}} $1 परिणाम",
        "shown-title": "हर पृष्ठ पर $1 {{PLURAL:$1|परिणाम}} दिखाएँ",
index ea835c9..80a17fd 100644 (file)
        "content-model-text": "luty tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Pródzny objekt",
+       "content-json-empty-array": "Prózdna pólna wariabla",
        "expensive-parserfunction-warning": "Warnowanje: Tuta strona wobsahuje přewjele parserowych wołanjow.\n\nDyrbjała mjenje hač $2 {{PLURAL:$2|wołanje|wołanjej|wołanja|wołanjow}} měć, {{PLURAL:$1|je nětko $1 wołanje|stej nětko $1 wołanjej|su nětko $1 wołanja|je nětko $1 wołanjow}}.",
        "expensive-parserfunction-category": "Strony, kotrež tajke parserowe funkcije přehusto wołaja, kotrež serwer poćežuja.",
        "post-expand-template-inclusion-warning": "Warnowanje: Wulkosć zapřijatych předłohow je přewulka. Někotre předłohi so njezapřijmu.",
        "notextmatches": "Žane strony z wotpowědowacym tekstom",
        "prevn": "{{PLURAL:$1|předchadny $1|předchadnej $1|předchadne $1|předchadnych $1}}",
        "nextn": "{{PLURAL:$1|přichodny $1|přichodnej $1|přichodne $1|přichodnych $1}}",
+       "prev-page": "předchadna strona",
+       "next-page": "přichodna strona",
        "prevn-title": "{{PLURAL:$1|Předchadny wuslědk|Předchadnej $1 wuslědkaj|Předchadne $1 wuslědki|Předchadnych $1 wuslědkow}}",
        "nextn-title": "{{PLURAL:$1|Přichodny wuslědk|Přichodnej $1 wuslědkaj|Přichodne $1 wuslědki|Přichodnych $1 wuslědkow}}",
        "shown-title": "$1 {{PLURAL:$1|wuslědk|wuslědkaj|wuslědki|wuslědkow}} na stronu pokazać",
        "search-result-category-size": "{{PLURAL:$1|1 čłon|$1 čłonaj|$1 čłonojo|$1 čłonow}} ({{PLURAL:$2|1 podkategorija|$2 podkategoriji|$2 podkategorije|$2 podkategorijow}}, {{PLURAL:$3|1 dataja|$3 dataji|$3 dataje|$3 datajow}})",
        "search-redirect": "(Daleposrědkowanje $1)",
        "search-section": "(wotrězk $1)",
+       "search-category": "(kategorija $1)",
        "search-file-match": "(wotpowěduje datajowemu wobsahej)",
        "search-suggest": "Měnješe ty $1?",
        "search-interwiki-caption": "Sotrowske projekty",
        "searchall": "wšě",
        "showingresults": "Deleka so hač {{PLURAL:$1|'''1''' wuslědk pokazuje|'''$1''' wuslědkaj pokazujetej|'''$1''' wuslědki pokazuja|'''$1''' wuslědkow pokazuje}}, započinajo z #'''$2'''.",
        "showingresultsinrange": "Deleka so do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> hač do <strong>$3</strong> pokazuje.",
+       "search-showingresults": "{{PLURAL:$4|Wuslědk <strong>$1</strong> z <strong>$3</strong>|Wuslědki <strong>$1 - $2</strong> z <strong>$3</strong>}}",
        "search-nonefound": "Njebuchu wuslědki namakane, kotrež naprašowanju wotpowěduja.",
        "powersearch-legend": "Rozšěrjene pytanje",
        "powersearch-ns": "W mjenowych rumach pytać:",
        "prefs-personal": "Wužiwarski profil",
        "prefs-rc": "Aktualne změny",
        "prefs-watchlist": "Wobkedźbowanki",
+       "prefs-editwatchlist": "Wobkedźbowanki wobdźěłać",
+       "prefs-editwatchlist-label": "Zapiski we wobkedźbowankach wobdźěłać",
+       "prefs-editwatchlist-edit": "Titule w twojich wobkedźbowankach sej wobhladać a wotstronić",
+       "prefs-editwatchlist-raw": "Hrube wobkedźbowanki wobdźěłać",
+       "prefs-editwatchlist-clear": "Wobkedźbowanki wotstronić",
        "prefs-watchlist-days": "Ličba dnjow, kotrež maja so we wobkedźbowankach pokazać:",
        "prefs-watchlist-days-max": "Maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}}",
        "prefs-watchlist-edits": "Ličba změnow, kotrež maja so we wobkedźbowankach pokazać:",
        "right-protect": "Škitowe schodźenki změnić a z kaskadami škitane strony wobdźěłać",
        "right-editprotected": "Strony wobdźěłać, kotrež su přez \"{{int:protect-level-sysop}}\" škitane",
        "right-editsemiprotected": "Strony wobdźěłać, kotrež su přez \"{{int:protect-level-autoconfirmed}}\" škitane",
+       "right-editcontentmodel": "Wobsahowy model strony wobdźěłać",
        "right-editinterface": "Wužiwarski powjerch wobdźěłać",
        "right-editusercssjs": "Dataje CSS a JS druhich wužiwarjow wobdźěłać",
        "right-editusercss": "Dataje CSS druhich wužiwarjow wobdźěłać",
        "right-override-export-depth": "Strony inkluziwnje wotkazanych stronow hač do hłubokosće 5 eksportować",
        "right-sendemail": "Druhim wužiwarjam e-mejl pósłać",
        "right-passwordreset": "E-mejlki za wróćostajenje hesłow sej wobhladać",
+       "right-managechangetags": "[[Special:Tags|markěrowanja]] wutworić a z datoweje banki zhašeć",
        "newuserlogpage": "Protokol nowych wužiwarjow",
        "newuserlogpagetext": "To je protokol wutworjenja nowych wužiwarskich kontow.",
        "rightslog": "Protokol zrjadowanja wužiwarskich prawow",
        "action-viewmywatchlist": "Sej swójske wobkedźbowanki wobhladać",
        "action-viewmyprivateinfo": "twoje priwatne informacije sej wobhladać",
        "action-editmyprivateinfo": "twoje priwatne informacije wobdźěłać",
+       "action-editcontentmodel": "wobsahowy model strony wobdźěłać",
+       "action-managechangetags": "markěrowanja wutworić a z datoweje banki zhašeć",
        "nchanges": "$1 {{PLURAL:$1|změna|změnje|změny|změnow}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|wot poslednjeho wopyta}}",
        "enhancedrc-history": "historija",
        "listfiles-delete": "zhašeć",
        "listfiles-summary": "Tuta specialna strona pokazuje wšě nahrate dataje.",
        "listfiles_search_for": "Za mjenom wobraza pytać:",
+       "listfiles-userdoesnotexist": "Wužiwarske konto \"$1\" zregistrowane njeje.",
        "imgfile": "dataja",
        "listfiles": "Lisćina datajow",
        "listfiles_thumb": "Wobrazk",
        "pager-older-n": "{{PLURAL:$1|starši 1|staršej $1|starše $1|staršich $1}}",
        "suppress": "Dohladowanje",
        "querypage-disabled": "Tuta specialna strona je z wukonowych přičinow znjemóžnjena.",
+       "apihelp": "API-pomoc",
+       "apihelp-no-such-module": "Modul \"$1\" njeje so namakał.",
        "booksources": "Pytanje po ISBN",
        "booksources-search-legend": "Žórła za knihi pytać",
+       "booksources-search": "Pytać",
        "booksources-text": "To je lisćina wotkazow k druhim sydłam, kotrež nowe a trjebane knihi předawaja. Tam móžeš tež dalše informacije wo knihach dóstać, kotrež pytaš:",
        "booksources-invalid-isbn": "Podate ISBN-čisło njezda so płaćiwe być; přepruwuj za zmylkami, z tym zo z orginialneho žórła kopěruješ.",
        "specialloguserlabel": "Wukonjer:",
        "tooltip-pt-mycontris": "Lisćina twojich přinoškow",
        "tooltip-pt-login": "Móžeš so woměrje přizjewić, to pak zawjazowace njeje.",
        "tooltip-pt-logout": "so wotzjewić",
+       "tooltip-pt-createaccount": "Pozbudźujemy će, konto załožić a so přizjewić; njeje wšak nuznje trěbne",
        "tooltip-ca-talk": "diskusija wo stronje",
        "tooltip-ca-edit": "Móžeš stronu wobdźěłać. Prošu wužij tłóčku „Přehlad” do składowanja.",
        "tooltip-ca-addsection": "Nowy wotrězk započeć",
index 665a98c..021bd91 100644 (file)
        "right-purge": "oldal gyorsítótárának ürítése megerősítés nélkül",
        "right-autoconfirmed": "Nem érinti az IP-alapú szerkesztéskorlátozás",
        "right-bot": "automatikus folyamatként való kezelés",
-       "right-nominornewtalk": "felhasználói lapok nem apró szerkesztésével megjelenik az új üzenet szöveg",
+       "right-nominornewtalk": "felhasználói lapok apró szerkesztésével nem jelenik meg az új üzenet értesítés",
        "right-apihighlimits": "nagyobb mennyiségű lekérdezés az API-n keresztül",
        "right-writeapi": "a szerkesztő-API használata",
        "right-delete": "lapok törlése",
        "statistics-users": "Regisztrált [[Speciális:Szerkesztők listája|szerkesztők]]",
        "statistics-users-active": "Aktív szerkesztők",
        "statistics-users-active-desc": "Szerkesztők, akik csináltak valamit az elmúlt {{PLURAL:$1|egy|$1}} napban",
+       "pageswithprop": "Laptulajdonsággal rendelkező lapok",
        "pageswithprop-prop": "Tulajdonságnév:",
        "pageswithprop-submit": "Ugrás",
        "doubleredirects": "Dupla átirányítások",
        "revertpage-nouser": "Visszaállítottam a lap korábbi változatát (szerkesztőnév eltávolítva) szerkesztéséről [[User:$1|$1]] szerkesztésére",
        "rollback-success": "$1 szerkesztéseit visszaállítottam $2 utolsó változatára.",
        "sessionfailure-title": "Munkamenethiba",
-       "sessionfailure": "Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel;\nez a művelet a munkamenet eltérítése miatti óvatosságból megszakadt.\nKérjük, hogy nyomd meg a \"vissza\" gombot, és töltsd le újra az oldalt, ahonnan jöttél, majd próbáld újra.",
+       "sessionfailure": "Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel;\nez a művelet a munkamenet eltérítése miatti óvatosságból megszakadt.\nKérjük, hogy nyomd meg a „vissza” gombot, és töltsd le újra az oldalt, ahonnan jöttél, majd próbáld újra.",
        "protectlogpage": "Lapvédelmi napló",
        "protectlogtext": "Alább látható a lapvédelemmel kapcsolatos változtatások listája.\nA [[Special:ProtectedPages|védett lapok listáján]] megtekintheted a jelenleg is érvényben lévő védelmeket.",
        "protectedarticle": "levédte a(z) [[$1]] lapot",
index 3f6eb71..9434ddc 100644 (file)
@@ -13,7 +13,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Carlosedepaula",
-                       "Macofe"
+                       "Macofe",
+                       "Karmwiki"
                ]
        },
        "tog-underline": "Sublinear ligamines:",
        "wrongpassword": "Le contrasigno que tu entrava es incorrecte. Per favor reprova.",
        "wrongpasswordempty": "Tu non entrava un contrasigno. Per favor reprova.",
        "passwordtooshort": "Le contrasignos debe continer al minus {{PLURAL:$1|1 character|$1 characteres}}.",
+       "passwordtoolong": "Le contrasignos non pote esser plus longe de {{PLURAL:$1|1 character|$1 characteres}}.",
        "password-name-match": "Tu contrasigno debe esser differente de tu nomine de usator.",
        "password-login-forbidden": "Le uso de iste nomine de usator e contrasigno ha essite prohibite.",
        "mailmypassword": "Reinitialisar contrasigno",
        "missingcommentheader": "'''Rememoration:''' Tu non ha specificate un subjecto/titulo pro iste commento.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin titulo.",
        "summary-preview": "Previsualisation del summario:",
        "subject-preview": "Previsualisation del subjecto/titulo:",
+       "previewerrortext": "Un error ha occurrite durante le tentativa de previsualisar le cambiamentos.",
        "blockedtitle": "Le usator es blocate",
        "blockedtext": "'''Tu nomine de usator o adresse IP ha essite blocate.'''\n\nLe blocada esseva facite per $1.\nLe motivo presentate es ''$2''.\n\n* Initio del blocada: $8\n* Expiration del blocada: $6\n* Le blocato intendite: $7\n\nTu pote contactar $1 o un altere [[{{MediaWiki:Grouppage-sysop}}|administrator]] pro discuter le blocada.\nTu non pote usar le function 'inviar e-mail a iste usator' salvo que un adresse de e-mail valide es specificate in le\n[[Special:Preferences|preferentias de tu conto]] e que tu non ha essite blocate de usar lo.\nTu adresse IP actual es $3, e le ID del blocada es #$5.\nPer favor include tote le detalios supra specificate in omne correspondentia.",
        "autoblockedtext": "Tu adresse de IP ha essite automaticamente blocate proque un altere usator lo usava qui esseva blocate per $1.\nLe motivo presentate es:\n\n:''$2''\n\n* Initio del blocada: $8\n* Expiration del blocada: $6\n* Blocato intendite: $7\n\nTu pote contactar $1 o un del altere [[{{MediaWiki:Grouppage-sysop}}|administratores]] pro discuter le blocada.\n\nNota que tu non pote utilisar le function \"inviar e-mail a iste usator\" salvo que tu ha registrate un adresse de e-mail valide in tu [[Special:Preferences|preferentias de usator]] e que tu non ha essite blocate de usar lo.\n\nTu adresse IP actual es $3, e le ID del blocada es #$5.\nPer favor include tote le detalios supra specificate in omne correspondentia.",
        "notextmatches": "Nulle resultato in le texto de paginas",
        "prevn": "$1 {{PLURAL:$1|precedente|precedentes}}",
        "nextn": "$1 {{PLURAL:$1|sequente|sequentes}}",
+       "prev-page": "pagina precedente",
+       "next-page": "pagina sequente",
        "prevn-title": "$1 {{PLURAL:$1|resultato|resultatos}} precedente",
        "nextn-title": "$1 {{PLURAL:$1|resultato|resultatos}} sequente",
        "shown-title": "Monstrar $1 {{PLURAL:$1|resultato|resultatos}} per pagina",
        "unusedimages": "Imagines non usate",
        "wantedcategories": "Categorias plus demandate",
        "wantedpages": "Paginas plus demandate",
+       "wantedpages-summary": "Lista del paginas non existente con le major numero de ligamines verso illos, excludente le paginas que ha solmente redirectiones que liga verso illos. Pro un lista del paginas non existente que ha redirectiones que liga verso illos, vide [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
        "wantedfiles": "Files desirate",
        "wantedfiletext-cat": "Le sequente files es usate ma non existe. Le files ab repositorios externe pote esser listate malgrado que illos existe. Omne tal false positivos essera <del>cancellate</del>. In addition, paginas que incorpora files que non existe es listate in [[:$1]].",
        "emailccsubject": "Copia de tu message a $1: $2",
        "emailsent": "E-mail inviate",
        "emailsenttext": "Tu message de e-mail ha essite inviate.",
-       "emailuserfooter": "Iste e-mail esseva inviate per $1 a $2 con le function \"Inviar e-mail al usator\" a {{SITENAME}}.",
+       "emailuserfooter": "Iste e-mail ha essite inviate per $1 a $2 con le function \"{{int:emailpage}}\" in {{SITENAME}}.",
        "usermessage-summary": "Lassante un message de systema.",
        "usermessage-editor": "Messagero del systema",
        "watchlist": "Observatorio",
index 0e46d5e..7ac698b 100644 (file)
@@ -37,7 +37,8 @@
                        "Raynasution",
                        "Arifin.wijaya",
                        "Ahdan",
-                       "Macofe"
+                       "Macofe",
+                       "Totosunarto"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
@@ -54,6 +55,7 @@
        "tog-watchdefault": "Tambahkan halaman yang saya sunting ke daftar pantauan",
        "tog-watchmoves": "Tambahkan halaman yang saya pindahkan ke daftar pantauan",
        "tog-watchdeletion": "Tambahkan halaman yang saya hapus ke daftar pantauan",
+       "tog-watchrollback": "Tambahkan laman di mana saya telah melakukan rollback watchlist saya",
        "tog-minordefault": "Tandai semua suntingan sebagai suntingan kecil secara baku",
        "tog-previewontop": "Perlihatkan pratayang sebelum kotak sunting dan tidak sesudahnya",
        "tog-previewonfirst": "Perlihatkan pratayang pada suntingan pertama",
        "disclaimers": "Penyangkalan",
        "disclaimerpage": "Project:Penyangkalan umum",
        "edithelp": "Bantuan penyuntingan",
+       "helppage-top-gethelp": "Tolong",
        "mainpage": "Halaman Utama",
        "mainpage-description": "Halaman Utama",
        "policy-url": "Project:Kebijakan",
        "readonly_lag": "Basis data telah dikunci otomatis selagi basis data sekunder melakukan sinkronisasi dengan basis data utama",
        "internalerror": "Kesalahan internal",
        "internalerror_info": "Kesalahan internal: $1",
+       "internalerror-fatal-exception": "Kekecualian fatal mengetik \"$1\"",
        "filecopyerror": "Tidak dapat menyalin berkas \"$1\" ke \"$2\".",
        "filerenameerror": "Tidak dapat mengubah nama berkas \"$1\" menjadi \"$2\".",
        "filedeleteerror": "Tidak dapat menghapus berkas \"$1\".",
        "wrongpassword": "Kata sandi yang Anda masukkan salah. Silakan coba lagi.",
        "wrongpasswordempty": "Anda tidak memasukkan kata sandi. Silakan coba lagi.",
        "passwordtooshort": "Kata sandi paling tidak harus terdiri dari {{PLURAL:$1|1 karakter|$1 karakter}}.",
+       "passwordtoolong": "Passwords tidak boleh lebih dari {{PLURAL:$1|1 character|$1 characters}}.",
        "password-name-match": "Kata sandi Anda harus berbeda dari nama pengguna Anda.",
        "password-login-forbidden": "Penggunaan nama pengguna dan sandi ini telah dilarang.",
        "mailmypassword": "Setel ulang kata sandi",
        "missingcommentheader": "''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan \"{{int:savearticle}}\", suntingan Anda akan disimpan tanpa komentar tersebut.",
        "summary-preview": "Pratayang ringkasan:",
        "subject-preview": "Pratayang subyek/tajuk:",
+       "previewerrortext": "Kesalahan terjadi saat mencoba meninjau perubahan anda",
        "blockedtitle": "Pengguna diblokir",
        "blockedtext": "'''Nama pengguna atau alamat IP Anda telah diblokir.'''\n\nBlokir dilakukan oleh $1.\nAlasan yang diberikan adalah ''$2''.\n\n* Diblokir sejak: $8\n* Blokir kedaluwarsa pada: $6\n* Sasaran pemblokiran: $7\n\nAnda dapat menghubungi $1 atau [[{{MediaWiki:Grouppage-sysop}}|pengurus lainnya]] untuk membicarakan hal ini.\n\nAnda tidak dapat menggunakan fitur 'Kirim surel ke pengguna ini' kecuali Anda telah memasukkan alamat surel yang sah di [[Special:Preferences|preferensi akun]] dan Anda tidak diblokir untuk menggunakannya.\n\nAlamat IP Anda adalah $3, dan ID pemblokiran adalah $5.\nTolong sertakan salah satu atau kedua informasi ini pada setiap pertanyaan yang Anda buat.",
        "autoblockedtext": "Alamat IP Anda telah terblokir secara otomatis karena digunakan oleh pengguna lain, yang diblokir oleh $1. Pemblokiran dilakukan atas alasan:\n\n:''$2''\n\n* Diblokir sejak: $8\n* Blokir kedaluwarsa pada: $6\n* Sasaran pemblokiran: $7\n\nAnda dapat menghubungi $1 atau [[{{MediaWiki:Grouppage-sysop}}|pengurus lainnya]] untuk membicarakan hal ini.\n\nAnda tidak dapat menggunakan fitur \"kirim surel ke pengguna ini\" kecuali Anda telah memasukkan alamat surel yang sah di [[Special:Preferences|preferensi akun]] Anda dan Anda tidak diblokir untuk menggunakannya.\n\nAlamat IP Anda saat ini adalah $3, dan ID pemblokiran adalah #$5.\nTolong sertakan informasi-informasi ini dalam setiap pertanyaan Anda.",
        "rev-deleted-event": "(rincian log dihapus)",
        "rev-deleted-user-contribs": "[nama pengguna atau alamat IP dihapus - suntingan disembunyikan pada daftar kontribusi]",
        "rev-deleted-text-permission": "Revisi halaman ini telah '''dihapus'''.\nRinciannya mungkin tersedia di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan]",
+       "rev-suppressed-text-permission": "Revisi laman ini adalah <strong>suppressed</strong>. Detail dapat ditemukan di [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
        "rev-deleted-text-unhide": "Revisi ini telah '''dihapus'''.\nRinciannya mungkin tersedia di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].\nSebagai seorang pengurus Anda masih dapat [$1 melihat revisi ini] jika Anda mau.",
        "rev-suppressed-text-unhide": "Revisi halaman ini telah '''disupresi'''.\nRinciannya mungkin tersedia di [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log supresi].\nSebagai seorang pengurus, Anda masih dapat [$1 melihat revisi ini] jika Anda mau.",
        "rev-deleted-text-view": "Revisi ini telah '''dihapus'''.\nSebagai seorang pengurus, Anda dapat melihatnya; rinciannya mungkin tersedia di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "notextmatches": "Tidak ada teks halaman yang cocok",
        "prevn": "{{PLURAL:$1|$1}} sebelumnya",
        "nextn": "{{PLURAL:$1|$1}} selanjutnya",
+       "prev-page": "Halaman sebelumnya",
+       "next-page": "Halaman selanjutnya",
        "prevn-title": "$1 {{PLURAL:$1|hasil|hasil}} sebelumnya",
        "nextn-title": "$1 {{PLURAL:$1|hasil|hasil}} selanjutnya",
        "shown-title": "Tampilkan $1 {{PLURAL:$1|hasil}} per halaman",
        "right-protect": "Ubah tingkat pelindungan dan sunting halaman yang dilindungi beruntun",
        "right-editprotected": "Sunting halaman yang dilindungi sebagai \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Sunting halaman yang dilindungi sebagai \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Edit model konten halaman",
        "right-editinterface": "Menyunting antarmuka pengguna",
        "right-editusercssjs": "Menyunting arsip CSS dan JS pengguna lain",
        "right-editusercss": "Menyunting berkas CSS pengguna lain",
        "right-override-export-depth": "Ekspor halaman termasuk halaman-halaman terkait hingga kedalaman 5",
        "right-sendemail": "Mengirim surel ke pengguna lain",
        "right-passwordreset": "Lihat surel pengaturulangan kata sandi",
+       "right-managechangetags": "Membuat dan menghapus  [[Special:Tags|tags]] dari database",
        "newuserlogpage": "Log pengguna baru",
        "newuserlogpagetext": "Di bawah ini adalah log pendaftaran pengguna baru",
        "rightslog": "Log perubahan hak akses",
        "action-viewmywatchlist": "lihat daftar pantau Anda",
        "action-viewmyprivateinfo": "lihat informasi pribadi Anda",
        "action-editmyprivateinfo": "sunting informasi pribadi Anda",
+       "action-editcontentmodel": "mengedit model konten sebuah halaman",
+       "action-managechangetags": "Membuat dan menghapus label dari database",
        "nchanges": "$1 {{PLURAL:$1|perubahan|perubahan}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sejak kunjungan terakhir}}",
        "enhancedrc-history": "riwayat",
        "unusedimages": "Berkas yang tak digunakan",
        "wantedcategories": "Kategori yang diinginkan",
        "wantedpages": "Halaman yang diinginkan",
+       "wantedpages-summary": "Daftar laman tak tersedia dengan tautan pada mereka, tidak termasuk laman yang hanya memiliki penautan pengalihan pada mereka.Untuk daftar laman tak tersedia yang memiliki penautan pengalihan pada mereka, lihat [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Judul tak valid dalam himpunan hasil: $1",
        "wantedfiles": "Berkas yang diinginkan",
        "wantedfiletext-cat": "Berkas-berkas berikut digunakan tetapi tidak ada. Berkas dari repositori asing mungkin tercantum meskipun ada. Setiap \"false positive\" akan <del>dicoret</del>. Selain itu, halaman yang menggunakan berkas yang tidak ada akan dicantumkan dalam [[:$1]].",
        "trackingcategories-desc": "Kriteria inklusi kategori",
        "noindex-category-desc": "Halaman tidak diindeks oleh robot karena ini mempunyai kata khusus <code><nowiki>__NOINDEX__</nowiki></code> padanya dan berada dalam ruang nama yang mengizinkan penanda itu.",
        "index-category-desc": "Halaman ini memiliki <code><nowiki>__INDEX__</nowiki></code> di atasnya (dan dalam ruang nama yang mana bendera yang diperbolehkan), dan karenanya diindeks oleh robot di mana itu biasanya tidak akan.",
-       "post-expand-template-inclusion-category-desc": "Setelah memperluas semua templat, ukuran halaman menjadi lebih besar dari <code>$wgMaxArticleSize</code>, sehingga beberapa templat tidak diperluas.",
-       "post-expand-template-argument-category-desc": "Setelah memperluas argumen templat (sesuatu dalam tiga tanda kurung, seperti <code>{{{Foo}}}</code>), halaman tersebut lebih besar dari <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "Terlalu banyak fungsi parser (seperti <code>#ifexist</code>) termasuk pada halaman. Lihat [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Kategori ditambahkan jika halaman tersebut berisi pranala rusak (pranala untuk menanamkan sebuah berkas ketika berkas tersebut tidak ada).",
-       "hidden-category-category-desc": "Ini adalah kategori dengan <code><nowiki>__HIDDENCAT__</nowiki></code> di atasnya, yang mencegah dari muncul di kotak tautan kategori pada halaman, secara default.",
+       "post-expand-template-inclusion-category-desc": "Ukuran laman lebih besar dari <code>$wgMaxArticleSize</code> setelah memperluas semua template, sehingga beberapa template tidak diperluas",
+       "post-expand-template-argument-category-desc": "Laman lebih besar dari <code>$wgMaxArticleSize</code> setelah memperluas argumen template (something in triple braces, like <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "Laman menggunakan terlalu banyak fungsi parser (seperti <code>#ifexist</code>). Lihat [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Laman berisi sebuah tautan file rusak (sebuah tautan untuk menanam file saat file tidak ada)",
+       "hidden-category-category-desc": "Kategori ini berisikan <code><nowiki>__HIDDENCAT__</nowiki></code> di dalam konten laman, yang mencegahnya muncul di kotak tautan kategori pada laman, secara standar.",
        "trackingcategories-nodesc": "Deskripsi tidak tersedia.",
        "trackingcategories-disabled": "Kategori dinonaktifkan",
        "mailnologin": "Tidak ada alamat surel",
        "emailccsubject": "Salinan pesan Anda untuk $1: $2",
        "emailsent": "Surel terkirim",
        "emailsenttext": "Surel Anda telah dikirimkan.",
-       "emailuserfooter": "Surel ini dikirimkan oleh $1 kepada $2 menggunakan fungsi \"Surel Pengguna\" di {{SITENAME}}.",
+       "emailuserfooter": "Email ini dikirimkan dengan $1 pada $2 dengan fungsi \"{{int:emailpage}}\" pada {{SITENAME}}.",
        "usermessage-summary": "Tinggalkan pesan sistem.",
        "usermessage-editor": "Penyampai pesan sistem",
        "usermessage-template": "MediaWiki:UserMessage",
        "mywatchlist": "Daftar pantauan",
        "watchlistfor2": "Untuk $1 $2",
        "nowatchlist": "Daftar pantauan Anda kosong.",
-       "watchlistanontext": "Silakan $1 untuk melihat atau menyunting daftar pantauan Anda.",
+       "watchlistanontext": "Silahkan login untuk melihat atau mengedit item pada daftarjaga anda",
        "watchnologin": "Belum masuk log",
        "addwatch": "Tambahkan ke daftar pantauan",
        "addedwatchtext": "Halaman \"[[:$1]]\" telah ditambahkan ke [[Special:Watchlist|daftar pantauan]] Anda.\nPerubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini.",
        "watchlist-details": "Terdapat {{PLURAL:$1|$1 halaman|$1 halaman}} di daftar pantauan Anda, tidak termasuk halaman pembicaraan.",
        "wlheader-enotif": "Notifikasi surel diaktifkan.",
        "wlheader-showupdated": "Halaman-halaman yang telah berubah sejak kunjungan terakhir Anda ditampilkan dengan '''huruf tebal'''.",
-       "wlnote": "Di bawah ini adalah {{PLURAL:$1|perubahan|'''$1''' perubahan}} terakhir dalam '''$2''' jam terakhir, per $3, $4.",
-       "wlshowlast": "Tampilkan $1 jam $2 hari terakhir",
+       "wlnote": "Dibawah {{PLURAL:$1|is the last change|are the last <strong>$1</strong> changes}} in the last {{PLURAL:$2|hour|<strong>$2</strong> hours}}, sebagai $3, $4.",
+       "wlshowlast": "Tampilkan terakhir $1 jam $2 hari",
        "watchlist-options": "Opsi daftar pantauan",
        "watching": "Memantau...",
        "unwatching": "Menghilangkan pemantauan...",
        "exbeforeblank": "isi sebelum dikosongkan: '$1'",
        "delete-confirm": "Hapus \"$1\"",
        "delete-legend": "Hapus",
-       "historywarning": "'''Peringatan:''' Halaman yang akan Anda hapus mempunyai sejarah dengan $1 {{PLURAL:$1|revisi|revisi}}:",
+       "historywarning": "<strong>Warning:</strong> Laman yang akan anda hapus punya riwayat dengan $1 {{PLURAL:$1|revision|revisions}}:",
        "confirmdeletetext": "Anda akan menghapus halaman atau berkas ini secara permanen berikut semua sejarahnya dari basis data. Pastikan bahwa Anda memang ingin melakukannya, mengetahui segala akibatnya, dan apa yang Anda lakukan ini adalah sejalan dengan [[{{MediaWiki:Policy-url}}|kebijakan {{SITENAME}}]].",
        "actioncomplete": "Proses selesai",
        "actionfailed": "Eksekusi gagal",
        "delete-edit-reasonlist": "Alasan penghapusan suntingan",
        "delete-toobig": "Halaman ini memiliki sejarah penyuntingan yang panjang, melebihi {{PLURAL:$1|revisi|revisi}}.\nPenghapusan halaman dengan sejarah penyuntingan yang panjang tidak diperbolehkan untuk mencegah kerusakan di {{SITENAME}}.",
        "delete-warning-toobig": "Halaman ini memiliki sejarah penyuntingan yang panjang, melebihi {{PLURAL:$1|revisi|revisi}}.\nMenghapus halaman ini dapat menyebabkan masalah dalam operasional basis data {{SITENAME}}.",
+       "deleteprotected": "Anda tidak dapat menghapus laman ini karena telah diproteksi",
        "deleting-backlinks-warning": "'''Peringatan:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Halaman lain]] mengarah atau memiliki transklusi ke halaman yang akan Anda hapus.",
        "rollback": "Kembalikan suntingan",
        "rollbacklink": "kembalikan",
        "import-rootpage-nosubpage": "Ruang nama \"$1\" di halaman turunan tidak mengizinkan subhalaman.",
        "importlogpage": "Log impor",
        "importlogpagetext": "Di bawah ini adalah log impor administratif dari halaman-halaman, berikut riwayat suntingannya dari wiki lain.",
-       "import-logentry-upload": "mengimpor [[$1]] melalui pemuatan berkas",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisi|revisi}}",
-       "import-logentry-interwiki": "men-transwiki $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisi}} dari $2",
        "javascripttest": "Pengujian JavaScript",
        "javascripttest-pagetext-noframework": "Halaman ini disediakan untuk pengujian JavaScript yang sedang berjalan.",
        "mediastatistics-header-executable": "Program",
        "mediastatistics-header-archive": "Format terkompresi",
        "json-error-depth": "Kedalaman tumpukan maksimal telah terlewati",
-       "json-error-syntax": "Kesalahan sintaks"
+       "json-error-syntax": "Kesalahan sintaks",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Ekstensi Latin",
+       "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": "Gujarati",
+       "special-characters-group-devanagari": "Dewanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "en dash",
+       "special-characters-title-emdash": "em dash",
+       "special-characters-title-minus": "tanda kurang"
 }
index df33503..cdaaeb1 100644 (file)
@@ -18,7 +18,8 @@
                        "Ævar Arnfjörð Bjarmason",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Sveinn í Felli"
                ]
        },
        "tog-underline": "Undirstrika tengla:",
        "tog-extendwatchlist": "Sýna allar breytingar á vaktlistanum, ekki einungis þær nýjustu",
        "tog-usenewrc": "Flokka breytingar eftir síðu í nýlegum breytingum og vaktlista",
        "tog-numberheadings": "Númera fyrirsagnir sjálfkrafa",
-       "tog-showtoolbar": "Sýna breytingarverkfærastiku",
+       "tog-showtoolbar": "Sýna breytingaverkfærastiku",
        "tog-editondblclick": "Breyta síðum þegar tvísmellt er",
        "tog-editsectiononrightclick": "Virkja hlutabreytingu með því að hægrismella á hlutafyrirsagnir",
-       "tog-watchcreations": "Bæta síðum sem ég bý til og skrám sem ég hleð inn á vaktlistann minn",
+       "tog-watchcreations": "Bæta á vaktlistann minn síðum sem ég bý til og skrám sem ég hleð inn",
        "tog-watchdefault": "Bæta síðum og skrám sem ég breyti á vaktlistann minn",
-       "tog-watchmoves": "Bæta síðum og skrám sem ég færi á vaktlistann minn",
+       "tog-watchmoves": "Bæta á vaktlistann minn síðum og skrám sem ég færi",
        "tog-watchdeletion": "Bæta síðum og skrám sem ég eyði á vaktlistann minn",
        "tog-watchrollback": "Bæta síðum þar sem ég hef tekið aftur breytingu á vaktlistann minn",
        "tog-minordefault": "Merkja allar breytingar sem minniháttar sjálfgefið",
-       "tog-previewontop": "Sýna forskoðun á undan breytingarkassanum",
+       "tog-previewontop": "Sýna forskoðun á undan breytingareitnum",
        "tog-previewonfirst": "Sýna forskoðun með fyrstu breytingu",
-       "tog-enotifwatchlistpages": "Senda mér tölvupóst þegar síðu eða skrá á vaktlistanum mínu er breytt",
+       "tog-enotifwatchlistpages": "Senda mér tölvupóst þegar síðu eða skrá á vaktlistanum mínum er breytt",
        "tog-enotifusertalkpages": "Senda mér tölvupóst þegar notandaspjallinu mínu er breytt",
        "tog-enotifminoredits": "Senda mér einnig tölvupóst vegna minniháttar breytinga á síðum og skrám",
        "tog-enotifrevealaddr": "Gefa upp netfang mitt í tilkynningarpóstum",
        "tog-shownumberswatching": "Sýna fjölda vaktandi notenda",
        "tog-oldsig": "Núverandi undirskrift:",
-       "tog-fancysig": "Meðhöndla undirskrift sem wikimál (án sjálfvirks tengils)",
+       "tog-fancysig": "Meðhöndla undirskrift sem wikitexta (án sjálfvirks tengils)",
        "tog-uselivepreview": "Nota beina forskoðun",
        "tog-forceeditsummary": "Birta áminningu þegar breytingarágripið er tómt",
        "tog-watchlisthideown": "Ekki sýna mínar breytingar á vaktlistanum",
        "underline-always": "Alltaf",
        "underline-never": "Aldrei",
        "underline-default": "Fletta eða vafra sjálfkrafa",
-       "editfont-style": "Breyta leturgerð í textareitum",
+       "editfont-style": "Leturgerð í breytingareitum:",
        "editfont-default": "skv. vafrastillingu",
-       "editfont-monospace": "Monospaced letur",
-       "editfont-sansserif": "Sans-serif font",
+       "editfont-monospace": "Jafnbreitt letur",
+       "editfont-sansserif": "Sans-serif letur",
        "editfont-serif": "Serif letur",
        "sunday": "sunnudagur",
        "monday": "mánudagur",
        "category_header": "Síður í flokknum „$1“",
        "subcategories": "Undirflokkar",
        "category-media-header": "Margmiðlunarefni í flokknum „$1“",
-       "category-empty": "''Þessi flokkur inniheldur engar síður eða margmiðlunarefni.''",
+       "category-empty": "<em>Þessi flokkur inniheldur engar síður eða margmiðlunarefni.</em>",
        "hidden-categories": "{{PLURAL:$1|Falinn flokkur|Faldir flokkar}}",
        "hidden-category-category": "Faldir flokkar",
        "category-subcat-count": "Þessi flokkur hefur eftirfarandi $1 {{PLURAL:$1|undirflokk|undirflokka}}, af alls $2.",
        "categorypage": "Skoða flokkatré",
        "viewtalkpage": "Skoða umræðu",
        "otherlanguages": "Á öðrum tungumálum",
-       "redirectedfrom": "(Tilvísað frá $1)",
+       "redirectedfrom": "(Endurbeint frá $1)",
        "redirectpagesub": "Tilvísunarsíða",
        "redirectto": "Tilvísun á",
        "lastmodifiedat": "Þessari síðu var síðast breytt $1 klukkan $2.",
        "viewsourcetext": "Þú getur skoðað og afritað kóða þessarar síðu:",
        "viewyourtext": "Þú getur skoðað og afritað kóða '''breytinganna þinna''' yfir á þessa síðu:",
        "protectedinterface": "Þessi síða útvegar textann sem birtist í viðmóti hugbúnaðarins sem keyrir þessa síðu, og er læst til að koma í veg fyrir misnotkun.\nTil þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/ translatewiki.net], staðfæringaverkefni MediaWiki",
-       "editinginterface": "'''Aðvörun:''' Þú ert að breyta síðu sem hefur að geyma texta fyrir notendaumhverfi hugbúnaðarins.\nBreytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda á þessu vefsvæði.\nTil þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/wiki/Main_Page?setlang=is translatewiki.net], staðfæringaverkefni MediaWiki.",
+       "editinginterface": "<strong>Aðvörun:</strong> Þú ert að breyta síðu sem hefur að geyma texta fyrir notendaumhverfi hugbúnaðarins.\nBreytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda á þessu vefsvæði.",
        "cascadeprotected": "Þessi síða hefur verið vernduð fyrir breytingum, vegna þess að hún er innifalin í eftirfarandi {{PLURAL:$1|síðu, sem er vernduð|síðum, sem eru verndaðar}} með „keðjuverndun“:\n$2",
        "namespaceprotected": "Þú hefur ekki leyfi til að breyta síðum í '''$1''' nafnrýminu.",
        "customcssprotected": "Þú hefur ekki leyfi að breyta þessari CSS-umbrotsíðu, því hún hefur notendastillingar annars notanda.",
        "password-login-forbidden": "Notkun þessa notendanafns og lykilorðs er ekki leyfileg.",
        "mailmypassword": "Endurstilla lykilorð",
        "passwordremindertitle": "Nýtt tímabundið aðgangsorð fyrir {{SITENAME}}",
-       "passwordremindertext": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um að fá nýtt\nlykilorð fyrir {{SITENAME}} ($4). Tímabundið lykilorð fyrir notandann „$2“\nhefur verið búið til og er núna „$3“. Ef þetta er það sem þú vildir, þarfu að skrá\nþig inn og velja nýtt lykilorð.  Þetta tímabundna lykilorð rennur út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það var ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt,\nog vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og\nhalda áfram að nota gamla lykilorðið.",
+       "passwordremindertext": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um að fá nýtt\nlykilorð fyrir {{SITENAME}} ($4). Tímabundið lykilorð fyrir notandann „$2“\nhefur verið búið til og er núna „$3“. Ef þetta er það sem þú vildir, þarfu að skrá\nþig inn og velja nýtt lykilorð.  Þetta tímabundna lykilorð rennur út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það var ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt,\nog vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og\nhalda áfram að nota gamla lykilorðið.",
        "noemail": "Það er ekkert netfang skráð fyrir notandan \"$1\".",
        "noemailcreate": "Þú verður að skrá gilt netfang",
        "passwordsent": "Nýtt lykilorð var sent á netfangið sem er skráð á „$1“.\nVinsamlegast skráðu þig inn á ný þegar þú hefur móttekið það.",
        "passwordreset-capture-help": "Ef þú hakar við þennan reit verður tölvupósturinn (með tímabundna lykilorðinu) sýndur þér og einnig sendur notandanum.",
        "passwordreset-email": "Netfang:",
        "passwordreset-emailtitle": "Notendaupplýsingar á {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um \nendursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
-       "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
+       "passwordreset-emailtext-ip": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um \nendursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
+       "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst aftur lykilorðið þitt, og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
        "passwordreset-emailelement": "Notendanafn: $1\nTímabundið lykilorð: $2",
        "passwordreset-emailsent": "Töluvpóstur til að endursetja lykilorðið hefur verið sendur.",
        "passwordreset-emailsent-capture": "Tölvupóstur til að endursetja lykilorðið hefur verið sendur í tölvupósti, sem er sýndur hér fyrir neðan.",
        "template-semiprotected": "(hálfvernduð)",
        "hiddencategories": "Þessi síða er meðlimur í $1 {{PLURAL:$1|földum flokki|földum flokkum}}:",
        "nocreatetext": "{{SITENAME}} hefur takmarkað eiginleikann að gera nýjar síður.\nÞú getur farið til baka og breytt núverandi síðum, eða [[Special:UserLogin|skráð þið inn eða búið til aðgang]].",
-       "nocreate-loggedin": "Þú hefur ekki leyfi til að skapa nýjar síður.",
+       "nocreate-loggedin": "Þú hefur ekki leyfi til að búa til nýjar síður.",
        "sectioneditnotsupported-title": "Hlutabreyting er ekki virk",
        "sectioneditnotsupported-text": "Hlutabreyting er ekki virk á þessari síðu.",
        "permissionserrors": "Leyfisvilla",
        "gender-female": "Hún breytir wikisíðum",
        "prefs-help-gender": "Þessi stilling er valfrjáls. Notað til að aðgreina kynin í meldingum hugbúnaðarins. Þessar upplýsingar verða aðgengilegar öllum.",
        "email": "Tölvupóstur",
-       "prefs-help-realname": "Alvöru nafn er valfrjálst.\nEf þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
+       "prefs-help-realname": "Raunverulegt nafn er valfrjálst.\nEf þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
        "prefs-help-email": "Tölvupóstfang er valfrjálst, en gerir þér kleift að fá nýtt lykilorð ef þú gleymir lykilorðinu þínu.",
        "prefs-help-email-others": "Þú getur einnig valið að láta aðra hafa samband við þig með tölvupósti í gegnum tengil á notendasíðu eða notendaspjallsíðu þinni.\nTölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband við þig.",
        "prefs-help-email-required": "Þörf er á netfangi.",
        "userrights-no-interwiki": "Þú hefur ekki leyfi til að breyta notandaréttindum á öðrum wiki-síðum.",
        "userrights-nodatabase": "Gagnagrunnurinn $1 er ekki til eða ekki staðbundinn.",
        "userrights-nologin": "Þú verður að [[Special:UserLogin|innskrá]] þig á möppudýraaðgang til að geta útdeilt notandaréttindum.",
-       "userrights-notallowed": "Þú hefur ekki réttindi til að útdeila eða draga til baka notandaréttini.",
+       "userrights-notallowed": "Þú hefur ekki réttindi til að útdeila eða draga til baka notandaréttindi.",
        "userrights-changeable-col": "Hópar sem þú getur breytt",
        "userrights-unchangeable-col": "Hópar sem þú getur ekki breytt",
        "userrights-conflict": "Árekstur í að breyta notandaréttindum! Vinsamlegast skoðaðu aftur og staðfestu breytingar þínar.",
        "recentchanges-label-bot": "Þessi breyting var gerð af vélmenni",
        "recentchanges-label-unpatrolled": "Þessi breyting hefur ekki verið yfirfarin",
        "recentchanges-label-plusminus": "Stærð síðunnar breyttist um svona mörg bæti",
+       "recentchanges-legend-heading": "'''Fyrirsögn:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
        "rcnotefrom": "Að neðan {{PLURAL:$5|er breyting síðan|eru breytingar síðan}} <strong>$3, $4</strong> (allt að <strong>$1</strong> sýndar).",
        "rclistfrom": "Sýna breytingar frá og með $3 $2",
        "uploaderror": "Villa í innhlaðningu",
        "upload-recreate-warning": "'''Viðvörun: Skrá með þessu nafni hefur verið eytt eða færð.'''\n\nSíðasta færsla skráarinnar úr bönnunarskrá og flutningskrá er sýnd hér fyrir neðan til skýringar:",
        "uploadtext": "Notaðu eyðublaðið hér fyrir neðan til að hlaða inn skrám.\nTil að skoða eða leita í áður innhlöðnum skrám ferðu á [[Special:FileList|skráarlistann]], (endur)innhlaðnar skrár eru skráðar í [[Special:Log/upload|innhlaðningarskránni]], eyðingar í [[Special:Log/delete|eyðingaskránni]].\n\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Skrá.jpg]]</nowiki></code>''' til að sýna skránna í fullri upplausn.\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Skrá.png|200px|thumb|left|alt-texti]]</nowiki></code>''' til að nota 200 díla upplausn í kassa, sett til vinstri með 'alt text' sem myndlýsingu.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Skrá.ogg]]</nowiki></code>''' til að tengja í myndina án þess að sýna hana.",
-       "upload-permitted": "Heimilaðar skráargerðir: $1.",
-       "upload-preferred": "Ákjósanlegustu skrárgerðirnar: $1.",
-       "upload-prohibited": "Óheimiluð skrárgerð: $1.",
+       "upload-permitted": "{{PLURAL:$2|Heimiluð skráargerð|Heimilaðar skráargerðir}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Ákjósanleg skrárgerð|Ákjósanlegar skrárgerðir}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Óheimiluð skrárgerð|Óheimilaðar skrárgerðir}}: $1.",
        "uploadlogpage": "Innhlaðningarskrá",
        "uploadlogpagetext": "Fyrir neðan er listi yfir nýlegustu innhlöðnu skrárnar.\nSjá [[Special:NewFiles|myndasafn nýrra mynda]] fyrir myndrænna yfirlit.",
        "filename": "Skráarnafn",
        "illegalfilename": "Skráarnafnið „$1“ inniheldur stafi sem eru ekki leyfðir í síðutitlum.\nGjörðu svo vel og endurnefndu skrána og hladdu henni inn aftur.",
        "filename-toolong": "Skráarnöfn mega ekki vera lengri en 240 bæt.",
        "badfilename": "Skáarnafninu hefur verið breytt í „$1“.",
-       "filetype-mime-mismatch": "Skráarendingin \".$1\" samræmist ekki MIME gerð skráarinnar ($2).",
+       "filetype-mime-mismatch": "Skráarendingin \".$1\" samræmist ekki MIME-gerð skrárinnar ($2).",
        "filetype-badmime": "Skrárir af MIME-gerðinni „$1“ er ekki leyfilegt að hlaða inn.",
        "filetype-bad-ie-mime": "Mistókst að hlaða inn skrá því Internet Explorer myndi uppgvötva hana sem \"$1\" sem er óheimil og mögulega hættulegt skráarsnið.",
        "filetype-unwanted-type": "'''„.$1“''' er óæskileg skráargerð.\n{{PLURAL:$3|Ákjósanleg skráargerð er|Ákjósanlegar skráargerðir eru}} $2.",
        "illegal-filename": "Þetta skráarnafn er ekki leyft.",
        "overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.",
        "unknown-error": "Óþekkt villa kom upp.",
-       "tmp-create-error": "Gat ekki búið til tímabundna skrá.",
+       "tmp-create-error": "Gat ekki búið til bráðabirgðaskrá.",
        "tmp-write-error": "Villa við skrifun tímabundinnar skrár.",
        "large-file": "Það er mælt með að skrár séu ekki stærri en $1; þessi skrá er $2.",
        "largefileserver": "Þessi skrá er of stór. Vefþjónninn getur ekki tekið við skránni.",
        "windows-nonascii-filename": "Þessi wiki styður ekki skráarnöfn með sérstökum stöfum",
        "fileexists": "Skrá með þessu nafni er þegar til, skoðaðu <strong>[[:$1]]</strong> ef þú ert óviss um hvort þú viljir breyta henni.\n[[$1|thumb]]",
        "filepageexists": "Myndasíðan fyrir þessa síðu hefur þegar verið búin til <strong>[[:$1]]</strong>, en engin skrá er til með þessu nafni.\nLýsingin sem þú skrifaðir verður ekki birt á myndasíðunni.\nTil þess að lýsingin geti birst á síðunni, þá þarft þú að breyta síðunni sérstaklega.\n[[$1|thumb]]",
-       "fileexists-extension": "Skrá með svipuðu nafni er til: [[$2|thumb]]\n*Nafn skráarinnar sem hlaða á inn: <strong>[[:$1]]</strong>\n*Nafn skráarinnar sem er þegar til: <strong>[[:$2]]</strong>\nVilt þú kanski nota annað nafn sem er meira lýsandi fyrir skránna ?",
+       "fileexists-extension": "Skrá með svipuðu nafni er til: [[$2|thumb]]\n*Nafn skrárinnar sem hlaða á inn: <strong>[[:$1]]</strong>\n*Nafn skrárinnar sem er þegar til: <strong>[[:$2]]</strong>\nVilt þú kannski nota annað nafn sem er meira lýsandi fyrir skrána ?",
        "fileexists-thumbnail-yes": "Skráin virðist vera smámynd [[$1|thumb]]\nVinsamlegast athugaðu skránna <strong>[[:$1]]</strong>.\nEf skráin er sama myndin í upprunalegri stærð er ekki þörf á annari smámynd.",
        "file-thumbnail-no": "Skráin er líklega smámynd, því skráarnafnið byrjar á <strong>$1</strong>.\nEf skráin er í fullri upplausn haltu þá áfram að hlaða henni inn, en ef ekki breyttu þá skráarnafninu.",
        "fileexists-forbidden": "Skrá með þessu nafni er þegar til og ekki er hægt að skrifa yfir skránna.\nEf þú villt hlaða inn skránni þinni engu að síður, farðu þá til baka og veldu annað skráarnafn.\n[[File:$1|thumb|center|$1]]",
        "filename-bad-prefix": "Sráarnafnið lýsir ekki skránni, heldur var það búið til af myndavélinni, því það byrjar á '''\"$1\"'''.\nVeldu lýsandi nafn fyrir skránna og reyndu aftur.",
        "upload-success-subj": "Innhlaðning tókst",
        "upload-success-msg": "Upphlöðun frá [$2] tókst. Það er aðgengilegt hér: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Vandamál við upphleðslu skráarinnar",
+       "upload-failure-subj": "Vandamál við upphleðslu",
        "upload-failure-msg": "Upphlaðið frá [$2] mistókst:\n\n$1",
        "upload-warning-subj": "Aðvörun",
        "upload-warning-msg": "Upphal þitt [$2] mistókst. Þú getur farið aftur á [[Special:Upload/stash/$1|upphlaðsviðmótið]] og leiðrétt villuna.",
        "upload-proto-error": "Vitlaus samskiptaregla",
        "upload-proto-error-text": "Upphlöðun frá öðrum vefþjón þarfnast vefslóðar sem byrjar á <code>http://</code> eða <code>ftp://</code>.",
        "upload-file-error": "Innri villa",
-       "upload-file-error-text": "Innri villa: Gat ekki búið til tímabundna skrá á vefþjóni.\nVinsamlegast hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
+       "upload-file-error-text": "Innri villa: Gat ekki búið til bráðabirgðaskrá á vefþjóni.\nVinsamlegast hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
        "upload-misc-error": "Óþekkt innhleðsluvilla",
        "upload-misc-error-text": "Upphal þitt mistókst vegna óþekktrar villu.\nAthugaðu hvort vefslóðin sé rétt og aðgengileg og að því loknu reyndu aftur.\nEf vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
        "upload-too-many-redirects": "Vefslóðin inniheldur of margar tilvísanir.",
-       "upload-http-error": "HTTP villa kom upp við upphal skráarinnar: $1",
+       "upload-http-error": "HTTP villa kom upp: $1",
        "upload-copy-upload-invalid-domain": "Lokað er fyrir afritun skráa frá öðrum vefþjón á þessu vefsvæði.",
        "backend-fail-stream": "Gat ekki streymt skránni „$1“.",
-       "backend-fail-backup": "Öryggisafritun skráarinnar $1 mistókst.",
+       "backend-fail-backup": "Öryggisafritun skrárinnar $1 mistókst.",
        "backend-fail-notexists": "Skráin $1 er ekki til.",
        "backend-fail-hashes": "Gat ekki nálgast tætigildi skráanna til samanburðar.",
        "backend-fail-notsame": "Ólík skrá er þegar til á $1.",
        "backend-fail-invalidpath": "$1 er ekki gildur geymslustaður.",
        "backend-fail-delete": "Mistókst að eyða skránni $1.",
-       "backend-fail-describe": "Mistókst að breyta lýsisgögnum skráarinnar „$1“.",
+       "backend-fail-describe": "Mistókst að breyta lýsisgögnum skrárinnar „$1“.",
        "backend-fail-alreadyexists": "Skráin $1 er þegar til.",
        "backend-fail-store": "Mistókst að vista skrá $1 á $2.",
        "backend-fail-copy": "Mistókst að afrita skjal $1 á $2.",
        "backend-fail-move": "Mistókst að færa skrá $1 á $2.",
-       "backend-fail-opentemp": "Mistókst að opna tímabundna skrá.",
-       "backend-fail-writetemp": "Gat ekki skrifað í tímabundna skrá.",
+       "backend-fail-opentemp": "Mistókst að opna bráðabirgðaskrá.",
+       "backend-fail-writetemp": "Gat ekki skrifað í bráðabirgðaskrá.",
        "backend-fail-closetemp": "Mistókst að loka tímabundinni skrá.",
        "backend-fail-read": "Mistókst að lesa skrá $1.",
        "backend-fail-create": "Mistókst að skrifa skrá $1.",
        "backend-fail-synced": "Skráin $1 er í ósamkvæmu ástandi innan innri geymslubakenda",
        "backend-fail-connect": "Mistókst að tengjast gagnabankanum \"$1\".",
        "backend-fail-internal": "Óþekkt villa átti sér stað í gagnabankanum \"$1\".",
-       "backend-fail-contenttype": "Gat ekki ákvarðað innihaldgerð skráarinnar til geymslu á „$1“.",
+       "backend-fail-contenttype": "Gat ekki ákvarðað innihaldgerð skrárinnar til geymslu á „$1“.",
        "backend-fail-batchsize": "Geymslubakendinn fékk bunka af $1 {{PLURAL:$1|skráaraðgerð|skráaraðgerðum}}; mest eru leyfðar $2 {{PLURAL:$2|aðgerð|aðgerðir}}.",
        "backend-fail-usable": "Gat ekki lesið skrána „$1“ vegna ófullnægjandi aðgangsheimilda eða týndra mappa/íláta.",
        "filejournal-fail-dbconnect": "Gat ekki tengst dagbókargrunni fyrir geymslubakendann „$1“.",
        "lockmanager-fail-db-release": "Gat ekki opnað lása á gagnagrunninum $1.",
        "lockmanager-fail-svr-acquire": "Gat ekki nálgast lása á þjóninum $1.",
        "lockmanager-fail-svr-release": "Gat ekki opnað lása á þjóninum $1.",
-       "zip-file-open-error": "Mistök við opnun skráarinnar fyrir ZIP athuganir.",
+       "zip-file-open-error": "Mistök við opnun skrárinnar fyrir ZIP prófanir.",
        "zip-wrong-format": "Skráin var ekki ZIP skrá.",
-       "zip-bad": "Þessi ZIP skrá er skemmd eða ólesanleg.\nEkki var hægt að athuga öryggi skráarinnar almennilega.",
-       "zip-unsupported": "Þessi skrá er ZIP skrá sem notar möguleika sem eru ekki studdir af MediaWiki.\nEkki er hægt að athuga öryggi skráarinnar almennilega.",
+       "zip-bad": "Þessi ZIP skrá er skemmd eða ólesanleg.\nEkki var hægt að athuga öryggi skrárinnar almennilega.",
+       "zip-unsupported": "Þessi skrá er ZIP skrá sem notar möguleika sem eru ekki studdir af MediaWiki.\nEkki er hægt að athuga öryggi skrárinnar almennilega.",
        "uploadstash": "Óútgefnar skrár",
        "uploadstash-summary": "Þessi síða gefur aðgang að þeim skrám sem hafa verið hlaðið inn (eða eru í biðröð eftir því að vera hlaðið inn) en hafa ekki verið útgefnar. Þessar skrár eru eingöngu sýnilegar þeim notanda sem hlóð þeim inn.",
        "uploadstash-clear": "Tæma listann",
        "license-nopreview": "(Forskoðun ekki fáanleg)",
        "upload_source_url": "(þín valda skrá frá gildri, aðgengilegri vefslóð)",
        "upload_source_file": "(þín valda skrá frá tölvunni þinni)",
+       "listfiles-delete": "eyða",
        "listfiles-summary": "Þessi kerfissíða sýnir allar upphlaðnar skrár.",
        "listfiles_search_for": "Leita að miðilsnafni:",
+       "listfiles-userdoesnotexist": "Notandinn \"$1\" er ekki skráður.",
        "imgfile": "skrá",
        "listfiles": "Skráalisti",
        "listfiles_thumb": "Smámynd",
        "sharedupload": "Skrá þessi er af $1, og deilt meðal annarra verkefna og nýtist því þar.",
        "sharedupload-desc-there": "Skrá þessi er af $1, og deilt meðal annarra verkefna og nýtist því þar.\nGjörðu svo vel og sjáðu [$2 skráarsíðuna þar] fyrir fleiri upplýsingar.",
        "sharedupload-desc-here": "Skrá þessi er af $1, og deilt meðal annarra verkefna og nýtist því þar.\nHér fyrir neðan er afrit af [$2 skráarsíðunni þar].",
-       "sharedupload-desc-edit": "Þessi skrá er af $1 og gæti verið í notkun á öðrum vefkefnum.\nHentugra væri ef þú gætir breytt lýsingu skráarinnar á [$2 myndasíðu] hennar þar.",
-       "sharedupload-desc-create": "Ã\9eessi skrá er af $1 og gæti verið Ã­ notkun Ã¡ Ã¶Ã°rum vefkefnum.\nHentugra væri ef Ã¾Ãº gætir breytt lýsingu skráarinnar á [$2 myndasíðu] hennar þar.",
+       "sharedupload-desc-edit": "Þessi skrá er af $1 og gæti verið í notkun á öðrum vefkefnum.\nHentugra væri ef þú gætir breytt lýsingu skrárinnar á [$2 myndasíðu] hennar þar.",
+       "sharedupload-desc-create": "Ã\9eessi skrá er af $1 og gæti verið Ã­ notkun Ã­ Ã¶Ã°rum verkefnum.\nHentugra væri ef Ã¾Ãº gætir breytt lýsingu skrárinnar á [$2 myndasíðu] hennar þar.",
        "filepage-nofile": "Engin skrá er til með þessu nafni.",
        "filepage-nofile-link": "Engin skrá er til með þessu nafni, en þú getur [$1 hlaðið henni inn].",
        "uploadnewversion-linktext": "Hlaða inn nýrri útgáfu af þessari skrá",
        "randomincategory": "Handhófsvalin síða í flokki",
        "randomincategory-invalidcategory": "„$1“ er ekki gilt flokkarheiti",
        "randomincategory-nopages": "Það eru engar síður í flokkinum [[:Category:$1|$1]].",
+       "randomincategory-category": "Flokkur:",
+       "randomincategory-legend": "Handhófsvalin síða í flokki",
        "randomredirect": "Handahófsvalin tilvísun",
        "randomredirect-nopages": "Það eru engar tilvísanir í nafnrýminu „$1“.",
        "statistics": "Tölfræði",
        "undelete-missing-filearchive": "Mistókst að endurvekja skjalasafn með auðkenninu $1 því það er ekki til í gagnabankanum.\nMögulega er þegar búið að endurvekja það.",
        "undelete-error": "Mistókst að endurvekja síðu.",
        "undelete-error-short": "Villa við endurvakningu skráar: $1",
-       "undelete-error-long": "Það kom upp villa við endurvakningu skráarinnar:\n\n$1",
+       "undelete-error-long": "Það kom upp villa við endurvakningu skrárinnar:\n\n$1",
        "undelete-show-file-confirm": "Ertu viss um að þú viljir sjá eydda breytingu af skránni \"<nowiki>$1</nowiki>\" frá $2 $3?",
        "undelete-show-file-submit": "Já",
        "namespace": "Nafnrými:",
        "thumbnail_error_remote": "Villumelding frá $1:\n$2",
        "djvu_page_error": "DjVu-blaðsíða er utan marka",
        "djvu_no_xml": "Mistókst að sækja XML-gögn fyrir DjVu skrá",
-       "thumbnail-temp-create": "Mistókst að búa til tímabundna smámynd.",
+       "thumbnail-temp-create": "Mistókst að búa til bráðabirgða-smámyndaskrá",
        "thumbnail-dest-create": "Gat ekki vistað smámynd á markstað",
        "thumbnail_invalid_params": "Breytur smámyndarinnar eru rangar",
        "thumbnail_dest_directory": "Mistókst að búa til niðurhals möppu",
        "thumbnail_gd-library": "Ófullkomin stilling GD-safns: Skortir aðgerðina $1",
        "thumbnail_image-missing": "Skránna vantar: $1",
        "import": "Flytja inn síður",
-       "importinterwiki": "Milli-Wiki innflutningur",
+       "importinterwiki": "Flytja inn frá öðru wiki",
        "import-interwiki-text": "Veldu Wiki-kerfi og síðutitil til að flytja inn.\nBreytingaupplýsingar s.s. dagsetningar og höfundanöfn eru geymd.\nAllir innflutningar eru skráð í [[Special:Log/import|innflutningsskránna]].",
        "import-interwiki-history": "Afrita allar breytingar þessarar síðu",
        "import-interwiki-templates": "Innifala öll snið með",
        "importsuccess": "Innflutningi lokið!",
        "importnosources": "Engin uppspretta hefur verið valin og bein upphlöð breytingarskráa eru óvirk.",
        "importnofile": "Engri skrá var hlaðið inn.",
-       "importuploaderrorsize": "Upphlöðun skráarinnar mistókst.\nSkráin er stærri en hámarsstærð síðna segir til um.",
-       "importuploaderrorpartial": "Upphlöðun skráarinnar mistókst.\nSkráinni var eingöngu að hluta til hlaðið inn.",
-       "importuploaderrortemp": "Upphlöðun skráarinnar mistókst.\nTímabundin mappa fannst ekki.",
+       "importuploaderrorsize": "Upphleðsla skrárinnar mistókst.\nSkráin er stærri en leyfð hámarksstærð.",
+       "importuploaderrorpartial": "Upphleðsla skráarinnar mistókst.\nSkráinni var eingöngu hlaðið inn að hluta.",
+       "importuploaderrortemp": "Upphleðsla skrárinnar mistókst.\nBráðabirgðamappa fannst ekki.",
        "import-parse-failure": "Þáttunarvilla við innflutning XML skjals",
        "import-noarticle": "Engin síða til innflutnings!",
        "import-nonewrevisions": "Engar breytingar voru fluttar inn (þær voru allar annaðhvort þegar til eða sleppt vegna villna).",
        "log-show-hide-patrol": "$1 Listi yfir vaktaðar síður",
        "deletedrevision": "Eyddi gamla útgáfu $1",
        "filedeleteerror-short": "Villa við eyðingu: $1",
-       "filedeleteerror-long": "Það kom upp villa við eyðingu skráarinnar: $1",
+       "filedeleteerror-long": "Það kom upp villa við eyðingu skrárinnar: $1",
        "filedelete-missing": "Skránni „$1“ er ekki hægt að eyða vegna þess að hún er ekki til.",
        "filedelete-old-unregistered": "Tilgreind útgáfa \"$1\" er ekki til í gagnabankanum.",
        "filedelete-current-unregistered": "Tilgreind skrá \"$1\" er ekki til í gagnabankanum.",
        "api-error-nomodule": "Innri villa: Engin upphlaðs eining valin.",
        "api-error-ok-but-empty": "Innri villa: ekkert svar frá vefþjón.",
        "api-error-overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.",
-       "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt tímabundna skrá.",
+       "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt bráðabirgðaskrá.",
        "api-error-publishfailed": "Innri villa: Vefþjónninn gat ekki gefið út bráðabirgðaskrá.",
        "api-error-timeout": "Vefþjónninn svaraði ekki á tilætluðum tíma.",
        "api-error-unclassified": "Óþekkt villa kom upp.",
index 6f7ad23..c8ddee0 100644 (file)
        "noarticletext-nopermission": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.",
        "missing-revision": "La versione #$1 della pagina \"{{FULLPAGENAME}}\" non esiste.\n\nQuesto si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
        "userpage-userdoesnotexist": "L'account \"$1\" non corrisponde a un utente registrato.\nVerificare che si intenda davvero creare o modificare questa pagina.",
-       "userpage-userdoesnotexist-view": "L'account utente \"$1\" non è registrato.",
+       "userpage-userdoesnotexist-view": "L'utenza \"$1\" non è registrata.",
        "blocked-notice-logextract": "Questo utente è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
        "clearyourcache": "<strong>Nota:</strong> dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*<strong>Firefox / Safari:</strong> tenere premuto il tasto delle maiuscole <em>Shift</em> e fare clic su <em>Ricarica</em>, oppure premere <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> su Mac)\n*<strong>Google Chrome:</strong> premere <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> su un Mac)\n*<strong>Internet Explorer:</strong> tenere premuto il tasto <em>Ctrl</em> e fare clic su <em>Aggiorna</em>, oppure premere <em>Ctrl-F5</em>\n*<strong>Opera:</strong> svuotare completamente la cache dal menu <em>Strumenti → Preferenze</em>",
        "usercssyoucanpreview": "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo CSS prima di salvarlo.",
        "note": "'''Nota:'''",
        "previewnote": "'''Ricorda che questa è solo un'anteprima.'''\nLe tue modifiche NON sono ancora state salvate!",
        "continue-editing": "Vai all'area di modifica",
-       "previewconflict": "L'anteprima corrisponde al testo presente nella casella di modifica superiore e rappresenta la pagina come apparirà se si sceglie di premere \"Salva la pagina\" in questo momento.",
+       "previewconflict": "L'anteprima corrisponde al testo presente nella casella di modifica superiore e rappresenta la pagina come apparirà se si sceglie di salvarla in questo momento.",
        "session_fail_preview": "'''Non è stato possibile elaborare la modifica perché sono andati persi i dati relativi alla sessione.\nRiprovare.\nSe il problema persiste, si può tentare di [[Special:UserLogout|scollegarsi]] ed effettuare un nuovo accesso.'''",
        "session_fail_preview_html": "'''Non è stato possibile elaborare la modifica perché sono andati persi i dati relativi alla sessione.'''\n\n''Poiché in {{SITENAME}} è abilitato l'uso di HTML senza limitazioni, l'anteprima non viene visualizzata; si tratta di una misura di sicurezza contro gli attacchi JavaScript.''\n\n'''Se questo è un legittimo tentativo di modifica, riprovare. Se il problema persiste, si può provare a [[Special:UserLogout|scollegarsi]] ed effettuare un nuovo accesso.'''",
        "token_suffix_mismatch": "'''La modifica non è stata salvata perché il client ha mostrato di gestire in modo errato i caratteri di punteggiatura nel token associato alla stessa. Per evitare una possibile corruzione del testo della pagina, è stata rifiutata l'intera modifica. Questa situazione può verificarsi, talvolta, quando vengono usati alcuni servizi di proxy anonimi via web che presentano dei bug.'''",
        "listfiles-delete": "cancella",
        "listfiles-summary": "Questa pagina speciale mostra tutti i file caricati.",
        "listfiles_search_for": "Ricerca immagini per nome:",
+       "listfiles-userdoesnotexist": "L'utenza \"$1\" non è registrata.",
        "imgfile": "file",
        "listfiles": "Elenco dei file",
        "listfiles_thumb": "Miniatura",
        "emailccsubject": "Copia del messaggio inviato a $1: $2",
        "emailsent": "Messaggio inviato",
        "emailsenttext": "Il messaggio e-mail è stato inviato.",
-       "emailuserfooter": "Questa email è stata inviata da $1 a $2 attraverso la funzione \"Invia un messaggio email all'utente\" su {{SITENAME}}.",
+       "emailuserfooter": "Questa email è stata inviata da $1 a $2 attraverso la funzione \"{{int:emailpage}}\" su {{SITENAME}}.",
        "usermessage-summary": "Messaggio di sistema",
        "usermessage-editor": "Messaggero di sistema",
        "usermessage-template": "MediaWiki:MessaggioUtente",
        "contributions-title": "Contributi di $1",
        "mycontris": "contributi",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
-       "contributions-userdoesnotexist": "L'account utente \"$1\" non è registrato.",
+       "contributions-userdoesnotexist": "L'utenza \"$1\" non è registrata.",
        "nocontribs": "Non sono state trovate modifiche che soddisfino i criteri di ricerca.",
        "uctop": "(attuale)",
        "month": "Dal mese (e precedenti):",
        "feedback-error1": "Errore: Dalla API è arrivato un risultato non riconosciuto",
        "feedback-error2": "Errore: Non è stato possibile eseguire la modifica",
        "feedback-error3": "Errore: Nessuna risposta dalla API",
+       "feedback-error4": "Errore: impossibile inviare il feedback al titolo indicato",
        "feedback-message": "Messaggio:",
        "feedback-subject": "Oggetto:",
        "feedback-submit": "Invia",
        "log-name-pagelang": "Modifiche lingua",
        "log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.",
-       "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
+       "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere {{PLURAL:$4|la seguente|le seguenti}} skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitar{{PLURAL:$4|la|le e scegliere quella predefinita}}.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilitano più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare {{PLURAL:$5|la seguente linea|le seguenti linee}} nel <code>LocalSettings.php</code> per abilitare {{PLURAL:$5|la|tutte le}} skin attualmente {{PLURAL:$5|installata|installate}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
        "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')",
index 68e621e..6c89b74 100644 (file)
        "category-empty": "<em>このカテゴリには現在、ページやメディアが何もありません。</em>",
        "hidden-categories": "{{PLURAL:$1|隠しカテゴリ}}",
        "hidden-category-category": "隠しカテゴリ",
-       "category-subcat-count": "{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには$2件の下位カテゴリが含まれており、そのうち以下の{{PLURAL:$1|下位カテゴリ$1件}}を表示しています。}}",
+       "category-subcat-count": "{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには下位カテゴリ $2 件が含まれており、そのうち以下の{{PLURAL:$1| $1 件}}を表示しています。}}",
        "category-subcat-count-limited": "このカテゴリには以下の{{PLURAL:$1|下位カテゴリ|​&#32;$1件の下位カテゴリ}}が含まれています。",
        "category-article-count": "{{PLURAL:$2|このカテゴリには以下のページのみが含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の $1 ページを表示しています。}}",
        "category-article-count-limited": "現在のカテゴリには以下の{{PLURAL:$1|ページ|​&#32;$1 ページ}}が含まれています。",
        "wrongpassword": "パスワードが間違っています。 \nもう一度やり直してください。",
        "wrongpasswordempty": "パスワードを空欄にはできません。\nもう一度やり直してください。",
        "passwordtooshort": "パスワードは {{PLURAL:$1|$1 文字}}以上にしてください。",
+       "passwordtoolong": "パスワードは {{PLURAL:$1|$1 文字}}以下にしてください。",
        "password-name-match": "パスワードは利用者名とは異なる必要があります。",
        "password-login-forbidden": "この利用者名とパスワードの使用は禁止されています。",
        "mailmypassword": "パスワードを再設定",
        "missingcommentheader": "<strong>注意:</strong> このコメントに対する題名/見出しが空欄です。\n「{{int:savearticle}}」ボタンをもう一度押すと、空のまま編集が保存されます。",
        "summary-preview": "要約のプレビュー:",
        "subject-preview": "題名/見出しのプレビュー:",
+       "previewerrortext": "変更のプレビューを処理中にエラーが発生しました。",
        "blockedtitle": "利用者はブロックされています",
        "blockedtext": "<strong>この利用者名またはIPアドレスはブロックされています。</strong>\n\nブロックは$1によって実施されました。\nブロックの理由は <em>$2</em> です。\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\nこのブロックについて、$1もしくは他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]に問い合わせることができます。\nただし、[[Special:Preferences|個人設定]]で有効なメールアドレスが登録されていない場合、またはメール送信機能の使用がブロックされている場合、「この利用者にメールを送信」の機能は使えません。\n現在ご使用中のIPアドレスは$3、このブロックIDは#$5です。\nお問い合わせの際には、上記の情報を必ず書いてください。",
        "autoblockedtext": "このIPアドレスは、$1によりブロックされた利用者によって使用されたため、自動的にブロックされています。\n理由は次の通りです。\n\n:<em>$2</em>\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\n$1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロックについて問い合わせることができます。\n\nただし、[[Special:Preferences|個人設定]]に正しいメールアドレスが登録されていない場合、またはメール送信がブロックされている場合、「この利用者にメールを送信」機能を使用できないことに注意してください。\n\n現在ご使用中のIPアドレスは$3 、このブロックIDは#$5です。\nお問い合わせの際は、上記の情報を必ず書いてください。",
        "difference-title": "「$1」の版間の差分",
        "difference-title-multipage": "ページ「$1」と「$2」の間の差分",
        "difference-multipage": "(ページ間の差分)",
-       "lineno": "行$1:",
+       "lineno": "$1行目:",
        "compareselectedversions": "選択した版同士を比較",
        "showhideselectedversions": "選択した版を表示/非表示",
        "editundo": "取り消し",
        "searchprofile-everything-tooltip": "全本文ページ (トークページを含む) 内を検索",
        "searchprofile-advanced-tooltip": "特定の名前空間内を検索",
        "search-result-size": "$1 ({{PLURAL:$2|$2 語}})",
-       "search-result-category-size": "{{PLURAL:$1|$1件}} ({{PLURAL:$2|下位カテゴリ$2件}}、{{PLURAL:$3|ファイル$3件}})",
+       "search-result-category-size": "{{PLURAL:$1|$1 件}} ({{PLURAL:$2|下位カテゴリ $2 件}}、{{PLURAL:$3|ファイル $3 件}})",
        "search-redirect": "($1からのリダイレクト)",
        "search-section": "($1の節)",
        "search-category": "(カテゴリ $1)",
        "listfiles-delete": "削除",
        "listfiles-summary": "この特別ページでは、アップロードされたファイルをすべて表示します。",
        "listfiles_search_for": "検索するメディア名:",
+       "listfiles-userdoesnotexist": "利用者アカウント「$1」は登録されていません。",
        "imgfile": "ファイル",
        "listfiles": "ファイル一覧",
        "listfiles_thumb": "サムネイル",
        "emailccsubject": "$1 に送信したメールの控え: $2",
        "emailsent": "メールを送信しました",
        "emailsenttext": "メールを送信しました。",
-       "emailuserfooter": "このメールは$1から$2へ、{{SITENAME}}の「利用者にメールを送信」機能で送信されました。",
+       "emailuserfooter": "このメールは$1から$2へ、{{SITENAME}}の「{{int:emailpage}}」機能で送信されました。",
        "usermessage-summary": "システムメッセージを残す。",
        "usermessage-editor": "システムメッセンジャー",
        "watchlist": "ウォッチリスト",
        "tags-create-warnings-below": "このタグの作成を続けますか?",
        "tags-delete-title": "タグを削除",
        "tags-delete-explanation-initial": "あなたはタグ「$1」をデータベースから削除しようとしています。",
+       "tags-delete-explanation-in-use": "現在適用されている{{PLURAL:$2|リビジョンやログ項目 $2 件}}を削除します。",
        "tags-delete-explanation-warning": "この操作は<strong>元に戻せず</strong>、データベース管理者をもってしても<strong>取り消しは不可能</strong>です。削除するタグとして間違いがないことをもう一度しっかり確認してください。",
        "tags-delete-explanation-active": "<strong>タグ「$1」はまだ有効であり、今後も付与され続けます。</strong>これを止めるには、タグが付与されるよう設定されているところに行き、そこで無効化してください。",
        "tags-delete-reason": "理由:",
        "revdelete-uname-unhid": "利用者名の可視化",
        "revdelete-restricted": "管理者に対する制限の適用",
        "revdelete-unrestricted": "管理者に対する制限の除去",
-       "logentry-block-block": "$1 が $3 を$5ブロックしました $6",
-       "logentry-block-reblock": "$1 が $3 のブロック設定を $5 に変更しました $6",
+       "logentry-block-block": "$1 が {{GENDER:$4|$3}} を$5で{{GENDER:$2|ブロックしました}} $6",
+       "logentry-block-unblock": "$1 が {{GENDER:$4|$3}} の{{GENDER:$2|ブロックを解除しました}}",
+       "logentry-block-reblock": "$1 が {{GENDER:$4|$3}} のブロックの期限を$5に{{GENDER:$2|変更しました}} $6",
+       "logentry-suppress-block": "$1 が {{GENDER:$4|$3}} を$5で{{GENDER:$2|ブロックしました}} $6",
+       "logentry-suppress-reblock": "$1 が {{GENDER:$4|$3}} のブロックの期限を$5に{{GENDER:$2|変更しました}} $6",
+       "logentry-import-upload": "$1 がファイルをアップロードして $3 を{{GENDER:$2|インポートしました}}",
+       "logentry-import-interwiki": "$1 が他のウィキから $3 を{{GENDER:$2|インポートしました}}",
        "logentry-merge-merge": "$1{{GENDER:$2|統合元}} と$3を$4に統合(改訂版を$5に掲載)",
        "logentry-move-move": "$1 がページ「$3」を「$4」に{{GENDER:$2|移動しました}}",
        "logentry-move-move-noredirect": "$1 がページ「$3」を「$4」に、リダイレクトを残さずに{{GENDER:$2|移動しました}}",
        "logentry-upload-revert": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
        "log-name-managetags": "タグ管理記録",
        "log-description-managetags": "このページは[[Special:Tags|タグ]]に関係する管理タスクをリストアップしています。ログには管理者によって手動で実行された操作の記録しか記載されていません。ウィキ・ソフトウェアによって、ログを残さずにタグが作成・削除されている場合があります。",
+       "logentry-managetags-create": "$1 がタグ「$4」を{{GENDER:$2|作成しました}}",
        "rightsnone": "(なし)",
        "revdelete-summary": "編集内容の要約",
        "feedback-adding": "ページへのフィードバックの追加...",
index 00959b6..ac4e9f0 100644 (file)
        "actions": "ایکشنز",
        "namespaces": "نامان ژاغہ",
        "variants": "الگ",
+       "navigation-heading": "قائمہ رہنمائی",
        "errorpagetitle": "خطاء",
        "returnto": "آچی $1۔",
        "tagline": "{{SITENAME}}ری",
        "permalink": "مستقل لنک",
        "print": "طباعت",
        "view": "لوڑے",
+       "view-foreign": "$1 لوڑے",
        "edit": "ترمیم",
        "create": "ساوزاوے",
+       "create-local": "ادخال مقامی وضاحت",
        "editthispage": "ھی صفحہا ترمیم کورے",
        "create-this-page": "ھیہ صفحو ساوزاوے",
        "delete": "بوغاوے",
        "otherlanguages": "خور زبانا",
        "redirectedfrom": "'($1 خور ژاغار گنونو ھوی)',",
        "redirectpagesub": "ھیہ صفحو خور ژاغا آلونو بیتی شیر",
+       "redirectto": "ری ڈائرکٹ کاردو صفحہ:",
        "lastmodifiedat": "آخری بار تدوین $2, $1 کورونو ھوی",
        "viewcount": "ھیہ صفحہ گیونو ھوی {{PLURAL:$1|ای‌بار|$1 مرتبہ}}",
        "protectedpage": "محفوظ شدہ صفحہ",
        "virus-unknownscanner": "نوژان ضد وائرس:",
        "logouttext": "'''ھنیسے تو خارج بیتی آسوس'''<br />\nتو خفی الاسم {{SITENAME}}  استعمال جاری لاکھیکو بوس، یا دوبارہ ھیہ نامو یا مختلف نامان سورا داخل دی بیکو بوس۔  ھیہ یاد آوری کورے کہ ای کما صفحات ھش <span class='plainlinks'>[$1 دوباری لاگن بوس]</span> غیچھی گونی کہ تو ھنیسے خارج نو بیتی آسوس، کلہ پت کہ تو تان تفصحہ (براؤزرو) ابطن (cache) صاف نوکوروس۔\",",
        "yourname": "اسمِ رکنیت",
+       "userlogin-yourname": "اسمِ رکنیت",
+       "userlogin-yourname-ph": "تان صارف نام درج کورے",
        "yourpassword": "کلمۂ شناخت(پاسورڈ)",
+       "userlogin-yourpassword": "کلمۂ شناخت(پاسورڈ)",
+       "userlogin-yourpassword-ph": "تان پاس ورڈو داخل کورے",
+       "createacct-yourpassword-ph": "تان پاس ورڈو داخل کورے",
        "yourpasswordagain": "کلمۂ شناخت(پاسورڈو)دوبارہ نیویشے",
+       "createacct-yourpasswordagain": "کلمۂ اجازتو تصدیق کورے",
+       "createacct-yourpasswordagain-ph": "پاس ورڈو وا داخل کورے",
        "remembermypassword": "ھیہ براوزیرا مہ داخلِ نوشتگی معلوماتن یاد لاکھے (زیاتاری زیات $1 {{PLURAL:$1|بس|بسان}} بچے)",
+       "userlogin-remembermypassword": "مہ داخل بہچاوے",
        "yourdomainname": "تہ ڈومین",
        "externaldberror": "یا تھے توثیقی ڈیٹابیسا خطا واقع بیتی شیر یا تتے بیریو کھاتو بتاریخ کوریکو اِجازت نیکی",
        "login": "داخل بوس",
        "logout": "لاگ آوٹ",
        "userlogout": "لاگ آوٹ",
        "notloggedin": "داخلہ نو ہوی",
+       "userlogin-noaccount": "تو کھاتہ نو ساوزے آسوسا؟",
+       "userlogin-joinproject": "منسلک بوس{{SITENAME}} اری",
        "nologin": "تو کھاتہ نو ساوزے آسوسا؟ $1",
        "nologinlink": "کھاتہ ساوزاوے",
        "createaccount": "کھاتہ کھولاو کورے",
        "gotaccount": "پروشٹی تان کھاتا ساوزینو بیتی شیر؟'''$1'''.",
        "gotaccountlink": "لاگن بوس",
        "userlogin-resetlink": "آوا داخل بیکو بچے تان تفصیلاتن روخڅی اسوم",
+       "userlogin-resetpassword-link": "کلمہء شناختو روخڅیتام؟",
+       "userlogin-helplink2": "لاگن کوراوا مدد کورے",
+       "createacct-emailoptional": "ای میل ایڈریس (اختیاری)",
+       "createacct-email-ph": "تان ای میلو داخل کورے",
        "createaccountmail": "بذریعۂ بشلی ڈاک",
        "createaccountreason": "وجہ:",
+       "createacct-captcha": "حفاظتی تدبیر",
+       "createacct-imgcaptcha-ph": "تو توری لوڑی نیویشے",
+       "createacct-submit": "کھاتہ ساوزاوے",
+       "createacct-benefit-heading": "{{SITENAME}} تہ غون روئے ایڈٹ کورونیان.",
+       "createacct-benefit-body1": "{{PLURAL:$1|ترمیم|ترامیم}}",
+       "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحہ|صفحات}}",
+       "createacct-benefit-body3": "حالیہ{{PLURAL:$1|contributor|contributors}}",
        "badretype": "درج شدہ کلمۂ شناخت اصلو مطابقت نو لاکھویان",
        "userexists": "تو کہ نامو کہ درج کوری آسوس ھیس پروشٹیاری استعمالہ شیر۔ مختلف نام استعمال کورے",
        "loginerror": "داخلا غلطی",
        "createaccount-title": "کھاتہ سازی برائے {{SITENAME}}",
        "login-throttled": "تو داخلِ نوشتہ بیکو بچے بو زیادہ کوششیں آرو.\nدوبارہ کوشش کوریکو بچے پھوک مدا انتظار کورے.",
        "loginlanguagelabel": "زبان: $1",
+       "pt-login": "داخل بوس",
+       "pt-login-button": "داخل بوس",
+       "pt-createaccount": "کھاتہ ساوزاوے",
+       "pt-userlogout": "لاگ آوٹ",
        "resetpass_announce": "تو ای برقی ارسال کردہ عارضی کوڈ ورڈو سوم جستہ داخل بیتی آسوس.\nداخلِ نوشتہ بیکو عملو مکمل کوریکو بچے تہ ھیارا نوغ پاسورڈ متعین کوریلک بوی:",
        "resetpass_header": "کھاتو پاسورڈو تبدیل کورے",
        "oldpassword": "پرانو کلمۂ شناخت:",
        "preview": "نمائش",
        "showpreview": "نمائش",
        "showdiff": "تبدیلیان پشاوے",
-       "anoneditwarning": "تو{{SITENAME}} داخل نو بیتی اسوس لہذا تہIP پتہ ھیہ صفحو تاریخچہ ء ترمیما محفوظ بوی",
+       "anoneditwarning": "<strong>خبردار:</strong> توویکیپیڈیا داخل نو بیتی اسوس تہ آئی پی ایڈرس تاریخچا محفوظ بوئے<strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
        "missingcommenttext": "براہِ کرم! تبصرہ موڑا درج کورے.",
        "missingcommentheader": "'''خبردار:''' تو ھیہ تبصرو بچے عنوان یا شہ سرخی مہیّا نو آرو.\nاگر تو محفوظو بٹنو کہ دوبارہ کلک آرو تھے تہ تبصرہ بغیر عنوانا محفوظ بوی.",
        "summary-preview": "نمائش خلاصہ:",
        "note": "'''نوٹ:'''",
        "previewnote": "'''یاد لاکھے، ھیہ صرفی نمائش شیر، تہ کاردو ترامیم ھنیسے محفوظ کورونو نو بیتی شینی۔'''",
        "editing": "تو \"$1\" ترمیم کوروسان۔",
+       "creating": "زیر تخلیق $1",
        "editingsection": "$1 قطعو تدوین",
        "editingcomment": "زیرترمیم $1 (تبصرہ)",
        "editconflict": "تنازعہ ترمیم:$1",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "revertmerge": "غیر ضم",
        "history-title": "تاریخچہ \"$1\"",
+       "difference-title": "ایڈٹ کاردوان موژی فرق \"$1\"",
        "lineno": "لکیر $1:",
        "compareselectedversions": "منتخب متـنو موازنہ",
        "editundo": "استرجع",
+       "diff-multi-sameuser": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)",
        "searchresults": "تلاشو نتیجہ",
        "searchresults-title": "نتائجِ تلاش برائے \"$1\"",
        "notextmatches": "ھیہ عنوانو سورا کیہ دی صفحہ موجود نیکی",
        "shown-title": "فی صفحہ $1 {{PLURAL:$1|نتیجہ|نتائج}} پشاوے",
        "viewprevnext": "لوڑے($1 {{int:pipe-separator}} $2) ($3)۔",
        "searchmenu-exists": "'''ھیہ کھوار ویکیپیڈیا \"[[:$1]]\" نامی ای صفحہ موجود شیر'''",
-       "searchmenu-new": "↓'''ھیہ کھوار ویکیپیڈیا صفحہ \"[[:$1]]\" تخلیق کورے!'''",
+       "searchmenu-new": "<strong>ھیہ ویکیپیڈیا \"[[:$1]]\" ساؤزاوے'''!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
        "searchprofile-articles": "مشمولاتی صفحات",
        "searchprofile-images": "ملٹی میڈیا",
        "searchprofile-everything": "سف اشناری",
        "search-interwiki-more": "(مزید)",
        "searchrelated": "متعلقہ",
        "searchall": "کھل",
+       "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "استفسارو مطابقا نتائج ملاو نو ھونی.",
        "powersearch-legend": "ایڈوانس سرچ",
        "powersearch-ns": "جائے ناما تلاش:",
        "grouppage-sysop": "{{ns:project}}:کھوار ویکیپیڈیو منتظمین",
        "right-movefile": "منتقل کورے",
        "right-upload": "فائل انځاوے",
+       "right-writeapi": "اے پی آئی لکھائیو استعمال",
        "right-delete": "صفحان ضائع کورے",
        "newuserlogpage": "نوشتۂ آمد صارف",
        "rightslog": "یوزروت مختص شدہ حقوق",
        "action-edit": "ھیہ صفحا ایڈیٹنگ کورے",
        "nchanges": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
+       "enhancedrc-history": "تاریخچہ",
        "recentchanges": "حالیہ تبدیلی",
        "recentchanges-legend": "حالیہ تبدیلیان اختیارات",
        "recentchanges-summary": "ھیہ صفحا کھوار ویکیپیڈیا باک تازہ تریں تبدیلیان مشاہدہ کورے",
        "recentchanges-label-minor": "ھیہ ای معمولی ترمیم شیر",
        "recentchanges-label-bot": "ھیہ ایڈیٹو خود کار بوٹو زریعا انجام دیونو ہوی",
        "recentchanges-label-unpatrolled": "ھیہ ترمیمو ھمونیہ پت مراجعت(Patrolled) کورونو نو بیتی شیر",
+       "recentchanges-label-plusminus": "صفحو سائز تبدیل شدہ بلحاظ بائٹ مقدار",
+       "recentchanges-legend-heading": "'''لیجنڈ:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ھمو دی لوڑے [[Special:NewPages|list of new pages]])",
        "rcnotefrom": "ھیہ موڑا '''$2''' کورونو بیرو تبدیلیان تفصیلات شینی ('''$1''' تبدیلیان پشینو بونیان)۔",
        "rclistfrom": "$3 $2 نوغ تبدیلیاں پشیک شروع کورے",
        "rcshowhideminor": " معمولی ترامیم $1",
+       "rcshowhideminor-show": "ویریغ کورے",
+       "rcshowhideminor-hide": "کھوشتاوے",
        "rcshowhidebots": "خودکار صارف $1",
-       "rcshowhideliu": "داخل بیرو صارف $1",
+       "rcshowhidebots-show": "پشاوے",
+       "rcshowhidebots-hide": "مو پشاوے",
+       "rcshowhideliu": "داخل شدہ صارف $1",
+       "rcshowhideliu-hide": "کھوشتاوے",
        "rcshowhideanons": "گمنام صارف $1",
+       "rcshowhideanons-show": "پشاوے",
+       "rcshowhideanons-hide": "مو پشاوے",
        "rcshowhidepatr": "$1 لوڑونو بیرو لکھائی",
        "rcshowhidemine": "ذاتی ترامیم $1",
+       "rcshowhidemine-show": "پشاوے",
+       "rcshowhidemine-hide": "کھوشتاوے",
        "rclinks": "آخری $2 آنوسو بیرو $1 تبدیلیان مشاہدہ کورے<br />$3",
        "diff": "فرق",
        "hist": "تاریخچہ",
        "minoreditletter": "م",
        "newpageletter": "نوغ",
        "boteditletter": "خودکار",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} تبدیلیاری آچی",
        "rc-enhanced-expand": "تفصیلاتن پشاوے (JavaScript ضرورت بوی)",
        "rc-enhanced-hide": "تفصیلاتن کھوشتاوے",
        "recentchangeslinked": "متعلقہ تبدیلی",
        "filedesc": "خلاصہ",
        "license": "لایسنس",
        "license-header": "لایسنسنگ",
+       "imgfile": "فائل",
        "file-anchor-link": "فایل",
        "filehist": "مسلو تاریخ",
        "filehist-help": "ھیہ لوڑیکو بچے  کہ کیہ خاص وختہ فایل کیہ قسمہ ظاہر باو اوشتای ھتے  تاریخ یا وختہ طق(کلک) کورے",
        "nolinkstoimage": "ھیہ کھوار ویکیپیڈیا ھش کیہ صفحات نیکی کہ ھتیت ھیہ مسل (فائلو) متعلقہ شینی",
        "sharedupload-desc-here": "ھیہ فائل $1 موژاری شیر وا ھیہ خور پرجیکٹہ استعمال بویان۔\nمزید معلومات ھمو [$2 فائل مشقولگی صفحہا]  دیونو بیتی شیر",
        "uploadnewversion-linktext": "ھیہ مسلو نوغ ورژنو اپلوڈ کورے",
+       "upload-disallowed-here": "تو ھیہ فائلہ ترمیم کوریکو نو بوس",
        "randompage": "بےترتیب صفحہ",
        "statistics": "اعداد و شمار",
        "nbytes": "$1 {{PLURAL:$1|بایٹ|بایٹس}}",
        "pager-older-n": "{{PLURAL:$1|قدیم1|قدیم ترین $1}}",
        "booksources": "کتابی وسائل",
        "booksources-search-legend": "کتابی وسایلان تلاش",
+       "booksources-search": "Search/تلاش",
        "specialloguserlabel": "یوزر",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "deleteotherreason": "جوو/اِضافی وجہ",
        "deletereasonotherlist": "جوو وجہ",
        "rollbacklink": "آچی سابقہ حالتہ",
+       "rollbacklinkcount": "آچی سابقہ حالتہ $1 {{PLURAL:$1|edit|edits}}",
        "protectlogpage": "نوشتۂ محفوظ شدگی",
        "protectedarticle": "\"[[$1]]\" محفوظ کورونو ھوی",
        "modifiedarticleprotection": "تبدیل کاردو پروٹیکشن لیول \"[[$1]]\"",
        "undeleteviewlink": "لوڑے",
        "namespace": "نامو ژاغہ:",
        "invert": "انتخاب بالعکس",
+       "tooltip-invert": "تبدیلیان کھوشتیکو بچے ھیہ بکسو چیک کورے",
+       "namespace_association": "متعلقہ فضا",
+       "tooltip-namespace_association": "مشقولگی اوچے خور کیاغ نیویشیکو بچے ھیہ بکسو چیک کورے",
        "blanknamespace": "(مرکز)",
        "contributions": " $1 صارفو حصہ",
        "contributions-title": "$1 صارفو حصہ",
        "tooltip-pt-mycontris": "تہ کاردو کورمان فہرست",
        "tooltip-pt-login": "تہ بچے داخلِ نوشتہ بیک جم شیر، لیکن ھیہ ضروری نو",
        "tooltip-pt-logout": "خارج بوس",
+       "tooltip-pt-createaccount": "تتے دعوت دیونو بویان کہ کھاتہ ساوزاوے۔لیکن کھاتہ ساوزیک لازمی نو-",
        "tooltip-ca-talk": "مضمونو بارا تبادلۂ خیال",
        "tooltip-ca-edit": "تو ھیہ صفحہا ترمیم کوریکو بوس\nبرائے مہربانی! تان ترمیماتن محفوظ کوریکار پروشٹی  نمائشو بٹنا کلک کورے",
        "tooltip-ca-addsection": "نوغ قطعہ شروع کورے",
        "tooltip-rollback": "\"رول بیک\" ای کلکا صفحو واپس سابقہ حالتہ گنی آلوی",
        "tooltip-undo": "\"واپس\" یا لوظ آچیا کلک کوریکو سوم جستہ تہ صفحہ کچا تہ پشینو بوی ھے سوم جستہ تو واپس کوریکو وجہ نیویشیکو بوس",
        "tooltip-summary": "ای مختصار سمری ساوزاوے",
+       "simpleantispam-label": "اینٹی ایسپم چیک. Do <strong>NOT</strong> fill this in!",
+       "pageinfo-toolboxlink": "معلومات صفحہ",
        "previousdiff": " ← پرانو تدوین",
        "nextdiff": "صفحہو نم:",
        "file-info-size": "$1 × $2 پکسلز, فل سایز: $3, MIME ٹایپ: $4",
        "file-nohires": "ھموغاری لوٹ ریزولیوشن دستیاب نیکی.",
        "svg-long-desc": "SVG فایل, nominally $1 × $2 پکسلز, فایل سایز: $3",
-       "show-big-image": "لوٹ کوری پشاوے",
+       "show-big-image": "اصل فائل",
+       "show-big-image-preview": "ھیہ نمائشو حجم:$1",
+       "show-big-image-other": "خور{{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-size": "$1 × $2 پکسلز",
        "bad_image_list": "شکلبند درج ذیل شیر:\n\nصرف فہرستی عناصرار (* شروع باک لکیر) شامل کورونو بونیان\nکیہ لکیرا آویلو ربط کیہ خراب فایلو بیلیک۔\nھتے لکیرا باقی گیاک ربطو مستثنیٰ قرار دیونو بویان، مثلاً صفحات کورا کہ فایل لکیرو موژا گویان۔",
        "metadata": "میٹا ڈیٹا",
        "metadata-help": "ھیہ فائلا خور دی معلومات شینی، شاید ھتیت ڈیجیٹل کیمرو یا سکینران زریعا کمپیوٹرو درینو بیتی شینی وا ھیتان زریعا ھمیتان ڈیجیٹل ساوزینو بیتی شیر\n\nاگر فائلو ھمو اصلی حالتہ  تبدیل کہ کورونو ھوی تھے ای کما تفصیلات تبدیل بیرو فائلو باریا موجود نیکی",
        "metadata-expand": "تفصیلان پشاوے",
        "metadata-collapse": "درونگار تفصیلان کھوشتاوے",
        "metadata-fields": "ایگزف میٹاڈیٹا ھیارا دیونو بیرو ھوٹوان صفحا دیونو بونی وا کیاوتکہ میٹاڈیٹا ٹیبل کھولاو ھوی باقی اشناری بائی ڈیفالٹ کھوشت تان بہچونی\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "پیشکش",
+       "exif-xresolution": "تھروسکی ریزولوشن",
+       "exif-yresolution": "ݯوکتو ریزولوشن",
+       "exif-datetime": "فائلو تبدیلیو تاریخ اوچے وخت",
+       "exif-make": "کیمرو ساوزیاک",
+       "exif-model": "کیمرو ماڈل",
+       "exif-software": "سافٹویئر استعمال",
+       "exif-exifversion": "اکزیف ورژن",
+       "exif-colorspace": "رنگ فضا",
+       "exif-datetimeoriginal": "ڈیٹا ساوزیکو تاریخ اوچے وخت",
+       "exif-datetimedigitized": "ڈیجیٹلائز کوریکو تاریخ اوچے وخت",
+       "exif-orientation-1": "عام",
        "exif-dc-date": "تاریخ",
        "namespacesall": "تھمامو",
        "monthsall": "سف",
        "watchlisttools-view": "موقعی تبدیلیان لوڑے",
        "watchlisttools-edit": "لوڑے یا واچ لسٹہ ترمیم کورے",
        "watchlisttools-raw": "نوغ واچ لسٹان ایڈیٹ کورے",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
        "duplicate-defaultsort": "'''خبردار:''' ڈیفالٹ تاڑٰ(نغڑی) \"$2\" پروشٹیو ڈیفالٹ تاڑا \"$1\" لیگی شیر۔",
        "specialpages": "اسپیشل صفحہ",
        "external_image_whitelist": " #ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر<pre>\n#موڑا ریگولر لوان دیور((صرف ھتیتان کیاغ ھمیتان موژی شینی //) //) \n#بیریو ھوٹوان آر ایلان سوم ھمیتان میچ کورنو بوی\n# کیاغ کہ میچ ھونی ھیتان ھوٹوان سوم پشینو بوی بصورت دیگر ھیتان لنک کیاغ کی شینی ھتیتان پشینو بوی\n#لاین کیاغ کی شروع بویان  # کومنٹ جوشونو بوی۔\n#ھیہ کیس سینسیٹو شیر۔\n\n#لینو سورا ریجیکس فریگمنٹو لاکھے. ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر۔</pre>",
        "tag-filter": "[[Special:Tags|Tag]] filter:",
        "tag-filter-submit": "فلٹر",
+       "tag-list-wrapper": "([[اسپیشل:ٹیگز|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-title": "Tags/ٹیگز",
        "compare-page1": "صفحہ 1",
+       "logentry-delete-delete": "$1 {{GENDER:$2|حذف کورونو ہوئے}} صفحہ $3",
+       "logentry-move-move": "$1 {{GENDER:$2|moved}} صفحہ $3  پت $4",
+       "logentry-newusers-create": "صارف کھاتہ $1 {{GENDER:$2|ساوزیینو ھوئے}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
        "rightsnone": "(نو)",
        "feedback-message": "پیغام",
        "searchsuggest-search": "Search/تلاش"
index 1753182..835797f 100644 (file)
@@ -11,7 +11,8 @@
                        "Balnur.s",
                        "Нұрлан Рахымжанов",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Batyrbek.kz"
                ]
        },
        "tog-underline": "Сілтеменің астын сызу:",
        "just-now": "Дәл қазір",
        "hours-ago": "$1 {{PLURAL:$1|сағат|сағат}} бұрын",
        "minutes-ago": "$1 {{PLURAL:$1|минут|минут}} бұрын",
-       "seconds-ago": "$1 {{PLURAL:$1|секунт|секунт}} бұрын",
+       "seconds-ago": "$1 {{PLURAL:$1|секунд|секунд}} бұрын",
        "bad_image_list": "Пішімі төмендегідей:\n\nТек тізім даналары (* нышанымен басталытын жолдар) есептеледі.\nЖолдың бірінші сілтемесі жарамсыз суретке сілтеу жөн.\nСол жолдағы кейінгі әрбір сілтемелер ерен болып есептеледі, мысалы жол ішіндегі кездесетін суреті бар беттер.",
        "metadata": "Қосымша мәліметтер",
        "metadata-help": "Осы файлда қосымша мәліметтер қамтылған, файл жасалуына немесе цифрлық формаға айналдырылуына дижитал (сандық) аппарат не сканер қолданылған болуы ықтимал.\nЕгер осы файл негізгі күйінен өзгертілген болса кейбір егжей-тегжейлері өзгертілген файлға лайық болмас.",
index 9af2ee9..cbd155a 100644 (file)
@@ -25,7 +25,7 @@
                        "아라"
                ]
        },
-       "tog-underline": "ಲಿà²\82à²\95à³\81ಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
+       "tog-underline": "à²\95à³\8aà²\82ಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
        "tog-hideminor": "ಚಿಕ್ಕಪುಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು ಅಡಗಿಸಿ",
        "tog-hidepatrolled": "ಪಹರೆಯಲ್ಲಿ ಆದ ಸಂಪಾದನೆಗಳನ್ನು ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳಲ್ಲಿ ಅಡಗಿಸು",
        "tog-newpageshidepatrolled": "ಪಹರೆಯಲ್ಲಿ ಆದ ಪುಟಗಳನ್ನು ಹೊಸ ಪುಟಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಅಡಗಿಸು",
        "import-noarticle": "ಆಮದು ಮಾಡಲು ಯಾವ ಪುಟವೂ ಇಲ್ಲ!",
        "import-nonewrevisions": "ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳನ್ನೂ ಮುಂಚೆಯೆ ಆಮದು ಮಾಡಲಾಗಿದೆ.",
        "importlogpage": "ಆಮದುಗಳ ದಾಖಲೆ",
-       "import-logentry-upload": "ಫೈಲು ಅಪ್ಲೋಡ್ ಮೂಲಕ [[$1]] ಅನ್ನು ಆಮದು ಮಾಡಲಾಗಿದೆ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}",
        "tooltip-pt-userpage": "ನಿಮ್ಮ ಸದಸ್ಯ ಪುಟ",
        "tooltip-pt-anonuserpage": "ನೀವು ಸಂಪಾದನೆ ಮಾಡುತ್ತಿರುವ ipಯ ಬಳಕೆದಾರ ಪುಟ",
        "duration-decades": "$1 {{PLURAL:$1|ದಶಕ|ದಶಕಗಳು}}",
        "duration-centuries": "$1 {{PLURAL:$1|ಶತಮಾನ|ಶತಮಾನಗಳು}}",
        "duration-millennia": "$1 {{PLURAL:$1|ಸಹಸ್ರಮಾನ|ಸಹಸ್ರಮಾನಗಳು}}",
-       "expand_templates_preview": "ಮುನ್ನೋಟ"
+       "expand_templates_preview": "ಮುನ್ನೋಟ",
+       "special-characters-group-latin": "ಲ್ಯಾಟಿನ",
+       "special-characters-group-greek": "ಗ್ರೀಕ್",
+       "special-characters-group-arabic": "ಅರೇಬಿಕ್",
+       "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": "ಖ್ಮೇರ್"
 }
index 9494194..8e9ca7d 100644 (file)
@@ -45,7 +45,8 @@
                        "양념파닭",
                        "콩가루",
                        "Twotwo2019",
-                       "SeoJeongHo"
+                       "SeoJeongHo",
+                       "Banwol"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "wrongpassword": "입력한 비밀번호가 잘못되었습니다.\n다시 시도하세요.",
        "wrongpasswordempty": "비밀번호를 입력하지 않았습니다.\n다시 시도하세요.",
        "passwordtooshort": "비밀번호는 {{PLURAL:$1|$1 글자}} 이상이어야 합니다.",
+       "passwordtoolong": "비밀번호는 {{PLURAL:$1|1자|$1자}}보다 길어서는 안 됩니다.",
        "password-name-match": "비밀번호는 사용자 계정 이름과 반드시 달라야 합니다.",
        "password-login-forbidden": "이 사용자 계정 이름과 비밀번호는 사용할 수 없습니다.",
        "mailmypassword": "비밀번호 재설정",
        "recentchanges-summary": "이 페이지에서 위키의 최근 바뀜을 추적합니다.",
        "recentchanges-noresult": "지정한 조건과 일치하는 주어진 기간 동안 바뀜이 없습니다.",
        "recentchanges-feed-description": "이 피드에 위키의 최근 바뀜을 추적합니다.",
-       "recentchanges-label-newpage": "새로 만든 문서",
+       "recentchanges-label-newpage": "새 문서",
        "recentchanges-label-minor": "사소한 편집",
        "recentchanges-label-bot": "봇이 수행한 편집",
        "recentchanges-label-unpatrolled": "아직 점검하지 않은 편집",
        "listfiles-delete": "삭제",
        "listfiles-summary": "이 특수 문서는 모든 올려진 파일을 보여줍니다.",
        "listfiles_search_for": "다음 미디어 이름 검색:",
+       "listfiles-userdoesnotexist": "계정 \"$1\"은 등록되지 않았습니다.",
        "imgfile": "파일",
        "listfiles": "파일 목록",
        "listfiles_thumb": "섬네일",
        "emailccsubject": "$1에게 보낸 메시지의 복사본: $2",
        "emailsent": "이메일 보냄",
        "emailsenttext": "이메일을 보냈습니다.",
-       "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 \"이메일 보내기\" 기능을 통해 보냈습니다.",
+       "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 \"{{int:emailpage}}\" 기능을 통해 보냈습니다.",
        "usermessage-summary": "시스템 메시지 남기기",
        "usermessage-editor": "시스템 메신저",
        "usermessage-template": "MediaWiki:UserMessage",
        "tags-delete-explanation-warning": "이 행위는 데이터베이스 관리자도 <strong>되돌릴 수 없으며</strong> <strong>취소할 수 없습니다.</strong>. 당신이 하려고 하고 있는 행동이 맞는지 확인하십시오.",
        "tags-delete-explanation-active": "<strong>\"$1\" 태그는 활성화되어 있으며, 미래에도 적용될 것입니다.</strong> 이러한 행동을 방지하려면, 태그가 설정되도록 적용된 곳을 찾아, 비활성화하십시오.",
        "tags-delete-reason": "이유:",
+       "tags-delete-submit": "이 태그를 영구히 삭제",
+       "tags-delete-not-allowed": "확장 기능에서 정의된 태그는 확장 기능 설정에서 허용되지 않은 이상 삭제할 수 없습니다.",
        "tags-delete-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+       "tags-activate-reason": "이유:",
        "tags-activate-not-found": "\"$1\" 태그가 존재하지 않습니다.",
        "tags-deactivate-reason": "이유:",
        "comparepages": "문서 비교",
        "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-move-move_redir-noredirect": "$1 사용자가 $3 문서를 $4 문서로 넘겨주기를 남기지 않으면서 {{GENDER:$2|옮기면서}} 옮길 대상에 있던 넘겨주기를 덮어썼습니다",
+       "logentry-move-move_redir-noredirect": "$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|만들었습니다}}",
        "log-name-pagelang": "언어 바꾸기 기록",
        "log-description-pagelang": "문서 언어를 바꾼 기록입니다.",
        "logentry-pagelang-pagelang": "$1 사용자가 $3의 문서 언어를 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}.",
-       "default-skin-not-found": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치에는 다음 스킨이 포함된 것으로 보입니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.\n\n$2\n\n; 미디어위키를 설치했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 <code>skins/</code> 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 <code dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다.\n\n; 미디어위키를 업그레이드했다면:\n: 미디어위키 1.24와 새 버전은 더 이상 설치된 스킨을 자동으로 활성화하지 않습니다 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: 스킨 자동발견]을 보세요). 현재 설치된 스킨을 모두 활성화하려면 <code>LocalSettings.php</code> 안에 다음 줄을 붙여 넣을 수 있습니다:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code>를 수정했다면:\n: 스킨 이름에 오타가 났는지 다시 확인하세요.",
+       "default-skin-not-found": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치에는 다음 스킨이 포함된 것으로 보입니다. 스킨을 활성화{{PLURAL:$4||하고 기본값으로 선택}}하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.\n\n$2\n\n; 미디어위키를 설치했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 <code>skins/</code> 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 <code dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다.\n\n; 미디어위키를 업그레이드했다면:\n: 미디어위키 1.24와 새 버전은 더 이상 설치된 스킨을 자동으로 활성화하지 않습니다 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: 스킨 자동발견]을 보세요). 현재 설치된 스킨을 모두 활성화하려면 <code>LocalSettings.php</code> 안에 다음 줄을 붙여 넣을 수 있습니다:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code>를 수정했다면:\n: 스킨 이름에 오타가 났는지 다시 확인하세요.",
        "default-skin-not-found-no-skins": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치된 스킨은 없습니다.\n\n; 미디어위키를 설치했거나 업그레이드했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. 미디어위키 1.24와 새 버전은 주 저장소에 어떠한 스킨도 포함되어 있지 않습니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 <code>skins/</code> 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 <code dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (활성화)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''비활성화''')",
index 2a37b9c..c5ac395 100644 (file)
        "wrongpassword": "Dat Passwood oder dä Metmaacher Name wor verkihrt. Jetz muss De et noch ens versöke.",
        "wrongpasswordempty": "Dat Passwood ka'mer nit fottlooße. Jetz muss De et noch ens versöke.",
        "passwordtooshort": "En Paßwööter {{PLURAL:$1|moß|möße|moß}} winnichstens {{PLURAL:$1|ei|$1|kei}} Zeiche, {{PLURAL:$1|Zeffer|Zeffere|Zeffere}}, udder Bochstave dren sin.",
+       "passwordtoolong": "Paßwööter künnne nit länge sin wi {{PLURAL:$1|ein|$1|Noll}} Zeische.",
        "password-name-match": "Ding Poßwoot moß anders wi Dinge Name als ene Metmaacher sin.",
        "password-login-forbidden": "Dä Zohjang met däm Metmaacher-Name un däm Paßwoot es verbodde.",
        "mailmypassword": "Lohß jonn!",
        "notextmatches": "Kein Sigg met däm Tex",
        "prevn": "de {{PLURAL:$1|ein|$1|0}} doför zeije",
        "nextn": "de {{PLURAL:$1|läzte |nächste $1|nächste 0}} zeije",
+       "prev-page": "de Sigg derföhr",
+       "next-page": "de Sigg dernoh",
        "prevn-title": "{{PLURAL:$1|Et vorijje|De $1 dovör|Es nix dovör}}",
        "nextn-title": "{{PLURAL:$1|Et näähßte|De nähßte $1|Kütt nix mieh}}",
        "shown-title": "Zeisch {{PLURAL:$1|ein|$1|nix}} pro Sigg",
        "listfiles-delete": "fottschmieße",
        "listfiles-summary": "Heh sin de huhjelade Dateije opjeleß.",
        "listfiles_search_for": "Sök noh däm Name vun dä Datei:",
+       "listfiles-userdoesnotexist": "Ene Metmaacher mem Nahme „$1“ ham_mer nit.",
        "imgfile": "Dattei",
        "listfiles": "Dateie opleste",
        "listfiles_thumb": "Minni-Belldsche",
        "emailccsubject": "En Kopie vun Dinger E-Mail aan $1: $2",
        "emailsent": "De <i lang=\"en\">e-mail</i> es ongerwähs",
        "emailsenttext": "Ding E-Mail es jetz lossjescheck woode.",
-       "emailuserfooter": "Hee di e-mail hät dä „$1“ an dä „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailuser}}“ jebruch.",
+       "emailuserfooter": "Hee di e-mail hät dä „$1“ an dä „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailpage}}“ jebruch.",
        "usermessage-summary": "En Nohreesch vum Wiki afjelivvert.",
        "usermessage-editor": "Name vum Metmaacher för de Täxte un Nohreshte vum Wiki ze beärbeide",
        "watchlist": "ming Oppaßleß",
        "version-parser-function-hooks": "Parserfunktione",
        "version-hook-name": "De Schnettstelle ier Name",
        "version-hook-subscribedby": "Opjeroofe vun",
-       "version-version": "($1)",
+       "version-version": "(Väsjohn $1)",
        "version-no-ext-name": "[keine Nahme]",
        "version-license": "MehdijaWikki sing Lėzänz",
        "version-ext-license": "‎Lėzänz",
        "feedback-error1": "Fähler: dat <i lang=\"en\">API</i> säät jät, wat mer nit kenne",
        "feedback-error2": "Fähler: de Sigg ze ändere es donävve jejange",
        "feedback-error3": "Fähler: dat <i lang=\"en\">API</i> joov kein Antwoot",
+       "feedback-error4": "Ene Fähler es opjetrodde.\nMer kunnte di Rökmäldong nit onger dä aanjejovve Övverschreff aflähje.",
        "feedback-message": "Nohreesch:",
        "feedback-subject": "Theema:",
        "feedback-submit": "Lohß jonn!",
index a1af0f4..f970484 100644 (file)
        "underline-never": "Qet",
        "underline-default": "Tercîhên lêgerokê",
        "editfont-default": "Tercîhên lêgerokê",
-       "sunday": "Yekşem",
-       "monday": "Duşem",
+       "sunday": "yekşem",
+       "monday": "duşem",
        "tuesday": "Sêşem",
        "wednesday": "Çarşem",
        "thursday": "Pêncşem",
        "friday": "În",
-       "saturday": "Å\9eemî",
+       "saturday": "Å\9femî",
        "sun": "Ykş",
        "mon": "Duş",
        "tue": "Sêş",
        "thu": "Pşm",
        "fri": "În",
        "sat": "Şem",
-       "january": "Rêbendan",
-       "february": "Reşemî",
-       "march": "Adar",
-       "april": "Avrêl",
-       "may_long": "Gulan",
-       "june": "Pûşper",
-       "july": "Tîrmeh",
-       "august": "Gelawêj",
-       "september": "Rezber",
-       "october": "Kewçêr",
-       "november": "Sermawez",
-       "december": "Berfanbar",
+       "january": "rêbendan",
+       "february": "reşemî",
+       "march": "adar",
+       "april": "avrêl",
+       "may_long": "gulan",
+       "june": "pûşper",
+       "july": "tîrmeh",
+       "august": "gelawêj",
+       "september": "rezber",
+       "october": "kewçêr",
+       "november": "sermawez",
+       "december": "berfanbar",
        "january-gen": "Rêbendan",
        "february-gen": "Reşemî",
        "march-gen": "Adar",
        "april-gen": "Avrêl",
-       "may-gen": "Gulan",
-       "june-gen": "Pûşper",
+       "may-gen": "gulan",
+       "june-gen": "pûşper",
        "july-gen": "Tîrmeh",
        "august-gen": "Gelawêj",
-       "september-gen": "Rezber",
+       "september-gen": "rezber",
        "october-gen": "Kewçêr",
        "november-gen": "Sermawez",
-       "december-gen": "Berfanbar",
+       "december-gen": "berfanbar",
        "jan": "rêb",
        "feb": "reş",
        "mar": "adr",
        "actions": "Çalakî",
        "namespaces": "Valahiya nav",
        "variants": "Variyant",
+       "navigation-heading": "Menûya navîgasyonê",
        "errorpagetitle": "Çewtî",
        "returnto": "Vegere $1.",
        "tagline": "Ji {{SITENAME}}",
        "viewhelppage": "Rûpela alîkariyê bibîne",
        "categorypage": "Li rûpela kategoriyê binêre",
        "viewtalkpage": "Li gotûbêjê binêre",
-       "otherlanguages": "Zimanên din",
+       "otherlanguages": "Bi zimanên din",
        "redirectedfrom": "(Ji $1 hate beralîkirin)",
        "redirectpagesub": "Rûpelê beralî bike",
        "lastmodifiedat": "Ev rûpel cara dawî di $2, $1 de hate guherandin.",
        "yourname": "Navê bikarhêner:",
        "userlogin-yourname": "Navê bikarhêner",
        "userlogin-yourname-ph": "Navê xwe yê bikarhêneriyê binivîse",
+       "createacct-another-username-ph": "Navê xwe yê bikarhêneriyê binivîse",
        "yourpassword": "Şîfre:",
        "userlogin-yourpassword": "Şîfre",
        "userlogin-yourpassword-ph": "Şîfreya xwe binivîse",
        "gotaccount": "Hesabê te heye? $1.",
        "gotaccountlink": "Têkeve",
        "userlogin-resetlink": "Te agahiyên hesabê xwe ji bîr kirin?",
-       "userlogin-resetpassword-link": "Şîfreyê ji nû ve çêke",
+       "userlogin-resetpassword-link": "Te şîfreye xwe jibîrkir?",
        "userlogin-helplink2": "Alîkariya têketinê",
+       "userlogin-createanother": "Hesabek din çeke",
        "createacct-emailrequired": "E-name",
        "createacct-emailoptional": "E-name",
        "createacct-email-ph": "E-nameya xwe binivîse",
+       "createacct-another-email-ph": "E-nameya xwe têkeve",
        "createaccountmail": "Use a temporary random password and send it to the email address specified below",
        "createacct-realname": "Navê te ya rast (Ko tu bixwazi bikeve, pêdivî nîne)",
        "createaccountreason": "Sedem:",
        "notextmatches": "Di nav sernivîsan de nehat dîtin.",
        "prevn": "{{PLURAL:$1|$1}} paş",
        "nextn": "{{PLURAL:$1|$1}} pêş",
+       "prev-page": "rûpela berî vê",
+       "next-page": "rûpela pêş",
        "prevn-title": "{{PLURAL:$1|result|Encamên}} pêştir $1",
        "nextn-title": "$1 {{PLURAL:$1|encama|encamên}} pêştir",
        "shown-title": "Li her rûpelê $1 {{PLURAL:$1|encam|encaman}} nîşan bide",
        "action-userrights-interwiki": "mafê bikarhênerên li ser wîkiyên din biguherîne",
        "action-sendemail": "e-nameyan bişîne",
        "nchanges": "$1 {{PLURAL:$1|guherandinek|guherandin}}",
+       "enhancedrc-history": "dîrok",
        "recentchanges": "Guherandinên dawî",
        "recentchanges-legend": "Vebijarkên guherandinên dawî",
        "recentchanges-summary": "Guhertinên herî dawî yên wîkiyê li ser vê rûpelê bişopîne.",
-       "recentchanges-label-minor": "Ev guhertineka biçûk e",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
+       "recentchanges-label-newpage": "Rûpeleke nû hate çêkirin",
+       "recentchanges-label-minor": "Ev guherîneke biçûk e",
+       "recentchanges-label-bot": "Ev guherîn ji aliyê botekê ve hate çêkirin",
+       "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û]])",
        "rclistfrom": "Guherandinên ji $3 $2 şûnde nîşan bide",
        "rcshowhideminor": "Guherandinên biçûk $1",
        "rcshowhideminor-show": "nîşan bide",
        "listfiles_size": "Mezinbûn",
        "listfiles_description": "Danasîn",
        "listfiles_count": "Guherto",
+       "listfiles-latestversion-yes": "Erê",
+       "listfiles-latestversion-no": "Na",
        "file-anchor-link": "Wêne",
        "filehist": "Dîroka daneyê",
        "filehist-help": "Ji bo dîtina guhertoya wê demê bişkoka dîrokê bitikîne.",
        "unusedtemplates": "Şablonên nayên bikaranîn",
        "unusedtemplateswlh": "lînkên din",
        "randompage": "Rûpeleke ketober",
+       "randomincategory-category": "Kategorî:",
        "randomredirect": "Beralîkirina ketober",
        "statistics": "Statîstîk",
        "statistics-header-pages": "Statîstîkên rûpelê",
        "statistics-files": "Wêneyên barkirî",
        "statistics-users": "[[Special:ListUsers|Bikarhênerên tomarkirî]]",
        "statistics-users-active": "Bikarhênerên çalak",
+       "pageswithprop-submit": "Biçe",
        "doubleredirects": "Beralîkirinên ducarî",
        "double-redirect-fixed-move": "Cihê [[$1]] hatiye guhertin, ew niha beralîkirina [[$2]] ye.",
        "brokenredirects": "Beralîkirinên xerabûyî",
        "usercreated": "di $1 de, li $2 hate çêkirin",
        "newpages": "Rûpelên nû",
        "newpages-username": "Navê bikarhêner:",
-       "ancientpages": "Gotarên kevintirîn",
+       "ancientpages": "Gotarên herî kevin",
        "move": "Navê rûpelê biguherîne",
        "movethispage": "Vê rûpelê bigerîne",
        "notargettitle": "Hedef tune",
        "pager-older-n": "{{PLURAL:$1|kevintir 1|kevintir $1}}",
        "booksources": "Çavkaniyên pirtûkan",
        "booksources-search-legend": "Li pirtûkan bigere",
+       "booksources-search": "Lêgerîn",
        "booksources-text": "Li vir listek ji lînkên rûpelên, yê pirtûkên nû ya kevin difiroşin, heye. Hên jî li vir tu dikarî înformasyonan li ser wan pirtûkan tê derxê.",
        "specialloguserlabel": "Bikarhêner:",
        "speciallogtitlelabel": "Sernav:",
        "emailsent": "E-name hat şandin",
        "emailsenttext": "E-nameya te hat şandin.",
        "usermessage-editor": "Peyamnêra sîstemê",
-       "watchlist": "Lîsteya min a şopandinê",
+       "watchlist": "Lîsteya şopandinê",
        "mywatchlist": "Lîsteya min a şopandinê",
        "nowatchlist": "Tiştek di lîsteya te ya şopandinê de tune ye.",
        "watchlistanontext": "Ji  kerema xwe ji bo dîtin an jî sererastkirina lîsteya te ya şopandinê xwe $1.",
        "protect_expiry_old": "Dema girtinê di zemanê berê da ye.",
        "protect-default": "Destûrê bide hemû bikarhêneran",
        "protect-level-autoconfirmed": "Bikarhênerên neqeydkirî astengbike",
-       "protect-level-sysop": "Tenê rêveber (admîn)",
+       "protect-level-sysop": "Tenê ji rêveber (admîn)ara destûr bide",
        "protect-expiring": "heta roja $1 (UTC)",
        "protect-expiring-local": "di $1 de dema wê xilas dibe",
        "protect-othertime": "Demeke din:",
        "htmlform-submit": "Tomar bike",
        "htmlform-reset": "Guherandinan vegerîne",
        "htmlform-selectorother-other": "Yên din",
+       "htmlform-no": "Na",
+       "htmlform-yes": "Erê",
        "logentry-delete-delete": "$1 rûpela $3 jê bir",
        "revdelete-content-hid": "naverok veşartî ye",
        "revdelete-uname-hid": "navê bikarhêneriyê yê veşartî",
        "logentry-newusers-create": "$1 hesabekî bikarhêneriyê çêkir",
        "rightsnone": "(tune)",
        "revdelete-summary": "kurteyê biguherîne",
+       "feedback-back": "Paşve",
        "feedback-cancel": "Betal bike",
        "feedback-close": "Çêbû",
+       "feedback-error-title": "Çewtî",
        "feedback-message": "Peyam:",
        "feedback-subject": "Mijar:",
        "feedback-thanks-title": "Spas!",
index 4319ac3..1de239c 100644 (file)
        "privacypage": "Project:Dateschutz",
        "badaccess": "Net genuch Rechter",
        "badaccess-group0": "Dir hutt net déi néideg Rechter fir dës Aktioun duerchzeféieren.",
-       "badaccess-groups": "D'Aktioun déi dir gewielt hutt, kann nëmme vu Benotzer aus {{PLURAL:$2|der Grupp|enger vun de Gruppen}} $1 duerchgefouert ginn.",
+       "badaccess-groups": "D'Aktioun déi Dir gewielt hutt, kann nëmme vu Benotzer aus {{PLURAL:$2|der Grupp|enger vun de Gruppen}} $1 duerchgefouert ginn.",
        "versionrequired": "Versioun $1 vu MediaWiki gëtt gebraucht",
        "versionrequiredtext": "D'Versioun $1 vu MediaWiki ass néideg, fir dës Säit ze benotzen.\nKuckt d'[[Special:Version|Versiounssäit]].",
        "ok": "OK",
        "missingsummary": "'''Erënnerung:''' Dir hutt kee Resumé aginn.\nWann Dir nacheemol op \"{{int:savearticle}}\" klickt, gëtt Är Ännerung ouni Resumé ofgespäichert.",
        "selfredirect": "<strong>Opgepasst:</strong> Dir maacht eng Viruleedung vun dëser Aäit op sech selwer.\n\nEt ka sinn datt Dir déi falsch Zilsäit fir d'Viruleedung aginn hutt oder datt Dir déi falsch Säit ännert.\n\nWann Dir nach eng Kéier op \"{{int:savearticle}}\" klickt, da gëtt d'Viruleedung trotzdem ugeluecht.",
        "missingcommenttext": "Gitt w.e.g. eng Bemierkung an.",
-       "missingcommentheader": "'''Denkt drun:''' Dir hutt keen Titel/Sujet fir dës Bemierkung aginn.\nWann Dir nach en Kéier op \"{{int:savearticle}}\" klickt da gëtt Är Ännerung ouni Titel gespäichert.",
+       "missingcommentheader": "<strong>Denkt drun:</strong> Dir hutt keen Titel/Sujet fir dës Bemierkung aginn.\nWann Dir nach en Kéier op \"{{int:savearticle}}\" klickt da gëtt Är Ännerung ouni Titel gespäichert.",
        "summary-preview": "Resumé kucken ouni ofzespäicheren:",
        "subject-preview": "Sujet/Iwwerschrëft kucken:",
        "blockedtitle": "Benotzer ass gespaart",
        "listfiles-delete": "läschen",
        "listfiles-summary": "Op dëser Spezialsäit stinn all déi eropgeluede Fichieren.",
        "listfiles_search_for": "Sicht nom Fichier:",
+       "listfiles-userdoesnotexist": "De Benotzerkont \"$1\" ass net registréiert.",
        "imgfile": "Fichier",
        "listfiles": "Lëscht vun de Fichieren",
        "listfiles_thumb": "Miniaturbild",
        "emailccsubject": "Kopie vun denger Noriicht un $1: $2",
        "emailsent": "E-Mail geschéckt",
        "emailsenttext": "Är E-Mail gouf fortgeschéckt.",
-       "emailuserfooter": "Dës E-Mail gouf vum $1 dem $2 geschéckt derbäi gouf d'Funktioun \"Benotzer E-Mail\" op {{SITENAME}} benotzt.",
+       "emailuserfooter": "Dës E-Mail gouf vum $1 dem $2 geschéckt dobäi gouf d'Funktioun \"{{int:emailpage}}\" op {{SITENAME}} benotzt.",
        "usermessage-summary": "Benoriichtegung hannerloossen.",
        "usermessage-editor": "Benoriichtegungs-System",
        "watchlist": "Iwwerwaachungslëscht",
        "actionfailed": "Aktioun huet net funktionéiert",
        "deletedtext": "\"$1\" gouf geläscht. Kuckt $2 fir eng Lëscht vun de Säiten déi viru Kuerzem geläscht goufen.",
        "dellogpage": "Läschlëscht",
-       "dellogpagetext": "Hei fannt dir eng Lëscht mat rezent geläschte Säiten. All Auerzäite sinn déi vum Server.",
+       "dellogpagetext": "Hei fannt Dir eng Lëscht mat rezent geläschte Säiten. All Auerzäite sinn déi vum Server.",
        "deletionlog": "Läschlëscht",
        "reverted": "Op déi Versioun virdrun zréckgesat",
        "deletecomment": "Grond:",
        "ipbnounblockself": "Dir kënnt Är Spär net selwer ophiewen",
        "lockdb": "Datebank spären",
        "unlockdb": "Spär vun der Datebank ophiewen",
-       "lockdbtext": "Wann d'Datebank gespaart ass, ka kee Benotzer Säiten änneren, seng Astellungen änneren, seng Iwwerwaachungslëscht änneren, an all aner Aarbecht, déi op d'Datebank zréckgräift.\nW.e.g. confirméiert, datt dir dëst wierklech maache wëllt, an datt dir d'Spär ewechhuelt soubal d'Maintenance-Aarbechten eriwwer sinn.",
+       "lockdbtext": "Wann d'Datebank gespaart ass, ka kee Benotzer Säiten änneren, seng Astellungen änneren, seng Iwwerwaachungslëscht änneren, an all aner Aarbecht, déi op d'Datebank zréckgräift.\nW.e.g. confirméiert, datt Dir dëst wierklech maache wëllt, an datt dir d'Spär ewechhuelt soubal d'Maintenance-Aarbechten eriwwer sinn.",
        "unlockdbtext": "D'Ophiewe vun der Spär vun der Datebank léisst et erëm zou datt all Benotzer Säiten änneren, hir Astellungen an hir Iwwerwaachungslëscht veränneren an all aner Operatiounen déi Ännerungen an der Datebank erfuederen.\n\nConfirméiert w.e.g datt et dat ass wat Dir maache wëllt.",
        "lockconfirm": "Jo, ech wëll d'Datebank wierklech spären.",
        "unlockconfirm": "Jo, ech well d'Spär vun der Datebank wirklech ophiewen.",
        "lockedbyandtime": "(vum $1 de(n) $2 ëm $3 Auer)",
        "move-page": "Réckel $1",
        "move-page-legend": "Säit réckelen",
-       "movepagetext": "Wann Dir dëse Formulaire benotzt gitt Dir enger Säit en aneren Numm a réckelt se mat hirem Historique op den neien Numm.\nDen alen Titel gëtt eng Viruleedung op déi nei Säit.\nDir kënnt Viruleedungen déi op déi al Säit ginn automatesch aktualiséieren.\nWann Dir dat net maacht, da vergewëssert Iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn.\nDir sidd responsabel datt d'Linke weiderhin dohinner pointéieren, wou se hi sollen.\n\nBeuecht w.e.g. datt d'Säit '''net''' geréckelt gëtt, wann et schonn eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.\nDëst bedeit datt dir eng Säit zréck op hiren ursprénglechen Numm ëmbenenne kënnt wann Dir Iech geiert hat an datt Dir keng Säit iwwerschreiwe kënnt, déi et scho gëtt.\n\n'''OPGEPASST!'''\nDëst kann en drastesche Changement fir eng populär Säit bedeiten;\nverstitt w.e.g. d'Konsequenze vun Ärer Handlung ier Dir dëst maacht.",
+       "movepagetext": "Wann Dir dëse Formulaire benotzt gitt Dir enger Säit en aneren Numm a réckelt se mat hirem Historique op den neien Numm.\nDen alen Titel gëtt eng Viruleedung op déi nei Säit.\nDir kënnt Viruleedungen déi op déi al Säit ginn automatesch aktualiséieren.\nWann Dir dat net maacht, da vergewëssert Iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn.\nDir sidd responsabel datt d'Linke weiderhin dohinner pointéieren, wou se hi sollen.\n\nBeuecht w.e.g. datt d'Säit '''net''' geréckelt gëtt, wann et schonn eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.\nDëst bedeit datt Dir eng Säit zréck op hiren ursprénglechen Numm ëmbenenne kënnt wann Dir Iech geiert hat an datt Dir keng Säit iwwerschreiwe kënnt, déi et scho gëtt.\n\n'''OPGEPASST!'''\nDëst kann en drastesche Changement fir eng populär Säit bedeiten;\nverstitt w.e.g. d'Konsequenze vun Ärer Handlung ier Dir dëst maacht.",
        "movepagetext-noredirectfixer": "Wann Dir dëse Formulaire benotzt, réckelt Dir eng komplett Säit mat hirem Historique op en neien Numm.\nDen alen Titel gëtt eng Viruleedung op den neien Titel.\nDir kënnt Viruleedungen déi op déi al Säit ginn automatesch aktualiséieren.\nVergewëssert Iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn.\nDir sidd responsabel datt d'Linke weider dohi pointéieren, wou se hi sollen.\n\nDenkt w.e.g. drun datt d'Säit '''net''' geréckelt gëtt, wann et schonn eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.\nDëst bedeit datt dir eng Säit zréck op deen Numm dee se virdrun hat ëmbenenne kënnt wann Dir e Feeler maacht an datt Dir keng Säit iwwerschreiwe kënnt, déi et scho gëtt.\n\n'''OPGEPASST!'''\nDëst kann en drastesche Changement fir eng populär Säit sinn;\nverstitt w.e.g. d'Konsequenze vun ärer Handlung ier Dir dëst maacht.",
        "movepagetalktext": "D'associéiert Diskussiounssäit, am Fall wou  eng do ass, gëtt automatesch matgeréckelt, '''ausser:'''\n*D'Säit gëtt an een aneren Nummraum geréckelt.\n*Et gëtt schonn eng Diskussiounssäit mat dësem Numm, oder\n*Dir klickt d'Këschtchen ënnendrënner net un.\n\nAn deene Fäll musst Dir d'Diskussiounssäit manuell réckelen oder fusionéieren.",
        "movearticle": "Säit réckelen:",
        "protectedpagemovewarning": "<strong>OPGEPASST:</strong> Dës Säit gouf gespaart sou datt nëmme Benotzer mat Administreursrechter se réckele kënnen.\nDéi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
        "semiprotectedpagemovewarning": "'''OPGEPASST:''' Dës Säit gouf gespaart sou datt nëmme confirméiert Benotzer se réckele kënnen. Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
        "move-over-sharedrepo": "== De Fichier gëtt et ==\n[[:$1]] gëtt et op engem gedeelte Repertoire. Wann dir e Fichier op dësen Titel réckelt dann ass dee gedeelte Fichier net méi accessibel.",
-       "file-exists-sharedrepo": "Den Numm vum Fichier deen dir erausgesicht hutt gëtt schonn op engem gemeinsame Repertoire benotzt.\nSicht Iech w.e.g. en aneren Numm.",
+       "file-exists-sharedrepo": "Den Numm vum Fichier deen Dir erausgesicht hutt gëtt schonn op engem gemeinsame Repertoire benotzt.\nSicht Iech w.e.g. en aneren Numm.",
        "export": "Säiten exportéieren",
        "exporttext": "Dir kënnt den Text an den Historique vun enger bestëmmter Säit, oder engem Set vu Säiten, an XML agepakt, exportéieren, déi dann an eng aner Wiki mat MediaWiki Software importéiert gi mat Hëllef vun der [[Special:Import|Import-Säit]].\n\nFir eng Säit z'exportéieren, gitt den Titel an d'Textkëscht heidrënner an, een Titel pro Linn, a wielt aus op Dir nëmmen déi aktuell Versioun oder all Versioune mam ganzen Historique exportéiere wëllt.\n\nWann nëmmen déi aktuell Versioun exportéiert soll ginn, kënnt Dir och e Link benotze wéi z. B. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] fir d'\"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "All Säiten Exportéieren",
        "thumbnail_image-missing": "De Fichier schengt ze feelen: $1",
        "import": "Säiten importéieren",
        "importinterwiki": "Vun enger anerer Wiki importéieren",
-       "import-interwiki-text": "Sicht eng Wiki an e Säitentitel eraus fir z'importéieren.\nD'Versiounsdatumen an d'Benotzernimm bleiwen dobäi erhalen.\nAll Transwiki-Import-Aktioune ginn am [[Special:Log/import|Import-Logbuch]] protokolléiert.",
+       "import-interwiki-text": "Sicht eng Wiki an e Säitentitel eraus fir z'importéieren.\nD'Versiounsdatumen an d'Benotzernimm bleiwen dobäi erhalen.\nAll Importer aus anere Wikie ginn am [[Special:Log/import|Import-Logbuch]] protokolléiert.",
        "import-interwiki-sourcewiki": "Quellwiki:",
        "import-interwiki-sourcepage": "Originalsäit:",
        "import-interwiki-history": "Importéier all d'Versioune vun dëser Säit",
        "importcantopen": "De Fichier dee sollt importéiert gi konnt net opgemaach ginn",
        "importbadinterwiki": "Falschen Interwiki-Link",
        "importsuccess": "Den Import ass fäerdeg!",
-       "importnosources": "Fir den Transwiki-Import si keng Quellen definéiert an et ass net méiglech fir Säite mat alle Versiounen aus dem Transwiki-Tëschespäicher eropzelueden.",
+       "importnosources": "Et si keng Wikien definéiert aus deenen importéiert gi soll an direkt Uploade vun de Versioune sinn ausgeschalt.",
        "importnofile": "Et gouf keen importéierte Fichier eropgelueden",
        "importuploaderrorsize": "D'Eropluede vum importéierte Fichier huet net funktionéiert. De Fichier ass méi grouss wéi maximal erlaabt.",
        "importuploaderrorpartial": "D'Eropluede vum Fichier huet net geklappt. De Fichier gouf nëmmen deelweis eropgelueden.",
        "creditspage": "Quellen",
        "nocredits": "Fir dës Säit si keng Informatiounen iwwer d'Mataarbechter vun der Säit disponibel.",
        "spamprotectiontitle": "Spamfilter",
-       "spamprotectiontext": "D'Säit déi dir späichere wollt gouf vum Spamfilter gespaart.\nDëst wahrscheinlech duerch en externe Link den op der schwaarzer Lëscht (blacklist) vun den externe Säite steet.",
+       "spamprotectiontext": "D'Säit déi Dir späichere wollt gouf vum Spamfilter gespaart.\nDëst wahrscheinlech duerch en externe Link den op der schwaarzer Lëscht (blacklist) vun den externe Säite steet.",
        "spamprotectionmatch": "'''Dësen Text gouf vum Spamfilter fonnt: ''$1'''''",
        "spambot_username": "Botz vum Spam duerch MediaWiki",
        "spam_reverting": "Déi lescht Versioun ouni Linken op $1 restauréieren.",
        "confirmemail_success": "Är E-Mailadress gouf confirméiert. Där kënnt iech elo aloggen an a vollem Ëmfang vun der Wiki profitéieren.",
        "confirmemail_loggedin": "Är E-Mail-Adress gouf elo confirméiert.",
        "confirmemail_subject": "Confirmatioun vun der E-Mail-Adress fir {{SITENAME}}",
-       "confirmemail_body": "E Benotzer, waarscheinlech dir selwer, hutt mat der IP Adress $1 de Benotzerkont \"$2\" um Site {{SITENAME}} opgemaach.\n\nFir ze bestätegen, datt dee Kont iech wierklech gehéiert a fir d'E-Mail-Funktiounen um Site {{SITENAME}} z'aktivéieren, maacht w.e.g. dëse Link an ärem Browser op:\n$3\n\nWann dir dëse Benotzerkont *net* opgemaach hutt, maacht w.e.g. dëse Link an ärem Browser op fir d'E-Mailconfirmation z'annulléieren:\n\n$5\n\nSollt et sech net ëm äre Benotzerkont handelen, da maacht de Link *net* op. De Confirmatiounscode ass gëlteg bis de(n) $4.",
+       "confirmemail_body": "E Benotzer, waarscheinlech Dir selwer, hutt mat der IP Adress $1 de Benotzerkont \"$2\" um Site {{SITENAME}} opgemaach.\n\nFir ze bestätegen, datt dee Kont Iech wierklech gehéiert a fir d'E-Mail-Funktiounen um Site {{SITENAME}} z'aktivéieren, maacht w.e.g. dëse Link an ärem Browser op:\n$3\n\nWann Dir dëse Benotzerkont *net* opgemaach hutt, maacht w.e.g. dëse Link an ärem Browser op fir d'E-Mailconfirmation z'annulléieren:\n\n$5\n\nSollt et sech net ëm Äre Benotzerkont handelen, da maacht de Link *net* op. De Confirmatiounscode ass gëlteg bis de(n) $4.",
        "confirmemail_body_changed": "E Benotzer, wahrscheinlech Dir selwer, vun der IP-Adress $1,\nhuet d'E-Mail-Adress vum Benotzerkont \"$2\" op dës Adress op {{SITENAME}} geännert.\n\nFir ze confirméieren datt dëse Benotzerkont Iech wierklech gehéiert a fir d'E-Mailfonctiounen op {{SITENAME}} ze reaktivéieren, maacht dëse Link an Ärem Browser op:\n\n$3\n\nWann de Benotzerkont Iech *net* gehéiert, da klickt op dëse Link fir d'Confirmatioun vun der E-Mail-Adress auszeschalten:\n\n$5\n\nDëse Confirmatiounscode leeft den $4 of.",
        "confirmemail_body_set": "Iergendeen, wahrscheinlech Dir selwer, vun der IP-Adress $1,\nhuet d'E-Mail-Adress vum Benotzerkont \"$2\" op dës Adress op {{SITENAME}} geännert.\n\nFir ze confirméieren datt dëse Benotzerkont Iech wierklech gehéiert a fir d'E-Mailfonctiounen op {{SITENAME}} ze reaktivéieren, maacht dës Link an Ärem Browser op:\n\n$3\n\nWann de Benotzerkont Iech *net* gehéiert, da klickt op dëse Link fir d'Confirmatioun vun der E-Mail-Adress auszeschalten:\n\n$5\n\nDëse Confirmatiounscode leeft den $4 of.",
        "confirmemail_invalidated": "Confirmatioun vun der E-Mail-Adress annulléiert",
        "scarytranscludefailed": "[D'Siche no der Schabloun fir $1 huet net funktionéiert]",
        "scarytranscludefailed-httpstatus": "[D'Opruffe vun der Schabloun $1: HTTP $2 huet net funktionéiert]",
        "scarytranscludetoolong": "[D'URL ass ze laang]",
-       "deletedwhileediting": "'''Opgepasst''': Dës Säit gouf geläscht nodeem s datt dir ugefaangen hutt se z'änneren!",
+       "deletedwhileediting": "<strong>Opgepasst:</strong>Dës Säit gouf geläscht nodeem datt Dir ugefaang hutt se z'änneren!",
        "confirmrecreate": "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeem s datt där ugefaangen hutt drun ze schaffen. D'Begrënnung war: ''$2'' Bestätegt w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
        "confirmrecreate-noreason": "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeem s datt Dir ugefaangen hutt drun ze schaffen. Confirméiert w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
        "recreate": "Erëm uleeën",
index b079546..7e6ddf6 100644 (file)
        "virus-scanfailed": "scanne is mislukt (code $1)",
        "virus-unknownscanner": "onbekeng antivirus:",
        "logouttext": "'''De bis noe aafgemeld.'''\n\nDe kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of <span class='plainlinks'>[$1 opnuuj aanmelde]</span> ónger dezelfde of 'ne angere naam.\nMäögelik waert nog 'n deil pagina's getuind esofs te nog aangemeld bis pès te de cache van diene browser laeg maaks.",
+       "welcomeuser": "Wilkóm, $1!",
        "yourname": "Diene gebroekersnaam",
        "userlogin-yourname": "Gebroekersnaam",
        "yourpassword": "Die wachwaord",
index e961455..3746426 100644 (file)
        "rc_categories": "دسه یا نه محدود کو(وا \"|\" جگا بوئن",
        "rc_categories_any": "هرکوم",
        "rc-change-size": "$1",
-       "rc-change-size-new": "$1 {{جمی:$1|بایت|بایتیا}} نها آلشت",
+       "rc-change-size-new": "$1 {{جمی:$1|بایت|بایتیا}} نها آلشتکاری",
        "newsectionsummary": "/* $1 */ بهرجا تازه",
        "rc-enhanced-expand": "جزيات نشون بيئه",
        "rc-enhanced-hide": "جزياته قام كو",
        "uploaderror": "خطا د سوار کردن",
        "upload-recreate-warning": "'''زئنار: جانیایی که وه ای نومه یا پاکسا بیه یا جا وه جا بیه.'''\n\nسی رائتی، نومگه پاکساگری و جا وه جا کردن ای بلگه ها د هار:",
        "uploadtext": "دسی دئین جانیایی که  د دماتر سوار بینه روئیت وه  [[Special:FileList|نوم گه جانیایا]] . د نو سوارکردن  د [[Special:Log/upload|نوم گه سوارکردیا]] و پاکساگری جانیایا د [[Special:Log/delete|deletion log]] جاگئر موئه.\n\nنها یه که یه گل جانیانه سوار کردیت می تونیت د سه شکل هاری وه نه د بلگه یا وه کار بونیت:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' سی به کار بسن نسقه کامل جانیا\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' سی به کار بسن یه گل نسقه 200 پیکسلی  د جانیایی که ها د مینه یه گل جعوه  که ها د لا چپ نیسسه که د وه عبارت alt text چی توضیح وه کار بسه بیه\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' سی دروس کردن یه گل هوم پیوند سرراست وه جانیا بی یه که جانیا دیاری بکه نوم بلگه هاری سی سوارکرد جانیایا تازه استفاده بکیت.",
-       "upload-permitted": "جورا جانیا مجاز:$1.",
-       "upload-preferred": "جورا جانیا مجاز:$1.",
-       "upload-prohibited": "جورا جانیا مجاز:$1.",
+       "upload-permitted": "جورا جانیا صلادار:$1 .",
+       "upload-preferred": "جورا جانیا صلادار:$1.",
+       "upload-prohibited": "جورا جانیا صلادار:$1{{PLURAL:$2|.}}",
        "uploadlogpage": "سوارکرد",
        "uploadlogpagetext": "نومگه هاری یه گل نومگه د آخری سوارکرد جانیایا هئ.\nسی د نو سیل کردن[[Special:NewFiles|عسگدونی جانیایا تازه نه]] به ونیت.",
        "filename": "نوم جانیا",
        "listfiles-delete": "پاکسا کردن",
        "listfiles-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
        "listfiles_search_for": "پی جوری سی نوم رسانه:",
+       "listfiles-userdoesnotexist": "حساو کاریاری «$1» ثوت نام نبیه.",
        "imgfile": "جانیا",
        "listfiles": "نوم گه فایل",
        "listfiles_thumb": "بن کلکی",
        "deletereasonotherlist": "دلیل هنی",
        "deletereason-dropdown": "* دلیلیا پاکسا کردن رسم بیه\n** اسپم\n** خراوکاری\n** رعایت نبین کپی رایت\n** درحاست نیسنه\n** نهاورگشت شکست حرده",
        "delete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
-       "delete-toobig": "ای بلگه ویرگارچه ویرایشتی گپی داره، که د ور گرته بیشتر د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nسی یه که د اختلال ناحاستنی د {{SITENAME}} نهاگری با پاکسا کردن ای جوراین بلگه یا محدود بیه.",
-       "delete-warning-toobig": "ای بلگه ویرگارچه ویرایشتی گپی داره، که د ور گرته بیشتر د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nپاکسا کردن وه ممکنه که کنشتکاری رسینه جا {{SITENAME}} نه مختل بکه؛\nای کار نه وا ائتیاط نهاداری بکیت.",
+       "delete-toobig": "ای بلگه ویرگارچه ویرایشت فره گپی داره، که د ور گرته بیشتر د یه گل د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nسی یه که د اختلال ناحاستنی د {{SITENAME}} نهاگری با پاکسا کردن ای جوراین بلگه یا محدود بیه.c",
+       "delete-warning-toobig": "{{PLURAL:$1|}}ای بلگه ویرگارچه ویرایشتی گپی داره، که د ور گرته بیشتر د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nپاکسا کردن وه ممکنه که کنشتکاری رسینه جا {{SITENAME}} نه مختل بکه؛\nای کار نه وا آهره کاری نهاداری بکیت.",
        "deleteprotected": "شما نمی تونیت ای بلگه نه پاکسا بکیت سی یه که وه پر و پیم بیه.",
        "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|بلگه یا هنی]] ین که وه بلگه یی که شما د حال و بار پاکسا کردن ونیت پیوند دارن یا د وه پرگنجایشت کاری بیینه.",
        "rollback": "چواشه کردن ویرایشتیا",
        "protect-unchain-permissions": "وا کردن گزینه یا هنی پر و پیم کردن",
        "protect-text": "شما می تونیت ریتراز پر و پیم کاری بلگه '''$1''' نه سیل بکیت و از ایچه ونه آلشت بکیت.",
        "protect-locked-blocked": "شما د گاتی که د دسرسیتو نهاگری بیه نمی تونیت ریتراز پر و پیم کاری بلگه یا نه آلشت بئیت.\nمیزونکاری ایسنی بلگه '''$1''' د ای قراره:",
+       "protect-locked-dblock": "سی یه که رسینه جا قلف بیه، امکان آلشت دئن ریتراز پر و پیم کاری بلگه یا د ایسه نئ.\nمیزونکاری ایسنی بلگه '''$1''' ها دی ای قرار:",
+       "protect-locked-access": "حساو کاریاری شما سی آلشتکاری ریتراز پر و پیم کاری صلاداری ناره.\nمیزونکاریا ایسنی بلگه '''$1''' ها دی ای قرار:",
+       "protect-cascadeon": "ای بلگه ایسنی پر و پیم کاری بیه، سی یه که د {{PLURAL:$1|بلگه|بلگه یا}} هاری که گزینه پر و پیم کاری تاف نمایی {{PLURAL:$1|وه|ونو}} کنشتکاره، اومائه.\nآلشتیایی که مال ریتراز ای بلگه ن ری پر و پیم کاری تاف نمایی کارگرایی نارن.",
        "protect-default": "همه کاروریا اجازه دارن",
        "protect-fallback": "فقط کاریاریایی که وه «$1» دسرسی دارن، صلادار ای کارن",
        "protect-level-autoconfirmed": "فقط کاریاریا که خودپشت راس بینه صلادارن",
        "protect-expiring-local": "گات تموم بیین $1",
        "protect-expiry-indefinite": "بی زمون",
        "protect-cascade": "پر و پیم بیین تافنمایی- همه بلگه یایی که هان د ای بلگه پر و پیم بوئن.",
+       "protect-cantedit": "شما نمی تونیت حال و بار پر و پیم کاری ای بلگه نه آلشت بئیت، سی یه که صلا ویرایشت دئن ونه ناریت.",
        "protect-othertime": "وخت هنی:",
        "protect-othertime-op": "گات هنی",
        "protect-existing-expiry": "گات تموم بیین ایسنی: $2، $3",
        "protect-existing-expiry-infinity": "گات تموم بیین: بی گاته",
        "protect-otherreason": "دلیل اضافی/هنی:",
        "protect-otherreason-op": "دلیل هنی",
+       "protect-dropdown": "*دلیلیا جاافتائه سی پر و پیم کاری\n** خراوکاری گپ کلون\n** هرزه نیسی گپ کلون\n** جئن ویرایشتی وه درد نحور\n** بلگه فره تماشاکار دار",
        "protect-edit-reasonlist": "دلیلا پر و پیم بیین ویرایشت",
        "protect-expiry-options": "1 ساعت:1 ساعت,1 روز:1 روز,1 هفته:1 هفته,2 هفته:2 هفته,1 ما:1 ما,3 ما:3 ما,6 ما:6 ما,1 سال:1 سال,بی حساو:بی حساو",
        "restriction-type": "دسرسی:",
        "restriction-level-all": "هر ریترازی",
        "undelete": "دیئن بلگه یا پاکسا بیه",
        "undeletepage": "دیئن و  ؤرگشتن بلگه یا پاکسا بیه",
+       "undeletepagetitle": "'''اوی چی که ها د نها د ور گرته نسقه یا پاکسا بیه [[:$1|$1]] ه'''.",
        "viewdeletedpage": "دیئن بلگه یا پاکسا بیه",
+       "undeletepagetext": "{{PLURAL:$1|بلگه های پاکسا بیه|بلگه یا هاری پاکسا بینه}} ولی ایسه د اماییه جا {{PLURAL:$1|هئ|هان}} و {{PLURAL:$1|می تونه د نو زنه با|می‌ تونن د نو زنه بان}}.\nای اماییه جا ممکنه هر چن گری تمیس بوئه.",
        "undelete-fieldset-title": "د نو زنه کردن وانئریا",
+       "undeleteextrahelp": "سی زنه کردن همه ویرگارچه یا بلگه، هم جعوه یا حالی نه ول بکیت و دگمه '''''{{int:undeletebtn}}''''' نه بپورنیت.\nسی انجوم دئن د نو زنه کردن انتخاوی، جعوه ویایی که هان د ارتواط وا نسقه یا خوشو سی د نو زنه کردن نشو دار بکیت و دگمه '''''{{int:undeletebtn}}''''' بپورنیت.",
        "undeleterevisions": "$1 نسقه مال دیاری{{PLURAL:$1|بیه|بینه}}",
+       "undeletehistory": "ار ای بلگه نه د نو زنه بکیت، همه نسقه یا وه د ویرگارچه ش د نو زنه بوئن.\nار بلگه تازه یی وا نوم هومبراوری د گات پاکسا بیین دروس بیه با، نسقه یا د نو زنه بیه د ویرگارچه ره وندیاری می کن.",
+       "undeleterevdel": "ناپاکسا کردن بلگه یا د حال و باری که باعث پاکسا بیین بهرجایی د آخری نسقه بلگه یا جانیا با امکانش نئ.\nد ای حال و بار شما واس تازه تری نسقه پاکساگری بینه ئم د نو زنه بکیت.",
+       "undeletehistorynoadmin": "ای بلگه پاکسا بیه.\nدلیل پاکسا بیین ای بلگه واگرد مشخصات کاریاریایی که دما د پاکسا کردن ای بلگه نه ویرایشت دئنه ها د چکسته هاری.\nنیسسه راستیکی ای ویرایشت پاکسا بیه و فقط ها د دسرس دیوونداریا.",
        "undelete-revision": "نسقه پاکسا بیه $1 (د ویرگار$4 ساعت $5) وه دس $3:",
+       "undeleterevision-missing": "وانئری یا گم بیه یا نامعتوره.\nشایت هوم پیوند شما دروس نبوئه یا یه که ای وانئری د اماییه جا پاکسا بیه یا بازجست بیه.",
        "undelete-nodiff": "وانئری دماتری پیدا نبیه.",
        "undeletebtn": "د نو زنه کردن",
        "undeletelink": "بوين/دوواره آماده با",
        "undeletedrevisions-files": "{{PLURAL:$1|1 وانئری|$1 وانئریا}} و{{PLURAL:$2|1 جانیا|$2 جانیا}} د نو زئنه بینه.",
        "undeletedfiles": "{{PLURAL:$1|1 جانیا|$1 جانیایا}} د نو زنه بیه",
        "cannotundelete": "زنه کردن انجوم نبی:$1",
+       "undeletedpage": "'''$1 د نو زنه بی'''\n\nسی دیئن پهرستنومه پاکساکاریا و د نو زنه کردنیا ایسنی روئیت د [[Special:Log/delete|پهرستنوم پاکساکاری]].",
        "undelete-header": "سی دیئن بلگه یا پاکسا بیه ایسنی [[Special:Log/delete|پهرستونمه پاکسا بیین]] نه سیل بکیت.",
        "undelete-search-title": "بلگه یا پاکسا بیه نه پی جوری کو",
        "undelete-search-box": "پی جوری بلگه یا پاکسا بیه",
        "undelete-search-prefix": "بلگه یایی که وا شرو بیه نشو بیه:",
        "undelete-search-submit": "پی جوری",
        "undelete-no-results": "هیچ بلگه یکی بیینی د مال دیارکن پاکسا بیه یا نئ.",
+       "undelete-filename-mismatch": "نبوئه نسقه $1 نه د نو زنه بکی: نوم جانیا واش یکی نئ.",
+       "undelete-bad-store-key": "نبوئه نسقه $1 نه د نو زنه بکی: جانیا وه دما د پاکسا کردن د بین رئته.",
        "undelete-cleanup-error": "خطا د پاکسا کردن ویرگارچه وه کار نگرته بیه د«$1».",
+       "undelete-missing-filearchive": "نبوئه ویرگارچه شماره $1 د نو زنه بکی سی یه که دونسمنیاش د رسینه جا نیئن.\nیا شایت د دماتر د نو زنه بینه.",
        "undelete-error": "خطا بلگه ای که نبوئه پاکساش بکی",
        "undelete-error-short": "خطا پاک نبیئن جانیا:$1",
        "undelete-error-long": "د گات زنه کردن جانیا یه گل خطا پیش اوما:\n\n\n$1",
+       "undelete-show-file-confirm": "آیا یه دل بئیته که میهایت یه گل نسقه پاکسا بیه د جانیا \"<nowiki>$1</nowiki>\" که ها د ویرگار $2 ساعت $3 نه سیل بکیت؟",
        "undelete-show-file-submit": "هری",
        "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
        "namespace": "نوم جا:",
        "invert": "انتخاو برعسك بوئه",
        "tooltip-invert": "د ری ای جعوه بپورنیت و آلشتیایی نه که د مینجا نوم ورگه انتخاو بیه انجوم بینه قام بکیت(و ار نوم ورگه شریکی وارسی بیه)",
+       "tooltip-whatlinkshere-invert": "ای جعون نه سی نهو کردن هوم پیوند بلگه یایی که نوم جاشو انتخاو بیه، انتخاو بکیت.",
        "namespace_association": "نوم جایا یکاگرته",
        "tooltip-namespace_association": "ای جعوه نه وارسی بکیت ای جعوه د ور گرته چک چنه یا داسون نوم ورگه شریکی و نوم ورگه انتخاو بیه ئه",
        "blanknamespace": "اصلی",
        "sp-contributions-logs": "نیسنن رخ ونیا",
        "sp-contributions-talk": "چك چنه",
        "sp-contributions-userrights": "دیوونداری حقوق کاریار",
+       "sp-contributions-blocked-notice": "د دسرسی ای کاریا د ایسنی نهاگری بیه.\nآخری برشت د پهرستنومه نهاگری ها د سرچشمه هاری:",
+       "sp-contributions-blocked-notice-anon": "ای آی پی ایسنی دسرسی ناره.\nآخری برشت د پهرستنومه ها د سرچشمه هاری:",
        "sp-contributions-search": "سی هومیاریا پی جور با",
        "sp-contributions-username": "نوم نشون آی پی يا نوم كاروری:",
        "sp-contributions-toponly": "فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه",
        "whatlinkshere-next": "{{جمی:$1|نهایی|نهایی $1}}",
        "whatlinkshere-links": "هوم پیوندیا",
        "whatlinkshere-hideredirs": "$1 واگردونیا",
-       "whatlinkshere-hidetrans": "$ا چن نتیجه یی",
+       "whatlinkshere-hidetrans": "$1 چن نتیجه یی",
        "whatlinkshere-hidelinks": "هوم پیوندیا $1",
        "whatlinkshere-hideimages": "فایل هوم پیوندیا $1",
        "whatlinkshere-filters": "فيلتريا",
        "unblock": "کاریار نهاگری نبیه",
        "blockip": "نهاگری{{GENDER:$1|کاریار}}",
        "blockip-legend": "نهاگری کاریار",
+       "blockiptext": "نومگه بلگه هاری نه سی نهاگری د دسرسی ویرایشت یه گل تیرنشون آی پی وا نوم کاریاری مشخص وه کار بئیریت.\nای کار فقط فقط واس سی نهاگری د خراوکاری و د پایه [[{{MediaWiki:Policy-url}}|سیاست نهاگری]] انجوم با.\nدلیل دیاری نه د هار بوئیت (مثلند وا گوتن بلگه یایی که دشو خراوکاری بیه).",
        "ipaddressorusername": "نوم نشون آی پی يا نوم كاروری:",
        "ipbexpiry": "تموم بين:",
        "ipbreason": "دليل:",
+       "ipbreason-dropdown": "*دلیلیا جاافتائه سی نهاگری\n**دئن دونسمنیا غلط\n**پاکسا کردن دونسمنیا خو د بلگه یا\n**هرزه نیسی د طریق نیسنن هوم پیوند تکراری د دیارگه یا\n**نیسنن چرند و چار یا نیسسه یا بی مئنی د بلگه یا\n**سهم ونن د کاریاریا هنی\n**وه کار گرتن چن گل حساو کاریاری\n**نوم کاریاری گن",
        "ipb-hardblock": "پیشگری د ویرایشت کردن کاریاریی که د طریق ای تیرنشون آی پی وامین اومانه.",
        "ipbcreateaccount": "نهاگری دروس کردن حساو",
        "ipbemailban": "نهاگرتن کاریار د کل کردن انجومانامه",
        "blockipsuccesssub": "قلف کردن د خوئی انجوم بی",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] بسته بیه.<br />\nسی وارسی بسته بیه یا [[Special:BlockList|نوم گه بسته بیه یا ]] نه سیل بکیت.",
        "ipb-blockingself": "شما د حال نهاگری خوتونیت! آیا دلراس هیئت که میهایت چنی کاری انجوم بیتو؟",
+       "ipb-confirmhideuser": "شما د حال و بار بستن یه گل کاریاریت که سی وه «نهوسازی کاریار» کنشتیار بیه. ای کار نوم کاریار نه د همه نومگه یا و سیائه یا نهو می که، آیا یه دلیت که میهایت ای کار نه انجوم بئیت؟",
+       "ipb-confirmaction": "ار د راستکی یه دل بئیته که میهایت ونه انجوم بئیت، لطف بکیت زمینه \"{{int:ipb-confirm}}\" ونه د هار وارسی بکیت.",
        "ipb-edit-dropdown": "ویرایشت دلیلیا نهاگرتن",
        "ipb-unblock-addr": "وا کردن قلف $1",
        "ipb-unblock": "واز کردن نوم کاریاری یا تیرنشون آی پی",
        "ipb-blocklist": "دیئن نهاگرتن یا ایسنی",
        "ipb-blocklist-contribs": "هومیاریا $1",
        "unblockip": "کارور منع نبیه",
+       "unblockiptext": "سی ؤرئشت دئن دسرسی نیسسن د یه گل تیرنشون آی پی یا نوم کاریاری نهاگری بیه نوم بلگه هاری نه وه کار بئیریت.",
        "ipusubmit": "ای قلف نه ؤردار",
        "unblocked": "دسرسی [[User:$1|$1]] دوواره برقرار بیه.",
        "unblocked-range": "$1 وا بیه.",
        "change-blocklink": "اجازه نديئن سی  آلشت",
        "contribslink": "هومیاریا",
        "emaillink": "انجومانامه نه کل کو",
+       "autoblocker": "وه خود انجومن بسه بی سی یه که آی پی شما د ایسنی وه دس کاریار «[[User:$1|$1]]» وه کار گرته بیه.\nدلیل نهاگری $1 ینه \"$2\"",
        "blocklogpage": "قلف",
+       "blocklog-showlog": "تیرنشون ای آی پی دماتر نهاگیری بیه.\nنهاگری ای پهرستنومه وا سرچشمه هاری دروس بیه:",
+       "blocklog-showsuppresslog": "تیرنشون ای آی پی دماتر نهاگیری بیه.\nنهاگری ای پهرستنومه وا سرچشمه هاری دروس بیه:",
        "blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3  قلف بیه",
        "reblock-logentry": "میزوکاری سی نهاگری[[$1]] آلشت بیه سی آخر نهاگری د $2 $3",
+       "blocklogtext": "ای پهرستنومه سی نهاگری یا واز کردن دسرسی کاریاریائه.\nتیرنشونیا آی پی که خود انجومن نهاگری بینه د ایسنی نومگه کاری نبینه.\nسی نومگه نهاگریا و بسه بینیا د ایسنی روئیت د [[Special:BlockList|نومگه نهاگری بیه یا]].",
        "unblocklogentry": "وا کردن قلف $1",
        "block-log-flags-anononly": "فقط کاریاریایی که نادیارن",
        "block-log-flags-nocreate": "حساو راس کردن عاجز بیه.",
        "range_block_disabled": "درس کردن بسن یه گل پوشگر وه دس دیوونداریا ناکنشتگر بیه.",
        "ipb_expiry_invalid": "گات تموم بیین نامعتوره.",
        "ipb_expiry_temp": "نهاگری نوم کاریاریا قام بیه واس همیشه یی با.",
+       "ipb_hide_invalid": "نبوئه ای حساو نه پاکساکاری کرد؛ ای حساو بیشتر د {{PLURAL:$1|یه گل ویرایشت|$1 ویرایشتیا}} نه د خوش داره.",
        "ipb_already_blocked": "\"$1\" ایسه نهاگری بیه.",
        "ipb-needreblock": "$1 د دماتر نهاگری بیه. آیا میهایت میزوکاری ونه آلشت بیتو؟",
        "ipb-otherblocks-header": "هنی{{PLURAL:$1|نهاگرتن|نهاگرتنیا}}",
+       "unblock-hideuser": "‫سی یه که حساو کاریاری ای کاریار نهو بیه شما نمی تونیت ونه واز بکیت.‬",
        "ipb_cant_unblock": "خطا:نهاگری د نوم دیارکن $1 دیار نئ.شایت وه د ایسنی نهاگریش د بین رئته.",
+       "ipb_blocked_as_range": "خطا: تیرنشون آی‌ پی $1 سر راست نهاگری نبیه و نبوئه وازش بکیت.\nای تیرنشون واگرد پوشگر $ نهاگری بیه و بوئه وازش بکی.",
        "ip_range_invalid": "پوشگر نامعتور آی پی",
        "ip_range_toolarge": "نهاگری پوشینه یا گپتر $1/ مجاز نئ.",
        "proxyblocker": "قلف کننه پروکسی",
+       "proxyblockreason": "تیرنشون آی پی شما نهاگری بیه سی یه مال یه گل پروکسی آزاده.\nلطف بکیت وا انجومکار اینترنتی خوتو یا حامینکار کسمی خوتو پیوند بگریت و ونونه د مشگل امنتی گن خوتو وارسیار بکیت.",
        "sorbs": "دی ان اس بی ال",
+       "sorbsreason": "تیرنشون آی پی شما وه دس DNSBL  وه کار گرته وه دس {{SITENAME}} چی یه گل پروکسی آزاد گزارشت بیه.",
+       "sorbs_create_account_reason": "تیرنشون آی پی شما وه دس DNSBL  وه کار گرته وه دس {{SITENAME}} چی یه گل پروکسی آزاد گزارشت بیه.\nشما نتونیت یه گل حساو راس بکیت.",
+       "xffblockreason": "تیرنشون آی پی ها د X-Forwarded-For header و پروکسی شما یا رسینه گایی که شما ونه وه کار مئیریت نهاگری بیه. دلیل نهاگری وه: $1",
+       "cant-see-hidden-user": "کاریاری که شما میهایت دش نهاگری بکیت د دماتر نهاگری بیه و نهو بیه.\nسی یه که شما وه نهوکاری کاریار دسرسی ناریت نمی تونیت نهاگری کاریار نه دسکاری بکیت.",
+       "ipbblocked": "شما نمی تونیت د دسرسی کاریاریا هنی نهاگری بکیت یا ونه واز بکتی سی یه د دسرسی خوتو نهاگری بیه.",
        "ipbnounblockself": "شما صلادار وارکدن دسرسی خوتو نییت.",
        "lockdb": "قلف کردن رسینه گا",
        "unlockdb": "رسینه گا قلف نبیه",
+       "lockdbtext": "قلف کردن رسینه جا امکان ویرایشت بلگه یا، آلشت دئن میزونکاری، ویرایشت سیل برگیا و آلشتکاریا هنی نه که واس سی ونو د رسینه جا آلشتکاری بکیت د همه کاریاریا مئیره.\nلطف بکیت ای کاری که میهات انجوم بئیت پشت راسکاری بکیت و  داولی گات رسینه جا نه د حال و بار قلف بیه درمیارت.",
+       "unlockdbtext": "وا کردن قلف رسینه جا ای صلا نه وه همه کاریاریا میئه که می تونن بلگه یا ویرایشت بکن، میزونکاری نه آلشت بکن، سیل برگیا نه آلشتکاری بکن و هر آلشتی نه سی انجوم دئنش ها رسینه جا نه آلشت بئن می تونن \nلطف بکیت ای کاری که میهات انجوم بئیت پشت راسکاری بکیت.",
        "lockconfirm": "هره، مه واقعند میهام که رسینه گا نهاگری با.",
        "unlockconfirm": "هره، مه واقعند میهام که رسینه گا وا بوئه.",
        "lockbtn": "قلف کردن رسینه گا",
        "locknoconfirm": "شما کلیت پشت راسکاری نه نشودار نکردیته.",
        "lockdbsuccesssub": "رسینه گا د خوئی قلف بیه",
        "unlockdbsuccesssub": "قلف رسینه گا ؤرداشته بیه",
+       "lockdbsuccesstext": "رسینه جا قلف بیه.\n<br />د ویرتو نروئه که نها تموم بیین واداشتکاری قلف نه ورداریت.",
        "unlockdbsuccesstext": "رسینه گا وا بیه.",
+       "lockfilenotwritable": "نبوئه قلف رسینه جا نه بنیسیت. سی یه بتونیت رسینه جا قلف بکیت یا قلفش وا بکیت، واس ای جانیا نیسسه یی بوئه.",
        "databasenotlocked": "رسینه گا وازه.",
        "lockedbyandtime": "(وا{{GENDER:$1|$1}} د $2 د$3)",
        "move-page": "$1 جا وه جا کو",
        "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": "بلگه چک چنه مربوطه، ار با، وه حال و بار خودانجوم واگرد گوتار اصلی جا وه جا کاری بوئه<strong>مر یه که:</strong>\n* شما د حال و بار جا وه جاکاری بلگه د ای نوم جا وه یه گل نوم جا هنی بوئیت.\n* یه گل بلگه چک چنه حال نبیه نه وا ای نوم با، یا \n* جعوه هاری نه نشودار نکردیته.\n\nد ای حال و باریا، واس بلگه نه دسی جا وه جاکاری بکیت یا مینونه یا دو بلگه نه وا ویرایشت یکی بکیت.",
        "movearticle": "جا وه جا کردن بلگه:",
+       "moveuserpage-warning": "'''هشدار:''' شما د حال و بار جا وه جا کاری یه گل بلگه کاریاریت.د ویر داشتوئیت که تینا بلگه جا وه جاکاری بوئه و نوم کاریار آلشت '''نموئه'''.",
+       "movecategorypage-warning": "<strong>هشدار:</strong> شما د حال و بار جا وه جاکاری بلگه رده هئیت. لطف بکیت د ویر داشتوئیت که فقط بلگه جا وه جاکاری نموئه و بلگه یایی که هان د رده دماتری می مونن و وه یه گل رده تازه <em>نمی روئن</em>.",
+       "movenologintext": "سی جا وه جاکاری بلگه یا واس نوم کاریاریتو ثبت بیه با و اوسه [[Special:UserLogin|روئیت د سامونه]].",
        "movenotallowed": "شما وه جا وه جا کردن بلگه دسرسی ناریت",
        "movenotallowedfile": "شما وه جا وه جا کردن جانیایا دسرسی ناریت",
+       "cant-move-user-page": "شما صلا یه نه که بلگه یا کاریاری سرلشک نه جا وه جاکاری بکیت.",
+       "cant-move-to-user-page": "شما صلا یه نه که بلگه یا کاریاری سرلشک نه جا وه جاکاری بکیت.",
        "cant-move-category-page": "شما صلا ینه که دسه یا نه ناریت.",
        "cant-move-to-category-page": "شما صلا ینه که یه بلگه نه بوریت وه بلگه دسه ناریت.",
        "newtitle": "سی سرون هنی:",
        "movepage-moved": "<strong>\"$1\" جا وه جا بیه سی \"$2\"</strong>",
        "movepage-moved-redirect": "یه گل واگردونی دروس بیه.",
        "movepage-moved-noredirect": "د دروس کردن واگردونی جلوگری بیه.",
+       "articleexists": "یه گل بلگه وا ای نوم د دماتر بیه، یا نومی که شما دئیه ته معتور نئ.\nلطف بکیت یه گل نوم هنی انتخاو بکیت.",
+       "cantmove-titleprotected": "شما نمی تونیت بلگه نه بوریت وه ای تیرنشون، سی یه داسون تازه سی سازیاری پر و پیم کاری بیه.",
        "movetalk": "بلگه چک چنه ئم جا وه جا بوئه",
        "move-subpages": "جا وه جایی بلگه یا(تا $1 بلگه)",
        "move-talk-subpages": "جا وه جا کردن زیر بلگه یا بلگه چک چنه (تا $1 بلگه)",
+       "movepage-page-exists": "بلگه $1 د دماتر بیه شه و نبوئه وه شکل خودانجوم جانشین با.",
        "movepage-page-moved": "بلگه $1 د $2 جا وه جا بیه",
        "movepage-page-unmoved": "نبوئه بلگه $1 د $2 جا وه جا بوئه",
+       "movepage-max-pages": "بیشترونه انازه بلگه یا شایت سی ($1 {{PLURAL:$1|بلگه|بلگه یا}}) یی که بوئه جا وه جاکاری بوئن، جا وه جاکاری بیه و بلگه یا هنی نه نبوئه و شکل خودانجوم جا وه جاکاری کرد.",
        "movelogpage": "جاوه جا کردن",
        "movelogpagetext": "د هار یه گل نوم گه د جا وه جایی یا بلگه هئ",
        "movesubpage": "{{جمی:$1|زیر بلگه|زیر بلگه یا}}",
+       "movesubpagetext": "ای بلگه $1 زیربلگه داره که د زیر نشو {{PLURAL:|نشو دئه بیه|دئه بینه}}.",
        "movenosubpage": "ای بلگه زیر بلگه نئ.",
        "movereason": "دلیل:",
        "revertmove": "لرستن",
        "delete_and_move": "پاکسا و جا وه جا بوئه",
+       "delete_and_move_text": "== پاکساکاری میها ==\n\nگوتار ها د مقصد «[[:$1]]» . آیا میهایت ونه پاکسا بکیت  تا جا وه جاکاری دروس بوئه؟",
        "delete_and_move_confirm": "هری بلگه نه پاکسا کو",
        "delete_and_move_reason": "پاکساکاری سی ممکن بیین جا وه جایی «[[$1]]»",
+       "selfmove": "داسونا بلگه اول و بلگه مقصد یکی ین؛\nنبوئه بلگه نه د خوش جا وه جاکاری کرد.",
        "immobile-source-namespace": "نبوئه بلگه یا نه وه نومجا \"$1\" جا وه جا با",
        "immobile-target-namespace": "نبوئه بلگه یا نه وه نومجا \"$1\" جا وه جا با",
        "immobile-target-namespace-iw": "هوم پیوند مینجاویکی حاستنی مجازی سی جا وه جا کردن بلگه نئ.",
        "immobile-source-page": "ای بلگه جا وه جا کردنی نئ.",
        "immobile-target-page": "نبوئه وه ای مقصد چنی سرونی جا وه جا بوئه.",
+       "bad-target-model": "مقصد حاستنی مدل مینونه دار فرخداری نه وه کار گرته. نبوئه$1 نه بکیت وه $2.",
        "imagenocrossnamespace": "نبوئه جانیانه وه یه گل نومجا غیرجانیایی جا وه جا بکیت",
        "nonfile-cannot-move-to-file": "نبوئه جانیانه وه یه گل نومجا غیرجانیایی جا وه جا بکیت",
        "imagetypemismatch": "دماون جانیا تازه وا نوع وه سازگاری ناره",
        "move-leave-redirect": "وه جا نیائن یه گل واگردونی",
        "protectedpagemovewarning": "<strong>زئنار:ای بلگه سی یه پر و پیم بیه که کاریاریایی که دسرسی دیوونداری دارن فقط بتونن دش ویرایشت بکن.</strong>\nآخرین سیائه سی سرچشمه یا د هار اماییه کاری بیه:",
        "semiprotectedpagemovewarning": "<strong>د ویر داشتویت:</strong> ای بلگه سی یه که فقط کاریاریا ثوت نام کرده تونستون دش ویرایشت بکه ن پر و پیم بیه.\nآخرین پهرستنومه دئه بیه سی سرچشمه هار نها اماییه بیه:",
+       "move-over-sharedrepo": "== جانیا هئیش ==\n[[:$1]] ها د یه گل اماییه جا بهربیه. جا وه جاکاری یه گل جانیا وه ای نوم باعث موئه که یه گل جانیا بهربیه باطل با.",
+       "file-exists-sharedrepo": "نوم جانیا انتخاو بیه و ایسنی د یه گل اماییه جا بهربیه وه کار گرته بیه.\nلطف بکیت یه گل نوم هنی نه انتخاو بکیت.",
        "export": "وه صحرا ديئن بلگيا",
+       "exporttext": "شما می تونیت نیسسه و ویرگارچه ویرایشت یه بلگه جادیار بیه یا یه گل کوملوس د بلگه یا نه وه حال و بار پوشیه د ایکس ام ال برویت وه در.\nای دونسمنیا نه بوئه د یه گل ویکی هنی که نرم افزار «ویکی وارسگر» نه انجومکاری می که د طریق [[Special:Import|بلگه وامین اوردن]] وامین اورد.\n\nسی وه در دئن بلگه یا، داسون ونونه بیاریت د جعوه هاری(د هر خط فقط یه گل داسون) و مشخص بکیت که آیا نسقه ایسنی بلگه واگرد نسقه یا دمادار و ویرگارچه بلگه نه میهایت، یا تینا نسقه ایسنی بلگه و دونسمنیا آخری ویرایشت نه میهایت .\n\nد حال و بار دوئم، شما می تونیت یه گل هوم پیوند نه وه کار بئیرت چی [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] سی بلگه «[[{{MediaWiki:Mainpage}}]]».",
        "exportall": "وه صحرا ديئن همه بلگيا",
        "exportcuronly": "فقط مینونه دار وانئری ایسنی با،نه همه ویرگار نه",
+       "exportnohistory": "----\n'''د ویر داشتوئیت:''' وه در دئن ویرگارچه کامل بلگه یا د طریق ای بلگه سی دلیلیا انجومکاری کنتشیار نئ.",
        "exportlistauthors": "مینونه دار نومگه کامل هومیاریا سی هر بلگه",
        "export-submit": "وه در ديئن",
        "export-addcattext": "اضاف کردن بلگه یا د یه گل دسه:",
        "allmessagesname": "نوم",
        "allmessagesdefault": "سفارشت متنی پيش فرض",
        "allmessagescurrent": "نیسسه ایسنی پیغوم",
+       "allmessagestext": "یه یه گل نومگه د پیغومیا سامونه یی یه که هان د نوم ورگه ویکی وارسگر.\nاری میهایت د ویکی وارسگر نه ولاتمن بکیت لطف بکیت [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation ولاتمن کردن ویکی وارسگر] و [//translatewiki.net translatewiki.net] نه سیل بکیت.",
+       "allmessagesnotsupportedDB": "ای بلگه وه کار گرتنی نئ سی یه که <bdi>'''$wgUseDatabaseMessages'''</bdi> ناکنشتگر بیه.",
        "allmessages-filter-legend": "فیلتر",
        "allmessages-filter": "فیلتر کردن د اساس شخصی کردن:",
        "allmessages-filter-unmodified": "آلشت نبیه",
        "thumbnail_toobigimagearea": "جانیا وا بعدیا گپتر د $1",
        "thumbnail_dest_directory": "نبوئه دایرکتوری مقصد نه درست بکیت",
        "thumbnail_image-type": "نوع عسگ حامیین داری نبوئه",
+       "thumbnail_gd-library": "میزونکاری ناقص کتاوخونه GD: انجومکار $1 نیئش",
        "thumbnail_image-missing": "وه ویر و باور میا که جانیا گم بیه:$1",
+       "thumbnail_image-failure-limit": "کوشایشتیا ناخوش سرانجوم ایسنی فره یی ($1 یا بیشتر) سی دئن ای عسگ کوچک انجوم گرته. لطف بکیت د نو تلاش بکیت.",
        "import": "وامین اوردن بلگه یا",
        "importinterwiki": "وامین اوردن ترانس ویکی",
+       "import-interwiki-text": "یه گل ویکی و یه گل نوم بلگه نه انتخاو بکیت تا دونسمنیا وه وامین کاری با.\nویرگار نسقه یا و نوم ویرایشتکاریا بی آلشت می مونه.\nدونسمنیا مربوط د وامین اوردن بلگه یا د یه گل ویکی هنی د [[Special:Log/import|پهرستنومه وامین اوردن]] پهرست کاری موئه.",
        "import-interwiki-sourcewiki": "سرچشمه ویکی:",
        "import-interwiki-sourcepage": "بلگه سرچشمه:",
        "import-interwiki-history": "ؤرداشتن ویرگار همه وانئریا سی ای بلگه",
        "import-interwiki-rootpage": "ریشه بلگه مقصد(دل به حایی):",
        "import-upload-filename": "نوم جانیا:",
        "import-comment": "ویر و باور:",
+       "importtext": "لطف بکیت  جانیا نه د ویکی سرچشمه وا هومیاری [[Special:Export|اوزار وه در دئن]] بئریت.\nاوسه ونه د دسگایا خوتو اماییه کاری بکیت و ایچه ونه سوار بکیت.",
        "importstart": "د حال و بار وامین اوردن",
        "import-revision-count": "$1 {{جمی:$1|وانئری|وانئریا}}",
        "importnopages": "هیچ بلگه ای وامین نیومائه.",
        "importcantopen": "نبوئه جانیا دئه بیه نه وا بکید",
        "importbadinterwiki": "هوم پیوند مینجاویکی گن",
        "importsuccess": "وامین اوردن تموم بی!",
+       "importnosources": "هیچ سرچشمه یی سی وامین اوردن دونسمنیا د ویکیا هنی تعریف نبیه.",
        "importnofile": "هیچ جانیا دئه بیه ای سوار نبیه.",
+       "importuploaderrorsize": "د سوارکرد وامین اوردن جانیا مشگلی پیش اومائه.\nانازه جانیا د بیشترونه انازه مجاز فره بیشتره.",
        "importuploaderrorpartial": "د سوارکرد وامین اوردن جانیا شکستی پیش اومائه.\nانازه جانیا د انازه بیشترونه مجاز گپتره.",
        "importuploaderrortemp": "د سوارکرد جانیا وامین اوردن مشگلی پیش اومائه.\nتابنده موقت گم بیه.",
        "import-parse-failure": "خطا د وااشکافت یه گل وامین اوردن ایکس ام ال",
        "import-error-special": "بلگه «$1» وامین نیومائه، سی یه که وه مال وه یه گل نومجا خاصه که او بلگه یا صلادار نئین.",
        "import-error-invalid": "بلگه \"$1\"  سی یه که نامعتور بیین نومش ممکن بی د ویکی وامین اورده نبیه.",
        "import-error-unserialize": "نبوئه وه دراوردن بلگه $2 د بلگه «$1» د شکل رازینه کاری بیه نه انجوم بییت.چؤ اومائه که نسقه ای د مدل مینونه $3 وه کار گرته که وه د شکل $4 رازینه کاری بیه.",
+       "import-error-bad-location": "وانئری $2 وا وه کار گرتن مدل مینونه $3 نبوئه د \"$1\" د ای ویکی اماییه کاری بیه با، سی یه که مدل د او بلگه که مدل د او بلگه پشت راسکاری نبیه.",
        "import-options-wrong": "{{PLURAL:$2|جزئیات|جزئیات}} اشتوا: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "ریشه دئه بیه د بلگه یه گل سرون نامعتوره.",
        "import-rootpage-nosubpage": "نومجا \"$1\" بلگه پایه صلا زیر بلگه نه نمی یه.",
        "creditspage": "اعتوار بلگه",
        "nocredits": "دونسمنیا راس کننه یا ای بلگه د دسرس نئ",
        "spamprotectiontitle": "فیلتر پر و پیم گری د اسپم",
+       "spamprotectiontext": "د اماییه کاری بلگه وه دس فیلتر هرزه نیسی نهاگری بی.\nمعمولند ای رخ ون د گاتی پیش میا که نیسسه تازه بلگه، مینونه داری یه گل هوم پیوند وه یه گل تیرنشون دیارگه بوئه که د نومگه سئ با.",
        "spamprotectionmatch": "نیسسه هاری چی ای یه که فیلتر اسپم ایما نه ونه د کار: $1",
        "spambot_username": "اسپم پاک کن ویکی وارسگر",
        "spam_reverting": "واگردونی وه آخری نسقه ای که هوم پیوندی وه $1 ناره.",
        "markaspatrolleddiff": "نشو دار کردن چی سردیاری بیه",
        "markaspatrolledtext": "ای بلگه نه چی بلگه ای که سردیاری کرده با نشودار کو",
        "markedaspatrolled": "نشو دار کردن چی سردیاری بیه",
+       "markedaspatrolledtext": "د نسقه انتخاو بیه د [[:$1]] سردیس گشتکاری زئه بی.",
        "rcpatroldisabled": "سردیاری کردن سی آلشتیا ایسنی ناکنشتگر بیه",
        "rcpatroldisabledtext": "خصوصیت سردیاری کردن د ری آلشتیا ایسنی تازه ای یا ناکشتگر بیه.",
        "markedaspatrollederror": "نبوئه چی یه گل سردیاری کرده نشودار با",
        "filedelete-archive-read-only": "نشونگه مال دیارکردن ($1) د لا سرور قاول نیسنن نئ.",
        "previousdiff": "← ويرايشت كۈهنه تر",
        "nextdiff": "ويرايشت تازه تر",
+       "mediawarning": "'''هشدار''': شایت ای جانیا د خوش رازینه یا گن داشتوئه.\nشایت وا اجرا وه انجومیار شما آسیو دینه.",
        "imagemaxsize": "انازه عسگ:<br /><em>(سی شرح جانیا بلگه یا)</em>",
        "thumbsize": "انازه بن کلکی:",
        "widthheight": "$1 × $2",
        "file-info-size": "$1 × $2 پیکسل, انازه فایل: $3, MIME نوع: $4",
        "file-info-size-pages": "$1 × $2 pixels, انازه جانیا: $3, MIME type: $4, $5 {{PLURAL:$5|بلگه|بلگه یا}}",
        "file-nohires": "عسك ون بالاتري دش ني",
-       "svg-long-desc": "اس وی جی جانیا.نومنا $1 $2 پيكسل",
+       "svg-long-desc": "اس وی جی جانیا.نومن $1 $2 پيكسل",
        "svg-long-desc-animated": "جانیا جمشدار اس وی جی .نومنا $1 × $2 پيكسل،انازه جانیا:$3",
        "svg-long-error": "جانیا اس وی جی نامعتور:$1",
        "show-big-image": "جانیا اصلی",
        "file-info-png-looped": "حلقه دار",
        "file-info-png-repeat": "$1 بازی کرده{{جمی:$1|وخت|وختیا}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
+       "file-no-thumb-animation": "'''د ویر داشتوئیت: سی مشگلیا فنی پیش نمایشت جانیا وه حال و بار جمشت دار نشو دئه نبوئه.'''",
+       "file-no-thumb-animation-gif": "'''د ویر داشتوئیت: سی مشگلیا فنی پیش نمایشت جانیایا GIF چی یه وه حال و بار جمشت دار نشو دئه نبوئه.'''",
        "newimages": "عسگدونی جانیایا تازه",
        "imagelisttext": "د هار نومگه <strong>$1</strong> {{PLURAL:$1|جانیا|جانیایا}} اماییه جا بیه$2.",
        "newimages-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
        "namespacesall": "همه شو",
        "monthsall": "همه",
        "confirmemail": "پشت راس کردن تیرنشون انجومانامه",
+       "confirmemail_noemail": "شما د بلگه [[Special:Preferences|ترجیحات کاریاری]] خوتو یه گل تیرنشون انجومانامه نامعتور نه دئیته.",
+       "confirmemail_text": "ای ویکی، شما نه مژبور می که وه پشت راسکاری تیرنشون انجومانامه خوتو، دما د یه که خدمات انجومانامه نه وه کار د ایچه وه کار بئیریت می که.دگمه هاری نه کنشتیار بکیت تا یه گل انجومانامه پشت راسکاری سی تیرنشون انجومانامه شما کل بوئه. ای انجومانامه د ور گرته یه گل رازینه ئه. هوم پیوند نه د دوارته نیئر خوتو واز بکیت تا تیرنشون انجومانامه تو پشت راسکاری با.",
+       "confirmemail_pending": "یه گل رازینه پشت راسکاری د دماتر وه شکل انجومانامه سی شما کلی بیه. ار د ای آخریا حساو خوتونه واز کردیته شایت بد نبا که دما یه که یه گل رازینه هنی بهایت چن دیقه آهره داری بکیت تا شایت انجومانامه دمایی وه تو برسه.",
        "confirmemail_send": "کل کردن رازینه پشت راس کاری",
        "confirmemail_sent": "انجومانامه پشت راس کردن کل بیه.",
+       "confirmemail_oncreate": "یه گل رازینه پشت راسکاری د دماتر وه شکل انجومانامه سی شما کلی بیه.\nسی اومائن وامین د سامونه نمیها ای رازینه وارد بکیت، ولی سی ره وندیاری امکانات وابسه د انجومانامه د ای ویکی ونه میهایت.",
+       "confirmemail_sendfailed": "کل کردن انجومانامه پشت راسکاری انجومگر نبی.\nتیرنشون انجومانامه نه د لحاظ بیین نیسسه یا گن وارسی بکیت.\n\nجواو سامونه کل کردن انجومانامه: $1",
+       "confirmemail_invalid": "رازینه پشت راسکاری نامعتوره. \nشایت وه تموم بیه با.",
        "confirmemail_needlogin": "لطف بکید $1 نه سی تیرنشون انجومانامه تو پشت راس بکید.",
        "confirmemail_success": "تیرنشون انجومانامه تو پشت راس بیه.\nشایت شما ایسه بهایت [[Special:چی یه گل کاریار|بیایت وامین]]و د ویکی لذت بوریت",
        "confirmemail_loggedin": "تیرنشون انجومانامه شما ایسه پشت راس بیه.",
        "confirmemail_subject": "{{SITENAME}} تیرنشون انجومانامه پشت راست کردن",
+       "confirmemail_body": "یه نفر، شایت خوتو، د تیرنشون آی‌ پی $1 حساو کاریاری وا نوم «$2» و ای تیرنشون انجومانامه نه {{SITENAME}} ره وندیاری کرده.\n\nسی پشت راسکاری یه که ای حساو د راستکی مال شمانه و هنی سی کنشتیاری انجومانامه {{SITENAME}} هوم پیوند هاری نه د دوارته نیئر خوتو واز بکیت:\n\n$3\n\nار شما ای حساو کاریاری نه ثوت *نکردیته*، لطف بکیت هوم پیوند هاری نه واز بکیت تا پشت راسکاری تیرنشون انجومانامه انجومشیو بوئه:\n\n$5\n\nای رازینه پشت راسکاری د ویرگار $4 تموم موئه.",
+       "confirmemail_body_changed": "یه نفر، شایت خوتو، د تیرنشون آی‌ پی $1 حساو کاریاری وا نوم «$2» و ای تیرنشون انجومانامه نه {{SITENAME}} ره وندیاری کرده.\n\nسی پشت راسکاری یه که ای حساو د راستکی مال شمانه و هنی سی کنشتیاری انجومانامه {{SITENAME}} هوم پیوند هاری نه د دوارته نیئر خوتو واز بکیت:\n\n$3\n\nار ای حساو کاریاری مال شما *نئ*، لطف بکیت هوم پیوند هاری نه واز بکیت تا پشت راسکاری تیرنشون انجومانامه انجومشیو بوئه:\n\n$5\n\nای رازینه پشت راسکاری د ویرگار $4 تموم موئه.",
+       "confirmemail_body_set": "\nیه نفر، شایت خوتو، د تیرنشون آی‌ پی $1 حساو کاریاری وا نوم «$2» و ای تیرنشون انجومانامه نه {{SITENAME}} ره وندیاری کرده.\n\nسی پشت راسکاری یه که ای حساو د راستکی مال شمانه و هنی سی کنشتیاری انجومانامه {{SITENAME}} هوم پیوند هاری نه د دوارته نیئر خوتو واز بکیت:\n\n$3\n\nار شما ای حساو کاریاری نه ثوت *نکردیته*، لطف بکیت هوم پیوند هاری نه واز بکیت تا پشت راسکاری تیرنشون انجومانامه انجومشیو بوئه:\n\n$5\n\nای رازینه پشت راسکاری د ویرگار $4 تموم موئه.",
        "confirmemail_invalidated": "پشت راس کنی انجومانامه انجوم شیو بیه",
        "invalidateemail": "انجومشیو کردن پشت راس کردن انجومانامه",
        "scarytranscludedisabled": "[پرگنجایشت کاری مینجا ویکی کنشتکار نئ]",
        "scarytranscludefailed-httpstatus": "[واحونی چوئه سی $1 انجومگر نبی: خطا اچ‌ تی‌ تی‌ پی $2]",
        "scarytranscludetoolong": "[یو آر ال فره گپه]",
        "deletedwhileediting": "<strong>زئنار:</strong>ای بلگه د او گاتی که شما شرو د ویرایشت کردیته پاکسا بیه!",
+       "confirmrecreate": "کاریار [[User:$1|$1]] ([[User talk:$1|چک چنه]]) ای گوتار نه نها یه که شما شرو د ویرایشتش کردیته سی دلیل هاری پاکسا کرده:\n: ''$2''\nلطف بکیت پشت راسکاری بکیت که میهایت د نو ای گوتار نه دروس بکیت.",
+       "confirmrecreate-noreason": "کاریار [[User:$1|$1]] ([[User talk:$1|چک چنه]]) ای گوتار نه نها یه که شما شرو د ویرایشتش کردیته.\nلطف بکیت پشت راسکاری بکیت که میهایت د نو ای گوتار نه دروس بکیت.",
        "recreate": "د نو راس کردن",
        "confirm_purge_button": "خوئه",
        "confirm-purge-top": "میهایت کش ای بلگه نا پاک بکیت؟",
+       "confirm-purge-bottom": "حالی کردن مینجاگر یه گل بلگه باعث موئه که آخری نسقه وه دیاری بکه.",
        "confirm-watch-button": "خوئه",
        "confirm-watch-top": "ای بلگه نه د سیل برگتو اضاف می کید؟",
        "confirm-unwatch-button": "خوئه",
        "autoredircomment": "بلگه واگردونی بیه سی[[$1]]",
        "autosumm-new": "راست کردن بلگه وه دس \"$1\"",
        "autosumm-newblank": "بلگه حالی دروس بیه",
+       "lag-warn-normal": "شایت آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکن.",
+       "lag-warn-high": "شایت سی واپس رئتن فره رسینه جا، آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکرده بان.",
        "watchlistedit-normal-title": "ویرایشت سیل برگ",
        "watchlistedit-normal-legend": "ؤرداشتن سرونیا د سیل برگ",
+       "watchlistedit-normal-explain": "داسونایی که هان د نومگه سیل برگه شما د هار اومائنه.\nسی پاکسا کردن داسون جعوه کناری وه نه نشودار بکیت و دگمه «{{int:Watchlistedit-normal-submit}}» نه بپورنیت.\nشما همچنی می تونیت [[Special:EditWatchlist/raw|نومگه خام نه ویرایشت بکیت]].",
        "watchlistedit-normal-submit": "ؤرداشتن سرونیا",
+       "watchlistedit-normal-done": "$1 داسون د نومگه سیل برگ شما پاکسا {{PLURAL:$1|بی|بیین}}:",
        "watchlistedit-raw-title": "سیل برگ نه ردیفی ویرایشت کو",
        "watchlistedit-raw-legend": "سیل برگ نه ردیفی ویرایشت کو",
+       "watchlistedit-raw-explain": "داسونایی که هان د نومگه سیل برگ شما هان د هار، و شما می تونیت چیایی نه پاکسا یا اضاف بکیت؛ هر چی واس د یه گل خط جگا بوئه.\nدس آخر،ری دگمه «{{int:Watchlistedit-raw-submit}}» کلیک بکیت.\nد ویر داشتوئیت که شما می تونیت د [[Special:EditWatchlist|ویرایشتگر استاندارد نومگه سیل برگ]] نم وه کار بئیریت.",
        "watchlistedit-raw-titles": "داسون:",
        "watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
        "watchlistedit-raw-done": "سیل برگتون وه هنگوم سازی بیه.",
        "watchlistedit-raw-added": "$1 داسون وه دماگریا اضافه {{PLURAL:$1|بی|بیین}}:",
+       "watchlistedit-raw-removed": "$1 داسون پاکسا {{PLURAL:$1|بی|بیین}}:",
        "watchlistedit-clear-title": "سیل برگ دروس بیه",
        "watchlistedit-clear-legend": "پاک کردن سیل برگ",
+       "watchlistedit-clear-explain": "همه داسونا د نومگه سیل برگ شما پاکسا موئه.",
        "watchlistedit-clear-titles": "داسون:",
        "watchlistedit-clear-submit": "پاک کردن سیل برگ(وه سی همیشه هئ!)",
        "watchlistedit-clear-done": "سیل برگتون وه پاک بیه.",
+       "watchlistedit-clear-removed": "$1 داسون پاکسا {{PLURAL:$1|بی|بیین}}:",
        "watchlistedit-too-many": "ایچه بلگه یا فره ای سی نشو دئن هئ.",
        "watchlisttools-clear": "پاک کردن سیل برگ",
        "watchlisttools-view": "آلشتیا مرتوط نه بوینیت",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|چک چنه]])",
        "timezone-utc": "UTC",
        "duplicate-defaultsort": "زنهار کلیت پیش فرض جور بیه $2 تازه ای یا کلید پیش فرض جوربیه $1 رد بیه.",
+       "duplicate-displaytitle": "<strong>هشدار:</strong> نشو دئن داسون\" $2 \"باعث باطل بیین نشو دئن داسون \" $1 \" موئه.",
+       "invalid-indicator-name": "<strong>خطا:</strong>خصوصیات جادیارکنیا حال و بار بلگه <code>name</code> نباید حالی بان.",
        "version": "نسقه",
        "version-extensions": "دمادیسیا پورسه",
        "version-skins": "پوسه یا پورسه بیه",
        "fileduplicatesearch-filename": "نوم جانیا:",
        "fileduplicatesearch-submit": "پی جوری",
        "fileduplicatesearch-info": "$1 × $2 pixel<br />انازه جانیا: $3<br />MIME type: $4",
+       "fileduplicatesearch-noresults": "جانیایی وا نوم «$1» یافت نبی.",
        "specialpages": "بلگيا ويجه",
        "specialpages-note-top": "میراث",
        "specialpages-group-maintenance": "گزارشتیا واداشتن",
        "intentionallyblankpage": "ای بلگه عمدن حالی هشته بیه",
        "external_image_whitelist": "یه خط نه ول بکید چی وه<pre>",
        "tags": "سردیسیا آلشت دئن خو",
-       "tag-filter": "فيلتر [[Special:سردیسیا|سردیس]]:",
+       "tag-filter": "فيلتر [[Special:سردیس|سردیسیا]]:",
        "tag-filter-submit": "فيلتر",
        "tag-list-wrapper": "([[Special:سردیسیا|{{PLURAL:$1|سردیس|سردیسیا}}]]: $2)",
        "tags-title": "سردیسیا",
        "tags-tag": "نوم سردیس",
        "tags-display-header": "دیاری کردن د نوم گه آلشتیا",
+       "tags-description-header": "توضیح کامل هومبراور",
        "tags-source-header": "سرچشمه",
        "tags-active-header": "کنشتگره؟",
        "tags-hitcount-header": "آلشتیا سردیس دار",
        "compare-invalid-title": "داسونی که شما تیار کردیته خو نئ.",
        "compare-title-not-exists": "سرون مشقص بیه وجود ناره.",
        "compare-revision-not-exists": "وانئری که شما تی دیار کردیته وجود ناره.",
+       "dberr-again": "چن دیقه آهره داری بکیت و دنو بلگه نه سوار بکیت.",
        "dberr-info": "(نبوئه وه رسینه جا:$1 دسرسی داشتوئیت)",
        "dberr-info-hidden": "(نبوئه د رسینه گا دسرسی داشت)",
        "htmlform-invalid-input": "یه قری مشگل ها د پاره یی د درینده یا شما.",
+       "htmlform-int-invalid": "ارزایشتی که دئیته یه گل عدد صحیح نئ.",
+       "htmlform-float-invalid": "ارزایشتی که دئیته یه گل عدد نئ.",
        "htmlform-int-toolow": "انازه یی که شما دئیته د کمترونه $1 فره کمتره.",
        "htmlform-int-toohigh": "انازه یی که شما دئیته د بشترونه $1 فره بیشتره.",
        "htmlform-required": "یه دئه واس بوئه.",
        "revdelete-summary-unhid": "چکسته ویرایشت قام نبیه",
        "revdelete-uname-unhid": "نوم کاروری قام نبیه",
        "logentry-move-move": "$1 {{GENDER:$2|جا وه جا کرده}} بلگه $3 نه سی $4",
+       "logentry-newusers-newusers": "حساو کاریاری $1 {{GENDER:$2|دروس بیه}}",
        "logentry-newusers-create": "حساو کاریاری $1 {{GENDER:$2|راس بی}}",
+       "logentry-newusers-create2": "حساو کاریاری $3،وه دس $1 {{GENDER:$2|دروس بی}}",
+       "logentry-newusers-autocreate": "حساو $1  خودانجومن {{GENDER:$2|دروس بی}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|سوار کرده}} $3",
        "logentry-upload-revert": "$1 $3 نه {{GENDER:$2|سوارکرد}}",
        "log-name-managetags": "سردیس دیوونداری کردن پهرستنومه",
        "api-error-http": "خطا مینجایی:نبوئه د رسینه جا وصل بوئیت.",
        "api-error-illegal-filename": "نوم جانیا اجازه دئه نئ.",
        "api-error-mustbeloggedin": "شما سی سوارکردن فایلیا با بیایت وامین",
+       "api-error-stashnosuchfilekey": "جانیا کلیتی که شما میهاستیت د وه دسرسی داشتوئیت، نیئش.",
+       "api-error-timeout": "رسینه جا د گات تیه وه را بیین جواوی نده.",
        "api-error-unclassified": "یه گل خطا نادیار ری ون کرده.",
        "api-error-unknown-code": "خطا نادیار:\"$1\".",
+       "api-error-unknown-error": "خطا مینونه: د گاتی که شما د حال و بار تلاش سی سوارکرد جانیاتو بییت، یه گل اشتوا پیش اوما.",
        "api-error-unknown-warning": "هشدار نادیار:\"$1\".",
        "api-error-unknownerror": "خطا نادیار:\"$1\".",
        "api-error-uploaddisabled": "سوار کردن د ای ویکی ناکشتگر بیه.",
+       "api-error-verification-error": "شایت جانیا خراو بیه، یا پسون غلط داشتوئه.",
        "duration-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
        "duration-minutes": "$1 {{PLURAL:$1|دیقه|دیقه یا}}",
        "duration-hours": "$1 {{PLURAL:$1|ساعت |ساعتیا}}",
        "duration-decades": "$1 {{PLURAL:$1|دهه|دهه یا}}",
        "duration-centuries": "$1 {{PLURAL:$1|سده|سده یا}}",
        "duration-millennia": "$1 {{PLURAL:$1|میلینیوم|ملینا}}",
+       "rotate-comment": "عسگ وا $1 {{PLURAL:$1|گرینج|گرینج}} ساعت گرد در حرده",
+       "limitreport-title": "داده یا جانیاکار وااشکافت کار:",
        "limitreport-cputime": "گات وه کار گرتن سی پی یو",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
        "limitreport-walltime": "زمون راستکی وه کار گرتن",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
+       "limitreport-ppvisitednodes": "شمارش یار گره دیئه بیه دما پردازشتکار",
        "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes": "شمارش یار گره تولیدی دما پردازشتکار",
        "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-postexpandincludesize": "انازه د ور گرته نها گپ کلونکاری",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بایت|بایتیا}}",
+       "limitreport-templateargumentsize": "انازه چوئه آرگومان",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بایت|بایتیا}}",
+       "limitreport-expansiondepth": "بیشتری پی یا گپ کلونکاری",
        "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount": "انازه انجومگریا وااشکافتکار پر مصرف",
        "limitreport-expensivefunctioncount-value": "$1/$2",
        "expandtemplates": "گپ کلون کردن چوئه یا",
+       "expand_templates_intro": "ای بلگه ویجه یه گل نیسسه نه گرته و همه چوئه یایی که هان د وه ونونه و حال و بار ؤرئشتن گپ کلونکاری می که همچنی. آلشیاریا وااشکافت کاری چی <code><nowiki>{{</nowiki>#language:…}}</code> و آلشتکنیا چی <code><nowiki>{{</nowiki>CURRENTDAY}}</code> نه ئم گپ کلونکاری می که— د راستکی تقریون هر چی نه که ها د میلات دو گل آکولات. ای کار وا واحونی کاری ریترازجا وااشکافت مربوط د خود ویکی وارسگر انجوم دیار موئه.",
+       "expand_templates_title": "داسون، سی {{FULLPAGENAME}} و چیا هنی:",
        "expand_templates_input": "نیسسه درینده:",
        "expand_templates_output": "نتیجه",
        "expand_templates_xml_output": "درده ایکس ام ال",
+       "expand_templates_html_output": "وه در ده اچ تی ام ال خام",
        "expand_templates_ok": "خوئه",
        "expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا",
+       "expand_templates_remove_nowiki": "خومثی کردن سردیسیا <nowiki> د کارگرایی",
+       "expand_templates_generate_xml": "نشو دئن دار وااشکافتکاری XML",
+       "expand_templates_generate_rawhtml": "نشو دئن اچ‌ تی‌ ام‌ ال خام",
        "expand_templates_preview": "پيش سيل",
+       "expand_templates_preview_fail_html": "<em>سی یه که{{SITENAME}} تا یه گل HTML خام کنشتیار و یه گل د دس رئتن دونسمنیا نشسجا هئ، پیش سیل وا داسون یه انجومکاری احتیاطی ری وه ری چل کاریا جاوا نیسسه نهو بیه.</em>\n\n<strong>ار ای تلاش پیش سیل مشروعه، لطف بکیت د نو تلاش بکیت. ار هنی ئم کار نمی که، تلاش بکیت ری [[Special:UserLogout|اومائن وه در د سامونه]] بپورنیت و د نو روئیت وامین سامونه.",
+       "expand_templates_preview_fail_html_anon": "<em>سی یه که{{SITENAME}} تا یه گل HTML خام کنشتیار و یه گل د دس رئتن دونسمنیا نشسجا هئ، پیش سیل وا داسون یه  احتیاطی ری وه ری چل کاریا جاوا نیسسه نهو بیه.</em>\n\n<strong>ار ای تلاش پیش سیل مشروعه، لطف بکیت د نو تلاش بکیت. ار هنی ئم کار نمی که، کوشایشت بکیت ری [[Special:UserLogout|اومائن وه در د سامونه]] بپورنیت و د نو روئیت وامین سامونه.",
        "pagelanguage": "بلگه انتخاو زون",
        "pagelang-name": "بلگه",
        "pagelang-language": "زون",
        "action-pagelang": "آلشت دئن زون بلگه",
        "log-name-pagelang": "آلشت دئن زون پهرستنومه",
        "log-description-pagelang": "ای پهرستنومه در بلگه زونا آلشت گرته.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2| آلشتکاری بی}} زون بلگه سی $3  د $4  وه $5 .",
+       "default-skin-not-found": "$2اوف! پوسه پیش‌ فرض سی ویکی شما تعریف نبیه د <code dir=\"ltr\"<$wgDefaultSkin</code> وا داسون <code>$1</code>، د دسرس نئ.\n\nچنی د ویر میا که پورنین شما ده ور گرته پوسه یا هاری ئم بوئه.\n[https://www.mediawiki.org/wiki/Manual:Skin_configuration ره دیارکن: میزونکاری پوسه] نه سی وه دس اوردن دونسمنی دباره جور کنشتیار کردن ونو و انتخاو پیش فرض سیل بکیت.\n\n$2\n\n; ار ایسنی ویکی وارسگر نه پورستیته:\n: احتمالن د درگا، یا مستقیمن د رازینه مبدا که چن روشت هنی وه کار میئره ونه پورستیته. چنی بوئه که. چن گل پوسه د [https://www.mediawiki.org/wiki/Category:All_skins نومگه پوسه mediawiki.org] نه بپورنیت، که واگرد چن گله پوسه و دمادیسن.شما می تونیت لشک <code>skins/</code> ونه ورداریت و بدسنیت.\n\n:* هومدنگ سازی یه گل د اماییه جایا <code>mediawiki/skins/*</code> د طریق درگا وا مین لشک<code dir=\"ltr\">skins/</code> د پورنین ویکی وارسگر خوتو.\n: انجوم دئن ای کار وا کار اماییه جا درگاتو قاطی نموئه، الوت ار گپ کلونکار ویکی وارسگریت.\n\n; ار ایسنی ویکی وارسگر خوتونه بردیته واپیش:\n: ویکی وارسگر نسقه ۱٫۲۴ و تازه‌تر هنی وه شکل خودانجوم پوسه یا پورسته نه کنشتیار نمی که.\n([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery ره دیارکن: نهاجوری خودانجوم پوسه] نه سیل بکیت). شما می تونیت خطیا هار نه بوریت وامین <code>LocalSettings.php</code> تا همه پوسه یا پورسه ایسن نه کنشتیاری بکیت:\n\n<pre dir=\"ltr\">$3</pre>\n\n; ار ایسنی <code>LocalSettings.php</code> نه آلشت دئیته:\n: نوم پوسه یا نه سی غلط نویسکاری دواره وارسی بکیت.",
+       "default-skin-not-found-no-skins": "پویه پیش فرض سی ویکی شما د <code>$wgDefaultSkin</code> جاگر نبیه و د اوچه وا داسون <code>$1</code>، هئیش دیاری نمی که.\n\nشما پوسه یا نپورسیته.\n\n:ار ویکی وارسگر نه د نو وه هنگوم سازی کردیته یا ونه د نو بپورسیته:\n:شایت د گیتیا یا کند بیین سرچشمه واگرد روشتیا هنی پورسن نه وه کار گرتیته. تیه داشتوئیت کهMediaWiki 1.24 یا تازه تر د جانیا اصلی هیچ پوسه یی ناشتوئن.\nتلاش بکیت چن گل پوسه د [https://www.mediawiki.org/wiki/Category:All_skins جانیا پوسه یا ویکی وارسگر]، نه واگرد:\n:*گرتن [https://www.mediawiki.org/wiki/Download پورسیا تاربال]، که وا چن گل پوسه و دما دیسه ای کار بکیت. شما می می تونیت پوسه <code>skins/</code> نه د وه وردار بدیس بکیت.\n:*کلون کردن یه گل د <code dir=\"ltr\">mediawiki/skins/*</code> د ریپوزیتوری د جانیا <code>skins/</code> ویکی وارسگرتو.\n:ار یه گل گپ کلونکاریا ویکی وارسگر هئیت، انجوم دئن ای کار نواس ضدیتی وا ریپوزیتوری گیت شما داشتوئه. سی دونسمنیا هنی و کنشتیار کردن پوسه یاو انتخاو ونو سی پیش فرض بیین [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: میزونکاری پوسه] نه سیل بکیت.",
        "default-skin-not-found-row-enabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
        "default-skin-not-found-row-disabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
        "mediastatistics": "آماریا وارسگر",
+       "mediastatistics-summary": "آماریایی که دباره جوریا یه گل جانیا وه هنگوم بیه . ای چی فقط د ور گرته آخری نسقه جانیائه. نسقه یا دمایی یا پاکسا بینه یا جیاوازی دارن.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت|$1 بایتیا}} ($2; $3%)",
        "mediastatistics-table-mimetype": "جورMIME:",
        "mediastatistics-table-extensions": "دمادیسیا ممکن",
        "mediastatistics-header-text": "نیسسه دار",
        "mediastatistics-header-executable": "اجرا کردنیا",
        "mediastatistics-header-archive": "قالویا جم بیه",
+       "json-warn-trailing-comma": "$1 ویرگار که ها د نها جی سون {{PLURAL:$1|پاکسا بی}}.",
+       "json-error-unknown": "مشگل د جی سون بی. خطا: $1",
+       "json-error-depth": "بیشترونه پی یا دماداری رد بیه",
+       "json-error-state-mismatch": "جی‌ سن نادرست یا ناقص",
+       "json-error-ctrl-char": "خطا نیسه یار کنترلی، شایت غلط رازینه کاری بیه",
        "json-error-syntax": "خطا دستوری",
+       "json-error-utf8": "نیسه یاریا غلط یو تی‌ اف-۸، شایت غلط رازینه کاری بیه",
+       "json-error-recursion": "ری کردن یه گلی یا بیشتر د انازه یی که رازینه کاری بوئه",
        "json-error-inf-or-nan": "ارزایشتیا INF یا NAN یه گل یا بیشتر د وه د انازه یی که رازینه کاری بیه",
        "json-error-unsupported-type": "یه گل ارزایشت د جوری که نبوئه رازینه کاری با وتو دئه بیه",
        "headline-anchor-title": "هوم پیوند کردن د ای بهرجا",
index a392ca1..115bf81 100644 (file)
@@ -57,7 +57,7 @@
        "tog-shownumberswatching": "Rodyti stebinčių naudotojų skaičių",
        "tog-oldsig": "Esamo parašo peržiūra:",
        "tog-fancysig": "Laikyti parašą vikitekstu (be automatinių nuorodų)",
-       "tog-uselivepreview": "Naudoti tiesioginę peržiūrą (JavaScript) (Eksperimentinis)",
+       "tog-uselivepreview": "Naudoti tiesioginę peržiūrą",
        "tog-forceeditsummary": "Klausti, kai palieku tuščią keitimo komentarą",
        "tog-watchlisthideown": "Slėpti mano keitimus stebimų sąraše",
        "tog-watchlisthidebots": "Slėpti robotų keitimus stebimų sąraše",
        "changeemail-password": "Jūsų {{SITENAME}} slaptažodis:",
        "changeemail-submit": "Keisti el. pašto adresą",
        "changeemail-throttled": "Jūs atlikote pernelyg daug bandymų prisijungti.\nLuktelėkite $1 prieš bandant vėl.",
+       "resettokens-tokens": "Žetonai:",
        "resettokens-token-label": "$1 (dabartinė reikšmė: $2)",
        "bold_sample": "Paryškintas tekstas",
        "bold_tip": "Paryškinti tekstą",
        "tooltip-ca-edit": "Jūs galite redaguoti šį puslapį. Nepamirškite paspausti peržiūros mygtuką prieš išsaugodami.",
        "tooltip-ca-addsection": "Pradėti naują aptariamą temą",
        "tooltip-ca-viewsource": "Puslapis yra užrakintas. Galite pažiūrėti turinį.",
-       "tooltip-ca-history": "Ankstesni patikslinimai šiame puslapyje",
+       "tooltip-ca-history": "Ankstesnės puslapio versijos",
        "tooltip-ca-protect": "Užrakinti šį puslapį",
        "tooltip-ca-unprotect": "Keisti šio puslapio apsaugą",
        "tooltip-ca-delete": "Ištrinti šį puslapį",
        "version-entrypoints": "Įėjimo taško URL",
        "version-entrypoints-header-entrypoint": "Įėjimo taškas",
        "version-entrypoints-header-url": "URL",
+       "version-libraries-library": "Biblioteka",
+       "version-libraries-version": "Versija",
        "redirect": "Nukreipkite iš failo, naudotojo arba pakeiskite ID",
        "redirect-legend": "Nukreipti į failą ar puslapį",
        "redirect-submit": "Eiti",
index a188041..d42add4 100644 (file)
        "recentchanges-summary": "На оваа страница ги следите скорешните промени на викито.",
        "recentchanges-noresult": "Нема промени од дадениот период што одговараат на бараното.",
        "recentchanges-feed-description": "Следење на најскорешните промени на викито во овие емитувања.",
-       "recentchanges-label-newpage": "Ð\9eва Ñ\83Ñ\80едÑ\83ваÑ\9aе Ñ\81оздаде Ð½ова страница",
+       "recentchanges-label-newpage": "Ð\9dова страница",
        "recentchanges-label-minor": "Ова е ситна промена",
        "recentchanges-label-bot": "Ова уредување е направено од бот",
        "recentchanges-label-unpatrolled": "Ова уредување сè уште не е испатролирано",
        "listfiles-delete": "избриши",
        "listfiles-summary": "Оваа службена страница ги прикажува сите подигнати податотеки.",
        "listfiles_search_for": "Побарај име на податотека:",
+       "listfiles-userdoesnotexist": "Корисничката сметка „$1“ не е регистрирана.",
        "imgfile": "податотека",
        "listfiles": "Список на податотеки",
        "listfiles_thumb": "Минијатура",
        "linksearch-error": "Џокер-знаците може да се користат само на почетокот во името на домаќинот.",
        "listusersfrom": "Прикажи корисници почнувајќи од:",
        "listusers-submit": "Прикажи",
-       "listusers-noresult": "Ð\9dе Ðµ Ð¿Ñ\80онаÑ\98ден корисник.",
+       "listusers-noresult": "Ð\9dе Ð¿Ñ\80онаÑ\98дов Ð½Ð¸Ðµден корисник.",
        "listusers-blocked": "(блокиран)",
        "activeusers": "Список на активни корисници",
        "activeusers-intro": "Ова е список на корисници кои биле на некој начин активни во последните {{PLURAL:$1|еден ден|$1 дена}}.",
        "activeusers-from": "Прикажи корисници почнувајќи од:",
        "activeusers-hidebots": "Скриј ботови",
        "activeusers-hidesysops": "Скриј администратори",
-       "activeusers-noresult": "Нема пронајдено корисници.",
+       "activeusers-noresult": "Не пронајдов ниеден корисник.",
        "listgrouprights": "Права на кориснички групи",
        "listgrouprights-summary": "Следи список на кориснички групи утврдени на ова вики, заедно со нивните придружни права на пристап.\nМожно е да има [[{{MediaWiki:Listgrouprights-helppage}}|дополнителни информации]] за некои права.",
        "listgrouprights-key": "Легенда:\n* <span class=\"listgrouprights-granted\">Доделено право</span>\n* <span class=\"listgrouprights-revoked\">Одземено право</span>",
        "emailccsubject": "Копија од вашата порака до $1: $2",
        "emailsent": "Писмото е испратено",
        "emailsenttext": "Писмото е испратено.",
-       "emailuserfooter": "Оваа е-порака беше пратена од $1 до $2 со помош на функцијата Е-пошта на {{SITENAME}}.",
+       "emailuserfooter": "$1 го испрати писмово на $2 со помош на функцијата „{{int:emailpage}}“ на {{SITENAME}}.",
        "usermessage-summary": "Оставете системска порака.",
        "usermessage-editor": "Системски гласник",
        "watchlist": "набљудувања",
        "feedback-error1": "Грешка: Непрепознаен резултат од извршникот",
        "feedback-error2": "Грешка: Уредувањето не успеа",
        "feedback-error3": "Грешка: Извршникот не одговара",
+       "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> како <code>$1</code> не е достапно.\n\nВашата воспоставка ги опфаќа следниве рува. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n:* Преземање на tarball-и за рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да ги прекопирате следниве редови во <code>LocalSettings.php</code> за да ги вклучите сите моментално воспоставени рува:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
+       "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> како <code>$1</code> не е достапно.\n\nВашата воспоставка {{PLURAL:$4|го опфаќа следново руво|ги опфаќа следниве рува}}. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n:* Преземање на tarball-и за рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да {{PLURAL:$5|го прекопирате следниов ред|ги прекопирате следниве редови}} во <code>LocalSettings.php</code> за да ги вклучите {{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> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n:* Преземање на tarball-и за поединечни рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (вклучено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''исклучено''')",
index 1c560f3..d787a4e 100644 (file)
        "wrongpassword": "രഹസ്യവാക്ക് തെറ്റാണ്, വീണ്ടും ശ്രമിക്കുക.",
        "wrongpasswordempty": "രഹസ്യവാക്ക് നൽകിയിരുന്നില്ല. വീണ്ടും ശ്രമിക്കുക.",
        "passwordtooshort": "രഹസ്യവാക്കിൽ കുറഞ്ഞതു {{PLURAL:$1|ഒരു അക്ഷരം|$1 അക്ഷരങ്ങൾ}} ഉണ്ടായിരിക്കണം.",
+       "passwordtoolong": "രഹസ്യവാക്കിൽ പരമാവധി {{PLURAL:$1|ഒരു അക്ഷരം|$1 അക്ഷരങ്ങൾ}} മാത്രമേ പാടുള്ളു.",
        "password-name-match": "താങ്കളുടെ രഹസ്യവാക്ക് ഉപയോക്തൃനാമത്തിൽ നിന്നും വ്യത്യസ്തമായിരിക്കണം.",
        "password-login-forbidden": "ഈ ഉപയോക്തൃനാമത്തിന്റെയും രഹസ്യവാക്കിന്റെയും ഉപയോഗം നിരോധിച്ചിരിക്കുന്നു.",
        "mailmypassword": "രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കുക",
        "missingcommentheader": "'''ഓർമ്മക്കുറിപ്പ്:''' ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''{{int:savearticle}}'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.",
        "summary-preview": "ചുരുക്കരൂപം എങ്ങനെയുണ്ടെന്നു കാണുക:",
        "subject-preview": "വിഷയം/തലക്കെട്ട് എങ്ങനെയുണ്ടെന്ന് കാണുക:",
+       "previewerrortext": "താങ്കളുടെ മാറ്റങ്ങൾ എങ്ങനെയുണ്ടെന്ന് കാണാൻ ശ്രമിച്ചപ്പോൾ പിഴവുണ്ടായി.",
        "blockedtitle": "ഉപയോക്താവിനെ തടഞ്ഞിരിക്കുന്നു",
        "blockedtext": "'''താങ്കളുടെ ഉപയോക്തൃനാമത്തേയോ താങ്കൾ ഇപ്പോൾ ലോഗിൻ ചെയ്തിട്ടുള്ള ഐ.പി. വിലാസത്തേയോ ഈ വിക്കി തിരുത്തുന്നതിൽ നിന്നു തടഞ്ഞിരിക്കുന്നു'''\n\n$1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്നതാണു് അതിനു രേഖപ്പെടുത്തിയിട്ടുള്ള കാരണം.\n\n* തടയലിന്റെ തുടക്കം: $8\n* തടയലിന്റെ കാലാവധി: $6\n* തടയപ്പെട്ട ഉപയോക്താവ്: $7\n\nഈ തടയലിനെ പറ്റി ചർച്ച ചെയ്യാൻ താങ്കൾക്ക് $1 എന്ന ഉപയോക്താവിനേയോ മറ്റ് [[{{MediaWiki:Grouppage-sysop}}|കാര്യനിർവാഹകരെയോ]] സമീപിക്കാവുന്നതാണ്. [[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളിൽ]] താങ്കൾ സാധുവായ ഇമെയിൽ വിലാസം കൊടുത്തിട്ടുണ്ടെങ്കിൽ, അതു അയക്കുന്നതിൽ നിന്നു താങ്കൾ തടയപ്പെട്ടിട്ടില്ലെങ്കിൽ, 'ഇദ്ദേഹത്തിന് ഇമെയിൽ അയക്കൂ' എന്ന സം‌വിധാനം ഉപയോഗിച്ച് താങ്കൾക്ക് മറ്റുപയോക്താക്കളുമായി ബന്ധപ്പെടാം. താങ്കളുടെ നിലവിലുള്ള ഐ.പി. വിലാസം $3 ഉം, താങ്കളുടെ തടയൽ ഐ.ഡി. #$5 ഉം ആണ്. ഇവ രണ്ടും താങ്കൾ കാര്യനിർവാഹകനെ ബന്ധപ്പെടുമ്പോൾ ചേർക്കുക.",
        "autoblockedtext": "താങ്കളുടെ ഐ.പി. വിലാസം സ്വയം തടയപ്പെട്ടിരിക്കുന്നു, മറ്റൊരു ഉപയോക്താവ് ഉപയോഗിച്ച കാരണത്താൽ $1 എന്ന കാര്യനിർവാഹകനാണ് തടഞ്ഞുവെച്ചത്.\nഇതിനു കാരണമായി നൽകിയിട്ടുള്ളത്:\n\n:''$2''\n\n* തടയൽ തുടങ്ങിയത്: $8\n* തടയൽ അവസാനിക്കുന്നത്: $6\n* തടയാൻ ഉദ്ദേശിച്ചത്: $7\n\nഈ തടയലിനെ കുറിച്ച് ചർച്ച ചെയ്യാൻ താങ്കൾക്കു $1 എന്ന കാര്യനിവാഹകനേയോ മറ്റു [[{{MediaWiki:Grouppage-sysop}}|കാര്യനിർവാഹകരെയോ]] ബന്ധപ്പെടാവുന്നതാണ്.\n\nശ്രദ്ധിക്കുക [[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളിൽ]] സാധുവായ ഇമെയിൽ വിലാസം രേഖപ്പെടുത്താതിരിക്കുകയോ, അത് ഉപയോഗിക്കുന്നതിൽ നിന്ന് താങ്കളെ തടയുകയോ ചെയ്തിട്ടുണ്ടെങ്കിൽ \"ഇദ്ദേഹത്തിന് ഇമെയിൽ അയക്കൂ\" എന്ന സം‌വിധാനം പ്രവർത്തന രഹിതമായിരിക്കും.\n\nതാങ്കളുടെ നിലവിലുള്ള ഐ.പി. വിലാസം $3 ആണ്, താങ്കളുടെ തടയലിന്റെ ഐ.ഡി. #$5 ആകുന്നു.\nദയവായി മുകളിൽ കൊടുത്തിരിക്കുന്ന വിവരങ്ങളെല്ലാം താങ്കൾ നടത്തുന്ന അന്വേഷണങ്ങളിൽ ഉൾപ്പെടുത്തുവാൻ ശ്രദ്ധിക്കുക.",
        "notextmatches": "താളുകളുടെ ഉള്ളടക്കത്തിൽ താങ്കൾ തിരഞ്ഞ വാക്കുമായി യോജിക്കുന്ന ഫലങ്ങൾ ഒന്നും തന്നെയില്ല",
        "prevn": "മുമ്പത്തെ {{PLURAL:$1|$1}}",
        "nextn": "അടുത്ത {{PLURAL:$1|$1}}",
+       "prev-page": "മുൻപത്തെ താൾ",
+       "next-page": "അടുത്ത താൾ",
        "prevn-title": "മുൻപത്തെ {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}}",
        "nextn-title": "അടുത്ത {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}}",
        "shown-title": "{{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} വീതം താളിൽ കാണിക്കുക",
        "emailccsubject": "$1 എന്ന ഉപയോക്താവിനയച്ച സന്ദേശത്തിന്റെ പകർപ്പ്: $2",
        "emailsent": "ഇമെയിൽ അയച്ചിരിക്കുന്നു",
        "emailsenttext": "താങ്കളുടെ ഇമെയിൽ അയച്ചു കഴിഞ്ഞിരിക്കുന്നു.",
-       "emailuserfooter": "ഈ ഇമെയിൽ {{SITENAME}} സംരംഭത്തിലെ \"ഉപയോക്താവിന്‌ ഇമെയിൽ അയയ്ക്കുക\" എന്ന സൌകര്യം ഉപയോഗിച്ച് $1 എന്ന ഉപയോക്താവ് $2 എന്ന ഉപയോക്താവിന് അയച്ചതാണ്.",
+       "emailuserfooter": "ഈ ഇമെയിൽ, {{SITENAME}} സംരംഭത്തിലെ \"{{int:emailpage}}\" എന്ന സൗകര്യം ഉപയോഗിച്ച്, $1 എന്ന ഉപയോക്താവ് $2 എന്ന ഉപയോക്താവിന് അയച്ചതാണ്.",
        "usermessage-summary": "വ്യവസ്ഥാസന്ദേശം ഉപേക്ഷിക്കുക.",
        "usermessage-editor": "വ്യവസ്ഥാസന്ദേശകൻ",
        "watchlist": "ശ്രദ്ധിക്കുന്നവ",
index e7922b4..c5c10bd 100644 (file)
        "listfiles-delete": "scancèlla",
        "listfiles-summary": "Sta paggena speciale fà vedé tuttequante file carrecate.",
        "listfiles_search_for": "Ascìa 'e media pe' nomme:",
+       "listfiles-userdoesnotexist": "'O cunto utente \"$1\" nun è riggistrato.",
        "imgfile": "file",
        "listfiles": "Lista d' 'e file",
        "listfiles_thumb": "Miniature",
        "emailccsubject": "Copia d' 'a mmasciata tua 'a $1: $2",
        "emailsent": "Mmasciata e-mail mannata",
        "emailsenttext": "'A mmasciata d' 'a toja s'è mannata.",
-       "emailuserfooter": "Chista mmasciata e-mail è stata mannata 'a $1 a $2 p' 'a funziona \"Mmasciata e-mail a l'utente\" 'e {{SITENAME}}.",
+       "emailuserfooter": "Chista mmasciata e-mail è stata mannata 'a $1 a $2 p' 'a funziona \"{{int:emailpage}}\" 'e {{SITENAME}}.",
        "usermessage-summary": "Lassanno na mmasciata 'e sistema.",
        "usermessage-editor": "Mmasciatore d' 'o sistema",
        "watchlist": "Paggene cuntrullate",
        "feedback-error1": "Errore: Risultato nun aspettato 'a ll'API",
        "feedback-error2": "Errore: Cagnamiento scassato",
        "feedback-error3": "Errore: Ll'API nun risponne",
+       "feedback-error4": "Errore: Nun se può miette 'o commento p' 'o titulo",
        "feedback-message": "Mmasciata:",
        "feedback-subject": "Suggietto:",
        "feedback-submit": "Manna",
index 9d2d63f..56b75d8 100644 (file)
@@ -43,7 +43,8 @@
                        "아라",
                        "Chameleon222",
                        "Helland",
-                       "Macofe"
+                       "Macofe",
+                       "Kingu"
                ]
        },
        "tog-underline": "Strek under lenker:",
        "wrongpassword": "Du har oppgitt et ugyldig passord. Prøv igjen.",
        "wrongpasswordempty": "Du oppga ikke noe passord. Prøv igjen.",
        "passwordtooshort": "Passord må ha minst {{PLURAL:$1|ett tegn|$1 tegn}}.",
+       "passwordtoolong": "Passord kan ikke overskride {{PLURAL:$1|1 character|$1 characters}}.",
        "password-name-match": "Passord og brukernavn kan ikke være det samme.",
        "password-login-forbidden": "Bruken av dette brukernavnet og passordet er forbudt.",
        "mailmypassword": "Tilbakestill passord",
index b80a22e..640e2c2 100644 (file)
        "searchprofile-articles": "Artikels",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
-       "searchprofile-advanced": "Uutebreid",
+       "searchprofile-advanced": "Uutgebreid",
        "searchprofile-articles-tooltip": "Zeuken in $1",
        "searchprofile-images-tooltip": "Zeuken naor bestaanden",
        "searchprofile-everything-tooltip": "Alle inhoud deurzeuken (oek overlegziejen)",
        "searchall": "alles",
        "showingresults": "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}}  <b>$1</b> vanaof nummer <b>$2</b>.",
        "search-nonefound": "Der bin gien resultaoten veur de zeukopdrachte.",
-       "powersearch-legend": "Uutebreid zeuken",
+       "powersearch-legend": "Uutgebreid zeuken",
        "powersearch-ns": "Zeuken in naamruumten:",
        "powersearch-togglelabel": "Selekteren:",
        "powersearch-toggleall": "Alle",
        "file-thumbnail-no": "De bestaandsnaam begint mit <strong>$1</strong>.\nDit is warschienlik n verkleinde aofbeelding ''(overzichsaofbeelding)''.\nA'j disse aofbeelding in volle grootte hebben voeg t dan toe, wiezig aanders de bestaandsnaam.",
        "fileexists-forbidden": "n Bestaand mit disse naam besteet al, en kan niet overschreven wörden.\nVoeg t bestaand toe onder n aandere naam.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Der besteet al n bestaand mit disse naam in de gezamenlike bestaandslokasie.\nA'j t bestaand evengoed op willen sturen, gao dan weerumme en kies n aandere naam.\n[[File:$1|thumb|center|$1]]",
-       "file-exists-duplicate": "Dit bestaand is liek alleens as {{PLURAL:$1|t volgende bestaand|de volgende bestaanden}}:",
-       "file-deleted-duplicate": "n Bestaand dat liek alleens is an dit bestaand ([[:$1]]) is eerder al vortedaon.\nBekiek t vortdologboek veurda'j verdan gaon.",
+       "file-exists-duplicate": "Dit bestaand is gelieke an {{PLURAL:$1|t volgende bestaand|de volgende bestaanden}}:",
+       "file-deleted-duplicate": "n Bestaand dat gelieke is an dit bestaand ([[:$1]]) is eerder al vortedaon.\nBekiek t vortdologboek veurda'j vedan gaon.",
        "uploadwarning": "Waorschuwing",
        "uploadwarning-text": "Pas de bestaandsbeschrieving hieronder an en probeer t opniej",
        "savefile": "Bestaand opslaon",
        "nolinkstoimage": "Bestaand is niet in gebruuk.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Meer verwiezingen]] naor dit bestaand bekieken.",
        "linkstoimage-redirect": "$1 (bestaandsdeurverwiezing) $2",
-       "duplicatesoffile": "{{PLURAL:$1|t Volgende bestaand is|De volgende $1 bestaanden bin}} liek alleens as dit bestaand ([[Special:FileDuplicateSearch/$2|meer informasie]]):",
+       "duplicatesoffile": "{{PLURAL:$1|t Volgende bestaand is|De volgende $1 bestaanden bin}} gelieke an dit bestaand ([[Special:FileDuplicateSearch/$2|meer informasie]]):",
        "sharedupload": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten.",
        "sharedupload-desc-there": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. Bekiek de [$2 beschrieving van t bestaand] veur meer informasie.",
        "sharedupload-desc-here": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. De [$2 beschrieving van t bestaand] dergindse, steet hieronder.",
        "fileduplicatesearch-filename": "Bestaandsnaam:",
        "fileduplicatesearch-submit": "Zeuken",
        "fileduplicatesearch-info": "$1 × $2 beeldpunten<br />Bestaandsgrootte: $3<br />MIME-type: $4",
-       "fileduplicatesearch-result-1": "Der bin gien bestaanden die liek alleens bin as \"$1\".",
-       "fileduplicatesearch-result-n": "Der {{PLURAL:$2|is één bestaand|bin $2 bestaanden}} die liek alleens bin as \"$1\".",
+       "fileduplicatesearch-result-1": "Der bin gien bestaanden die gelieke bin an \"$1\".",
+       "fileduplicatesearch-result-n": "Der {{PLURAL:$2|is één bestaand|bin $2 bestaanden}} die gelieke bin an \"$1\".",
        "fileduplicatesearch-noresults": "Der is gien bestaand mit de naam \"$1\" evunnen.",
        "specialpages": "Spesiale ziejen",
        "specialpages-note-top": "Legenda",
        "mediastatistics-header-video": "Video's",
        "mediastatistics-header-multimedia": "Interaktieve media",
        "special-characters-group-latin": "Latien",
-       "special-characters-group-latinextended": "Latien uutebreid",
+       "special-characters-group-latinextended": "Latien uutgebreid",
        "special-characters-group-ipa": "Internasionaal Klankeschrift",
        "special-characters-group-symbols": "Symbolen",
        "special-characters-group-greek": "Grieks",
        "special-characters-group-cyrillic": "Kyrillies",
        "special-characters-group-arabic": "Arabies",
-       "special-characters-group-arabicextended": "Arabies uutebreid",
+       "special-characters-group-arabicextended": "Arabies uutgebreid",
        "special-characters-group-persian": "Perzies",
        "special-characters-group-hebrew": "Hebreeuws",
        "special-characters-group-bangla": "Bengaals",
index 1ef0cc5..b31b2aa 100644 (file)
        "tog-shownumberswatching": "निगरानी गरिरहेका प्रयोगकर्ताहरुको संख्या देखाउने",
        "tog-oldsig": "वर्तमान हस्ताक्षर:",
        "tog-fancysig": "मेरो दस्तखतलाई विकि पाठको रुपमा लिने(स्वत सम्वन्ध बिना)",
-       "tog-uselivepreview": "प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस् (प्रयोगात्मक)",
+       "tog-uselivepreview": "प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस",
        "tog-forceeditsummary": "खाली सम्पादन सार प्रविष्टि गरेमा मलाई सोध्ने",
        "tog-watchlisthideown": "मेरा सम्पादनहरू निगनारी सूचीबाट लुकाउने",
        "tog-watchlisthidebots": "बोट सम्पादनहरू निगरानी सूचीबाट लुकाउने",
        "tog-watchlisthideminor": "साना-तिना सम्पादनहरू निगरानी सूचीबाट लुकाउने",
        "tog-watchlisthideliu": "प्रवेश गरेका प्रयोगकर्ताहरुको सम्पादन निगरानी सूचीबाट लुकाउने",
        "tog-watchlisthideanons": "अज्ञात प्रयोगकर्ताहरुबाट गरिएको सम्पादन निगरानी सूचीबाट लुकाउने",
-       "tog-watchlisthidepatrolled": "गस्ती(पट्रोल)सम्पादनहरु मेरो निगरानी सूचीबाट लुकाउने",
-       "tog-ccmeonemails": "मैले अरु प्रयोगकर्ताहरुलाई पठाउने इ-मेल को प्रतिलिपि मलाई पठाउने",
-       "tog-diffonly": "तलà¤\95ा à¤ªà¥\83षà¥\8dà¤\9fहरà¥\81à¤\95à¥\8b diffहरु सामग्री नदेखाउने",
-       "tog-showhiddencats": "लà¥\81à¤\95ाà¤\87à¤\8fà¤\95à¥\8b à¤ªà¥\8dरà¤\95ारहरु देखाउने",
-       "tog-norollbackdiff": "पूर्वस्थितिमा फर्काएपछि  diff हटाउने",
+       "tog-watchlisthidepatrolled": "गस्ती गरिएका सम्पादनहरु मेरो निगरानी सूचीबाट लुकाउने",
+       "tog-ccmeonemails": "मैले अरु प्रयोगकर्ताहरुलाई पठाउने इ-मेलको प्रतिलिपि मलाई पठाउने",
+       "tog-diffonly": "तलà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81à¤\95à¥\8b à¤­à¤¿à¤¨à¥\8dनहरु सामग्री नदेखाउने",
+       "tog-showhiddencats": "लà¥\81à¤\95ाà¤\87à¤\8fà¤\95à¥\8b à¤¶à¥\8dरà¥\87णà¥\80हरु देखाउने",
+       "tog-norollbackdiff": "पूर्वस्थितिमा फर्काएपछि भिन्नता हटाउने",
        "tog-useeditwarning": "सम्पादनहरू सङ्ग्रह गरिनसकेको अवस्थामा अर्को पृष्ठमा जान खोज्दा चेतावनी देखाउने",
        "tog-prefershttps": "प्रवेश गर्दा जहिले पनि सुरक्षित जडान प्रयोग गर्ने",
        "underline-always": "सधैँ",
        "underline-never": "कहिल्यै",
-       "underline-default": "सà¥\8dà¤\95à¥\80न अथवा ब्राउजर पूर्वस्थिति",
+       "underline-default": "à¤\96à¥\8bल अथवा ब्राउजर पूर्वस्थिति",
        "editfont-style": "फन्ट प्रकार क्षेत्र सम्पादन गर्नुहोस् :",
        "editfont-default": "ब्राउजर पूर्वस्थिति",
        "editfont-monospace": "मोनोस्पेस्ड फन्ट",
        "category-file-count-limited": "निम्न  {{PLURAL:$1|फाइल|$1 फाइलहरु}} यस श्रेणीमा रहेको ।",
        "listingcontinuesabbrev": "निरन्तरता...",
        "index-category": "क्रमाङ्कित पृष्ठहरू",
-       "noindex-category": "à¤\95à¥\8dरमाà¤\82कन नगरिएका पृष्ठहरू",
-       "broken-file-category": "à¤\9fà¥\81à¤\9fà¥\87à¤\95à¥\8b à¤«à¤¾à¤\87ल à¤²à¤¿à¤\82à¤\95सितको पृष्ठ",
+       "noindex-category": "à¤\95à¥\8dरमाà¤\99à¥\8dकन नगरिएका पृष्ठहरू",
+       "broken-file-category": "à¤\9fà¥\81à¤\9fà¥\87à¤\95à¥\8b à¤«à¤¾à¤\87ल à¤²à¤¿à¤\99à¥\8dà¤\95हरà¥\82सितको पृष्ठ",
        "about": "बारेमा",
        "article": "सामाग्री पृष्ठ",
        "newwindow": "(नयाँ विन्डोमा खुल्छ)",
        "cancel": "रद्द",
        "moredotdotdot": "थप...",
-       "morenotlisted": "यो सूची पूर्ण हैन ।",
+       "morenotlisted": "यो सूची पूर्ण हैन।",
        "mypage": "पृष्ठ",
        "mytalk": "वार्ता",
        "anontalk": "यस IP को वारेमा वार्तालाप गर्नुहोस्",
        "qbpageoptions": "यो पेज",
        "qbmyoptions": "मेरो पेज",
        "faq": "धैरै सोधिएका प्रश्नहरु",
-       "faqpage": "Project:FAQ",
+       "faqpage": "Project:धैरै सोधिएका प्रश्नहरु",
        "actions": "कार्यहरु",
        "namespaces": "नेमस्पेस",
        "variants": "बहुरुपहरु",
        "view-pool-error": "माफ गर्नुहोस् , यस समयमा सर्भरहरुमा कार्यभार उच्च रहेको छ।\nअति धेरै प्रयोगकर्ताहरु यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो पृष्ठ पुन: हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।\n\n$1",
        "generic-pool-error": "माफ गर्नुहोस् , यस समयमा सर्भरहरुमा कार्यभार उच्च रहेको छ।\nअति धेरै प्रयोगकर्ताहरु यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो सामग्री  हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।",
        "pool-timeout": "समय सकियो बन्द गर्ने प्रतीक्षामा",
-       "pool-queuefull": "पà¥\8dरतà¥\80à¤\95à¥\8dषा à¤ªà¤\82क्ति भरियो",
+       "pool-queuefull": "पà¥\8dरतà¥\80à¤\95à¥\8dषा à¤ªà¤\99à¥\8dक्ति भरियो",
        "pool-errorunknown": "अज्ञात त्रुटि",
        "aboutsite": "{{SITENAME}}को बारेमा",
        "aboutpage": "Project:बारेमा",
        "changeemail-oldemail": "हालको इमेल-ठेगाना:",
        "changeemail-newemail": "नयाँ इमेल-ठेगाना:",
        "changeemail-none": "(कुनै पनि हैन)",
+       "changeemail-password": "तपाईंको {{SITENAME}} पासवर्ड:",
        "changeemail-submit": "इमेल परिवर्तन गर्ने",
+       "changeemail-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेशको निम्ति प्रयास गर्नुभएको छ।\nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
        "resettokens": "टोकन पूर्वरुपमा फर्काउने",
        "resettokens-no-tokens": "पूर्वरुपमा फर्काउन कुनै पनि टोकन छैन ।",
        "resettokens-legend": "टोकनहरू पूर्वरुपमा फर्काउने",
        "updated": "नवीन",
        "note": "'''सूचना:'''",
        "previewnote": "'''याद राख्नुहोस् यो केवल पूर्वावलोकन मात्र हो; तपाईंका परिवर्तनहरू संग्रहित भएका छैनन्!'''",
+       "continue-editing": "सम्पादन क्षेत्रमा जानुहोस",
        "previewconflict": "यस पूर्वावलोकनले संपादन क्षेत्र को माथिल्लो भागको पाठ परिवर्तन गर्ने ठाउँको पाठलाइ देखाउँछ अनि तपाइले यसलाइ सेभ गरेपछि देखापर्छ।",
        "session_fail_preview": "'''माफ गर्नुहोस्! सत्र-आँकड़ा (session data) हराउनाले हामीले तपाईंको सम्पादन प्रक्रिया अघि बढाउन सकेनौं।.'''\nकृपया पुनः प्रयास गर्नुहोस्।\nयदि फेरि पनि काम भएन भनें, [[Special:UserLogout|बाहिर गई(लग आउट गरी)]]  फेरि प्रवेश गर्नुहोस्।",
        "session_fail_preview_html": "'''माफ गर्नुहोला! सत्र को डेटा को नोकसान को कारण ले गर्दा तपाइको सम्पादन लाइ जारी राख्न सकिएन।'''\n\n''जावास्क्रिप्ट हमलाहरु रोक्नको लागि यो पूर्वावलोकन लाइ देखाइएको छैन किन कि {{SITENAME}} मा काँचो HTML को प्रयोग गर्न मिल्ने बनाइएको छ।''\n\n'''यदि यो एक वैध प्रयास हो भने, कृपया पुन: प्रयास गर्नुहोला.'''\nयदि अझै पनि काम गरेन भने [[Special:UserLogout|निर्गमन(logging out)]] र पुन:आगमन(login) गर्ने प्रयास गर्नुहोला।",
        "revertmerge": "नमिलाउने",
        "mergelogpagetext": "एउटा पृष्ठको इतिहास अर्कोमा भर्खरै मिलाइएको सूची तल दिइन्छ।",
        "history-title": "\"$1\" को पुनरावृत्ति इतिहास",
+       "difference-title": "\"$1\" को बिचमा भिन्नता",
+       "difference-title-multipage": "\"$1\" तथा \"$2\" को बिचमा भिन्नता",
        "difference-multipage": "(पृष्ठहरूमा भिन्नता)",
        "lineno": "पंक्ति $1:",
        "compareselectedversions": "छानिएका संस्करणहरू दाँज्नुहोस्",
        "notextmatches": "अक्षरस् पेज भेटिएन",
        "prevn": "पहिलेको {{PLURAL:$1|$1}}",
        "nextn": "अर्को {{PLURAL:$1|$1}}",
+       "prev-page": "अघिल्लो पृष्ठ",
+       "next-page": "अर्को पृष्ठ",
        "prevn-title": "पहिलेको  $1 {{PLURAL:$1|नतिजा|नतिजाहरु}}",
        "nextn-title": "यस पछिको $1 {{PLURAL:$1|नतिजा |नतिजाहरु}}",
        "shown-title": "देखाउने $1 {{PLURAL:$1|नतिजा|नतिजाहरु}} प्रति पृष्ठ",
        "viewprevnext": "हेर्नुहोस् ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "''' \"[[:$1]]\" नाम गरेको पृष्ठ  यो विकीमा रहेको छ'''",
-       "searchmenu-new": "'''यस विकिमा  \"[[:$1]]\" शीर्षक भएको पृष्ठ बनाउनुहोस् !'''",
+       "searchmenu-new": "<strong>\"[[:$1]]\" पृष्ठ यस विकिमा बनाउनुहोस्!</strong> {{PLURAL:$2|0=|तपाईंले खोज गरी भटिएको पृष्ठ पनि मिलान गर्नुहोस्।|तपाईंको खोज परिणाम पनि हेर्नुहोस।}}",
        "searchprofile-articles": "सामग्री पृष्ठहरू",
        "searchprofile-images": "मल्टिमिडिया(श्रव्य दृश्य)",
        "searchprofile-everything": "सब थोक",
        "userrights-no-interwiki": "तपाईंलाई अन्य विकिमा प्रयोगकर्ता अधिकार सम्पादन गर्ने अनुमति छैन।",
        "userrights-nodatabase": "डेटाबेस $1 उपलब्ध छैन या स्थानीय हैन।",
        "userrights-nologin": "प्रयोगकर्ता अधिकार प्रदान गर्न तपाईंले प्रबन्धक खाताबाट [[Special:UserLogin|प्रवेश]] गर्नुपर्छ।",
-       "userrights-notallowed": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dतालाà¤\88 à¤\85धिà¤\95ार à¤ªà¥\8dरदान à¤\97रà¥\8dनà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82लाà¤\88 à¤\85नà¥\81मति छैन।",
+       "userrights-notallowed": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dतालाà¤\88 à¤\85धिà¤\95ार à¤ªà¥\8dरदान à¤\97रà¥\8dनà¥\87 à¤µà¤¾ à¤¹à¤\9fाà¤\89नà¥\87 à¤\85नà¥\81मति à¤¤à¤ªà¤¾à¤\88à¤\82लाà¤\88 छैन।",
        "userrights-changeable-col": "परिवर्तन गर्न सकिने समूहहरु",
        "userrights-unchangeable-col": "तपाईले परिवर्तन गर्न सक्नुनहुने समूहहरु",
        "userrights-irreversible-marker": "$1*",
        "right-move": "पृष्ठहरू सार्ने",
        "right-move-subpages": "तिनीहरुको सह-पृष्ठसहित पृष्ठहरु सार्ने",
        "right-move-rootuserpages": "मूल(root) प्रयोगकर्ताको पृष्ठहरु सार्ने",
+       "right-move-categorypages": "श्रेणी पृष्ठ सार्नुहोस",
        "right-movefile": "फाइलहरु सार्ने",
        "right-suppressredirect": "पृष्ठ सार्दा स्रोत पृष्ठबाट पठाउने लिंक नबनाउने",
        "right-upload": "फाइलहरु उर्ध्वभरण गर्ने",
        "right-reupload-shared": "साझा मिडिया भण्डारमा स्थानियरुपमा फाइलहरु अधिक्रमण गर्ने",
        "right-upload_by_url": "URL बाट फाइल उर्ध्वभरण गर्ने",
        "right-purge": "साइटको क्याश( cache) निश्चित नगरिकनै पर्ज(Purge) गर्ने",
-       "right-autoconfirmed": "à¤\85रà¥\8dध-सà¥\81रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\81 à¤¸à¤®à¥\8dपादन à¤\97र्ने",
+       "right-autoconfirmed": "à¤\86à¤\87पà¥\80 à¤¦à¤° à¤¸à¥\80मालà¥\87 à¤\85सर à¤¨à¤ªà¤¾र्ने",
        "right-bot": "स्वाचालित कार्यको रुपमा व्यवहार गर्ने",
        "right-apihighlimits": "API खोजको लागि उच्च सीमा प्रयोग गर्नुहोस्",
        "right-writeapi": "लेखन API प्रयोग गर्ने",
        "uploaderror": "उर्ध्वभरण त्रुटि",
        "upload-recreate-warning": "'''चेतावनी: त्यस नाममा रहेका फाइलहरु सारिएको या हटाइएको छ।'''\n\nयस पृष्ठको सारिएको र हटाइएको लग तपाईको सहजताको लागि दिइएको छ।",
        "uploadtext": "फाइल अपलोड गर्न निम्न फारम प्रयोग गर्नुहोस्।\nहेर्नुहोस्- पहिला अपलोड गरिएका [[Special:FileList|फाइलहरूको सूची]] , पुनः अपलोड गरिएका [[Special:Log/upload|अपलोड लग]]मा, मेटिएका फाइलहरू [[Special:Log/delete|मेटिएको लग]]मा।\n\nपृष्ठमा फाइल संलग्न गर्न तल दिएका फारमहरूमध्ये एउटामा लिङ्क गराउनुहोस्:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''पूर्ण आकारको फाइल प्रयोग गर्न\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' 200 पिक्सलको देब्रेपट्टि मार्जिन गरेर फाइलको बर्णनसहित प्रयोग गर्न\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' फाइल नदेखाई सिंधै फाइलसित लिङ्क गरी प्रयोग गर्न",
-       "upload-permitted": "à¤\85नà¥\81मति à¤ªà¤¾à¤\8fà¤\95ा à¤«à¤¼à¤¾à¤\87ल à¤ªà¥\8dरà¤\95ार:$1.",
-       "upload-preferred": "à¤\9aाहिà¤\8fà¤\95ा à¤«à¤¼à¤¾à¤\87ल à¤ªà¥\8dरà¤\95ार:$1.",
-       "upload-prohibited": "निषिदà¥\8dध à¤«à¤¼à¤¾à¤\87ल à¤ªà¥\8dरà¤\95ार:$1.",
+       "upload-permitted": "à¤\85नà¥\81मति à¤ªà¤¾à¤\8fà¤\95ा à¤«à¤¾à¤\87ल {{PLURAL:$2|पà¥\8dरà¤\95ार|पà¥\8dरà¤\95ारहरà¥\82}}:$1।",
+       "upload-preferred": "à¤\9aाहिà¤\8fà¤\95ा à¤ªà¤¾à¤\8fà¤\95ा à¤«à¤¾à¤\87ल {{PLURAL:$2|पà¥\8dरà¤\95ार|पà¥\8dरà¤\95ारहरà¥\82}}:$1।",
+       "upload-prohibited": "निषà¥\87धित à¤ªà¤¾à¤\8fà¤\95ा à¤«à¤¾à¤\87ल {{PLURAL:$2|पà¥\8dरà¤\95ार|पà¥\8dरà¤\95ारहरà¥\82}}:$1।",
        "uploadlogpage": "उर्ध्वभरण लग",
        "uploadlogpagetext": "भर्खरै उर्ध्वभरण गरिएका फ़ाइलहरुको सूची तल दिइएकोछ ।\nविस्तृत अवलोकनको लागि [[Special:NewFiles|नयाँ फ़ाइलको ग्यालरी]]मा हेर्नुहोस्।",
        "filename": "फाइलनाम",
        "license-header": "अनुज्ञा प्राप्त गर्दै",
        "nolicense": "केहिपनि छानिएन",
        "license-nopreview": "(पूर्वरुप उपलब्ध छैन)",
-       "upload_source_file": " (तपाईँको कम्प्युटरमा रहेको एक फाइल)",
+       "upload_source_file": "(तपाईँले आफ्नो कम्प्युटरबाट छानेको फाइल)",
+       "listfiles-delete": "मेट्ने",
+       "listfiles-summary": "यस विशेष पृष्ठले उर्ध्वभरण गरिका सबै फाइलहरु देखाउँछ।",
        "listfiles_search_for": "मिडिया नामको लागि खोज्नुहोस:",
        "imgfile": "फाइल",
        "listfiles": "फाइल सूची",
        "filehist-current": "हालको",
        "filehist-datetime": "मिति/समय",
        "filehist-thumb": "थम्बनेल",
-       "filehist-thumbtext": "थम्बनेल $1 सस्करणको रुपमा",
+       "filehist-thumbtext": "थमà¥\8dबनà¥\87ल $1 à¤¸à¤\82सà¥\8dà¤\95रणà¤\95à¥\8b à¤°à¥\81पमा",
        "filehist-nothumb": "थम्बनेल नभएको",
        "filehist-user": "प्रयोगकर्ता",
        "filehist-dimensions": "आकारहरू",
        "unusedtemplateswlh": "अन्य कड़ीहरु",
        "randompage": "कुनै एक लेख",
        "randompage-nopages": "{{PLURAL:$2| $1 नाम भएको कुनै पृष्ट छैन|$1 नाम भएका कुनै पृष्टहरु छैनन्}}",
+       "randomincategory-category": "श्रेणी:",
        "randomredirect": "कुनै एउटा अनुप्रेषितमा जाने",
        "randomredirect-nopages": "\"$1\" नामस्थानमा अनुप्रेषित छैन।",
        "statistics": "तथ्यांक",
        "wantedtemplates": "माग भएका टेम्प्लेटहरु",
        "mostlinked": "सबैभन्दा बढि लिंक भएको पृष्ठ",
        "mostlinkedcategories": "सबैभन्दा बढी लिंक भएका श्रेणीहरू",
-       "mostlinkedtemplates": "ढाà¤\81à¤\9aाहरà¥\81सित à¤¸à¤¬à¥\88भनà¥\8dदा à¤¬à¤¢à¤¿ à¤²à¤¿à¤\82à¤\95 à¤­à¤\8fà¤\95à¥\8b",
+       "mostlinkedtemplates": "सबà¥\88भनà¥\8dदा à¤¬à¤¢à¤¿ à¤\9fà¥\8dरानà¥\8dसà¤\95à¥\8dलà¥\8dयà¥\81डà¥\87ड à¤ªà¥\83षà¥\8dठहरà¥\82",
        "mostcategories": "सबैभन्दा धेरै श्रेणीहरू भएका लेखहरू",
        "mostimages": "सबैभन्दा बढि लिंक भएको चित्र",
+       "mostinterwikis": "सबैभन्दा धेरै इन्टरविकि भएका पृष्ठहरू",
        "mostrevisions": "सबैभन्दा बढी संशोधित लेखहरू",
        "prefixindex": "प्रिफिक्स सहितका पृष्ठहरु",
        "shortpages": "छोटा पृष्ठहरू",
        "protect-locked-access": "तपाईँको खातालाई पृष्ठको सुरक्षा स्तरहरू परिवर्तन गर्ने अनुमति छैन ।\n'''$1''पृष्ठको हालको स्थिति  निम्न छ :",
        "protect-cascadeon": "हालमा यो पृष्ठ सुरक्षित गरिएकोछ किन कि यसमा निम्न {{PLURAL:$1|पृष्ठ, जसको|पृष्ठहरु, जसको}} सुरक्षामा व्यापकता  कायम गरिएकोछ। \nतपाईंले पृष्ठको सुरक्षा स्तर परिवर्तन गर्न सक्नुहुनेछ तर यसले व्यापक सुरक्षालाई केहि असर पार्नेछैन।",
        "protect-default": "सबै प्रयोगकर्ताहरुलाई अनुमति दिने",
-       "protect-fallback": "\"$1\" à¤\85नà¥\81मति à¤\9aाहिनà¥\8dà¤\9b",
-       "protect-level-autoconfirmed": "नयाà¤\81 à¤¤à¤¥à¤¾ à¤¦à¤°à¥\8dता à¤¨à¤­à¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाà¤\88 à¤¨à¤¿à¤·à¥\87ध à¤\97रà¥\8dने",
-       "protect-level-sysop": "प्रबन्धकहरु मात्र",
+       "protect-fallback": "\"$1\" à¤µà¤°à¥\8dà¤\97मा à¤­à¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लाà¤\88 à¤\85नà¥\81मति à¤¦à¤¿à¤¨à¥\87",
+       "protect-level-autoconfirmed": "नयाà¤\81 à¤¤à¤¥à¤¾ à¤¦à¤°à¥\8dता à¤­à¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाà¤\88 à¤\85नà¥\81मति à¤¦à¤¿ने",
+       "protect-level-sysop": "प्रबन्धकहरुलाई मात्र अनुमति दिने",
        "protect-summary-cascade": "लाममा राख्ने",
        "protect-expiring": "$1 (UTC) मा सकिने छ ।",
        "protect-expiring-local": "समाप्ति समय $1",
        "nolinkshere-ns": "चुनिएको नामस्थानमा '''[[:$1]]''' सित जोड़िने पृष्ठहरु छैनन्।",
        "isredirect": "अनुप्रेषित पृष्ठ",
        "istemplate": "पारदर्शिता",
-       "isimage": "फाà¤\87ल à¤²à¤¿à¤\82क",
+       "isimage": "फाà¤\87ल à¤²à¤¿à¤\99à¥\8dक",
        "whatlinkshere-prev": "{{PLURAL:$1|पहिलो|पहिलो $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|अर्को|अर्को $1}}",
        "whatlinkshere-links": "← लिंकहरु",
        "autoblockid": "अटोब्लक #$1",
        "block": "प्रयोगकर्तालाई रोकलगाउने",
        "unblock": "प्रयोगकर्ता माथिको प्रतिबन्ध हटाउने",
-       "blockip": "प्रयोगकर्तालाइ निषेध गर्ने",
+       "blockip": "{{GENDER:$1|प्रयोगकर्ता}}लाई निषेध गर्ने",
        "blockip-legend": "प्रयोगकर्ता रोक्नुहोस",
        "blockiptext": "विशेष IP ठेगाना अथवा प्रयोगकर्तालाई रोक लगाउन निम्न प्रपत्र (form) प्रयोग गर्नुहोस्।\nयसो गर्नुको कारण [[{{MediaWiki:Policy-url}}|नीति]] अनुरुप विकिमा गरिने बर्बरताका कार्य रोक्नु मात्र हो।\nविशेष कारण देखाउँदै तलको प्रपत्र भर्नुहोस्  (उदाहरण, बर्बरताको कार्य गरिएको पृष्ठ दर्शाउँदै)",
-       "ipaddressorusername": " ip ठेगाना या प्रयोगकर्ता नाम :",
-       "ipbexpiry": "समापà¥\8dति:",
+       "ipaddressorusername": "आइपी ठेगाना वा प्रयोगकर्ता नाम :",
+       "ipbexpiry": "सà¤\95िनà¥\87:",
        "ipbreason": "कारण:",
        "ipbreason-dropdown": "*रोक लगाउनुका समान्य कारणहरु\n** झूटो सूचना दिइएको\n** पृष्ठहरुबाट सामाग्रीहरु हटाइएको\n** बाहिरी जालक्षेत्र (sites)सित नचाहिंदो लिङ्क गराइएको \n** पृष्ठहरुमा बकवास/गाली-गलौच हालिएको\n** भय फैलाउने व्यवहार/उत्पीडन (सताउने कार्य)\n** धेरै गलत खाताहरु\n** प्रयोगकर्ता नाम अस्वीकार्य",
        "ipb-hardblock": "यस आई पी ठेगानाबाट प्रवेश गरेका प्रयोगकर्तालाई संपादन गर्न नदिने",
        "ipb-confirm": "रोक सुनिश्चित गर्ने",
        "badipaddress": "अमान्य IP ठेगाना",
        "blockipsuccesssub": "निषेधकार्य सफल भयो",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] निषेधगरिएको छ।<br />\nपुनरावलकोनको लागि [[Special:BlockList|आइ पी निषेध सूची]] हेर्नहोस् ।",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] निषेध गरिएको छ।<br />\nपुनरावलकोनको लागि [[Special:BlockList|आइपी निषेध सूची]] हेर्नहोस्।",
        "ipb-blockingself": "तपाईंले आफैंलाई रोक लगाउन गइरहनु भएको छ! के तपाईं पक्का यसो गर्न चाहनुहुन्छ?",
        "ipb-confirmhideuser": "तपाईंले त्यस्तो प्रयोगकर्तालाई रोक लगाउन गइरहनु भएको छ जसको  \"प्रयोगकर्ता लुकाउने\" सक्रिय बनाइएको छ। यसो गर्दा सबै लग सूचीहरुबाट प्रयोगकर्ताको नाम गायब हुनेछ। के तपाईं पक्का यसो गर्न चाहनुहुन्छ?",
        "ipb-edit-dropdown": "निषेध कारण सम्पादन गर्नुहोस्",
        "ipb-unblock-addr": "$1 निषेध खारेज गर्ने",
        "ipb-unblock": "प्रयोगकर्ता वा IP माथिको निषेध खारेज गर्ने",
        "ipb-blocklist": "हाल रहेका निषेधहरु हेर्नुहोस्",
-       "ipb-blocklist-contribs": "$1 को लागि योगदान",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}}को लागि योगदान",
        "unblockip": "प्रयोगकर्ताको निषेध खारेज गर्नुहोस्",
        "unblockiptext": "IP ठेगाना अथवा प्रयोगकर्तामाथि पहिले लगाइएको रोक फुकुवा गर्न तलको प्रपत्र प्रयोग गर्नुहोस्।",
        "ipusubmit": "यो रोक हटाउने",
        "change-blocklink": "रोकमा परिवर्तन गर्ने",
        "contribslink": "योगदानहरू",
        "emaillink": "इमेल पठाउने",
-       "autoblocker": "तपाईंको आई पी ठेगाना  \"[[User:$1|$1]]\" द्वारा  भर्खरै प्रयोग गरिएकोले स्वत: बन्देज गरिएको।\n$1को बन्देजको कारण : \"$2\" हो",
+       "autoblocker": "तपाईंको आईपी ठेगाना \"[[User:$1|$1]]\" द्वारा भर्खरै प्रयोग गरिएकोले स्वत: बन्देज गरिएको हो।\n$1को बन्देजको कारण \"$2\" हो",
        "blocklogpage": "निषेध लग",
        "blocklog-showlog": "यो प्रयोगकर्तालाई पहिला रोक लगाइएको थियो।\nरोकावट लग सन्दर्भको निम्ति तल दिइन्छ:",
        "blocklog-showsuppresslog": "यो प्रयोगकर्तालाई पहिला रोक लगाइएको र लुकेको थियो ।\nलु्काइएको लग सन्दर्भको निम्ति तल दिइन्छ:",
        "movepagebtn": "पृष्ठ सार्नुहोस्",
        "pagemovedsub": "सार्ने काम सफल भयो",
        "movepage-moved": "'''\"$1\" लाई \"$2\"मा सारिएको छ'''",
-       "movepage-moved-redirect": "रिडाà¤\87रà¥\87à¤\95à¥\8dà¤\9f à¤ªà¥\83षà¥\8dठ à¤¸à¥\83à¤\9cना à¤\97रियà¥\8b",
+       "movepage-moved-redirect": "à¤\85नà¥\81पà¥\8dरà¥\87षित à¤ªà¥\83षà¥\8dठ à¤¸à¥\83à¤\9cना à¤\97रियà¥\8b।",
        "movepage-moved-noredirect": "रिडाइरेक्ट पृष",
        "articleexists": "यस नामको पृष्ठ पहिले देखि नै रहेको ,या तपाईँले छान्नु भएको नाम अमान्य छ।\nकृपया अर्कै नाम छान्नुहोस् ।",
        "cantmove-titleprotected": "तपाईले यो स्थानमा पृष्ठ सार्न सक्नुहुन्न, किनकी यो नयाँ शिर्षकलाई सिर्जना हुनबाट जोगाइएको छ",
        "selfmove": "स्रोत तथा लक्ष्य गरिएको फाइलको शीर्षक एउटै छ;\nयसैमाथि पृष्ठ सार्न सकिंदैन।",
        "immobile-source-namespace": "यो $1 नामस्थानमा पृष्टहरु सार्न सकिंदैन",
        "immobile-target-namespace": "यो $1 नामस्थानभित्र पृष्टहरु सार्न सकिंदैन",
-       "immobile-target-namespace-iw": "à¤\85नà¥\8dतरविà¤\95à¥\80 à¤²à¤¿à¤¨à¤\99à¥\8dà¤\95 à¤ªà¥\83षà¥\8dठ à¤¸à¤¾à¤°à¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤®à¤¾à¤¨à¥\8dय à¤\97नà¥\8dतवà¥\8dय à¤¹à¥\81नसà¤\95à¥\8dदà¥\88न ।",
-       "immobile-source-page": "यà¥\8b à¤ªà¥\83षà¥\8dà¤\9f सार्न योग्यको छैन।",
-       "immobile-target-page": "त्यस गन्तव्य शिर्षकमा सार्न सकिन्न ।",
-       "imagenocrossnamespace": "फाइललाई बिना-फाइल नेमस्पेसमा सार्न सकिंदैन",
-       "nonfile-cannot-move-to-file": "à¤\85-फà¤\87ललाà¤\88   à¤«à¤¾à¤\87ल à¤¨à¥\87मसà¥\8dपà¥\87समा à¤¸à¤¾à¤°à¥\8dन à¤¸à¤\95िनà¥\8dन",
-       "imagetypemismatch": "नयाँ फाइल एक्सटेन्सन फाइलको प्रकारसँग मेल खादैन",
-       "imageinvalidfilename": "गन्तव्य फाइल नाम अमान्य छ",
-       "move-leave-redirect": "à¤\85नà¥\81पà¥\8dरà¥\87षण (redirect) छोडिराख्ने",
+       "immobile-target-namespace-iw": "à¤\85नà¥\8dतरविà¤\95à¥\80 à¤²à¤¿à¤\99à¥\8dà¤\95 à¤ªà¥\83षà¥\8dठ à¤¸à¤¾à¤°à¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤®à¤¾à¤¨à¥\8dय à¤\97नà¥\8dतवà¥\8dय à¤¹à¥\81नसà¤\95à¥\8dदà¥\88न।",
+       "immobile-source-page": "यà¥\8b à¤ªà¥\83षà¥\8dठ सार्न योग्यको छैन।",
+       "immobile-target-page": "त्यस गन्तव्य शिर्षकमा सार्न सकिन्न।",
+       "imagenocrossnamespace": "फाइललाई बिना-फाइल नेमस्पेसमा सार्न सकिंदैन",
+       "nonfile-cannot-move-to-file": "à¤\97à¥\88हà¥\8dर à¤«à¤¾à¤\87ललाà¤\88 à¤«à¤¾à¤\87ल à¤¨à¥\87मसà¥\8dपà¥\87समा à¤¸à¤¾à¤°à¥\8dन à¤¸à¤\95िनà¥\8dन।",
+       "imagetypemismatch": "नयाँ फाइल एक्सटेन्सन फाइलको प्रकारसँग मेल खादैन",
+       "imageinvalidfilename": "गन्तव्य फाइल नाम अमान्य छ",
+       "move-leave-redirect": "पà¤\9bाडà¥\80 à¤\8fà¤\95 à¤\85नà¥\81पà¥\8dरà¥\87षण छोडिराख्ने",
        "export": "पृष्ठहरू निर्यात गर्ने",
        "exportall": "सबै पृष्ठहरू निर्यात गर्ने",
        "exportcuronly": "हालको संस्करण मात्र थप्ने ,पूरा इतिहास हैन",
        "export-addcat": "थप्ने",
        "export-addnstext": "नेमस्पेसबाट पृष्ठ थप्ने :",
        "export-addns": "थप्ने",
-       "export-download": "सà¤\82ग्रह गर्ने",
+       "export-download": "सà¤\99à¥\8dग्रह गर्ने",
        "export-templates": "ढाँचाहरु संलग्न गर्नुहोस्",
        "allmessages": "सिस्टम सन्देशहरू",
        "allmessagesname": "नाम",
        "thumbnail_image-type": "चित्रको प्रकार समर्थित छैन",
        "thumbnail_image-missing": "फाइल हराएको भान भइरहेछ: $1",
        "import": "पृष्ठहरू आयात गर्नुहोस्",
-       "importinterwiki": "Transwiki आयात",
+       "importinterwiki": "अन्य विकिबाट आयात गर्ने",
        "import-interwiki-history": "यो पृष्ठकोलागि सबै इतिहास संशोधनहरु प्रतिलिपि गर्ने",
        "import-interwiki-templates": "सबै टेम्प्लेटहरु(नमुना) समेट्ने",
        "import-interwiki-submit": "आयात",
        "import-token-mismatch": "सत्र जानकारी नष्ट भयो\nकृपया पुन: प्रयास गर्नुहोस्।",
        "import-invalid-interwiki": "खुलाइएको विकिबाट आयात गर्न सकिएन",
        "importlogpage": "आयात सूची",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरु}}",
-       "import-logentry-interwiki-detail": "$2 देखि $1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरु}} आयात भयो",
+       "import-logentry-interwiki-detail": "$2 देखि $1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}} आयात भयो",
        "tooltip-pt-userpage": "तपाईको प्रयोगकर्ता पृष्ठ",
        "tooltip-pt-anonuserpage": "तपाईले जुन IP ठेगानाको रुपमा सम्पादन गर्दै हुनुहुन्छ , त्यसको प्रयोगकर्ता पृष्ठ निम्न छ :",
        "tooltip-pt-mytalk": "तपाईको वार्ता पृष्ठ",
        "duplicate-defaultsort": "'''चेतावनी:''' पूर्व निर्धारित छोटकरी \"$2\" ले पुरानो पूर्वनिर्धारित छोटकरी\"$1\"लाई विस्थापन गरेको छ ।",
        "version": "संस्करण",
        "version-extensions": "स्थापना गरिएका एक्सटेन्सनहरु",
-       "version-skins": "à¤\96à¥\8bलहरà¥\81",
+       "version-skins": "सà¥\8dथापित à¤\96à¥\8bलहरà¥\82",
        "version-specialpages": "विशेष पृष्ठहरू",
        "version-parserhooks": "पार्सर हुकहरु",
        "version-variables": "चल राशी(variables)",
        "version-hook-subscribedby": "ग्राह्यता गर्ने",
        "version-version": "($1)",
        "version-svn-revision": "(r$2)",
-       "version-license": "इजाजतपत्र",
+       "version-license": "मिडà¥\80याविà¤\95ि à¤\87à¤\9cाà¤\9cतपतà¥\8dर",
        "version-poweredby-credits": "यो विकी '''[https://www.mediawiki.org/ मिडियाविकि]''' द्वारा सशक्तिकरण गरिएको छ, copyright © सन् २००१-$1 $2.",
        "version-poweredby-others": "अन्य",
        "version-software": "स्थापना गरिएको सफ्टवेयर",
        "fileduplicatesearch-result-n": "फाइल\"$1\" को {{PLURAL:$2|1 दुरुस्त नक्कल|$2 दुरुस्त नक्कलहरु}} छन् ।",
        "fileduplicatesearch-noresults": "\"$1\" नामको फाइल पाइएन।",
        "specialpages": "विशेष पृष्ठ",
-       "specialpages-note": "* साधारण विशेष पृष्ठहरु।\n* <span class=\"mw-specialpagerestricted\">निषेधित विशेष पृष्ठहरु।</span>\n* <span class=\"mw-specialpagecached\">क्याश गरिएका विशेष पृष्ठहरु (अध्यावधिक नहुन सक्छ)।</span>",
+       "specialpages-note": "* साधारण विशेष पृष्ठहरु।\n* <span class=\"mw-specialpagerestricted\">निषेधित विशेष पृष्ठहरु।</span>",
        "specialpages-group-maintenance": "मर्मत प्रतिवेदनहरु",
        "specialpages-group-other": "अरू विशेष पृष्ठहरू",
-       "specialpages-group-login": "प्रवेशगर्नुहोस/खाता शृजना गर्नुहोस",
+       "specialpages-group-login": "प्रवेश गर्ने / नयाँ खाता बनाउने",
        "specialpages-group-changes": "भर्खरैका परिवर्तन र लगहरु",
        "specialpages-group-media": "मेडिया प्रतिवेदन र उर्ध्वभरणहरु",
        "specialpages-group-users": "प्रयोगकर्ता र अधिकारहरु",
        "specialpages-group-highuse": "उच्च प्रयोग भएका पृष्ठहरू",
        "specialpages-group-pages": "पृष्ठहरूको सूची:",
        "specialpages-group-pagetools": "पृष्ठ उपकरणहरू",
-       "specialpages-group-wiki": "विà¤\95ि à¤¡à¤¾टा र औजारहरु",
+       "specialpages-group-wiki": "डà¥\87टा र औजारहरु",
        "specialpages-group-redirects": "विशेष पृष्ठमा पठाउने",
        "specialpages-group-spam": "स्पाम उपकरणहरू",
+       "specialpages-group-developer": "विकासकर्ता उपकरणहरू",
        "blankpage": "खाली पृष्ठहरू",
        "intentionallyblankpage": "यो पृष्ठ जानी जानी खाली राखिएको हो ।",
        "external_image_whitelist": " #यस पंक्तिलाई जस्ताको तस्तै छोड़नुहोस्<pre>\n#नियमित अभिव्यक्तिका निम्न टुक्राहरु हाल्नुहोस् ( //को बीचका भागहरु मात्र)\n#बाहिरका यु आर एल (hotlinked) सित मिलाइनेछ।\n#जो मिलानको शर्तमा पर्छन् तिनलाई चित्रको रुपमा प्रदर्शित गरिनेछ, नत्र चित्रको लिंक मात्र दर्शाइनेछ \n# #बाट सुरु हुने पंक्तिहरुलाई टिप्पणीको रुपमा मानिनेछ\n#यो वर्ण सम्वेदनशील छ\n\n#यो पंक्तिमाथि रिजेक्स(regex) टुक्रा दिनुहोस्। यस पंक्तिलाई जस्ताको तस्तै छोड़नुहोस्</pre>",
        "tags": "मान्य ट्याग परिवर्तनहरु",
        "tag-filter": "[[Special:Tags|पुच्छर]] फिल्टर:",
        "tag-filter-submit": "फिल्टर",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
        "tags-title": "ट्यागहरु",
        "tags-intro": "यो पृष्ठले पुच्छरहरु सुचीकृत गर्छ जससँग यो सफ्टवेयरले चिनो लगाउन र सम्पादन गर्न सक्छ र तिनका अर्थहरु ।",
        "tags-tag": "आन्तरिक ट्याग नाम",
        "tags-display-header": "परिवर्तन सूचीहरुमाथि झलक",
        "tags-description-header": "पूर्ण अर्थको वर्णन",
+       "tags-source-header": "स्रोत",
+       "tags-active-header": "सक्रिय?",
        "tags-hitcount-header": "ट्याग गरिएक परिवर्तनहरू",
+       "tags-actions-header": "कार्यहरु",
        "tags-active-yes": "हो",
        "tags-active-no": "हैन",
+       "tags-source-extension": "एक्सटेन्सनद्वारा परिभाषित गर्ने",
        "tags-edit": "सम्पादन गर्नुहोस्",
+       "tags-delete": "मेट्ने",
+       "tags-activate": "सक्रिय गर्ने",
+       "tags-deactivate": "निष्क्रिय गर्ने",
        "tags-hitcount": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}",
+       "tags-manage-no-permission": "ट्याग मिलान गर्नको लागि तपाईँलाई अनुमति छैन।",
+       "tags-create-heading": "नयाँ ट्याग बनाउने",
+       "tags-create-tag-name": "ट्याग नाम:",
+       "tags-create-reason": "कारण:",
+       "tags-create-submit": "सृजना गर्ने",
+       "tags-delete-reason": "कारण:",
        "comparepages": "पृष्ठहरू दाँज्ने",
        "compare-page1": "पृष्ठ 1",
        "compare-page2": "पृष्ठ 2",
        "compare-revision-not-exists": "तपाईले खुलाउनु भएको संस्करण उपलब्ध छैन ।",
        "dberr-problems": "क्षमा पाउँ! यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।",
        "dberr-again": "केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।",
-       "dberr-info": "(डà¥\87à¤\9fाबà¥\87स à¤¸à¤°à¥\8dवर $1सित à¤¸à¤®à¥\8dपरà¥\8dà¤\95 à¤¸à¤¾à¤§à¥\8dन à¤¸à¤\95िà¤\82दà¥\88न)",
-       "dberr-info-hidden": "(डà¥\87à¤\9fावà¥\87स à¤¸à¤°à¥\8dभरमा सम्पर्क स्थापना गर्न सकिएन)",
+       "dberr-info": "(डà¥\87à¤\9fाबà¥\87स à¤¸à¤°à¥\8dभर: $1 à¤¸à¤\81à¤\97 à¤¸à¤®à¥\8dपरà¥\8dà¤\95 à¤¸à¥\8dथापित à¤\97रà¥\8dन à¤¸à¤\95िà¤\8fन)",
+       "dberr-info-hidden": "(डà¥\87à¤\9fाबà¥\87समा सम्पर्क स्थापना गर्न सकिएन)",
        "dberr-usegoogle": "तपाईले अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।",
        "dberr-outofdate": "कृपया स्मरणमा राख्नुहोस् हाम्रा लेखहरूको सूची जुन उनीहरूले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।",
        "dberr-cachederror": "यो अनुरोध गरिएको पृष्ठको क्याशमा रहेका प्रतिलिपी हो , र अद्यावधिक नहुन सक्छ ।",
        "htmlform-no": "हैन",
        "htmlform-yes": "हो",
        "htmlform-chosen-placeholder": "एक विकल्प छान्नुहोस्",
+       "htmlform-cloner-create": "अरू जोड्ने",
+       "htmlform-cloner-delete": "हटाउने",
        "sqlite-has-fts": "$1 पूरा पाठ खोज समर्थन सहित",
        "sqlite-no-fts": "$1 पूरा पाठ खोज समर्थन बिना",
-       "logentry-delete-restore": "$3 पृष्ठ $1ले पुनर्स्थापित गरेको हो",
+       "logentry-delete-restore": "$3 पृष्ठ $1ले {{GENDER:$2|पुनर्स्थापित}} गरेको हो",
        "revdelete-content-hid": "सामग्री लुकाइएको",
        "revdelete-summary-hid": "सम्पादन सारांस लुकाइएको",
        "revdelete-uname-hid": "प्रयोगकर्ताको नाम लुकाइयो",
        "revdelete-summary": "सम्पादन सारांश",
        "feedback-cancel": "रद्द गर्ने",
        "feedback-close": "गरियो",
+       "feedback-error-title": "त्रुटि",
        "feedback-error2": "त्रुटि: सम्पादन असफल",
        "feedback-message": "सन्देश:",
        "feedback-subject": "विषय:",
        "feedback-submit": "बुझाउने",
+       "feedback-thanks-title": "धन्यवाद!",
+       "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
        "searchsuggest-search": "खोज",
        "api-error-badaccess-groups": "यस विकिमा तपाईंलाई फाइल अपलोड गर्ने अनुमति छैन।",
        "api-error-copyuploaddisabled": "यस सर्वरमा URL द्वारा अपलोड गर्ने व्यवस्था निस्क्रिय गरिएकोछ।",
index 8cd9178..b0f2170 100644 (file)
        "notextmatches": "Geen pagina's gevonden",
        "prevn": "vorige {{PLURAL:$1|$1}}",
        "nextn": "volgende {{PLURAL:$1|$1}}",
+       "prev-page": "vorige pagina",
+       "next-page": "volgende pagina",
        "prevn-title": "Vorige {{PLURAL:$1|resultaat|$1 resultaten}}",
        "nextn-title": "Volgende {{PLURAL:$1|resultaat|$1 resultaten}}",
        "shown-title": "$1 {{PLURAL:$1|resultaat|resultaten}} per pagina weergeven",
        "emailccsubject": "Kopie van uw bericht aan $1: $2",
        "emailsent": "E-mail verzonden",
        "emailsenttext": "Uw e-mail is verzonden.",
-       "emailuserfooter": "Deze e-mail is verstuurd door $1 aan $2 door de functie \"Deze gebruiker e-mailen\" van {{SITENAME}}.",
+       "emailuserfooter": "Deze e-mail is verstuurd door $1 aan $2 door de functie \"{{int:emailpage}}\" van {{SITENAME}}.",
        "usermessage-summary": "Systeembericht achtergelaten",
        "usermessage-editor": "Systeembericht",
        "watchlist": "Volglijst",
        "feedback-bugornote": "Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met uw gebruikersnaam en de browser die u gebruikt.",
        "feedback-cancel": "Annuleren",
        "feedback-close": "Afgerond",
+       "feedback-error-title": "Fout",
        "feedback-error1": "Fout: onbekend resultaat uit de API",
        "feedback-error2": "Fout: de bewerking is mislukt",
        "feedback-error3": "Fout: geen reactie van de API",
index 4f1471e..01d0ed0 100644 (file)
        "filedeleteerror": "Impossible de suprimir lo fichièr « $1 ».",
        "directorycreateerror": "Impossible de crear lo dorsièr « $1 ».",
        "directoryreadonlyerror": "Lo repertòri « $1 » es en lectura sola.",
+       "directorynotreadableerror": "Lo repertòri « $1 » es pas legible.",
        "filenotfound": "Impossible de trobar lo fichièr « $1 ».",
        "unexpected": "Valor imprevista : « $1 » = « $2 ».",
        "formerror": "Error: Impossible de sometre lo formulari",
        "notextmatches": "Cap de tèxte d'article correspond pas a la recèrca",
        "prevn": "{{PLURAL:$1|precedenta|$1 precedentas}}",
        "nextn": "{{PLURAL:$1|seguenta|$1 seguentas}}",
+       "prev-page": "pagina precedenta",
+       "next-page": "pagina seguenta",
        "prevn-title": "$1 {{PLURAL:$1|resultat precedent|resultats precedents}}",
        "nextn-title": "$1 {{PLURAL:$1|resultat seguent|resultats seguents}}",
        "shown-title": "Afichar $1 {{PLURAL:$1|resultat|resultats}} per pagina",
        "prefs-personal": "Entresenhas personalas",
        "prefs-rc": "Darrièrs cambiaments",
        "prefs-watchlist": "Lista de seguiment",
+       "prefs-editwatchlist": "Modificar la lista de seguiment",
+       "prefs-editwatchlist-raw": "Modificar la lista de seguiment en mòde brut",
+       "prefs-editwatchlist-clear": "Escafar la lista de seguiment",
        "prefs-watchlist-days": "Nombre de jorns d'afichar dins la lista de seguiment :",
        "prefs-watchlist-days-max": "(maximum $1 jorn{{PLURAL:$1||s}})",
        "prefs-watchlist-edits": "Nombre de modificacions d'afichar dins la lista de seguiment espandida :",
        "tags-tag": "Nom de la balisa",
        "tags-display-header": "Aparéncia dins las listas de modificacions",
        "tags-description-header": "Descripcion completa de la balisa",
+       "tags-source-header": "Font",
        "tags-active-header": "Actiu ?",
        "tags-hitcount-header": "Modificacions balisadas",
+       "tags-actions-header": "Accions",
        "tags-active-yes": "Òc",
        "tags-active-no": "Non",
+       "tags-source-extension": "Definida per una extension",
+       "tags-source-manual": "Aplicada manualament pels utilizaires e los bòts",
+       "tags-source-none": "Obsolèt",
        "tags-edit": "modificar",
+       "tags-delete": "suprimir",
+       "tags-activate": "activar",
+       "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|cambiament|cambiaments}}",
+       "tags-create-heading": "Crear una balisa novèla",
+       "tags-create-tag-name": "Nom de la balisa :",
+       "tags-create-reason": "Rason :",
+       "tags-create-submit": "Crear",
+       "tags-delete-reason": "Motiu :",
+       "tags-activate-title": "Activar la balisa",
+       "tags-activate-reason": "Motiu :",
+       "tags-activate-submit": "Activar",
+       "tags-deactivate-title": "Desactivar la balisa",
+       "tags-deactivate-reason": "Motiu :",
+       "tags-deactivate-submit": "Desactivar",
        "comparepages": "Comparar de paginas",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "revdelete-uname-unhid": "nom d’utilizaire afichat",
        "revdelete-restricted": "aplicar las restriccions als administrators",
        "revdelete-unrestricted": "restriccions levadas pels administrators",
+       "logentry-block-unblock": "$1 {{GENDER:$2|a desblocat}} {{GENDER:$4|$3}}",
        "logentry-merge-merge": "$1 {{GENDER:$2|a fusionat}} $3 en $4 (revisions fins a $5)",
        "logentry-move-move": "$1  {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4 sens daissar cap de redireccion",
        "logentry-upload-upload": "$1 {{GENDER:$2|a mandat}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|a telecargat}} una novèla version de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|a telecargat}} $3",
+       "log-name-managetags": "Jornal de las modificacions de balisas",
+       "logentry-managetags-create": "$1 {{GENDER:$2|a creat}} la balisa « $4 ».",
        "rightsnone": "(cap)",
        "revdelete-summary": "modificar lo somari",
        "feedback-adding": "Apondon de vòstres comentaris a la pagina...",
+       "feedback-back": "Retorn",
        "feedback-bugcheck": "Remirable ! Verificatz simplament qu'es pas un dels [$1 bugs ja coneguts].",
        "feedback-bugnew": "Ai verificat. Senhalar un bug novèl",
        "feedback-cancel": "Anullar",
        "feedback-close": "Fach",
+       "feedback-external-bug-report-button": "Senhalar un bug tecnic",
+       "feedback-dialog-title": "Sometre un comentari",
+       "feedback-error-title": "Error",
        "feedback-error1": "Error : Resultat de l'IPA pas reconegut",
        "feedback-error2": "Error : la modificacion a fracassat",
        "feedback-error3": "Error : pas cap de responsa de l'API",
        "feedback-subject": "Subjècte :",
        "feedback-submit": "Mandar",
        "feedback-thanks": "Mercé ! Vòstre comentari es estat publicat sus la pagina \"[$2 $1]\".",
+       "feedback-thanks-title": "Mercés !",
+       "feedback-useragent": "Agent utilizaire :",
        "searchsuggest-search": "Recercar",
        "searchsuggest-containing": "que conten...",
        "api-error-badaccess-groups": "Sètz pas autorizat a cargar de fichièrs sus aqueste wiki.",
        "mediastatistics-header-text": "Textual",
        "mediastatistics-header-executable": "Executables",
        "mediastatistics-header-archive": "Formats compressats",
+       "json-error-state-mismatch": "JSON invalid o mal format",
        "json-error-syntax": "Error de sintaxi",
+       "headline-anchor-title": "Ligam cap a aquesta seccion",
        "special-characters-group-latin": "Latin",
        "special-characters-group-latinextended": "Latin espandit",
        "special-characters-group-ipa": "API",
index 6da17fe..8a9977f 100644 (file)
        "rev-deleted-user-contribs": "[nazwa użytkownika lub adres IP usunięte – edycja ukryta we wkładzie]",
        "rev-deleted-text-permission": "Ta wersja strony została '''usunięta'''.\nSzczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].",
        "rev-suppressed-text-permission": "Ta wersja strony została <strong>ukryta</strong>.\nSzczegóły można odnaleźć w [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejestrze ukryć].",
-       "rev-deleted-text-unhide": "Ta wersja strony została '''usunięta'''.\nSzczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].\nJeśli chcesz możesz [$1 obejrzeć tę wersję].",
+       "rev-deleted-text-unhide": "Ta wersja strony została <strong>usunięta</strong>.\nSzczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].\nJeśli chcesz, możesz [$1 obejrzeć tę wersję].",
        "rev-suppressed-text-unhide": "Ta wersja strony została '''utajniona'''.\nSzczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejestrze utajniania].\nJeśli chcesz możesz [$1 obejrzeć tę wersję].",
-       "rev-deleted-text-view": "Ta wersja strony została '''usunięta'''.\nJeśli chcesz możesz ją obejrzeć. Szczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].",
+       "rev-deleted-text-view": "Ta wersja strony została <strong>usunięta</strong>.\nJeśli chcesz, możesz ją obejrzeć. Szczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].",
        "rev-suppressed-text-view": "Ta wersja strony została '''utajniona'''.\nJeśli chcesz możesz ją obejrzeć. Szczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejestrze utajniania].",
        "rev-deleted-no-diff": "Nie możesz zobaczyć porównania wersji, ponieważ jedna z nich została '''usunięta'''.\nSzczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].",
        "rev-suppressed-no-diff": "Nie można wyświetlić różnic, ponieważ jedna z wersji została '''usunięta'''.",
        "listfiles-delete": "usuń",
        "listfiles-summary": "Na tej stronie specjalnej prezentowane są wszystkie przesłane pliki.",
        "listfiles_search_for": "Szukaj pliku o nazwie",
+       "listfiles-userdoesnotexist": "Konto użytkownika „$1” nie jest zarejestrowane.",
        "imgfile": "plik",
        "listfiles": "Lista plików",
        "listfiles_thumb": "Miniatura",
        "expand_templates_generate_xml": "Pokaż drzewo analizatora składni w formacie XML",
        "expand_templates_generate_rawhtml": "Pokaż surowy HTML",
        "expand_templates_preview": "Podgląd",
+       "expand_templates_preview_fail_html": "<em>Ponieważ {{SITENAME}} ma włączony surowy kod HTML i zaistniała strata danych z sesji, podgląd jest ukryty jako zabezpieczenie przed atakiem JavaScript.</em>\n\n<strong>Jeśli to jest próba słusznego podglądu, proszę spróbować ponownie.</strong>\nJeśli to nadal nie działa, spróbuj [[Special:UserLogout|wylogować się]] i zalogować się z powrotem.",
        "pagelanguage": "Wybór języka strony",
        "pagelang-name": "Strona",
        "pagelang-language": "Język",
index 1878fe7..04b979d 100644 (file)
        "emailccsubject": "Còpia dël mëssagi mandà a $1: $2",
        "emailsent": "Mëssagi eletrònich mandà",
        "emailsenttext": "Sò mëssagi eletrònich a l'é stàit mandà",
-       "emailuserfooter": "Ës mëssagi eletrònich a l'é stàit mandà da $1 a $2 con la fonsion «Mandé un mëssagi eletrònich a l'utent» ëd {{SITENAME}}.",
+       "emailuserfooter": "Ës mëssagi eletrònich a l'é stàit mandà da $1 a $2 con la fonsion «{{int:emailpage}}» ëd {{SITENAME}}.",
        "usermessage-summary": "A l'ha lassà un mëssagi ëd sistema.",
        "usermessage-editor": "Mëssagerìa ëd sistema",
        "watchlist": "Ròba che as ten sot-euj",
        "feedback-error1": "Eror: Arzultà ëd l'API nen arconossù",
        "feedback-error2": "Eror: Modìfica falìa",
        "feedback-error3": "Eror: gnun-e rispòste da l'API",
+       "feedback-error4": "Eror: Impossìbil publiché al tìtol ëd sugeriment dàit",
        "feedback-message": "Mëssagi:",
        "feedback-subject": "Soget:",
        "feedback-submit": "Spediss",
index 967fbd0..5bdc5af 100644 (file)
        "showhideselectedversions": "ټاکلې بڼې ښکاره کول/پټول",
        "editundo": "ناکړ",
        "diff-empty": "(بې توپيره)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Oيو وسطي ريويژن|$1 intermediate revisions}} by the يو شان کارن نه ښکاره کوي)",
        "searchresults": "د پلټنې پايلې",
        "searchresults-title": "د \"$1\" د پلټنې پايلې",
        "titlematches": "د مخ سرليک ورسره ورته دی",
        "recentchanges-legend-heading": "'''لنډونونه:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
        "rcnotefrom": "دلته لاندې د <strong>$2</strong> څخه راپدېخوا پېښ شوي بدلونونه راغلي (تر <strong>$1</strong> پورې ښکاري).",
-       "rclistfrom": "Ù\87غÙ\87 Ù\86Ù\88Ù\8a Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ú\9aکارÙ\87 Ú©Ù\88Ù\84 Ú\86Û\90 Ù\84Ù\87 $3 $2 Ù\86Ù\87 Ù¾Ù\8aÙ\84Û\90Ú\96Ù\8a",
+       "rclistfrom": "Ù\86Ù\88Ù\8a Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ú\86Û\90 Ù\84Ù\87 $3Ø\8c $2 Ú\85Ø®Ù\87 Ù¾Ù\8aÙ\84Û\90Ú\96Ù\8a Ú\9aکارÙ\87 Ú©Ù\88Ù\84",
        "rcshowhideminor": "وړې سمونې $1",
        "rcshowhideminor-show": "ښکاره کول",
        "rcshowhideminor-hide": "پټول",
        "deadendpagestext": "همدا لانديني مخونه په دغه ويکي کې د نورو مخونو سره تړنې نه لري.",
        "protectedpages": "ژغورلي مخونه",
        "protectedpages-indef": "يوازې بې پايه ژغورنې",
+       "protectedpages-summary": "په دې مخ کې هغه مخونه د لړليک په توگه راغلي چې دم مهال ژغورل شوي. د جوړولو څخه ژغورل شويو سرليکونو د يو لړليک لپاره [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] وگورئ.",
        "protectedpages-cascade": "يوازې ځوړاوبيزې ژغورنې",
        "protectedpages-timestamp": "وخت ټاپه",
        "protectedpages-page": "مخ",
        "protectedpages-unknown-timestamp": "ناجوت",
        "protectedpages-unknown-performer": "ناڅرگنده کارن",
        "protectedtitles": "ژغورلي سرليکونه",
+       "protectedtitles-summary": "په دې مخ کې هغه سرليکونه د لړليک په توگه راغلي چې دم مهال د جوړېدلو څخه ژغورل شوي. د ژغورلو مخونو د يو لړليک لپاره [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] وگورئ.",
        "listusers": "کارن لړليک",
        "listusers-editsonly": "يوازې هغه کارنان چې سمونونه يې کړي ښکاره کول",
        "listusers-creationsort": "د جوړېدو د نېټې له مخې اوډل",
        "rollbacklink": "په شابېول",
        "rollbacklinkcount": "$1 {{PLURAL:$1|سمون|سمونونه}} پرشابېول",
        "protectlogpage": "د ژغورنې يادښت",
+       "protectlogtext": "دلته لاندې د ژغورل شويو مخونو د بدلونونو لړليک راغلی.\nد دم گړۍ فعالو مخ ژغورنو لړليک لپاره د [[Special:ProtectedPages|ژغورل شويو مخونو لړليک]] وگورئ.",
        "protectedarticle": "\"[[$1]]\" وژغورل شو",
        "modifiedarticleprotection": "د \"[[$1]]\" لپاره د ژغورنې کچه بدله شوه",
        "movedarticleprotection": "د ژغورنې امستنې له \"[[$2]]\" څخه \"[[$1]]\" ته ولېږدېدې",
        "invert": "ټاکنې سرچپه کول",
        "tooltip-invert": "په ټاکلو نومتشيالونو کې (او اړونده نومتشيال کې که په نښه شوی وي) د مخونو بدلونونو د پټولو لپاره دا بکس په نښه کړئ",
        "namespace_association": "مل نومتشيال",
+       "tooltip-namespace_association": "په دې خانه کې ټيک نښان ولګوئ که غواړئ خبري اتري او نيم سپيس د ټاکلي نيم سپيس سره کړئ",
        "blanknamespace": "(آرنی)",
        "contributions": "{{GENDER:$1|کارن}} ونډې",
        "contributions-title": "د $1 کارن ونډې",
        "unblock": "کارن له بنديزه وېستل",
        "blockip": "په {{GENDER:$1|کارن}} بنديز لگول",
        "blockip-legend": "په کارن بنديز لگول",
+       "blockiptext": "د لاندينۍ فورمې په کارولو سره تاسې يو کارن او يا هم يوې ځانگړې IP پتې باندې د ليکلو بنديزونه لگولی شی.  \nدا بايد د پوهې سره دښمنۍ او ورانکارۍ د مخنيولو په تکل او د پښتو ويکيپېډيا د [[{{MediaWiki:Policy-url}}|تگلارې]] سره سم پلي شي.\nد بنديز لپاره مو يو ځانگړی دليل لاندې روښانه کړئ (د ساري په توگه، هغه مخونو ښکاره کول چې ورانکاري په کې ترسره شوې).",
        "ipaddressorusername": "IP پته يا کارن نوم",
        "ipbexpiry": "د پای نېټه:",
        "ipbreason": "سبب:",
        "pageinfo-header-restrictions": "مخ ژغورنه",
        "pageinfo-header-properties": "د مخ ځانتياوې",
        "pageinfo-display-title": "ښکارېدونکی سرليک",
+       "pageinfo-default-sort": "تلواليزه اوډن کونجۍ",
        "pageinfo-length": "مخ اوږدوالی (په بايټونو)",
        "pageinfo-article-id": "د مخ پېژند",
        "pageinfo-language": "د مخ د مېنځپانگې ژبه",
+       "pageinfo-content-model": "د مخ مېنځپانگې جوړښت",
        "pageinfo-robot-policy": "ليکلړ اوډنه د روباټونو لخوا",
        "pageinfo-robot-index": "پرېښل",
        "pageinfo-robot-noindex": "ناپرېښل",
        "pageinfo-watchers": "د مخ د کتونکو شمېر",
+       "pageinfo-few-watchers": "له $1 څخه لږ {{PLURAL:$1|کتونکی|کتونکي}}",
        "pageinfo-redirects-name": "دې مخ ته د ورگرځونو شمېر",
        "pageinfo-subpages-name": "دې مخ ته څېرمه مخونه",
        "pageinfo-firstuser": "مخ جوړونکی",
        "pageinfo-edits": "د ټولو سمونونو شمېر",
        "pageinfo-authors": "د بېلابېلو ليکوالو ټولټال شمېر",
        "pageinfo-recent-edits": "د وروستني سمونونو شمېر (په تېرو $1 کې)",
+       "pageinfo-recent-authors": "د بېلابېلو ليکوالو وروستنی شمېر",
        "pageinfo-toolboxlink": "د مخ مالومات",
        "pageinfo-redirectsto-info": "مالومات",
        "pageinfo-contentpage": "مېنځپانگيز مخ کې شمېرل شوی",
        "external_image_whitelist": " #دا کرښه چې څنگه ده، همداسې پرېږدۍ<pre>\n#لاندې د منظمو اصطلاحگانو ټوټې (يوازې هغه برخه چې د // په مېنځ کې ليکلې) ځای پر ځای کړی\n#دا به د باندنيو انځورونو د يو آر اېل (hotlinked) سره مطابقه شي \n#هغه څه چې مطابقت لري هغه به د انځورونو په توگه ښکاره شي، کوم چې مطابقت نلري نو يوازې د انځور تړنه به ښکاره کېږي\n#هغه کرښې چې په # پيل کېږي د تبصرو په توگه په نظر کې نيول کېږي\n#دا کرښې د غټو تورو او وړو تورو سره حساسې نه دي\n\n#ټولې regex ټوټې د دغې کرښې نه پورته ځای پر ځای کړی. دا کرښه چې څنگه ده، همداسې يې پرېږدۍ</pre>",
        "tag-filter": "[[Special:Tags|نښلن]] چاڼگر:",
        "tag-filter-submit": "چاڼگر",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-display-header": "د بدلون په لړليکونو کې ښکارېدنه",
        "tags-description-header": "د مانا بشپړه څرگندونه",
        "tags-source-header": "سرچينه",
index 26634b1..22f27fd 100644 (file)
@@ -79,7 +79,8 @@
                        "Webysther",
                        "Fasouzafreitas",
                        "RosaMafalda17",
-                       "Macofe"
+                       "Macofe",
+                       "TheEduGobi"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "index-category": "Páginas indexadas",
        "noindex-category": "Páginas não indexadas",
        "broken-file-category": "Páginas com links inválidos para arquivos",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Sobre",
        "article": "Página de conteúdo",
        "newwindow": "(abre em uma nova janela)",
        "versionrequired": "É necessária a versão $1 do MediaWiki",
        "versionrequiredtext": "Esta página requer a versão $1 do MediaWiki para ser utilizada.\nVeja a [[Special:Version|página sobre a versão do sistema]].",
        "ok": "OK",
+       "pagetitle": "$1 - {{SITENAME}}",
        "retrievedfrom": "Disponível em \"$1\"",
        "youhavenewmessages": "Você tem $1 ($2).",
        "youhavenewmessagesfromusers": "Você tem $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2)",
        "site-atom-feed": "Feed Atom $1",
        "page-rss-feed": "Feed RSS de \"$1\"",
        "page-atom-feed": "Feed Atom de \"$1\"",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (página inexistente)",
        "sort-descending": "Ordenar por ordem descendente",
        "sort-ascending": "Ordenar por ordem ascendente",
        "wrongpassword": "A senha que introduziu é inválida. Por favor, tente novamente.",
        "wrongpasswordempty": "Foi fornecida uma senha em branco.\nTente novamente.",
        "passwordtooshort": "As senhas devem ter no mínimo {{PLURAL:$1|1 caractere|$1 caracteres}}.",
+       "passwordtoolong": "Senhas não podem ser maiores do que {{PLURAL:$1|1 caractere|$1 caracteres}}.",
        "password-name-match": "A sua senha deve ser diferente do seu nome de usuário.",
        "password-login-forbidden": "O uso deste nome de usuário e senha foi desautorizado.",
        "mailmypassword": "Redefinir senha",
        "notextmatches": "Não foi possível localizar, no conteúdo das páginas, o termo pesquisado",
        "prevn": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "nextn": "{{PLURAL:$1|próximo|próximos $1}}",
+       "prev-page": "página anterior",
+       "next-page": "próxima página",
        "prevn-title": "$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}",
        "nextn-title": "{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "listfiles-delete": "apagar",
        "listfiles-summary": "Esta página especial mostra todos os arquivos carregados.",
        "listfiles_search_for": "Pesquisar por nome de mídia:",
+       "listfiles-userdoesnotexist": "A conta de usuário \"$1\" não está registrada.",
        "imgfile": "arquivo",
        "listfiles": "Lista de arquivo",
        "listfiles_thumb": "Miniatura",
        "version-hook-name": "Nome do hook",
        "version-hook-subscribedby": "Subscrito por",
        "version-version": "($1)",
+       "version-no-ext-name": "[sem nome]",
        "version-license": "Licença do MediaWiki",
        "version-ext-license": "Licença",
        "version-ext-colheader-name": "Extensão",
        "tags-create-already-exists": "A etiqueta \"$1\" já existe.",
        "tags-create-warnings-below": "Você deseja continuar a criar a etiqueta?",
        "tags-delete-title": "Apagar etiqueta",
+       "tags-delete-reason": "Motivo:",
        "tags-delete-submit": "Apagar irreversivelmente esta etiqueta",
        "tags-delete-not-allowed": "Etiquetas definidas por uma extensão não podem ser apagadas a menos que a extensão especificamente o permita.",
        "tags-delete-not-found": "A etiqueta \"$1\" não existe.",
        "tags-activate-title": "Ativar etiqueta",
+       "tags-activate-reason": "Motivo:",
        "tags-activate-submit": "Ativar",
        "tags-deactivate-title": "Desativar etiqueta",
        "tags-deactivate-submit": "Desativar",
        "dberr-problems": "Desculpe! Este sítio está passando por dificuldades técnicas.",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
        "dberr-info": "(Não pode acessar a base de dados: $1)",
-       "dberr-info-hidden": "(Não foi possível contatar o banco de dados do servidor)",
+       "dberr-info-hidden": "(Não foi possível acessar o banco de dados)",
        "dberr-usegoogle": "Você pode tentar pesquisar no Google entretanto.",
        "dberr-outofdate": "Note que os seus índices relativos ao nosso conteúdo podem estar desatualizados.",
        "dberr-cachederror": "A seguinte página é uma cópia em cache da página pedida e pode não ser atual.",
        "rightsnone": "(nenhum)",
        "revdelete-summary": "sumário de edição",
        "feedback-adding": "Adicionando os comentários na página...",
+       "feedback-back": "Voltar",
        "feedback-bugcheck": "Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].",
        "feedback-bugnew": "Eu verifiquei. Relatar um bug novo",
        "feedback-bugornote": "Se você está preparado para descrever detalhadamente um problema técnico, [$1 relate um bug].\nCaso contrário, você poderá usar o formulário simplificado a seguir. Seu comentário será adicionado à página \"[$3 $2]\", junto com o seu nome de usuário e o navegador que estiver usando neste momento.",
        "feedback-cancel": "Cancelar",
        "feedback-close": "Feito",
+       "feedback-dialog-title": "Enviar comentários",
+       "feedback-dialog-intro": "Você pode usar o simples formulário abaixo para enviar seus comentários. Os mesmos serão adicionados à página \"$1\", junto com seu nome de usuário.",
+       "feedback-error-title": "Erro",
        "feedback-error1": "Erro: O resultado da API não foi reconhecido",
        "feedback-error2": "Erro: A edição falhou",
        "feedback-error3": "Erro: A API não responde",
        "feedback-subject": "Assunto:",
        "feedback-submit": "Enviar",
        "feedback-thanks": "Obrigado! O seu comentário foi adicionado à página \"[$2 $1]\".",
+       "feedback-thanks-title": "Obrigado!",
        "searchsuggest-search": "Pesquisa",
        "searchsuggest-containing": "contendo...",
        "api-error-badaccess-groups": "Você não tem permissão para enviar arquivos para este wiki.",
index 1c1c8d6..99a70e7 100644 (file)
        "wrongpassword": "A palavra-passe que introduziu é inválida. Tente novamente, por favor.",
        "wrongpasswordempty": "A palavra-passe não foi introduzida. \nIntroduza-a, por favor.",
        "passwordtooshort": "A palavra-passe deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.",
+       "passwordtoolong": "A palavra-passe deve exceder $1 {{PLURAL:$1|carácter|caracteres}}.",
        "password-name-match": "A sua palavra-passe tem de ser diferente do seu nome de utilizador.",
        "password-login-forbidden": "Foi proibido o uso deste nome de utilizador e palavra-passe.",
        "mailmypassword": "Reiniciar a palavra-passe",
        "notextmatches": "Não foi possível localizar, no conteúdo das páginas, o termo pesquisado",
        "prevn": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "nextn": "{{PLURAL:$1|posterior|$1 posteriores}}",
+       "prev-page": "página anterior",
+       "next-page": "página seguinte",
        "prevn-title": "$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}",
        "nextn-title": "{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "listfiles-delete": "eliminar",
        "listfiles-summary": "Esta página especial mostra todos os ficheiros carregados.",
        "listfiles_search_for": "Pesquisar por nome de imagem:",
+       "listfiles-userdoesnotexist": "A conta de utilizador \"$1\" não está registada.",
        "imgfile": "ficheiro",
        "listfiles": "Ficheiros",
        "listfiles_thumb": "Miniatura",
        "emailccsubject": "Cópia da sua mensagem para $1: $2",
        "emailsent": "Mensagem enviada",
        "emailsenttext": "A sua mensagem foi enviada.",
-       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"Contactar este utilizador\" em {{SITENAME}}.",
+       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"{{int:emailpage}}\" em {{SITENAME}}.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Editor de mensagens de sistema",
        "watchlist": "Páginas vigiadas",
        "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importou}} $3 através de carregamento de ficheiro",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importou}} $3 de outra wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|fundiu}} $3 com $4 (edições até $5)",
        "logentry-move-move": "$1 moveu a página $3 para $4",
        "logentry-move-move-noredirect": "$1 moveu a página $3 para $4 sem deixar um redirecionamento",
        "feedback-error1": "Erro: O resultado da API não foi reconhecido",
        "feedback-error2": "Erro: A edição falhou",
        "feedback-error3": "Erro: A API não responde",
+       "feedback-error4": "Erro: Não foi possível enviar o seu comentário sobre o título selecionado",
        "feedback-message": "Mensagem:",
        "feedback-subject": "Assunto:",
        "feedback-submit": "Enviar",
index 0992b49..d2da2b1 100644 (file)
                        "Jdforrester",
                        "Mar(c)",
                        "Pikne",
-                       "Tacsipacsi"
+                       "Tacsipacsi",
+                       "Totosunarto",
+                       "Macofe"
                ]
        },
        "sidebar": "{{notranslate}}",
        "history-feed-description": "Used as subtitle (description) of the RSS/Atom feed for a page history. See [{{canonicalurl:Main_Page|feed=atom&action=history}} example].",
        "history-feed-item-nocomment": "Title for each revision when viewing the RSS/Atom feed for a page history.\n\nParameters:\n* $1 - username\n* $2 - date/time\n* $3 - (Optional) date\n* $4 - (Optional) time",
        "history-feed-empty": "Used as summary of the RSS/Atom feed for a page history when the feed is empty.\nSee [{{canonicalurl:x|feed=atom&action=history}} example].",
+       "history-edit-tags": "Text of button used to access change tagging interface. For more information on tags see [[mw:Manual:Tags]].",
        "rev-deleted-comment": "Apparently this can also be about the reason of a log action, not only an edit summary. See also:\n*{{msg-mw|revdelete-hide-comment}}",
        "rev-deleted-user": "See also:\n* {{msg-mw|Rev-deleted-event}}",
        "rev-deleted-event": "See also:\n* {{msg-mw|Rev-deleted-user}}",
        "right-sendemail": "{{doc-right|sendemail}}",
        "right-passwordreset": "{{doc-right|passwordreset}}",
        "right-managechangetags": "{{doc-right|managechangetags}}",
+       "right-applychangetags": "{{doc-right|applychangetags}}",
+       "right-changetags": "{{doc-right|changetags}}",
        "newuserlogpage": "{{doc-logpage}}\n\nPart of the \"Newuserlog\" extension. It is both the title of [[Special:Log/newusers]] and the link you can see in [[Special:RecentChanges]].",
        "newuserlogpagetext": "Part of the \"Newuserlog\" extension. It is the description you can see on [[Special:Log/newusers]].",
        "rightslog": "{{doc-logpage}}\n\nIn [[Special:Log]]",
        "action-editmyprivateinfo": "{{doc-action|editmyprivateinfo}}",
        "action-editcontentmodel": "{{doc-action|editcontentmodel}}",
        "action-managechangetags": "{{doc-action|managechangetags}}",
+       "action-applychangetags": "{{doc-action|applychangetags}}",
+       "action-changetags": "{{doc-action|changetags}}",
        "nchanges": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to a diff of the changes.\n\nParameters:\n* $1 - the number of changes on that day (2 or more)\nThree messages are shown side-by-side: ({{msg-mw|Nchanges}} | {{msg-mw|Enhancedrc-since-last-visit}} | {{msg-mw|Enhancedrc-history}}).",
        "enhancedrc-since-last-visit": "Appears on enhanced watchlist and recent changes when page has more than one change on given date and at least one that the user hasn't seen yet, linking to a diff of the unviewed changes.\n\nParameters:\n* $1 - the number of unviewed changes (1 or more)\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).",
        "enhancedrc-history": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to its history.\n\nThis is the same as {{msg-mw|hist}}, but not abbreviated.\n\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).\n{{Identical|History}}",
        "rcshowhideminor-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.\n\nSee also:\n* {{msg-mw|rcshowhideminor-hide}}\n{{Identical|Show}}",
        "rcshowhideminor-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.\n\nSee also:\n* {{msg-mw|rcshowhideminor-show}}\n{{Identical|Hide}}",
        "rcshowhidebots": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhidebots-show}} or {{msg-mw|rcshowhidebots-hide}}\n{{Identical|$1 bots}}",
-       "rcshowhidebots-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-show}}\n{{Identical|Show}}",
+       "rcshowhidebots-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-hide}}\n{{Identical|Show}}",
        "rcshowhidebots-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-hide}}\n{{Identical|Hide}}",
        "rcshowhideliu": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - any one of the following messages:\n** {{msg-mw|rcshowhideliu-show}}\n** {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Registered user}}",
        "rcshowhideliu-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.\n\nSee also:\n* {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Show}}",
        "listfiles-delete": "Text of the delete links next to the entries on [[Special:ListFiles]], surrounded by parentheses.\n{{Identical|Delete}}",
        "listfiles-summary": "This message is displayed at the top of [[Special:ImageList]] to explain how to use that special page.",
        "listfiles_search_for": "Input label for the form displayed on [[Special:ListFiles]].",
+       "listfiles-userdoesnotexist": "This message is displayed on [[Special:ListFiles]] when a invalid username is entered.",
        "imgfile": "{{Identical|File}}",
        "listfiles": "Page title and grouping label for the form displayed on [[Special:ListFiles]].\n{{Identical|File list}}",
        "listfiles_thumb": "{{Identical|Thumbnail}}",
        "logempty": "Used as warning when there are no items to show.",
        "log-title-wildcard": "* Appears in: [[Special:Log]]\n* Description: A check box to enable prefix search option",
        "showhideselectedlogentries": "Text of the button which brings up the [[mw:RevisionDelete|RevisionDelete]] menu on [[Special:Log]].",
+       "log-edit-tags": "Text of button used to access change tagging interface. For more information on tags see [[mw:Manual:Tags]].",
        "allpages": "{{doc-special|AllPages}}\nFirst part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]].\nThe other parts are {{msg-mw|Prevpage}} and {{msg-mw|Nextpage}}.\n{{Identical|All pages}}",
        "allpages-summary": "{{doc-specialpagesummary|allpages}}",
        "nextpage": "Third part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]]. $1 is a page title. The other parts are {{msg-mw|Allpages}} and {{msg-mw|Prevpage}}.\n\n{{Identical|Next page}}",
        "patrol-log-page": "{{doc-logpage}}",
        "patrol-log-header": "Text that appears above the log entries on the [[Special:log|patrol log]].",
        "log-show-hide-patrol": "Used in [[Special:Log]]. Parameters:\n* $1 - link text; one of {{msg-mw|Show}} or {{msg-mw|Hide}}\n{{Related|Log-show-hide}}",
+       "log-show-hide-tag": "Used in [[Special:Log]]. Parameters:\n* $1 - link text; one of {{msg-mw|Show}} or {{msg-mw|Hide}}\n{{Related|Log-show-hide}}",
        "deletedrevision": "Used as log comment. Parameters:\n* $1 - archive name of old image",
        "filedeleteerror-short": "Used as error message. Parameters:\n* $1 – There are two uses: 1) filename or 2) more specific error message like {{msg-mw|Backend-fail-internal}}.\nSee also:\n* {{msg-mw|Filedeleteerror-long}}",
        "filedeleteerror-long": "Used as error message. Parameters:\n* $1 - ...\nSee also:\n* {{msg-mw|Filedeleteerror-short}}",
        "exif-locationdestcode": "Code of location depicted. Typically this is an ISO country code, but the IPTC-iim standard also defines other codes like XSP for outer space. See appendix D (and tag 2:100) of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf",
        "exif-objectcycle": "Time of day that media is intended for. Either morning only, evening only, or all day. Typically only used for news related things that might only be broadcast at a specific time of day.\n\nSee also:\n* {{msg-mw|Exif-objectcycle-a}}\n* {{msg-mw|Exif-objectcycle-p}}\n* {{msg-mw|Exif-objectcycle-b}}",
        "exif-contact": "Contact information of the person responsible for the image.",
-       "exif-writer": "The person who wrote the caption of the image. See Description Writer on page 18 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf",
+       "exif-writer": "The person who wrote the caption of the image. See Description Writer on page 18 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf\n{{Identical|Writer}}",
        "exif-languagecode": "Language of image/media.\n\nThis is taken from IPTC-iim 2:135 and XMP's dc:language.\n{{Identical|Language}}",
        "exif-iimversion": "IIM version number. Version of information interchange 2:xx records. 4 is current version. 2 is often seen as well. This is the value stored 2:00 field (Note, iptc-iim also stores a model version in 1:00. This version field displays the 2:00 record only)",
        "exif-iimcategory": "Primary Category of image (or other media). Technically supposed to be limited to 3 characters, however that is not always followed. Some common 3 letter category abbreviations are expanded by mediawiki. Similar to {{msg-mw|exif-keywords}}.\n{{Identical|Category}}",
        "tags-deactivate-reason": "{{Identical|Reason}}",
        "tags-deactivate-not-allowed": "Error message on [[Special:Tags]]",
        "tags-deactivate-submit": "The label of the form \"submit\" button when the user is about to deactivate a tag.\n{{Identical|Deactivate}}",
+       "tags-apply-no-permission": "Error message seen via the API when a user lacks the permission to apply change tags.",
+       "tags-apply-not-allowed-one": "Error message seen via the API when a user tries to apply a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
+       "tags-apply-not-allowed-multi": "Error message seen via the API when a user tries to apply more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
+       "tags-update-no-permission": "Error message seen via the API when a user lacks the permission to add or remove change tags after the fact.",
+       "tags-update-add-not-allowed-one": "Error message seen via the API when a user tries to add a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
+       "tags-update-add-not-allowed-multi": "Error message seen via the API when a user tries to add more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
+       "tags-update-remove-not-allowed-one": "Error message seen via the API when a user tries to remove a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
+       "tags-update-remove-not-allowed-multi": "Error message seen via the API when a user tries to remove more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
+       "tags-edit-title": "The title of a page where tags can be added or removed from selected revisions or log entries.\nFor more information on tags see [[mw:Manual:Tags]].",
+       "tags-edit-manage-link": "Text of a link to [[Special:Tags]], in imperative mood. Refers to the same thing as {{msg-mw|log-name-managetags}}.",
+       "tags-edit-revision-selected": "{{Identical|revdelete-selected-text}}\n\nSee also:\n* {{msg-mw|tags-edit-logentry-selected}}",
+       "tags-edit-logentry-selected": "{{Identical|logdelete-selected}}\n\nSee also:\n* {{msg-mw|tags-edit-revision-selected}}",
+       "tags-edit-revision-explanation": "Leave blank.\n\nSee also:\n* {{msg-mw|tags-edit-logentry-explanation}}",
+       "tags-edit-logentry-explanation": "Leave blank.\n\nSee also:\n* {{msg-mw|tags-edit-revision-explanation}}",
+       "tags-edit-revision-legend": "Form legend.\n\nSee also:\n* {{msg-mw|tags-edit-logentry-legend}}",
+       "tags-edit-logentry-legend": "Form legend.\n\nSee also:\n* {{msg-mw|tags-edit-revision-legend}}",
+       "tags-edit-existing-tags": "Heading beneath which a list of tags already applied to the revision or log entry is presented.",
+       "tags-edit-existing-tags-none": "Shown when no tags are applied. Should be formatted differently (italicised or parenthesised).",
+       "tags-edit-new-tags": "Heading beneath which the user chooses which tags should be attached to the revision or log entry. They may add or remove tags.",
+       "tags-edit-add": "Heading beneath which the user picks which tags to add to the revision or log entry.",
+       "tags-edit-remove": "Heading beneath which the user picks which tags to remove from the revision or log entry.",
+       "tags-edit-remove-all-tags": "Check box label that the user selects when they want to remove all the tags from the revision or log entry.",
+       "tags-edit-chosen-placeholder": "Placeholder text on the jQuery Chosen input box where users can select zero or more tags.",
+       "tags-edit-chosen-no-results": "Message displayed by the jQuery Chosen input box when the user enters a string which doesn't match a known tag.\n\nDue to technical limitations, the user's input is not passed as a parameter to this message. The string the user entered is wrapped in quotation marks (\") and appended to the end of this string.",
+       "tags-edit-reason": "{{Identical|Reason}}",
+       "tags-edit-revision-submit": "Text of the submission button of the edit tag form for revisions.\n\nSee also:\n* {{msg-mw|tags-edit-logentry-submit}}",
+       "tags-edit-logentry-submit": "Text of the submission button of the edit tag form for log entries.\n\nSee also:\n* {{msg-mw|tags-edit-revision-submit}}",
+       "tags-edit-success": "Success message for the edit tag form.",
+       "tags-edit-failure": "Error message wrapper for the edit tag form.\n\nParameters:\n* $1 - additional error messages",
+       "tags-edit-nooldid-title": "Title for an error message ({{msg-mw|tags-edit-nooldid-text}}) for the edit tag form.",
+       "tags-edit-nooldid-text": "Error message for the edit tag form.\n\nSee also:\n* {{msg-mw|tags-edit-nooldid-title}}",
+       "tags-edit-none-selected": "Error message for the edit tag form.",
        "comparepages": "The title of [[Special:ComparePages]]",
        "comparepages-summary": "{{doc-specialpagesummary|comparepages}}",
        "compare-page1": "Label for the field of the 1st page in the comparison for [[Special:ComparePages]]\n{{Identical|Page}}",
        "logentry-upload-upload": "{{Logentry|[[Special:Log/upload]]}}",
        "logentry-upload-overwrite": "{{Logentry|[[Special:Log/upload]]}}",
        "logentry-upload-revert": "{{Logentry|[[Special:Log/upload]]}}",
-       "log-name-managetags": "The title of a log which contains entries related to the management of change tags. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
+       "log-name-managetags": "The title of a log which contains entries related to the management of change tags. This includes creation and deletion of the tags themselves. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
        "log-description-managetags": "The description of the tag management log. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
        "logentry-managetags-create": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name",
        "logentry-managetags-delete": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name\n* $5 - number of revisions + log entries that were tagged with the tag",
        "logentry-managetags-activate": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name",
        "logentry-managetags-deactivate": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name",
+       "log-name-tag": "The title of a log which contains entries related to applying and removing change tags from individual revisions or log entries. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
+       "log-description-tag": "The description of the tag log. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
+       "logentry-tag-update-add-revision": "{{Logentry|[[Special:Log/tag]]}}\n*$4 - revision ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags",
+       "logentry-tag-update-add-logentry": "{{Logentry|[[Special:Log/tag]]}}\n*$5 - log entry ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags",
+       "logentry-tag-update-remove-revision": "{{Logentry|[[Special:Log/tag]]}}\n*$4 - revision ID\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
+       "logentry-tag-update-remove-logentry": "{{Logentry|[[Special:Log/tag]]}}\n*$5 - log entry ID\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
+       "logentry-tag-update-revision": "{{Logentry|[[Special:Log/tag]]}}\n*$4 - revision ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
+       "logentry-tag-update-logentry": "{{Logentry|[[Special:Log/tag]]}}\n*$5 - log entry ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
        "rightsnone": "Default rights for registered users.\n\n{{Identical|None}}",
        "revdelete-logentry": "{{RevisionDelete}}\nThis is the message for the log entry in [[Special:Log/delete]] when changing visibility restrictions for page revisions.\n\nFollowed by the message {{msg-mw|revdelete-log-message}} in brackets.\n\nPreceded by the name of the user doing this task.\n\nParameters:\n* $1 - the page name\nSee also:\n* {{msg-mw|Logdelete-logentry}}",
        "logdelete-logentry": "{{RevisionDelete}}\nThis is the message for the log entry in [[Special:Log/delete]] when changing visibility restrictions for log events.\n\nFollowed by the message {{msg-mw|logdelete-log-message}} in brackets.\n\nPreceded by the name of the user who did this task.\n\nParameters:\n* $1 - the log name in brackets\nSee also:\n* {{msg-mw|Revdelete-logentry}}",
        "feedback-error1": "Error message, appears when an unknown error occurs submitting feedback",
        "feedback-error2": "Error message, appears when we could not add feedback",
        "feedback-error3": "Error message, appears when we lose our connection to the wiki",
+       "feedback-error4": "Error message, appears when mediawiki.feedback or one of its dependencies is misconfigured or there is a problem fetching one of the modules",
        "feedback-message": "Label for a textarea; signature refers to a Wikitext signature.\n{{Identical|Message}}",
        "feedback-subject": "Label for a text input\n{{Identical|Subject}}",
        "feedback-submit": "Button label\n{{Identical|Submit}}",
        "log-name-pagelang": "Display entry for log name for changes in page language in Special:Log.",
        "log-description-pagelang": "Display description for log name for changes in page language in Special:Log.",
        "logentry-pagelang-pagelang": "{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)",
-       "default-skin-not-found": "Message shown when the default skin for this MediaWiki installation can not be found.\n\nParameters:\n* $1: skin identifier for the default skin\n* $2: list of installed skins, composed using {{msg-mw|default-skin-not-found-row-enabled}} and {{msg-mw|default-skin-not-found-row-disabled}}\n* $3: code snippet to use to enable installed skins",
+       "default-skin-not-found": "Message shown when the default skin for this MediaWiki installation can not be found.\n\nParameters:\n* $1: skin identifier for the default skin\n* $2: list of installed skins, composed using {{msg-mw|default-skin-not-found-row-enabled}} and {{msg-mw|default-skin-not-found-row-disabled}}\n* $3: code snippet to use to enable installed skins\n* $4: Number of items in list $2\n* $5: Number of lines in $3, one per skin",
        "default-skin-not-found-no-skins": "Message shown when the default skin for this MediaWiki installation can not be found and the installation has no skins at all.\n\nParameters:\n* $1: name of the default skin",
        "default-skin-not-found-row-enabled": "One row of the list of installed skins shown as a part of the following message (for an enabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-disabled}}",
        "default-skin-not-found-row-disabled": "One row of the list of installed skins shown as a part of the following message (for a disabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-enabled}}",
index a3e56ef..cb8d692 100644 (file)
        "listfiles-delete": "șterge",
        "listfiles-summary": "Această pagină specială listează toate fișierele încărcate.",
        "listfiles_search_for": "Căutare fișiere după nume:",
+       "listfiles-userdoesnotexist": "Contul de utilizator „$1” nu este înregistrat.",
        "imgfile": "fișier",
        "listfiles": "Listă fișiere",
        "listfiles_thumb": "Miniatură",
        "emailccsubject": "O copie a mesajului la $1: $2",
        "emailsent": "E-mail trimis",
        "emailsenttext": "E-mailul dumneavoastră a fost trimis.",
-       "emailuserfooter": "Acest mesaj a fost trimis de $1 către $2 prin intermediul funcției „Trimite e-mail” de la {{SITENAME}}.",
+       "emailuserfooter": "Acest mesaj a fost trimis de $1 către $2 prin intermediul funcției „{{int:emailpage}}” de la {{SITENAME}}.",
        "usermessage-summary": "a lăsat un mesaj de sistem",
        "usermessage-editor": "Mesager de sistem",
        "watchlist": "Pagini urmărite",
        "feedback-error1": "Eroare: Rezultat necunoscut de la API",
        "feedback-error2": "Eroare: editarea nu a reușit",
        "feedback-error3": "Eroare: Niciun răspuns de la API",
+       "feedback-error4": "Eroare: Imposibil de publicat comentariile sub titlul furnizat",
        "feedback-message": "Mesaj:",
        "feedback-subject": "Subiect:",
        "feedback-submit": "Trimite",
index 06b4b7b..f650974 100644 (file)
        "wrongpassword": "Введённый вами пароль неверен. Попробуйте ещё раз.",
        "wrongpasswordempty": "Пожалуйста, введите непустой пароль.",
        "passwordtooshort": "Пароль должен состоять не менее чем из $1 {{PLURAL:$1|символа|символов}}.",
-       "passwordtoolong": "Ð\9fаÑ\80олÑ\8c Ð½Ðµ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð¿Ñ\80евÑ\8bÑ\88аÑ\82Ñ\8c   Ñ\81имволов.",
+       "passwordtoolong": "Ð\9fаÑ\80олÑ\8c Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82 Ð¿Ñ\80евÑ\8bÑ\88аÑ\82Ñ\8c {{PLURAL:$1|1 Ñ\81имвол|$1 Ñ\81имволов|$1 Ñ\81имвола}}.",
        "password-name-match": "Введённый пароль должен отличаться от имени участника.",
        "password-login-forbidden": "Использование этого имени участника и пароля запрещено.",
        "mailmypassword": "Сбросить пароль",
        "listfiles-delete": "удалить",
        "listfiles-summary": "Эта служебная страница показывает все загруженные файлы.",
        "listfiles_search_for": "Поиск по имени файла:",
+       "listfiles-userdoesnotexist": "Учётная запись «$1» не зарегистрирована.",
        "imgfile": "файл",
        "listfiles": "Список файлов",
        "listfiles_thumb": "Миниатюра",
        "emailccsubject": "Копия вашего сообщения для $1: $2",
        "emailsent": "Письмо отправлено",
        "emailsenttext": "Ваше электронное сообщение отправлено.",
-       "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «Письмо участнику» проекта {{SITENAME}}.",
+       "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailpage}}» проекта {{SITENAME}}.",
        "usermessage-summary": "Оставить системное сообщение.",
        "usermessage-editor": "Системная доставка",
        "watchlist": "Список наблюдения",
        "log-name-pagelang": "Журнал изменения языка",
        "log-description-pagelang": "Это журнал изменений в языках страницы.",
        "logentry-pagelang-pagelang": "$1 изменил{{GENDER:$2||а}} язык страницы для $3 с $4 на $5.",
-       "default-skin-not-found": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, похоже, содержит следующие темы оформления. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n\n$ 2\n\n; Если вы только что установили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Загрузив [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Загрузив архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code  dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и новее больше не включает автоматически установленные темы (см. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить следующие строки в <code>LocalSettings.php</code>, чтобы включить все установленные темы оформления: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
+       "default-skin-not-found": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, похоже, содержит {{PLURAL:$4|следующую тему|следующие темы}} оформления. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration 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/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Загрузив архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code  dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и новее больше не включает автоматически установленные темы (см. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить {{PLURAL:$5|следующую строку|следующие строки}} в <code>LocalSettings.php</code>, чтобы включить {{PLURAL:$5|установленную в текущее время тему|все установленные в текущее время темы}} оформления: \n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
        "default-skin-not-found-no-skins": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nУ вас нет установленных тем оформления.\n\n; Если вы только что установили или обновили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. MediaWiki версии 1.24 и новее не содержат темы оформления в основном репозитории. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Загрузив [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Загрузив архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''отключено''')",
index 7892473..67f3f43 100644 (file)
@@ -31,7 +31,7 @@
        "tog-shownumberswatching": "Aratâ numiru a utilizatorloru cari ti avinu",
        "tog-oldsig": "Cundiľeauâ di tora:",
        "tog-fancysig": "Saidiseaști cundiľeaua ca wikitext (fârâ unâ ligâturâ automatâ)",
-       "tog-uselivepreview": "Ufiliseaști previzualizarea tu chiro realu (experimentalu)",
+       "tog-uselivepreview": "Ufiliseaști previzualizarea live (experimentalu)",
        "tog-forceeditsummary": "Dzâ-ńi anda mi agârșescu s-fânirusescu alâxirili",
        "tog-watchlisthideown": "Ascundi alâxirili a meali la lista a ńia di avinari",
        "tog-watchlisthidebots": "Ascundi alâxirili a boțloru la lista a ńia di avinari",
        "hidden-category-category": "Categorii ascumsi",
        "category-subcat-count": "{{PLURAL:$2|Categoria conține mași subcategoria aestâ.|Categoria conțini {{PLURAL:$1|aestâ subcategorie|aesti $1 subcategorii}}, di-tu $2.}}",
        "category-subcat-count-limited": "Această categorie conțini {{PLURAL:$1|subcategorie|$1 subcategorii}}.",
+       "category-article-count": "{{PLURAL:$2|Categoria ari mași aestâ frândzâ.|{{PLURAL:$1|Frândza di dupâ|Alanti $1 frândzâ}} suntu tu aestâ categorie, di-tu unu totalu di $2.}}",
        "listingcontinuesabbrev": "cont.",
        "index-category": "Frândzâ indexati",
        "noindex-category": "Frândzâ neindexati",
        "disclaimers": "Termeni",
        "disclaimerpage": "Project:Termeni",
        "edithelp": "Agiutoru trâ alâxiri",
+       "helppage-top-gethelp": "Agiutoru",
        "mainpage": "Prota frândzâ",
        "mainpage-description": "Prota frândzâ",
        "policy-url": "Project:Politicâ",
        "pt-login-button": "Leagâ-ti",
        "pt-createaccount": "Fă contu (isape)",
        "pt-userlogout": "Dizleagâ-ti",
+       "changeemail-none": "(țiva)",
+       "changeemail-submit": "Alâxire email",
        "bold_sample": "Scriari groasâ (bold)",
        "bold_tip": "Scriari groasâ (bold)",
        "italic_sample": "Scriari aplicatâ (italic)",
        "showpreview": "Previzualizare",
        "showdiff": "Aratâ alâxirile",
        "loginreqlink": "leagâ-ti",
+       "newarticle": "(Nou)",
        "lineno": "Linia $1:",
        "editundo": "turnari",
        "searchresults": "Rezultatili câftăriľei",
index c3df68d..008ade3 100644 (file)
        "wrongpassword": "भवता/भवत्या लिखितः कूटशब्दः त्रुटियुक्तः । \nकृपया पुनः लिख्यताम् ।",
        "wrongpasswordempty": "कूटशब्दपेटिकायां कूटशब्दः न लिखितः ।\n\nकृपया पुनः प्रयासः क्रियताम् ।",
        "passwordtooshort": "न्यूनातिन्यूनं {{PLURAL:$1| 1 अक्षरात्मकः|$1 अक्षरात्मकः}} कूटशब्दः भवेदेव ।",
+       "passwordtoolong": "कूटशब्दः {{PLURAL:$1| 1 अक्षरात्|$1 अक्षरेभ्यः}} बृहत् न स्यात् ।",
        "password-name-match": "भवतः/भवत्याः प्रयोक्तृनाम, कूटशब्दः च समानः न भवेत् ।",
        "password-login-forbidden": "अस्य प्रयोक्तृनाम्नः कूटशब्दस्य च प्रयोगः वर्जितोऽस्ति ।",
        "mailmypassword": "कूटशब्दः परिवर्त्यताम्",
        "last": "पूर्वतनम्",
        "page_first": "प्रप्रथमम्",
        "page_last": "अन्तिमम्",
-       "histlegend": "भà¥\87दसà¥\8dय à¤\9aयनमà¥\8d : à¤\86वà¥\83तà¥\8dतिभà¥\87दसà¥\8dय à¤¦à¤°à¥\8dशनाय अग्रे प्रदत्ता रेडियो-मञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />\nनूतनसंस्करणम् = नूतनासु आवृत्तिषु भेदः, \n(पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु सम्पादनम्",
+       "histlegend": "भà¥\87दसà¥\8dय à¤\9aयनमà¥\8d : à¤\86वà¥\83तà¥\8dतिभà¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81मà¥\8d अग्रे प्रदत्ता रेडियो-मञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />\nनूतनसंस्करणम् = नूतनासु आवृत्तिषु भेदः, \n(पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु सम्पादनम्",
        "history-fieldset-title": "अन्वेषणस्य इतिहासः",
        "history-show-deleted": "केवलम् अपाकृतम्",
        "histfirst": "पुरातनतमम्",
        "notextmatches": "एषः शब्दः न कस्मिंश्चिदपि पृष्ठे अन्तर्भवति ।",
        "prevn": "पूर्वतनम् {{PLURAL:$1|$1}}",
        "nextn": "अग्रिमम् {{PLURAL:$1|$1}}",
+       "prev-page": "पूर्वतनं पृष्ठम्",
+       "next-page": "अग्रिमं पृष्ठम्",
        "prevn-title": "पूर्वतन{{PLURAL:$1|परिणामः|परिणामाः}}",
        "nextn-title": "अग्रिम{{PLURAL:$1|परिणामः|परिणामाः}}",
        "shown-title": "प्रत्येकस्मिन् पृष्ठे $1 {{PLURAL:$1|परिणामः दृश्यताम्|परिणामाः दृश्यन्ताम्}}",
        "right-autopatrol": "स्वस्य सम्पादनानि निरीक्षितत्वेन अङ्क्यन्ताम्",
        "right-patrolmarks": "नूतनपरिवर्तनेषु निरीक्षित-अङ्कनं दृश्यताम्",
        "right-unwatchedpages": "अदृष्टपृष्टानाम् आवलिः दृश्यताम्",
-       "right-mergehistory": "पृष्ठानाम् इतिहासम् वलीयताम्",
+       "right-mergehistory": "पà¥\83षà¥\8dठानामà¥\8d à¤\87तिहासमà¥\8d à¤µà¤¿à¤²à¥\80यतामà¥\8d",
        "right-userrights": "सर्वयोजकाधिकारः सम्पाद्यताम्",
        "right-userrights-interwiki": "अन्यविकि-जालस्थानानां योजकाधिकारः सम्पाद्यताम्",
        "right-siteadmin": "दत्तांशनिधिं किलतु, अकिलितं च करोतु",
        "right-override-export-depth": "यानि पुष्ठानि पञ्चस्तरपर्यन्तं संलग्नानि सन्ति, तेषां सर्वेषां निर्यातं करोतु ।",
-       "right-sendemail": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤\88-पतà¥\8dरà¤\82 à¤ªà¤¤à¥\8dरà¤\82 à¤ªà¥\8dरà¥\87षयतà¥\81",
+       "right-sendemail": "अन्ययोजकेभ्यः ई-पत्रं प्रेषयतु",
        "right-passwordreset": "निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।",
+       "right-managechangetags": "दत्तांशात् [[Special:Tags|चिह्नानि]] निर्मियन्ताम्, अपाक्रियन्तां च",
        "newuserlogpage": "प्रयोक्तृ-सृजन-सूचिका",
        "newuserlogpagetext": "अयं योजकनिर्माणास्य प्रवेशः ।",
        "rightslog": "प्रयोक्तृ-अधिकार-सूचिका",
        "action-createpage": "पुटानि सृजतु ।",
        "action-createtalk": "चर्चापुटानि सृजतु ।",
        "action-createaccount": "नूतनयोजकस्थानं निर्मातु ।",
+       "action-history": "पृष्ठस्य इतिहासः दृश्यताम्",
        "action-minoredit": "एतत्सम्पादनं लघु इति अङ्कयतु ।",
        "action-move": "एतत्पुटं चालयतु ।",
        "action-move-subpages": "एतत्पुटम् अस्य उपपुटानि च चालयतु ।",
        "action-move-rootuserpages": "मूलयोजकपुटानि चालयतु ।",
+       "action-move-categorypages": "वर्गपृष्ठानि चाल्यन्ताम्",
        "action-movefile": "एतां सञ्चिकां चालयतु ।",
        "action-upload": "एतां सञ्चिकाम् उत्तारयतु ।",
        "action-reupload": "स्थितसञ्चिकां पुनर्लिखतु ।",
        "nchanges": "$1 {{PLURAL:$1|परिवर्तनम्|परिवर्तनानि}}",
        "recentchanges": "नूतनपरिवर्तनानि",
        "recentchanges-legend": "सद्यो जातानां परिवर्तनानां विकल्पाः",
-       "recentchanges-summary": "अस्मिन् विकि-प्रकल्पे सद्यो जातानि परिवर्तनानि दृश्यन्ताम् ।",
+       "recentchanges-summary": "à¤\85सà¥\8dमिनà¥\8d à¤µà¤¿à¤\95ि-पà¥\8dरà¤\95लà¥\8dपà¥\87 à¤¸à¤¦à¥\8dयà¥\8b à¤\9cातानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤\85तà¥\8dर à¤¦à¥\83शà¥\8dयनà¥\8dतामà¥\8d à¥¤",
        "recentchanges-feed-description": "अस्मिन् विकि-प्रकल्पे सद्यो जातानि परिवर्तनानि दर्श्यन्ताम्",
        "recentchanges-label-newpage": "अनेन सम्पादनेन नूतनपृष्ठस्य रचना अभूत् ।",
        "recentchanges-label-minor": "इदं लघु सम्पादनम्",
        "recentchanges-label-unpatrolled": "एतावता अस्य सम्पादनस्य परिशीलिनं नाभूत् ।",
        "recentchanges-label-plusminus": "पृष्ठस्य आकारः एतावद्भिः बैट्स्-संख्याभिः परिवर्तितः",
        "recentchanges-legend-heading": "'''विकल्पविषयकम्'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|अत्र नूतनपृष्ठानाम् आवलिः]] अपि दृश्यताम्)",
        "rcnotefrom": "<strong>$2</strong> तः आरभ्य (<strong>$1</strong> पर्यन्तं) जातानि परिवर्तनानि अधः प्रदर्शितानि ।",
        "rclistfrom": "$3 $2 पश्चात् जातानि नूतनानि परिवर्तनानि दृश्यन्ताम्",
        "rcshowhideminor": "$1 लघुसम्पादनानि",
        "exif-primarychromaticities": "प्राथमिकस्य वर्णगुणः ।",
        "exif-ycbcrcoefficients": "वर्णाकाशस्य वर्गान्तरम् मॅट्रीक्स कोएफिशीयंट्स्",
        "exif-referenceblackwhite": "उल्लेखमौल्यस्य श्वेतकृष्णयुगम् ।",
-       "exif-datetime": "सञ्चिकापरिवर्तनस्य दिनाङ्कः समयः च ।",
+       "exif-datetime": "सञ्चिकापरिवर्तनस्य दिनाङ्कः समयः च",
        "exif-imagedescription": "चित्रशीर्षकम् ।",
        "exif-make": "चित्रग्राहिण्याः उत्पादकः ।",
        "exif-model": "चित्रग्राहिण्याः स्वरूपम् ।",
-       "exif-software": "तन्त्रांशः उपयुक्तः ।",
+       "exif-software": "तन्त्रांशः उपयुक्तः",
        "exif-artist": "लेखक",
        "exif-copyright": "स्वामित्वस्य धारकः ।",
        "exif-exifversion": "Exif आवृत्तिः ।",
        "exif-flashpixversion": "अनुमोदिता फ्लाश्पिक्स् आवृत्तिः ।",
-       "exif-colorspace": "वर्णावकाशः ।",
+       "exif-colorspace": "वर्णावकाशः",
        "exif-componentsconfiguration": "प्रत्येकं भागस्य अर्थः ।",
        "exif-compressedbitsperpixel": "चित्रसङ्कोचविधानम् ।",
        "exif-pixelydimension": "चित्रविस्तारः ।",
index 4d3bbf3..35342e3 100644 (file)
        "pager-older-n": "{{PLURAL:$1|аҕа 1|аҕа $1}}",
        "suppress": "Кистээһин",
        "querypage-disabled": "Бу анал сирэй тиһилик үлэтин түргэтэтээри араарыллыбыт.",
+       "apihelp": "API-га көмө",
+       "apihelp-no-such-module": "\"$1\" муодул көстүбэтэ.",
        "booksources": "Кинигэлэр источниктара",
        "booksources-search-legend": "Кинигэ туһунан көрдөө",
        "booksources-search": "Бул",
        "import": "Сирэйдэри импортааһын",
        "importinterwiki": "Биики ыккардынааҕы импорт",
        "import-interwiki-text": "Биикини уонна импортанар сирэй аатын киллэр.\nУларытыылар күннэрэ-ыйдара уонна аапптардар ааттара оннуларынан хаалыахтара.\nБиики ыккардынааҕы импорт дьайыылара [[Special:Log/import|аналлаах сурунаалга]] суруллаллар.",
+       "import-interwiki-sourcewiki": "Ийэ биики:",
+       "import-interwiki-sourcepage": "Бастааҥы сирэй:",
        "import-interwiki-history": "Сирэй туох баар историятын көһөрөргө",
        "import-interwiki-templates": "Бары халыыптары киллэр",
        "import-interwiki-submit": "Импортаа",
        "importcantopen": "Импортанар билэ кыайан арыллыбат",
        "importbadinterwiki": "Интервики ыйынньык сыыһа",
        "importsuccess": "Импортааһын түмүктэннэ!",
-       "importnosources": "Ð\91иики Ñ\8bккÑ\80адÑ\8bнааÒ\95Ñ\8b Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82анаÑ\80 Ð±Ð¸Ð»Ñ\8d Ñ\82алÑ\8bллÑ\8bбаÑ\82аÑ\85, Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8b Ð¸Ñ\81Ñ\82оÑ\80иÑ\8fÑ\82Ñ\8bн ÐºÓ©Ò»Ó©Ñ\80Ò¯Ò¯ Ð°Ñ\80аÑ\85Ñ\81а Ñ\81Ñ\8bлдÑ\8cаÑ\80.",
+       "importnosources": "ЫлÑ\8bллаÑ\80 Ð±Ð¸Ð¸ÐºÐ¸ Ñ\8bйÑ\8bллÑ\8bбаÑ\82аÑ\85 Ð¾Ð½Ð¾Ð½ Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8b Ñ\81Ñ\83Ñ\80Ñ\83наалÑ\8bн ÐºÓ©Ò»Ó©Ñ\80Ò¯Ò¯ Ð°Ñ\80аÑ\85Ñ\81Ñ\8bбÑ\8bÑ\82.",
        "importnofile": "Импортанар билэ сатаан киллэриллибэтэ.",
        "importuploaderrorsize": "Файл ыйааhына наhаа улахан буолан хачайдааhын тохтотулунна.",
        "importuploaderrorpartial": "Хачайдааhын тохтотулунна. Файл сорҕото эрэ сурулунна.",
        "import-upload": "XML-дааннайдары киллэр",
        "import-token-mismatch": "Арахсан хаалбыт. Өссө киирэн көр.",
        "import-invalid-interwiki": "Бу биикиттэн импорт оҥорор сатаммат(а).",
-       "import-error-edit": "«$1» сирэй киллэриллибэтэ, тоҕо диэтэххэ кинини көннөрөрүҥ көҥүллэммэт эбит.",
+       "import-error-edit": "«$1» сирэй көһөрүллүбэтэ, тоҕо диэтэххэ кинини уларытарыҥ көҥүллэммэт эбит.",
        "import-error-create": "«$1» сирэй киллэриллибэтэ, тоҕо диэтэххэ кинини айарыҥ сатаммат эбит.",
        "import-error-interwiki": "\"$1\" сирэй импортаммата, тоҕо диэтэххэ бу аат тас сигэлэргэ (интервикаҕа) аналлаах эбит.",
-       "import-error-special": "\"$1\" сирэй импортаммата, тоҕо диэтэххэ кини баар аат далыгар саҥа сирэйдэри оҥорор көҥүллэммэт эбит.",
-       "import-error-invalid": "\"$1\" сирэй импортаммата, тоҕо диэтэххэ маннык аат туттуллара бобуллубут.",
+       "import-error-special": "\"$1\" сирэй импортаммата, тоҕо диэтэххэ кини угуллубут аатын далыгар саҥа сирэйдэри оҥорор көҥүллэммэт эбит.",
+       "import-error-invalid": "\"$1\" сирэй импортаммата, тоҕо диэтэххэ маннык аат туттуллара бу биикигэ бобуулаах.",
        "import-error-unserialize": "«$1» сирэй $2 барыла структуураланар (десериализация) кыаҕа суох. Барылга иһинээҕитин модела маннык: $3, маннык серияланар: $4.",
        "import-options-wrong": "Алҕастаах {{PLURAL:$2|опция|опциялар}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Тирэх сирэй ыйыллыбыт аата алҕастаах.",
        "tags-active-no": "Суох",
        "tags-edit": "уларытыы",
        "tags-hitcount": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
+       "tags-create-tag-name": "Бэлиэ аата:",
+       "tags-create-reason": "Төрүөтэ:",
+       "tags-create-submit": "Оҥоруу",
+       "tags-create-no-name": "Бэлиэ аатын суруйуохтааххын.",
+       "tags-create-invalid-chars": "Бэлиэ аатыгар сопутуой (<code>,</code>) эбэтэр слэш  (<code>/</code>) буолуохтаах.",
+       "tags-create-invalid-title-chars": "Тиэк аатыгар сирэй баһыгар туттуллуо суохтаах бэлиэ киириэ суохтаах",
+       "tags-create-already-exists": "«$1» тиэк хайыы-үйэ баар эбит.",
        "comparepages": "Сирэйдэри тэҥнииргэ",
        "compare-page1": "Бастакы сирэй",
        "compare-page2": "Иккис сирэй",
index ce40d75..646c332 100644 (file)
@@ -28,7 +28,8 @@
                        "Susith Chandira Gts",
                        "Thanushka",
                        "Thirsty",
-                       "Macofe"
+                       "Macofe",
+                       "Roonyh"
                ]
        },
        "tog-underline": "සබැඳි යටීර කිරීම:",
        "tooltip-pt-mycontris": "ඔබගේ දායකත්වයන් ලැයිස්තුව‍",
        "tooltip-pt-login": "පිවිසීම කෙරෙහි ඔබ උද්‍යෝගිමත් කෙරෙයි. එහෙත්, එය අනිවාර්ය නැත",
        "tooltip-pt-logout": "නික්මීම",
+       "tooltip-pt-createaccount": "ඔබ ගිණුමක් තනා පිවිසෙන්නේ නම් මැනවි; කෙසේ වුවත්, එය අනිවාර්ය නොවේ.",
        "tooltip-ca-talk": "අන්තර්ගත පිටුව පිළිබඳ සාකච්ඡාව",
        "tooltip-ca-edit": "ඔබ‍ට මෙම පිටුව සංස්කරණය කල හැක. සුරැකීමට පෙර කරුණාකර පෙරදසුන බොත්තම භාවිතා කරන්න",
        "tooltip-ca-addsection": "නව ඡේදයක් අරඹන්න",
index 38a5e5a..dc8c1b6 100644 (file)
        "listfiles-delete": "izbriši",
        "listfiles-summary": "Ta posebna stran prikazuje vse naložene datoteke.",
        "listfiles_search_for": "Išči po imenu datoteke:",
+       "listfiles-userdoesnotexist": "Uporabniški račun »$1« ni registriran.",
        "imgfile": "dat.",
        "listfiles": "Seznam datotek",
        "listfiles_thumb": "Sličica",
        "emailccsubject": "Kopija tvojega sporočila iz $1: $2",
        "emailsent": "E-pismo je poslano!",
        "emailsenttext": "E-pismo je poslano.",
-       "emailuserfooter": "To e-poštno sporočilo je bilo poslano od $1 uporabniku $2 preko funkcije »{{int:emailpage}}« na {{GRAMMAR:dative|{{SITENAME}}}}.",
+       "emailuserfooter": "To e-poštno sporočilo je bilo poslal(-a) $1 uporabniku $2 s funkcijo »{{int:emailpage}}« na {{GRAMMAR:dative|{{SITENAME}}}}.",
        "usermessage-summary": "Pusti sistemsko sporočilo.",
        "usermessage-editor": "Sistemski sporočevalec",
        "watchlist": "Spisek nadzorov",
        "feedback-error1": "Napaka: Neznan rezultat iz API",
        "feedback-error2": "Napaka: Urejanje je spodletelo",
        "feedback-error3": "Napaka: Ni odgovora od API",
+       "feedback-error4": "Napaka: Ne morem objaviti navedenega naslova povratnih informacij",
        "feedback-message": "Sporočilo:",
        "feedback-subject": "Zadeva:",
        "feedback-submit": "Pošlji",
        "log-name-pagelang": "Dnevnik spreminjanja jezika",
        "log-description-pagelang": "Dnevnik sprememb jezika strani.",
        "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.",
-       "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
+       "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje {{PLURAL:$4|kožo, navedeno|koži, navedeni|kože, navedene}} spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako {{PLURAL:$4|jo omogočiti in nastaviti kot privzeto|ju omogočiti in nastaviti kot privzeti|jih omogočiti in nastaviti kot privzete}}.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite {{PLURAL:$5|naslednjo vrstico|naslednji vrstici|naslednje vrstice}}, da omogočite trenutno {{PLURAL:$4|nameščeno kožo|nameščeni koži|nameščene kože}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
        "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogočeno)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')",
index b538424..dee7937 100644 (file)
        "emailsend": "Dir",
        "emailccme": "E-mail iigu soo dir fariinteyda oo koobi ah.",
        "emailsent": "E-mailka waa la diray",
-       "emailsenttext": "Fariintaadii E-mailka aheeyd waa la diray.",
+       "emailsenttext": "Farriintaadii E-mailka ahayd waa la diray.",
        "watchlist": "Liiska-waardiyaha",
        "mywatchlist": "Liiska-waardiyaha",
        "watchlistfor2": "Ku socoto $1 $2",
        "actioncomplete": "Amarka waa la'dhamaystiray",
        "actionfailed": "Shaqada waad ku guul dareesatay",
        "dellogpage": "Tirtiraha guda galaheeda",
-       "rollback_short": "Soo celi",
        "rollbacklink": "dib u soo celi",
        "rollbacklinkcount-morethan": "soo celinta in kabadan $1 {{PLURAL:$1|badal|badallo}}",
        "revertpage": "Wuxuu dib u noqay badalkii oo sameeyay  [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) kuna celiyay badalkii ka  danbeeyay oo sameeyay  [[User:$1|$1]]",
index bf05562..79b7d88 100644 (file)
        "missing-article": "Текст странице под називом „$1“ ($2) није пронађен.\n\nУзрок ове грешке је обично застарела измена или веза до обрисане странице.\n\nАко се не ради о томе, онда сте вероватно пронашли грешку у софтверу.\nПријавите је [[Special:ListUsers/sysop|администратору]] уз одговарајућу везу.",
        "missingarticle-rev": "(измена#: $1)",
        "missingarticle-diff": "(разлика: $1, $2)",
-       "readonly_lag": "Ð\91аза Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ана Ð´Ð¾Ðº Ñ\81е Ñ\81поÑ\80едни Ð±Ð°Ð·Ð½Ð¸ Ñ\81еÑ\80веÑ\80и Ð½Ðµ Ñ\83Ñ\81кладе с главним.",
+       "readonly_lag": "Ð\91аза Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\98е Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ана Ð´Ð° Ð±Ð¸ Ñ\81е Ñ\81екÑ\83ндаÑ\80ни Ñ\81еÑ\80веÑ\80и Ð±Ð°Ð·Ðµ Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\83Ñ\81кладили с главним.",
        "internalerror": "Унутрашња грешка",
        "internalerror_info": "Унутрашња грешка: $1",
        "filecopyerror": "Не могу да умножим датотеку „$1“ у „$2“.",
        "userinvalidcssjstitle": "'''Упозорење:''' не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ажурирано)",
        "note": "'''Напомена:'''",
-       "previewnote": "'''Имајте у виду да је ово само преглед.'''\nВаше измене још нису сачуване!",
+       "previewnote": "<strong>Ово је претпреглед.</strong>\nВаше измене још нису сачуване!",
        "continue-editing": "Иди на уређивачки оквир",
        "previewconflict": "Овај преглед осликава како ће текст у текстуалном оквиру изгледати.",
        "session_fail_preview": "'''Нисмо могли да обрадимо вашу измену због губитка података сесије.'''\nПокушајте поново.\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите.",
        "nextn-title": "$1 {{PLURAL:$1|следећи резултат|следећа резултата|следећих резултата}}",
        "shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултата|резултата}} по страници",
        "viewprevnext": "Погледај ($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-exists": "'''Постоји и чланак под називом „[[:$1]]“.'''",
+       "searchmenu-exists": "<strong>Постоји и страница под називом „[[:$1]]“.</strong> {{PLURAL:$2|0=|Види такође резултате претраге.}}",
        "searchmenu-new": "<strong>Направите страницу „[[:$1]]“!</strong> {{PLURAL:$2|0=|Види такође резултате претраге.}}",
        "searchprofile-articles": "Чланци",
        "searchprofile-images": "Датотеке",
index fd5bf80..5d62903 100644 (file)
        "missing-article": "Tekst stranice pod nazivom „$1“ ($2) nije pronađen.\n\nUzrok ove greške je obično zastarela izmena ili veza do obrisane stranice.\n\nAko se ne radi o tome, onda ste verovatno pronašli grešku u softveru.\nPrijavite je [[Special:ListUsers/sysop|administratoru]] uz odgovarajuću vezu.",
        "missingarticle-rev": "(izmena#: $1)",
        "missingarticle-diff": "(razlika: $1, $2)",
-       "readonly_lag": "Baza podataka je zaključana dok se sporedni bazni serveri ne usklade s glavnim.",
+       "readonly_lag": "Baza podataka je automatski zaključana da bi se sekundarni serveri baze podataka uskladili s glavnim.",
        "internalerror": "Unutrašnja greška",
        "internalerror_info": "Unutrašnja greška: $1",
        "filecopyerror": "Ne mogu da umnožim datoteku „$1“ u „$2“.",
        "userinvalidcssjstitle": "'''Upozorenje:''' ne postoji tema „$1“.\nPrilagođene stranice CSS i javaskript počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ažurirano)",
        "note": "'''Napomena:'''",
-       "previewnote": "'''Imajte u vidu da je ovo samo pregled.'''\nVaše izmene još nisu sačuvane!",
+       "previewnote": "<strong>Ovo je pretpregled.</strong>\nVaše izmene još nisu sačuvane!",
        "continue-editing": "Idi na uređivački okvir",
        "previewconflict": "Ovaj pregled oslikava kako će tekst u tekstualnom okviru izgledati.",
        "session_fail_preview": "'''Nismo mogli da obradimo vašu izmenu zbog gubitka podataka sesije.'''\nPokušajte ponovo.\nAko i dalje ne radi, pokušajte da se [[Special:UserLogout|odjavite]] i ponovo prijavite.",
        "nextn-title": "$1 {{PLURAL:$1|sledeći rezultat|sledeća rezultata|sledećih rezultata}}",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
        "viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-exists": "'''Postoji i članak pod nazivom „[[:$1]]“.'''",
+       "searchmenu-exists": "<strong>Postoji i stranica pod nazivom „[[:$1]]“.</strong> {{PLURAL:$2|0=|Vidi takođe rezultate pretrage.}}",
        "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]“!</strong> {{PLURAL:$2|0=|Vidi takođe rezultate pretrage.}}",
        "searchprofile-articles": "Članci",
        "searchprofile-images": "Datoteke",
index c74e637..bad88a6 100644 (file)
        "listfiles-delete": "radera",
        "listfiles-summary": "Den här specialsidan visar alla filer som laddats upp.",
        "listfiles_search_for": "Sök efter filnamn:",
+       "listfiles-userdoesnotexist": "Användarkontot \"$1\" är inte registrerat.",
        "imgfile": "fil",
        "listfiles": "Fillista",
        "listfiles_thumb": "Miniatyrbild",
        "emailccsubject": "Kopia av ditt meddelande till $1: $2",
        "emailsent": "E-post har nu skickats",
        "emailsenttext": "Ditt e-postmeddelande har skickats",
-       "emailuserfooter": "Denna e-post skickades av $1 till $2 genom \"Skicka e-post\"-funktionen på {{SITENAME}}.",
+       "emailuserfooter": "Detta e-postmeddelande skickades av $1 till $2 med funktionen \"{{int:emailpage}}\" på {{SITENAME}}.",
        "usermessage-summary": "Lämnar systemmeddelande.",
        "usermessage-editor": "Systemmeddelare",
        "watchlist": "Bevakningslista",
        "feedback-error1": "Fel: Okänt resultat från API",
        "feedback-error2": "Fel: Redigeringen misslyckades",
        "feedback-error3": "Fel: Inget svar från API",
+       "feedback-error4": "Fel: Det gick inte att skicka till angiven återkopplingstitel",
        "feedback-message": "Meddelande:",
        "feedback-subject": "Ämne:",
        "feedback-submit": "Skicka",
        "log-name-pagelang": "Språkändringslogg",
        "log-description-pagelang": "Detta är en logg över ändringar i sidspråken.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ändrade}} sidspråket för $3 från $4 till $5.",
-       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar dem och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseenden från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-arkiven i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
+       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande {{PLURAL:$4|utseende|utseenden}}. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar {{PLURAL:$4|det|dem}} och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseenden från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-arkiven i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande {{PLURAL:$5|rad|rader}} i <code>LocalSettings.php</code> för att aktivera {{PLURAL:$5|det för närvarande installerade utseendet|alla för närvarande installerade utseenden}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
        "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseende från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiverad)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')",
index 97a26b9..2cfe460 100644 (file)
@@ -36,7 +36,8 @@
                        "아라",
                        "Kalyanasundar",
                        "தமிழ்த்தம்பி",
-                       "Macofe"
+                       "Macofe",
+                       "AntanO"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "upload_source_file": "(தங்களி்ன் கணினியிலிருந்து தங்களால் தேர்ந்தெடுக்கப்பட்ட கோப்பு)",
        "listfiles-summary": "இச்சிறப்புப் பக்கம் பதிவேற்றப்பட்ட கோப்புகளைப் பட்டியலிடுகிறது.",
        "listfiles_search_for": "பின்வரும் பெயருள்ள ஊடகக் கோப்பைத் தேடு:",
+       "listfiles-userdoesnotexist": "பயனர் கணக்கு \"$1\" பதியப்படவில்லை",
        "imgfile": "கோப்பு",
        "listfiles": "படிமங்களின் பட்டியல்",
        "listfiles_thumb": "நகம் அளவு சிறுபடம்",
index 33c7d5c..0988de6 100644 (file)
        "wrongpassword": "รหัสผ่านที่กรอกไม่ถูกต้อง \nโปรดลองอีกครั้ง",
        "wrongpasswordempty": "รหัสผ่านที่กรอกว่าง\nโปรดลองอีกครั้ง",
        "passwordtooshort": "รหัสผ่านต้องมีอย่างน้อย $1 อักขระ",
+       "passwordtoolong": "รหัสผ่านยาวกว่า $1 อักขระไม่ได้",
        "password-name-match": "รหัสผ่านต้องต่างจากชื่อผู้ใช้",
        "password-login-forbidden": "ห้ามใช้ชื่อผู้ใช้และรหัสผ่านนี้",
        "mailmypassword": "ตั้งรหัสผ่านใหม่",
        "missingcommentheader": "<strong>อย่าลืม:</strong> คุณยังไม่ได้ใส่หัวข้อ/พาดหัวสำหรับความเห็นนี้ \nถ้าคุณคลิก \"{{int:savearticle}}\" อีก จะบันทึกการแก้ไขของคุณโดยไม่มีหัวข้อ/พาดหัว",
        "summary-preview": "ตัวอย่างคำอธิบาย:",
        "subject-preview": "ตัวอย่างเรื่อง/พาดหัว:",
+       "previewerrortext": "เกิดข้อผิดพลาดขณะกำลังพยายามดูตัวอย่างการเปลี่ยนแปลงของคุณ",
        "blockedtitle": "ผู้ใช้ถูกบล็อก",
        "blockedtext": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก</strong>\n\nการบล็อกนี้ดำเนินการโดย $1\nซึ่งให้เหตุผลว่า ''$2''\n\n* เริ่มการบล็อก: $8\n* หมดเขตการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ได้\nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลให้ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้ความสามารถนี้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดแสดงรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
        "autoblockedtext": "เลขที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติ เพราะเคยมีผู้ใช้อื่นใช้ ซึ่งถูกบล็อกโดย $1\nโดยให้เหตุผลว่า\n\n:<em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
        "notextmatches": "ไม่พบข้อความหน้าตรงกัน",
        "prevn": "ก่อนหน้า $1",
        "nextn": "ถัดไป $1",
+       "prev-page": "หน้าก่อน",
+       "next-page": "หน้าถัดไป",
        "prevn-title": "$1 ผลลัพธ์ก่อนหน้า",
        "nextn-title": "$1 ผลลัพธ์ถัดไป",
        "shown-title": "แสดง $1 ผลลัพธ์ต่อหน้า",
        "listfiles-delete": "ลบ",
        "listfiles-summary": "หน้าพิเศษนี้แสดงไฟล์ทั้งหมดที่อัปโหลด",
        "listfiles_search_for": "ค้นหาชื่อสื่อ:",
+       "listfiles-userdoesnotexist": "บัญชีผู้ใช้ \"$1\" ไม่ได้ถูกลงทะเบียน",
        "imgfile": "ไฟล์",
        "listfiles": "รายการไฟล์",
        "listfiles_thumb": "รูปย่อ",
index a910adf..63528e3 100644 (file)
@@ -70,7 +70,8 @@
                        "Mavrikant",
                        "Ayrıntılı Bilgi",
                        "Gokalpselamet",
-                       "Macofe"
+                       "Macofe",
+                       "Nighteagle2000"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "notextmatches": "Hiçbir sayfada bulunamadı",
        "prevn": "önceki {{PLURAL:$1|$1}}",
        "nextn": "sonraki {{PLURAL:$1|$1}}",
+       "prev-page": "önceki sayfa",
+       "next-page": "sonraki sayfa",
        "prevn-title": "Önceki $1 {{PLURAL:$1|sonuç|sonuç}}",
        "nextn-title": "Sonraki $1 {{PLURAL:$1|sonuç|sonuç}}",
        "shown-title": "Sayfa başına $1 {{PLURAL:$1|sonuç|sonuç}} göster",
        "prefs-rc": "Son değişiklikler",
        "prefs-watchlist": "İzleme listesi",
        "prefs-editwatchlist": "İzleme listesini düzenle",
+       "prefs-editwatchlist-label": "İzleme listesinizdeki girişleri düzenle",
+       "prefs-editwatchlist-edit": "İzleme listesini gör ve düzenle",
+       "prefs-editwatchlist-raw": "Ham izleme listesini düzenle",
+       "prefs-editwatchlist-clear": "İzleme listesini temizle",
        "prefs-watchlist-days": "İzleme listesinde görüntülenecek gün sayısı:",
        "prefs-watchlist-days-max": "en fazla $1 {{PLURAL:$1|gün|gün}}",
        "prefs-watchlist-edits": "Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:",
        "listfiles-delete": "sil",
        "listfiles-summary": "Bu özel sayfa yüklenen tüm dosyaları gösterir.",
        "listfiles_search_for": "Medya adı ara:",
+       "listfiles-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "imgfile": "dosya",
        "listfiles": "Dosya listesi",
        "listfiles_thumb": "Küçük resim",
index 636129c..46c7b43 100644 (file)
        "searchrelated": "пов'язаний",
        "searchall": "усі",
        "showingresults": "Нижче {{PLURAL:$1|показане|показані|показані}} '''$1''' {{PLURAL:$1|результат|результати|результатів}}, починаючи з №&nbsp;'''$2'''",
-       "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатів|<strong>$1</strong> результати}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
+       "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результату|<strong>$1</strong> результатів}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> із <strong>$3</strong>|Результати <strong>$1 — $2</strong> із <strong>$3</strong>}}",
        "search-nonefound": "Не знайдено результатів, що відповідають запиту.",
        "powersearch-legend": "Розширений пошук",
        "grouppage-sysop": "{{ns:project}}:Адміністратори",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократи",
        "grouppage-suppress": "{{ns:project}}:Ревізори",
-       "right-read": "Ð\9fерегляд сторінок",
-       "right-edit": "Редагування сторінок",
-       "right-createpage": "Створення сторінок (але не обговорень)",
-       "right-createtalk": "Створення обговорень сторінок",
-       "right-createaccount": "Створення нових облікових записів",
-       "right-minoredit": "Ð\9fозначення редагувань як незначні",
-       "right-move": "Ð\9fерейменування сторінок",
-       "right-move-subpages": "Ð\9fерейменування сторінок і їх підсторінок",
+       "right-read": "перегляд сторінок",
+       "right-edit": "редагування сторінок",
+       "right-createpage": "створення сторінок (але не обговорень)",
+       "right-createtalk": "створення обговорень сторінок",
+       "right-createaccount": "створення нових облікових записів",
+       "right-minoredit": "позначення редагувань як незначні",
+       "right-move": "перейменування сторінок",
+       "right-move-subpages": "перейменування сторінок і їх підсторінок",
        "right-move-rootuserpages": "перейменування кореневих сторінок користувачів",
        "right-move-categorypages": "перейменування сторінок категорій",
        "right-movefile": "перейменування файлів",
-       "right-suppressredirect": "Ð\9dестворення перенаправлення зі старої назви на нову при перейменуванні сторінки",
-       "right-upload": "Ð\97авантаження файлів",
-       "right-reupload": "Ð\9fерезаписування існуючих файлів",
-       "right-reupload-own": "Ð\9fерезаписування існуючих файлів, завантажених тим самим користувачем",
-       "right-reupload-shared": "Ð\9fідміна файлів зі спільного сховища локальними",
+       "right-suppressredirect": "нестворення перенаправлення зі старої назви на нову при перейменуванні сторінки",
+       "right-upload": "завантаження файлів",
+       "right-reupload": "перезаписування існуючих файлів",
+       "right-reupload-own": "перезаписування існуючих файлів, завантажених тим самим користувачем",
+       "right-reupload-shared": "підміна файлів зі спільного сховища локальними",
        "right-upload_by_url": "Завантаження файлів за URL-адресами",
-       "right-purge": "Ð\9eÑ\87иÑ\89еннÑ\8f ÐºÐµÑ\88Ñ\83 Ð´Ð»Ñ\8f Ñ\81Ñ\82оÑ\80Ñ\96нки Ð±ÐµÐ· Ñ\81Ñ\82оÑ\80Ñ\96нки підтвердження",
-       "right-autoconfirmed": "Ð\91ез обмежень швидкості за IP",
-       "right-bot": "Ð\90втоматична обробка",
-       "right-nominornewtalk": "Ð\9dезначні редагування на сторінках обговорень користувачів не викликають попередження про нові повідомлення",
-       "right-apihighlimits": "Розширення обмежень на виконання API-запитів",
-       "right-writeapi": "Ð\92икористання API для запису",
-       "right-delete": "Ð\92илучення сторінок",
+       "right-purge": "оÑ\87иÑ\89еннÑ\8f ÐºÐµÑ\88Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нки Ð±ÐµÐ· Ð½ÐµÐ¾Ð±Ñ\85Ñ\96дноÑ\81Ñ\82Ñ\96 підтвердження",
+       "right-autoconfirmed": "без обмежень швидкості за IP",
+       "right-bot": "автоматична обробка",
+       "right-nominornewtalk": "незначні редагування на сторінках обговорень користувачів не викликають попередження про нові повідомлення",
+       "right-apihighlimits": "розширення обмежень на виконання API-запитів",
+       "right-writeapi": "використання API для запису",
+       "right-delete": "вилучення сторінок",
        "right-bigdelete": "Вилучення сторінок з великою історією",
-       "right-deletelogentry": "Ð\92илучення та відновлення окремих записів журналу",
-       "right-deleterevision": "Ð\92илÑ\83Ñ\87еннÑ\8f Ñ\96 відновлення окремих версій сторінок",
-       "right-deletedhistory": "Ð\9fерегляд історії вилучених сторінок без перегляду вилученого тексту",
+       "right-deletelogentry": "вилучення та відновлення окремих записів журналу",
+       "right-deleterevision": "вилÑ\83Ñ\87еннÑ\8f Ñ\82а відновлення окремих версій сторінок",
+       "right-deletedhistory": "перегляд історії вилучених сторінок без перегляду вилученого тексту",
        "right-deletedtext": "перегляд вилученого тексту та змін між вилученими версіями",
-       "right-browsearchive": "Ð\9fошук вилучених сторінок",
-       "right-undelete": "Ð\92ідновлення сторінок",
-       "right-suppressrevision": "Ð\9fеÑ\80еглÑ\8fд, Ð¿Ñ\80иÑ\85овання та відновлення конкретних змін сторінок від будь-якого користувача",
+       "right-browsearchive": "пошук вилучених сторінок",
+       "right-undelete": "відновлення сторінок",
+       "right-suppressrevision": "пеÑ\80еглÑ\8fд, Ð¿Ñ\80иÑ\85овÑ\83вання та відновлення конкретних змін сторінок від будь-якого користувача",
        "right-viewsuppressed": "Перегляд змін, приховаих від усіх користувачів",
-       "right-suppressionlog": "Ð\9fерегляд приватних журналів",
-       "right-block": "Ð\97аборона редагувань для інших дописувачів",
+       "right-suppressionlog": "перегляд приватних журналів",
+       "right-block": "заборона редагувань для інших дописувачів",
        "right-blockemail": "Блокування користувачам надсилання електронної пошти",
        "right-hideuser": "Блокування імені користувача і приховування його",
-       "right-ipblock-exempt": "Уникнення блокування за IP-адресою, автоблокування і блокування діапазонів",
-       "right-proxyunbannable": "Уникнення автоматичного блокування проксі-серверів",
+       "right-ipblock-exempt": "уникнення блокування за IP-адресою, автоблокування і блокування діапазонів",
+       "right-proxyunbannable": "уникнення автоматичного блокування проксі-серверів",
        "right-unblockself": "розблоковування себе",
-       "right-protect": "Ð\97мÑ\96на Ñ\80Ñ\96внÑ\96в Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ñ\82а Ñ\80едагÑ\83ваннÑ\8f Ð·Ð°Ñ\85иÑ\89ениÑ\85 ÐºÐ°Ñ\81кадно сторінок",
+       "right-protect": "змÑ\96на Ñ\80Ñ\96внÑ\96в Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ñ\82а Ñ\80едагÑ\83ваннÑ\8f ÐºÐ°Ñ\81кадно Ð·Ð°Ñ\85иÑ\89ениÑ\85 сторінок",
        "right-editprotected": "редагування сторінок з рівнем захисту «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "редагування сторінок з рівнем захисту «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "Редагувати модель вмісту сторінки",
-       "right-editinterface": "Редагування інтерфейсу користувача",
-       "right-editusercssjs": "Редагування CSS- і JS-файлів інших користувачів",
-       "right-editusercss": "Редагування CSS-файлів інших користувачів",
-       "right-edituserjs": "Редагування JS-файлів інших користувачів",
-       "right-editmyusercss": "Редагування власних CSS-файлів користувача",
-       "right-editmyuserjs": "Редагування власних JavaScript-файлів користувача",
-       "right-viewmywatchlist": "Ð\9fеÑ\80еглÑ\8fдаÑ\82и Ð²Ð»Ð°Ñ\81ний Ñ\81пиÑ\81ок спостереження",
-       "right-editmywatchlist": "Редагувати власний список спостереження. Зверніть увагу, що деякі дії будуть додавати сторінки навіть без такого права.",
-       "right-viewmyprivateinfo": "Ð\9fерегляд власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
-       "right-editmyprivateinfo": "Редагування власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
-       "right-editmyoptions": "Редагування власних налаштувань",
-       "right-rollback": "Швидкий відкіт редагувань останнього користувача, який редагував сторінку",
-       "right-markbotedits": "Ð\9fозначення відкинутих редагувань як редагування бота",
-       "right-noratelimit": "Ð\9dема обмежень за швидкістю",
-       "right-import": "Імпорт сторінок з інших вікі",
+       "right-editinterface": "редагування інтерфейсу користувача",
+       "right-editusercssjs": "редагування CSS- і JS-файлів інших користувачів",
+       "right-editusercss": "редагування CSS-файлів інших користувачів",
+       "right-edituserjs": "редагування JS-файлів інших користувачів",
+       "right-editmyusercss": "редагування власних CSS-файлів користувача",
+       "right-editmyuserjs": "редагування власних JavaScript-файлів користувача",
+       "right-viewmywatchlist": "пеÑ\80еглÑ\8fд Ð²Ð»Ð°Ñ\81ного Ñ\81пиÑ\81кÑ\83 спостереження",
+       "right-editmywatchlist": "редагування власного списку спостереження; зверніть увагу, що деякі дії будуть додавати сторінки навіть без такого права.",
+       "right-viewmyprivateinfo": "перегляд власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
+       "right-editmyprivateinfo": "редагування власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
+       "right-editmyoptions": "редагування власних налаштувань",
+       "right-rollback": "швидкий відкіт редагувань останнього користувача, який редагував сторінку",
+       "right-markbotedits": "позначення відкинутих редагувань як редагування бота",
+       "right-noratelimit": "нема обмежень за швидкістю",
+       "right-import": "імпорт сторінок з інших вікі",
        "right-importupload": "Імпорт сторінок через завантаження файлів",
-       "right-patrol": "Ð\9fозначення редагувань патрульованими",
-       "right-autopatrol": "Ð\90втоматичне позначення редагувань патрульованими",
+       "right-patrol": "позначення редагувань патрульованими",
+       "right-autopatrol": "автоматичне позначення редагувань патрульованими",
        "right-patrolmarks": "Перегляд патрульованих сторінок у нових редагуваннях",
-       "right-unwatchedpages": "Ð\9fерегляд списку сторінок, за якими ніхто не спостерігає",
-       "right-mergehistory": "Ð\9eб'єднання історій редагувань сторінок",
+       "right-unwatchedpages": "перегляд списку сторінок, за якими ніхто не спостерігає",
+       "right-mergehistory": "об'єднання історій редагувань сторінок",
        "right-userrights": "Зміна всіх прав користувачів",
        "right-userrights-interwiki": "Зміна прав користувачів у інших вікі",
        "right-siteadmin": "Блокування і розблокування бази даних",
        "right-override-export-depth": "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5",
        "right-sendemail": "надсилання електронної пошти іншим користувачам",
        "right-passwordreset": "Перегляд повідомлень електронної пошти для зміни паролю",
-       "right-managechangetags": "Створення та вилучення [[Special:Tags|міток]] з бази даних",
+       "right-managechangetags": "створення та вилучення [[Special:Tags|міток]] з бази даних",
        "newuserlogpage": "Журнал нових користувачів",
        "newuserlogpagetext": "Список нещодавно зареєстрованих користувачів.",
        "rightslog": "Журнал прав користувача",
        "listgrouprights-members": "(список членів)",
        "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
        "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
-       "listgrouprights-addgroup": "Ð\9cожливість додавати в {{PLURAL:$2|1=групу|групи}}: $1",
-       "listgrouprights-removegroup": "Ð\9cожливість виключати з {{PLURAL:$2|1=групи|груп}}: $1",
-       "listgrouprights-addgroup-all": "Ð\9cожливість додавати до всіх груп",
-       "listgrouprights-removegroup-all": "Ð\9cожливÑ\96Ñ\81Ñ\82Ñ\8c Ð²Ð¸ÐºÐ»Ñ\8eÑ\87аÑ\82и Ð·Ñ\96 Ð²сіх груп",
+       "listgrouprights-addgroup": "можливість додавати в {{PLURAL:$2|1=групу|групи}}: $1",
+       "listgrouprights-removegroup": "можливість виключати з {{PLURAL:$2|1=групи|груп}}: $1",
+       "listgrouprights-addgroup-all": "можливість додавати до всіх груп",
+       "listgrouprights-removegroup-all": "можливÑ\96Ñ\81Ñ\82Ñ\8c Ð²Ð¸ÐºÐ»Ñ\8eÑ\87аÑ\82и Ð· Ñ\83сіх груп",
        "listgrouprights-addgroup-self": "може додавати {{PLURAL:$2|1=групу|групи}} до свого облікового запису: $1",
        "listgrouprights-removegroup-self": "Можливість вилучити зі свого облікового запису {{PLURAL:$2|1=групу|групи}}: $1",
        "listgrouprights-addgroup-self-all": "Може додавати всі групи до свого облікового запису",
index fa623c1..d5a5d78 100644 (file)
        "notextmatches": "נישטאָ קיין בלעטער מיט פאַסנדיקן אינהאַלט",
        "prevn": "{{PLURAL:$1|פֿריערדיקער|$1 פֿריערדיקע}}",
        "nextn": "{{PLURAL:$1|$1}} קומענדיגע",
+       "prev-page": "פֿריערדיגער בלאַט",
+       "next-page": "קומענדיגער בלאַט",
        "prevn-title": "{{PLURAL:$1|פֿריערדיגער $1 רעזולטאַט|פֿריערדיגע $1 רעזולטאַטן}}",
        "nextn-title": "{{PLURAL:$1|קומענדיקער רעזולטאַט|קומענדיקע $1 רעזולטאַטן}}",
        "shown-title": "ווײַזן $1  {{PLURAL:$1|רעזולטאַט| רעזולטאַטן}} אויף א בלאַט",
        "emailccsubject": "קאפיע פון אײַער מעלדונג צו $1: $2",
        "emailsent": "ע-פאסט געשיקט",
        "emailsenttext": "אײַער אי-בריוו איז געשיקט געווארן.",
-       "emailuserfooter": "דער בליצבריוו איז געשיקט געווארן דורך$1 צו $2 מיט דער  \"שיקן בליצבריוו\"  פֿונקציע בײַ {{SITENAME}}.",
+       "emailuserfooter": "דער בליצבריוו איז געשיקט געווארן דורך$1 צו $2 מיט דער  \"{{int:emailpage}}\" פֿונקציע בײַ {{SITENAME}}.",
        "usermessage-summary": "איבערלאזן סיסטעם אָנזאָג",
        "usermessage-editor": "סיסטעם שליח",
        "usermessage-template": "MediaWiki:באניצער־מעלדונג",
index 7c6e698..cb627d7 100644 (file)
@@ -40,6 +40,7 @@
        "tog-watchdefault": "將我修改嘅頁同檔案加入監視清單",
        "tog-watchmoves": "將我移動嘅頁同檔案加入監視清單",
        "tog-watchdeletion": "將我刪除嘅頁同檔案加入監視清單",
+       "tog-watchrollback": "將我反轉過嘅頁加落監視清單",
        "tog-minordefault": "預設全部編輯做小修改",
        "tog-previewontop": "喺修改欄上方顯示預覽",
        "tog-previewonfirst": "第一次修改時顯示預覽",
        "pool-queuefull": "隊池已滿",
        "pool-errorunknown": "未知嘅錯誤",
        "pool-servererror": "用唔到程序計數服務 ($1)。",
+       "poolcounter-usage-error": "用法出錯:$1",
        "aboutsite": "關於{{SITENAME}}",
        "aboutpage": "Project:關於",
        "copyright": "除非另外講明,響呢版度嘅內容係根據$1嘅條款發佈。",
        "disclaimers": "免責聲明",
        "disclaimerpage": "Project:一般免責聲明",
        "edithelp": "編輯協助",
+       "helppage-top-gethelp": "幫手",
        "mainpage": "頭版",
        "mainpage-description": "頭版",
        "policy-url": "Project:政策",
        "readonly_lag": "當從伺服器追緊主伺服器時,資料庫會自動被鎖",
        "internalerror": "內部錯誤",
        "internalerror_info": "內部錯誤: $1",
+       "internalerror-fatal-exception": "嚴重例外類型「$1」",
        "filecopyerror": "檔案 \"$1\" 抄唔到去 \"$2\"。",
        "filerenameerror": "檔案 \"$1\" 唔改得做 \"$2\"。",
        "filedeleteerror": "檔案 \"$1\" 唔刪得。",
        "wrongpassword": "密碼唔啱,麻煩你再試多次。",
        "wrongpasswordempty": "你都未入密碼,唔該再試多次啦。",
        "passwordtooshort": "你嘅密碼最少要有$1個半形字元。",
+       "passwordtoolong": "密碼唔可以長過{{PLURAL:$1|1個字元|$1個字元}}。",
        "password-name-match": "你嘅密碼一定要同你嘅用戶名唔一樣。",
        "password-login-forbidden": "呢個用戶名同密碼嘅利用係被禁止嘅。",
        "mailmypassword": "重設密碼",
        "anoneditwarning": "'''警告:'''閣下重未登入。閣下嘅 IP 地址會喺爾一版嘅修訂歷史裡邊記錄落嚟。",
        "anonpreviewwarning": "''你重未登入,你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。''",
        "missingsummary": "'''提醒:''' 你未提供編輯摘要。如果你再撳多一下「{{int:savearticle}}」嘅話,咁你儲存嘅編輯就會無摘要。",
+       "selfredirect": "<strong>警告:</strong> 你個跳轉彈返去自己度。\n你可能設錯咗跳轉目標,或者改錯咗版。\n如果你再撳多「{{int:savearticle}}」一下,就會照幫你開呢個跳轉。",
        "missingcommenttext": "請輸入一個註解。",
        "missingcommentheader": "'''提醒:'''你響呢個註解度並無提供一個主題/標題。如果你再撳一次「{{int:savearticle}}」,你嘅編輯就會無題。",
        "summary-preview": "摘要預覽:",
        "subject-preview": "標題/頭條預覽:",
+       "previewerrortext": "預覽你嘅修改嗰陣出錯。",
        "blockedtitle": "用戶已經封鎖",
        "blockedtext": "你嘅用戶名或者 IP 位址已經被 $1 封咗。\n\n呢次封鎖係由$1所封嘅。當中嘅原因係''$2''。\n\n* 呢次封鎖嘅開始時間係:$8\n* 呢次封鎖嘅到期時間係:$6\n* 對於被封鎖者:$7\n\n你可以聯絡 $1 或者其他嘅[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論呢次封鎖。\n除非你已經響你嘅[[Special:Preferences|戶口喜好設定]]入面設定咗有效嘅電郵地址,否則你係唔可以用「電郵呢個用戶」嘅功能。當設定咗一個有效嘅電郵地址之後,呢個功能係唔會封鎖嘅。\n\n你現時嘅 IP 位址係 $3 ,而個封鎖 ID 係 #$5。 請你喺你嘅查詢都註明以上封鎖嘅資料。",
        "autoblockedtext": "你嘅IP地址已經被自動封鎖,由於之前嘅另一位用戶係畀$1封咗。\n而封鎖嘅原因係:\n\n:''$2''\n\n* 呢次封鎖嘅開始時間係:$8\n* 呢次封鎖嘅到期時間係:$6\n* 對於被封鎖者:$7\n\n你可以聯絡 $1 或者其他嘅[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論呢次封鎖。\n\n除非你已經響你嘅[[Special:Preferences|戶口喜好設定]]入面設定咗有效嘅電郵地址,否則你係唔可以用「電郵呢個用戶」嘅功能。當設定咗一個有效嘅電郵地址之後,呢個功能係唔會封鎖嘅。\n\n你現時用緊嘅 IP 地址係 $3,個封鎖 ID 係 #$5。 請喺你嘅查詢都註明呢個封鎖上面嘅資料。",
        "postedit-confirmation-saved": "呢版經已儲存咗。",
        "edit-already-exists": "唔可以開一新版。\n佢已經存在。",
        "defaultmessagetext": "預設訊息文字",
+       "invalid-content-data": "無效嘅內容資料",
        "content-not-allowed-here": "「$1」唔可以輸入[[$2]]。",
        "editwarning-warning": "離開爾一版會令到閣下嘅修改唔見咗。\n閣下可以喺喜好設定嘅\"{{int:prefs-editing}}\"小節度停用爾個警告。",
        "editpage-notsupportedcontentformat-title": "唔支持爾種內容格式。",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript程式語言",
        "content-model-css": "層疊樣式表",
+       "content-json-empty-object": "吉嘅嘢",
+       "content-json-empty-array": "吉嘅陣列",
        "duplicate-args-category": "模用重複參數嘅嘅版面",
        "expensive-parserfunction-warning": "警告: 呢一版有太多耗費嘅語法功能呼叫。\n\n佢應該少過$2次呼叫,佢而家係$1次呼叫。",
        "expensive-parserfunction-category": "響版度有太多嘅耗費嘅語法功能呼叫",
        "undo-success": "呢個編輯可以取消。請檢查一下個差異去確認呢個係你要去做嘅,跟住儲存下面嘅更改去完成編輯。",
        "undo-failure": "呢個編輯唔能夠取消,由於同途中嘅編輯有衝突。",
        "undo-norev": "呢個編輯唔能夠取消,由於佢唔存在或者刪除咗。",
+       "undo-nochange": "呢個編輯睇嚟經已一早取消咗。",
        "undo-summary": "取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所做嘅修訂 $1",
+       "undo-summary-username-hidden": "取消匿埋咗嘅用戶嘅修改版本 $1",
        "cantcreateaccounttitle": "唔可以開新戶口",
        "cantcreateaccount-text": "由呢個IP地址 ('''$1''') 開嘅新戶口已經被[[User:$3|$3]]封鎖。\n\n當中俾$3封鎖嘅原因係''$2''",
+       "cantcreateaccount-range-text": "由呢個IP地址範圍'''$1'''(包括你個IP '''$4''')開嘅新戶口已經畀[[User:$3|$3]]封鎖咗。\n\n$3畀嘅理由係''$2''",
        "viewpagelogs": "睇呢頁嘅日誌",
        "nohistory": "呢版冇歷史。",
        "currentrev": "最新嘅修訂",
        "revdelete-no-file": "指定嘅檔案未存在。",
        "revdelete-show-file-confirm": "你係咪真係想去睇響$2 $3刪咗 \"$1\" 嘅檔案修訂?",
        "revdelete-show-file-submit": "係",
+       "revdelete-selected-text": "揀咗[[:$2]]嘅$1個版本:",
+       "revdelete-selected-file": "揀咗[[:$2]]嘅$1個檔案版本:",
        "logdelete-selected": "揀咗嘅日誌事件:",
+       "revdelete-text-text": "刪咗嘅版本重喺修改紀錄度,但入面嘅內容唔畀公眾睇。",
+       "revdelete-text-file": "刪咗嘅檔案版本重喺檔案修改紀錄度,但入面嘅內容唔畀公眾睇。",
+       "logdelete-text": "刪咗嘅日誌項目重喺日誌度,但入面嘅內容唔畀公眾睇。",
+       "revdelete-text-others": "其他管理員可以睇收埋咗嘅內容同埋恢復返佢,除非設咗額外條件。",
        "revdelete-confirm": "請確認你肯定去做嘅話,你就要明白到後果,同埋呢個程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
        "revdelete-suppress-text": "壓制'''只'''應該響下面嘅情況之下進行:\n* 可能係誹謗嘅資料\n* 唔合適嘅個人資料\n*: ''屋企地址、電話號碼、身份證號碼等。''",
        "revdelete-legend": "設定可見性嘅限制",
        "mergehistory-empty": "無修訂可以合併",
        "mergehistory-success": "[[:$1]]嘅$3次修訂已經成功噉合併到[[:$2]]。",
        "mergehistory-fail": "歷史合併唔到,請重新檢查嗰一版同埋時間參數。",
+       "mergehistory-fail-toobig": "唔能夠合併編輯紀錄,因為入面超過咗$1個版本嘅上限。",
        "mergehistory-no-source": "來源頁$1唔存在。",
        "mergehistory-no-destination": "目的頁$1唔存在。",
        "mergehistory-invalid-source": "來源頁一定要係一個有效嘅標題。",
        "mergelogpagetext": "下面係一個最近由一版嘅修訂記錄合併到另一個嘅一覽。",
        "history-title": "「$1」嘅修訂歷史",
        "difference-title": "\"$1\" 版本嘅差別",
+       "difference-title-multipage": "「$1」同「$2」嘅差別",
        "difference-multipage": "(版之間嘅差異)",
        "lineno": "第$1行:",
        "compareselectedversions": "比較被選嘅修訂",
        "showhideselectedversions": "顯示/隱藏揀咗嘅修訂",
        "editundo": "復原",
+       "diff-empty": "(無差別)",
        "diff-multi-sameuser": "(無顯示同一用戶中途改嘅 $1 個版本)",
+       "diff-multi-otherusers": "(無顯示{{PLURAL:$2|另一個用戶|另外$2個用戶}}中途改嘅 $1 個版本)",
        "diff-multi-manyusers": "(由$2位更多用戶所做嘅$1個中途修訂冇顯示到)",
        "searchresults": "搵嘢結果",
        "searchresults-title": "對\"$1\"嘅搵嘢結果",
        "notextmatches": "冇頁面文字符合",
        "prevn": "前$1",
        "nextn": "後{{PLURAL:$1|$1}}",
+       "prev-page": "上一版",
+       "next-page": "下一版",
        "prevn-title": "前$1項結果",
        "nextn-title": "後$1項結果",
        "shown-title": "每版顯示$1項結果",
        "search-result-category-size": "$1位成員 ($2個細類,$3個檔案)",
        "search-redirect": "(跳轉 $1)",
        "search-section": "(小節 $1)",
+       "search-category": "(類 $1)",
+       "search-file-match": "(夾啱樓案内容)",
        "search-suggest": "你係唔係搵: $1",
        "search-interwiki-caption": "姊妹計劃",
-       "search-interwiki-default": "$1項結果:",
+       "search-interwiki-default": "嚟自$1嘅結果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "有關",
        "searchrelated": "有關",
        "searchall": "全部",
        "showingresults": "'自#'''$2'''起顯示最多'''$1'''個結果。",
+       "showingresultsinrange": "下面顯示由第 <strong>$2</strong> 個到第 <strong>$3</strong> 個入面嘅第 {{PLURAL:$1|<strong>$1</strong> 個結果}}:",
        "search-showingresults": "{{PLURAL:$4|第 <strong>$1</strong>個結果,一共有 <strong>$3</strong> 個|第 <strong>$1 - $2</strong> 個結果,一共有 <strong>$3</strong> 個}}",
        "search-nonefound": "響個查詢度無結果配合。",
        "powersearch-legend": "進階搵嘢",
        "powersearch-togglelabel": "检查:",
        "powersearch-toggleall": "全部",
        "powersearch-togglenone": "無",
+       "powersearch-remember": "記住今次選擇方便第時搵嘢用返",
        "search-external": "出面搵嘢",
        "searchdisabled": "{{SITENAME}}嘅搜尋功能已經關閉。你可以利用Google嚟搵。不過佢哋對{{SITENAME}}嘅索引可能唔係最新嘅。",
+       "search-error": "搵嘢嗰陣出錯:$1",
        "preferences": "喜好設定",
        "mypreferences": "自訂喜好",
        "prefs-edits": "編輯數:",
+       "prefsnologintext2": "請簽到去改你嘅自訂喜好。",
        "prefs-skin": "畫面",
        "skin-preview": "預覽",
        "datedefault": "冇喜好",
        "prefs-labs": "實驗性嘅特色",
+       "prefs-user-pages": "用戶頁",
        "prefs-personal": "用戶簡介",
        "prefs-rc": "最近更改",
        "prefs-watchlist": "監視清單",
+       "prefs-editwatchlist": "編輯監視清單",
+       "prefs-editwatchlist-label": "編輯監視清單入面嘅項目:",
+       "prefs-editwatchlist-edit": "睇下同刪走你個編輯監視清單入面嘅標題",
+       "prefs-editwatchlist-raw": "編輯原始監視清單",
+       "prefs-editwatchlist-clear": "清理你嘅監視清單",
        "prefs-watchlist-days": "監視清單嘅顯示日數:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "最多 $1 日",
        "prefs-watchlist-edits": "喺加強版監視清單度嘅最多顯示更改數:",
        "prefs-watchlist-edits-max": "最大數量:1000",
        "prefs-watchlist-token": "監視清單幣:",
        "prefs-misc": "雜項",
        "prefs-resetpass": "改密碼",
+       "prefs-changeemail": "改電郵地址",
+       "prefs-setemail": "入電郵地址",
        "prefs-email": "電郵選項",
        "prefs-rendering": "外觀",
        "saveprefs": "儲存",
-       "restoreprefs": "恢復全部預設設定",
+       "restoreprefs": "恢復全部預設設定(喺所有項目)",
        "prefs-editing": "編輯中",
        "rows": "行數:",
        "columns": "列數:",
        "recentchangesdays-max": "最多 $1 日",
        "recentchangescount": "預設顯示嘅編輯數:",
        "prefs-help-recentchangescount": "呢個包埋最近修改、頁歷史同埋日誌紀錄。",
+       "prefs-help-watchlist-token2": "呢個係網上訂閱你個監視清單嘅密匙。\n任何人只要知道個密匙,就會睇到你個監視清單,所以唔好畀人知。\n如果有需要嘅話,[[Special:ResetTokens|你可以重設佢]]。",
        "savedprefs": "你嘅喜好設定已經儲存。",
        "timezonelegend": "時區:",
        "localtime": "本地時間:",
-       "timezoneuseserverdefault": "用伺服器預設值",
+       "timezoneuseserverdefault": "用維基預設值($1)",
        "timezoneuseoffset": "其他 (指定偏移)",
        "servertime": "伺機器時間:",
        "guesstimezone": "由瀏覽器填上",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
        "allowemail": "由其它用戶啟用電子郵件",
-       "prefs-searchoptions": "搵嘢選項",
+       "prefs-searchoptions": "搵嘢",
        "prefs-namespaces": "空間名",
        "default": "預設",
        "prefs-files": "檔案",
        "prefs-reset-intro": "你可以用呢版去重設你嘅喜好設定到網站預設值。呢個動作無得番轉頭。",
        "prefs-emailconfirm-label": "電郵確認:",
        "youremail": "電郵:",
-       "username": "用戶名:",
-       "prefs-memberingroups": "{{PLURAL:$1|一|多}}組嘅成員:",
+       "username": "{{GENDER:$1|用戶名}}:",
+       "prefs-memberingroups": "{{PLURAL:$1|組}}嘅{{GENDER:$2|成員}}:",
        "prefs-registration": "註冊時間:",
        "yourrealname": "真名:",
        "yourlanguage": "話:",
-       "yourvariant": "變換:",
+       "yourvariant": "內容語言變換:",
+       "prefs-help-variant": "你想喺呢度嘅內容顯示嘅語言變換。",
        "yournick": "新花名:",
        "prefs-help-signature": "響討論版嘅評論應該要用 \"<nowiki>~~~~</nowiki>\" 簽名,噉就會轉做你嘅簽名同埋一個時間截記。",
        "badsig": "無效嘅程式碼簽名。檢查吓 HTML 有無錯。",
        "badsiglength": "你嘅花名太長喇。\n唔長得過$1個字元。",
-       "yourgender": "性別:",
-       "gender-unknown": "æ\9cªæ\8c\87å®\9a",
-       "gender-male": "",
-       "gender-female": "女",
-       "prefs-help-gender": "å\8f¯é\81¸: ç\94¨å\9a\9fæ\95´è»\9f件æ\80§å\88¥æ\8c\87å®\9aã\80\82呢項資料將會被公開。",
+       "yourgender": "你想點畀人稱呼?",
+       "gender-unknown": "æ\88\91å\94\94æ\83³è¬\9b",
+       "gender-male": "佢寫維基",
+       "gender-female": "å§\96寫維å\9fº",
+       "prefs-help-gender": "å\91¢é \85å\8f¯ä»¥è\87ªå·±æ\8f\80å¡«å®\9aå\94\94å¡«ã\80\82\n系統æ\9c\83ç\94¨å\91¢é \85è³\87æ\96\99å\9a\9få\88¤æ\96·é»\9eç\94¨é\81©ç\95¶èª\9eæ³\95å\8e»ç¨±å\91¼ä½ ã\80\82\n呢項資料將會被公開。",
        "email": "電郵",
-       "prefs-help-realname": "真名可以唔填。\n如果你畀埋佢,有需要嘅時候會用佢來標示你嘅工夫。",
+       "prefs-help-realname": "真名可以揀填定唔填。\n如果你畀埋佢,可能會用佢嚟標示你嘅貢獻。",
        "prefs-help-email": "電郵地址可以唔填,但當你唔記得咗你個密碼嗰陣需要利用電郵地址將新密碼重設寄番畀你。",
        "prefs-help-email-others": "亦可以響人哋唔知你電郵地址嘅情況之下都可以聯絡你。",
        "prefs-help-email-required": "需要電郵地址。",
        "prefs-signature": "簽名",
        "prefs-dateformat": "日期格式",
        "prefs-timeoffset": "時間偏移",
-       "prefs-advancedediting": "進階選項",
+       "prefs-advancedediting": "普通選項",
+       "prefs-editor": "編輯",
+       "prefs-preview": "預覽",
        "prefs-advancedrc": "進階選項",
        "prefs-advancedrendering": "進階選項",
        "prefs-advancedsearchoptions": "進階選項",
        "prefs-advancedwatchlist": "進階選項",
        "prefs-displayrc": "顯示選項",
        "prefs-displaywatchlist": "顯示選項",
+       "prefs-tokenwatchlist": "密匙",
        "prefs-diffs": "差異",
+       "prefs-help-prefershttps": "呢項喜好設定會喺你下次簽到先至開始生效。",
+       "prefswarning-warning": "你改嘅喜好設定改動重未記低。\n如果你未撳「$1」就走咗,你嘅喜好設定唔會有更新。",
        "email-address-validity-valid": "電郵地址睇嚟有效",
        "email-address-validity-invalid": "請打一個有效嘅電郵地址",
        "userrights": "用戶權限管理",
        "userrights-lookup-user": "管理用戶組",
        "userrights-user-editname": "輸入一個用戶名:",
        "editusergroup": "編輯用戶組",
-       "editinguser": "改緊用戶'''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]]) 嘅用戶權限",
+       "editinguser": "改緊<strong>[[User:$1|$1]]</strong>嘅用戶權限 $2",
        "userrights-editusergroup": "編輯用戶組",
        "saveusergroups": "儲存用戶組",
        "userrights-groupsmember": "屬於:",
        "userrights-no-interwiki": "你並無權限去編輯響其它wiki嘅用戶權限。",
        "userrights-nodatabase": "資料庫$1唔存在或者唔係本地嘅。",
        "userrights-nologin": "你一定要以操作員戶口[[Special:UserLogin|登入]]咗之後先可以指定用戶權限。",
-       "userrights-notallowed": "你嘅戶口無權限去指定用戶權限。",
+       "userrights-notallowed": "你無權限去加減用戶權限。",
        "userrights-changeable-col": "你可以改嘅組",
        "userrights-unchangeable-col": "你唔可以改嘅組",
        "group": "組:",
        "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": "{{GENDER:$1|機械人}}",
        "group-sysop-member": "{{GENDER:$1|管理員}}",
-       "group-bureaucrat-member": "事務員",
-       "group-suppress-member": "監督",
+       "group-bureaucrat-member": "{{GENDER:$1|事務員}}",
+       "group-suppress-member": "{{GENDER:$1|監督}}",
        "grouppage-user": "{{ns:project}}:用戶",
        "grouppage-autoconfirmed": "{{ns:project}}:自動確認用戶",
        "grouppage-bot": "{{ns:project}}:機械人",
        "right-reupload-shared": "於本地無視共用媒體檔案庫上嘅檔案",
        "right-upload_by_url": "由一個URL上載檔案",
        "right-purge": "唔需要確認之下清除網站快取",
-       "right-autoconfirmed": "編輯半保護版",
+       "right-autoconfirmed": "唔受IP嘅利用率限制影響",
        "right-bot": "視為一個自動程序",
        "right-nominornewtalk": "小編輯唔引發新信息提示",
        "right-apihighlimits": "響API查詢度用更高嘅上限",
        "right-deletedtext": "睇刪咗嘅修訂度嘅已刪嘅字同更改",
        "right-browsearchive": "搵刪咗嘅版",
        "right-undelete": "反刪版",
-       "right-suppressrevision": "睇同恢復由操作員隱藏嘅修訂",
+       "right-suppressrevision": "睇下、收埋同恢復任何用戶指定頁面版本",
        "right-suppressionlog": "去睇私人嘅日誌",
        "right-block": "封鎖其他用戶唔畀編輯",
        "right-blockemail": "封鎖用戶唔畀寄電郵",
        "right-hideuser": "封鎖用戶名,對公眾隱藏",
        "right-ipblock-exempt": "繞過IP封鎖、自動封鎖同埋範圍封鎖",
        "right-proxyunbannable": "繞過Proxy嘅自動封鎖",
-       "right-unblockself": "解封佢哋自己",
-       "right-protect": "改保護等級同埋編輯保護版",
-       "right-editprotected": "編輯ä¿\9dè­·ç\89\88ï¼\88ç\84¡é\80£ä¸²ä¿\9dè­·ï¼\89",
+       "right-unblockself": "解封自己",
+       "right-protect": "改保護等級同埋編輯流水保護版",
+       "right-editprotected": "ç\94¨ã\80\8c{{int:protect-level-sysop}}ã\80\8dæ¬\8aé\99\90å\8e»ç·¨è¼¯ä¿\9dè­·ç\89\88",
        "right-editinterface": "編輯用戶界面",
        "right-editusercssjs": "編輯其他用戶嘅CSS同埋JavaScript檔",
        "right-editusercss": "編輯其他用戶嘅CSS檔",
        "action-suppressionlog": "睇呢個私有日誌",
        "action-block": "封鎖呢位用戶嘅編輯",
        "action-protect": "改呢版嘅保護等級",
-       "action-import": "ç\94±å\8f¦ä¸\80å\80\8bwikiå\80\92å\85¥å\91¢ä¸\80版",
-       "action-importupload": "由一個檔案上載倒入呢一版",
+       "action-import": "ç\94±å\85¶å®\83wiki度å\80\92å\85¥版",
+       "action-importupload": "由檔案上載度倒入版",
        "action-patrol": "標示其它嘅編輯做已巡查嘅",
        "action-autopatrol": "將你嘅編輯標示做已巡查嘅",
        "action-unwatchedpages": "睇未畀人監視嘅版",
        "action-userrights": "編輯全部嘅權限",
        "action-userrights-interwiki": "編輯響其它wiki用戶嘅權限",
        "action-siteadmin": "鎖同解鎖資料庫",
+       "action-sendemail": "送電郵",
+       "action-editmywatchlist": "改監視清單",
+       "action-viewmywatchlist": "睇監視清單",
+       "action-viewmyprivateinfo": "睇你嘅私人資料",
+       "action-editmyprivateinfo": "改你嘅私人資料",
        "nchanges": "$1次更改",
+       "enhancedrc-since-last-visit": "{{PLURAL:$1|你上次嚟之後}}有 $1 個",
        "enhancedrc-history": "歷史",
        "recentchanges": "最近改過嘅嘢",
        "recentchanges-legend": "最近更改選項",
        "recentchanges-summary": "追蹤對哩一個 wiki 嘅最後更改。",
+       "recentchanges-noresult": "喺指定時段無符合呢啲條件嘅改動。",
        "recentchanges-feed-description": "追蹤對哩一個 wiki 度呢個集合嘅最後更改。",
        "recentchanges-label-newpage": "呢次編輯開咗一個新版",
        "recentchanges-label-minor": "呢個係一個細編輯",
        "recentchanges-label-plusminus": "頁面位元組大細變化",
        "recentchanges-legend-heading": "'''標記:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (睇埋[[Special:NewPages|新開版]])",
-       "rcnotefrom": "以ä¸\8bä¿\82è\87ª'''$2'''å\98\85æ\9b´æ\94¹(顯示到'''$1''')。",
+       "rcnotefrom": "ä¸\8bé\9d¢å\98\85{{PLURAL:$5|æ\94¹å\8b\95}}ç\94± <strong>$3 $4</strong> é\96\8bå§\8b(顯示到'''$1''')。",
        "rclistfrom": "顯示由$3 $2嘅新更改",
        "rcshowhideminor": "$1小編輯",
        "rcshowhideminor-show": "顯示",
        "rcshowhidebots-show": "顯示",
        "rcshowhidebots-hide": "收埋",
        "rcshowhideliu": "$1登記咗嘅用戶",
+       "rcshowhideliu-show": "顯示",
        "rcshowhideliu-hide": "收埋",
        "rcshowhideanons": "$1匿名用戶",
        "rcshowhideanons-show": "顯示",
        "rcshowhideanons-hide": "收埋",
        "rcshowhidepatr": "$1巡邏過嘅編輯",
+       "rcshowhidepatr-show": "顯示",
+       "rcshowhidepatr-hide": "收埋",
        "rcshowhidemine": "$1我嘅編輯",
        "rcshowhidemine-show": "顯示",
        "rcshowhidemine-hide": "收埋",
        "rc_categories_any": "任何",
        "rc-change-size-new": "改完後係$1位元組",
        "newsectionsummary": "/* $1 */ 新小節",
-       "rc-enhanced-expand": "顯示細節 (需要 JavaScript)",
+       "rc-enhanced-expand": "顯示細節",
        "rc-enhanced-hide": "隱藏細節",
+       "rc-old-title": "原先標題係「$1」",
        "recentchangeslinked": "連結頁嘅更改",
        "recentchangeslinked-feed": "連結頁嘅更改",
        "recentchangeslinked-toolbox": "連結頁嘅更改",
        "reuploaddesc": "取消上載再返到去上載表格",
        "upload-tryagain": "遞交改咗嘅檔案描述",
        "uploadnologin": "重未登入",
-       "uploadnologintext": "你必須先[[Special:UserLogin|登入]]去上載檔案。",
+       "uploadnologintext": "請$1去上載檔案。",
        "upload_directory_missing": "嗰個上載嘅目錄 ($1) 唔見咗,唔可以由網頁伺服器建立。",
        "upload_directory_read_only": "嗰個上載嘅目錄 ($1) 而家唔能夠被網頁伺服器寫入。",
        "uploaderror": "上載錯誤",
        "upload-recreate-warning": "'''警告:一個同名嘅檔案曾經被刪除過或者搬走咗。'''\n\n呢版嘅刪除同移動日誌響呢度提供以便參考:",
        "uploadtext": "用下面嘅表格嚟上載檔案。\n要睇或者搵嘢之前上載嘅圖像請去[[Special:FileList|已上載檔案一覽]],(再)上載嘅動作會喺[[Special:Log/upload|上載日誌]]裏面記錄落嚟,而刪除嘅動作會喺[[Special:Log/delete|刪除日誌]]裏面記錄落嚟。\n\n如果要喺頁面度引入呢張圖像,可以使用以下其中一種方式嘅連結:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:file.jpg<nowiki>]]</nowiki></code>'''去用檔案嘅完整版\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:file.png|200px|thumb|left|替代文字<nowiki>]]</nowiki></code>'''去用200像素比例闊,靠左邊加盒,響描述度加'替代文字'\n* '''<code><nowiki>[[</nowiki>{{ns:media}}:file.ogg<nowiki>]]</nowiki></code>''' 直接連結到檔案而唔顯示個檔案。",
-       "upload-permitted": "准許嘅檔案類型: $1。",
-       "upload-preferred": "建議嘅檔案類型: $1。",
-       "upload-prohibited": "禁止嘅檔案類型: $1。",
+       "upload-permitted": "准許嘅檔案{{PLURAL:$2|類型}}:$1。",
+       "upload-preferred": "建議嘅檔案{{PLURAL:$2|類型}}:$1。",
+       "upload-prohibited": "禁止嘅檔案{{PLURAL:$2|類型}}:$1。",
        "uploadlogpage": "上載日誌",
        "uploadlogpagetext": "以下係最近檔案上載嘅一覽表。\n睇[[Special:NewFiles|新圖像畫廊]]去睇更詳細嘅總覽。",
        "filename": "檔名",
        "ignorewarnings": "忽略任何警告",
        "minlength1": "檔名必須最少要有一個字。",
        "illegalfilename": "檔名「$1」含有頁面標題所唔允許嘅字。請試下改檔名再上載。",
+       "filename-toolong": "檔案名唔可以長過240位元組。",
        "badfilename": "檔名已經更改成「$1」。",
        "filetype-mime-mismatch": "檔案擴展名 \".$1\" 唔搭偵測到檔案嘅MIME類型 ($2)。",
        "filetype-badmime": "「$1」嘅MIME類型檔案係唔容許上載嘅。",
        "large-file": "建議檔案嘅大細唔好大過$1 bytes,呢個檔案有$2 bytes",
        "largefileserver": "呢個檔案超過咗伺服器設定允許嘅大細。",
        "emptyfile": "你上載嘅檔案似乎係空嘅。噉樣可能係因為你打錯咗個檔名。請檢查吓你係唔係真係要上載呢個檔案。",
-       "fileexists": "呢個檔名已經存在,如果你唔肯定係唔係要更改<strong>[[:$1]]</strong>,請先檢查佢。 [[$1|thumb]]",
+       "windows-nonascii-filename": "呢個維基唔支援有特殊字元嘅檔案名。",
+       "fileexists": "呢個檔名已經存在,如果你唔肯定係唔係要更改,請先檢查<strong>[[:$1]]</strong>。 [[$1|thumb]]",
        "filepageexists": "呢個檔嘅描述頁已經響<strong>[[:$1]]</strong>開咗,但係呢個名嘅檔案重未存在。你輸入咗嘅摘要係唔會顯示響個描述頁度。要令到個摘要響嗰度出現,你就要手動噉去改佢。\n[[$1|thumb]]",
-       "fileexists-extension": "一個相似檔名嘅檔案已經存在: [[$2|thumb]]\n* 上載檔案嘅檔名: <strong>[[:$1]]</strong>\n* 現有檔案嘅檔名: <strong>[[:$2]]</strong>\n請揀一個唔同嘅名。",
+       "fileexists-extension": "一個相似檔名嘅檔案已經存在: [[$2|thumb]]\n* 上載檔案嘅檔名:<strong>[[:$1]]</strong>\n* 現有檔案嘅檔名:<strong>[[:$2]]</strong>\n你係咪要揀返個唔同嘅名?",
        "fileexists-thumbnail-yes": "呢個檔案好似係一幅圖像縮細咗嘅版本''(縮圖)''。 [[$1|thumb]]\n請檢查清楚個檔案<strong>[[:$1]]</strong>。\n如果檢查咗嘅檔案係同原本幅圖個大細係一樣嘅話,就唔使再上載多一幅縮圖。",
        "file-thumbnail-no": "個檔名係以<strong>$1</strong>開始。佢好似係一幅圖像嘅縮細版本''(縮圖)''。\n如果你有呢幅圖像嘅完整大細,唔係嘅話請再改過個檔名。",
        "fileexists-forbidden": "呢個檔案嘅名已經存在,唔可以覆蓋;麻煩返轉去用第二個名嚟上載呢個檔案。[[File:$1|thumb|center|$1]]",
        "upload-http-error": "一個HTTP錯誤發生咗: $1",
        "backend-fail-notexists": "檔案$1唔存在。",
        "backend-fail-delete": "刪唔到檔案「$1」。",
+       "backend-fail-alreadyexists": "檔案「$1」已經喺度。",
+       "backend-fail-store": "檔案「$1」存唔到去「$2」。",
+       "backend-fail-copy": "檔案「$1」抄唔到去「$2」。",
+       "backend-fail-move": "檔案「$1」搬唔到去「$2」。",
+       "backend-fail-opentemp": "唔能夠開個臨時檔案。",
+       "backend-fail-writetemp": "唔能夠寫個臨時檔案。",
+       "backend-fail-closetemp": "唔能夠閂個臨時檔案。",
+       "backend-fail-read": "讀唔到檔案「$1」。",
+       "backend-fail-create": "寫唔到檔案「$1」。",
+       "backend-fail-maxsize": "寫唔到檔案「$1」,因為佢大過$2個位元組。",
+       "backend-fail-readonly": "儲存後臺「$1」而家只能夠唯讀。理由係:「<em>$2</em>」",
+       "backend-fail-synced": "檔案「$1」喺內部儲存後臺入面狀態唔一致。",
+       "backend-fail-connect": "連唔到儲存後臺「$1」",
+       "backend-fail-internal": "儲存後臺「$1」唔知點解出錯",
+       "backend-fail-contenttype": "確定唔到存喺儲存後臺「$1」嘅內容類型。",
+       "lockmanager-notlocked": "唔可以解鎖「$1」;佢都無鎖住到。",
        "zip-file-open-error": "在開啟檔案進行ZIP檢查時出錯。",
        "zip-wrong-format": "呢個唔係一個ZIP檔案。",
        "zip-bad": "呢個係不可讀嘅ZIP檔案。\n因為呢個原因,唔可以進行保安檢查。",
        "uploadstash-errclear": "清除檔案唔成功。",
        "uploadstash-refresh": "更新檔案清單",
        "img-auth-accessdenied": "拒絕通行",
-       "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
+       "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 。",
        "img-auth-notindir": "所請求嘅路徑唔響個已經設定咗嘅上載目錄。",
        "img-auth-badtitle": "唔能夠由\"$1\"整一個有效標題。",
        "img-auth-nologinnWL": "你而家無登入,\"$1\"唔響個白名單度。",
        "license": "協議:",
        "license-header": "協議",
        "nolicense": "未揀",
+       "licenses-edit": "改牌照選項",
        "license-nopreview": "(無預覽可以用得到)",
-       "upload_source_url": " (啱嘅,公開嘅網址)",
-       "upload_source_file": " (你部電腦裏面嘅一個檔案)",
-       "listfiles-summary": "呢個特別版顯示全部上載過嘅檔案。\n響預設最後上載嘅檔案會顯示響呢個表嘅最頂。\n撳一欄嘅標題去改個排列。",
+       "upload_source_url": "(你個檔案來源嚟自一個啱嘅、公開嘅網址)",
+       "upload_source_file": "(你個檔案來源嚟自你部電腦裏面)",
+       "listfiles-delete": "刪除",
+       "listfiles-summary": "呢個特別頁顯示全部上載咗嘅檔案。",
        "listfiles_search_for": "搵媒體名:",
        "imgfile": "檔案",
        "listfiles": "檔案清單",
        "listfiles_size": "大細",
        "listfiles_description": "描述",
        "listfiles_count": "版本",
+       "listfiles-show-all": "包埋圖像舊版",
+       "listfiles-latestversion": "而家嘅版本",
+       "listfiles-latestversion-yes": "係",
+       "listfiles-latestversion-no": "唔係",
        "file-anchor-link": "檔案",
        "filehist": "檔案歷史",
        "filehist-help": "撳個日期/時間去睇響嗰個時間出現過嘅檔案。",
        "linkstoimage-more": "多過$1版連過去呢個檔案。\n下面嘅表只係列示咗連去呢個檔案嘅最頭$1版。\n一個[[Special:WhatLinksHere/$2|完整嘅表]]可以提供。",
        "nolinkstoimage": "冇個頁面連結到呢個檔案。",
        "morelinkstoimage": "去睇連到呢個檔案嘅[[Special:WhatLinksHere/$1|更多連結]]。",
+       "linkstoimage-redirect": "$1(檔案跳轉)$2",
        "duplicatesoffile": "下面嘅$1個檔案係同呢個檔案重覆 ([[Special:FileDuplicateSearch/$2|更多細節]]):",
        "sharedupload": "呢個檔案係出自$1,可以喺其他計劃中使用。",
        "sharedupload-desc-there": "呢個檔案係出自$1,可以喺其他計劃中使用。\n更多資訊請睇[$2 檔案描述頁]。",
        "filedelete-reason-dropdown": "\n*常用刪除原因\n** 侵犯版權\n** 重覆檔案",
        "filedelete-edit-reasonlist": "編輯刪除原因",
        "filedelete-maintenance": "響維護嗰陣已經暫時停用檔案刪除同恢復。",
+       "filedelete-maintenance-title": "刪唔到檔案",
        "mimesearch": "MIME 搜尋",
-       "mimesearch-summary": "呢一版可以過濾有關檔案嘅MIME類型。輸入方法:contenttype/subtype,例如 <code>image/jpeg</code>。",
+       "mimesearch-summary": "呢一版可以過濾有關檔案嘅MIME類型。\n輸入方法:contenttype/subtype 或者 contenttype/*,例如 <code>image/jpeg</code>。",
        "mimetype": "MIME 類型:",
        "download": "下載",
        "unwatchedpages": "未監視嘅頁面",
        "listredirects": "彈嚟彈去一覽",
+       "listduplicatedfiles": "重覆檔案一覽",
        "unusedtemplates": "未用嘅模",
        "unusedtemplatestext": "呢一頁列示喺{{ns:template}}空間名未包括喺其它頁面嘅全部頁面。請記得喺刪除佢哋之前檢查其它連結到呢個模嘅頁面。",
        "unusedtemplateswlh": "其它連結",
        "randompage": "隨便一版",
        "randompage-nopages": "響下面嘅{{PLURAL:$2|空間名}}度搵唔到一版: $1",
+       "randomincategory": "類入面是但一版",
+       "randomincategory-invalidcategory": "「$1」唔係有效嘅類名。",
+       "randomincategory-nopages": "[[:Category:$1|$1]]類入面無嘢。",
+       "randomincategory-category": "類:",
+       "randomincategory-legend": "類入面是但一版",
        "randomredirect": "隨便彈",
        "randomredirect-nopages": "響 \"$1\" 空間名度冇一個彈去版。",
        "statistics": "統計",
        "statistics-users": "註冊咗嘅[[Special:ListUsers|用戶]]",
        "statistics-users-active": "活躍用戶",
        "statistics-users-active-desc": "響$1日前做過動作嘅用戶",
+       "pageswithprop": "有屬性嘅頁",
+       "pageswithprop-legend": "有屬性嘅頁",
+       "pageswithprop-prop": "屬性名:",
+       "pageswithprop-submit": "去",
        "doubleredirects": "雙重跳轉",
        "doubleredirectstext": "每一行都順次序寫住第一頁名,佢嘅目的頁,同埋目的頁再指去邊度。改嘅時候,應該將第一個跳轉頁轉入第三頁。\n<del>劃咗</del>嘅項目係已經解決咗嘅。",
-       "double-redirect-fixed-move": "[[$1]]已經搬好咗,佢而家跳轉過去[[$2]]。",
-       "double-redirect-fixed-maintenance": "修復[[$1]]嘅重定向到[[$2]]。",
+       "double-redirect-fixed-move": "[[$1]]已經搬好咗。\n佢自動更新咗,而家跳轉過去[[$2]]。",
+       "double-redirect-fixed-maintenance": "喺維護工作度自動修復[[$1]]嘅跳轉到[[$2]]。",
        "double-redirect-fixer": "跳轉修正器",
        "brokenredirects": "破碎嘅跳轉",
        "brokenredirectstext": "以下嘅跳轉係指向唔存在嘅頁面:",
        "fewestrevisions": "有最少修改嘅版",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 個分類",
+       "ninterwikis": "$1 {{PLURAL:$1|個跨維基連結}}",
        "nlinks": "$1 條連結",
        "nmembers": "$1 位成員",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|位成員}}",
        "nrevisions": "$1 次修訂",
        "nviews": "$1 次瀏覽",
        "nimagelinks": "用響$1版",
        "wantedpages": "被徵求嘅頁面",
        "wantedpages-badtitle": "響結果組嘅無效標題: $1",
        "wantedfiles": "被徵求嘅檔案",
+       "wantedfiletext-nocat-noforeign": "下面檔案有用到,但係唔存在。",
        "wantedtemplates": "被徵求嘅模",
        "mostlinked": "有最多連結嘅頁面",
        "mostlinkedcategories": "有最多連結嘅分類",
-       "mostlinkedtemplates": "有最多連結嘅模",
+       "mostlinkedtemplates": "有最多嵌入嘅版",
        "mostcategories": "有最多分類嘅頁面",
        "mostimages": "有最多連結嘅檔案",
+       "mostinterwikis": "有最多跨維基連結嘅頁面",
        "mostrevisions": "有最多修改嘅頁面",
        "prefixindex": "全部頁嘅前綴",
        "shortpages": "短頁",
        "protectedpages": "保護頁",
        "protectedpages-indef": "只有無期保謢頁",
        "protectedpages-cascade": "只有連串保護頁",
+       "protectedpages-noredirect": "收埋跳轉",
        "protectedpagesempty": "響呢啲參數度,現時無頁面響度保護緊。",
+       "protectedpages-timestamp": "時間",
+       "protectedpages-page": "版",
+       "protectedpages-expiry": "到期",
+       "protectedpages-performer": "保護用戶",
+       "protectedpages-params": "保護參數",
        "protectedpages-reason": "原因",
+       "protectedpages-unknown-timestamp": "唔知",
+       "protectedpages-unknown-performer": "未知嘅用戶",
        "protectedtitles": "保護咗嘅標題",
        "protectedtitlesempty": "響呢啲參數之下並無標題保護住。",
        "listusers": "用戶一覽",
        "listusers-editsonly": "只顯示有編輯嘅用戶",
        "listusers-creationsort": "按建立日期排序",
+       "listusers-desc": "反向排序",
        "usereditcount": "$1次編輯",
        "usercreated": "響$1 $2{{GENDER:$3|建立}}",
        "newpages": "新頁",
        "pager-older-n": "舊$1次",
        "suppress": "監督",
        "querypage-disabled": "呢個特別版基於效能嘅原因停用咗。",
+       "apihelp": "API幫手",
+       "apihelp-no-such-module": "搵唔到模組「$1」。",
        "booksources": "書籍來源",
        "booksources-search-legend": "搵書源",
        "booksources-search": "搵",
        "booksources-text": "以下嘅連結清單列出其它一啲賣新書同二手書嘅網站,可能可以提供到有關你想搵嘅書嘅更多資料:",
        "booksources-invalid-isbn": "個ISBN無效;請檢查原來源複製落來嘅錯。",
-       "specialloguserlabel": "用戶:",
+       "specialloguserlabel": "執行人:",
        "speciallogtitlelabel": "目標(題目或者用戶):",
        "log": "日誌",
        "all-logs-page": "全部嘅公共日誌",
        "allpagesprefix": "用以下開頭嘅頁面:",
        "allpagesbadtitle": "提供嘅頁面名無效,又或者有一個跨語言或跨wiki嘅字頭。佢可能包括一個或多個字係唔可以用響標題度嘅。",
        "allpages-bad-ns": "{{SITENAME}}係無一個空間名叫做\"$1\"。",
+       "allpages-hide-redirects": "收埋跳轉",
+       "cachedspecial-refresh-now": "睇最新。",
        "categories": "類",
        "categoriespagetext": "下面嘅{{PLURAL:$1|類}}有版或媒體。\n[[Special:UnusedCategories|未用類]]唔會響呢度列示。\n請同時參閱[[Special:WantedCategories|需要嘅分類]]。",
        "categoriesfrom": "顯示由呢項起嘅類:",
        "deletedcontributions": "已經刪除咗嘅用戶貢獻",
        "deletedcontributions-title": "已經刪除咗嘅用戶貢獻",
        "sp-deletedcontributions-contribs": "貢獻",
-       "linksearch": "外部連結",
+       "linksearch": "搵出面嘅連結",
        "linksearch-pat": "搵嘅形態:",
        "linksearch-ns": "空間名",
        "linksearch-ok": "搵",
-       "linksearch-text": "可以用類似\"*.wikipedia.org\"嘅萬用字元。<br />\n支援嘅協議: <code>$1</code>",
+       "linksearch-text": "可以用類似「*.wikipedia.org」嘅萬用字元。\n需要至少一個頂級域名,好似「*.org」。<br />\n支援嘅{{PLURAL:$2|協議}}:<code>$1</code> (預設用 http:// 如果唔指定協議)",
        "linksearch-line": "$1 連自 $2",
        "linksearch-error": "萬用字元只可以響主機名嘅開頭度用。",
        "listusersfrom": "顯示由呢個字開始嘅用戶:",
        "listusers-blocked": "(封鎖咗)",
        "activeusers": "活躍用戶名單",
        "activeusers-intro": "呢個係響最近$1日之內有一啲動作嘅用戶名單。",
-       "activeusers-count": "響$3日之內嘅$1次編輯",
+       "activeusers-count": "響{{PLURAL:$3|$3日}}之內嘅$1次{{PLURAL:$1|編輯}}",
        "activeusers-from": "顯示用戶開始於:",
        "activeusers-hidebots": "隱藏機械人",
        "activeusers-hidesysops": "隱藏管理員",
        "activeusers-noresult": "搵唔到用戶。",
        "listgrouprights": "用戶組權限",
        "listgrouprights-summary": "下面係一個響呢個wiki定義咗嘅用戶權限一覽,同埋佢哋嘅存取權。\n更多有關個別權限嘅[[{{MediaWiki:Listgrouprights-helppage}}|更多細節]]可以響嗰度搵到。",
-       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">畀咗嘅權限</span>\n* <span class=\"listgrouprights-revoked\">拎咗嘅權限</span>",
+       "listgrouprights-key": "說明:\n* <span class=\"listgrouprights-granted\">畀咗嘅權限</span>\n* <span class=\"listgrouprights-revoked\">拎咗嘅權限</span>",
        "listgrouprights-group": "組",
        "listgrouprights-rights": "權",
        "listgrouprights-helppage": "Help:組權限",
        "listgrouprights-removegroup-self": "響自己嘅戶口度拎走嘅{{PLURAL:$2|一|多}}組: $1",
        "listgrouprights-addgroup-self-all": "加入全部組到自己嘅戶口度",
        "listgrouprights-removegroup-self-all": "響自己嘅戶口度可以拎走全部組",
+       "listgrouprights-namespaceprotection-header": "空間名限制",
+       "listgrouprights-namespaceprotection-namespace": "空間名",
+       "listgrouprights-namespaceprotection-restrictedto": "容許用戶改文嘅權",
+       "trackingcategories": "追蹤類",
+       "trackingcategories-msg": "追蹤類",
+       "trackingcategories-name": "訊息名",
+       "trackingcategories-nodesc": "冇解說資料",
+       "trackingcategories-disabled": "類停用咗",
        "mailnologin": "冇傳送地址",
        "mailnologintext": "你一定要[[Special:UserLogin|登入咗]]同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址先可以傳送電郵畀其他用戶。",
        "emailuser": "發電郵畀呢位用戶",
+       "emailuser-title-target": "電郵畀呢個{{GENDER:$1|用戶}}",
+       "emailuser-title-notarget": "發電郵畀用戶",
        "emailpage": "發電郵畀用戶",
-       "emailpagetext": "你可以用下面嘅表去寄一封電郵畀呢位用戶。\n你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,以便收件人可以回覆到。",
-       "defemailsubject": "{{SITENAME}} 電郵",
+       "emailpagetext": "你可以用下面嘅表去寄一封電郵畀呢位{{GENDER:$1|用戶}}。\n你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,方便收件人可以直接回覆你。",
+       "defemailsubject": "由用戶「$1」送嘅 {{SITENAME}} 電郵",
        "usermaildisabled": "用戶電郵已停用",
        "usermaildisabledtext": "你唔可以發送電郵到響呢個wiki度嘅其他用戶",
        "noemailtitle": "無電郵地址",
        "noemailtext": "呢個用戶重未指定一個有效嘅電郵地址。",
        "nowikiemailtext": "呢位用戶揀咗唔收其他用戶畀佢嘅電郵。",
+       "emailnotarget": "收件人填錯名。",
+       "emailtarget": "入收件人嘅用戶名",
+       "emailusername": "用戶名:",
+       "emailusernamesubmit": "遞交",
        "email-legend": "寄電郵畀另一位{{SITENAME}}用戶",
        "emailfrom": "由:",
        "emailto": "到:",
        "emailccsubject": "你畀$1: $2封信嘅副本",
        "emailsent": "電郵已傳送",
        "emailsenttext": "你嘅電郵信息已傳送。",
-       "emailuserfooter": "呢封電郵係由$1寄畀$2經{{SITENAME}}嘅「電郵用戶」功能發出嘅。",
+       "emailuserfooter": "呢封電郵係由$1寄畀$2經{{SITENAME}}嘅「{{int:emailpage}}」功能發出嘅。",
        "usermessage-summary": "留低系統訊息。",
        "usermessage-editor": "系統訊息",
        "watchlist": "監視名單",
        "mywatchlist": "監視清單",
        "watchlistfor2": "$1嘅監視清單 $2",
        "nowatchlist": "你嘅監視清單度並冇任何項目。",
-       "watchlistanontext": "請先$1去睇或者改響你監視清單度嘅項目。",
+       "watchlistanontext": "請先簽到去睇或者改響你監視清單度嘅項目。",
        "watchnologin": "未登入",
-       "addedwatchtext": "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。\n呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度,佢喺[[Special:RecentChanges|最近更改清單]]度會以'''粗體'''顯示,等你可以容易啲睇到佢。",
+       "addwatch": "加到監視清單",
+       "addedwatchtext": "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。\n呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度。",
+       "addedwatchtext-short": "「$1」呢一版已經加咗入監視清單。",
+       "removewatch": "響監視清單度拎走",
        "removedwatchtext": "頁面「[[:$1]]」已經喺[[Special:Watchlist|你嘅監視清單]]度刪除。",
+       "removedwatchtext-short": "「$1」呢一版已經由監視清單度拎走咗。",
        "watch": "監視",
        "watchthispage": "監視呢頁",
        "unwatch": "唔使監視",
        "unwatchthispage": "停止監視",
        "notanarticle": "唔係一個內容頁",
        "notvisiblerev": "上次由唔同用戶嘅修訂已經刪除咗",
-       "watchlist-details": "唔計討論頁,有 $1 響你個監視清單度。",
-       "wlheader-enotif": "電子郵件通知已經啟用。",
-       "wlheader-showupdated": "'''粗體字'''嘅頁響你上次嚟之後被人改過",
-       "wlnote": "以ä¸\8bä¿\82最近'''$2'''個鐘之內嘅最新$1次修改。",
-       "wlshowlast": "顯示最近 $1 個鐘 $2 日  嘅修改",
+       "watchlist-details": "唔計討論頁,有 $1 {{PLURAL:$1|版}}響你個監視清單度。",
+       "wlheader-enotif": "電郵通知已經啟用咗。",
+       "wlheader-showupdated": "標'''粗體字'''嘅頁響你上次嚟之後畀人改過。",
+       "wlnote": "ä¸\8bé\9d¢ä¿\82ç\9b´å\88°$3 $4ç\82ºæ­¢ï¼\8c最近'''$2'''個鐘之內嘅最新$1次修改。",
+       "wlshowlast": "顯示最近 $1 個鐘 $2 日",
        "watchlist-options": "監視清單選項",
        "watching": "監視緊...",
        "unwatching": "唔再監視緊...",
+       "watcherrortext": "更改「$1」嘅監視清單嗰陣出錯。",
        "enotif_reset": "將所有頁面標成已視察",
        "enotif_impersonal_salutation": "{{SITENAME}}用戶",
+       "enotif_subject_deleted": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|刪咗}}。",
+       "enotif_subject_created": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|開咗}}。",
+       "enotif_subject_moved": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|搬咗}}。",
+       "enotif_subject_restored": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|恢復咗}}。",
+       "enotif_subject_changed": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|改咗}}。",
+       "enotif_body_intro_deleted": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|刪咗}}。睇下 $3 。",
+       "enotif_body_intro_created": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|開咗}}。睇下而家個版本 $3 。",
+       "enotif_body_intro_moved": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|搬咗}}。睇下而家個版本 $3 。",
+       "enotif_body_intro_restored": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|恢復咗}}。睇下而家個版本 $3 。",
+       "enotif_body_intro_changed": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|改咗}}。睇下而家個版本 $3 。",
        "enotif_lastvisited": "你上次視察以嚟嘅修改請睇$1。",
        "enotif_lastdiff": "睇$1去睇吓呢一次更改。",
        "enotif_anon_editor": "匿名用戶$1",
        "exbeforeblank": "喺清空之前嘅內容係:「$1」",
        "delete-confirm": "刪除\"$1\"",
        "delete-legend": "刪除",
-       "historywarning": "警告:你要刪除嘅頁面有大約$1次嘅修訂:",
+       "historywarning": "<strong>警告:</strong>你要刪除嘅頁面有大約$1次嘅修訂:",
        "confirmdeletetext": "你準備刪除一個頁面或者圖像,包括佢嘅所有歷史版本。\n請確認你打算噉做,而且你知道後果係點,加上確認你噉做冇違反到[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失敗",
        "deletecomment": "原因:",
        "deleteotherreason": "其它/附加嘅原因:",
        "deletereasonotherlist": "其它原因",
-       "deletereason-dropdown": "*常用刪除原因\n** 作者請求\n** 侵犯版權\n** 破壞",
+       "deletereason-dropdown": "*常用刪除原因\n** 垃圾訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 壞咗嘅跳轉",
        "delete-edit-reasonlist": "編輯刪除原因",
        "delete-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除呢類版嘅動作已經限制咗,以防止響{{SITENAME}}嘅意外擾亂。",
        "delete-warning-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除佢可能會擾亂{{SITENAME}}嘅資料庫操作;響繼續嗰陣請小心。",
+       "deleteprotected": "你唔可以刪呢版,因為佢畀人保護咗。",
        "rollback": "反轉修改",
        "rollbacklink": "反轉",
        "rollbacklinkcount": "反轉 $1 次修改",
        "alreadyrolled": "無法反轉[[User:$2|$2]]([[User talk:$2|留言]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])對[[:$1]]嘅最後編輯;有人已經修改過或者反轉咗呢個頁面。\n\n上次對呢版嘅編輯係由[[User:$3|$3]]([[User talk:$3|留言]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])做嘅。",
        "editcomment": "編輯摘要係:「'''$1'''」。",
        "revertpage": "已經反轉由[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])所寫嘅編輯到[[User:$1|$1]]嘅最後修訂。",
-       "revertpage-nouser": "已經反轉由(刪咗用戶名)所寫嘅編輯到[[User:$1|$1]]所寫嘅最後修訂。",
+       "revertpage-nouser": "已經反轉咗由收埋咗嘅用戶名所寫嘅編輯,到[[User:$1|$1]]所寫嘅最後修訂版本。",
        "rollback-success": "已經反轉由$1所寫嘅編輯;恢復到$2嘅最後修訂。",
        "sessionfailure-title": "會話失敗",
        "sessionfailure": "你嘅登入會話 (session) 好似有啲問題;\n為咗防止會話劫持,呢個操作已經取消。\n請返去之前嗰版,重新載入嗰版然後再試。",
        "protectlogpage": "保護日誌",
-       "protectlogtext": "下面係一個保護同埋解除保護頁面嘅一覽表。睇吓[[Special:ProtectedPages|保護頁面一覽]]去搵鎖咗嘅頁。",
+       "protectlogtext": "下面係一個保護同埋解除保護頁面改動嘅一覽表。\n睇吓[[Special:ProtectedPages|保護頁面一覽]]去搵而家鎖咗嘅頁。",
        "protectedarticle": "已經保護 \"[[$1]]\"",
        "modifiedarticleprotection": "已經改咗 \"[[$1]]\" 嘅保護等級",
-       "unprotectedarticle": "已經唔再保護 \"[[$1]]\"",
+       "unprotectedarticle": "已經唔再保護「[[$1]]」",
        "movedarticleprotection": "已經改咗由「[[$2]]」到「[[$1]]」嘅保護設定",
        "protect-title": "改緊「$1」嘅保護等級",
+       "protect-title-notallowed": "睇下「$1」嘅保護等級",
        "prot_1movedto2": "[[$1]]搬到去[[$2]]",
+       "protect-badnamespace-title": "保護唔到嘅空間名",
+       "protect-badnamespace-text": "呢個空間名嘅版面保護唔到。",
+       "protect-norestrictiontypes-title": "保護唔到嘅頁",
        "protect-legend": "確認保護",
        "protectcomment": "原因:",
        "protectexpiry": "到期:",
        "protect-locked-blocked": "當你響被封鎖嗰陣唔可以改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
        "protect-locked-dblock": "響資料庫主動鎖住咗嗰陣係唔可以改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
        "protect-locked-access": "你嘅戶口係無權限去改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
-       "protect-cascadeon": "呢一版現時正響度保護緊,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,而當中又開咗連串保護。你可以更改呢一版嘅保護等級,但係呢個修改係唔會影響到嗰個連串保護。",
+       "protect-cascadeon": "呢一版現時正響度保護緊,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,而當中又開咗連串保護。更改呢一版嘅保護等級唔會影響到嗰個連串保護。",
        "protect-default": "容許全部用戶",
-       "protect-fallback": "需要\"$1\"嘅許可",
+       "protect-fallback": "只容許有「$1」許可嘅用戶",
        "protect-level-autoconfirmed": "只限已經自動確認嘅用戶",
        "protect-level-sysop": "只限管理員",
        "protect-summary-cascade": "連串保護",
        "protect-expiring": "響 $1 (UTC) 到期",
+       "protect-expiring-local": "$1 到期",
        "protect-expiry-indefinite": "唔定",
        "protect-cascade": "保護包含響呢一版嘅頁面 (連串保護)",
        "protect-cantedit": "你唔可以改呢版嘅保護等級,因為你無權限去編輯佢。",
        "protect-othertime": "其它時間:",
        "protect-othertime-op": "其它時間",
        "protect-existing-expiry": "現時到期嘅時間: $2 $3",
+       "protect-existing-expiry-infinity": "到期時間:無限期",
        "protect-otherreason": "其它/附加嘅原因:",
        "protect-otherreason-op": "其它原因",
        "protect-dropdown": "*通用保護原因\n** 過量嘅破壞\n** 過量嘅灌水\n** 反生產性編輯戰\n** 高流量頁",
        "viewdeletedpage": "去睇被刪除咗嘅頁面",
        "undeletepagetext": "以下嘅$1個頁面已經刪除,但係重喺檔庫度可以恢復。檔案庫可能會定時清理。",
        "undelete-fieldset-title": "恢復修訂",
-       "undeleteextrahelp": "要恢復成個頁面,唔好剔任何嘅核選盒,再撳'''''{{int:undeletebtn}}'''''。\n要恢復已經選擇咗嘅修訂,將要恢復代表有關修訂嘅核選盒剔上,再撳'''''{{int:undeletebtn}}'''''。\n撳'''''{{int:undeletereset}}'''''會清除註解文字同埋全部嘅核選盒。",
+       "undeleteextrahelp": "要恢復成個頁面,唔好剔任何嘅核選盒,再撳<strong><em>{{int:undeletebtn}}</em></strong>。\n要恢復已經選擇咗嘅修訂,將要恢復代表有關修訂嘅核選盒剔上,再撳<strong><em>{{int:undeletebtn}}</em></strong>。",
        "undeleterevisions": "$1個修訂都已經存檔",
        "undeletehistory": "如果你恢復呢個頁面,佢嘅所有修改歷史都會恢復返到嗰篇頁面嘅歷史度。如果喺佢刪除之後又新開咗同名嘅頁面,你恢復嘅修改歷史會顯示喺先前歷史度。",
        "undeleterevdel": "如果響最新修訂度部份刪除,噉就反刪除唔到。如果遇到呢種情況,你一定要反選或者反隱藏最新刪除咗嘅修訂。",
        "undeletedrevisions": "$1個修訂已經救返",
        "undeletedrevisions-files": "$1個修訂同$2個檔案已經救返",
        "undeletedfiles": "$1個檔案已經救返",
-       "cannotundelete": "æ\95\91å\94\94å\88°ï¼\9bå\8f¯è\83½æ\9c\89å\85¶ä»\96人已ç¶\93æ\95\91è¿\94å\97°é \81ã\80\82",
+       "cannotundelete": "æ\95\91å\94\94å\88°ï¼\9a\n$1",
        "undeletedpage": "'''$1已經成功救返'''\n\n最近嘅刪除同恢復記錄請睇[[Special:Log/delete]]。",
        "undelete-header": "睇吓[[Special:Log/delete|刪除日誌]]去睇之前刪除嘅頁頁。",
+       "undelete-search-title": "搵刪咗嘅版",
        "undelete-search-box": "搵刪除咗嘅頁面",
        "undelete-search-prefix": "顯示由以下開頭嘅頁面:",
        "undelete-search-submit": "搵嘢",
        "undelete-bad-store-key": "唔能夠刪除帶有時間截記嘅檔案修訂 $1: 檔案響刪除之前唔見咗。",
        "undelete-cleanup-error": "刪除無用嘅歸檔檔案 \"$1\" 時出錯。",
        "undelete-missing-filearchive": "由於檔案歸檔 ID $1 唔響個數據庫度,唔能夠響個檔案歸檔恢復。佢可能已經反刪除咗。",
+       "undelete-error": "還原刪版出錯",
        "undelete-error-short": "反刪除檔案嗰陣出錯: $1",
        "undelete-error-long": "當反刪除緊個檔案嗰陣遇到錯誤:\n\n$1",
        "undelete-show-file-confirm": "你係咪肯定你想去睇響 $2 $3 嘅 \"<nowiki>$1</nowiki>\" 檔案?",
        "contributions": "{{GENDER:$1|用戶}}貢獻",
        "contributions-title": "$1嘅用戶貢獻",
        "mycontris": "個人貢獻",
-       "contribsub2": "$1嘅貢獻 ($2)",
+       "contribsub2": "{{GENDER:$3|$1}}嘅貢獻 ($2)",
+       "contributions-userdoesnotexist": "用戶「$1」未有註冊。",
        "nocontribs": "搵唔到符合呢啲條件嘅修改。",
-       "uctop": "(最頂)",
+       "uctop": "(而家)",
        "month": "由呢個月 (同更早):",
        "year": "由呢一年 (同更早):",
        "sp-contributions-newbies": "只顯示新戶口嘅貢獻",
        "sp-contributions-newbies-sub": "新戶口嘅貢獻",
        "sp-contributions-newbies-title": "新戶口嘅用戶貢獻",
        "sp-contributions-blocklog": "封鎖日誌",
+       "sp-contributions-suppresslog": "壓制咗嘅用戶貢獻",
        "sp-contributions-deleted": "已經刪除咗嘅用戶貢獻",
        "sp-contributions-uploads": "上載",
        "sp-contributions-logs": "日誌",
        "sp-contributions-search": "搵貢獻",
        "sp-contributions-username": "IP地址或用戶名:",
        "sp-contributions-toponly": "只顯示最新修訂嘅編輯",
+       "sp-contributions-newonly": "只顯示開新版嘅編輯",
        "sp-contributions-submit": "搵",
        "whatlinkshere": "有乜嘢連結來呢度",
        "whatlinkshere-title": "連到「$1」嘅頁",
        "whatlinkshere-hidelinks": "$1連結",
        "whatlinkshere-hideimages": "$1檔案連結",
        "whatlinkshere-filters": "過濾器",
-       "blockip": "封鎖用戶",
+       "autoblockid": "自動封鎖 #$1",
+       "block": "封鎖用戶",
+       "unblock": "解封用戶",
+       "blockip": "封鎖{{GENDER:$1|用戶}}",
        "blockip-legend": "封鎖用戶",
        "blockiptext": "使用以下嘅表格嚟去阻止指定嘅IP地址或用戶名嘅寫權限。\n僅當僅當為咗避免有版畀人惡意破壞嘅時候先可以使用,而且唔可以違反[[{{MediaWiki:Policy-url}}|政策]]。\n喺下面填寫阻止嘅確切原因(比如:引用咗某啲已經破壞咗嘅頁面)。",
        "ipaddressorusername": "IP地址或用戶名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*共用封鎖原因\n** 插入錯嘅資料\n** 響頁面度拎走\n** 亂加入外部連結\n** 響頁度加入冇意義嘅嘢\n** 嚇人/騷擾\n** 濫用多個戶口\n** 唔能夠接受嘅用戶名",
+       "ipb-hardblock": "唔畀簽到用戶用呢個IP位址去改文",
        "ipbcreateaccount": "防止開新戶口",
        "ipbemailban": "防止用戶傳送電郵",
        "ipbenableautoblock": "自動封鎖呢個用戶上次用過嘅IP地址,同埋佢地做過編輯嘅IP地址",
        "ipboptions": "兩個鐘頭:2 hours,一日:1 day,三日:3 days,一個禮拜:1 week,兩個禮拜:2 weeks,一個月:1 month,三個月:3 months,六個月:6 months,一年:1 year,終身:infinite",
        "ipbhidename": "響編輯同名單度隱藏用戶名",
        "ipbwatchuser": "監視呢位用戶嘅用戶頁同埋佢嘅討論頁",
+       "ipb-disableusertalk": "唔畀封鎖緊嘅用戶去改自己個用戶討論頁",
        "ipb-change-block": "用呢啲設定重新封鎖用戶",
+       "ipb-confirm": "確認封鎖",
        "badipaddress": "無效嘅IP地址",
        "blockipsuccesssub": "封鎖成功",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經封鎖。<br />\n去[[Special:BlockList|IP封鎖清單]]睇返封鎖名單。",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經封鎖。<br />\n去[[Special:BlockList|封鎖清單]]睇返封鎖。",
+       "ipb-blockingself": "你將會封鎖自己!你肯定要咁做?",
+       "ipb-confirmaction": "如果你肯定要咁做,請剔下低嘅「{{int:ipb-confirm}}」格。",
        "ipb-edit-dropdown": "改封鎖原因",
        "ipb-unblock-addr": "解封$1",
        "ipb-unblock": "解封一個用戶名或IP地址",
        "ipb-blocklist": "去睇現時嘅封鎖",
-       "ipb-blocklist-contribs": "$1嘅貢獻",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}}嘅貢獻",
        "unblockip": "解封用戶",
        "unblockiptext": "使用以下表格恢復之前阻止嘅某個IP地址或者某個用戶名嘅寫權限。",
        "ipusubmit": "拎走呢個封鎖",
        "unblocked": "\"[[User:$1|$1]]\"已經解封",
+       "unblocked-range": "$1 已經解鎖咗。",
        "unblocked-id": "$1嘅封鎖已經拎走咗",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] 已經解鎖咗。",
+       "blocklist": "封鎖用戶",
        "ipblocklist": "封咗嘅用戶",
        "ipblocklist-legend": "搵一位封咗嘅用戶",
+       "blocklist-userblocks": "收埋戶口封鎖",
+       "blocklist-tempblocks": "收埋臨時封鎖",
+       "blocklist-addressblocks": "收埋單一IP封鎖",
+       "blocklist-rangeblocks": "收埋大範圍IP封鎖",
+       "blocklist-timestamp": "時間",
+       "blocklist-target": "目標",
+       "blocklist-expiry": "到期",
+       "blocklist-by": "封鎖管理員",
+       "blocklist-params": "封鎖參數",
+       "blocklist-reason": "原因",
        "ipblocklist-submit": "搵",
        "ipblocklist-localblock": "本地封鎖",
        "ipblocklist-otherblocks": "其他{{PLURAL:$1|封鎖|封鎖}}",
        "unblocklink": "解封",
        "change-blocklink": "改封",
        "contribslink": "貢獻",
-       "autoblocker": "已經自動封鎖,因為你嘅IP地址冇幾耐之前\"[[User:$1|$1]]\"使用過。$1\\嘅封鎖原因係: 「$2」",
+       "emaillink": "送電郵",
+       "autoblocker": "已經自動封鎖咗,因為你嘅IP地址冇幾耐之前畀「[[User:$1|$1]]」用過。\n$1嘅封鎖原因係「$2」",
        "blocklogpage": "封鎖日誌",
        "blocklog-showlog": "呢位用戶已經響之前被封鎖過。響下面提供咗封鎖紀錄以便參考:",
        "blocklog-showsuppresslog": "呢位用戶已經響之前被封鎖同隱藏過。響下面提供咗廢止紀錄以便參考:",
        "blocklogentry": "已封鎖[[$1]],到期時間為$2 $3",
        "reblock-logentry": "已改[[$1]]嘅封鎖設定,到期時間為$2 $3",
-       "blocklogtext": "呢個係封鎖同埋解封動作嘅日誌。自動封鎖IP地址嘅動作冇列出嚟。去[[Special:BlockList|IP封鎖名單]]睇現時生效嘅封鎖名單",
+       "blocklogtext": "呢個係封鎖同埋解封動作嘅日誌。\n自動封鎖IP地址嘅動作冇列出嚟。\n去[[Special:BlockList|封鎖名單]]睇現時生效嘅封鎖名單",
        "unblocklogentry": "已經解封$1",
        "block-log-flags-anononly": "只限匿名用戶",
        "block-log-flags-nocreate": "停用開新戶口",
        "range_block_disabled": "操作員嘅建立範圍封鎖已經停用。",
        "ipb_expiry_invalid": "無效嘅期限。",
        "ipb_expiry_temp": "隱藏用戶名封鎖定一定係要永久性嘅。",
-       "ipb_hide_invalid": "唔能夠壓止呢個戶口;佢可能有太多編輯。",
+       "ipb_hide_invalid": "唔能夠壓止呢個戶口;佢有多過{{PLURAL:$1|一次編輯|$1次編輯}}。",
        "ipb_already_blocked": "\"$1\"已經封鎖咗",
        "ipb-needreblock": "$1已經被封鎖。你係咪想更改呢個設定?",
        "ipb-otherblocks-header": "其他{{PLURAL:$1|封鎖|封鎖}}",
+       "unblock-hideuser": "你唔可以解鎖呢個用戶,因為佢個用戶名收埋咗。",
        "ipb_cant_unblock": "錯誤:搵唔到封鎖ID$1。可能已經解封咗。",
        "ipb_blocked_as_range": "錯誤:個IP $1 無直接封鎖,唔可以解封。但係佢係響 $2 嘅封鎖範圍之內,嗰段範圍係可以解封嘅。",
        "ip_range_invalid": "無效嘅IP範圍",
        "delete_and_move": "刪除並移動",
        "delete_and_move_text": "==需要刪除==\n\n目標頁「[[:$1]]」已經存在。你要唔要刪咗佢空個位出嚟畀個搬文動作?",
        "delete_and_move_confirm": "好,刪咗嗰個頁面",
-       "delete_and_move_reason": "已經刪咗嚟畀位畀個搬文動作",
+       "delete_and_move_reason": "已經刪咗「[[$1]]」嚟畀位畀個搬文動作",
        "selfmove": "原始標題同目的標題一樣;唔可以將個頁面搬返去自己度。",
        "immobile-source-namespace": "唔可以響空間名「$1」度搬版",
        "immobile-target-namespace": "唔可以將版搬到「$1」度",
        "immobile-target-namespace-iw": "垮維基連結響搬版度係無效嘅目標。",
        "immobile-source-page": "呢版唔搬得。",
        "immobile-target-page": "搬唔到去目標標題度。",
+       "bad-target-model": "指定目標用緊唔同內容模型。轉唔到 $1 做 $2。",
        "imagenocrossnamespace": "唔可以搬檔案到非檔案空間名",
        "nonfile-cannot-move-to-file": "唔可以搬非檔案到檔案空間名",
        "imagetypemismatch": "個新副檔名唔配佢嘅類型",
        "file-exists-sharedrepo": "同名檔案已於共享資源存在。\n請選擇另一個檔名。",
        "export": "倒出/導出/匯出(Export)頁面",
        "exporttext": "你可以倒出文字、編輯某個頁面、編輯封裝(wrap)喺一啲XML度嘅一組頁面。呢啲嘢可以用MediaWiki透過[[Special:Import|倒入]]頁倒入去其他wiki度。\n\n要倒出頁面嘅話,就喺下面嘅文字框度打標題名,一行一個標題,然後揀你係要現時修訂加上所有嘅舊修訂同歷史,定係淨係要現時修訂同最後編輯嘅相關資訊。\n\n喺後面嗰種情況下,你亦都可以用一個連結,例如[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]對頁面\"[[{{MediaWiki:Mainpage}}]]\"。",
+       "exportall": "倒出所有頁面",
        "exportcuronly": "淨係包括而家嘅修訂版本,唔包括完整歷史",
        "exportnohistory": "----\n'''注意:'''因為性能嘅原因,已經停用禁止咗使用呢個表格倒出頁面嘅完整歷史",
+       "exportlistauthors": "包埋每頁完整嘅貢獻者清單",
        "export-submit": "倒出/導出/匯出",
        "export-addcattext": "由分類度加入頁面:",
        "export-addcat": "加入",
        "allmessages-prefix": "以前綴過濾:",
        "allmessages-language": "語言:",
        "allmessages-filter-submit": "去",
+       "allmessages-filter-translate": "翻譯",
        "thumbnail-more": "放大",
        "filemissing": "唔見個檔案",
        "thumbnail_error": "整唔到縮圖: $1",
+       "thumbnail_error_remote": "$1嘅出錯訊息:\n$2",
        "djvu_page_error": "DjVu頁超出範圍",
        "djvu_no_xml": "唔能夠響DjVu檔度攞個XML",
+       "thumbnail-temp-create": "整唔到臨時縮圖檔",
+       "thumbnail-dest-create": "儲唔到縮圖到目標",
        "thumbnail_invalid_params": "唔正確嘅縮圖參數",
+       "thumbnail_toobigimagearea": "檔案大細大過 $1",
        "thumbnail_dest_directory": "唔能夠開目標目錄",
        "thumbnail_image-type": "圖像類型唔支援",
        "thumbnail_gd-library": "未完成嘅GD設定: 功能唔見咗 $1",
        "thumbnail_image-missing": "檔案似乎唔見咗: $1",
+       "thumbnail_image-failure-limit": "近排顯示呢個縮圖已經失敗過好多次(超過$1 次),請遲些少再試過。",
        "import": "倒入頁面",
-       "importinterwiki": "Transwiki 倒入",
+       "importinterwiki": "由其它wiki度倒入",
        "import-interwiki-text": "揀一個 wiki 同埋一頁去倒入。\n修訂日期同編輯者會被保存落嚟。\n所有 transwiki 嘅倒入動作會響[[Special:Log/import|倒入日誌]]度記錄落嚟。",
+       "import-interwiki-sourcewiki": "來源維基:",
+       "import-interwiki-sourcepage": "來源頁:",
        "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儲存喺你個磁碟度,然後再上載到呢度。",
+       "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你部電腦度,然後再上載到呢度。",
        "importstart": "倒入緊...",
        "import-revision-count": "$1次修訂",
        "importnopages": "冇頁面去倒入。",
        "importcantopen": "唔能夠開個倒入檔案",
        "importbadinterwiki": "壞嘅跨 wiki 連結",
        "importsuccess": "已經完成倒入!",
-       "importnosources": "未定義 transwiki 嘅匯入來源,同埋歷史嘅直接上載已經停用。",
+       "importnosources": "未定義匯入來源,同埋歷史嘅直接上載已經停用。",
        "importnofile": "冇上載到任何要倒入嘅檔案。",
        "importuploaderrorsize": "上載要倒入嘅檔案失敗。個檔案大過可以容許嘅上載大細。",
        "importuploaderrorpartial": "上載要倒入嘅檔案失敗。個檔案只係部份上載咗。",
        "importuploaderrortemp": "上載要倒入嘅檔案失敗。個臨時資料夾唔見咗。",
        "import-parse-failure": "XML倒入語法失敗",
        "import-noarticle": "無版去倒入!",
-       "import-nonewrevisions": "全部嘅修訂已經響之前倒入咗。",
+       "import-nonewrevisions": "無修訂倒入(全部嘅修訂已經響之前倒入咗,或者因為出錯而跳咗唔做)。",
        "xml-error-string": "$1 響行$2,欄$3 ($4 bytes): $5",
        "import-upload": "上載XML資料",
        "import-token-mismatch": "小節資料遺失。請再試過。",
        "import-invalid-interwiki": "唔能夠響指定嘅wiki倒入。",
+       "import-error-edit": "頁「$1」未倒入,因為你無權改佢。",
+       "import-error-create": "頁「$1」未倒入,因為你無權建立佢。",
+       "import-error-interwiki": "頁「$1」未倒入,因為個名要留畀出面連結(跨維基)。",
+       "import-error-special": "頁「$1」未倒入,因為佢屬於一個特別名空間,唔畀開頁。",
+       "import-error-invalid": "頁「$1」未倒入,倒入個名響呢個維基無效。",
+       "import-options-wrong": "錯嘅{{PLURAL:$2|選項}}:<nowiki>$1</nowiki>",
+       "import-rootpage-invalid": "你畀嘅根頁係個無效嘅名。",
+       "import-rootpage-nosubpage": "根頁名空間「$1」唔畀有子頁。",
        "importlogpage": "倒入日誌",
        "importlogpagetext": "管理員由其它嘅 wiki 倒入頁面同埋佢哋嘅編輯歷史記錄。",
-       "import-logentry-upload-detail": "$1個修訂",
-       "import-logentry-interwiki-detail": "由$2嘅$1個修訂",
+       "import-logentry-upload-detail": "$1個修訂都已經倒入咗",
+       "import-logentry-interwiki-detail": "由$2倒入嘅$1個修訂",
+       "javascripttest": "JavaScript測試",
+       "javascripttest-pagetext-noframework": "呢頁留畀行JavaScript測試。",
+       "javascripttest-pagetext-unknownframework": "唔知嘅測試框架「$1」。",
+       "javascripttest-pagetext-unknownaction": "唔知嘅動作「$1」。",
+       "javascripttest-pagetext-frameworks": "請揀一個測試框架:$1",
+       "javascripttest-pagetext-skins": "揀個外觀去行測試:",
+       "javascripttest-qunit-intro": "睇 mediawiki.org 嘅 [$1 測試文檔]。",
        "tooltip-pt-userpage": "你嘅用戶頁",
        "tooltip-pt-anonuserpage": "你編輯呢個IP嘅對應用戶頁",
        "tooltip-pt-mytalk": "你嘅對話頁",
        "tooltip-ca-viewsource": "呢一頁已經被保護。你可以睇吓呢一頁呢原始碼。",
        "tooltip-ca-history": "呢一頁之前嘅修訂",
        "tooltip-ca-protect": "保護呢一頁",
-       "tooltip-ca-unprotect": "唔再保護呢一頁",
+       "tooltip-ca-unprotect": "改呢版保護",
        "tooltip-ca-delete": "刪除呢一頁",
        "tooltip-ca-undelete": "將呢個頁面還原到被刪除之前嘅狀態",
        "tooltip-ca-move": "移動呢一頁",
        "tooltip-feed-atom": "呢一頁嘅Atom集合",
        "tooltip-t-contributions": "睇吓呢個用戶嘅貢獻一覽",
        "tooltip-t-emailuser": "寄封電子郵件畀呢一位用戶",
+       "tooltip-t-info": "更多關於呢版嘅資料",
        "tooltip-t-upload": "上載檔案",
        "tooltip-t-specialpages": "所有特別頁嘅一覽",
        "tooltip-t-print": "呢一版嘅可打印版本",
        "tooltip-diff": "顯示你對頁面所作嘅修改",
        "tooltip-compareselectedversions": "顯示該頁面兩個所選修訂嘅唔同之處。",
        "tooltip-watch": "加呢頁入你張監視清單",
+       "tooltip-watchlistedit-normal-submit": "拎走標題",
+       "tooltip-watchlistedit-raw-submit": "更新監視清單",
        "tooltip-recreate": "即使已經刪過都要重新整過呢頁",
        "tooltip-upload": "開始上載",
        "tooltip-rollback": "『反轉』可以一撳復原上一位貢獻者對呢版嘅編輯",
        "spambot_username": "MediaWiki垃圾清除",
        "spam_reverting": "恢復返去最後一個唔包含指去$1嘅連結嘅嗰個修訂。",
        "spam_blanking": "全部版本都含有指去$1嘅連結,留空",
+       "spam_deleting": "全部版本都含有指去$1嘅連結,刪緊",
        "simpleantispam-label": "反垃圾檢查。\n'''唔好'''填呢個!",
+       "pageinfo-title": "「$1」嘅資料",
+       "pageinfo-not-current": "對唔住,無可能有舊版嘅資料。",
+       "pageinfo-header-basic": "基本資料",
+       "pageinfo-header-edits": "修改紀錄",
+       "pageinfo-header-restrictions": "頁保護",
+       "pageinfo-header-properties": "頁屬性",
+       "pageinfo-display-title": "顯示標題",
+       "pageinfo-default-sort": "預設排序法",
+       "pageinfo-length": "頁長(位元組)",
+       "pageinfo-article-id": "頁ID",
+       "pageinfo-language": "頁內容嘅語言",
+       "pageinfo-content-model": "頁內容嘅模型",
+       "pageinfo-robot-policy": "機械人整嘅索引",
+       "pageinfo-robot-index": "畀",
+       "pageinfo-robot-noindex": "唔畀",
+       "pageinfo-watchers": "頁嘅監視人數",
+       "pageinfo-few-watchers": "少過$1{{PLURAL:$1|人睇住}}",
+       "pageinfo-redirects-name": "跳轉到呢頁嘅連結數目",
+       "pageinfo-subpages-name": "呢頁嘅子頁數目",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|個跳轉}}; $3 {{PLURAL:$3|個唔係跳轉}})",
+       "pageinfo-firstuser": "原作者",
+       "pageinfo-firsttime": "開頁日子",
+       "pageinfo-lastuser": "最新編輯",
+       "pageinfo-lasttime": "最新編輯日子",
+       "pageinfo-edits": "修改總數",
+       "pageinfo-authors": "唔重覆編輯者總數",
+       "pageinfo-recent-edits": "最近修改次數(之前 $1 之內)",
+       "pageinfo-recent-authors": "最近唔重覆編輯者總數",
+       "pageinfo-magic-words": "魔術{{PLURAL:$1|字}} ($1)",
+       "pageinfo-hidden-categories": "收埋嘅{{PLURAL:$1|類}} ($1)",
+       "pageinfo-templates": "嵌入嘅{{PLURAL:$1|模}} ($1)",
+       "pageinfo-transclusions": "嵌入嘅{{PLURAL:$1|頁}} ($1)",
        "pageinfo-toolboxlink": "頁面資訊",
+       "pageinfo-redirectsto": "跳轉去",
+       "pageinfo-redirectsto-info": "資料",
+       "pageinfo-contentpage": "計做內容頁",
+       "pageinfo-contentpage-yes": "係",
+       "pageinfo-protect-cascading": "保護引申到呢度",
+       "pageinfo-protect-cascading-yes": "係",
+       "pageinfo-protect-cascading-from": "保護引申來源",
+       "pageinfo-category-info": "類資料",
+       "pageinfo-category-pages": "頁數",
+       "pageinfo-category-subcats": "子類數",
+       "pageinfo-category-files": "檔案數",
        "markaspatrolleddiff": "標示為已巡查嘅",
        "markaspatrolledtext": "標示呢版做查咗嘅",
        "markedaspatrolled": "已經標示做已巡查嘅",
        "markedaspatrollederror": "唔可以標示做已巡查嘅",
        "markedaspatrollederrortext": "你需要指定一個修訂用嚟將佢標示做已巡查嘅。",
        "markedaspatrollederror-noautopatrol": "你係唔准去標示你自己嘅更改做已巡查嘅。",
+       "markedaspatrollednotify": "$1 嘅呢次修改已經標做睇過。",
+       "markedaspatrollederrornotify": "標做睇過失敗。",
        "patrol-log-page": "巡查日誌",
        "patrol-log-header": "呢個係已經巡查過嘅日誌。",
        "log-show-hide-patrol": "$1巡查紀錄",
        "widthheightpage": "$1 × $2, $3版",
        "file-info": "檔案大細:$1 ,MIME類型:$2",
        "file-info-size": "$1 × $2 像素,檔案大細:$3 ,MIME類型:$4",
+       "file-info-size-pages": "$1 × $2 像素,檔案大細: $3 ,MIME type: $4,$5 {{PLURAL:$5|頁}}",
        "file-nohires": "冇更高解像度嘅圖像。",
        "svg-long-desc": "SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3",
+       "svg-long-desc-animated": "動態SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3",
+       "svg-long-error": "無效嘅SVG檔: $1",
        "show-big-image": "原本檔案",
        "show-big-image-preview": "預覽大細:$1。",
        "show-big-image-other": "第啲{{PLURAL:$2|解像度}}:$1。",
        "file-info-png-looped": "循環",
        "file-info-png-repeat": "播咗$1次",
        "file-info-png-frames": "$1格",
+       "file-no-thumb-animation": "<strong>注意:因為技術限制,呢個檔案縮圖唔係動態。</strong>",
+       "file-no-thumb-animation-gif": "<strong>注意:因為技術限制,呢個高解像GIF圖嘅縮圖唔係動態。</strong>",
        "newimages": "新檔案畫廊",
        "imagelisttext": "以下係'''$1'''個檔案$2排序嘅清單。",
        "newimages-summary": "呢個特別頁顯示最後上載咗嘅檔案。",
        "newimages-legend": "過濾",
        "newimages-label": "檔名(或佢嘅一部份):",
+       "newimages-showbots": "顯示機械人嘅上載",
        "noimages": "冇嘢去睇。",
        "ilsubmit": "搵嘢",
        "bydate": "以時間",
        "sp-newimages-showfrom": "顯示由$1 $2嘅新檔",
+       "seconds": "{{PLURAL:$1|$1 秒}}",
+       "minutes": "{{PLURAL:$1|$1 分鐘}}",
        "hours": "$1{{PLURAL:$1|個鐘}}",
+       "days": "{{PLURAL:$1|$1 日}}",
+       "weeks": "{{PLURAL:$1|$1 個禮拜}}",
+       "months": "{{PLURAL:$1|$1 個月}}",
+       "years": "{{PLURAL:$1|$1 年}}",
+       "ago": "$1 之前",
+       "just-now": "啱啱",
        "hours-ago": "$1{{PLURAL:$1|個鐘}}之前",
+       "minutes-ago": "$1 {{PLURAL:$1|分鐘}}前",
+       "seconds-ago": "$1 {{PLURAL:$1|秒}}前",
+       "monday-at": "$1 禮拜一",
+       "tuesday-at": "$1 禮拜二",
+       "wednesday-at": "$1 禮拜三",
+       "thursday-at": "$1 禮拜四",
+       "friday-at": "$1 禮拜五",
+       "saturday-at": "$1 禮拜六",
+       "sunday-at": "$1 禮拜日",
        "bad_image_list": "請根據下面嘅格式去寫:\n\n只有列示項目(以 * 開頭嘅項目)會考慮。第一個連結一定要連去幅壞檔度。\n之後響同一行嘅連結會考慮做例外,即係個檔可以響邊版度同時顯示。",
        "variantname-zh-hans": "簡體",
        "variantname-zh-hant": "繁體",
        "exif-colorspace": "色彩空間",
        "exif-componentsconfiguration": "每個部份嘅意思",
        "exif-compressedbitsperpixel": "影像壓縮模式",
-       "exif-pixelydimension": "影像有效闊度",
-       "exif-pixelxdimension": "影像有效高度",
+       "exif-pixelydimension": "影像闊度",
+       "exif-pixelxdimension": "影像高度",
        "exif-usercomment": "用家註腳",
        "exif-relatedsoundfile": "相關聲音檔",
        "exif-datetimeoriginal": "原創日期時間",
        "exif-exposureprogram": "曝光程序",
        "exif-spectralsensitivity": "光譜敏感度",
        "exif-isospeedratings": "ISO 速率",
-       "exif-shutterspeedvalue": "快門速度",
-       "exif-aperturevalue": "光圈",
-       "exif-brightnessvalue": "光度",
+       "exif-shutterspeedvalue": "APEX快門速度",
+       "exif-aperturevalue": "APEX光圈",
+       "exif-brightnessvalue": "APEX光度",
        "exif-exposurebiasvalue": "曝光偏壓",
        "exif-maxaperturevalue": "最大陸地孔徑",
        "exif-subjectdistance": "主體距離",
        "exif-gpsdatestamp": "GPS 日期",
        "exif-gpsdifferential": "GPS 差動修正",
        "exif-objectname": "短標題",
+       "exif-headline": "標題",
+       "exif-source": "來源",
+       "exif-languagecode": "語言",
+       "exif-iimcategory": "類",
+       "exif-label": "標籤",
+       "exif-copyrighted": "版權狀態",
+       "exif-copyrightowner": "版權人",
+       "exif-disclaimer": "免責聲明",
        "exif-compression-1": "未壓過",
        "exif-unknowndate": "未知日期",
        "exif-orientation-1": "正常",
        "exif-orientation-3": "轉一百八十度",
        "exif-orientation-4": "上下倒轉",
        "exif-orientation-5": "逆時針轉九十度,再上下倒轉",
-       "exif-orientation-6": "é \86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
+       "exif-orientation-6": "é\80\86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
        "exif-orientation-7": "順時針轉九十度,再上下倒轉",
-       "exif-orientation-8": "é\80\86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
+       "exif-orientation-8": "é \86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
        "exif-planarconfiguration-1": "chunky 格式",
        "exif-planarconfiguration-2": "planar 格式",
        "exif-componentsconfiguration-0": "根本無",
        "exif-gpsdestdistance-n": "浬",
        "exif-gpsdirection-t": "真實方向",
        "exif-gpsdirection-m": "地磁方向",
+       "exif-dc-contributor": "貢獻者",
+       "exif-dc-date": "日子",
+       "exif-dc-publisher": "發佈者",
+       "exif-dc-rights": "權",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認電郵地址",
        "confirm_purge_button": "肯定",
        "confirm-purge-top": "肯定要洗咗呢版個快取版本?",
        "confirm-purge-bottom": "清理一版係會清除快取同埋強迫顯示最現時嘅修訂。",
+       "confirm-watch-button": "好",
+       "confirm-watch-top": "加呢頁入你張監視清單?",
+       "confirm-unwatch-button": "好",
+       "confirm-unwatch-top": "將呢一頁喺你嘅監視清單中移走?",
        "comma-separator": "、",
        "word-separator": "",
        "parentheses": "($1)",
+       "quotation-marks": "「$1」",
        "imgmultipageprev": "← 上一版",
        "imgmultipagenext": "下一版 →",
        "imgmultigo": "去!",
        "imgmultigoto": "去第$1版",
+       "img-lang-default": "(預設語言)",
+       "img-lang-go": "去",
        "ascending_abbrev": "增",
        "descending_abbrev": "減",
        "table_pager_next": "下一版",
        "watchlistedit-raw-done": "你嘅監視清單已經更新。",
        "watchlistedit-raw-added": "已經加入咗$1個標題:",
        "watchlistedit-raw-removed": "已經拎走咗$1個標題:",
+       "watchlistedit-clear-titles": "標題:",
        "watchlisttools-view": "睇吓有關嘅更改",
        "watchlisttools-edit": "睇吓同埋編輯監視清單",
        "watchlisttools-raw": "編輯原始監視清單",
        "duplicate-defaultsort": "警告: 預設嘅排序鍵 \"$2\" 覆蓋之前嘅預設排序鍵 \"$1\"。",
        "version": "版本",
        "version-extensions": "裝咗嘅擴展",
-       "version-skins": "畫面",
+       "version-skins": "裝咗嘅畫面",
        "version-specialpages": "特別頁",
        "version-parserhooks": "語法鈎",
        "version-variables": "變數",
        "version-hook-name": "鈎名",
        "version-hook-subscribedby": "利用於",
        "version-version": "($1)",
-       "version-license": "牌照",
+       "version-no-ext-name": "[無名]",
+       "version-license": "MediaWiki牌照",
+       "version-ext-license": "牌照",
+       "version-ext-colheader-name": "擴充",
+       "version-skin-colheader-name": "畫面",
+       "version-ext-colheader-version": "版本",
+       "version-ext-colheader-license": "牌照",
+       "version-ext-colheader-description": "描述",
+       "version-ext-colheader-credits": "作者",
        "version-poweredby-credits": "呢個 Wiki 係由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
        "version-poweredby-others": "其他",
+       "version-poweredby-translators": "translatewiki.net 翻譯者",
        "version-license-info": "MediaWiki係自由軟件;你可以根據Free Software Foundation所發表嘅GNU General Public License條款規定,就本程式再發佈同/或修改;無論你根據嘅係呢個牌照嘅第二版或(任你揀)任一日之後發行嘅版本。\n\nMediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅責任;亦都唔會對適售性或都係特定目的適用性嘅默示性擔保。詳情請目睇GNU General Public License。\n\n你應該已經收到跟往呢個程式嘅[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License嘅副本];如果冇嘅話,請寫信到至Free Software Foundation, Inc.:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 上網睇]。",
        "version-software": "裝咗嘅軟件",
        "version-software-product": "產品",
        "version-software-version": "版本",
+       "version-entrypoints-header-url": "網址",
+       "version-libraries-version": "版本",
+       "redirect-submit": "去",
+       "redirect-value": "值:",
+       "redirect-user": "用戶ID",
+       "redirect-page": "頁ID",
+       "redirect-revision": "頁版本",
+       "redirect-file": "檔名",
        "fileduplicatesearch": "㨂重覆檔案",
        "fileduplicatesearch-summary": "用重覆檔案嘅切細值去搵個檔案係唔係重覆。",
        "fileduplicatesearch-legend": "搵重覆",
        "fileduplicatesearch-result-n": "個檔案 \"$1\" 有$2項完全相同嘅重覆。",
        "fileduplicatesearch-noresults": "檔案名\"$1\"找不到",
        "specialpages": "特別頁",
-       "specialpages-note": "* 標準特別頁。\n* <strong class=\"mw-specialpagerestricted\">有限制嘅特別頁。</strong>",
+       "specialpages-note": "* 標準特別頁。\n* <span class=\"mw-specialpagerestricted\">有限制嘅特別頁。</span>",
        "specialpages-group-maintenance": "維護報告",
        "specialpages-group-other": "其它特別頁",
-       "specialpages-group-login": "ç\99»å\85¥ï¼\8fé\96\8b戶口",
+       "specialpages-group-login": "ç°½å\88°ï¼\8fé\96\8bæ\96°戶口",
        "specialpages-group-changes": "最近更改同日誌",
        "specialpages-group-media": "媒體報告同上載",
        "specialpages-group-users": "用戶同權限",
        "specialpages-group-highuse": "高度使用頁",
        "specialpages-group-pages": "頁面一覽",
        "specialpages-group-pagetools": "版工具",
-       "specialpages-group-wiki": "Wiki資料同工具",
+       "specialpages-group-wiki": "資料同工具",
        "specialpages-group-redirects": "跳轉特別頁",
        "specialpages-group-spam": "反垃圾工具",
        "specialpages-group-developer": "開發者工具",
        "tags-tag": "標籤名",
        "tags-display-header": "響更改表嘅出現方式",
        "tags-description-header": "解釋完整描述",
+       "tags-source-header": "來源",
        "tags-hitcount-header": "加咗標籤嘅更改",
+       "tags-actions-header": "動作",
+       "tags-active-yes": "係",
+       "tags-active-no": "唔係",
        "tags-edit": "編輯",
+       "tags-delete": "刪除",
        "tags-hitcount": "$1次更改",
+       "tags-create-reason": "原因:",
+       "tags-create-submit": "開",
+       "tags-delete-reason": "原因:",
+       "tags-activate-reason": "原因:",
+       "tags-deactivate-reason": "原因:",
        "comparepages": "比較版",
        "compare-page1": "第1版",
        "compare-page2": "第2版",
        "compare-submit": "比較",
        "dberr-problems": "對唔住!呢一版出現咗一啲技術性問題。",
        "dberr-again": "試吓等多幾分種然後開試。",
-       "dberr-info": "(唔能夠連繫個資料伺服器: $1)",
+       "dberr-info": "(唔能夠連繫個資料庫:$1)",
        "dberr-usegoogle": "響現階段你可以用 Google 去搵嘢。",
        "dberr-outofdate": "留意佢哋索引嘅內容可能會過時。",
        "dberr-cachederror": "呢個係所要求版嘅快取複本,可能會過時。",
        "htmlform-submit": "遞交",
        "htmlform-reset": "復原更改",
        "htmlform-selectorother-other": "其他",
+       "htmlform-no": "唔係",
+       "htmlform-yes": "係",
+       "htmlform-chosen-placeholder": "揀個選項",
+       "htmlform-cloner-create": "加多啲",
+       "htmlform-cloner-delete": "拎走",
        "sqlite-has-fts": "$1 有全文搜尋支援",
        "sqlite-no-fts": "$1 冇全文搜尋支援",
        "logentry-delete-delete": "$1 刪咗頁 $3",
        "logentry-upload-upload": "$1 {{GENDER:$2|上傳咗}} $3",
        "rightsnone": "(冇)",
        "revdelete-summary": "編輯摘要",
+       "feedback-back": "返轉頭",
+       "feedback-cancel": "取消",
+       "feedback-close": "搞掂",
+       "feedback-error-title": "出錯",
+       "feedback-submit": "遞交",
+       "feedback-thanks-title": "多謝!",
        "searchsuggest-search": "搵嘢",
        "searchsuggest-containing": "名單傳送緊...",
+       "api-error-unclassified": "發生未知嘅錯誤。",
+       "api-error-unknown-code": "未知嘅出錯:$1。",
+       "api-error-unknown-warning": "未知嘅警告:$1。",
+       "api-error-unknownerror": "未知嘅出錯:$1。",
+       "api-error-uploaddisabled": "呢個維基唔畀上載檔案。",
+       "api-error-verification-error": "檔案壞咗或者用錯副檔名。",
+       "duration-seconds": "$1 {{PLURAL:$1|秒}}",
+       "duration-minutes": "$1 {{PLURAL:$1|分鐘}}",
        "duration-hours": "$1{{PLURAL:$1|個鐘}}",
+       "duration-days": "$1 {{PLURAL:$1|日}}",
+       "duration-weeks": "$1 {{PLURAL:$1|個禮拜}}",
+       "duration-years": "$1 {{PLURAL:$1|年}}",
+       "duration-decades": "$1 {{PLURAL:$1|個年代}}",
+       "duration-centuries": "$1 {{PLURAL:$1|個世紀}}",
+       "duration-millennia": "$1 {{PLURAL:$1|個千禧年}}",
+       "rotate-comment": "幅圖順時針轉 $1 {{PLURAL:$1|度}}",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|秒}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|秒}}",
        "expandtemplates": "展開模",
-       "expand_templates_intro": "呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。同時亦都展開解譯器函數好似<nowiki>{{</nowiki>#language:...}},以及一啲變數好似<nowiki>{{</nowiki>CURRENTDAY}}&mdash;實際上,幾乎所有響雙括弧中嘅內容都會被展開。呢個特別頁係通過使用MediaWiki嘅相關解釋階段嘅功能完成嘅。",
+       "expand_templates_intro": "呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。\n同時亦都展開解譯器函數好似\n<code><nowiki>{{</nowiki>#language:...}}</code>,同埋一啲變數好似\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,幾乎所有響雙括弧中嘅內容都會被展開。",
        "expand_templates_title": "內容標題,用於 {{FULLPAGENAME}} 等頁面:",
        "expand_templates_input": "輸入文字:",
        "expand_templates_output": "結果:",
        "expand_templates_xml_output": "XML輸出",
+       "expand_templates_html_output": "原始HTML輸出",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "拎走注釋",
+       "expand_templates_remove_nowiki": "結果壓制<nowiki>標籤",
        "expand_templates_generate_xml": "顯示XML語法樹",
+       "expand_templates_generate_rawhtml": "顯示原始HTML",
        "expand_templates_preview": "預覽",
+       "pagelanguage": "頁面語言選擇器",
+       "pagelang-name": "版",
+       "pagelang-language": "語言",
+       "pagelang-use-default": "用預設語言",
+       "pagelang-select-lang": "揀語言",
+       "right-pagelang": "改頁面語言",
+       "action-pagelang": "改頁面語言",
+       "log-name-pagelang": "改語言紀錄",
+       "log-description-pagelang": "呢個係改語言嘅紀錄。",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (可以用)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (唔可以用)",
+       "mediastatistics": "媒體統計",
+       "mediastatistics-header-unknown": "唔知",
+       "mediastatistics-header-bitmap": "點陣圖",
+       "mediastatistics-header-drawing": "向量圖",
+       "mediastatistics-header-audio": "語音",
+       "mediastatistics-header-video": "影片",
+       "mediastatistics-header-multimedia": "多媒體",
+       "mediastatistics-header-office": "Office文件",
+       "mediastatistics-header-text": "文字",
+       "mediastatistics-header-executable": "執行檔",
+       "mediastatistics-header-archive": "壓縮格式",
+       "json-error-syntax": "語法錯咗",
+       "headline-anchor-title": "連結到呢一節",
        "special-characters-group-latin": "拉丁文",
        "special-characters-group-latinextended": "Latin擴展左",
        "special-characters-group-ipa": "IPA",
        "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": "Bangla\nBangla",
+       "special-characters-group-tamil": "淡米爾文",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Sinhala",
-       "special-characters-group-gujarati": "Gujarati"
+       "special-characters-group-gujarati": "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 91a19dc..e3f0ca1 100644 (file)
@@ -82,7 +82,9 @@
                        "NigelSoft",
                        "Zhuyifei1999",
                        "Davidzdh",
-                       "LNDDYL"
+                       "LNDDYL",
+                       "Jiang123aa",
+                       "Cdz"
                ]
        },
        "tog-underline": "链接下划线:",
@@ -94,7 +96,7 @@
        "tog-numberheadings": "自动编号标题",
        "tog-showtoolbar": "显示编辑工具栏",
        "tog-editondblclick": "双击编辑页面",
-       "tog-editsectiononrightclick": "å\90¯ç\94¨å\8f³å\87»å°\8fè\8a\82æ \87é¢\98编辑段落",
+       "tog-editsectiononrightclick": "å\8f³å\87»æ®µè\90½æ \87é¢\98å\90¯ç\94¨编辑段落",
        "tog-watchcreations": "添加我创建的页面和我上传的文件至我的监视列表",
        "tog-watchdefault": "添加我编辑的页面和文件至我的监视列表",
        "tog-watchmoves": "添加我移动的页面和文件至我的监视列表",
        "unexpected": "非正常值:“$1”=“$2”。",
        "formerror": "错误:无法提交表单",
        "badarticleerror": "无法在此页进行该操作。",
-       "cannotdelete": "无法删除页面或图像“$1”。\n它可能已被其他人删除了。",
-       "cannotdelete-title": "无法删除“$1”",
+       "cannotdelete": "无法删除页面或文件“$1”。\n它可能已被其他人删除了。",
+       "cannotdelete-title": "无法删除页面“$1”",
        "delete-hook-aborted": "删除被扩展钩子取消。钩子并没有给出解释。",
        "no-null-revision": "无法创建对\"$1\"页面新的空白版本",
        "badtitle": "错误标题",
-       "badtitletext": "æ\89\80请æ±\82页é\9d¢ç\9a\84æ \87é¢\98æ\98¯æ\97 æ\95\88ç\9a\84ã\80\81ä¸\8då­\98å\9c¨ï¼\8c跨语è¨\80æ\88\96è·¨wikié\93¾æ\8e¥ç\9a\84æ \87é¢\98é\94\99误ã\80\82å®\83å\8f¯è\83½å\8c\85å\90«ä¸\80个æ\88\96æ\9b´å¤\9aç\9a\84不能用于标题的字符。",
+       "badtitletext": "æ\82¨è¯·æ±\82äº\86个æ\97 æ\95\88ã\80\81ä¸\8då­\98å\9c¨æ\88\96è\80\85跨语è¨\80æ\88\96è·¨wikié\93¾æ\8e¥æ \87é¢\98é\94\99误ç\9a\84页é\9d¢ã\80\82å®\83å\8f¯è\83½å\8c\85å\90«ä¸\80个æ\88\96å¤\9a个不能用于标题的字符。",
        "perfcached": "以下是缓存的数据,可能不是最新的数据。缓存中最多有{{PLURAL:$1|$1条结果}}。",
        "perfcachedts": "以下是缓存的数据,最后更新于$1。缓存中最多有{{PLURAL:$4|$4条结果}}。",
        "querypage-no-updates": "该页面的更新目前停用。这里的数据不会马上刷新。",
        "viewsource": "查看源代码",
        "viewsource-title": "查看“$1”的源代码",
        "actionthrottled": "操作被限制",
-       "actionthrottledtext": "基于反垃圾的考量,您被限制在短时间内多次重复该操作,但您已超过此上限。请在数分钟后再尝试。",
+       "actionthrottledtext": "作为反破坏措施,您被限制在短时间段内执行太多次该操作,并且您已超越此限制。请在数分钟后再试。",
        "protectedpagetext": "该页面已被保护以防止编辑和其他操作。",
        "viewsourcetext": "您可以查看并复制此页面的源代码:",
        "viewyourtext": "您可以查看并复制<strong>您对此页面作出编辑后</strong>的源代码:",
        "createacct-realname": "真实姓名(可选)",
        "createaccountreason": "原因:",
        "createacct-reason": "原因",
-       "createacct-reason-ph": "为什么要创建另一个账户",
+       "createacct-reason-ph": "为什么要创建另一个账户",
        "createacct-captcha": "安全检查",
        "createacct-imgcaptcha-ph": "请输入上图中的文字",
-       "createacct-submit": "创建的账户",
+       "createacct-submit": "创建的账户",
        "createacct-another-submit": "创建另一个账户",
        "createacct-benefit-heading": "{{SITENAME}}是由同你一样的人们构筑的。",
        "createacct-benefit-body1": "{{PLURAL:$1|编辑}}",
        "emaildisabled": "该网站无法发送电子邮件。",
        "accountcreated": "已建立账户",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]])的账户已创建。",
-       "createaccount-title": "在{{SITENAME}}创建新账户",
+       "createaccount-title": "在{{SITENAME}}创建新账户",
        "createaccount-text": "有人在{{SITENAME}}中利用您的邮箱创建了一个名为 \"$2\" 的新帐户($4),密码是 \"$3\" 。您应该立即登录并更改密码。\n\n如果该账户创建错误的话,您可以忽略此信息。",
        "login-throttled": "你最近尝试登录的次数过多。请等待$1后再试。",
        "login-abort-generic": "登录失败 - 已终止",
        "revdelete-edit-reasonlist": "编辑删除原因",
        "revdelete-offender": "版本作者:",
        "suppressionlog": "监督日志",
-       "suppressionlogtext": "该列表列出了管理员隐藏的删除与封禁。另参见[[Special:BlockList|封禁列表]]查询当前的封禁列表。",
+       "suppressionlogtext": "该列表列出了管理员隐藏的删除与封禁。另参见[[Special:BlockList|封禁列表]]查询当前的封禁列表。",
        "mergehistory": "合并页面历史",
        "mergehistory-header": "这一页可以让您将来源页面的版本合并到新页面中去。请确保此次更改能继续保持历史页面的连续性。",
        "mergehistory-box": "合并两个页面的版本历史:",
        "listfiles-delete": "删除",
        "listfiles-summary": "本特殊页面展示所有上传的文件。",
        "listfiles_search_for": "按媒体名称搜索:",
+       "listfiles-userdoesnotexist": "用户帐户“$1”未注册。",
        "imgfile": "文件",
        "listfiles": "文件列表",
        "listfiles_thumb": "缩略图",
        "emailccsubject": "您发送给$1的消息的副本:$2",
        "emailsent": "电子邮件已发送",
        "emailsenttext": "您的电子邮件已经发出。",
-       "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“电邮联系”功能被$1发送至$2的。",
+       "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“{{int:emailpage}}”功能被$1发送至$2的。",
        "usermessage-summary": "留下系统消息。",
        "usermessage-editor": "系统信息编辑器",
        "watchlist": "监视列表",
        "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>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
+       "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。\n\n您的安装版本看起来需要包含以下{{PLURAL:$4|皮肤}}。参见MediaWiki官网手册[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/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下{{PLURAL:$5|几行}}文本至您wiki的<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; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2(已启用)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2('''已禁用''')",
index 4b756d3..99d8723 100644 (file)
        "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您的安裝程序應包含以下外觀。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [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 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\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 ('''已停用''')",
index 9abb137..74a4542 100644 (file)
     "session_fail_preview": "'''很抱歉!由於部份資料遺失,我們無法處理您的編輯。'''\n請再試一次。\n如果仍然失敗,請[[Special:UserLogout|登出]]後重新登入。",
     "session_fail_preview_html": "'''很抱歉!部份資料已遺失,我們無法處理您的編輯。''''''如果這個編輯過程沒有問題,請再試一次。如果仍然有問題,請登出後再重新登入一次。'''",
     "token_suffix_mismatch": "'''由於您使用者端中的編輯信符毀損了一些標點符號字元,為防止編輯的文字損壞,您的編輯已經被拒絕。\n這種情況通常出現於使用含有很多臭蟲、以網路為主的匿名代理服務的時候。'''",
-    "editing": "正在编辑 $1",
     "editingcomment": "正在編輯$1(新段落)",
     "storedversion": "已保存版本",
     "nonunicodebrowser": "'''警告: 您的瀏覽器不相容Unicode編碼。這裡有一個工作區將使您能安全地編輯頁面: 非ASCII字元將以十六進製編碼模式出現在編輯框中。'''",
index 3d0aafc..027e55e 100644 (file)
@@ -1,11 +1,13 @@
 <?php
-/** Western Balochi
+/** Western Balochi (بلوچی رخشانی)
  *
  * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
  *
+ * @author Ibrahim khashrowdi
+ * @author Mjbmr
  */
 
 $fallback = 'fa';
@@ -29,3 +31,117 @@ $namespaceNames = array(
        NS_CATEGORY         => 'تهر',
        NS_CATEGORY_TALK    => 'تهر_ئی_گپ',
 );
+
+$specialPageAliases = array(
+       'Activeusers'               => array( 'پئالین_کارمرزوکان' ),
+       'Allmessages'               => array( 'موچین_پیامان' ),
+       'AllMyUploads'              => array( 'نی_موچین_ایرگیج_ئآن', 'نی_موچین_وّرک_ئآن' ),
+       'Allpages'                  => array( 'موچین_تاکدیمان' ),
+       'ApiHelp'                   => array( 'ای_پی_آی_کومک' ),
+       'Ancientpages'              => array( 'کوهنگین_تاکدیمان' ),
+       'Badtitle'                  => array( 'خرابین_ئینوان' ),
+       'Blankpage'                 => array( 'خالین_دیم' ),
+       'Block'                     => array( 'بستین', 'آی_پی_بستین', 'کارمرزوکی_بستین' ),
+       'Booksources'               => array( 'کتاب_ئی_بُن' ),
+       'BrokenRedirects'           => array( 'خرابین_تغیرمسیر' ),
+       'Categories'                => array( 'تهرئان' ),
+       'ChangeEmail'               => array( 'ایمیل_ئی_گردینتین' ),
+       'ChangePassword'            => array( 'چیهرگال_ئی_پاک_کورتین', 'چیهرگال_ئی_ٹگل' ),
+       'ComparePages'              => array( 'تاکدیمانی_موقایسه_کورتین' ),
+       'Confirmemail'              => array( 'ایمیل_ئی_تائید_کورتین' ),
+       'Contributions'             => array( 'شراکت_ئان' ),
+       'CreateAccount'             => array( 'کارمرزوکین_هیساب_ئی_جۆڑ_کورتین' ),
+       'Deadendpages'              => array( 'بن_بست_ئین_تاکدیمان' ),
+       'DeletedContributions'      => array( 'پاک_بوته_ئین_شراکت_ئان' ),
+       'Diff'                      => array( 'پرک' ),
+       'DoubleRedirects'           => array( 'دوئین_تغیرمسیرئان' ),
+       'EditWatchlist'             => array( 'پێ_گیری_ئی_لیستی_دستکاری_کورتین' ),
+       'Emailuser'                 => array( 'په_کارمرزوکا_ایمیل_دیم_داتین' ),
+       'ExpandTemplates'           => array( 'تراشوانی_پراخ_کورتین' ),
+       'Export'                    => array( 'دیمی_ڈنا_بورتین' ),
+       'Fewestrevisions'           => array( 'کمتیرین_نخسه' ),
+       'FileDuplicateSearch'       => array( 'گشتین_په_تکرارین_وّرک_ئا' ),
+       'Filepath'                  => array( 'وّرک_ئی_مسیر' ),
+       'Import'                    => array( 'ورق_ئانی_ریتین' ),
+       'Invalidateemail'           => array( 'ایمیلی_باتل_کورتین' ),
+       'JavaScriptTest'            => array( 'جاوا_سکریپت_ئی_تست' ),
+       'BlockList'                 => array( 'بسته_بوته_ئآنی_لیست', 'آی_پی_نشانی_بستینی_لیست' ),
+       'LinkSearch'                => array( 'گشتین_په_لینکا' ),
+       'Listadmins'                => array( 'مدیرئانی_لیست' ),
+       'Listbots'                  => array( 'روباٹ_ئانی_لیست' ),
+       'Listfiles'                 => array( 'پایل_ئانی_لیست', 'اکس_ئانی_لیست' ),
+       'Listgrouprights'           => array( 'کارمرزوکین_گروپانی_اختیاران' ),
+       'Listredirects'             => array( 'تغیرمسیرئانی_لیست' ),
+       'ListDuplicatedFiles'       => array( 'تکرارین_پایلانی_لیست' ),
+       'Listusers'                 => array( 'کارمرزوکانی_لیست' ),
+       'Lockdb'                    => array( 'مالوماتین_بانکی_قُلپ_کورتین' ),
+       'Log'                       => array( 'سیاهه_ئان' ),
+       'Lonelypages'               => array( 'آتیمین_دیمان' ),
+       'Longpages'                 => array( 'بُرزین_دیمان' ),
+       'MediaStatistics'           => array( 'رسانگ_ئانی_سرجم' ),
+       'MergeHistory'              => array( 'تاریخی_ادغام_کورتین' ),
+       'MIMEsearch'                => array( 'MIME_ئی_گشتین' ),
+       'Mostcategories'            => array( 'بازتیرین_تهر' ),
+       'Mostimages'                => array( 'بازتیرین_اکس' ),
+       'Mostinterwikis'            => array( 'بازتیرین_مانجین_ویکی' ),
+       'Mostlinked'                => array( 'بازتیرین_لینک' ),
+       'Mostlinkedcategories'      => array( 'تهر_گۆ_بازتیرین_لینکا' ),
+       'Mostlinkedtemplates'       => array( 'تراشوان_گۆ_بازتیرین_لینکا' ),
+       'Mostrevisions'             => array( 'بازتیرین_نخسه' ),
+       'Movepage'                  => array( 'دیمی_لڈّّینتین' ),
+       'Mycontributions'           => array( 'نی_شراکت_ئان' ),
+       'MyLanguage'                => array( 'نی_زبان_ئان' ),
+       'Mypage'                    => array( 'نی_ورق' ),
+       'Mytalk'                    => array( 'نی_گپ' ),
+       'Myuploads'                 => array( 'نی_بُرز_بوته_ئین_پایلان' ),
+       'Newimages'                 => array( 'نۆکین_اکس' ),
+       'Newpages'                  => array( 'نۆکین_وَرق_ئان' ),
+       'PagesWithProp'             => array( 'وّرق_ئانی_خاسی_ئت_گۆ' ),
+       'PageLanguage'              => array( 'وّرق_ئی_زبان' ),
+       'PasswordReset'             => array( 'چیهرگالی_نادینتین' ),
+       'PermanentLink'             => array( 'دایمین_لینک' ),
+       'Popularpages'              => array( 'مشهورین_وّرق_ئان' ),
+       'Preferences'               => array( 'تنزیمات' ),
+       'Prefixindex'               => array( 'دیمۆندین_نمایگ' ),
+       'Protectedpages'            => array( 'قُلپ_بوته_ئین_ورق_ئان' ),
+       'Protectedtitles'           => array( 'قُلپ_بوته_ئین_ئینوان_ئان' ),
+       'Randompage'                => array( 'تسادوپین_وّرق' ),
+       'RandomInCategory'          => array( 'تسادوپی_بئ_تهری_تا' ),
+       'Randomredirect'            => array( 'تسادوپین_تغیرمیسر' ),
+       'Recentchanges'             => array( 'آخیرئین_تغیران' ),
+       'Recentchangeslinked'       => array( 'مربوتین_تغیران' ),
+       'Redirect'                  => array( 'تغیرمسیر' ),
+       'ResetTokens'               => array( 'نشانگ_ئانی_پدا_نادینتین' ),
+       'Revisiondelete'            => array( 'نخسه_ئی_پاک_کورتین' ),
+       'RunJobs'                   => array( 'کارێ_کورتین' ),
+       'Search'                    => array( 'گشتین' ),
+       'Shortpages'                => array( 'گۆنڈین_تاکدیمان' ),
+       'Specialpages'              => array( 'خاسین_تاکدیمان' ),
+       'Statistics'                => array( 'سرجم' ),
+       'Tags'                      => array( 'برچسپ_ئان', 'تگ_ئان' ),
+       'TrackingCategories'        => array( 'ودی_کنۆکین_تهرئان' ),
+       'Unblock'                   => array( 'پاچ_کورتین' ),
+       'Uncategorizedcategories'   => array( 'دسته_بندی_نه_بوته_ئین_تهر_ئان' ),
+       'Uncategorizedimages'       => array( 'دسته_بندی_نه_بوته_ئین_اکس_ئان' ),
+       'Uncategorizedpages'        => array( 'دسته_بندی_نه_بوته_ئین_تاکدیمان' ),
+       'Uncategorizedtemplates'    => array( 'دسته_بندی_نه_بوته_ئین_تراشوانان' ),
+       'Undelete'                  => array( 'پاک_بوته_ئین_وّرق_ئی_بجا_آورتین' ),
+       'Unlockdb'                  => array( 'مالوماتین_بانکی_قُلپی_پاچ_کورتین' ),
+       'Unusedcategories'          => array( 'ایستیپاده_نه_بوته_ئین_تهر_ئان' ),
+       'Unusedimages'              => array( 'ایستیپاده_نه_بوته_ئین_اکس_ئان' ),
+       'Unusedtemplates'           => array( 'ایستیپاده_نه_بوه_ئین_تراشوانان' ),
+       'Unwatchedpages'            => array( 'پدگیری_نه_بوته_ئین_وّرق_ئان' ),
+       'Upload'                    => array( 'پایلی_ئی_بُرز_کورتین' ),
+       'UploadStash'               => array( 'بَزین_بُرز_کورتین' ),
+       'Userlogin'                 => array( 'داخل_بوتین_بئ_سایٹ_ئی_تا' ),
+       'Userlogout'                => array( 'دَر_بوتین_شه_سایٹ_ئا' ),
+       'Userrights'                => array( 'کارمرزوک_ئی_اختیار_ئان' ),
+       'Version'                   => array( 'نخسه' ),
+       'Wantedcategories'          => array( 'زَرورتین_تهر_ئان' ),
+       'Wantedfiles'               => array( 'زَرورتین_اکس_ئان' ),
+       'Wantedpages'               => array( 'زَرورتین_وّرق_ئان' ),
+       'Wantedtemplates'           => array( 'زَرورتین_تراشوانان' ),
+       'Watchlist'                 => array( 'پدگیر_ئی_لیست' ),
+       'Whatlinkshere'             => array( 'لینک_په_ای_دیما' ),
+       'Withoutinterwiki'          => array( 'بئ_شه_مانیجین_ویکی_ئا' ),
+);
\ No newline at end of file
index 7ee29c1..67d126a 100644 (file)
@@ -311,3 +311,18 @@ $magicWords = array(
        'url_wiki'                  => array( '0', 'ЧЕХКА', 'ВИКИ', 'WIKI' ),
 );
 
+$datePreferences = array(
+       'default',
+       'ydm',
+       'ISO 8601',
+);
+
+$dateFormats = array(
+       'ydm time' => 'H:i',
+       'ydm date' => 'Y, j F',
+       'ydm both' => 'Y, j F, H:i',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
index 4d964fb..dd1cc55 100644 (file)
@@ -50,10 +50,10 @@ $specialPageAliases = array(
        'Booksources'               => array( 'منابع_کتاب' ),
        'BrokenRedirects'           => array( 'تغییرمسیرهای_خراب' ),
        'Categories'                => array( 'رده‌ها' ),
-       'ChangeEmail'               => array( 'تغییر_رایانامه' ),
+       'ChangeEmail'               => array( 'تغÛ\8cÛ\8cر_اÛ\8cÙ\85Û\8cÙ\84', 'تغÛ\8cÛ\8cر_راÛ\8cاÙ\86اÙ\85Ù\87' ),
        'ChangePassword'            => array( 'از_نو_کردن_گذرواژه' ),
        'ComparePages'              => array( 'مقایسهٔ_صفحات' ),
-       'Confirmemail'              => array( 'تأیید_رایانامه' ),
+       'Confirmemail'              => array( 'تأÛ\8cÛ\8cد_اÛ\8cÙ\85Û\8cÙ\84', 'تأÛ\8cÛ\8cد_راÛ\8cاÙ\86اÙ\85Ù\87' ),
        'Contributions'             => array( 'مشارکت‌ها' ),
        'CreateAccount'             => array( 'ایجاد_حساب_کاربری' ),
        'Deadendpages'              => array( 'صفحه‌های_بن‌بست' ),
@@ -61,14 +61,14 @@ $specialPageAliases = array(
        'Diff'                      => array( 'تفاوت' ),
        'DoubleRedirects'           => array( 'تغییرمسیرهای_دوتایی' ),
        'EditWatchlist'             => array( 'ویرایش_فهرست_پی‌گیری‌ها' ),
-       'Emailuser'                 => array( 'نامه_به_کاربر' ),
+       'Emailuser'                 => array( 'ایمیل_به_کاربر', 'نامه_به_کاربر' ),
        'ExpandTemplates'           => array( 'گسترش_الگوها' ),
        'Export'                    => array( 'برون‌بری_صفحه' ),
        'Fewestrevisions'           => array( 'کمترین_نسخه' ),
        'FileDuplicateSearch'       => array( 'جستجوی_پروندهٔ_تکراری' ),
        'Filepath'                  => array( 'مسیر_پرونده' ),
        'Import'                    => array( 'درون‌ریزی_صفحه' ),
-       'Invalidateemail'           => array( 'باطل‌کردن_رایانامه' ),
+       'Invalidateemail'           => array( 'باطÙ\84â\80\8cکردÙ\86§Û\8cÙ\85Û\8cÙ\84', 'باطÙ\84â\80\8cکردÙ\86±Ø§Û\8cاÙ\86اÙ\85Ù\87' ),
        'JavaScriptTest'            => array( 'تست_جاوااسکریپت' ),
        'BlockList'                 => array( 'فهرست_بسته‌شده‌ها', 'فهرست_بستن_نشانی_آی‌پی' ),
        'LinkSearch'                => array( 'جستجوی_پیوند' ),
index 3d579c5..559cfff 100644 (file)
@@ -8,8 +8,10 @@
  *
  * @author Bonevarluri
  * @author Mogoeilor
+ * @author Mjbmr
  */
 
+$fallback = 'fa';
 $rtl = true;
 
 $namespaceNames = array(
@@ -20,15 +22,20 @@ $namespaceNames = array(
        NS_USER_TALK        => 'چک_چنه_کارور',
        NS_PROJECT_TALK     => 'چک_چنه_$1',
        NS_FILE             => 'جانیا',
-       NS_FILE_TALK        => 'جانیا_چک_چنه',
+       NS_FILE_TALK        => 'چک_چنه_جانیا',
        NS_MEDIAWIKI        => 'ویکی_رسانه',
        NS_MEDIAWIKI_TALK   => 'چک_چنه_ویکی_رسانه',
-       NS_TEMPLATE         => 'قالو',
-       NS_TEMPLATE_TALK    => 'قالو_چک_چنه',
+       NS_TEMPLATE         => 'چوئه',
+       NS_TEMPLATE_TALK    => 'چک_چنه_چوئه',
        NS_HELP             => 'هومیاری',
        NS_HELP_TALK        => 'چک_چنه_هومیاری',
        NS_CATEGORY         => 'دسه',
-       NS_CATEGORY_TALK    => 'دسه_چک_چنه',
+       NS_CATEGORY_TALK    => 'چک_چنه_دسه',
+);
+
+$namespaceAliases = array(
+       'عسگ' => NS_FILE,
+       'چک_چنه_عسگ' => NS_FILE_TALK,
 );
 
 $specialPageAliases = array(
@@ -48,7 +55,7 @@ $specialPageAliases = array(
        'ChangePassword'            => array( 'آلشت_دئن_رازینه_گواردن' ),
        'ComparePages'              => array( 'تی_یک_نیائن_بلگه_یا' ),
        'Confirmemail'              => array( 'پشت_راس_کاری_ایمیل' ),
-       'Contributions'             => array( 'هومیاریا' ),
+       'Contributions'             => array( 'هومیاری_کردنیا' ),
        'CreateAccount'             => array( 'راس_کردن_حساو' ),
        'Deadendpages'              => array( 'بلگه_یا_بی_ویرگار' ),
        'DeletedContributions'      => array( 'هومیاریا_پاکسا_بیه' ),
@@ -143,4 +150,4 @@ $specialPageAliases = array(
        'Watchlist'                 => array( 'سیل_برگ' ),
        'Whatlinkshere'             => array( 'چه_هوم_پیوندیایی_ها_ایچه' ),
        'Withoutinterwiki'          => array( 'بی_مین_ویکی' ),
-);
\ No newline at end of file
+);
index a0ffcb2..f97f6dc 100644 (file)
@@ -38,6 +38,8 @@ define( 'DO_MAINTENANCE', RUN_MAINTENANCE_IF_MAIN ); // original name, harmless
 
 $maintClass = false;
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Abstract maintenance class for quickly writing and churning out
  * maintenance scripts with minimal effort. All that _must_ be defined
@@ -612,6 +614,11 @@ abstract class Maintenance {
                        $profiler->setTemplated( true );
                        Profiler::replaceStubInstance( $profiler );
                }
+
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
+               # Catch huge single updates that lead to slave lag
+               $trxProfiler->setExpectation( 'maxAffected', 1000, __METHOD__ );
        }
 
        /**
@@ -1099,7 +1106,7 @@ abstract class Maintenance {
         */
        private function lockSearchindex( $db ) {
                $write = array( 'searchindex' );
-               $read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache', 'user' );
+               $read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache', 'user', 'page_restrictions' );
                $db->lockTables( $read, $write, __CLASS__ . '::' . __METHOD__ );
        }
 
index 4c858f4..2a2d361 100644 (file)
@@ -1,4 +1,4 @@
 ALTER TABLE /*_*/imagelinks
   ADD COLUMN il_from_namespace int NOT NULL default 0;
 
-CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_to,il_from_namespace,il_from);
\ No newline at end of file
+CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_from_namespace,il_to,il_from);
\ No newline at end of file
index 2f7ff04..dcf2b60 100644 (file)
@@ -1,4 +1,4 @@
 ALTER TABLE /*_*/pagelinks
        ADD COLUMN pl_from_namespace int NOT NULL default 0;
 
-CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from_namespace,pl_from);
+CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_from_namespace,pl_namespace,pl_title,pl_from);
index 8d6c76b..edfb7a5 100644 (file)
@@ -1,4 +1,4 @@
 ALTER TABLE /*_*/templatelinks
        ADD COLUMN tl_from_namespace int NOT NULL default 0;
 
-CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from_namespace,tl_from);
+CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_from_namespace,tl_namespace,tl_title,tl_from);
index 24b63a8..70490e1 100644 (file)
@@ -87,6 +87,7 @@ class UploadStashCleanup extends Maintenance {
                                        $this->output( "Failed removing stashed upload with key: $key ($type)\n" );
                                }
                                if ( $i % 100 == 0 ) {
+                                       wfWaitForSlaves();
                                        $this->output( "$i\n" );
                                }
                        }
index 76bc982..2fb3697 100644 (file)
@@ -10,10 +10,20 @@ class ConvertExtensionToRegistration extends Maintenance {
                'AutoloadClasses' => 'removeAbsolutePath',
                'ExtensionCredits' => 'handleCredits',
                'ResourceModules' => 'handleResourceModules',
+               'ResourceModuleSkinStyles' => 'handleResourceModules',
                'Hooks' => 'handleHooks',
                'ExtensionFunctions' => 'handleExtensionFunctions',
        );
 
+       /**
+        * Things that were formerly globals and should still be converted
+        *
+        * @var array
+        */
+       protected $formerGlobals = array(
+               'TrackingCategories',
+       );
+
        /**
         * Keys that should be put at the top of the generated JSON file (T86608)
         *
@@ -44,7 +54,7 @@ class ConvertExtensionToRegistration extends Maintenance {
                $processor = new ReflectionClass( 'ExtensionProcessor' );
                $settings = $processor->getProperty( 'globalSettings' );
                $settings->setAccessible( true );
-               return $settings->getValue();
+               return $settings->getValue() + $this->formerGlobals;
        }
 
        public function execute() {
index 732bdc0..eab2b63 100644 (file)
@@ -23,6 +23,7 @@
                                "classes": [
                                        "mw.Title",
                                        "mw.Uri",
+                                       "mw.messagePoster.*",
                                        "mw.notification",
                                        "mw.Notification_",
                                        "mw.user",
index 2a6f8a8..43fa460 100644 (file)
@@ -85,12 +85,24 @@ class MergeMessageFileList extends Maintenance {
                                if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
                                        continue;
                                }
-                               $extfile = "{$extdir}/{$extname}/{$extname}.php";
-                               if ( file_exists( $extfile ) ) {
-                                       $mmfl['setupFiles'][] = $extfile;
-                               } else {
+                               $possibilities = array(
+                                       "$extdir/$extname/extension.json",
+                                       "$extdir/$extname/skin.json",
+                                       "$extdir/$extname/$extname.php"
+                               );
+                               $found = false;
+                               foreach ( $possibilities as $extfile ) {
+                                       if ( file_exists( $extfile ) ) {
+                                               $mmfl['setupFiles'][] = $extfile;
+                                               $found = true;
+                                               break;
+                                       }
+                               }
+
+                               if ( !$found ) {
                                        $this->hasError = true;
-                                       $this->error( "Extension {$extname} in {$extdir} lacks expected {$extname}.php" );
+                                       $this->error( "Extension {$extname} in {$extdir} lacks expected entry point: " .
+                                               "extension.json, skin.json, or {$extname}.php." );
                                }
                        }
                }
@@ -150,6 +162,7 @@ class MergeMessageFileList extends Maintenance {
 
 require_once RUN_MAINTENANCE_IF_MAIN;
 
+$queue = array();
 foreach ( $mmfl['setupFiles'] as $fileName ) {
        if ( strval( $fileName ) === '' ) {
                continue;
@@ -157,12 +170,26 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
        if ( empty( $mmfl['quiet'] ) ) {
                fwrite( STDERR, "Loading data from $fileName\n" );
        }
-       // Include the extension to update $wgExtensionMessagesFiles
-       if ( !( include_once $fileName ) ) {
+       // Using extension.json or skin.json
+       if ( substr( $fileName, -strlen( '.json' ) ) === '.json' ) {
+               $queue[$fileName] = 1;
+       } elseif ( !( include_once $fileName ) ) {
+               // Include the extension to update $wgExtensionMessagesFiles
                fwrite( STDERR, "Unable to read $fileName\n" );
                exit( 1 );
        }
 }
+
+if ( $queue ) {
+       $registry = new ExtensionRegistry();
+       $data = $registry->readFromQueue( $queue );
+       foreach ( array( 'wgExtensionMessagesFiles', 'wgMessagesDirs' ) as $var ) {
+               if ( isset( $data['globals'][$var] ) ) {
+                       $GLOBALS[$var] = array_merge( $data['globals'][$var], $GLOBALS[$var] );
+               }
+       }
+}
+
 fwrite( STDERR, "\n" );
 $s =
        "<" . "?php\n" .
diff --git a/maintenance/populateBloomCache.php b/maintenance/populateBloomCache.php
deleted file mode 100644 (file)
index 40ad5fc..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- * Script to populate a bloom filter with a BloomFilter* class
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance
- */
-
-require_once __DIR__ . '/Maintenance.php';
-
-/**
- * Script to populate a bloom filter with a BloomFilter* class
- *
- * @ingroup Maintenance
- */
-class PopulateBloomFilter extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->addOption( 'cache', 'Bloom cache store name', true, true );
-               $this->addOption( 'filter', 'Bloom filter name', true, true );
-               $this->addOption( 'domain', 'Bloom filter domain', true, true );
-               $this->addOption( 'delay', 'Sleep delay between batches (us)', false, true );
-               $this->mDescription = "Populate the specified bloom filter";
-       }
-
-       public function execute() {
-               $type = $this->getOption( 'filter' );
-               $domain = $this->getOption( 'domain' );
-               $bcache = BloomCache::get( $this->getOption( 'cache' ) );
-               $delay = $this->getOption( 'delay', 1e5 );
-
-               if ( !method_exists( "BloomFilter{$type}", 'merge' ) ) {
-                       $this->error( "No \"BloomFilter{$type}::merge\" method found.", 1 );
-               }
-
-               $virtualKey = "$domain:$type";
-               $status = $bcache->getStatus( $virtualKey );
-               if ( $status == false ) {
-                       $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
-               }
-
-               $startTime = microtime( true );
-               $this->output( "Current timestamp is '$startTime'.\n" );
-               $this->output( "Current filter timestamp is '{$status['asOfTime']}'.\n" );
-
-               do {
-                       $status = call_user_func_array(
-                               array( "BloomFilter{$type}", 'merge' ),
-                               array( $bcache, $domain, $virtualKey, $status )
-                       );
-                       if ( $status == false ) {
-                               $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
-                       }
-                       $this->output( "Filter updated to timestamp '{$status['asOfTime']}'.\n" );
-                       usleep( $delay );
-               } while ( $status['asOfTime'] && $status['asOfTime'] < $startTime );
-
-               $this->output( "Done, filter $type of domain $domain reached time '$startTime'.\n" );
-       }
-}
-
-$maintClass = "PopulateBloomFilter";
-require_once RUN_MAINTENANCE_IF_MAIN;
index bf93a23..de36d26 100644 (file)
@@ -490,7 +490,7 @@ CREATE TABLE /*_*/pagelinks (
 
 CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
 CREATE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
-CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from_namespace,pl_from);
+CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_from_namespace,pl_namespace,pl_title,pl_from);
 
 
 --
@@ -512,7 +512,7 @@ CREATE TABLE /*_*/templatelinks (
 
 CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
 CREATE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
-CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from_namespace,tl_from);
+CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_from_namespace,tl_namespace,tl_title,tl_from);
 
 
 --
@@ -534,7 +534,7 @@ CREATE TABLE /*_*/imagelinks (
 
 CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
 CREATE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
-CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_to,il_from_namespace,il_from);
+CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_from_namespace,il_to,il_from);
 
 
 --
index 6e93011..0fd1fd8 100755 (executable)
@@ -161,7 +161,7 @@ class UpdateMediaWiki extends Maintenance {
                        wfCountDown( 5 );
                }
 
-               $time1 = new MWTimestamp();
+               $time1 = microtime( true );
 
                $shared = $this->hasOption( 'doshared' );
 
@@ -197,9 +197,10 @@ class UpdateMediaWiki extends Maintenance {
                        $updater->purgeCache();
                }
 
-               $time2 = new MWTimestamp();
-               $timeDiff = $time2->diff( $time1 );
-               $this->output( "\nDone in " . $timeDiff->format( "%i:%S" ) . ".\n" );
+               $time2 = microtime( true );
+
+               $timeDiff = $wgLang->formatTimePeriod( $time2 - $time1 );
+               $this->output( "\nDone in $timeDiff.\n" );
        }
 
        function afterFinalSetup() {
index f9d2eac..a17b678 100644 (file)
@@ -823,6 +823,7 @@ return array(
                        'mediawiki.Title',
                        'user.tokens',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.api.login' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.login.js',
@@ -877,7 +878,7 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.feedback.js',
                'styles' => 'resources/src/mediawiki/mediawiki.feedback.css',
                'dependencies' => array(
-                       'mediawiki.api.edit',
+                       'mediawiki.messagePoster',
                        'mediawiki.Title',
                        'oojs-ui',
                ),
@@ -896,6 +897,7 @@ return array(
                        'feedback-error1',
                        'feedback-error2',
                        'feedback-error3',
+                       'feedback-error4',
                        'feedback-message',
                        'feedback-subject',
                        'feedback-submit',
@@ -955,6 +957,27 @@ return array(
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.messagePoster' => array(
+               'scripts' => array(
+                       'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js',
+                       'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js',
+               ),
+               'dependencies' => array(
+                       'oojs',
+                       'mediawiki.api',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'mediawiki.messagePoster.wikitext' => array(
+               'scripts' => array(
+                       'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js',
+               ),
+               'dependencies' => array(
+                       'mediawiki.api.edit',
+                       'mediawiki.messagePoster',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.notification' => array(
                'styles' => array(
                        'resources/src/mediawiki/mediawiki.notification.css',
@@ -1378,6 +1401,20 @@ return array(
        'mediawiki.special.changeslist.enhanced' => array(
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
        ),
+       'mediawiki.special.edittags' => array(
+               'scripts' => 'resources/src/mediawiki.special/mediawiki.special.edittags.js',
+               'dependencies' => array(
+                       'jquery.chosen',
+               ),
+               'messages' => array(
+                       'tags-edit-chosen-placeholder',
+                       'tags-edit-chosen-no-results',
+               ),
+       ),
+       'mediawiki.special.edittags.styles' => array(
+               'styles' => 'resources/src/mediawiki.special/mediawiki.special.edittags.css',
+               'position' => 'top',
+       ),
        'mediawiki.special.import' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.import.js',
        ),
index 099b0f3..aa916af 100644 (file)
@@ -4,5 +4,6 @@
                        "ОйЛ"
                ]
        },
-       "ooui-toolbar-more": "вѧщє"
+       "ooui-toolbar-more": "вѧщє",
+       "ooui-toolgroup-expand": "вѧщє"
 }
index 1581fd8..00894e4 100644 (file)
@@ -8,5 +8,13 @@
        "ooui-outline-control-move-down": "Zapisk dele přesunyć",
        "ooui-outline-control-move-up": "Zapisk horje přesunyć",
        "ooui-outline-control-remove": "Zapisk wotstronić",
-       "ooui-toolbar-more": "Wjace"
+       "ooui-toolbar-more": "Wjace",
+       "ooui-toolgroup-expand": "Wjace",
+       "ooui-toolgroup-collapse": "Mjenje",
+       "ooui-dialog-message-accept": "W porjadku",
+       "ooui-dialog-message-reject": "Přetorhnyć",
+       "ooui-dialog-process-error": "Něšto je so nimokuliło",
+       "ooui-dialog-process-dismiss": "Schować",
+       "ooui-dialog-process-retry": "Hišće raz spytać",
+       "ooui-dialog-process-continue": "Dale"
 }
index 2a1f95e..dde49bf 100644 (file)
@@ -5,5 +5,17 @@
                        "Psubhashish",
                        "ଶିତିକଣ୍ଠ ଦାଶ"
                ]
-       }
+       },
+       "ooui-outline-control-move-down": "ବସ୍ତୁଟିକୁ ତଳକୁ ଘୁଞ୍ଚାନ୍ତୁ",
+       "ooui-outline-control-move-up": "ବସ୍ତୁଟିକୁ ଉପରକୁ ଘୁଞ୍ଚାନ୍ତୁ",
+       "ooui-outline-control-remove": "ବସ୍ତୁଟିକୁ ଲିଭାନ୍ତୁ",
+       "ooui-toolbar-more": "ଅଧିକ",
+       "ooui-toolgroup-expand": "ଅଧିକ",
+       "ooui-toolgroup-collapse": "ଅଳ୍ପ",
+       "ooui-dialog-message-accept": "ହେଉ",
+       "ooui-dialog-message-reject": "ନାକଚ",
+       "ooui-dialog-process-error": "ଅସୁବିଧାଟିଏ ଘଟିଲା",
+       "ooui-dialog-process-dismiss": "ଖାରଜ",
+       "ooui-dialog-process-retry": "ଆଉ ଥରେ ଚେଷ୍ଟା କରନ୍ତୁ",
+       "ooui-dialog-process-continue": "ଚାଲୁରଖିବେ"
 }
index b16755e..ed2f61e 100644 (file)
@@ -19,9 +19,9 @@
                        "Great Brightstar"
                ]
        },
-       "ooui-outline-control-move-down": "下移项",
-       "ooui-outline-control-move-up": "上移项",
-       "ooui-outline-control-remove": "删除项",
+       "ooui-outline-control-move-down": "项目下移",
+       "ooui-outline-control-move-up": "项目上移",
+       "ooui-outline-control-remove": "移除项目",
        "ooui-toolbar-more": "更多",
        "ooui-toolgroup-expand": "更多",
        "ooui-toolgroup-collapse": "更少",
index 019cfa5..bf3cedf 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-bell {
        background-image: url("themes/mediawiki/images/icons/bell.png");
index c6800f5..80de362 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-article {
        background-image: url("themes/mediawiki/images/icons/article-ltr.png");
index fd4c009..bacc878 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-alignCentre {
        background-image: url("themes/mediawiki/images/icons/align-center.png");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-right.png");
 }
+.oo-ui-icon-find {
+       background-image: url("themes/mediawiki/images/icons/find-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/find-ltr.png");
+}
 .oo-ui-icon-insert {
        background-image: url("themes/mediawiki/images/icons/insert.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg");
index 5bb13a8..654562c 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-edit {
        background-image: url("themes/mediawiki/images/icons/edit-ltr.png");
index e9edf16..8f90358 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-indent {
        background-image: url("themes/mediawiki/images/icons/indent-ltr.png");
index 562701a..fa5a369 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-bigger {
        background-image: url("themes/mediawiki/images/icons/bigger-ltr.png");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-a.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(ar) {
        background-image: url("themes/mediawiki/images/icons/bold-arab-ain.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-ain.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(be) {
        background-image: url("themes/mediawiki/images/icons/bold-cyrl-te.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-te.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(cs) {
        background-image: url("themes/mediawiki/images/icons/bold-b.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(en) {
        background-image: url("themes/mediawiki/images/icons/bold-b.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(he) {
        background-image: url("themes/mediawiki/images/icons/bold-b.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(ml) {
        background-image: url("themes/mediawiki/images/icons/bold-b.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(pl) {
        background-image: url("themes/mediawiki/images/icons/bold-b.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(da) {
        background-image: url("themes/mediawiki/images/icons/bold-f.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(de) {
        background-image: url("themes/mediawiki/images/icons/bold-f.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(hu) {
        background-image: url("themes/mediawiki/images/icons/bold-f.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(ksh) {
        background-image: url("themes/mediawiki/images/icons/bold-f.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(nn) {
        background-image: url("themes/mediawiki/images/icons/bold-f.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(no) {
        background-image: url("themes/mediawiki/images/icons/bold-f.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(sv) {
        background-image: url("themes/mediawiki/images/icons/bold-f.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(es) {
        background-image: url("themes/mediawiki/images/icons/bold-n.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(gl) {
        background-image: url("themes/mediawiki/images/icons/bold-n.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(pt) {
        background-image: url("themes/mediawiki/images/icons/bold-n.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(eu) {
        background-image: url("themes/mediawiki/images/icons/bold-l.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(fi) {
        background-image: url("themes/mediawiki/images/icons/bold-l.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(fa) {
        background-image: url("themes/mediawiki/images/icons/bold-arab-dad.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-dad.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(fr) {
        background-image: url("themes/mediawiki/images/icons/bold-g.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(it) {
        background-image: url("themes/mediawiki/images/icons/bold-g.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(hy) {
        background-image: url("themes/mediawiki/images/icons/bold-armn-to.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-armn-to.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(ka) {
        background-image: url("themes/mediawiki/images/icons/bold-geor-man.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-geor-man.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(ky) {
        background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(ru) {
        background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(nl) {
        background-image: url("themes/mediawiki/images/icons/bold-v.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-v.png");
 }
+/* @noflip */
 .oo-ui-icon-bold:lang(os) {
        background-image: url("themes/mediawiki/images/icons/bold-cyrl-be.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-a.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(ar) {
        background-image: url("themes/mediawiki/images/icons/italic-arab-meem.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-meem.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(cs) {
        background-image: url("themes/mediawiki/images/icons/italic-i.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(en) {
        background-image: url("themes/mediawiki/images/icons/italic-i.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(fr) {
        background-image: url("themes/mediawiki/images/icons/italic-i.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(he) {
        background-image: url("themes/mediawiki/images/icons/italic-i.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(ml) {
        background-image: url("themes/mediawiki/images/icons/italic-i.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(pl) {
        background-image: url("themes/mediawiki/images/icons/italic-i.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(pt) {
        background-image: url("themes/mediawiki/images/icons/italic-i.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(be) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(da) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(de) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(fi) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(ky) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(nn) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(no) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(os) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(sv) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(ru) {
        background-image: url("themes/mediawiki/images/icons/italic-k.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(es) {
        background-image: url("themes/mediawiki/images/icons/italic-c.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(gl) {
        background-image: url("themes/mediawiki/images/icons/italic-c.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(it) {
        background-image: url("themes/mediawiki/images/icons/italic-c.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(nl) {
        background-image: url("themes/mediawiki/images/icons/italic-c.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(eu) {
        background-image: url("themes/mediawiki/images/icons/italic-e.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-e.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(fa) {
        background-image: url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(hu) {
        background-image: url("themes/mediawiki/images/icons/italic-d.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-d.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(hy) {
        background-image: url("themes/mediawiki/images/icons/italic-armn-sha.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-armn-sha.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(ksh) {
        background-image: url("themes/mediawiki/images/icons/italic-s.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-s.png");
 }
+/* @noflip */
 .oo-ui-icon-italic:lang(ka) {
        background-image: url("themes/mediawiki/images/icons/italic-geor-kan.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-a.png");
 }
+/* @noflip */
 .oo-ui-icon-strikethrough:lang(en) {
        background-image: url("themes/mediawiki/images/icons/strikethrough-s.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-s.png");
 }
+/* @noflip */
 .oo-ui-icon-strikethrough:lang(fi) {
        background-image: url("themes/mediawiki/images/icons/strikethrough-y.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-a.png");
 }
+/* @noflip */
 .oo-ui-icon-underline:lang(en) {
        background-image: url("themes/mediawiki/images/icons/underline-u.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg");
index 5efa95a..70c354d 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-beta {
        background-image: url("themes/mediawiki/images/icons/beta.png");
index 97ff08b..4d7c676 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-stripeFlow {
        background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
index ef4b991..bb4eed9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-map {
        background-image: url("themes/mediawiki/images/icons/map-ltr.png");
index 2c34631..d67a180 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-image {
        background-image: url("themes/mediawiki/images/icons/image-ltr.png");
index e80d325..d04cccd 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-block {
        background-image: url("themes/mediawiki/images/icons/block.png");
index c93ead8..0285d2e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-arrowNext {
        background-image: url("themes/mediawiki/images/icons/arrow-ltr.png");
index 096ae08..aa06d4b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-userActive {
        background-image: url("themes/mediawiki/images/icons/userActive-ltr.png");
index afbb610..b9d36bf 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
 .oo-ui-icon-logoCC {
        background-image: url("themes/mediawiki/images/icons/logo-cc.png");
index afef7bf..41e2f88 100644 (file)
@@ -1,19 +1,13 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
-.oo-ui-progressBarWidget-slide-frames from {
-       margin-left: -40%;
-}
-.oo-ui-progressBarWidget-slide-frames to {
-       margin-left: 100%;
-}
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
                margin-left: -40%;
index cfca47b..76093dd 100644 (file)
@@ -1,19 +1,13 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:34Z
+ * Date: 2015-04-12T17:19:13Z
  */
-.oo-ui-progressBarWidget-slide-frames from {
-       margin-left: -40%;
-}
-.oo-ui-progressBarWidget-slide-frames to {
-       margin-left: 100%;
-}
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
                margin-left: -40%;
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
 }
+/* @noflip */
+.oo-ui-icon-help:lang(he) {
+       background-image: url("themes/mediawiki/images/icons/help-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
+}
+/* @noflip */
+.oo-ui-icon-help:lang(yi) {
+       background-image: url("themes/mediawiki/images/icons/help-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
+}
 .oo-ui-image-invert .oo-ui-icon-help,
 .oo-ui-image-invert.oo-ui-icon-help {
        background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
 }
+/* @noflip */
+.oo-ui-image-invert .oo-ui-icon-help:lang(he),
+.oo-ui-image-invert.oo-ui-icon-help:lang(he) {
+       background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
+}
+/* @noflip */
+.oo-ui-image-invert .oo-ui-icon-help:lang(yi),
+.oo-ui-image-invert.oo-ui-icon-help:lang(yi) {
+       background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
+}
+.oo-ui-icon-history {
+       background-image: url("themes/mediawiki/images/icons/history.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history.png");
+}
+.oo-ui-image-invert .oo-ui-icon-history,
+.oo-ui-image-invert.oo-ui-icon-history {
+       background-image: url("themes/mediawiki/images/icons/history-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history-invert.png");
+}
 .oo-ui-icon-info {
        background-image: url("themes/mediawiki/images/icons/info.png");
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg");
index 688262a..1a8d8b6 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:28Z
+ * Date: 2015-04-12T17:19:06Z
  */
 /**
  * @class
index ccedf60..f46dd07 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.7
+ * OOjs UI v0.9.8
  * 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-03T21:01:28Z
+ * Date: 2015-04-12T17:19:06Z
  */
 ( function ( OO ) {
 
@@ -3340,13 +3340,32 @@ OO.ui.WindowManager.prototype.destroy = function () {
 };
 
 /**
+ * Errors contain a required message (either a string or jQuery selection) that is used to describe what went wrong
+ * in a {@link OO.ui.Process process}. The error's #recoverable and #warning configurations are used to customize the
+ * appearance and functionality of the error interface.
+ *
+ * The basic error interface contains a formatted error message as well as two buttons: 'Dismiss' and 'Try again' (i.e., the error
+ * is 'recoverable' by default). If the error is not recoverable, the 'Try again' button will not be rendered and the widget
+ * that initiated the failed process will be disabled.
+ *
+ * If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button, which will try the
+ * process again.
+ *
+ * For an example of error interfaces, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Processes_and_errors
+ *
  * @class
  *
  * @constructor
  * @param {string|jQuery} message Description of error
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [recoverable=true] Error is recoverable
- * @cfg {boolean} [warning=false] Whether this error is a warning or not.
+ * @cfg {boolean} [recoverable=true] Error is recoverable.
+ *  By default, errors are recoverable, and users can try the process again.
+ * @cfg {boolean} [warning=false] Error is a warning.
+ *  If the error is a warning, the error interface will include a
+ *  'Dismiss' and a 'Continue' button. It is the responsibility of the developer to ensure that the warning
+ *  is not triggered a second time if the user chooses to continue.
  */
 OO.ui.Error = function OoUiError( message, config ) {
        // Allow passing positional parameters inside the config object
@@ -3371,7 +3390,9 @@ OO.initClass( OO.ui.Error );
 /* Methods */
 
 /**
- * Check if error can be recovered from.
+ * Check if the error is recoverable.
+ *
+ * If the error is recoverable, users are able to try the process again.
  *
  * @return {boolean} Error is recoverable
  */
@@ -3380,7 +3401,9 @@ OO.ui.Error.prototype.isRecoverable = function () {
 };
 
 /**
- * Check if the error is a warning
+ * Check if the error is a warning.
+ *
+ * If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button.
  *
  * @return {boolean} Error is warning
  */
@@ -3400,7 +3423,7 @@ OO.ui.Error.prototype.getMessage = function () {
 };
 
 /**
- * Get error message as text.
+ * Get the error message text.
  *
  * @return {string} Error message
  */
@@ -7520,7 +7543,7 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
  *
  *     MyProcessDialog.prototype.initialize = function () {
  *         MyProcessDialog.super.prototype.initialize.apply( this, arguments );
- *         this.content = new OO.ui.PanelLayout( { $: this.$, padded: true, expanded: false } );
+ *         this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
  *         this.content.$element.append( '<p>This is a process dialog window. The header contains the title and two buttons: \'Cancel\' (a safe action) on the left and \'Done\' (a primary action)  on the right.</p>' );
  *         this.$body.append( this.content.$element );
  *     };
@@ -8596,9 +8619,18 @@ OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
  *
  * If no page is selected, the first selectable page will be selected.
  * If the focus is already in an element on the current page, nothing will happen.
+ * @param {number} [itemIndex] A specific item to focus on
  */
-OO.ui.BookletLayout.prototype.focus = function () {
-       var $input, page = this.stackLayout.getCurrentItem();
+OO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {
+       var $input, page,
+               items = this.stackLayout.getItems();
+
+       if ( itemIndex !== undefined && items[ itemIndex ] ) {
+               page = items[ itemIndex ];
+       } else {
+               page = this.stackLayout.getCurrentItem();
+       }
+
        if ( !page && this.outlined ) {
                this.selectFirstSelectablePage();
                page = this.stackLayout.getCurrentItem();
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png
new file mode 100644 (file)
index 0000000..4336892
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg
new file mode 100644 (file)
index 0000000..f8578cf
--- /dev/null
@@ -0,0 +1,7 @@
+<?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="find">
+        <path id="magnifying-glass" d="m 13.65625,11 c -1.921,0 -3.5,1.54775 -3.5,3.46875 0,1.92 1.579,3.5 3.5,3.5 0.749,0 1.432,-0.25225 2,-0.65625 l 0.09375,0.15625 2.375,2.375 c 0.19,0.189 0.53425,0.15325 0.78125,-0.09375 0.247,-0.247 0.314,-0.59125 0.125,-0.78125 l -2.375,-2.375 L 16.46875,16.5 C 16.87175,15.934 17.125,15.21775 17.125,14.46875 17.124,12.54875 15.57525,11 13.65625,11 z m 0,1.65625 c 1.011306,0 1.8125,0.801194 1.8125,1.8125 0,1.011306 -0.801194,1.84375 -1.8125,1.84375 -1.011306,0 -1.84375,-0.832444 -1.84375,-1.84375 0,-1.011306 0.832444,-1.8125 1.84375,-1.8125 z" />
+        <path id="text" d="M 6,5 6,7 16,7 16,5 6,5 z m 0,3 0,2 11,0 0,-2 -11,0 z m 0,3 0,2 3.53125,0 c 0.2825289,-0.797203 0.786096,-1.486208 1.4375,-2 L 6,11 z m 0,3 0,2 3.53125,0 C 9.3537004,15.520243 9.25,15.010236 9.25,14.46875 9.25,14.309811 9.2962033,14.154621 9.3125,14 L 6,14 z" />
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png
new file mode 100644 (file)
index 0000000..f492c79
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg
new file mode 100644 (file)
index 0000000..2a1e9c6
--- /dev/null
@@ -0,0 +1,7 @@
+<?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="find">
+        <path id="magnifying-glass" d="m 11.343828,11.000025 c 1.921,0 3.5,1.54775 3.5,3.46875 0,1.92 -1.579,3.5 -3.5,3.5 -0.749,0 -1.432,-0.25225 -2,-0.65625 l -0.09375,0.15625 -2.375,2.375 c -0.19,0.189 -0.53425,0.15325 -0.78125,-0.09375 -0.247,-0.247 -0.314,-0.59125 -0.125,-0.78125 l 2.375,-2.375 0.1875,-0.09375 c -0.403,-0.566 -0.65625,-1.28225 -0.65625,-2.03125 10e-4,-1.92 1.54975,-3.46875 3.46875,-3.46875 z m 0,1.65625 c -1.011306,0 -1.8125,0.801194 -1.8125,1.8125 0,1.011306 0.801194,1.84375 1.8125,1.84375 1.011306,0 1.84375,-0.832444 1.84375,-1.84375 0,-1.011306 -0.832444,-1.8125 -1.84375,-1.8125 z" />
+        <path id="text" d="M 19,5 19,7 9,7 9,5 z m 0,3 0,2 -11,0 0,-2 z m 0,3 0,2 -3.53125,0 c -0.282529,-0.797203 -0.786096,-1.486208 -1.4375,-2 z m 0,3 0,2 -3.53125,0 C 15.6463,15.520243 15.75,15.010236 15.75,14.46875 15.75,14.309811 15.703797,14.154621 15.6875,14 z" />
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png
new file mode 100644 (file)
index 0000000..24d3e17
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg
new file mode 100644 (file)
index 0000000..fb61382
--- /dev/null
@@ -0,0 +1,7 @@
+<?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="history">
+        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
+        <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png
new file mode 100644 (file)
index 0000000..f5a7d36
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg
new file mode 100644 (file)
index 0000000..35f15af
--- /dev/null
@@ -0,0 +1,7 @@
+<?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="history">
+        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
+        <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+    </g>
+</svg>
index 813c37c..7c9bec3 100644 (file)
  * @param {Function} options.result.select Called in context of the suggestions-result-current element.
  * @param {jQuery} options.result.select.$textbox
  *
+ * @param {Object} [options.update] Set of callbacks for listening to a change in the text input.
+ *
+ * @param {Function} options.update.before Called right after the user changes the textbox text.
+ * @param {Function} options.update.after Called after results are updated either from the cache or
+ * the API as a result of the user input.
+ *
  * @param {jQuery} [options.$region=this] The element to place the suggestions below and match width of.
  *
  * @param {string[]} [options.suggestions] Array of suggestions to display.
@@ -83,7 +89,7 @@
  * @param {boolean} [options.positionFromLeft] Sets `expandFrom=left`, for backwards
  *  compatibility.
  *
- * @param {boolean} [options.highlightInput=false] Whether to hightlight matched portions of the
+ * @param {boolean} [options.highlightInput=false] Whether to highlight matched portions of the
  *  input or not.
  */
 ( function ( $ ) {
@@ -144,6 +150,10 @@ $.suggestions = {
                                cache = context.data.cache,
                                cacheHit;
 
+                       if ( typeof context.config.update.before === 'function' ) {
+                               context.config.update.before.call( context.data.$textbox );
+                       }
+
                        // Only fetch if the value in the textbox changed and is not empty, or if the results were hidden
                        // if the textbox is empty then clear the result div, but leave other settings intouched
                        if ( val.length === 0 ) {
@@ -158,6 +168,9 @@ $.suggestions = {
                                if ( context.config.cache && hasOwn.call( cache, val ) ) {
                                        if ( +new Date() - cache[ val ].timestamp < context.config.cacheMaxAge ) {
                                                context.data.$textbox.suggestions( 'suggestions', cache[ val ].suggestions );
+                                               if ( typeof context.config.update.after === 'function' ) {
+                                                       context.config.update.after.call( context.data.$textbox );
+                                               }
                                                cacheHit = true;
                                        } else {
                                                // Cache expired
@@ -171,6 +184,9 @@ $.suggestions = {
                                                function ( suggestions ) {
                                                        suggestions = suggestions.slice( 0, context.config.maxRows );
                                                        context.data.$textbox.suggestions( 'suggestions', suggestions );
+                                                       if ( typeof context.config.update.after === 'function' ) {
+                                                               context.config.update.after.call( context.data.$textbox );
+                                                       }
                                                        if ( context.config.cache ) {
                                                                cache[ val ] = {
                                                                        suggestions: suggestions,
@@ -227,6 +243,7 @@ $.suggestions = {
                        case 'cancel':
                        case 'special':
                        case 'result':
+                       case 'update':
                        case '$region':
                        case 'expandFrom':
                                context.config[property] = value;
@@ -559,6 +576,7 @@ $.fn.suggestions = function () {
                                        cancel: function () {},
                                        special: {},
                                        result: {},
+                                       update: {},
                                        $region: $( this ),
                                        suggestions: [],
                                        maxRows: 10,
index ac48c59..2ebfe92 100644 (file)
@@ -85,7 +85,8 @@ jQuery( function ( $ ) {
                                $copyForm.find( 'input[name^="ids["]:checked' ).prop( 'checked', false );
 
                        // Remove diff=&oldid=, change action=historysubmit to revisiondelete, remove revisiondelete
-                       } else if ( $historySubmitter.hasClass( 'mw-history-revisiondelete-button' ) ) {
+                       } else if ( $historySubmitter.hasClass( 'mw-history-revisiondelete-button' ) ||
+                                       $historySubmitter.hasClass( 'mw-history-editchangetags-button' ) ) {
                                $copyRadios.remove();
                                $copyAction.val( $historySubmitter.attr( 'name' ) );
                                $copyForm.find( ':submit' ).remove();
index eb4741f..3657b12 100644 (file)
@@ -426,7 +426,7 @@ p.mw-upload-editlicenses {
        border: 1px dashed #aaa;
 }
 
-.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
+.mw-history-revisionactions, #mw-fileduplicatesearch-icon {
        float: right;
 }
 
@@ -528,7 +528,7 @@ table.wikitable > tr > td,
 table.wikitable > * > tr > th,
 table.wikitable > * > tr > td {
        border: 1px solid #aaa;
-       padding: 0.3em 0.4em;
+       padding: 0.2em 0.4em;
 }
 
 table.wikitable > tr > th,
index dffc6e8..f5aeb3f 100644 (file)
@@ -5,7 +5,8 @@
        var msg,
                win = window,
                ua = navigator.userAgent.toLowerCase(),
-               onloadFuncts = [];
+               onloadFuncts = [],
+               loadedScripts = {};
 
        /**
         * User-agent sniffing.
 
        /**
         * Wikipage import methods
+        *
+        * See https://www.mediawiki.org/wiki/ResourceLoader/Legacy_JavaScript#wikibits.js
+        *
+        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.26.
         */
 
-       // included-scripts tracker
-       win.loadedScripts = {};
-
-       win.importScript = function ( page ) {
+       function importScript( page ) {
                var uri = mw.config.get( 'wgScript' ) + '?title=' +
                        mw.util.wikiUrlencode( page ) +
                        '&action=raw&ctype=text/javascript';
-               return win.importScriptURI( uri );
-       };
+               return importScriptURI( uri );
+       }
 
-       win.importScriptURI = function ( url ) {
-               if ( win.loadedScripts[url] ) {
+       function importScriptURI( url ) {
+               if ( loadedScripts[url] ) {
                        return null;
                }
-               win.loadedScripts[url] = true;
+               loadedScripts[url] = true;
                var s = document.createElement( 'script' );
                s.setAttribute( 'src', url );
                s.setAttribute( 'type', 'text/javascript' );
                document.getElementsByTagName( 'head' )[0].appendChild( s );
                return s;
-       };
+       }
 
-       win.importStylesheet = function ( page ) {
+       function importStylesheet( page ) {
                var uri = mw.config.get( 'wgScript' ) + '?title=' +
                        mw.util.wikiUrlencode( page ) +
                        '&action=raw&ctype=text/css';
-               return win.importStylesheetURI( uri );
-       };
+               return importStylesheetURI( uri );
+       }
 
-       win.importStylesheetURI = function ( url, media ) {
+       function importStylesheetURI( url, media ) {
                var l = document.createElement( 'link' );
                l.rel = 'stylesheet';
                l.href = url;
                }
                document.getElementsByTagName( 'head' )[0].appendChild( l );
                return l;
-       };
+       }
+
+       msg = 'Use mw.loader instead.';
+       mw.log.deprecate( win, 'loadedScripts', loadedScripts, msg );
+       mw.log.deprecate( win, 'importScript', importScript, msg );
+       mw.log.deprecate( win, 'importScriptURI', importScriptURI, msg );
+       mw.log.deprecate( win, 'importStylesheet', importStylesheet, msg );
+       mw.log.deprecate( win, 'importStylesheetURI', importStylesheetURI, msg );
 
 }( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js
new file mode 100644 (file)
index 0000000..91366ff
--- /dev/null
@@ -0,0 +1,38 @@
+/*global OO*/
+( function ( mw ) {
+       /**
+        * This is the abstract base class for MessagePoster implementations.
+        *
+        * @abstract
+        * @class
+        *
+        * @constructor
+        * @param {mw.Title} title Title to post to
+        */
+       mw.messagePoster.MessagePoster = function MwMessagePoster() {};
+
+       OO.initClass( mw.messagePoster.MessagePoster );
+
+       /**
+        * Post a message (with subject and body) to a talk page.
+        *
+        * @param {string} subject Subject/topic title; plaintext only (no wikitext or HTML)
+        * @param {string} body Body, as wikitext.  Signature code will automatically be added
+        *   by MessagePosters that require one, unless the message already contains the string
+        *   ~~~.
+        * @return {jQuery.Promise} Promise completing when the post succeeds or fails.
+        *   For failure, will be rejected with three arguments:
+        *
+        *   - primaryError - Primary error code.  For a mw.Api failure,
+        *       this should be 'api-fail'.
+        *   - secondaryError - Secondary error code.  For a mw.Api failure,
+        *       this, should be mw.Api's code, e.g. 'http', 'ok-but-empty', or the error passed through
+        *       from the server.
+        *   - details - Further details about the error
+        *
+        * @localdoc
+        * The base class currently does nothing, but could be used for shared analytics or
+        * something.
+        */
+       mw.messagePoster.MessagePoster.prototype.post = function () {};
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js
new file mode 100644 (file)
index 0000000..296576b
--- /dev/null
@@ -0,0 +1,53 @@
+/*global OO*/
+( function ( mw, $ ) {
+       /**
+        * This is an implementation of MessagePoster for wikitext talk pages.
+        *
+        * @class mw.messagePoster.WikitextMessagePoster
+        * @extends mw.messagePoster.MessagePoster
+        *
+        * @constructor
+        * @param {mw.Title} title Wikitext page in a talk namespace, to post to
+        */
+       function WikitextMessagePoster( title ) {
+               this.api = new mw.Api();
+               this.title = title;
+       }
+
+       OO.inheritClass(
+               WikitextMessagePoster,
+               mw.messagePoster.MessagePoster
+       );
+
+       /**
+        * @inheritdoc
+        */
+       WikitextMessagePoster.prototype.post = function ( subject, body ) {
+               mw.messagePoster.WikitextMessagePoster.parent.prototype.post.call( this, subject, body );
+
+               // Add signature if needed
+               if ( body.indexOf( '~~~' ) === -1 ) {
+                       body += '\n\n~~~~';
+               }
+
+               return this.api.newSection(
+                       this.title,
+                       subject,
+                       body,
+                       { redirect: true }
+               ).then( function ( resp, jqXHR ) {
+                       if ( resp.edit.result === 'Success' ) {
+                               return $.Deferred().resolve( resp, jqXHR );
+                       } else {
+                               // mediawiki.api.js checks for resp.error.  Are there actually cases where the
+                               // request fails, but it's not caught there?
+                               return $.Deferred().reject( 'api-unexpected' );
+                       }
+               }, function ( code, details ) {
+                       return $.Deferred().reject( 'api-fail', code, details );
+               } ).promise();
+       };
+
+       mw.messagePoster.factory.register( 'wikitext', WikitextMessagePoster );
+       mw.messagePoster.WikitextMessagePoster = WikitextMessagePoster;
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
new file mode 100644 (file)
index 0000000..9d28080
--- /dev/null
@@ -0,0 +1,109 @@
+/*global OO*/
+( function ( mw, $ ) {
+       /**
+        * This is a factory for MessagePoster objects, which allows a pluggable to way to script leaving a
+        * talk page message.
+        *
+        * @class mw.messagePoster.factory
+        * @singleton
+        */
+       function MwMessagePosterFactory() {
+               this.api = new mw.Api();
+               this.contentModelToClass = {};
+       }
+
+       OO.initClass( MwMessagePosterFactory );
+
+       // Note: This registration scheme is currently not compatible with LQT, since that doesn't
+       // have its own content model, just islqttalkpage.  LQT pages will be passed to the wikitext
+       // MessagePoster.
+       /**
+        * Registers a MessagePoster subclass for a given content model.
+        *
+        * @param {string} contentModel Content model of pages this MessagePoster can post to
+        * @param {Function} messagePosterConstructor Constructor for MessagePoster
+        */
+       MwMessagePosterFactory.prototype.register = function ( contentModel, messagePosterConstructor ) {
+               if ( this.contentModelToClass[contentModel] !== undefined ) {
+                       throw new Error( 'The content model \'' + contentModel + '\' is already registered.' );
+               }
+
+               this.contentModelToClass[contentModel] = messagePosterConstructor;
+       };
+
+       /**
+        * Unregisters a given content model
+        * This is exposed for testing and should not normally be needed.
+        *
+        * @param {string} contentModel Content model to unregister
+        */
+       MwMessagePosterFactory.prototype.unregister = function ( contentModel ) {
+               delete this.contentModelToClass[contentModel];
+       };
+
+       /**
+        * Creates a MessagePoster, given a title.  A promise for this is returned.
+        * This works by determining the content model, then loading the corresponding
+        * module (which will register the MessagePoster class), and finally constructing it.
+        *
+        * This does not require the message and should be called as soon as possible, so it does the
+        * API and ResourceLoader requests in the background.
+        *
+        * @param {mw.Title} title Title that will be posted to
+        * @return {jQuery.Promise} Promise resolving to a mw.messagePoster.MessagePoster.
+        *   For failure, rejected with up to three arguments:
+        *
+        *   - errorCode Error code string
+        *   - error Error explanation
+        *   - details Further error details
+        */
+       MwMessagePosterFactory.prototype.create = function ( title ) {
+               var pageId, page, contentModel, moduleName,
+                       factory = this;
+
+               return this.api.get( {
+                       action: 'query',
+                       prop: 'info',
+                       indexpageids: 1,
+                       titles: title.getPrefixedDb()
+               } ).then( function ( result ) {
+                       if ( result.query.pageids.length > 0 ) {
+                               pageId = result.query.pageids[0];
+                               page = result.query.pages[pageId];
+
+                               contentModel = page.contentmodel;
+                               moduleName = 'mediawiki.messagePoster.' + contentModel;
+                               return mw.loader.using( moduleName ).then( function () {
+                                       return factory.createForContentModel(
+                                               contentModel,
+                                               title
+                                       );
+                               }, function () {
+                                       return $.Deferred().reject( 'failed-to-load-module', 'Failed to load the \'' + moduleName + '\' module' );
+                               } );
+                       } else {
+                               return $.Deferred().reject( 'unexpected-response', 'Unexpected API response' );
+                       }
+               }, function ( errorCode, details ) {
+                       return $.Deferred().reject( 'content-model-query-failed', errorCode, details );
+               } ).promise();
+       };
+
+       /**
+        * Creates a MessagePoster instance, given a title and content model
+        *
+        * @private
+        *
+        * @param {string} contentModel Content model of title
+        * @param {mw.Title} title Title being posted to
+        * @return {mw.messagePoster.MessagePoster}
+        *
+        */
+       MwMessagePosterFactory.prototype.createForContentModel = function ( contentModel, title ) {
+               return new this.contentModelToClass[contentModel]( title );
+       };
+
+       mw.messagePoster = {
+               factory: new MwMessagePosterFactory()
+       };
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.edittags.css b/resources/src/mediawiki.special/mediawiki.special.edittags.css
new file mode 100644 (file)
index 0000000..204009c
--- /dev/null
@@ -0,0 +1,15 @@
+/*!
+ * Styling for Special:EditTags and action=editchangetags
+ */
+#mw-edittags-tags-selector td {
+       vertical-align: top;
+}
+
+#mw-edittags-tags-selector-multi td {
+       vertical-align: top;
+       padding-right: 1.5em;
+}
+
+#mw-edittags-tag-list {
+       min-width: 20em;
+}
diff --git a/resources/src/mediawiki.special/mediawiki.special.edittags.js b/resources/src/mediawiki.special/mediawiki.special.edittags.js
new file mode 100644 (file)
index 0000000..69a2a67
--- /dev/null
@@ -0,0 +1,24 @@
+/*!
+ * JavaScript for Special:EditTags
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var $tagList = $( '#mw-edittags-tag-list' );
+               if ( $tagList.length ) {
+                       $tagList.chosen( {
+                               /*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
+                               placeholder_text_multiple: mw.msg( 'tags-edit-chosen-placeholder' ),
+                               no_results_text: mw.msg( 'tags-edit-chosen-no-results' )
+                       } );
+               }
+
+               $( '#mw-edittags-remove-all' ).on( 'change', function ( e ) {
+                       $( '.mw-edittags-remove-checkbox' ).prop( 'checked', e.target.checked );
+               } );
+               $( '.mw-edittags-remove-checkbox' ).on( 'change', function ( e ) {
+                       if ( !e.target.checked ) {
+                               $( '#mw-edittags-remove-all' ).prop( 'checked', false );
+                       }
+               } );
+       } );
+}( mediaWiki, jQuery ) );
index d127232..7d7b413 100644 (file)
@@ -29,6 +29,10 @@ div.apihelp-linktrail {
        color: red;
 }
 
+.apihelp-unknown {
+       color: #888;
+}
+
 .apihelp-empty {
        color: #888;
 }
index 9a671c0..d940100 100644 (file)
@@ -36,7 +36,6 @@
         * @class
         * @constructor
         * @param {Object} [config] Configuration object
-        * @cfg {mw.Api} [api] if omitted, will just create a standard API
         * @cfg {mw.Title} [title="Feedback"] The title of the page where you collect
         *  feedback.
         * @cfg {string} [dialogTitleMessageKey="feedback-dialog-title"] Message key for the
        mw.Feedback = function MwFeedback( config ) {
                config = config || {};
 
-               this.api = config.api || new mw.Api();
                this.dialogTitleMessageKey = config.dialogTitleMessageKey || 'feedback-dialog-title';
 
                // Feedback page title
                this.feedbackPageTitle = config.title || new mw.Title( 'Feedback' );
 
+               this.messagePosterPromise = mw.messagePoster.factory.create( this.feedbackPageTitle );
+
                // Links
                this.bugsTaskSubmissionLink = config.bugsLink || '//phabricator.wikimedia.org/maniphest/task/create/';
                this.bugsTaskListLink = config.bugsListLink || '//phabricator.wikimedia.org/maniphest/query/advanced';
                        case 'error1':
                        case 'error2':
                        case 'error3':
+                       case 'error4':
                                dialogConfig = {
                                        title: mw.msg( 'feedback-error-title' ),
                                        message: mw.msg( 'feedback-' + status ),
         * Modify the display form, and then open it, focusing interface on the subject.
         *
         * @param {Object} [contents] Prefilled contents for the feedback form.
-        * @param {string} [contents.subject] The subject of the feedback
-        * @param {string} [contents.message] The content of the feedback
+        * @param {string} [contents.subject] The subject of the feedback, as plaintext
+        * @param {string} [contents.message] The content of the feedback, as wikitext
         */
        mw.Feedback.prototype.launch = function ( contents ) {
                // Dialog
                        {
                                title: mw.msg( this.dialogTitleMessageKey ),
                                settings: {
-                                       api: this.api,
+                                       messagePosterPromise: this.messagePosterPromise,
                                        title: this.feedbackPageTitle,
                                        dialogTitleMessageKey: this.dialogTitleMessageKey,
                                        bugsTaskSubmissionLink: this.bugsTaskSubmissionLink,
                                this.feedbackMessageInput.setValue( data.contents.message );
 
                                this.status = '';
-                               this.api = settings.api;
+                               this.messagePosterPromise = settings.messagePosterPromise;
                                this.setBugReportLink( settings.bugsTaskSubmissionLink );
                                this.feedbackPageTitle = settings.title;
                                this.feedbackPageName = settings.title.getNameText();
                                        message = userAgentMessage + message;
                                }
 
-                               // Add signature if needed
-                               if ( message.indexOf( '~~~' ) === -1 ) {
-                                       message += '\n\n~~~~';
-                               }
-
-                               // Post the message, resolving redirects
-                               this.pushPending();
-                               this.api.newSection(
-                                       this.feedbackPageTitle,
-                                       subject,
-                                       message,
-                                       { redirect: true }
-                               )
-                               .done( function ( result ) {
-                                       if ( result.edit.result === 'Success' ) {
-                                               fb.status = 'submitted';
-                                       } else {
-                                               fb.status = 'error1';
-                                       }
-                                       fb.popPending();
-                                       fb.close();
-                               } )
-                               .fail( function ( code, result ) {
-                                       if ( code === 'http' ) {
-                                               fb.status = 'error3';
-                                               // ajax request failed
-                                               mw.log.warn( 'Feedback report failed with HTTP error: ' +  result.textStatus );
-                                       } else {
-                                               fb.status = 'error2';
-                                               mw.log.warn( 'Feedback report failed with API error: ' +  code );
-                                       }
-                                       fb.popPending();
+                               // Post the message
+                               return this.messagePosterPromise.then( function ( poster ) {
+                                       return fb.postMessage( poster, subject, message );
+                               }, function () {
+                                       fb.status = 'error4';
+                                       mw.log.warn( 'Feedback report failed because MessagePoster could not be fetched' );
+                               } ).always( function () {
                                        fb.close();
                                } );
                        }, this );
                return mw.Feedback.Dialog.super.prototype.getActionProcess.call( this, action );
        };
 
+       /**
+        * Posts the message
+        *
+        * @private
+        *
+        * @param {mw.messagePoster.MessagePoster} poster Poster implementation used to leave feedback
+        * @param {string} subject Subject of message
+        * @param {string} message Body of message
+        * @return {jQuery.Promise} Promise representing success of message posting action
+        */
+       mw.Feedback.Dialog.prototype.postMessage = function ( poster, subject, message ) {
+               var fb = this;
+
+               return poster.post(
+                       subject,
+                       message
+               ).then( function () {
+                       fb.status = 'submitted';
+               }, function ( mainCode, secondaryCode, details ) {
+                       if ( mainCode === 'api-fail' ) {
+                               if ( secondaryCode === 'http' ) {
+                                       fb.status = 'error3';
+                                       // ajax request failed
+                                       mw.log.warn( 'Feedback report failed with HTTP error: ' +  details.textStatus );
+                               } else {
+                                       fb.status = 'error2';
+                                       mw.log.warn( 'Feedback report failed with API error: ' +  secondaryCode );
+                               }
+                       } else {
+                               fb.status = 'error1';
+                       }
+               } );
+       };
+
        /**
         * @inheritdoc
         */
index 7b7ccf3..f981b90 100644 (file)
@@ -12,7 +12,8 @@
                        // element (not the search form, as that would leave the buttons
                        // vertically between the input and the suggestions).
                        $searchRegion = $( '#simpleSearch, #searchInput' ).first(),
-                       $searchInput = $( '#searchInput' );
+                       $searchInput = $( '#searchInput' ),
+                       previousSearchText = $searchInput.val();
 
                // Compatibility map
                map = {
                        };
                }
 
+               /**
+                * Callback that's run when the user changes the search input text
+                * 'this' is the search input box (jQuery object)
+                * @ignore
+                */
+               function onBeforeUpdate() {
+                       var searchText = this.val();
+
+                       if ( searchText && searchText !== previousSearchText ) {
+                               mw.track( 'mediawiki.searchSuggest', {
+                                       action: 'session-start'
+                               } );
+                       }
+                       previousSearchText = searchText;
+               }
+
+               /**
+                * Callback that's run when suggestions have been updated either from the cache or the API
+                * 'this' is the search input box (jQuery object)
+                * @ignore
+                */
+               function onAfterUpdate() {
+                       var context = this.data( 'suggestionsContext' );
+
+                       mw.track( 'mediawiki.searchSuggest', {
+                               action: 'impression-results',
+                               numberOfResults: context.config.suggestions.length,
+                               // FIXME: when other types of search become available change this value accordingly
+                               // See the API call below (opensearch = prefix)
+                               resultSetType: 'prefix'
+                       } );
+               }
+
                // The function used to render the suggestions.
                function renderFunction( text, context ) {
                        if ( !resultRenderCache ) {
                                );
                }
 
+               // The function used when the user makes a selection
+               function selectFunction( $input ) {
+                       var context = $input.data( 'suggestionsContext' ),
+                               text = $input.val();
+
+                       mw.track( 'mediawiki.searchSuggest', {
+                               action: 'click-result',
+                               numberOfResults: context.config.suggestions.length,
+                               clickIndex: context.config.suggestions.indexOf( text ) + 1
+                       } );
+
+                       // allow the form to be submitted
+                       return true;
+               }
+
                function specialRenderFunction( query, context ) {
                        var $el = this;
 
                        return;
                }
 
-               // Special suggestions functionality for skin-provided search box
+               // Special suggestions functionality and tracking for skin-provided search box
                $searchInput.suggestions( {
+                       update: {
+                               before: onBeforeUpdate,
+                               after: onAfterUpdate
+                       },
+                       result: {
+                               render: renderFunction,
+                               select: selectFunction
+                       },
                        special: {
                                render: specialRenderFunction,
                                select: function ( $input ) {
index 4a4130e..77b26b3 100644 (file)
@@ -2,6 +2,8 @@
 
 /**
  * Parser-related tests that don't suit for parserTests.txt
+ *
+ * @group Database
  */
 class ExtraParserTest extends MediaWikiTestCase {
 
index dcafb73..1e30273 100644 (file)
@@ -374,24 +374,6 @@ class GlobalTest extends MediaWikiTestCase {
                }
        }
 
-       /**
-        * @covers ::swap
-        */
-       public function testSwapVarsTest() {
-               $this->hideDeprecated( 'swap' );
-
-               $var1 = 1;
-               $var2 = 2;
-
-               $this->assertEquals( $var1, 1, 'var1 is set originally' );
-               $this->assertEquals( $var2, 2, 'var1 is set originally' );
-
-               swap( $var1, $var2 );
-
-               $this->assertEquals( $var1, 2, 'var1 is swapped' );
-               $this->assertEquals( $var2, 1, 'var2 is swapped' );
-       }
-
        /**
         * @covers ::wfPercent
         */
index 022c7d5..fd10ae7 100644 (file)
@@ -664,7 +664,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $this->setTitle( NS_MAIN, "test page" );
                $this->title->mTitleProtection['permission'] = '';
                $this->title->mTitleProtection['user'] = $this->user->getID();
-               $this->title->mTitleProtection['expiry'] = wfGetDB( DB_SLAVE )->getInfinity();
+               $this->title->mTitleProtection['expiry'] = 'infinity';
                $this->title->mTitleProtection['reason'] = 'test';
                $this->title->mCascadeRestriction = false;
 
index d55f958..00c29ee 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group Database
  * @group Title
  */
 class TitleTest extends MediaWikiTestCase {
index 83f5922..3babb97 100644 (file)
@@ -19,7 +19,7 @@ class ActionTest extends MediaWikiTestCase {
                        'disabled' => false,
                        'view' => true,
                        'edit' => true,
-                       'revisiondelete' => true,
+                       'revisiondelete' => 'SpecialPageAction',
                        'dummy' => true,
                        'string' => 'NamedDummyAction',
                        'declared' => 'NonExistingClassName',
index dabf72e..9e830f2 100644 (file)
@@ -56,12 +56,12 @@ STR;
         * @return array
         */
        private function validateRequestExpectedPair( $v ) {
-               $this->assertType( 'array', $v, self::PARAM_ASSERT );
+               $this->assertInternalType( 'array', $v, self::PARAM_ASSERT );
                $this->assertEquals( 2, count( $v ), self::PARAM_ASSERT );
                $this->assertArrayHasKey( 0, $v, self::PARAM_ASSERT );
                $this->assertArrayHasKey( 1, $v, self::PARAM_ASSERT );
-               $this->assertType( 'array', $v[0], self::PARAM_ASSERT );
-               $this->assertType( 'array', $v[1], self::PARAM_ASSERT );
+               $this->assertInternalType( 'array', $v[0], self::PARAM_ASSERT );
+               $this->assertInternalType( 'array', $v[1], self::PARAM_ASSERT );
 
                return $v;
        }
index b3cb7b5..0dba183 100644 (file)
@@ -46,6 +46,7 @@ class RecentChangeTest extends MediaWikiTestCase {
         * - protect/protect
         * - protect/modifyprotect
         * - protect/unprotect
+        * - protect/move_prot
         * - upload/upload
         * - merge/merge
         * - import/upload
@@ -223,6 +224,15 @@ class RecentChangeTest extends MediaWikiTestCase {
                        $protectParams,
                        $this->user_comment
                );
+
+               # protect/move_prot
+               $this->assertIRCComment(
+                       $this->context->msg( 'movedarticleprotection', 'SomeTitle', 'OldTitle' )
+                               ->plain() . $sep . $this->user_comment,
+                       'protect', 'move_prot',
+                       array( 'OldTitle' ),
+                       $this->user_comment
+               );
        }
 
        /**
index b70880e..90438a0 100644 (file)
@@ -17,7 +17,6 @@ class MockSearch extends SearchEngine {
 
 /**
  * @group Search
- * @group Database
  */
 class SearchUpdateTest extends MediaWikiTestCase {
 
index bfca75a..aaa93ef 100644 (file)
@@ -2376,7 +2376,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = Status::newGood();
                $sl = $this->backend->getScopedFileLocks( $paths, LockManager::LOCK_EX, $status );
-               $this->assertType( 'ScopedLock', $sl,
+               $this->assertInstanceOf( 'ScopedLock', $sl,
                        "Scoped locking of files succeeded ($backendName)." );
                $this->assertEquals( array(), $status->errors,
                        "Scoped locking of files succeeded ($backendName)." );
index 5c5052e..3c5754b 100644 (file)
@@ -2,7 +2,6 @@
 
 /**
  * These tests should work regardless of $wgCapitalLinks
- * @group Database
  * @todo Split tests into providers and test methods
  */
 
index f0ac6ac..8bca333 100644 (file)
@@ -159,12 +159,12 @@ class FormatJsonTest extends MediaWikiTestCase {
                $this->assertJson( $json );
 
                $st = FormatJson::parse( $json );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertTrue( $st->isGood() );
                $this->assertEquals( $expected, $st->getValue() );
 
                $st = FormatJson::parse( $json, FormatJson::FORCE_ASSOC );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertTrue( $st->isGood() );
                $this->assertEquals( $value, $st->getValue() );
        }
@@ -230,7 +230,7 @@ class FormatJsonTest extends MediaWikiTestCase {
                }
 
                $st = FormatJson::parse( $value, FormatJson::TRY_FIXING );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                if ( $expected === false ) {
                        $this->assertFalse( $st->isOK(), 'Expected isOK() == false' );
                } else {
@@ -256,7 +256,7 @@ class FormatJsonTest extends MediaWikiTestCase {
         */
        public function testParseErrors( $value ) {
                $st = FormatJson::parse( $value );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertFalse( $st->isOK() );
        }
 
@@ -313,7 +313,7 @@ class FormatJsonTest extends MediaWikiTestCase {
         */
        public function testParseStripComments( $json, $expect ) {
                $st = FormatJson::parse( $json, FormatJson::STRIP_COMMENTS );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertTrue( $st->isGood() );
                $this->assertEquals( $expect, $st->getValue() );
        }
index 1722611..cd54a9e 100644 (file)
@@ -10,6 +10,8 @@
  * @copyright Copyright © 2011, Antoine Musso
  * @file
  * @todo covers tags
+ *
+ * @group Database
  */
 
 class MagicVariableTest extends MediaWikiTestCase {
index 1790086..af143ca 100644 (file)
@@ -1,5 +1,9 @@
 <?php
 
+/**
+ * @group Database
+ */
+
 class ParserMethodsTest extends MediaWikiLangTestCase {
 
        public static function providePreSaveTransform() {
index 251da47..3605e50 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group Database
  * @group Parser
  */
 class TagHookTest extends MediaWikiTestCase {
index b4c225c..b95316c 100644 (file)
@@ -261,6 +261,57 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                        ),
                                ),
                        ),
+                       // ResourceModuleSkinStyles with file module paths
+                       array(
+                               // Input
+                               array(
+                                       'ResourceFileModulePaths' => array(
+                                               'localBasePath' => '',
+                                               'remoteSkinPath' => 'FooBar',
+                                       ),
+                                       'ResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                               )
+                                       ),
+                               ),
+                               // Expected
+                               array(
+                                       'wgResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                                       'localBasePath' => $dir,
+                                                       'remoteSkinPath' => 'FooBar',
+                                               ),
+                                       ),
+                               ),
+                       ),
+                       // ResourceModuleSkinStyles with file module paths and an override
+                       array(
+                               // Input
+                               array(
+                                       'ResourceFileModulePaths' => array(
+                                               'localBasePath' => '',
+                                               'remoteSkinPath' => 'FooBar',
+                                       ),
+                                       'ResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                                       'remoteSkinPath' => 'BarFoo'
+                                               ),
+                                       ),
+                               ),
+                               // Expected
+                               array(
+                                       'wgResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                                       'localBasePath' => $dir,
+                                                       'remoteSkinPath' => 'BarFoo',
+                                               ),
+                                       ),
+                               ),
+                       ),
                );
        }
 
index 122995a..e1197df 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group Database
  * @group ResourceLoader
  */
 class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
index 758cfe1..cc121ba 100644 (file)
@@ -109,9 +109,6 @@ class ResourceLoaderImageTest extends ResourceLoaderTestCase {
 
 class ResourceLoaderImageTestable extends ResourceLoaderImage {
        // Make some protected methods public
-       public function getPath( ResourceLoaderContext $context ) {
-               return parent::getPath( $context );
-       }
        public function massageSvgPathdata( $svg ) {
                return parent::massageSvgPathdata( $svg );
        }
index 4f6c411..1545d7e 100644 (file)
@@ -4,10 +4,11 @@
  *
  * Copyright © 2013, Antoine Musso
  * Copyright © 2013, Wikimedia Foundation Inc.
- *
  */
 
 /**
+ * @group Database
+ *
  * @covers SpecialPreferences
  */
 class SpecialPreferencesTest extends MediaWikiTestCase {
index 09c1587..acc9dfc 100644 (file)
 
 class IPTest extends PHPUnit_Framework_TestCase {
        /**
-        *  not sure it should be tested with boolean false. hashar 20100924
         * @covers IP::isIPAddress
+        * @dataProvider provideInvalidIPs
         */
-       public function testisIPAddress() {
-               $this->assertFalse( IP::isIPAddress( false ), 'Boolean false is not an IP' );
-               $this->assertFalse( IP::isIPAddress( true ), 'Boolean true is not an IP' );
-               $this->assertFalse( IP::isIPAddress( "" ), 'Empty string is not an IP' );
-               $this->assertFalse( IP::isIPAddress( 'abc' ), 'Garbage IP string' );
-               $this->assertFalse( IP::isIPAddress( ':' ), 'Single ":" is not an IP' );
-               $this->assertFalse( IP::isIPAddress( '2001:0DB8::A:1::1' ), 'IPv6 with a double :: occurrence' );
-               $this->assertFalse(
-                       IP::isIPAddress( '2001:0DB8::A:1::' ),
-                       'IPv6 with a double :: occurrence, last at end'
-               );
-               $this->assertFalse(
-                       IP::isIPAddress( '::2001:0DB8::5:1' ),
-                       'IPv6 with a double :: occurrence, firt at beginning'
+       public function isNotIPAddress( $val, $desc ) {
+               $this->assertFalse( IP::isIPAddress( $val ), $desc );
+       }
+
+       /**
+        * Provide a list of things that aren't IP addresses
+        */
+       public function provideInvalidIPs() {
+               return array(
+                       array( false, 'Boolean false is not an IP' ),
+                       array( true, 'Boolean true is not an IP' ),
+                       array( '', 'Empty string is not an IP' ),
+                       array( 'abc', 'Garbage IP string' ),
+                       array( ':', 'Single ":" is not an IP' ),
+                       array( '2001:0DB8::A:1::1', 'IPv6 with a double :: occurrence' ),
+                       array( '2001:0DB8::A:1::', 'IPv6 with a double :: occurrence, last at end' ),
+                       array( '::2001:0DB8::5:1', 'IPv6 with a double :: occurrence, firt at beginning' ),
+                       array( '124.24.52', 'IPv4 not enough quads' ),
+                       array( '24.324.52.13', 'IPv4 out of range' ),
+                       array( '.24.52.13', 'IPv4 starts with period' ),
+                       array( 'fc:100:300', 'IPv6 with only 3 words' ),
                );
-               $this->assertFalse( IP::isIPAddress( '124.24.52' ), 'IPv4 not enough quads' );
-               $this->assertFalse( IP::isIPAddress( '24.324.52.13' ), 'IPv4 out of range' );
-               $this->assertFalse( IP::isIPAddress( '.24.52.13' ), 'IPv4 starts with period' );
-               $this->assertFalse( IP::isIPAddress( 'fc:100:300' ), 'IPv6 with only 3 words' );
+       }
 
+       /**
+        * @covers IP::isIPAddress
+        */
+       public function testisIPAddress() {
                $this->assertTrue( IP::isIPAddress( '::' ), 'RFC 4291 IPv6 Unspecified Address' );
                $this->assertTrue( IP::isIPAddress( '::1' ), 'RFC 4291 IPv6 Loopback Address' );
                $this->assertTrue( IP::isIPAddress( '74.24.52.13/20', 'IPv4 range' ) );
@@ -107,20 +115,42 @@ class IPTest extends PHPUnit_Framework_TestCase {
 
        /**
         * @covers IP::isIPv4
+        * @dataProvider provideInvalidIPv4Addresses
         */
-       public function testisIPv4() {
-               $this->assertFalse( IP::isIPv4( false ), 'Boolean false is not an IP' );
-               $this->assertFalse( IP::isIPv4( true ), 'Boolean true is not an IP' );
-               $this->assertFalse( IP::isIPv4( "" ), 'Empty string is not an IP' );
-               $this->assertFalse( IP::isIPv4( 'abc' ) );
-               $this->assertFalse( IP::isIPv4( ':' ) );
-               $this->assertFalse( IP::isIPv4( '124.24.52' ), 'IPv4 not enough quads' );
-               $this->assertFalse( IP::isIPv4( '24.324.52.13' ), 'IPv4 out of range' );
-               $this->assertFalse( IP::isIPv4( '.24.52.13' ), 'IPv4 starts with period' );
+       public function testisNotIPv4( $bogusIP, $desc ) {
+               $this->assertFalse( IP::isIPv4( $bogusIP ), $desc );
+       }
 
-               $this->assertTrue( IP::isIPv4( '124.24.52.13' ) );
-               $this->assertTrue( IP::isIPv4( '1.24.52.13' ) );
-               $this->assertTrue( IP::isIPv4( '74.24.52.13/20', 'IPv4 range' ) );
+       public function provideInvalidIPv4Addresses() {
+               return array(
+                       array( false, 'Boolean false is not an IP' ),
+                       array( true, 'Boolean true is not an IP' ),
+                       array( '', 'Empty string is not an IP' ),
+                       array( 'abc', 'Letters are not an IP' ),
+                       array( ':', 'A colon is not an IP' ),
+                       array( '124.24.52', 'IPv4 not enough quads' ),
+                       array( '24.324.52.13', 'IPv4 out of range' ),
+                       array( '.24.52.13', 'IPv4 starts with period' ),                
+               );
+       }
+
+       /**
+        * @covers IP::isIPv4
+        * @dataProvider provideValidIPv4Address
+        */
+       public function testIsIPv4( $ip, $desc ) {
+               $this->assertTrue( IP::isIPv4( $ip ), $desc );
+       }
+
+       /**
+        * Provide some IPv4 addresses and ranges
+        */
+       public function provideValidIPv4Address() {
+               return array(
+                       array( '124.24.52.13', 'Valid IPv4 address' ),
+                       array( '1.24.52.13', 'Another valid IPv4 address' ),
+                       array( '74.24.52.13/20', 'An IPv4 range' ),
+               );
        }
 
        /**
@@ -224,49 +254,56 @@ class IPTest extends PHPUnit_Framework_TestCase {
        }
 
        /**
-        * @covers IP::isValidBlock
+        * Provide some valid IP blocks
         */
-       public function testValidBlocks() {
-               $valid = array(
-                       '116.17.184.5/32',
-                       '0.17.184.5/30',
-                       '16.17.184.1/24',
-                       '30.242.52.14/1',
-                       '10.232.52.13/8',
-                       '30.242.52.14/0',
-                       '::e:f:2001/96',
-                       '::c:f:2001/128',
-                       '::10:f:2001/70',
-                       '::fe:f:2001/1',
-                       '::6d:f:2001/8',
-                       '::fe:f:2001/0',
+       public function provideValidBlocks() {
+               return array(
+                       array( '116.17.184.5/32' ),
+                       array( '0.17.184.5/30' ),
+                       array( '16.17.184.1/24' ),
+                       array( '30.242.52.14/1' ),
+                       array( '10.232.52.13/8' ),
+                       array( '30.242.52.14/0' ),
+                       array( '::e:f:2001/96' ),
+                       array( '::c:f:2001/128' ),
+                       array( '::10:f:2001/70' ),
+                       array( '::fe:f:2001/1' ),
+                       array( '::6d:f:2001/8' ),
+                       array( '::fe:f:2001/0' ),
                );
-               foreach ( $valid as $i ) {
-                       $this->assertTrue( IP::isValidBlock( $i ), "$i is a valid IP block" );
-               }
        }
 
        /**
         * @covers IP::isValidBlock
+        * @dataProvider provideValidBlocks
         */
-       public function testInvalidBlocks() {
-               $invalid = array(
-                       '116.17.184.5/33',
-                       '0.17.184.5/130',
-                       '16.17.184.1/-1',
-                       '10.232.52.13/*',
-                       '7.232.52.13/ab',
-                       '11.232.52.13/',
-                       '::e:f:2001/129',
-                       '::c:f:2001/228',
-                       '::10:f:2001/-1',
-                       '::6d:f:2001/*',
-                       '::86:f:2001/ab',
-                       '::23:f:2001/',
+       public function testValidBlocks( $block ) {
+               $this->assertTrue( IP::isValidBlock( $block ), "$block is a valid IP block" );
+       }
+
+       /**
+        * @covers IP::isValidBlock
+        * @dataProvider provideInvalidBlocks
+        */
+       public function testInvalidBlocks( $invalid ) {
+               $this->assertFalse( IP::isValidBlock( $invalid ), "$invalid is not a valid IP block" );
+       }
+
+       public function provideInvalidBlocks() {
+               return array(
+                       array( '116.17.184.5/33' ),
+                       array( '0.17.184.5/130' ),
+                       array( '16.17.184.1/-1' ),
+                       array( '10.232.52.13/*' ),
+                       array( '7.232.52.13/ab' ),
+                       array( '11.232.52.13/' ),
+                       array( '::e:f:2001/129' ),
+                       array( '::c:f:2001/228' ),
+                       array( '::10:f:2001/-1' ),
+                       array( '::6d:f:2001/*' ),
+                       array( '::86:f:2001/ab' ),
+                       array( '::23:f:2001/' ),
                );
-               foreach ( $invalid as $i ) {
-                       $this->assertFalse( IP::isValidBlock( $i ), "$i is not a valid IP block" );
-               }
        }
 
        /**
@@ -336,40 +373,55 @@ class IPTest extends PHPUnit_Framework_TestCase {
 
        /**
         * @covers IP::hexToQuad
+        * @dataProvider provideIPsAndHexes
         */
-       public function testHexToQuad() {
-               $this->assertEquals( '0.0.0.1', IP::hexToQuad( '00000001' ) );
-               $this->assertEquals( '255.0.0.0', IP::hexToQuad( 'FF000000' ) );
-               $this->assertEquals( '255.255.255.255', IP::hexToQuad( 'FFFFFFFF' ) );
-               $this->assertEquals( '10.188.222.255', IP::hexToQuad( '0ABCDEFF' ) );
-               // hex not left-padded...
-               $this->assertEquals( '0.0.0.0', IP::hexToQuad( '0' ) );
-               $this->assertEquals( '0.0.0.1', IP::hexToQuad( '1' ) );
-               $this->assertEquals( '0.0.0.255', IP::hexToQuad( 'FF' ) );
-               $this->assertEquals( '0.0.255.0', IP::hexToQuad( 'FF00' ) );
+       public function testHexToQuad( $ip, $hex ) {
+               $this->assertEquals( $ip, IP::hexToQuad( $hex ) );
+       }
+
+       /**
+        * Provide some IP addresses and their equivalent hex representations
+        */
+       public function provideIPsandHexes() {
+               return array(
+                       array( '0.0.0.1', '00000001' ),
+                       array( '255.0.0.0', 'FF000000' ),
+                       array( '255.255.255.255', 'FFFFFFFF' ),
+                       array( '10.188.222.255', '0ABCDEFF' ),
+                       // hex not left-padded...
+                       array( '0.0.0.0', '0' ),
+                       array( '0.0.0.1', '1' ),
+                       array( '0.0.0.255', 'FF' ),
+                       array( '0.0.255.0', 'FF00' ),
+               );
        }
 
        /**
         * @covers IP::hexToOctet
+        * @dataProvider provideOctetsAndHexes
         */
-       public function testHexToOctet() {
-               $this->assertEquals( '0:0:0:0:0:0:0:1',
-                       IP::hexToOctet( '00000000000000000000000000000001' ) );
-               $this->assertEquals( '0:0:0:0:0:0:FF:3',
-                       IP::hexToOctet( '00000000000000000000000000FF0003' ) );
-               $this->assertEquals( '0:0:0:0:0:0:FF00:6',
-                       IP::hexToOctet( '000000000000000000000000FF000006' ) );
-               $this->assertEquals( '0:0:0:0:0:0:FCCF:FAFF',
-                       IP::hexToOctet( '000000000000000000000000FCCFFAFF' ) );
-               $this->assertEquals( 'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF',
-                       IP::hexToOctet( 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' ) );
-               // hex not left-padded...
-               $this->assertEquals( '0:0:0:0:0:0:0:0', IP::hexToOctet( '0' ) );
-               $this->assertEquals( '0:0:0:0:0:0:0:1', IP::hexToOctet( '1' ) );
-               $this->assertEquals( '0:0:0:0:0:0:0:FF', IP::hexToOctet( 'FF' ) );
-               $this->assertEquals( '0:0:0:0:0:0:0:FFD0', IP::hexToOctet( 'FFD0' ) );
-               $this->assertEquals( '0:0:0:0:0:0:FA00:0', IP::hexToOctet( 'FA000000' ) );
-               $this->assertEquals( '0:0:0:0:0:0:FCCF:FAFF', IP::hexToOctet( 'FCCFFAFF' ) );
+       public function testHexToOctet( $octet, $hex ) {
+               $this->assertEquals( $octet, IP::hexToOctet( $hex ) );
+       }
+
+       /**
+        * Provide some hex and octet representations of the same IPs
+        */
+       public function provideOctetsAndHexes() {
+               return array(
+                       array( '0:0:0:0:0:0:0:1', '00000000000000000000000000000001' ),
+                       array( '0:0:0:0:0:0:FF:3', '00000000000000000000000000FF0003' ),
+                       array( '0:0:0:0:0:0:FF00:6', '000000000000000000000000FF000006' ),
+                       array( '0:0:0:0:0:0:FCCF:FAFF', '000000000000000000000000FCCFFAFF' ),
+                       array( 'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' ),
+                       // hex not left-padded...
+                       array( '0:0:0:0:0:0:0:0', '0' ),
+                       array( '0:0:0:0:0:0:0:1', '1' ),
+                       array( '0:0:0:0:0:0:0:FF', 'FF' ),
+                       array( '0:0:0:0:0:0:0:FFD0', 'FFD0' ),
+                       array( '0:0:0:0:0:0:FA00:0', 'FA000000' ),
+                       array( '0:0:0:0:0:0:FCCF:FAFF', 'FCCFFAFF' ),
+               );
        }
 
        /**
index 0e11cca..fedcc76 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-class UIDGeneratorTest extends MediaWikiTestCase {
+class UIDGeneratorTest extends PHPUnit_Framework_TestCase {
 
        protected function tearDown() {
                // Bug: 44850
@@ -28,7 +28,7 @@ class UIDGeneratorTest extends MediaWikiTestCase {
 
                $lastId = array_shift( $ids );
 
-               $this->assertArrayEquals( array_unique( $ids ), $ids, "All generated IDs are unique." );
+               $this->assertSame( array_unique( $ids ), $ids, "All generated IDs are unique." );
 
                foreach ( $ids as $id ) {
                        $id_bin = wfBaseConvert( $id, 10, 2 );
@@ -105,8 +105,8 @@ class UIDGeneratorTest extends MediaWikiTestCase {
                $id1 = UIDGenerator::newSequentialPerNodeID( 'test', 32 );
                $id2 = UIDGenerator::newSequentialPerNodeID( 'test', 32 );
 
-               $this->assertType( 'float', $id1, "ID returned as float" );
-               $this->assertType( 'float', $id2, "ID returned as float" );
+               $this->assertInternalType( 'float', $id1, "ID returned as float" );
+               $this->assertInternalType( 'float', $id2, "ID returned as float" );
                $this->assertGreaterThan( 0, $id1, "ID greater than 1" );
                $this->assertGreaterThan( $id1, $id2, "IDs increasing in value" );
        }
@@ -118,7 +118,7 @@ class UIDGeneratorTest extends MediaWikiTestCase {
                $ids = UIDGenerator::newSequentialPerNodeIDs( 'test', 32, 5 );
                $lastId = null;
                foreach ( $ids as $id ) {
-                       $this->assertType( 'float', $id, "ID returned as float" );
+                       $this->assertInternalType( 'float', $id, "ID returned as float" );
                        $this->assertGreaterThan( 0, $id, "ID greater than 1" );
                        if ( $lastId ) {
                                $this->assertGreaterThan( $lastId, $id, "IDs increasing in value" );
index e59b506..d18ab73 100755 (executable)
@@ -228,12 +228,14 @@ foreach ( array(
 }
 
 if ( !$ok ) {
-       die( "Couldn't find a usable PHPUnit.\n" );
+       echo "Couldn't find a usable PHPUnit.\n";
+       exit( 1 );
 }
 
 $puVersion = PHPUnit_Runner_Version::id();
 if ( $puVersion !== '@package_version@' && version_compare( $puVersion, '3.7.0', '<' ) ) {
-       die( "PHPUnit 3.7.0 or later required; you have {$puVersion}.\n" );
+       echo "PHPUnit 3.7.0 or later required; you have {$puVersion}.\n";
+       exit( 1 );
 }
 
 PHPUnit_TextUI_Command::main();
index 9a3dab6..17b8b63 100644 (file)
@@ -65,6 +65,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
@@ -106,6 +107,7 @@ return array(
                        'mediawiki.api.parse',
                        'mediawiki.api.watch',
                        'mediawiki.jqueryMsg',
+                       'mediawiki.messagePoster',
                        'mediawiki.Title',
                        'mediawiki.toc',
                        'mediawiki.Uri',
index 03aaf4a..3c44b55 100644 (file)
         * </code>
         */
        QUnit.newMwEnvironment = ( function () {
-               var warn, log, liveConfig, liveMessages;
+               var warn, log, liveConfig, liveMessages,
+                       ajaxRequests = [];
 
                liveConfig = mw.config.values;
                liveMessages = mw.messages.values;
                        return $.extend( /*deep=*/true, {}, liveMessages, custom );
                }
 
+               /**
+                * @param {jQuery.Event} event
+                * @param {jqXHR} jqXHR
+                * @param {Object} ajaxOptions
+                */
+               function trackAjax( event, jqXHR, ajaxOptions ) {
+                       ajaxRequests.push( { xhr: jqXHR, options: ajaxOptions } );
+               }
+
                log = QUnit.urlParams.mwlogenv ? mw.log : function () {};
 
                return function ( localEnv ) {
                                        this.suppressWarnings = suppressWarnings;
                                        this.restoreWarnings = restoreWarnings;
 
+                                       // Start tracking ajax requests
+                                       $( document ).on( 'ajaxSend', trackAjax );
+
                                        localEnv.setup.call( this );
                                },
 
                                teardown: function () {
-                                       var timers;
+                                       var timers, active;
                                        log( 'MwEnvironment> TEARDOWN for "' + QUnit.config.current.module
                                                + ': ' + QUnit.config.current.testName + '"' );
 
                                        localEnv.teardown.call( this );
 
+                                       // Stop tracking ajax requests
+                                       $( document ).off( 'ajaxSend', trackAjax );
+
                                        // Farewell, mock environment!
                                        mw.config.values = liveConfig;
                                        mw.messages.values = liveMessages;
                                        // still suppressed by the end of the test.
                                        restoreWarnings();
 
-                                       // Check for incomplete animations/requests/etc and throw
-                                       // error if there are any.
+                                       // Tests should use fake timers or wait for animations to complete
+                                       // Check for incomplete animations/requests/etc and throw if there are any.
                                        if ( $.timers && $.timers.length !== 0 ) {
                                                timers = $.timers.length;
-                                               // Tests shoulld use fake timers or wait for animations to complete
                                                $.each( $.timers, function ( i, timer ) {
                                                        var node = timer.elem;
                                                        mw.log.warn( 'Unfinished animation #' + i + ' in ' + timer.queue + ' queue on ' +
 
                                                throw new Error( 'Unfinished animations: ' + timers );
                                        }
+
+                                       // Test should use fake XHR, wait for requests, or call abort()
                                        if ( $.active !== undefined && $.active !== 0 ) {
-                                               // Test may need to use fake XHR, wait for requests or
-                                               // call abort().
-                                               throw new Error( 'Unfinished AJAX requests: ' + $.active );
+                                               active = $.grep( ajaxRequests, function ( ajax ) {
+                                                       return ajax.xhr.state() === 'pending';
+                                               } );
+                                               if ( active.length !== $.active ) {
+                                                       mw.log.warn( 'Pending requests does not match jQuery.active count' );
+                                               }
+                                               // Force requests to stop to give the next test a clean start
+                                               $.each( active, function ( i, ajax ) {
+                                                       mw.log.warn( 'Unfinished AJAX request #' + i, ajax.options );
+                                                       ajax.xhr.abort();
+                                               } );
+                                               ajaxRequests = [];
+
+                                               throw new Error( 'Unfinished AJAX requests: ' + active.length );
                                        }
                                }
                        };
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js
new file mode 100644 (file)
index 0000000..61bab03
--- /dev/null
@@ -0,0 +1,28 @@
+( function ( mw ) {
+       var TEST_MODEL = 'test-content-model';
+
+       QUnit.module( 'mediawiki.messagePoster', QUnit.newMwEnvironment( {
+               teardown: function () {
+                       mw.messagePoster.factory.unregister( TEST_MODEL );
+               }
+       } ) );
+
+       QUnit.test( 'register', 2, function ( assert ) {
+               var testMessagePosterConstructor = function () {};
+
+               mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
+               assert.strictEqual(
+                       mw.messagePoster.factory.contentModelToClass[TEST_MODEL],
+                       testMessagePosterConstructor,
+                       'Constructor is registered'
+               );
+
+               assert.throws(
+                       function () {
+                               mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
+                       },
+                       new RegExp( 'The content model \'' + TEST_MODEL + '\' is already registered.' ),
+                       'Throws exception is same model is registered a second time'
+               );
+       } );
+}( mediaWiki ) );
index cf36ea8..77fecb3 100644 (file)
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'test.callback', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )], {}, {} );
+               mw.loader.implement( 'test.callback', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )] );
 
                mw.loader.using( 'test.callback', function () {
 
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'test.promise', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )], {}, {} );
+               mw.loader.implement( 'test.promise', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )] );
 
                mw.loader.using( 'test.promise' )
                .done( function () {
                        },
                        {
                                'all': '.mw-test-implement-a { float: right; }'
-                       },
-                       {}
+                       }
                );
 
                mw.loader.load( [
                                                urlStyleTest( '.mw-test-implement-b3', 'float', 'right' )
                                        ]
                                }
-                       },
-                       {}
+                       }
                );
 
                mw.loader.load( [
                        },
                        {
                                'all': '.mw-test-implement-c { float: right; }'
-                       },
-                       {}
+                       }
                );
 
                mw.loader.load( [
                        {
                                'all': [urlStyleTest( '.mw-test-implement-d', 'float', 'right' )],
                                'print': [urlStyleTest( '.mw-test-implement-d2', 'text-align', 'center' )]
-                       },
-                       {}
+                       }
                );
 
                mw.loader.load( [
                        ['test.module5', '0', ['test.module4']],
                        ['test.module6', '0', ['test.module5']]
                ] );
-               mw.loader.implement( 'test.module4', function () {
-               }, {}, {} );
+               mw.loader.implement( 'test.module4', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
                assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
                assert.strictEqual( mw.loader.getState( 'test.module6' ), 'registered', 'Expected "registered" state for test.module6' );
-               mw.loader.implement( 'test.module6', function () {
-               }, {}, {} );
+               mw.loader.implement( 'test.module6', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
                assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
                assert.strictEqual( mw.loader.getState( 'test.module6' ), 'loaded', 'Expected "loaded" state for test.module6' );
-               mw.loader.implement( 'test.module5', function () {
-               }, {}, {} );
+               mw.loader.implement( 'test.module5', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
                assert.strictEqual( mw.loader.getState( 'test.module5' ), 'ready', 'Expected "ready" state for test.module5' );
                assert.strictEqual( mw.loader.getState( 'test.module6' ), 'ready', 'Expected "ready" state for test.module6' );
                        ['test.module8', '0', ['test.module7']],
                        ['test.module9', '0', ['test.module8']]
                ] );
-               mw.loader.implement( 'test.module8', function () {
-               }, {}, {} );
+               mw.loader.implement( 'test.module8', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module7' ), 'registered', 'Expected "registered" state for test.module7' );
                assert.strictEqual( mw.loader.getState( 'test.module8' ), 'loaded', 'Expected "loaded" state for test.module8' );
                assert.strictEqual( mw.loader.getState( 'test.module9' ), 'registered', 'Expected "registered" state for test.module9' );
                assert.strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
                assert.strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
                assert.strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
-               mw.loader.implement( 'test.module9', function () {
-               }, {}, {} );
+               mw.loader.implement( 'test.module9', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
                assert.strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
                assert.strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );