Merge "Update html5 specs link in comment"
authorSPQRobin <robinp.1273@gmail.com>
Sat, 10 May 2014 22:00:49 +0000 (22:00 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 10 May 2014 22:00:49 +0000 (22:00 +0000)
329 files changed:
.gitattributes [new file with mode: 0644]
RELEASE-NOTES-1.23
RELEASE-NOTES-1.24
docs/hooks.txt
img_auth.php
includes/Article.php
includes/AutoLoader.php
includes/Collation.php
includes/DefaultSettings.php
includes/FileDeleteForm.php
includes/GitInfo.php
includes/Linker.php
includes/MagicWord.php
includes/Namespace.php
includes/Revision.php
includes/RevisionList.php
includes/Setup.php
includes/Skin.php
includes/SkinTemplate.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiWatch.php
includes/cache/LocalisationCache.php
includes/clientpool/RedisConnectionPool.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/CssContent.php
includes/content/JavaScriptContent.php
includes/content/TextContent.php
includes/content/WikitextContent.php
includes/filerepo/FileRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/gallery/ImageGalleryBase.php
includes/installer/Installer.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/es.json
includes/installer/i18n/id.json
includes/installer/i18n/ko.json
includes/installer/i18n/ms.json
includes/installer/i18n/pl.json
includes/installer/i18n/ro.json
includes/installer/i18n/zh-hant.json
includes/media/Bitmap.php
includes/media/Jpeg.php
includes/parser/Parser.php
includes/poolcounter/PoolCounter.php
includes/poolcounter/PoolCounterRedis.php
includes/rcfeed/IRCColourfulRCFeedFormatter.php
includes/rcfeed/MachineReadableRCFeedFormatter.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/revisiondelete/RevisionDelete.php
includes/revisiondelete/RevisionDeleteAbstracts.php
includes/revisiondelete/RevisionDeleter.php
includes/search/SearchEngine.php
includes/search/SearchHighlighter.php
includes/search/SearchMssql.php
includes/search/SearchMySQL.php
includes/search/SearchOracle.php
includes/search/SearchSqlite.php
includes/site/MediaWikiSite.php
includes/site/Site.php
includes/site/SiteList.php
includes/site/SiteSQLStore.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialCachedPage.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialCreateAccount.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/templates/NoLocalSettings.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadFromFile.php
includes/upload/UploadFromStash.php
includes/upload/UploadFromUrl.php
includes/upload/UploadStash.php
includes/utils/ArrayUtils.php
includes/utils/Cdb.php
includes/utils/CdbPHP.php
includes/utils/UIDGenerator.php
languages/Language.php
languages/LanguageConverter.php
languages/i18n/af.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ar.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/avk.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/co.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.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/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fy.json
languages/i18n/ga.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gl.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/hak.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kab.json
languages/i18n/kiu.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lmo.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/nah.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/or.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/rm.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/sdc.json
languages/i18n/sgs.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/tg-cyrl.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vo.json
languages/i18n/vro.json
languages/i18n/wa.json
languages/i18n/xal.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesCy.php
languages/messages/MessagesEn.php
languages/messages/MessagesEt.php
languages/messages/MessagesId.php
languages/messages/MessagesTyv.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh_hans.php
maintenance/generateJsonI18n.php
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/oracle/archives/patch-page_links_updated.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-rc_source.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-user_password_expire.sql
maintenance/oracle/tables.sql
maintenance/pageExists.php [new file with mode: 0644]
maintenance/postgres/tables.sql
resources/Resources.php
resources/lib/jquery/jquery.migrate.js [new file with mode: 0644]
resources/lib/oojs-ui/i18n/krc.json
resources/lib/oojs-ui/i18n/ne.json
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.svg.css
resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki.api/mediawiki.api.watch.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.page/mediawiki.page.startup.js
resources/src/mediawiki.page/mediawiki.page.watch.ajax.js
resources/src/mediawiki.ui/components/default/forms.less
resources/src/mediawiki.ui/mixins/utilities.less
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.toc.js
resources/src/mediawiki/mediawiki.util.js
skins/common/commonPrint.css
skins/common/wikibits.js
skins/vector/components/watchstar.less
tests/parser/parserTest.inc
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/bootstrap.php
tests/phpunit/data/gitinfo/info-testValidJsonData.json [new file with mode: 0644]
tests/phpunit/includes/GitInfoTest.php [new file with mode: 0644]
tests/phpunit/includes/MWNamespaceTest.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/content/CssContentTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/install-phpunit.sh
tests/phpunit/phpunit.php
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js

diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..50ca329
--- /dev/null
@@ -0,0 +1 @@
+*.sh eol=lf
index 37e304d..575fdc3 100644 (file)
@@ -39,9 +39,12 @@ production.
 * $wgPasswordSenderName has been removed and is no longer functional. To set a
   custom mailer name, the system message 'emailsender' should be modified
   (default: "{{SITENAME}}").
-* If you customized [[MediaWiki:Enotif body]] (the text of email notifications),
+* (bug 63269) Email notifications were not correctly handling the
+  [[MediaWiki:Helppage]] message being set to a full URL (the default).
+  If you customized [[MediaWiki:Enotif body]] (the text of email notifications),
   you'll need to edit it locally to include the URL via the new variable
-  $HELPPAGE instead of the parser functions fullurl and canonicalurl.
+  $HELPPAGE instead of the parser functions fullurl and canonicalurl; otherwise
+  you don't have to do anything.
 * $wgDBAhandler was removed as the only class using it was also removed
 * The 'max threads' setting was removed from $wgDBservers.
 * Support for AdminSettings.php has been completely removed. All configuration
@@ -513,7 +516,7 @@ Don't forget to always back up your database before upgrading!
 
 See the file UPGRADE for more detailed upgrade instructions.
 
-For notes on 1.21.x and older releases, see HISTORY.
+For notes on 1.22.x and older releases, see HISTORY.
 
 == Online documentation ==
 
index 5185517..1bf308c 100644 (file)
@@ -9,16 +9,23 @@ MediaWiki 1.24 is an alpha-quality branch and is not recommended for use in
 production.
 
 === Configuration changes in 1.24 ===
+* The server's canonical hostname is available as $wgServerName, which is
+  exposed in both mw.config and ApiQuerySiteInfo.
 
 === New features in 1.24 ===
 * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
   WhatLinksHere entries.
+* Added a new hook, "ContentGetParserOutput", to customize parser output for
+  a given content object.
+* Deprecated the hook "ShowRawCssJs", use "ContentGetParserOutput" instead.
 * HTMLForm's HTMLTextField now supports the 'url' type.
 * HTMLForm fields may now be dynamically hidden based on the values of other
   fields in the form.
 * HTMLForm now supports multiple copies of an input field or set of input
   fields, e.g. the form may request "one or more usernames" without having to
   have the user enter delimited list of names into a text field.
+* Added a new hook, "SidebarBeforeOutput", to allow to edit the structure of
+  the sidebar just before its display.
 
 === Bug fixes in 1.24 ===
 * (bug 62258) A bug was fixed in File::getUnscaledThumb when a height
@@ -30,8 +37,11 @@ production.
   which used to collapse some sidebar elements by default.
 * (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
   follow redirects to their target pages.
+* Parser now dies early if called recursively, instead of producing subtle bugs.
 
 === Web API changes in 1.24 ===
+* action=parse API now supports prop=modules, which provides the list of
+  ResourceLoader modules that should be used to enhance the parsed content.
 
 === Languages updated in 1.24 ===
 
@@ -44,6 +54,9 @@ changes to languages because of Bugzilla reports.
 * The deprecated function mw.util.toggleToc was removed.
 * The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
   were removed as they were unused.
+* mediawiki.util.$content no longer supports old versions of the Vector,
+  Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
+  and/or "mw-body-primary" class name in their html.
 
 ==== Renamed classes ====
 * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
@@ -51,6 +64,23 @@ changes to languages because of Bugzilla reports.
 * CLDRPluralRuleConverter_Operator to CLDRPluralRuleConverterOperator
 * CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
 * CSSJanus_Tokenizer to CSSJanusTokenizer
+* RevDel_ArchiveItem to RevDelArchiveItem
+* RevDel_ArchiveList to RevDelArchiveList
+* RevDel_ArchivedFileItem to RevDelArchivedFileItem
+* RevDel_ArchivedFileList to RevDelArchivedFileList
+* RevDel_ArchivedRevisionItem to RevDelArchivedRevisionItem
+* RevDel_FileItem to RevDelFileItem
+* RevDel_FileList to RevDelFileList
+* RevDel_Item to RevDelItem
+* RevDel_List to RevDelList
+* RevDel_LogItem to RevDelLogItem
+* RevDel_LogList to RevDelLogList
+* RevDel_RevisionItem to RevDelRevisionItem
+* RevDel_RevisionList to RevDelRevisionList
+
+==== Removed classes ====
+* IPBlockForm - Use SpecialBlock directly
+* WatchlistEditor - Use SpecialEditWatchlist directly
 
 == Compatibility ==
 
@@ -70,7 +100,7 @@ The supported versions are:
 
 == Upgrading ==
 
-1.24 has several database changes since 1.22, and will not work without schema
+1.24 has several database changes since 1.23, 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).
@@ -90,7 +120,7 @@ Don't forget to always back up your database before upgrading!
 
 See the file UPGRADE for more detailed upgrade instructions.
 
-For notes on 1.21.x and older releases, see HISTORY.
+For notes on 1.22.x and older releases, see HISTORY.
 
 == Online documentation ==
 
index 688e0cd..d455fd2 100644 (file)
@@ -887,6 +887,19 @@ $title: the Title in question.
 Handler functions that modify $ok should generally return false to prevent further
 hooks from further modifying $ok.
 
+'ContentGetParserOutput': Customize parser output for a given content object,
+called by AbstractContent::getParserOutput. May be used to override the normal
+model-specific rendering of page content.
+$content: The Content to render
+$title: Title of the page, as context
+$revId: The revision ID, as context
+$options: ParserOptions for rendering. To avoid confusing the parser cache,
+the output can only depend on parameters provided to this hook function, not on global state.
+$generateHtml: boolean, indicating whether full HTML should be generated. If false,
+generation of HTML may be skipped, but other information should still be present in the
+ParserOutput object.
+&$output: ParserOutput, to manipulate or replace
+
 'ConvertContent': Called by AbstractContent::convert when a conversion to another
 content model is requested.
 $content: The Content object to be converted.
@@ -2171,7 +2184,7 @@ $title : Current Title object being displayed in search results.
 $article: The article object corresponding to the page
 
 'ShowRawCssJs': Customise the output of raw CSS and JavaScript in page views.
-DEPRECATED, use the ContentHandler facility to handle CSS and JavaScript!
+DEPRECATED, use the ContentGetParserOutput hook instead!
 $text: Text being shown
 $title: Title of the custom script/stylesheet page
 $output: Current OutputPage object
@@ -2226,6 +2239,12 @@ $skin: Skin object
 &$bar: Sidebar contents
 Modify $bar to add or modify sidebar portlets.
 
+'SidebarBeforeOutput': Allows to edit sidebar just before its output by skins.
+$skin Skin object
+&$bar: Sidebar content
+Modify $bar to add or modify sidebar portlets.
+Warning: This hook is run on each display. You should consider to use 'SkinBuildSidebar' that is aggressively cached.
+
 'SkinCopyrightFooter': Allow for site and per-namespace customization of
 copyright notice.
 $title: displayed page title
index a3485df..6f449c6 100644 (file)
@@ -106,14 +106,15 @@ function wfImageAuthMain() {
 
        // Get the local file repository
        $repo = RepoGroup::singleton()->getRepo( 'local' );
+       $zone = strstr( ltrim( $path, '/' ), '/', true );
 
        // Get the full file storage path and extract the source file name.
        // (e.g. 120px-Foo.png => Foo.png or page2-120px-Foo.png => Foo.png).
-       // This only applies to thumbnails, and all thumbnails should
+       // This only applies to thumbnails/transcoded, and each of them should
        // be under a folder that has the source file name.
-       if ( strpos( $path, '/thumb/' ) === 0 ) {
-               $name = wfBaseName( dirname( $path ) ); // file is a thumbnail
-               $filename = $repo->getZonePath( 'thumb' ) . substr( $path, 6 ); // strip "/thumb"
+       if ( $zone === 'thumb' || $zone === 'transcoded' ) {
+               $name = wfBaseName( dirname( $path ) );
+               $filename = $repo->getZonePath( $zone ) . substr( $path, strlen( "/".$zone ) );
                // Check to see if the file exists
                if ( !$repo->fileExists( $filename ) ) {
                        wfForbidden( 'img-auth-accessdenied', 'img-auth-nofile', $filename );
index 0a4b5ee..3bb1563 100644 (file)
@@ -832,8 +832,9 @@ class Article implements Page {
         * Show a page view for a page formatted as CSS or JavaScript. To be called by
         * Article::view() only.
         *
-        * This is hooked by SyntaxHighlight_GeSHi to do syntax highlighting of these
-        * page views.
+        * This exists mostly to serve the deprecated ShowRawCssJs hook (used to customize these views).
+        * It has been replaced by the ContentGetParserOutput hook, which lets you do the same but with
+        * more flexibility.
         *
         * @param bool $showCacheHint Whether to show a message telling the user
         *   to clear the browser cache (default: true).
index bfee420..09f1667 100644 (file)
@@ -876,19 +876,19 @@ $wgAutoloadLocalClasses = array(
        'ResourceLoaderWikiModule' => 'includes/resourceloader/ResourceLoaderWikiModule.php',
 
        # includes/revisiondelete
-       'RevDel_ArchivedFileItem' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_ArchivedFileList' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_ArchivedRevisionItem' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_ArchiveItem' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_ArchiveList' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_FileItem' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_FileList' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_Item' => 'includes/revisiondelete/RevisionDeleteAbstracts.php',
-       'RevDel_List' => 'includes/revisiondelete/RevisionDeleteAbstracts.php',
-       'RevDel_LogItem' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_LogList' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_RevisionItem' => 'includes/revisiondelete/RevisionDelete.php',
-       'RevDel_RevisionList' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelArchivedFileItem' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelArchivedFileList' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelArchivedRevisionItem' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelArchiveItem' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelArchiveList' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelFileItem' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelFileList' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelItem' => 'includes/revisiondelete/RevisionDeleteAbstracts.php',
+       'RevDelList' => 'includes/revisiondelete/RevisionDeleteAbstracts.php',
+       'RevDelLogItem' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelLogList' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelRevisionItem' => 'includes/revisiondelete/RevisionDelete.php',
+       'RevDelRevisionList' => 'includes/revisiondelete/RevisionDelete.php',
        'RevisionDeleter' => 'includes/revisiondelete/RevisionDeleter.php',
        'RevisionDeleteUser' => 'includes/revisiondelete/RevisionDeleteUser.php',
 
@@ -952,7 +952,6 @@ $wgAutoloadLocalClasses = array(
        'HTMLBlockedUsersItemSelect' => 'includes/specials/SpecialBlockList.php',
        'ImageListPager' => 'includes/specials/SpecialListfiles.php',
        'ImportReporter' => 'includes/specials/SpecialImport.php',
-       'IPBlockForm' => 'includes/specials/SpecialBlock.php',
        'LinkSearchPage' => 'includes/specials/SpecialLinkSearch.php',
        'ListredirectsPage' => 'includes/specials/SpecialListredirects.php',
        'ListDuplicatedFilesPage' => 'includes/specials/SpecialListDuplicatedFiles.php',
@@ -1063,7 +1062,6 @@ $wgAutoloadLocalClasses = array(
        'WantedFilesPage' => 'includes/specials/SpecialWantedfiles.php',
        'WantedPagesPage' => 'includes/specials/SpecialWantedpages.php',
        'WantedTemplatesPage' => 'includes/specials/SpecialWantedtemplates.php',
-       'WatchlistEditor' => 'includes/specials/SpecialEditWatchlist.php',
        'WithoutInterwikiPage' => 'includes/specials/SpecialWithoutinterwiki.php',
 
        # includes/templates
index 071a278..4c85e52 100644 (file)
@@ -208,10 +208,15 @@ class IcuCollation extends Collation {
                // Verified by native speakers
                'be' => array( "Ё" ),
                'be-tarask' => array( "Ё" ),
+               'cy' => array( "Ch", "Dd", "Ff", "Ng", "Ll", "Ph", "Rh", "Th" ),
                'en' => array(),
+               'fa' => array( "آ", "ء", "ه" ),
                'fi' => array( "Å", "Ä", "Ö" ),
+               'fr' => array(),
                'hu' => array( "Cs", "Dz", "Dzs", "Gy", "Ly", "Ny", "Ö", "Sz", "Ty", "Ü", "Zs" ),
+               'is' => array( "Á", "Ð", "É", "Í", "Ó", "Ú", "Ý", "Þ", "Æ", "Ö", "Å" ),
                'it' => array(),
+               'lv' => array( "Č", "Ģ", "Ķ", "Ļ", "Ņ", "Š", "Ž" ),
                'pl' => array( "Ą", "Ć", "Ę", "Ł", "Ń", "Ó", "Ś", "Ź", "Ż" ),
                'pt' => array(),
                'ru' => array(),
@@ -229,7 +234,6 @@ class IcuCollation extends Collation {
                'ca' => array(),
                'co' => array(),
                'cs' => array( "Č", "Ch", "Ř", "Š", "Ž" ),
-               'cy' => array( "Ch", "Dd", "Ff", "Ng", "Ll", "Ph", "Rh", "Th" ),
                'da' => array( "Æ", "Ø", "Å" ),
                'de' => array(),
                'dsb' => array( "Č", "Ć", "Dź", "Ě", "Ch", "Ł", "Ń", "Ŕ", "Š", "Ś", "Ž", "Ź" ),
@@ -238,9 +242,7 @@ class IcuCollation extends Collation {
                'es' => array( "Ñ" ),
                'et' => array( "Š", "Ž", "Õ", "Ä", "Ö", "Ü" ),
                'eu' => array( "Ñ" ),
-               'fa' => array( "آ", "ء", "ه" ),
                'fo' => array( "Á", "Ð", "Í", "Ó", "Ú", "Ý", "Æ", "Ø", "Å" ),
-               'fr' => array(),
                'fur' => array( "À", "Á", "Â", "È", "Ì", "Ò", "Ù" ),
                'fy' => array(),
                'ga' => array(),
@@ -248,7 +250,6 @@ class IcuCollation extends Collation {
                'gl' => array( "Ch", "Ll", "Ñ" ),
                'hr' => array( "Č", "Ć", "Dž", "Đ", "Lj", "Nj", "Š", "Ž" ),
                'hsb' => array( "Č", "Dź", "Ě", "Ch", "Ł", "Ń", "Ř", "Š", "Ć", "Ž" ),
-               'is' => array( "Á", "Ð", "É", "Í", "Ó", "Ú", "Ý", "Þ", "Æ", "Ö", "Å" ),
                'kk' => array( "Ү", "І" ),
                'kl' => array( "Æ", "Ø", "Å" ),
                'ku' => array( "Ç", "Ê", "Î", "Ş", "Û" ),
@@ -256,7 +257,6 @@ class IcuCollation extends Collation {
                'la' => array(),
                'lb' => array(),
                'lt' => array( "Č", "Š", "Ž" ),
-               'lv' => array( "Č", "Ģ", "Ķ", "Ļ", "Ņ", "Š", "Ž" ),
                'mk' => array(),
                'mo' => array( "Ă", "Â", "Î", "Ş", "Ţ" ),
                'mt' => array( "Ċ", "Ġ", "Għ", "Ħ", "Ż" ),
index 0ca35f0..cf94bae 100644 (file)
@@ -104,6 +104,13 @@ $wgServer = WebRequest::detectServer();
  */
 $wgCanonicalServer = false;
 
+/**
+ * Server name. This is automatically computed by parsing the bare
+ * hostname out of $wgCanonicalServer. It should not be customized.
+ * @since 1.24
+ */
+$wgServerName = false;
+
 /************************************************************************//**
  * @name   Script path settings
  * @{
@@ -400,8 +407,6 @@ $wgImgAuthUrlPathMap = array();
  *                          url        : base URL to the root of the zone
  *                          urlsByExt  : map of file extension types to base URLs
  *                                       (useful for using a different cache for videos)
- *                          handlerUrl : base script-handled URL to the root of the zone
- *                                       (see FileRepo::getZoneHandlerUrl() function)
  *                      Zones default to using "<repo name>-<zone name>" as the container name
  *                      and default to using the container root as the zone's root directory.
  *                      Nesting of zone locations within other zones should be avoided.
@@ -1306,21 +1311,22 @@ $wgDjvuOutputExtension = 'jpg';
  * @{
  */
 
-$serverName = substr( $wgServer, strrpos( $wgServer, '/' ) + 1 );
 
 /**
  * Site admin email address.
+ *
+ * Defaults to "wikiadmin@{$wgServerName}".
  */
-$wgEmergencyContact = 'wikiadmin@' . $serverName;
+$wgEmergencyContact = false;
 
 /**
  * Password reminder email address.
  *
  * The address we should use as sender when a user is requesting his password.
+ *
+ * Defaults to "apache@{$wgServerName}".
  */
-$wgPasswordSender = 'apache@' . $serverName;
-
-unset( $serverName ); # Don't leak local variables to global scope
+$wgPasswordSender = false;
 
 /**
  * Password reminder name
@@ -2887,11 +2893,6 @@ $wgShowIPinHeader = true;
  */
 $wgSiteNotice = '';
 
-/**
- * A subtitle to add to the tagline, for skins that have it/
- */
-$wgExtraSubtitle = '';
-
 /**
  * If this is set, a "donate" link will appear in the sidebar. Set it to a URL.
  */
@@ -3607,6 +3608,9 @@ $wgNamespacesWithSubpages = array(
  * Tracking categories allow pages with certain characteristics to be tracked.
  * It works by adding any such page to a category automatically.
  *
+ * A message with the suffix '-desc' should be added as a description message
+ * to have extra information on Special:TrackingCategories.
+ *
  * @since 1.23
  */
 $wgTrackingCategories = array(
@@ -4254,6 +4258,7 @@ $wgGroupPermissions['*']['editmyoptions'] = true;
 $wgGroupPermissions['user']['move'] = true;
 $wgGroupPermissions['user']['move-subpages'] = true;
 $wgGroupPermissions['user']['move-rootuserpages'] = true; // can move root userpages
+$wgGroupPermissions['user']['move-categorypages'] = true;
 $wgGroupPermissions['user']['movefile'] = true;
 $wgGroupPermissions['user']['read'] = true;
 $wgGroupPermissions['user']['edit'] = true;
@@ -4301,6 +4306,7 @@ $wgGroupPermissions['sysop']['importupload'] = true;
 $wgGroupPermissions['sysop']['move'] = true;
 $wgGroupPermissions['sysop']['move-subpages'] = true;
 $wgGroupPermissions['sysop']['move-rootuserpages'] = true;
+$wgGroupPermissions['sysop']['move-categorypages'] = true;
 $wgGroupPermissions['sysop']['patrol'] = true;
 $wgGroupPermissions['sysop']['autopatrol'] = true;
 $wgGroupPermissions['sysop']['protect'] = true;
@@ -4820,7 +4826,7 @@ $wgProxyKey = false;
  */
 
 /**
- * Default cookie expiration time. Setting to 0 makes all cookies session-only.
+ * Default cookie lifetime, in seconds. Setting to 0 makes all cookies session-only.
  */
 $wgCookieExpiration = 180 * 86400;
 
index 44aaeb4..642c49e 100644 (file)
@@ -149,7 +149,7 @@ class FileDeleteForm {
 
                if ( $oldimage ) {
                        $page = null;
-                       $status = $file->deleteOld( $oldimage, $reason, $suppress );
+                       $status = $file->deleteOld( $oldimage, $reason, $suppress, $user );
                        if ( $status->ok ) {
                                // Need to do a log item
                                $logComment = wfMessage( 'deletedrevision', $oldimage )->inContentLanguage()->text();
@@ -180,7 +180,7 @@ class FileDeleteForm {
                                // doDeleteArticleReal() returns a non-fatal error status if the page
                                // or revision is missing, so check for isOK() rather than isGood()
                                if ( $deleteStatus->isOK() ) {
-                                       $status = $file->delete( $reason, $suppress );
+                                       $status = $file->delete( $reason, $suppress, $user );
                                        if ( $status->isOK() ) {
                                                $dbw->commit( __METHOD__ );
                                        } else {
index 6b092d9..304c1bc 100644 (file)
@@ -35,33 +35,91 @@ class GitInfo {
         */
        protected $basedir;
 
+       /**
+        * Path to JSON cache file for pre-computed git information.
+        */
+       protected $cacheFile;
+
+       /**
+        * Cached git information.
+        */
+       protected $cache = array();
+
        /**
         * Map of repo URLs to viewer URLs. Access via static method getViewers().
         */
        private static $viewers = false;
 
        /**
-        * @param string $dir The root directory of the repo where the .git dir can be found
+        * @param string $repoDir The root directory of the repo where .git can be found
+        * @param bool $usePrecomputed Use precomputed information if available
+        * @see precomputeValues
+        */
+       public function __construct( $repoDir, $usePrecomputed = true ) {
+               $this->cacheFile = self::getCacheFilePath( $repoDir );
+               if ( $usePrecomputed &&
+                       $this->cacheFile !== null &&
+                       is_readable( $this->cacheFile )
+               ) {
+                       $this->cache = FormatJson::decode(
+                               file_get_contents( $this->cacheFile ),
+                               true
+                       );
+               }
+
+               if ( !$this->cacheIsComplete() ) {
+                       $this->basedir = $repoDir . DIRECTORY_SEPARATOR . '.git';
+                       if ( is_readable( $this->basedir ) && !is_dir( $this->basedir ) ) {
+                               $GITfile = file_get_contents( $this->basedir );
+                               if ( strlen( $GITfile ) > 8 &&
+                                       substr( $GITfile, 0, 8 ) === 'gitdir: '
+                               ) {
+                                       $path = rtrim( substr( $GITfile, 8 ), "\r\n" );
+                                       if ( $path[0] === '/' || substr( $path, 1, 1 ) === ':' ) {
+                                               // Path from GITfile is absolute
+                                               $this->basedir = $path;
+                                       } else {
+                                               $this->basedir = $repoDir . DIRECTORY_SEPARATOR . $path;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Compute the path to the cache file for a given directory.
+        *
+        * @param string $repoDir The root directory of the repo where .git can be found
+        * @return string Path to GitInfo cache file in $wgCacheDirectory or null if
+        * $wgCacheDirectory is false (cache disabled).
         */
-       public function __construct( $dir ) {
-               $this->basedir = $dir . DIRECTORY_SEPARATOR . '.git';
-               if ( is_readable( $this->basedir ) && !is_dir( $this->basedir ) ) {
-                       $GITfile = file_get_contents( $this->basedir );
-                       if ( strlen( $GITfile ) > 8 && substr( $GITfile, 0, 8 ) === 'gitdir: ' ) {
-                               $path = rtrim( substr( $GITfile, 8 ), "\r\n" );
-                               $isAbsolute = $path[0] === '/' || substr( $path, 1, 1 ) === ':';
-                               $this->basedir = $isAbsolute ? $path : $dir . DIRECTORY_SEPARATOR . $path;
+       protected static function getCacheFilePath( $repoDir ) {
+               global $IP, $wgCacheDirectory;
+               if ( $wgCacheDirectory ) {
+                       // Transform path to git repo to something we can safely embed in a filename
+                       $repoName = $repoDir;
+                       if ( strpos( $repoName, $IP ) === 0 ) {
+                               // Strip $IP from path
+                               $repoName = substr( $repoName, strlen( $IP ) );
                        }
+                       $repoName = strtr( $repoName, DIRECTORY_SEPARATOR, '-' );
+                       $fileName = 'info' . $repoName . '.json';
+                       return implode(
+                               DIRECTORY_SEPARATOR,
+                               array( $wgCacheDirectory, 'gitinfo', $fileName )
+                       );
                }
+               return null;
        }
 
        /**
-        * Return a singleton for the repo at $IP
+        * Get the singleton for the repo at $IP
+        *
         * @return GitInfo
         */
        public static function repo() {
-               global $IP;
                if ( is_null( self::$repo ) ) {
+                       global $IP;
                        self::$repo = new self( $IP );
                }
                return self::$repo;
@@ -78,50 +136,56 @@ class GitInfo {
        }
 
        /**
-        * Return the HEAD of the repo (without any opening "ref: ")
-        * @return string The HEAD
+        * Get the HEAD of the repo (without any opening "ref: ")
+        *
+        * @return string|bool The HEAD (git reference or SHA1) or false
         */
        public function getHead() {
-               $headFile = "{$this->basedir}/HEAD";
+               if ( !isset( $this->cache['head'] ) ) {
+                       $headFile = "{$this->basedir}/HEAD";
+                       $head = false;
 
-               if ( !is_readable( $headFile ) ) {
-                       return false;
-               }
+                       if ( is_readable( $headFile ) ) {
+                               $head = file_get_contents( $headFile );
 
-               $head = file_get_contents( $headFile );
-
-               if ( preg_match( "/ref: (.*)/", $head, $m ) ) {
-                       return rtrim( $m[1] );
-               } else {
-                       return rtrim( $head );
+                               if ( preg_match( "/ref: (.*)/", $head, $m ) ) {
+                                       $head = rtrim( $m[1] );
+                               } else {
+                                       $head = rtrim( $head );
+                               }
+                       }
+                       $this->cache['head'] = $head;
                }
+               return $this->cache['head'];
        }
 
        /**
-        * Return the SHA1 for the current HEAD of the repo
-        * @return string A SHA1 or false
+        * Get the SHA1 for the current HEAD of the repo
+        *
+        * @return string|bool A SHA1 or false
         */
        public function getHeadSHA1() {
-               $head = $this->getHead();
-
-               // If detached HEAD may be a SHA1
-               if ( self::isSHA1( $head ) ) {
-                       return $head;
-               }
-
-               // If not a SHA1 it may be a ref:
-               $refFile = "{$this->basedir}/{$head}";
-               if ( !is_readable( $refFile ) ) {
-                       return false;
+               if ( !isset( $this->cache['headSHA1'] ) ) {
+                       $head = $this->getHead();
+                       $sha1 = false;
+
+                       // If detached HEAD may be a SHA1
+                       if ( self::isSHA1( $head ) ) {
+                               $sha1 = $head;
+                       } else {
+                               // If not a SHA1 it may be a ref:
+                               $refFile = "{$this->basedir}/{$head}";
+                               if ( is_readable( $refFile ) ) {
+                                       $sha1 = rtrim( file_get_contents( $refFile ) );
+                               }
+                       }
+                       $this->cache['headSHA1'] = $sha1;
                }
-
-               $sha1 = rtrim( file_get_contents( $refFile ) );
-
-               return $sha1;
+               return $this->cache['headSHA1'];
        }
 
        /**
-        * Return the commit date of HEAD entry of the git code repository
+        * Get the commit date of HEAD entry of the git code repository
         *
         * @since 1.22
         * @return int|bool Commit date (UNIX timestamp) or false
@@ -129,67 +193,54 @@ class GitInfo {
        public function getHeadCommitDate() {
                global $wgGitBin;
 
-               if ( !is_file( $wgGitBin ) || !is_executable( $wgGitBin ) ) {
-                       return false;
-               }
-
-               $environment = array( "GIT_DIR" => $this->basedir );
-               $cmd = wfEscapeShellArg( $wgGitBin ) . " show -s --format=format:%ct HEAD";
-               $retc = false;
-               $commitDate = wfShellExec( $cmd, $retc, $environment );
-
-               if ( $retc !== 0 ) {
-                       return false;
-               } else {
-                       return (int)$commitDate;
+               if ( !isset( $this->cache['headCommitDate'] ) ) {
+                       $date = false;
+                       if ( is_file( $wgGitBin ) &&
+                               is_executable( $wgGitBin ) &&
+                               $this->getHead() !== false
+                       ) {
+                               $environment = array( "GIT_DIR" => $this->basedir );
+                               $cmd = wfEscapeShellArg( $wgGitBin ) .
+                                       " show -s --format=format:%ct HEAD";
+                               $retc = false;
+                               $commitDate = wfShellExec( $cmd, $retc, $environment );
+                               if ( $retc === 0 ) {
+                                       $date = (int)$commitDate;
+                               }
+                       }
+                       $this->cache['headCommitDate'] = $date;
                }
+               return $this->cache['headCommitDate'];
        }
 
        /**
-        * Return the name of the current branch, or HEAD if not found
-        * @return string The branch name, HEAD, or false
+        * Get the name of the current branch, or HEAD if not found
+        *
+        * @return string|bool The branch name, HEAD, or false
         */
        public function getCurrentBranch() {
-               $head = $this->getHead();
-               if ( $head && preg_match( "#^refs/heads/(.*)$#", $head, $m ) ) {
-                       return $m[1];
-               } else {
-                       return $head;
+               if ( !isset( $this->cache['branch'] ) ) {
+                       $branch = $this->getHead();
+                       if ( $branch &&
+                               preg_match( "#^refs/heads/(.*)$#", $branch, $m )
+                       ) {
+                               $branch = $m[1];
+                       }
+                       $this->cache['branch'] = $branch;
                }
+               return $this->cache['branch'];
        }
 
        /**
         * Get an URL to a web viewer link to the HEAD revision.
         *
-        * @return string|bool string if a URL is available or false otherwise.
+        * @return string|bool String if a URL is available or false otherwise
         */
        public function getHeadViewUrl() {
-               $config = "{$this->basedir}/config";
-               if ( !is_readable( $config ) ) {
-                       return false;
-               }
-
-               wfSuppressWarnings();
-               $configArray = parse_ini_file( $config, true );
-               wfRestoreWarnings();
-               $remote = false;
-
-               // Use the "origin" remote repo if available or any other repo if not.
-               if ( isset( $configArray['remote origin'] ) ) {
-                       $remote = $configArray['remote origin'];
-               } elseif ( is_array( $configArray ) ) {
-                       foreach ( $configArray as $sectionName => $sectionConf ) {
-                               if ( substr( $sectionName, 0, 6 ) == 'remote' ) {
-                                       $remote = $sectionConf;
-                               }
-                       }
-               }
-
-               if ( $remote === false || !isset( $remote['url'] ) ) {
+               $url = $this->getRemoteUrl();
+               if ( $url === false ) {
                        return false;
                }
-
-               $url = $remote['url'];
                if ( substr( $url, -4 ) !== '.git' ) {
                        $url .= '.git';
                }
@@ -209,6 +260,91 @@ class GitInfo {
                return false;
        }
 
+       /**
+        * Get the URL of the remote origin.
+        * @return string|bool string if a URL is available or false otherwise.
+        */
+       protected function getRemoteUrl() {
+               if ( !isset( $this->cache['remoteURL'] ) ) {
+                       $config = "{$this->basedir}/config";
+                       $url = false;
+                       if ( is_readable( $config ) ) {
+                               wfSuppressWarnings();
+                               $configArray = parse_ini_file( $config, true );
+                               wfRestoreWarnings();
+                               $remote = false;
+
+                               // Use the "origin" remote repo if available or any other repo if not.
+                               if ( isset( $configArray['remote origin'] ) ) {
+                                       $remote = $configArray['remote origin'];
+                               } elseif ( is_array( $configArray ) ) {
+                                       foreach ( $configArray as $sectionName => $sectionConf ) {
+                                               if ( substr( $sectionName, 0, 6 ) == 'remote' ) {
+                                                       $remote = $sectionConf;
+                                               }
+                                       }
+                               }
+
+                               if ( $remote !== false && isset( $remote['url'] ) ) {
+                                       $url = $remote['url'];
+                               }
+                       }
+                       $this->cache['remoteURL'] = $url;
+               }
+               return $this->cache['remoteURL'];
+       }
+
+       /**
+        * Check to see if the current cache is fully populated.
+        *
+        * Note: This method is public only to make unit testing easier. There's
+        * really no strong reason that anything other than a test should want to
+        * call this method.
+        *
+        * @return bool True if all expected cache keys exist, false otherwise
+        */
+       public function cacheIsComplete() {
+               return isset( $this->cache['head'] ) &&
+                       isset( $this->cache['headSHA1'] ) &&
+                       isset( $this->cache['headCommitDate'] ) &&
+                       isset( $this->cache['branch'] ) &&
+                       isset( $this->cache['remoteURL'] );
+       }
+
+       /**
+        * Precompute and cache git information.
+        *
+        * Creates a JSON file in the cache directory associated with this
+        * GitInfo instance. This cache file will be used by subsequent GitInfo objects referencing
+        * the same directory to avoid needing to examine the .git directory again.
+        *
+        * @since 1.24
+        */
+       public function precomputeValues() {
+               if ( $this->cacheFile !== null ) {
+                       // Try to completely populate the cache
+                       $this->getHead();
+                       $this->getHeadSHA1();
+                       $this->getHeadCommitDate();
+                       $this->getCurrentBranch();
+                       $this->getRemoteUrl();
+
+                       if ( !$this->cacheIsComplete() ) {
+                               wfDebugLog( "Failed to compute GitInfo for \"{$this->basedir}\"" );
+                               return;
+                       }
+
+                       $cacheDir = dirname( $this->cacheFile );
+                       if ( !file_exists( $cacheDir ) &&
+                               !wfMkdirParents( $cacheDir, null, __METHOD__ )
+                       ) {
+                               throw new MWException( "Unable to create GitInfo cache \"{$cacheDir}\"" );
+                       }
+
+                       file_put_contents( $this->cacheFile, FormatJson::encode( $this->cache ) );
+               }
+       }
+
        /**
         * @see self::getHeadSHA1
         * @return string
index 6433d19..a912fde 100644 (file)
@@ -530,7 +530,7 @@ class Linker {
         *
         * @param array $handlerParams Associative array of media handler parameters, to be passed
         *       to transform(). Typical keys are "width" and "page".
-        * @param string $time Timestamp of the file, set as false for current
+        * @param string|bool $time Timestamp of the file, set as false for current
         * @param string $query Query params for desc url
         * @param int|null $widthOption Used by the parser to remember the user preference thumbnailsize
         * @since 1.20
index 56786f1..4781667 100644 (file)
@@ -270,7 +270,7 @@ class MagicWord {
         * Allow external reads of TTL array
         *
         * @param int $id
-        * @return array
+        * @return int
         */
        static function getCacheTTL( $id ) {
                if ( array_key_exists( $id, self::$mCacheTTLs ) ) {
index 45c2da9..4edddbc 100644 (file)
@@ -67,7 +67,7 @@ class MWNamespace {
        public static function isMovable( $index ) {
                global $wgAllowImageMoving;
 
-               $result = !( $index < NS_MAIN || ( $index == NS_FILE && !$wgAllowImageMoving ) || $index == NS_CATEGORY );
+               $result = !( $index < NS_MAIN || ( $index == NS_FILE && !$wgAllowImageMoving ) );
 
                /**
                 * @since 1.20
index 5a83d38..b0423fb 100644 (file)
@@ -134,8 +134,8 @@ class Revision implements IDBAccessObject {
         *      Revision::READ_LATEST  : Select the data from the master (since 1.20)
         *      Revision::READ_LOCKING : Select & lock the data from the master
         *
-        * @param int $revId
-        * @param int $pageId (optional)
+        * @param int $pageId
+        * @param int $revId (optional)
         * @param int $flags Bitfield (optional)
         * @return Revision|null
         */
index 506ac4c..7c39617 100644 (file)
@@ -326,7 +326,7 @@ class RevisionItem extends RevisionItemBase {
 
        /**
         * Get the HTML link to the revision text.
-        * Overridden by RevDel_ArchiveItem.
+        * Overridden by RevDelArchiveItem.
         * @return string
         */
        protected function getRevisionLink() {
@@ -347,7 +347,7 @@ class RevisionItem extends RevisionItemBase {
 
        /**
         * Get the HTML link to the diff.
-        * Overridden by RevDel_ArchiveItem
+        * Overridden by RevDelArchiveItem
         * @return string
         */
        protected function getDiffLink() {
index b155f90..18d1e33 100644 (file)
@@ -43,6 +43,7 @@ if ( !isset( $wgVersion ) ) {
 }
 
 // Set various default paths sensibly...
+
 if ( $wgScript === false ) {
        $wgScript = "$wgScriptPath/index$wgScriptExtension";
 }
@@ -420,6 +421,29 @@ require_once "$IP/includes/normal/UtfNormalDefines.php";
 wfProfileOut( $fname . '-includes' );
 
 wfProfileIn( $fname . '-defaults2' );
+
+if ( $wgCanonicalServer === false ) {
+       $wgCanonicalServer = wfExpandUrl( $wgServer, PROTO_HTTP );
+}
+
+// Set server name
+$serverParts = wfParseUrl( $wgCanonicalServer );
+if ( $wgServerName !== false ) {
+       wfWarn( '$wgServerName should be derived from $wgCanonicalServer, not customized. Overwriting $wgServerName.' );
+}
+$wgServerName = $serverParts['host'];
+unset( $serverParts );
+
+// Set defaults for configuration variables
+// that are derived from the server name by default
+if ( $wgEmergencyContact === false ) {
+       $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
+}
+
+if ( $wgPasswordSender === false ) {
+       $wgPasswordSender = 'apache@' . $wgServerName;
+}
+
 if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
        $wgSecureLogin = false;
        wfWarn( 'Secure login was enabled on a server that only supports HTTP or HTTPS. Disabling secure login.' );
@@ -433,10 +457,6 @@ if ( $wgTmpDirectory === false ) {
        wfProfileOut( $fname . '-tempDir' );
 }
 
-if ( $wgCanonicalServer === false ) {
-       $wgCanonicalServer = wfExpandUrl( $wgServer, PROTO_HTTP );
-}
-
 // $wgHTCPMulticastRouting got renamed to $wgHTCPRouting in MediaWiki 1.22
 // ensure back compatibility.
 if ( !$wgHTCPRouting && $wgHTCPMulticastRouting ) {
index 8300da7..cfa059e 100644 (file)
@@ -1244,6 +1244,8 @@ abstract class Skin extends ContextSource {
                if ( $wgEnableSidebarCache ) {
                        $cachedsidebar = $wgMemc->get( $key );
                        if ( $cachedsidebar ) {
+                               wfRunHooks( 'SidebarBeforeOutput', array( $this, &$cachedsidebar ) );
+
                                wfProfileOut( __METHOD__ );
                                return $cachedsidebar;
                        }
@@ -1257,6 +1259,8 @@ abstract class Skin extends ContextSource {
                        $wgMemc->set( $key, $bar, $wgSidebarCacheExpiry );
                }
 
+               wfRunHooks( 'SidebarBeforeOutput', array( $this, &$bar ) );
+
                wfProfileOut( __METHOD__ );
                return $bar;
        }
index b186447..24854d8 100644 (file)
@@ -1916,10 +1916,11 @@ abstract class BaseTemplate extends QuickTemplate {
         */
        function makeListItem( $key, $item, $options = array() ) {
                if ( isset( $item['links'] ) ) {
-                       $html = '';
+                       $links = array();
                        foreach ( $item['links'] as $linkKey => $link ) {
-                               $html .= $this->makeLink( $linkKey, $link, $options );
+                               $links[] = $this->makeLink( $linkKey, $link, $options );
                        }
+                       $html = implode( ' ', $links );
                } else {
                        $link = $item;
                        // These keys are used by makeListItem and shouldn't be passed on to the link
index 70d2baa..3933ba0 100644 (file)
@@ -218,8 +218,7 @@ class Title {
                        }
                        return $t;
                } else {
-                       $ret = null;
-                       return $ret;
+                       return null;
                }
        }
 
@@ -1924,6 +1923,11 @@ class Title {
                                $errors[] = array( 'movenotallowedfile' );
                        }
 
+                       // Check if user is allowed to move category pages if it's a category page
+                       if ( $this->mNamespace == NS_CATEGORY && !$user->isAllowed( 'move-categorypages' ) ) {
+                               $errors[] = array( 'cant-move-category-page' );
+                       }
+
                        if ( !$user->isAllowed( 'move' ) ) {
                                // User can't move anything
                                $userCanMove = User::groupHasPermission( 'user', 'move' );
@@ -1943,6 +1947,10 @@ class Title {
                                        && $this->mNamespace == NS_USER && !$this->isSubpage() ) {
                                // Show user page-specific message only if the user can move other pages
                                $errors[] = array( 'cant-move-to-user-page' );
+                       } elseif ( !$user->isAllowed( 'move-categorypages' )
+                                       && $this->mNamespace == NS_CATEGORY ) {
+                               // Show category page-specific message only if the user can move other pages
+                               $errors[] = array( 'cant-move-to-category-page' );
                        }
                } elseif ( !$user->isAllowed( $action ) ) {
                        $errors[] = $this->missingPermissionError( $action, $short );
@@ -3812,9 +3820,14 @@ class Title {
                }
 
                if ( $createRedirect ) {
-                       $contentHandler = ContentHandler::getForTitle( $this );
-                       $redirectContent = $contentHandler->makeRedirectContent( $nt,
-                               wfMessage( 'move-redirect-text' )->inContentLanguage()->plain() );
+                       if ( $this->getNamespace() == NS_CATEGORY && !wfMessage( 'category-move-redirect-override' )->isDisabled() ) {
+                               $redirectContent = new WikitextContent(
+                                       wfMessage( 'category-move-redirect-override' )->params( $nt->getPrefixedText() )->inContentLanguage()->plain() );
+                       } else {
+                               $contentHandler = ContentHandler::getForTitle( $this );
+                               $redirectContent = $contentHandler->makeRedirectContent( $nt,
+                                       wfMessage( 'move-redirect-text' )->inContentLanguage()->plain() );
+                       }
 
                        // NOTE: If this page's content model does not support redirects, $redirectContent will be null.
                } else {
index f5768af..8228f1c 100644 (file)
@@ -143,6 +143,7 @@ class User {
                'minoredit',
                'move',
                'movefile',
+               'move-categorypages',
                'move-rootuserpages',
                'move-subpages',
                'nominornewtalk',
index 1ec2792..2885e6a 100644 (file)
@@ -58,7 +58,7 @@ class MailAddress {
                if ( $this->address ) {
                        if ( $this->name != '' && !wfIsWindows() ) {
                                global $wgEnotifUseRealName;
-                               $name = ( $wgEnotifUseRealName && $this->realName ) ? $this->realName : $this->name;
+                               $name = ( $wgEnotifUseRealName && $this->realName !== '' ) ? $this->realName : $this->name;
                                $quoted = UserMailer::quotedPrintable( $name );
                                if ( strpos( $quoted, '.' ) !== false || strpos( $quoted, ',' ) !== false ) {
                                        $quoted = '"' . $quoted . '"';
@@ -761,7 +761,8 @@ class EmailNotification {
                        $keys['$PAGEEDITOR_EMAIL'] = wfMessage( 'noemailtitle' )->inContentLanguage()->text();
 
                } else {
-                       $keys['$PAGEEDITOR'] = $wgEnotifUseRealName ? $this->editor->getRealName() : $this->editor->getName();
+                       $keys['$PAGEEDITOR'] = $wgEnotifUseRealName && $this->editor->getRealName() !== ''
+                               ? $this->editor->getRealName() : $this->editor->getName();
                        $emailPage = SpecialPage::getSafeTitleFor( 'Emailuser', $this->editor->getName() );
                        $keys['$PAGEEDITOR_EMAIL'] = $emailPage->getCanonicalURL();
                }
@@ -868,7 +869,8 @@ class EmailNotification {
                        array( '$WATCHINGUSERNAME',
                                '$PAGEEDITDATE',
                                '$PAGEEDITTIME' ),
-                       array( $wgEnotifUseRealName ? $watchingUser->getRealName() : $watchingUser->getName(),
+                       array( $wgEnotifUseRealName && $watchingUser->getRealName() !== ''
+                                       ? $watchingUser->getRealName() : $watchingUser->getName(),
                                $wgContLang->userDate( $this->timestamp, $watchingUser ),
                                $wgContLang->userTime( $this->timestamp, $watchingUser ) ),
                        $this->body );
index 6f7121b..afd5a13 100644 (file)
@@ -112,7 +112,7 @@ class ApiFeedContributions extends ApiBase {
                        return new FeedItem(
                                $title->getPrefixedText(),
                                $this->feedItemDesc( $revision ),
-                               $title->getFullURL(),
+                               $title->getFullURL( array( 'diff' => $revision->getId() ) ),
                                $date,
                                $this->feedItemAuthor( $revision ),
                                $comments
index 545b94d..64c3eec 100644 (file)
@@ -34,7 +34,6 @@
 class ApiFeedWatchlist extends ApiBase {
 
        private $watchlistModule = null;
-       private $linkToDiffs = false;
        private $linkToSections = false;
 
        /**
@@ -73,7 +72,7 @@ class ApiFeedWatchlist extends ApiBase {
                                'meta' => 'siteinfo',
                                'siprop' => 'general',
                                'list' => 'watchlist',
-                               'wlprop' => 'title|user|comment|timestamp',
+                               'wlprop' => 'title|user|comment|timestamp|ids',
                                'wldir' => 'older', // reverse order - from newest to oldest
                                'wlend' => $endTime, // stop at this time
                                'wllimit' => min( 50, $wgFeedLimit )
@@ -95,12 +94,6 @@ class ApiFeedWatchlist extends ApiBase {
                                $fauxReqArr['wltype'] = $params['wltype'];
                        }
 
-                       // Support linking to diffs instead of article
-                       if ( $params['linktodiffs'] ) {
-                               $this->linkToDiffs = true;
-                               $fauxReqArr['wlprop'] .= '|ids';
-                       }
-
                        // Support linking directly to sections when possible
                        // (possible only if section name is present in comment)
                        if ( $params['linktosections'] ) {
@@ -173,7 +166,7 @@ class ApiFeedWatchlist extends ApiBase {
        private function createFeedItem( $info ) {
                $titleStr = $info['title'];
                $title = Title::newFromText( $titleStr );
-               if ( $this->linkToDiffs && isset( $info['revid'] ) ) {
+               if ( isset( $info['revid'] ) ) {
                        $titleUrl = $title->getFullURL( array( 'diff' => $info['revid'] ) );
                } else {
                        $titleUrl = $title->getFullURL();
@@ -225,7 +218,6 @@ class ApiFeedWatchlist extends ApiBase {
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => 72,
                        ),
-                       'linktodiffs' => false,
                        'linktosections' => false,
                );
                if ( $flags ) {
@@ -254,7 +246,6 @@ class ApiFeedWatchlist extends ApiBase {
                return array(
                        'feedformat' => 'The format of the feed',
                        'hours' => 'List pages modified within this many hours from now',
-                       'linktodiffs' => 'Link to change differences instead of article pages',
                        'linktosections' => 'Link directly to changed sections if possible',
                        'allrev' => $wldescr['allrev'],
                        'wlowner' => $wldescr['owner'],
@@ -279,7 +270,7 @@ class ApiFeedWatchlist extends ApiBase {
        public function getExamples() {
                return array(
                        'api.php?action=feedwatchlist',
-                       'api.php?action=feedwatchlist&allrev=&linktodiffs=&hours=6'
+                       'api.php?action=feedwatchlist&allrev=&hours=6'
                );
        }
 
index b7796ee..2124dc3 100644 (file)
@@ -180,6 +180,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $git = SpecialVersion::getGitHeadSha1( $GLOBALS['IP'] );
                if ( $git ) {
                        $data['git-hash'] = $git;
+                       $data['git-branch'] =
+                               SpecialVersion::getGitCurrentBranch( $GLOBALS['IP'] );
                } else {
                        $svn = SpecialVersion::getSvnRevision( $GLOBALS['IP'] );
                        if ( $svn ) {
@@ -239,6 +241,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['script'] = $GLOBALS['wgScript'];
                $data['variantarticlepath'] = $GLOBALS['wgVariantArticlePath'];
                $data['server'] = $GLOBALS['wgServer'];
+               $data['servername'] = $GLOBALS['wgServerName'];
                $data['wikiid'] = wfWikiID();
                $data['time'] = wfTimestamp( TS_ISO_8601, time() );
 
@@ -567,7 +570,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                                $ret['vcs-system'] = 'git';
                                                $ret['vcs-version'] = $vcsVersion;
                                                $ret['vcs-url'] = $gitInfo->getHeadViewUrl();
-                                               $ret['vcs-date'] = wfTimestamp( TS_ISO_8601, $gitInfo->getHeadCommitDate() );
+                                               $vcsDate = $gitInfo->getHeadCommitDate();
+                                               if ( $vcsDate !== false ) {
+                                                       $ret['vcs-date'] = wfTimestamp( TS_ISO_8601, $vcsDate );
+                                               }
                                        } else {
                                                $svnInfo = SpecialVersion::getSvnInfo( $extensionPath );
                                                if ( $svnInfo !== false ) {
index 6dfb1b4..953df58 100644 (file)
@@ -47,26 +47,49 @@ class ApiWatch extends ApiBase {
                // by default we use pageset to extract the page to work on.
                // title is still supported for backward compatibility
                if ( !isset( $params['title'] ) ) {
-                       $pageSet->execute();
-                       $res = $pageSet->getInvalidTitlesAndRevisions( array(
-                               'invalidTitles',
-                               'special',
-                               'missingIds',
-                               'missingRevIds',
-                               'interwikiTitles'
-                       ) );
-
-                       foreach ( $pageSet->getMissingTitles() as $title ) {
-                               $r = $this->watchTitle( $title, $user, $params );
-                               $r['missing'] = 1;
-                               $res[] = $r;
+                       if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) {
+                               $this->dieUsage(
+                                       "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'",
+                                       'multisource'
+                               );
                        }
 
-                       foreach ( $pageSet->getGoodTitles() as $title ) {
-                               $r = $this->watchTitle( $title, $user, $params );
-                               $res[] = $r;
+                       if ( $params['entirewatchlist'] ) {
+                               if ( !$params['unwatch'] ) {
+                                       $this->dieUsage(
+                                               "'entirewatchlist' option can only be used with 'unwatch' parameter.",
+                                               'invalidparammix'
+                                       );
+                               } else {
+                                       // We're going to do this in the database as a bulk operation
+                                       // instead of one at a time, so it doesn't time out on largeish lists.
+                                       $dbw = wfGetDB( DB_MASTER );
+                                       $dbw->delete( 'watchlist', array( 'wl_user' => $user->getId() ), __METHOD__ );
+                                       $user->invalidateCache();
+                                       $res = array();
+                               }
+                       } else {
+                               $pageSet->execute();
+                               $res = $pageSet->getInvalidTitlesAndRevisions( array(
+                                       'invalidTitles',
+                                       'special',
+                                       'missingIds',
+                                       'missingRevIds',
+                                       'interwikiTitles'
+                               ) );
+
+                               foreach ( $pageSet->getMissingTitles() as $title ) {
+                                       $r = $this->watchTitle( $title, $user, $params );
+                                       $r['missing'] = 1;
+                                       $res[] = $r;
+                               }
+
+                               foreach ( $pageSet->getGoodTitles() as $title ) {
+                                       $r = $this->watchTitle( $title, $user, $params );
+                                       $res[] = $r;
+                               }
+                               $this->getResult()->setIndexedTagName( $res, 'w' );
                        }
-                       $this->getResult()->setIndexedTagName( $res, 'w' );
                } else {
                        // dont allow use of old title parameter with new pageset parameters.
                        $extraParams = array_keys( array_filter( $pageSet->extractRequestParams(), function ( $x ) {
@@ -175,6 +198,7 @@ class ApiWatch extends ApiBase {
                                ApiBase::PARAM_DEPRECATED => true
                        ),
                        'unwatch' => false,
+                       'entirewatchlist' => false,
                        'uselang' => null,
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
@@ -194,6 +218,7 @@ class ApiWatch extends ApiBase {
                return $psModule->getParamDescription() + array(
                        'title' => 'The page to (un)watch. use titles instead',
                        'unwatch' => 'If set the page will be unwatched rather than watched',
+                       'entirewatchlist' => 'Work on all watched pages without returning a list; can only be used together with \'unwatch\' option.',
                        'uselang' => 'Language to show the message in',
                        'token' => 'A token previously acquired via prop=info',
                );
index 3bbf1bb..1153fd2 100644 (file)
@@ -1171,7 +1171,7 @@ class LCStoreDB implements LCStore {
                $row = $db->selectRow( 'l10n_cache', array( 'lc_value' ),
                        array( 'lc_lang' => $code, 'lc_key' => $key ), __METHOD__ );
                if ( $row ) {
-                       return unserialize( $row->lc_value );
+                       return unserialize( $db->decodeBlob( $row->lc_value ) );
                } else {
                        return null;
                }
@@ -1233,7 +1233,7 @@ class LCStoreDB implements LCStore {
                $this->batch[] = array(
                        'lc_lang' => $this->currentLang,
                        'lc_key' => $key,
-                       'lc_value' => serialize( $value ) );
+                       'lc_value' => $this->dbw->encodeBlob( serialize( $value ) ) );
 
                if ( count( $this->batch ) >= 100 ) {
                        $this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
index 15f0a47..36d2731 100644 (file)
@@ -44,6 +44,8 @@ class RedisConnectionPool {
         */
        /** @var string Connection timeout in seconds */
        protected $connectTimeout;
+       /** @var string Read timeout in seconds */
+       protected $readTimeout;
        /** @var string Plaintext auth password */
        protected $password;
        /** @var bool Whether connections persist */
@@ -76,6 +78,7 @@ class RedisConnectionPool {
                                'See https://www.mediawiki.org/wiki/Redis#Setup' );
                }
                $this->connectTimeout = $options['connectTimeout'];
+               $this->readTimeout = $options['readTimeout'];
                $this->persistent = $options['persistent'];
                $this->password = $options['password'];
                if ( !isset( $options['serializer'] ) || $options['serializer'] === 'php' ) {
@@ -97,6 +100,9 @@ class RedisConnectionPool {
                if ( !isset( $options['connectTimeout'] ) ) {
                        $options['connectTimeout'] = 1;
                }
+               if ( !isset( $options['readTimeout'] ) ) {
+                       $options['readTimeout'] = 31; // handles up to 30 second blocking commands
+               }
                if ( !isset( $options['persistent'] ) ) {
                        $options['persistent'] = false;
                }
@@ -112,6 +118,9 @@ class RedisConnectionPool {
         * $options include:
         *   - connectTimeout : The timeout for new connections, in seconds.
         *                      Optional, default is 1 second.
+        *   - readTimeout    : The timeout for operation reads, in seconds.
+        *                      Commands like BLPOP can fail if told to wait longer than this.
+        *                      Optional, default is 60 seconds.
         *   - persistent     : Set this to true to allow connections to persist across
         *                      multiple web requests. False by default.
         *   - password       : The authentication password, will be sent to Redis in clear text.
@@ -216,6 +225,7 @@ class RedisConnectionPool {
                }
 
                if ( $conn ) {
+                       $conn->setOption( Redis::OPT_READ_TIMEOUT, $this->readTimeout );
                        $conn->setOption( Redis::OPT_SERIALIZER, $this->serializer );
                        $this->connections[$server][] = array( 'conn' => $conn, 'free' => false );
 
index 77d3542..8ba43f6 100644 (file)
@@ -450,4 +450,69 @@ abstract class AbstractContent implements Content {
 
                return $result;
        }
+
+       /**
+        * Returns a ParserOutput object containing information derived from this content.
+        * Most importantly, unless $generateHtml was false, the return value contains an
+        * HTML representation of the content.
+        *
+        * Subclasses that want to control the parser output may override this, but it is
+        * preferred to override fillParserOutput() instead.
+        *
+        * Subclasses that override getParserOutput() itself should take care to call the
+        * ContentGetParserOutput hook.
+        *
+        * @since 1.24
+        *
+        * @param Title $title Context title for parsing
+        * @param int|null $revId Revision ID (for {{REVISIONID}})
+        * @param ParserOptions|null $options Parser options
+        * @param bool $generateHtml Whether or not to generate HTML
+        *
+        * @return ParserOutput Containing information derived from this content.
+        */
+       public function getParserOutput( Title $title, $revId = null,
+               ParserOptions $options = null, $generateHtml = true
+       ) {
+               if ( $options === null ) {
+                       $options = $this->getContentHandler()->makeParserOptions( 'canonical' );
+               }
+
+               $po = new ParserOutput();
+
+               if ( wfRunHooks( 'ContentGetParserOutput',
+                       array( $this, $title, $revId, $options, $generateHtml, &$po ) ) ) {
+
+                       $this->fillParserOutput( $title, $revId, $options, $generateHtml, $po );
+               }
+
+               return $po;
+       }
+
+       /**
+        * Fills the provided ParserOutput with information derived from the content.
+        * Unless $generateHtml was false, this includes an HTML representation of the content.
+        *
+        * This is called by getParserOutput() after consulting the ContentGetParserOutput hook.
+        * Subclasses are expected to override this method (or getParserOutput(), if need be).
+        * Subclasses of TextContent should generally override getHtml() instead.
+        *
+        * This placeholder implementation always throws an exception.
+        *
+        * @since 1.24
+        *
+        * @param Title $title Context title for parsing
+        * @param int|null $revId Revision ID (for {{REVISIONID}})
+        * @param ParserOptions|null $options Parser options
+        * @param bool $generateHtml Whether or not to generate HTML
+        * @param ParserOutput &$output The output object to fill (reference).
+        *
+        * @throws MWException
+        */
+       protected function fillParserOutput( Title $title, $revId,
+               ParserOptions $options, $generateHtml, ParserOutput &$output
+       ) {
+               // Don't make abstract, so subclasses that override getParserOutput() directly don't fail.
+               throw new MWException( 'Subclasses of AbstractContent must override fillParserOutput!' );
+       }
 }
index 210c117..3286c0a 100644 (file)
@@ -86,7 +86,7 @@ interface Content {
        public function getNativeData();
 
        /**
-        * Returns the content's nominal size in bogo-bytes.
+        * Returns the content's nominal size in "bogo-bytes".
         *
         * @return int
         */
index 5fc2c9f..2673084 100644 (file)
@@ -67,7 +67,7 @@ class CssContent extends TextContent {
        protected function getHtml() {
                $html = "";
                $html .= "<pre class=\"mw-code mw-css\" dir=\"ltr\">\n";
-               $html .= $this->getHighlightHtml();
+               $html .= htmlspecialchars( $this->getNativeData() );
                $html .= "\n</pre>\n";
 
                return $html;
index 11a470e..442b705 100644 (file)
@@ -66,7 +66,7 @@ class JavaScriptContent extends TextContent {
        protected function getHtml() {
                $html = "";
                $html .= "<pre class=\"mw-code mw-js\" dir=\"ltr\">\n";
-               $html .= $this->getHighlightHtml();
+               $html .= htmlspecialchars( $this->getNativeData() );
                $html .= "\n</pre>\n";
 
                return $html;
index b13b5fa..b772f17 100644 (file)
@@ -77,9 +77,9 @@ class TextContent extends AbstractContent {
        }
 
        /**
-        * returns the text's size in bytes.
+        * Returns the text's size in bytes.
         *
-        * @return int The size
+        * @return int
         */
        public function getSize() {
                $text = $this->getNativeData();
@@ -170,8 +170,7 @@ class TextContent extends AbstractContent {
         *
         * @since 1.21
         *
-        * @param Content $that The other content object to compare this content
-        * object to.
+        * @param Content $that The other content object to compare this content object to.
         * @param Language $lang The language object to use for text segmentation.
         *    If not given, $wgContentLang is used.
         *
@@ -202,30 +201,30 @@ class TextContent extends AbstractContent {
        }
 
        /**
-        * Returns a generic ParserOutput object, wrapping the HTML returned by
-        * getHtml().
+        * Fills the provided ParserOutput object with information derived from the content.
+        * Unless $generateHtml was false, this includes an HTML representation of the content
+        * provided by getHtml().
+        *
+        * For content models listed in $wgTextModelsToParse, this method will call the MediaWiki
+        * wikitext parser on the text to extract any (wikitext) links, magic words, etc.
+        *
+        * Subclasses may override this to provide custom content processing.
+        * For custom HTML generation alone, it is sufficient to override getHtml().
         *
         * @param Title $title Context title for parsing
         * @param int $revId Revision ID (for {{REVISIONID}})
         * @param ParserOptions $options Parser options
         * @param bool $generateHtml Whether or not to generate HTML
-        *
-        * @return ParserOutput Representing the HTML form of the text.
+        * @param ParserOutput $output The output object to fill (reference).
         */
-       public function getParserOutput( Title $title, $revId = null,
-               ParserOptions $options = null, $generateHtml = true ) {
+       protected function fillParserOutput( Title $title, $revId,
+               ParserOptions $options, $generateHtml, ParserOutput &$output
+       ) {
                global $wgParser, $wgTextModelsToParse;
 
-               if ( !$options ) {
-                       //NOTE: use canonical options per default to produce cacheable output
-                       $options = $this->getContentHandler()->makeParserOptions( 'canonical' );
-               }
-
                if ( in_array( $this->getModel(), $wgTextModelsToParse ) ) {
-                       // parse just to get links etc into the database
-                       $po = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId );
-               } else {
-                       $po = new ParserOutput();
+                       // parse just to get links etc into the database, HTML is replaced below.
+                       $output = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId );
                }
 
                if ( $generateHtml ) {
@@ -234,19 +233,19 @@ class TextContent extends AbstractContent {
                        $html = '';
                }
 
-               $po->setText( $html );
-
-               return $po;
+               $output->setText( $html );
        }
 
        /**
         * Generates an HTML version of the content, for display. Used by
-        * getParserOutput() to construct a ParserOutput object.
+        * fillParserOutput() to provide HTML for the ParserOutput object.
+        *
+        * Subclasses may override this to provide a custom HTML rendering.
+        * If further information is to be derived from the content (such as
+        * categories), the fillParserOutput() method can be overridden instead.
         *
-        * This default implementation just calls getHighlightHtml(). Content
-        * models that have another mapping to HTML (as is the case for markup
-        * languages like wikitext) should override this method to generate the
-        * appropriate HTML.
+        * For backwards-compatibility, this default implementation just calls
+        * getHighlightHtml().
         *
         * @return string An HTML representation of the content
         */
@@ -255,13 +254,22 @@ class TextContent extends AbstractContent {
        }
 
        /**
-        * Generates a syntax-highlighted version of the content, as HTML.
-        * Used by the default implementation of getHtml().
+        * Generates an HTML version of the content, for display.
+        *
+        * This default implementation returns an HTML-escaped version
+        * of the raw text content.
         *
-        * @return string A HTML representation of the content's markup
+        * @note: The functionality of this method should really be implemented
+        * in getHtml(), and subclasses should override getHtml() if needed.
+        * getHighlightHtml() is kept around for backward compatibility with
+        * extensions that already override it.
+        *
+        * @deprecated since 1.24. Use getHtml() instead. In particular, subclasses overriding
+        *     getHighlightHtml() should override getHtml() instead.
+        *
+        * @return string An HTML representation of the content
         */
        protected function getHighlightHtml() {
-               # TODO: make Highlighter interface, use highlighter here, if available
                return htmlspecialchars( $this->getNativeData() );
        }
 
@@ -269,10 +277,12 @@ class TextContent extends AbstractContent {
         * This implementation provides lossless conversion between content models based
         * on TextContent.
         *
-        * @param string $toModel
-        * @param string $lossy
+        * @param string $toModel The desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param string $lossy Flag, set to "lossy" to allow lossy conversion. If lossy conversion is not
+        *     allowed, full round-trip conversion is expected to work without losing information.
         *
-        * @return Content|bool
+        * @return Content|bool A content object with the content model $toModel, or false if that
+        *     conversion is not supported.
         *
         * @see Content::convert()
         */
@@ -286,7 +296,7 @@ class TextContent extends AbstractContent {
                $toHandler = ContentHandler::getForModelID( $toModel );
 
                if ( $toHandler instanceof TextContentHandler ) {
-                       //NOTE: ignore content serialization format - it's just text anyway.
+                       // NOTE: ignore content serialization format - it's just text anyway.
                        $text = $this->getNativeData();
                        $converted = $toHandler->unserializeContent( $text );
                }
index 9b1a3c7..ccea916 100644 (file)
@@ -258,8 +258,6 @@ class WikitextContent extends TextContent {
         *    find out (default: null).
         * @param Title $title Optional title, defaults to the title from the current main request.
         *
-        * @internal param \IContextSource $context context for parsing if necessary
-        *
         * @return bool
         */
        public function isCountable( $hasLinks = null, Title $title = null ) {
@@ -313,42 +311,33 @@ class WikitextContent extends TextContent {
         * Returns a ParserOutput object resulting from parsing the content's text
         * using $wgParser.
         *
-        * @since 1.21
-        *
         * @param Title $title
         * @param int $revId Revision to pass to the parser (default: null)
         * @param ParserOptions $options (default: null)
         * @param bool $generateHtml (default: true)
-        * @internal param \IContextSource|null $context
-        *
-        * @return ParserOutput Representing the HTML form of the text
+        * @param &$output ParserOutput representing the HTML form of the text,
+        *           may be manipulated or replaced.
         */
-       public function getParserOutput( Title $title, $revId = null,
-               ParserOptions $options = null, $generateHtml = true ) {
+       protected function fillParserOutput( Title $title, $revId,
+                       ParserOptions $options, $generateHtml, ParserOutput &$output
+       ) {
                global $wgParser;
 
-               if ( !$options ) {
-                       //NOTE: use canonical options per default to produce cacheable output
-                       $options = $this->getContentHandler()->makeParserOptions( 'canonical' );
-               }
-
                list( $redir, $text ) = $this->getRedirectTargetAndText();
-               $po = $wgParser->parse( $text, $title, $options, true, true, $revId );
+               $output = $wgParser->parse( $text, $title, $options, true, true, $revId );
 
                // Add redirect indicator at the top
                if ( $redir ) {
                        // Make sure to include the redirect link in pagelinks
-                       $po->addLink( $redir );
+                       $output->addLink( $redir );
                        if ( $generateHtml ) {
                                $chain = $this->getRedirectChain();
-                               $po->setText(
+                               $output->setText(
                                        Article::getRedirectHeaderHtml( $title->getPageLanguage(), $chain, false ) .
-                                       $po->getText()
+                                       $output->getText()
                                );
                        }
                }
-
-               return $po;
        }
 
        /**
index 7d4e8cc..7a30ccc 100644 (file)
@@ -295,29 +295,6 @@ class FileRepo {
                }
        }
 
-       /**
-        * Get the thumb zone URL configured to be handled by scripts like thumb_handler.php.
-        * This is probably only useful for internal requests, such as from a fast frontend server
-        * to a slower backend server.
-        *
-        * Large sites may use a different host name for uploads than for wikis. In any case, the
-        * wiki configuration is needed in order to use thumb.php. To avoid extracting the wiki ID
-        * from the URL path, one can configure thumb_handler.php to recognize a special path on the
-        * same host name as the wiki that is used for viewing thumbnails.
-        *
-        * @param string $zone One of: public, deleted, temp, thumb
-        * @return string|bool String or false
-        */
-       public function getZoneHandlerUrl( $zone ) {
-               if ( isset( $this->zones[$zone]['handlerUrl'] )
-                       && in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) )
-               ) {
-                       return $this->zones[$zone]['handlerUrl'];
-               }
-
-               return false;
-       }
-
        /**
         * Get the backend storage path corresponding to a virtual URL.
         * Use this function wisely.
index a9af1e8..5895dda 100644 (file)
@@ -1652,11 +1652,12 @@ abstract class File {
         *
         * @param string $reason
         * @param bool $suppress Hide content from sysops?
+        * @param User|null $user
         * @return bool Boolean on success, false on some kind of failure
         * STUB
         * Overridden by LocalFile
         */
-       function delete( $reason, $suppress = false ) {
+       function delete( $reason, $suppress = false, $user = null ) {
                $this->readOnlyError();
        }
 
index c5ff4a7..561ead7 100644 (file)
@@ -94,10 +94,11 @@ class ForeignDBFile extends LocalFile {
        /**
         * @param string $reason
         * @param bool $suppress
+        * @param User|null $user
         * @return FileRepoStatus
         * @throws MWException
         */
-       function delete( $reason, $suppress = false ) {
+       function delete( $reason, $suppress = false, $user = null ) {
                $this->readOnlyError();
        }
 
index 9b9f0a9..7fb85b9 100644 (file)
@@ -496,6 +496,8 @@ class LocalFile extends File {
 
                $decoded['timestamp'] = wfTimestamp( TS_MW, $decoded['timestamp'] );
 
+               $decoded['metadata'] = $this->repo->getSlaveDB()->decodeBlob( $decoded['metadata'] );
+
                if ( empty( $decoded['major_mime'] ) ) {
                        $decoded['mime'] = 'unknown/unknown';
                } else {
@@ -1597,14 +1599,15 @@ class LocalFile extends File {
         *
         * @param string $reason
         * @param bool $suppress
+        * @param User|null $user
         * @return FileRepoStatus
         */
-       function delete( $reason, $suppress = false ) {
+       function delete( $reason, $suppress = false, $user = null ) {
                if ( $this->getRepo()->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
                }
 
-               $batch = new LocalFileDeleteBatch( $this, $reason, $suppress );
+               $batch = new LocalFileDeleteBatch( $this, $reason, $suppress, $user );
 
                $this->lock(); // begin
                $batch->addCurrent();
@@ -1654,16 +1657,17 @@ class LocalFile extends File {
         * @param string $archiveName
         * @param string $reason
         * @param bool $suppress
+        * @param User|null $user
         * @throws MWException Exception on database or file store failure
         * @return FileRepoStatus
         */
-       function deleteOld( $archiveName, $reason, $suppress = false ) {
+       function deleteOld( $archiveName, $reason, $suppress = false, $user = null ) {
                global $wgUseSquid;
                if ( $this->getRepo()->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
                }
 
-               $batch = new LocalFileDeleteBatch( $this, $reason, $suppress );
+               $batch = new LocalFileDeleteBatch( $this, $reason, $suppress, $user );
 
                $this->lock(); // begin
                $batch->addOld( $archiveName );
@@ -1962,15 +1966,25 @@ class LocalFileDeleteBatch {
        /** @var FileRepoStatus */
        private $status;
 
+       /** @var User */
+       private $user;
+
        /**
         * @param File $file
         * @param string $reason
         * @param bool $suppress
+        * @param User|null $user
         */
-       function __construct( File $file, $reason = '', $suppress = false ) {
+       function __construct( File $file, $reason = '', $suppress = false, $user = null ) {
                $this->file = $file;
                $this->reason = $reason;
                $this->suppress = $suppress;
+               if ( $user ) {
+                       $this->user = $user;
+               } else {
+                       global $wgUser;
+                       $this->user = $wgUser;
+               }
                $this->status = $file->repo->newGood();
        }
 
@@ -2084,11 +2098,9 @@ class LocalFileDeleteBatch {
        }
 
        function doDBInserts() {
-               global $wgUser;
-
                $dbw = $this->file->repo->getMasterDB();
                $encTimestamp = $dbw->addQuotes( $dbw->timestamp() );
-               $encUserId = $dbw->addQuotes( $wgUser->getId() );
+               $encUserId = $dbw->addQuotes( $this->user->getId() );
                $encReason = $dbw->addQuotes( $this->reason );
                $encGroup = $dbw->addQuotes( 'deleted' );
                $ext = $this->file->getExtension();
@@ -2114,7 +2126,7 @@ class LocalFileDeleteBatch {
                        $dbw->insertSelect( 'filearchive', 'image',
                                array(
                                        'fa_storage_group' => $encGroup,
-                                       'fa_storage_key' => "CASE WHEN img_sha1='' THEN '' ELSE $concat END",
+                                       'fa_storage_key' => $dbw->conditional( array( 'img_sha1' => '' ), $dbw->addQuotes( '' ), $concat ),
                                        'fa_deleted_user' => $encUserId,
                                        'fa_deleted_timestamp' => $encTimestamp,
                                        'fa_deleted_reason' => $encReason,
@@ -2146,7 +2158,7 @@ class LocalFileDeleteBatch {
                        $dbw->insertSelect( 'filearchive', 'oldimage',
                                array(
                                        'fa_storage_group' => $encGroup,
-                                       'fa_storage_key' => "CASE WHEN oi_sha1='' THEN '' ELSE $concat END",
+                                       'fa_storage_key' => $dbw->conditional( array( 'oi_sha1' => '' ), $dbw->addQuotes( '' ), $concat ),
                                        'fa_deleted_user' => $encUserId,
                                        'fa_deleted_timestamp' => $encTimestamp,
                                        'fa_deleted_reason' => $encReason,
index 42e8c03..39da597 100644 (file)
  * @ingroup Media
  */
 abstract class ImageGalleryBase extends ContextSource {
-       /** @var array Gallery images */
-       protected $mImages;
+       /**
+        * @var array Gallery images
+        * @deprecated in 1.23 (was declared "var") and will be removed in 1.24
+        */
+       public $mImages;
 
-       /** @var bool Whether to show the filesize in bytes in categories */
-       protected $mShowBytes;
+       /**
+        * @var bool Whether to show the filesize in bytes in categories
+        * @deprecated in 1.23 (was declared "var") and will be removed in 1.24
+        */
+       public $mShowBytes;
 
-       /** @var bool Whether to show the filename. Default: true */
-       protected $mShowFilename;
+       /**
+        * @var bool Whether to show the filename. Default: true
+        * @deprecated in 1.23 (was declared "var") and will be removed in 1.24
+        */
+       public $mShowFilename;
 
-       /** @var string Gallery mode. Default: traditional */
-       protected $mMode;
+       /**
+        * @var string Gallery mode. Default: traditional
+        * @deprecated in 1.23 (was declared "var") and will be removed in 1.24
+        */
+       public $mMode;
 
-       /** @var bool|string Gallery caption. Default: false */
-       protected $mCaption = false;
+       /**
+        * @var bool|string Gallery caption. Default: false
+        * @deprecated in 1.23 (was declared "var") and will be removed in 1.24
+        */
+       public $mCaption = false;
 
        /**
         * @var bool Hide blacklisted images?
+        * @deprecated in 1.23 (was declared "var") and will be removed in 1.24
         */
-       protected $mHideBadImages;
+       public $mHideBadImages;
 
        /**
         * @var Parser Registered parser object for output callbacks
         */
-       protected $mParser;
+       public $mParser;
 
        /**
         * @var Title Contextual title, used when images are being screened against
index 372091a..85717c5 100644 (file)
@@ -200,7 +200,7 @@ abstract class Installer {
                '_NamespaceType' => 'site-name',
                '_AdminName' => '', // will be set later, when the user selects language
                '_AdminPassword' => '',
-               '_AdminPassword2' => '',
+               '_AdminPasswordConfirm' => '',
                '_AdminEmail' => '',
                '_Subscribe' => false,
                '_SkipOptional' => 'continue',
index 49e7b40..f9c4287 100644 (file)
@@ -39,6 +39,8 @@ class MssqlUpdater extends DatabaseUpdater {
                return array(
                        // 1.23
                        array( 'addField', 'mwuser', 'user_password_expires', 'patch-user_password_expires.sql' ),
+
+                       // 1.24
                );
        }
 }
index be1c8a7..3bc43d9 100644 (file)
@@ -250,6 +250,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'logging', 'log_user_text_time', 'patch-logging_user_text_time_index.sql' ),
                        array( 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ),
                        array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
+
+                       // 1.24
                        array( 'addField', 'page_props', 'pp_sortkey', 'patch-pp_sortkey.sql' ),
                );
        }
index 5e10af1..0ef41fa 100644 (file)
@@ -97,6 +97,10 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'logging', 'i06', 'patch-logging_user_text_type_time_index.sql' ),
                        array( 'addIndex', 'logging', 'i07', 'patch-logging_user_text_time_index.sql' ),
                        array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
+                       array( 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ),
+                       array( 'addField', 'recentchanges', 'rc_source', 'patch-rc_source.sql' ),
+
+                       //1.24
 
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
index a6d7cb2..e7aab8a 100644 (file)
@@ -406,9 +406,12 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgField', 'recentchanges', 'rc_source', "TEXT NOT NULL DEFAULT ''" ),
                        array( 'addPgField', 'page', 'page_links_updated', "TIMESTAMPTZ NULL" ),
                        array( 'addPgField', 'mwuser', 'user_password_expires', 'TIMESTAMPTZ NULL' ),
+                       array( 'changeFieldPurgeTable', 'l10n_cache', 'lc_value', 'bytea', "replace(lc_value,'\','\\\\')::bytea" ),
+
+                       // 1.24
                        array( 'addPgField', 'page_props', 'pp_sortkey', 'float NULL' ),
                        array( 'addPgIndex', 'page_props', 'pp_propname_sortkey_page',
-                                       '( pp_propname, pp_sortkey, pp_page ) WHERE ( pp_sortkey NOT NULL )' ),
+                                       '( pp_propname, pp_sortkey, pp_page ) WHERE ( pp_sortkey IS NOT NULL )' ),
                );
        }
 
@@ -675,6 +678,35 @@ END;
                }
        }
 
+       protected function changeFieldPurgeTable( $table, $field, $newtype, $default ) {
+               ## For a cache table, empty it if the field needs to be changed, because the old contents
+               ## may be corrupted.  If the column is already the desired type, refrain from purging.
+               $fi = $this->db->fieldInfo( $table, $field );
+               if ( is_null( $fi ) ) {
+                       $this->output( "...ERROR: expected column $table.$field to exist\n" );
+                       exit( 1 );
+               }
+
+               if ( $fi->type() === $newtype ) {
+                       $this->output( "...column '$table.$field' is already of type '$newtype'\n" );
+               } else {
+                       $this->output( "Purging data from cache table '$table'\n" );
+                       $this->db->query("DELETE from $table" );
+                       $this->output( "Changing column type of '$table.$field' from '{$fi->type()}' to '$newtype'\n" );
+                       $sql = "ALTER TABLE $table ALTER $field TYPE $newtype";
+                       if ( strlen( $default ) ) {
+                               $res = array();
+                               if ( preg_match( '/DEFAULT (.+)/', $default, $res ) ) {
+                                       $sqldef = "ALTER TABLE $table ALTER $field SET DEFAULT $res[1]";
+                                       $this->db->query( $sqldef );
+                                       $default = preg_replace( '/\s*DEFAULT .+/', '', $default );
+                               }
+                               $sql .= " USING $default";
+                       }
+                       $this->db->query( $sql );
+               }
+       }
+
        protected function setDefault( $table, $field, $default ) {
 
                $info = $this->db->fieldInfo( $table, $field );
index 15f8160..874bbea 100644 (file)
@@ -128,6 +128,8 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'logging', 'log_user_text_time', 'patch-logging_user_text_time_index.sql' ),
                        array( 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ),
                        array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
+
+                       // 1.24
                        array( 'addField', 'page_props', 'pp_sortkey', 'patch-pp_sortkey.sql' ),
                );
        }
index 3b3473b..4de7f06 100644 (file)
@@ -790,7 +790,7 @@ class WebInstaller_Name extends WebInstallerPage {
                                'label' => 'config-admin-password',
                        ) ) .
                        $this->parent->getPasswordBox( array(
-                               'var' => '_AdminPassword2',
+                               'var' => '_AdminPasswordConfirm',
                                'label' => 'config-admin-password-confirm'
                        ) ) .
                        $this->parent->getTextBox( array(
@@ -829,7 +829,7 @@ class WebInstaller_Name extends WebInstallerPage {
        public function submit() {
                $retVal = true;
                $this->parent->setVarsFromRequest( array( 'wgSitename', '_NamespaceType',
-                       '_AdminName', '_AdminPassword', '_AdminPassword2', '_AdminEmail',
+                       '_AdminName', '_AdminPassword', '_AdminPasswordConfirm', '_AdminEmail',
                        '_Subscribe', '_SkipOptional', 'wgMetaNamespace' ) );
 
                // Validate site name
@@ -911,7 +911,7 @@ class WebInstaller_Name extends WebInstallerPage {
                        # $user->getPasswordValidity just checks for $wgMinimalPasswordLength.
                        # This message is more specific and helpful.
                        $msg = 'config-admin-password-blank';
-               } elseif ( $pwd !== $this->getVar( '_AdminPassword2' ) ) {
+               } elseif ( $pwd !== $this->getVar( '_AdminPasswordConfirm' ) ) {
                        $msg = 'config-admin-password-mismatch';
                } elseif ( $valid !== true ) {
                        $msg = $valid;
@@ -919,7 +919,7 @@ class WebInstaller_Name extends WebInstallerPage {
                if ( $msg !== false ) {
                        call_user_func_array( array( $this->parent, 'showError' ), (array)$msg );
                        $this->setVar( '_AdminPassword', '' );
-                       $this->setVar( '_AdminPassword2', '' );
+                       $this->setVar( '_AdminPasswordConfirm', '' );
                        $retVal = false;
                }
 
index 44493e7..518f7aa 100644 (file)
        "config-download-localsettings": "Descargar archivo <code>LocalSettings.php</code>",
        "config-help": "Ayuda",
        "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
-       "config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar la [/www.mediawiki.org/wiki/Extension_Matrix central] para ver una lista completa.",
+       "config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar la [//www.mediawiki.org/wiki/Extension_Matrix matriz de extensiones] para ver una lista completa.",
        "mainpagetext": "'''MediaWiki ha sido instalado con éxito.'''",
        "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Ayuda:Guía del usuario de contenidos] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalizar MediaWiki para tu idioma]"
 }
index 26b45fa..ee0773b 100644 (file)
@@ -83,7 +83,7 @@
        "config-suhosin-max-value-length": "Suhosin terpasang dan membatasi parameter GET <code>length</code> sebesar $1 bita. Komponen ResourceLoader MediaWiki akan berjalan dalam batasan ini, tetapi penanganannya akan menurunkan kinerja. Jika memungkinkan, Anda sebaiknya menetapkan nilai <code>suhosin.get.max_value_length</code> menjadi 1024 atau lebih tinggi dalam <code>php.ini</code> dan menyetel <code>$wgResourceLoaderMaxQueryLength</code> dengan nilai yang sama dalam <code>LocalSettings.php</code>.",
        "config-db-type": "Jenis basis data:",
        "config-db-host": "Inang basis data:",
-       "config-db-host-help": "Jika server basis data Anda berada di server yang berbeda, masukkan nama inang atau alamat IP di sini.\n\nJika Anda menggunakan inang web bersama, penyedia inang Anda harus memberikan nama inang yang benar di dokumentasi mereka.\n\nJika Anda menginstal pada server Windows dan menggunakan MySQL, \"localhost\" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba \"127.0.0.1\" untuk alamat IP lokal.",
+       "config-db-host-help": "Jika server basis data Anda berada di server yang berbeda, masukkan nama inang atau alamat IP di sini.\n\nJika Anda menggunakan inang web bersama, penyedia inang Anda harus memberikan nama inang yang benar di dokumentasi mereka.\n\nJika Anda menginstal pada server Windows dan menggunakan MySQL, \"localhost\" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba \"127.0.0.1\" untuk alamat IP lokal.\n\nJika Anda menggunakan PostgreSQL, biarkan field ini kosong untuk menghubungkan lewat soket Unix.",
        "config-db-host-oracle": "TNS basis data:",
        "config-db-host-oracle-help": "Masukkan [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] yang sah; berkas tnsnames.ora harus dapat diakses oleh instalasi ini.<br />Jika Anda menggunakan pustaka klien 10g atau lebih baru, Anda juga dapat menggunakan metode penamaan [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifikasi wiki ini",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-support-info": "MediaWiki mendukung sistem basis data berikut:\n\n$1\n\nJika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.",
-       "config-dbsupport-mysql": "* $1 adalah target utama MediaWiki dan memiliki dukungan terbaik ([http://www.php.net/manual/en/mysql.installation.php cara mengompilasi PHP dengan dukungan MySQL])",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] adalah target utama MediaWiki dan memiliki dukungan terbaik. MediaWiki juga berjalan dengan [{{int:version-db-mariadb-url}} MariaDB] dan [{{int:version-db-percona-url}} Server Percona], yang kompatibel dengan MySQL. ([http://www.php.net/manual/en/mysql.installation.php Cara mengompilasi PHP dengan dukungan MySQL])",
        "config-dbsupport-postgres": "* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL]). Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi.",
        "config-dbsupport-sqlite": "* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
        "config-dbsupport-oracle": "* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "Dalam '''modus biner''', MediaWiki menyimpan teks UTF-8 untuk basis data dalam bidang biner.\nIni lebih efisien daripada modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan ragam penuh karakter Unicode.\n\nDalam '''modus UTF-8''', MySQL akan tahu apa set karakter data dan dapat menampilkan dan mengubahnya sesuai keperluan, tetapi tidak akan mengizinkan Anda menyimpan karakter di atas [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
        "config-mssql-auth": "Jenis otentikasi:",
+       "config-mssql-install-auth": "Pilih jenis otentikasi yang akan digunakan untuk menyambung ke database selama proses instalasi.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
+       "config-mssql-web-auth": "Pilih jenis otentikasi yang akan digunakan oleh server web untuk menyambung ke server basis data, selama operasi biasa dari wiki.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
+       "config-mssql-windowsauth": "Otentikasi Windows",
        "config-site-name": "Nama wiki:",
        "config-site-name-help": "Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.",
        "config-site-name-blank": "Masukkan nama situs.",
        "config-install-step-failed": "gagal",
        "config-install-extensions": "Termasuk ekstensi",
        "config-install-database": "Menyiapkan basis data",
+       "config-install-schema": "Membuat skema",
        "config-install-pg-schema-not-exist": "Skema PostgreSQL tidak tersedia.",
        "config-install-pg-schema-failed": "Pembuatan tabel gagal.\nPastikan bahwa pengguna \"$1\" dapat menulis ke skema \"$2\".",
        "config-install-pg-commit": "Melakukan perubahan",
index d2d8101..eb7cc5b 100644 (file)
@@ -82,7 +82,7 @@
        "config-gd": "내장된 GD 그래픽 라이브러리를 찾았습니다.\n올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.",
        "config-no-scaling": "GD 라이브러리나 ImageMagick를 찾을 수 없습니다.\n그림 섬네일이 비활성화됩니다.",
        "config-no-uri": "'''오류:''' 현재 URI를 확인할 수 없습니다.\n설치가 중단되었습니다.",
-       "config-no-cli-uri": "'''경고''': 기본 값을 사용하여 <code>--scriptpath</code>를 지정하지 않았습니다: <code>$1</code>.",
+       "config-no-cli-uri": "'''경고''': 기본값을 사용하여 <code>--scriptpath</code>를 지정하지 않았습니다: <code>$1</code>.",
        "config-using-server": "\"<nowiki>$1</nowiki>\"(을)를 서버 이름으로 사용합니다.",
        "config-using-uri": "\"<nowiki>$1$2</nowiki>\"(을)를 서버 URL로 사용합니다.",
        "config-uploads-not-safe": "'''경고:''' 올리기에 대한 기본 디렉터리(<code>$1</code>)는 임의의 스크립트 실행에 취약합니다.\n미디어위키는 보안 위협 때문에 모든 올려진 파일을 검사하지만, 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
index da06b01..33817c2 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Anakmalaysia",
                        "Pizza1016",
-                       "SNN95"
+                       "SNN95",
+                       "MaxSem"
                ]
        },
        "config-desc": "Pemasang MediaWiki",
@@ -43,7 +44,7 @@
        "config-help-restart": "Adakah anda ingin untuk membersihkan semua data yang disimpan yang anda telah masukkan dan memulakan semula proses pemasangan?",
        "config-restart": "Ya, mula semula",
        "config-welcome": "=== Pemeriksaan persekitaran ===\nPemeriksaan asas kini boleh dilakukan untuk melihat jika persekitaran ini adalah sesuai untuk pemasangan MediaWiki.\nIngat untuk memasukkan maklumat ini jika anda mahukan sokongan tentang bagaimana untuk menyelesaikan pemasangan.",
-       "config-copyright": "=== Hakcipta dan terma ===\n\n$1\n\nProgram ini merupakan perisian bebas; anda boleh mengedarkannya semula dan/atau mengubahsuainya di bawah syarat-syarat Lesen Awam GNU seperti yang diterbitkan oleh Yayasan Perisian Bebas; sama ada versi 2 Lesen ini atau (mengikut pilihan anda) mana-mana versi selepas ini.\n\nProgram ini diedarkan dengan harapan bahawa ia akan menjadi berguna, tetapi '''tanpa sebarang waranti'''; tanpa jaminan yang tersirat '''kebolehdagangan''' atau '''kesesuaian untuk tujuan tertentu'''.\nLihat Lesen Awam GNU untuk maklumat lanjut.\n\nAnda perlu terima <doclink href=Copying> satu salinan Lesen Awam GNU </ doclink> bersama-sama dengan program ini, jika tidak, menulis surat kepada Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [http://www.gnu.org/copyleft/gpl.html membacanya dalam talian].",
+       "config-copyright": "=== Hakcipta dan Syarat-Syarat ===\n\n$1\n\nProgram ini merupakan perisian bebas; anda boleh mengedarkannya semula dan/atau mengubahsuainya di bawah syarat-syarat Lesen Awam GNU seperti yang diterbitkan oleh Yayasan Perisian Bebas; sama ada versi 2 Lesen ini atau (mengikut pilihan anda) mana-mana versi selepas ini.\n\nProgram ini diedarkan dengan harapan bahawa ia akan menjadi berguna, tetapi '''tanpa sebarang waranti'''; tanpa jaminan yang tersirat '''kebolehdagangan''' atau '''kesesuaian untuk tujuan tertentu'''.\nLihat Lesen Awam GNU untuk maklumat lanjut.\n\nAnda sepatutnya telah menerima <doclink href=Copying> satu salinan Lesen Awam GNU </doclink> bersama-sama dengan program ini, jika tidak, menulis surat kepada Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [http://www.gnu.org/copyleft/gpl.html membacanya dalam talian].",
        "config-sidebar": "* [//www.mediawiki.org Laman utama MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Panduan Pengguna]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Panduan Pentadbir]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soalan lazim]\n----\n* <doclink href=Readme>Baca saya</doclink>\n* <doclink href=ReleaseNotes>Nota keluaran</doclink>\n* <doclink href=Copying>Menyalin</doclink>\n* <doclink href=UpgradeDoc>Menaik taraf</doclink>",
        "config-env-good": "Persekitaran telah diperiksa.\nAnda boleh memasang MediaWiki.",
        "config-env-bad": "Persekitaran telah diperiksa. \nAnda tidak boleh memasang MediaWiki.",
index 4b2bdbe..b875181 100644 (file)
        "config-mysql-charset-help": "W '''trybie binarnym''', MediaWiki zapisuje tekst UTF-8 do bazy danych w polach binarnych.\nJest on bardziej wydajny niż tryb UTF-8 w MySQL i pozwala na używanie znaków pełnego zakresu Unicode.\n\nW '''trybie UTF-8''', MySQL będzie znać zestaw znaków w jakim zakodowano dane, można też przedstawić i przekonwertuj je odpowiednio, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
        "config-mssql-auth": "Typ uwierzytelniania:",
        "config-mssql-install-auth": "Wybierz typ uwierzytelniania, który będzie używany do łączenia się z bazą danych w trakcie procesu instalacji.\nJeśli wybierzesz „{{int:config-mssql-windowsauth}}”, będą wykorzystywane dane konta użytkownika, pod którym działa serwer www.",
+       "config-mssql-web-auth": "Wybierz typ uwierzytelniania, który będzie używany przez serwer www do łączenia się z bazą danych podczas normalnego funkcjonowania wiki.\nJeśli wybierzesz „{{int:config-mssql-windowsauth}}”, użyte zostaną dane konta użytkownika, pod którym działa serwer www.",
        "config-mssql-sqlauth": "Uwierzytelnianie serwera SQL",
        "config-mssql-windowsauth": "Autoryzacja Windows",
        "config-site-name": "Nazwa wiki:",
index beb96c9..2fcf9a5 100644 (file)
        "config-information": "Informații",
        "config-localsettings-key": "Cheie de actualizare:",
        "config-localsettings-badkey": "Cheia furnizată este incorectă.",
+       "config-upgrade-key-missing": "S-a detectat o instalare existentă de MediaWiki.\nPentru a efectua un upgrade în cazul acestei instalări, vă rugăm să introduceți următorul rând în partea de jos a fișierului <code>LocalSettings.php</code>:\n\n$1",
+       "config-localsettings-incomplete": "Fișierul <code>LocalSettings.php</code> deja existent pare a fi incomplet.\nVariabila $1 nu este definită.\nModificați fișierul <code>LocalSettings.php</code> astfel încât această variabilă să fie definită, după care apăsați pe „{{int:Config-continue}}”.",
+       "config-localsettings-connection-error": "A apărut o eroare în timpul conectării la baza de date utilizând setările specificate în <code>LocalSettings.php</code>. Vă rugăm să ajustați aceste setări și încercați din nou.\n\n$1",
        "config-session-error": "Eroare la pornirea sesiunii: $1",
+       "config-session-expired": "Este posibil ca datele sesiunii dumnevoastră să fi expirat.\nSesiunile sunt configurate pentru o durată de viață de $1.\nO puteți mări configurând parametrul <code>session.gc_maxlifetime</code> din fișierul php.ini.\nReporniți procesul de instalare.",
+       "config-no-session": "Datele sesiunii dumneavoastră s-au pierdut!\nVerificați-vă fișierul php.ini și asigurați-vă că <code>session.save_path</code> conține calea către un director corespunzător.",
        "config-your-language": "Limba ta:",
        "config-your-language-help": "Alege o limbă pentru a o utiliza în timpul procesului de instalare.",
        "config-wiki-language": "Limbă wiki:",
index 63c92bb..ed986c0 100644 (file)
@@ -50,7 +50,7 @@
        "config-help-restart": "是否要清除所有已輸入且儲存的資料,並重新開始安裝程序嗎?",
        "config-restart": "是的,重新開始",
        "config-welcome": "=== 環境檢查 ===\n現在會做基本的檢查,檢查環境是否符合 MediaWiki 安裝所需。\n若您要尋求如何完成安裝的協助,請記得提供以下訊息。",
-       "config-copyright": "=== 版權聲明與授權條款 ===\n\n$1\n\n本程式為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但 <strong>不負任何擔保責任</strong>;亦無隱含對 <strong>適售性</strong> 或 <strong>特定用途的適用性</strong> 的情形擔保。詳情請參照GNU 通用公共授權。\n\n您應已隨本程式收到 <doclink href=\"Copying\">GNU 通用公共授權條款</doclink>;如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線上閱讀]。",
+       "config-copyright": "=== 版權聲明與授權條款 ===\n\n$1\n\n本程式為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但 <strong>不負任何擔保責任</strong>;亦無隱含對 <strong>適售性</strong> 或 <strong>特定用途的適用性</strong> 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 <doclink href=\"Copying\">GNU 通用公共授權條款的副本</doclink>;如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線上閱讀]。",
        "config-sidebar": "* [www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 首頁]\n* [www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hant 常見問題集]\n----\n* <doclink href=Readme>讀我說明</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>版權聲明</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
        "config-env-good": "環境檢查已完成。\n您可以安裝 MediaWiki。",
        "config-env-bad": "環境檢查已完成。\n您無法安裝 MediaWiki。",
index 607c4e5..44be178 100644 (file)
@@ -138,6 +138,10 @@ class BitmapHandler extends ImageHandler {
                        'dstUrl' => $dstUrl,
                );
 
+               if ( isset( $params['quality'] ) && $params['quality'] === 'low' ) {
+                       $scalerParams['quality'] = 30;
+               }
+
                # Determine scaler type
                $scaler = self::getScalerType( $dstPath );
 
@@ -147,6 +151,7 @@ class BitmapHandler extends ImageHandler {
                if ( !$image->mustRender() &&
                        $scalerParams['physicalWidth'] == $scalerParams['srcWidth']
                        && $scalerParams['physicalHeight'] == $scalerParams['srcHeight']
+                       && !isset( $scalerParams['quality'] )
                ) {
 
                        # normaliseParams (or the user) wants us to return the unscaled image
@@ -163,12 +168,14 @@ class BitmapHandler extends ImageHandler {
 
                if ( $flags & self::TRANSFORM_LATER ) {
                        wfDebug( __METHOD__ . ": Transforming later per flags.\n" );
-                       $params = array(
+                       $newParams = array(
                                'width' => $scalerParams['clientWidth'],
                                'height' => $scalerParams['clientHeight']
                        );
-
-                       return new ThumbnailImage( $image, $dstUrl, false, $params );
+                       if ( isset( $params['quality'] ) ) {
+                               $newParams['quality'] = $params['quality'];
+                       }
+                       return new ThumbnailImage( $image, $dstUrl, false, $newParams );
                }
 
                # Try to make a target path for the thumbnail
@@ -235,12 +242,14 @@ class BitmapHandler extends ImageHandler {
                } elseif ( $mto ) {
                        return $mto;
                } else {
-                       $params = array(
+                       $newParams = array(
                                'width' => $scalerParams['clientWidth'],
                                'height' => $scalerParams['clientHeight']
                        );
-
-                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
+                       if ( isset( $params['quality'] ) ) {
+                               $newParams['quality'] = $params['quality'];
+                       }
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $newParams );
                }
        }
 
@@ -314,7 +323,8 @@ class BitmapHandler extends ImageHandler {
                $animation_post = array();
                $decoderHint = array();
                if ( $params['mimeType'] == 'image/jpeg' ) {
-                       $quality = array( '-quality', '80' ); // 80%
+                       $qualityVal = isset( $params['quality'] ) ? (string) $params['quality'] : null;
+                       $quality = array( '-quality', $qualityVal ?: '80' ); // 80%
                        # Sharpening, see bug 6193
                        if ( ( $params['physicalWidth'] + $params['physicalHeight'] )
                                / ( $params['srcWidth'] + $params['srcHeight'] )
@@ -419,7 +429,8 @@ class BitmapHandler extends ImageHandler {
                                        list( $radius, $sigma ) = explode( 'x', $wgSharpenParameter );
                                        $im->sharpenImage( $radius, $sigma );
                                }
-                               $im->setCompressionQuality( 80 );
+                               $qualityVal = isset( $params['quality'] ) ? (string) $params['quality'] : null;
+                               $im->setCompressionQuality( $qualityVal ?: 80 );
                        } elseif ( $params['mimeType'] == 'image/png' ) {
                                $im->setCompressionQuality( 95 );
                        } elseif ( $params['mimeType'] == 'image/gif' ) {
@@ -531,13 +542,14 @@ class BitmapHandler extends ImageHandler {
                # input routine for this.
 
                $typemap = array(
-                       'image/gif' => array( 'imagecreatefromgif', 'palette', 'imagegif' ),
-                       'image/jpeg' => array( 'imagecreatefromjpeg', 'truecolor',
+                       'image/gif' => array( 'imagecreatefromgif', 'palette', false, 'imagegif' ),
+                       'image/jpeg' => array( 'imagecreatefromjpeg', 'truecolor', true,
                                array( __CLASS__, 'imageJpegWrapper' ) ),
-                       'image/png' => array( 'imagecreatefrompng', 'bits', 'imagepng' ),
-                       'image/vnd.wap.wbmp' => array( 'imagecreatefromwbmp', 'palette', 'imagewbmp' ),
-                       'image/xbm' => array( 'imagecreatefromxbm', 'palette', 'imagexbm' ),
+                       'image/png' => array( 'imagecreatefrompng', 'bits', false, 'imagepng' ),
+                       'image/vnd.wap.wbmp' => array( 'imagecreatefromwbmp', 'palette', false, 'imagewbmp' ),
+                       'image/xbm' => array( 'imagecreatefromxbm', 'palette', false, 'imagexbm' ),
                );
+
                if ( !isset( $typemap[$params['mimeType']] ) ) {
                        $err = 'Image type not supported';
                        wfDebug( "$err\n" );
@@ -545,7 +557,7 @@ class BitmapHandler extends ImageHandler {
 
                        return $this->getMediaTransformError( $params, $errMsg );
                }
-               list( $loader, $colorStyle, $saveType ) = $typemap[$params['mimeType']];
+               list( $loader, $colorStyle, $useQuality, $saveType ) = $typemap[$params['mimeType']];
 
                if ( !function_exists( $loader ) ) {
                        $err = "Incomplete GD library configuration: missing function $loader";
@@ -597,7 +609,12 @@ class BitmapHandler extends ImageHandler {
 
                imagesavealpha( $dst_image, true );
 
-               call_user_func( $saveType, $dst_image, $params['dstPath'] );
+               $funcParams = array( $dst_image, $params['dstPath'] );
+               if ( $useQuality && isset( $params['quality'] ) ) {
+                       $funcParams[] = $params['quality'];
+               }
+               call_user_func_array( $saveType, $funcParams );
+
                imagedestroy( $dst_image );
                imagedestroy( $src_image );
 
@@ -730,9 +747,10 @@ class BitmapHandler extends ImageHandler {
                return $cache;
        }
 
-       static function imageJpegWrapper( $dst_image, $thumbPath ) {
+       // FIXME: transformImageMagick() & transformImageMagickExt() uses JPEG quality 80, here it's 95?
+       static function imageJpegWrapper( $dst_image, $thumbPath, $quality = 95 ) {
                imageinterlace( $dst_image );
-               imagejpeg( $dst_image, $thumbPath, 95 );
+               imagejpeg( $dst_image, $thumbPath, $quality );
        }
 
        /**
index 9ed626f..a0f7acb 100644 (file)
  * @ingroup Media
  */
 class JpegHandler extends ExifBitmapHandler {
+
+       function normaliseParams( $image, &$params ) {
+               if ( !parent::normaliseParams( $image, $params ) ) {
+                       return false;
+               }
+               if ( isset( $params['quality'] ) && !self::validateQuality( $params['quality'] ) ) {
+                       return false;
+               }
+               return true;
+       }
+
+       function validateParam( $name, $value ) {
+               if ( $name === 'quality' ) {
+                       return self::validateQuality( $value );
+               } else {
+                       return parent::validateParam( $name, $value );
+               }
+       }
+
+       /** Validate and normalize quality value to be between 1 and 100 (inclusive).
+        * @param int $value quality value, will be converted to integer or 0 if invalid
+        * @return bool true if the value is valid
+        */
+       private static function validateQuality( $value ) {
+               return $value === 'low';
+       }
+
+       function makeParamString( $params ) {
+               // Prepend quality as "qValue-". This has to match parseParamString() below
+               $res = parent::makeParamString( $params );
+               if ( $res && isset( $params['quality'] ) ) {
+                       $res = "q{$params['quality']}-$res";
+               }
+               return $res;
+       }
+
+       function parseParamString( $str ) {
+               // $str contains "qlow-200px" or "200px" strings because thumb.php would strip the filename
+               // first - check if the string begins with "qlow-", and if so, treat it as quality.
+               // Pass the first portion, or the whole string if "qlow-" not found, to the parent
+               // The parsing must match the makeParamString() above
+               $res = false;
+               $m = false;
+               if ( preg_match( '/q([^-]+)-(.*)$/', $str, $m ) ) {
+                       $v = $m[1];
+                       if ( self::validateQuality( $v ) ) {
+                               $res = parent::parseParamString( $m[2] );
+                               if ( $res ) {
+                                       $res['quality'] = $v;
+                               }
+                       }
+               } else {
+                       $res = parent::parseParamString( $str );
+               }
+               return $res;
+       }
+
+       function getScriptParams( $params ) {
+               $res = parent::getScriptParams( $params );
+               if ( isset( $params['quality'] ) ) {
+                       $res['quality'] = $params['quality'];
+               }
+               return $res;
+       }
+
        function getMetadata( $image, $filename ) {
                try {
                        $meta = BitmapMetadataHandler::Jpeg( $filename );
index 7423006..227937a 100644 (file)
@@ -211,6 +211,12 @@ class Parser {
         */
        var $mLangLinkLanguages;
 
+       /**
+        * @var boolean Recursive call protection.
+        * This variable should be treated as if it were private.
+        */
+       public $mInParse = false;
+
        /**
         * Constructor
         *
@@ -254,6 +260,7 @@ class Parser {
         * Allow extensions to clean up when the parser is cloned
         */
        function __clone() {
+               $this->mInParse = false;
                wfRunHooks( 'ParserCloned', array( $this ) );
        }
 
@@ -364,6 +371,10 @@ class Parser {
                wfProfileIn( __METHOD__ );
                wfProfileIn( $fname );
 
+               if ( $clearState ) {
+                       $magicScopeVariable = $this->lock();
+               }
+
                $this->startParse( $title, $options, self::OT_HTML, $clearState );
 
                $this->mInputSize = strlen( $text );
@@ -615,6 +626,7 @@ class Parser {
         */
        function preprocess( $text, Title $title = null, ParserOptions $options, $revid = null ) {
                wfProfileIn( __METHOD__ );
+               $magicScopeVariable = $this->lock();
                $this->startParse( $title, $options, self::OT_PREPROCESS, true );
                if ( $revid !== null ) {
                        $this->mRevisionId = $revid;
@@ -662,6 +674,7 @@ class Parser {
                $text = $msg->params( $params )->plain();
 
                # Parser (re)initialisation
+               $magicScopeVariable = $this->lock();
                $this->startParse( $title, $options, self::OT_PLAIN, true );
 
                $flags = PPFrame::NO_ARGS | PPFrame::NO_TEMPLATES;
@@ -2731,7 +2744,7 @@ class Parser {
         * @return string
         */
        function getVariableValue( $index, $frame = false ) {
-               global $wgContLang, $wgSitename, $wgServer;
+               global $wgContLang, $wgSitename, $wgServer, $wgServerName;
                global $wgArticlePath, $wgScriptPath, $wgStylePath;
 
                if ( is_null( $this->mTitle ) ) {
@@ -3032,8 +3045,7 @@ class Parser {
                        case 'server':
                                return $wgServer;
                        case 'servername':
-                               $serverParts = wfParseUrl( $wgServer );
-                               return $serverParts && isset( $serverParts['host'] ) ? $serverParts['host'] : $wgServer;
+                               return $wgServerName;
                        case 'scriptpath':
                                return $wgScriptPath;
                        case 'stylepath':
@@ -4593,6 +4605,9 @@ class Parser {
         * @return string The altered wiki markup
         */
        public function preSaveTransform( $text, Title $title, User $user, ParserOptions $options, $clearState = true ) {
+               if ( $clearState ) {
+                       $magicScopeVariable = $this->lock();
+               }
                $this->startParse( $title, $options, self::OT_WIKI, $clearState );
                $this->setUser( $user );
 
@@ -4767,6 +4782,7 @@ class Parser {
        public function cleanSig( $text, $parsing = false ) {
                if ( !$parsing ) {
                        global $wgTitle;
+                       $magicScopeVariable = $this->lock();
                        $this->startParse( $wgTitle, new ParserOptions, self::OT_PREPROCESS, true );
                }
 
@@ -5627,6 +5643,8 @@ class Parser {
         */
        private function extractSections( $text, $section, $mode, $newText = '' ) {
                global $wgTitle; # not generally used but removes an ugly failure mode
+
+               $magicScopeVariable = $this->lock();
                $this->startParse( $wgTitle, new ParserOptions, self::OT_PLAIN, true );
                $outText = '';
                $frame = $this->getPreprocessor()->newFrame();
@@ -5972,6 +5990,7 @@ class Parser {
         * @return string
         */
        function testSrvus( $text, Title $title, ParserOptions $options, $outputType = self::OT_HTML ) {
+               $magicScopeVariable = $this->lock();
                $this->startParse( $title, $options, $outputType, true );
 
                $text = $this->replaceVariables( $text );
@@ -6149,4 +6168,27 @@ class Parser {
                }
                return $parsedWidthParam;
        }
+
+       /**
+        * Lock the current instance of the parser.
+        *
+        * This is meant to stop someone from calling the parser
+        * recursively and messing up all the strip state.
+        *
+        * @throws MWException If parser is in a parse
+        * @return ScopedCallback The lock will be released once the return value goes out of scope.
+        */
+       protected function lock() {
+               if ( $this->mInParse ) {
+                       throw new MWException( "Parser state cleared while parsing. Did you call Parser::parse recursively?" );
+               }
+               $this->mInParse = true;
+
+               $that = $this;
+               $recursiveCheck = new ScopedCallback( function() use ( $that ) {
+                       $that->mInParse = false;
+               } );
+
+               return $recursiveCheck;
+       }
 }
index a44200f..34953c0 100644 (file)
@@ -123,7 +123,10 @@ abstract class PoolCounter {
        abstract public function release();
 }
 
+// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
 class PoolCounter_Stub extends PoolCounter {
+       // @codingStandardsIgnoreEnd
+
        public function __construct() {
                /* No parameters needed */
        }
index 36101e0..4f6b795 100644 (file)
@@ -406,7 +406,8 @@ LUA;
                                if ( $poolCounter->slot !== null ) {
                                        $poolCounter->release();
                                }
-                       } catch ( Exception $e ) {}
+                       } catch ( Exception $e ) {
+                       }
                }
        }
 }
index c2e5b03..02a8d7e 100644 (file)
@@ -77,15 +77,22 @@ class IRCColourfulRCFeedFormatter implements RCFeedFormatter {
 
                if ( $attribs['rc_type'] == RC_LOG ) {
                        $targetText = $rc->getTitle()->getPrefixedText();
-                       $comment = self::cleanupForIRC( str_replace( "[[$targetText]]", "[[\00302$targetText\00310]]", $actionComment ) );
+                       $comment = self::cleanupForIRC( str_replace(
+                               "[[$targetText]]",
+                               "[[\00302$targetText\00310]]",
+                               $actionComment
+                       ) );
                        $flag = $attribs['rc_log_action'];
                } else {
                        $comment = self::cleanupForIRC( $attribs['rc_comment'] );
                        $flag = '';
-                       if ( !$attribs['rc_patrolled'] && ( $wgUseRCPatrol || $attribs['rc_type'] == RC_NEW && $wgUseNPPatrol ) ) {
+                       if ( !$attribs['rc_patrolled']
+                               && ( $wgUseRCPatrol || $attribs['rc_type'] == RC_NEW && $wgUseNPPatrol )
+                       ) {
                                $flag .= '!';
                        }
-                       $flag .= ( $attribs['rc_type'] == RC_NEW ? "N" : "" ) . ( $attribs['rc_minor'] ? "M" : "" ) . ( $attribs['rc_bot'] ? "B" : "" );
+                       $flag .= ( $attribs['rc_type'] == RC_NEW ? "N" : "" )
+                               . ( $attribs['rc_minor'] ? "M" : "" ) . ( $attribs['rc_bot'] ? "B" : "" );
                }
 
                if ( $feed['add_interwiki_prefix'] === true && $wgLocalInterwikis ) {
index e5077a2..3f17bcd 100644 (file)
@@ -38,7 +38,7 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
         * @see RCFeedFormatter::getLine
         */
        public function getLine( array $feed, RecentChange $rc, $actionComment ) {
-               global $wgCanonicalServer, $wgScriptPath;
+               global $wgCanonicalServer, $wgServerName, $wgScriptPath;
                $attrib = $rc->getAttributes();
 
                $packet = array(
@@ -120,6 +120,8 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
                }
 
                $packet['server_url'] = $wgCanonicalServer;
+               $packet['server_name'] = $wgServerName;
+
                $packet['server_script_path'] = $wgScriptPath ?: '/';
                $packet['wiki'] = wfWikiID();
 
index 994812b..680bd99 100644 (file)
  *    https://www.mediawiki.org/wiki/ResourceLoader
  */
 class ResourceLoader {
-
-       /**
-        * @var int
-        */
+       /** @var int */
        protected static $filterCacheVersion = 7;
-       /**
-        * @var array
-        */
+
+       /** @var array */
        protected static $requiredSourceProperties = array( 'loadScript' );
 
-       /**
-        * @var array Module name/ResourceLoaderModule object pairs
-        */
+       /** @var array Module name/ResourceLoaderModule object pairs */
        protected $modules = array();
 
-       /**
-        * @var array Associative array mapping module name to info associative array
-        */
+       /** @var array Associative array mapping module name to info associative array */
        protected $moduleInfos = array();
 
        /**
@@ -55,14 +47,10 @@ class ResourceLoader {
         */
        protected $testModuleNames = array();
 
-       /**
-        * @var array e.g. array( 'source-id' => array( 'loadScript' => 'http://.../load.php' ) )
-        */
+       /** @var array e.g. array( 'source-id' => array( 'loadScript' => 'http://.../load.php' ) ) */
        protected $sources = array();
 
-       /**
-        * @var bool
-        */
+       /** @var bool */
        protected $hasErrors = false;
 
        /**
@@ -225,7 +213,10 @@ class ResourceLoader {
                wfProfileIn( __METHOD__ );
 
                // Add 'local' source first
-               $this->addSource( 'local', array( 'loadScript' => $wgLoadScript, 'apiScript' => wfScript( 'api' ) ) );
+               $this->addSource(
+                       'local',
+                       array( 'loadScript' => $wgLoadScript, 'apiScript' => wfScript( 'api' ) )
+               );
 
                // Add other sources
                $this->addSource( $wgResourceLoaderSources );
@@ -275,7 +266,8 @@ class ResourceLoader {
                        // Check $name for validity
                        if ( !self::isValidModuleName( $name ) ) {
                                wfProfileOut( __METHOD__ );
-                               throw new MWException( "ResourceLoader module name '$name' is invalid, see ResourceLoader::isValidModuleName()" );
+                               throw new MWException( "ResourceLoader module name '$name' is invalid, "
+                                       . "see ResourceLoader::isValidModuleName()" );
                        }
 
                        // Attach module
@@ -304,7 +296,9 @@ class ResourceLoader {
                global $IP, $wgEnableJavaScriptTest;
 
                if ( $wgEnableJavaScriptTest !== true ) {
-                       throw new MWException( 'Attempt to register JavaScript test modules but <code>$wgEnableJavaScriptTest</code> is false. Edit your <code>LocalSettings.php</code> to enable it.' );
+                       throw new MWException( 'Attempt to register JavaScript test modules '
+                               . 'but <code>$wgEnableJavaScriptTest</code> is false. '
+                               . 'Edit your <code>LocalSettings.php</code> to enable it.' );
                }
 
                wfProfileIn( __METHOD__ );
@@ -325,7 +319,8 @@ class ResourceLoader {
                        $module['dependencies'][] = 'test.mediawiki.qunit.testrunner';
                }
 
-               $testModules['qunit'] = ( include "$IP/tests/qunit/QUnitTestResources.php" ) + $testModules['qunit'];
+               $testModules['qunit'] =
+                       ( include "$IP/tests/qunit/QUnitTestResources.php" ) + $testModules['qunit'];
 
                foreach ( $testModules as $id => $names ) {
                        // Register test modules
@@ -395,10 +390,12 @@ class ResourceLoader {
         * @return array
         */
        public function getTestModuleNames( $framework = 'all' ) {
-               /// @todo api siteinfo prop testmodulenames modulenames
+               /** @todo api siteinfo prop testmodulenames modulenames */
                if ( $framework == 'all' ) {
                        return $this->testModuleNames;
-               } elseif ( isset( $this->testModuleNames[$framework] ) && is_array( $this->testModuleNames[$framework] ) ) {
+               } elseif ( isset( $this->testModuleNames[$framework] )
+                       && is_array( $this->testModuleNames[$framework] )
+               ) {
                        return $this->testModuleNames[$framework];
                } else {
                        return array();
@@ -763,7 +760,10 @@ class ResourceLoader {
                                $blobs = MessageBlobStore::get( $this, $modules, $context->getLanguage() );
                        } catch ( Exception $e ) {
                                MWExceptionHandler::logException( $e );
-                               wfDebugLog( 'resourceloader', __METHOD__ . ": pre-fetching blobs from MessageBlobStore failed: $e" );
+                               wfDebugLog(
+                                       'resourceloader',
+                                       __METHOD__ . ": pre-fetching blobs from MessageBlobStore failed: $e"
+                               );
                                $this->hasErrors = true;
                                // Add exception to the output as a comment
                                $exceptions .= self::formatException( $e );
@@ -795,9 +795,13 @@ class ResourceLoader {
                                                $scripts = $module->getScriptURLsForDebug( $context );
                                        } else {
                                                $scripts = $module->getScript( $context );
-                                               // rtrim() because there are usually a few line breaks after the last ';'.
-                                               // A new line at EOF, a new line added by ResourceLoaderFileModule::readScriptFiles, etc.
-                                               if ( is_string( $scripts ) && strlen( $scripts ) && substr( rtrim( $scripts ), -1 ) !== ';' ) {
+                                               // rtrim() because there are usually a few line breaks
+                                               // after the last ';'. A new line at EOF, a new line
+                                               // added by ResourceLoaderFileModule::readScriptFiles, etc.
+                                               if ( is_string( $scripts )
+                                                       && strlen( $scripts )
+                                                       && substr( rtrim( $scripts ), -1 ) !== ';'
+                                               ) {
                                                        // Append semicolon to prevent weird bugs caused by files not
                                                        // terminating their statements right (bug 27054)
                                                        $scripts .= ";\n";
@@ -904,6 +908,12 @@ class ResourceLoader {
                        if ( count( $states ) ) {
                                $out .= self::makeLoaderStateScript( $states );
                        }
+               } else {
+                       if ( count( $states ) ) {
+                               $exceptions .= self::makeComment(
+                                       'Problematic modules: ' . FormatJson::encode( $states, ResourceLoader::inDebugMode() )
+                               );
+                       }
                }
 
                if ( !$context->getDebug() ) {
@@ -1049,7 +1059,9 @@ class ResourceLoader {
         * @param string $script JavaScript code
         * @return string
         */
-       public static function makeCustomLoaderScript( $name, $version, $dependencies, $group, $source, $script ) {
+       public static function makeCustomLoaderScript( $name, $version, $dependencies,
+               $group, $source, $script
+       ) {
                $script = str_replace( "\n", "\n\t", trim( $script ) );
                return Xml::encodeJsCall(
                        "( function ( name, version, dependencies, group, source ) {\n\t$script\n} )",
@@ -1212,9 +1224,12 @@ class ResourceLoader {
         * @param array $extraQuery Extra query parameters to add
         * @return string URL to load.php. May be protocol-relative (if $wgLoadScript is procol-relative)
         */
-       public static function makeLoaderURL( $modules, $lang, $skin, $user = null, $version = null, $debug = false, $only = null,
-                       $printable = false, $handheld = false, $extraQuery = array() ) {
+       public static function makeLoaderURL( $modules, $lang, $skin, $user = null,
+               $version = null, $debug = false, $only = null, $printable = false,
+               $handheld = false, $extraQuery = array()
+       ) {
                global $wgLoadScript;
+
                $query = self::makeLoaderQuery( $modules, $lang, $skin, $user, $version, $debug,
                        $only, $printable, $handheld, $extraQuery
                );
@@ -1241,8 +1256,10 @@ class ResourceLoader {
         *
         * @return array
         */
-       public static function makeLoaderQuery( $modules, $lang, $skin, $user = null, $version = null, $debug = false, $only = null,
-                       $printable = false, $handheld = false, $extraQuery = array() ) {
+       public static function makeLoaderQuery( $modules, $lang, $skin, $user = null,
+               $version = null, $debug = false, $only = null, $printable = false,
+               $handheld = false, $extraQuery = array()
+       ) {
                $query = array(
                        'modules' => self::makePackedModulesString( $modules ),
                        'lang' => $lang,
index 63ec5de..9013e2b 100644 (file)
@@ -27,7 +27,6 @@
  * of a specific loader request
  */
 class ResourceLoaderContext {
-
        /* Protected Members */
 
        protected $resourceLoader;
@@ -109,7 +108,8 @@ class ResourceLoaderContext {
        }
 
        /**
-        * Return a dummy ResourceLoaderContext object suitable for passing into things that don't "really" need a context
+        * Return a dummy ResourceLoaderContext object suitable for passing into
+        * things that don't "really" need a context.
         * @return ResourceLoaderContext
         */
        public static function newDummyContext() {
index 61fb111..382bdd9 100644 (file)
  * ResourceLoader module based on local JavaScript/CSS files.
  */
 class ResourceLoaderFileModule extends ResourceLoaderModule {
-
        /* Protected Members */
 
        /** @var string Local base path, see __construct() */
        protected $localBasePath = '';
+
        /** @var string Remote base path, see __construct() */
        protected $remoteBasePath = '';
+
        /**
         * @var array List of paths to JavaScript files to always include
         * @par Usage:
@@ -41,6 +42,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $scripts = array();
+
        /**
         * @var array List of JavaScript files to include when using a specific language
         * @par Usage:
@@ -49,6 +51,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $languageScripts = array();
+
        /**
         * @var array List of JavaScript files to include when using a specific skin
         * @par Usage:
@@ -57,6 +60,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $skinScripts = array();
+
        /**
         * @var array List of paths to JavaScript files to include in debug mode
         * @par Usage:
@@ -65,6 +69,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $debugScripts = array();
+
        /**
         * @var array List of paths to JavaScript files to include in the startup module
         * @par Usage:
@@ -73,6 +78,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $loaderScripts = array();
+
        /**
         * @var array List of paths to CSS files to always include
         * @par Usage:
@@ -81,6 +87,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $styles = array();
+
        /**
         * @var array List of paths to CSS files to include when using specific skins
         * @par Usage:
@@ -89,6 +96,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $skinStyles = array();
+
        /**
         * @var array List of modules this module depends on
         * @par Usage:
@@ -97,6 +105,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $dependencies = array();
+
        /**
         * @var array List of message keys used by this module
         * @par Usage:
@@ -105,14 +114,19 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $messages = array();
+
        /** @var string Name of group to load this module in */
        protected $group;
+
        /** @var string Position on the page to load this module at */
        protected $position = 'bottom';
+
        /** @var bool Link to raw files in debug mode */
        protected $debugRaw = true;
+
        /** @var bool Whether mw.loader.state() call should be omitted */
        protected $raw = false;
+
        protected $targets = array( 'desktop' );
 
        /**
@@ -129,6 +143,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        protected $modifiedTime = array();
+
        /**
         * @var array Place where readStyleFile() tracks file dependencies
         * @par Usage:
@@ -809,7 +824,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $result = $compiler->cachedCompile( $source );
 
                if ( !is_array( $result ) ) {
-                       throw new MWException( 'LESS compiler result has type ' . gettype( $result ) . '; array expected.' );
+                       throw new MWException( 'LESS compiler result has type '
+                               . gettype( $result ) . '; array expected.' );
                }
 
                $this->localFileRefs += array_keys( $result['files'] );
index 819bf5a..9ddd184 100644 (file)
@@ -26,7 +26,6 @@
  * Abstraction for resource loader modules, with name registration and maxage functionality.
  */
 abstract class ResourceLoaderModule {
-
        # Type of resource
        const TYPE_SCRIPTS = 'scripts';
        const TYPE_STYLES = 'styles';
@@ -441,6 +440,8 @@ abstract class ResourceLoaderModule {
        /**
         * Helper method for calculating when this module's definition summary was last changed.
         *
+        * @since 1.23
+        *
         * @return int UNIX timestamp or 0 if no definition summary was provided
         *  by getDefinitionSummary()
         */
@@ -474,7 +475,8 @@ abstract class ResourceLoaderModule {
                        return $data;
                }
 
-               wfDebugLog( 'resourceloader', __METHOD__ . ": New definition hash for module {$this->getName()} in context {$context->getHash()}: $hash." );
+               wfDebugLog( 'resourceloader', __METHOD__ . ": New definition hash for module "
+                       . "{$this->getName()} in context {$context->getHash()}: $hash." );
 
                $timestamp = time();
                $cache->set( $key, $timestamp );
@@ -505,6 +507,8 @@ abstract class ResourceLoaderModule {
         * contain arrays and scalars as values (avoid object instances) which means
         * it requires abstraction.
         *
+        * @since 1.23
+        *
         * @return array|null
         */
        public function getDefinitionSummary( ResourceLoaderContext $context ) {
index d0f0541..f9c5057 100644 (file)
@@ -44,8 +44,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                }
 
                global $wgLoadScript, $wgScript, $wgStylePath, $wgScriptExtension,
-                       $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang,
-                       $wgVariantArticlePath, $wgActionPaths, $wgVersion,
+                       $wgArticlePath, $wgScriptPath, $wgServer, $wgServerName,
+                       $wgContLang, $wgVariantArticlePath, $wgActionPaths, $wgVersion,
                        $wgEnableAPI, $wgEnableWriteAPI, $wgDBname,
                        $wgSitename, $wgFileExtensions, $wgExtensionAssetsPath,
                        $wgCookiePrefix, $wgResourceLoaderMaxQueryLength,
@@ -85,6 +85,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        // becoming [] instead of {} in JS (bug 34604)
                        'wgActionPaths' => (object)$wgActionPaths,
                        'wgServer' => $wgServer,
+                       'wgServerName' => $wgServerName,
                        'wgUserLanguage' => $context->getLanguage(),
                        'wgContentLanguage' => $wgContLang->getCode(),
                        'wgVersion' => $wgVersion,
index dcec5dd..7e0e45d 100644 (file)
  * 'archive' table for traditionally-deleted revisions that have an
  * ar_rev_id saved.
  *
- * See RevDel_RevisionItem and RevDel_ArchivedRevisionItem for items.
+ * See RevDelRevisionItem and RevDelArchivedRevisionItem for items.
  */
-class RevDel_RevisionList extends RevDel_List {
-       var $currentRevId;
+class RevDelRevisionList extends RevDelList {
+       /** @var int */
+       protected $currentRevId;
 
        public function getType() {
                return 'revision';
@@ -80,7 +81,7 @@ class RevDel_RevisionList extends RevDel_List {
                }
 
                // Check if any requested revisions are available fully deleted.
-               $archived = $db->select( array( 'archive' ), '*',
+               $archived = $db->select( array( 'archive' ), Revision::selectArchiveFields(),
                        array(
                                'ar_rev_id' => $ids
                        ),
@@ -108,12 +109,12 @@ class RevDel_RevisionList extends RevDel_List {
 
        public function newItem( $row ) {
                if ( isset( $row->rev_id ) ) {
-                       return new RevDel_RevisionItem( $this, $row );
+                       return new RevDelRevisionItem( $this, $row );
                } elseif ( isset( $row->ar_rev_id ) ) {
-                       return new RevDel_ArchivedRevisionItem( $this, $row );
+                       return new RevDelArchivedRevisionItem( $this, $row );
                } else {
                        // This shouldn't happen. :)
-                       throw new MWException( 'Invalid row type in RevDel_RevisionList' );
+                       throw new MWException( 'Invalid row type in RevDelRevisionList' );
                }
        }
 
@@ -146,8 +147,8 @@ class RevDel_RevisionList extends RevDel_List {
 /**
  * Item class for a live revision table row
  */
-class RevDel_RevisionItem extends RevDel_Item {
-       var $revision;
+class RevDelRevisionItem extends RevDelItem {
+       protected $revision;
 
        public function __construct( $list, $row ) {
                parent::__construct( $list, $row );
@@ -225,7 +226,7 @@ class RevDel_RevisionItem extends RevDel_Item {
 
        /**
         * Get the HTML link to the revision text.
-        * Overridden by RevDel_ArchiveItem.
+        * Overridden by RevDelArchiveItem.
         * @return string
         */
        protected function getRevisionLink() {
@@ -248,7 +249,7 @@ class RevDel_RevisionItem extends RevDel_Item {
 
        /**
         * Get the HTML link to the diff.
-        * Overridden by RevDel_ArchiveItem
+        * Overridden by RevDelArchiveItem
         * @return string
         */
        protected function getDiffLink() {
@@ -308,7 +309,7 @@ class RevDel_RevisionItem extends RevDel_Item {
 /**
  * List for archive table items, i.e. revisions deleted via action=delete
  */
-class RevDel_ArchiveList extends RevDel_RevisionList {
+class RevDelArchiveList extends RevDelRevisionList {
        public function getType() {
                return 'archive';
        }
@@ -326,7 +327,7 @@ class RevDel_ArchiveList extends RevDel_RevisionList {
                foreach ( $this->ids as $id ) {
                        $timestamps[] = $db->timestamp( $id );
                }
-               return $db->select( 'archive', '*',
+               return $db->select( 'archive', Revision::selectArchiveFields(),
                                array(
                                        'ar_namespace' => $this->title->getNamespace(),
                                        'ar_title' => $this->title->getDBkey(),
@@ -338,7 +339,7 @@ class RevDel_ArchiveList extends RevDel_RevisionList {
        }
 
        public function newItem( $row ) {
-               return new RevDel_ArchiveItem( $this, $row );
+               return new RevDelArchiveItem( $this, $row );
        }
 
        public function doPreCommitUpdates() {
@@ -353,9 +354,9 @@ class RevDel_ArchiveList extends RevDel_RevisionList {
 /**
  * Item class for a archive table row
  */
-class RevDel_ArchiveItem extends RevDel_RevisionItem {
+class RevDelArchiveItem extends RevDelRevisionItem {
        public function __construct( $list, $row ) {
-               RevDel_Item::__construct( $list, $row );
+               RevDelItem::__construct( $list, $row );
                $this->revision = Revision::newFromArchiveRow( $row,
                        array( 'page' => $this->list->title->getArticleID() ) );
        }
@@ -436,11 +437,11 @@ class RevDel_ArchiveItem extends RevDel_RevisionItem {
 
 /**
  * Item class for a archive table row by ar_rev_id -- actually
- * used via RevDel_RevisionList.
+ * used via RevDelRevisionList.
  */
-class RevDel_ArchivedRevisionItem extends RevDel_ArchiveItem {
+class RevDelArchivedRevisionItem extends RevDelArchiveItem {
        public function __construct( $list, $row ) {
-               RevDel_Item::__construct( $list, $row );
+               RevDelItem::__construct( $list, $row );
 
                $this->revision = Revision::newFromArchiveRow( $row,
                        array( 'page' => $this->list->title->getArticleID() ) );
@@ -469,7 +470,16 @@ class RevDel_ArchivedRevisionItem extends RevDel_ArchiveItem {
 /**
  * List for oldimage table items
  */
-class RevDel_FileList extends RevDel_List {
+class RevDelFileList extends RevDelList {
+       /** @var array */
+       protected $storeBatch;
+
+       /** @var array */
+       protected $deleteBatch;
+
+       /** @var array */
+       protected $cleanupBatch;
+
        public function getType() {
                return 'oldimage';
        }
@@ -486,8 +496,6 @@ class RevDel_FileList extends RevDel_List {
                return File::DELETED_FILE;
        }
 
-       var $storeBatch, $deleteBatch, $cleanupBatch;
-
        /**
         * @param DatabaseBase $db
         * @return mixed
@@ -510,7 +518,7 @@ class RevDel_FileList extends RevDel_List {
        }
 
        public function newItem( $row ) {
-               return new RevDel_FileItem( $this, $row );
+               return new RevDelFileItem( $this, $row );
        }
 
        public function clearFileOps() {
@@ -568,12 +576,9 @@ class RevDel_FileList extends RevDel_List {
 /**
  * Item class for an oldimage table row
  */
-class RevDel_FileItem extends RevDel_Item {
-
-       /**
-        * @var File
-        */
-       var $file;
+class RevDelFileItem extends RevDelItem {
+       /** @var File */
+       protected $file;
 
        public function __construct( $list, $row ) {
                parent::__construct( $list, $row );
@@ -657,7 +662,7 @@ class RevDel_FileItem extends RevDel_Item {
 
        /**
         * Get the link to the file.
-        * Overridden by RevDel_ArchivedFileItem.
+        * Overridden by RevDelArchivedFileItem.
         * @return string
         */
        protected function getLink() {
@@ -782,7 +787,7 @@ class RevDel_FileItem extends RevDel_Item {
 /**
  * List for filearchive table items
  */
-class RevDel_ArchivedFileList extends RevDel_FileList {
+class RevDelArchivedFileList extends RevDelFileList {
        public function getType() {
                return 'filearchive';
        }
@@ -810,16 +815,16 @@ class RevDel_ArchivedFileList extends RevDel_FileList {
        }
 
        public function newItem( $row ) {
-               return new RevDel_ArchivedFileItem( $this, $row );
+               return new RevDelArchivedFileItem( $this, $row );
        }
 }
 
 /**
  * Item class for a filearchive table row
  */
-class RevDel_ArchivedFileItem extends RevDel_FileItem {
+class RevDelArchivedFileItem extends RevDelFileItem {
        public function __construct( $list, $row ) {
-               RevDel_Item::__construct( $list, $row );
+               RevDelItem::__construct( $list, $row );
                $this->file = ArchivedFile::newFromRow( $row );
        }
 
@@ -884,7 +889,7 @@ class RevDel_ArchivedFileItem extends RevDel_FileItem {
 /**
  * List for logging table items
  */
-class RevDel_LogList extends RevDel_List {
+class RevDelLogList extends RevDelList {
        public function getType() {
                return 'logging';
        }
@@ -921,7 +926,20 @@ class RevDel_LogList extends RevDel_List {
         */
        public function doQuery( $db ) {
                $ids = array_map( 'intval', $this->ids );
-               return $db->select( 'logging', '*',
+               return $db->select( 'logging', array(
+                               'log_id',
+                               'log_type',
+                               'log_action',
+                               'log_timestamp',
+                               'log_user',
+                               'log_user_text',
+                               'log_namespace',
+                               'log_title',
+                               'log_page',
+                               'log_comment',
+                               'log_params',
+                               'log_deleted'
+                       ),
                        array( 'log_id' => $ids ),
                        __METHOD__,
                        array( 'ORDER BY' => 'log_id DESC' )
@@ -929,7 +947,7 @@ class RevDel_LogList extends RevDel_List {
        }
 
        public function newItem( $row ) {
-               return new RevDel_LogItem( $this, $row );
+               return new RevDelLogItem( $this, $row );
        }
 
        public function getSuppressBit() {
@@ -952,7 +970,7 @@ class RevDel_LogList extends RevDel_List {
 /**
  * Item class for a logging table row
  */
-class RevDel_LogItem extends RevDel_Item {
+class RevDelLogItem extends RevDelItem {
        public function getIdField() {
                return 'log_id';
        }
@@ -1024,7 +1042,9 @@ class RevDel_LogItem extends RevDel_Item {
                // User links and action text
                $action = $formatter->getActionText();
                // Comment
-               $comment = $this->list->getLanguage()->getDirMark() . Linker::commentBlock( $this->row->log_comment );
+               $comment = $this->list->getLanguage()->getDirMark()
+                       . Linker::commentBlock( $this->row->log_comment );
+
                if ( LogEventsList::isDeleted( $this->row, LogPage::DELETED_COMMENT ) ) {
                        $comment = '<span class="history-deleted">' . $comment . '</span>';
                }
@@ -1040,9 +1060,15 @@ class RevDel_LogItem extends RevDel_Item {
                        'type' => $logEntry->getType(),
                        'action' => $logEntry->getSubtype(),
                );
-               $ret += $logEntry->isDeleted( LogPage::DELETED_USER ) ? array( 'userhidden' => '' ) : array();
-               $ret += $logEntry->isDeleted( LogPage::DELETED_COMMENT ) ? array( 'commenthidden' => '' ) : array();
-               $ret += $logEntry->isDeleted( LogPage::DELETED_ACTION ) ? array( 'actionhidden' => '' ) : array();
+               $ret += $logEntry->isDeleted( LogPage::DELETED_USER )
+                       ? array( 'userhidden' => '' )
+                       : array();
+               $ret += $logEntry->isDeleted( LogPage::DELETED_COMMENT )
+                       ? array( 'commenthidden' => '' )
+                       : array();
+               $ret += $logEntry->isDeleted( LogPage::DELETED_ACTION )
+                       ? array( 'actionhidden' => '' )
+                       : array();
 
                if ( LogEventsList::userCan( $this->row, LogPage::DELETED_ACTION, $user ) ) {
                        ApiQueryLogEvents::addLogParams(
index e326dce..086db3a 100644 (file)
 /**
  * Abstract base class for a list of deletable items. The list class
  * needs to be able to make a query from a set of identifiers to pull
- * relevant rows, to return RevDel_Item subclasses wrapping them, and
+ * relevant rows, to return RevDelItem subclasses wrapping them, and
  * to wrap bulk update operations.
  */
-abstract class RevDel_List extends RevisionListBase {
+abstract class RevDelList extends RevisionListBase {
        function __construct( IContextSource $context, Title $title, array $ids ) {
                parent::__construct( $context, $title );
                $this->ids = $ids;
@@ -105,7 +105,9 @@ abstract class RevDel_List extends RevisionListBase {
                        $status->itemStatuses = array();
                }
 
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
                for ( $this->reset(); $this->current(); $this->next() ) {
+                       // @codingStandardsIgnoreEnd
                        $item = $this->current();
                        unset( $missing[$item->getId()] );
 
@@ -315,7 +317,7 @@ abstract class RevDel_List extends RevisionListBase {
 /**
  * Abstract base class for deletable items
  */
-abstract class RevDel_Item extends RevisionItemBase {
+abstract class RevDelItem extends RevisionItemBase {
        /**
         * Returns true if the item is "current", and the operation to set the given
         * bits can't be executed for that reason
index ecfe1d8..e42301b 100644 (file)
 class RevisionDeleter {
        /** List of known revdel types, with their corresponding list classes */
        private static $allowedTypes = array(
-               'revision' => 'RevDel_RevisionList',
-               'archive' => 'RevDel_ArchiveList',
-               'oldimage' => 'RevDel_FileList',
-               'filearchive' => 'RevDel_ArchivedFileList',
-               'logging' => 'RevDel_LogList',
+               'revision' => 'RevDelRevisionList',
+               'archive' => 'RevDelArchiveList',
+               'oldimage' => 'RevDelFileList',
+               'filearchive' => 'RevDelArchivedFileList',
+               'logging' => 'RevDelLogList',
        );
 
        /** Type map to support old log entries */
@@ -77,7 +77,7 @@ class RevisionDeleter {
         * @param IContextSource $context
         * @param Title $title
         * @param array $ids
-        * @return RevDel_List
+        * @return RevDelList
         */
        public static function createList( $typeName, IContextSource $context, Title $title, array $ids ) {
                $typeName = self::getCanonicalTypeName( $typeName );
index 827d8c3..907047e 100644 (file)
  * @ingroup Search
  */
 class SearchEngine {
-       var $limit = 10;
-       var $offset = 0;
-       var $prefix = '';
-       var $searchTerms = array();
-       var $namespaces = array( NS_MAIN );
+       /** @var string */
+       public $prefix = '';
+
+       /** @var int[] */
+       public $namespaces = array( NS_MAIN );
+
+       /** @var int */
+       protected $limit = 10;
+
+       /** @var int */
+       protected $offset = 0;
+
+       /** @var array|string */
+       protected $searchTerms = array();
+
+       /** @var bool */
        protected $showSuggestion = true;
 
        /** @var array Feature values */
@@ -106,8 +117,9 @@ class SearchEngine {
        }
 
        /**
-        * Transform search term in cases when parts of the query came as different GET params (when supported)
-        * e.g. for prefix queries: search=test&prefix=Main_Page/Archive -> test prefix:Main Page/Archive
+        * Transform search term in cases when parts of the query came as different
+        * GET params (when supported), e.g. for prefix queries:
+        * search=test&prefix=Main_Page/Archive -> test prefix:Main Page/Archive
         */
        function transformSearchTerm( $term ) {
                return $term;
@@ -148,7 +160,10 @@ class SearchEngine {
                $allSearchTerms = array( $searchterm );
 
                if ( $wgContLang->hasVariants() ) {
-                       $allSearchTerms = array_merge( $allSearchTerms, $wgContLang->autoConvertToAllVariants( $searchterm ) );
+                       $allSearchTerms = array_merge(
+                               $allSearchTerms,
+                               $wgContLang->autoConvertToAllVariants( $searchterm )
+                       );
                }
 
                $titleResult = null;
@@ -523,6 +538,7 @@ class SearchEngine {
         */
        public static function getOpenSearchTemplate() {
                global $wgOpenSearchTemplate, $wgCanonicalServer;
+
                if ( $wgOpenSearchTemplate ) {
                        return $wgOpenSearchTemplate;
                } else {
@@ -530,7 +546,9 @@ class SearchEngine {
                        if ( !$ns ) {
                                $ns = "0";
                        }
-                       return $wgCanonicalServer . wfScript( 'api' ) . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
+
+                       return $wgCanonicalServer . wfScript( 'api' )
+                               . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
                }
        }
 
index 5e734fe..b8b2bae 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup Search
  */
 class SearchHighlighter {
-       var $mCleanWikitext = true;
+       protected $mCleanWikitext = true;
 
        function __construct( $cleanupWikitext = true ) {
                $this->mCleanWikitext = $cleanupWikitext;
@@ -40,11 +40,11 @@ class SearchHighlighter {
         * @param array $terms Terms to highlight (unescaped)
         * @param int $contextlines
         * @param int $contextchars
-        * @return tring
+        * @return string
         */
        public function highlightText( $text, $terms, $contextlines, $contextchars ) {
-               global $wgContLang;
-               global $wgSearchHighlightBoundaries;
+               global $wgContLang, $wgSearchHighlightBoundaries;
+
                $fname = __METHOD__;
 
                if ( $text == '' ) {
@@ -138,7 +138,11 @@ class SearchHighlighter {
                foreach ( $terms as $index => $term ) {
                        // manually do upper/lowercase stuff for utf-8 since PHP won't do it
                        if ( preg_match( '/[\x80-\xff]/', $term ) ) {
-                               $terms[$index] = preg_replace_callback( '/./us', array( $this, 'caseCallback' ), $terms[$index] );
+                               $terms[$index] = preg_replace_callback(
+                                       '/./us',
+                                       array( $this, 'caseCallback' ),
+                                       $terms[$index]
+                               );
                        } else {
                                $terms[$index] = $term;
                        }
@@ -229,7 +233,12 @@ class SearchHighlighter {
                        if ( $len < $targetchars - 20 ) {
                                // complete this line
                                if ( $len < strlen( $all[$index] ) ) {
-                                       $extended[$index] = $this->extract( $all[$index], $offsets[$index], $offsets[$index] + $targetchars, $offsets[$index] );
+                                       $extended[$index] = $this->extract(
+                                               $all[$index],
+                                               $offsets[$index],
+                                               $offsets[$index] + $targetchars,
+                                               $offsets[$index]
+                                       );
                                        $len = strlen( $extended[$index] );
                                }
 
@@ -254,7 +263,9 @@ class SearchHighlighter {
                foreach ( $snippets as $index => $line ) {
                        if ( $last == - 1 ) {
                                $extract .= $line; // first line
-                       } elseif ( $last + 1 == $index && $offsets[$last] + strlen( $snippets[$last] ) >= strlen( $all[$last] ) ) {
+                       } elseif ( $last + 1 == $index
+                               && $offsets[$last] + strlen( $snippets[$last] ) >= strlen( $all[$last] )
+                       ) {
                                $extract .= " " . $line; // continous lines
                        } else {
                                $extract .= '<b> ... </b>' . $line;
@@ -360,7 +371,13 @@ class SearchHighlighter {
                $s = max( 0, $point - $tolerance );
                $l = min( strlen( $text ), $point + $tolerance ) - $s;
                $m = array();
-               if ( preg_match( '/[ ,.!?~!@#$%^&*\(\)+=\-\\\|\[\]"\'<>]/', substr( $text, $s, $l ), $m, PREG_OFFSET_CAPTURE ) ) {
+
+               if ( preg_match(
+                       '/[ ,.!?~!@#$%^&*\(\)+=\-\\\|\[\]"\'<>]/',
+                       substr( $text, $s, $l ),
+                       $m,
+                       PREG_OFFSET_CAPTURE
+               ) ) {
                        return $m[0][1] + $s + $offset;
                } else {
                        // check if point is on a valid first UTF8 char
@@ -373,6 +390,7 @@ class SearchHighlighter {
                                }
                                $char = ord( $text[$point] );
                        }
+
                        return $point;
 
                }
@@ -444,7 +462,11 @@ class SearchHighlighter {
                $text = preg_replace( "/\\{\\{([^|]+?)\\}\\}/", "", $text );
                $text = preg_replace( "/\\{\\{([^|]+\\|)(.*?)\\}\\}/", "\\2", $text );
                $text = preg_replace( "/\\[\\[([^|]+?)\\]\\]/", "\\1", $text );
-               $text = preg_replace_callback( "/\\[\\[([^|]+\\|)(.*?)\\]\\]/", array( $this, 'linkReplace' ), $text );
+               $text = preg_replace_callback(
+                       "/\\[\\[([^|]+\\|)(.*?)\\]\\]/",
+                       array( $this, 'linkReplace' ),
+                       $text
+               );
                // $text = preg_replace("/\\[\\[([^|]+\\|)(.*?)\\]\\]/", "\\2", $text);
                $text = preg_replace( "/<\/?[^>]+>/", "", $text );
                $text = preg_replace( "/'''''/", "", $text );
index 3eef498..4960c42 100644 (file)
@@ -34,7 +34,10 @@ class SearchMssql extends SearchDatabase {
         * @access public
         */
        function searchText( $term ) {
-               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) );
+               $resultSet = $this->db->resultObject(
+                       $this->db->query( $this->getQuery( $this->filter( $term ), true ) )
+               );
+
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
@@ -46,7 +49,10 @@ class SearchMssql extends SearchDatabase {
         * @access public
         */
        function searchTitle( $term ) {
-               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) );
+               $resultSet = $this->db->resultObject(
+                       $this->db->query( $this->getQuery( $this->filter( $term ), false ) )
+               );
+
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
@@ -132,7 +138,7 @@ class SearchMssql extends SearchDatabase {
         */
        function parseQuery( $filteredText, $fulltext ) {
                global $wgContLang;
-               $lc = SearchEngine::legalSearchChars();
+               $lc = $this->legalSearchChars();
                $this->searchTerms = array();
 
                # @todo FIXME: This doesn't handle parenthetical expressions.
index 345ced5..77a0c43 100644 (file)
@@ -29,8 +29,9 @@
  * @ingroup Search
  */
 class SearchMySQL extends SearchDatabase {
-       var $strictMatching = true;
-       static $mMinSearchLength;
+       protected $strictMatching = true;
+
+       private static $mMinSearchLength;
 
        /**
         * Parse the user's query and transform it into an SQL fragment which will
@@ -43,7 +44,8 @@ class SearchMySQL extends SearchDatabase {
         */
        function parseQuery( $filteredText, $fulltext ) {
                global $wgContLang;
-               $lc = SearchEngine::legalSearchChars(); // Minus format chars
+
+               $lc = $this->legalSearchChars(); // Minus format chars
                $searchon = '';
                $this->searchTerms = array();
 
@@ -52,7 +54,9 @@ class SearchMySQL extends SearchDatabase {
                if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
                                $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach ( $m as $bits ) {
-                               @list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
+                               wfSuppressWarnings();
+                               list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
+                               wfRestoreWarnings();
 
                                if ( $nonQuoted != '' ) {
                                        $term = $nonQuoted;
index 93427d1..4cfcec3 100644 (file)
@@ -29,7 +29,6 @@
  * @ingroup Search
  */
 class SearchOracle extends SearchDatabase {
-
        private $reservedWords = array(
                'ABOUT' => 1,
                'ACCUM' => 1,
@@ -70,7 +69,10 @@ class SearchOracle extends SearchDatabase {
                        return new SqlSearchResultSet( false, '' );
                }
 
-               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) );
+               $resultSet = $this->db->resultObject(
+                       $this->db->query( $this->getQuery( $this->filter( $term ), true ) )
+               );
+
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
@@ -85,7 +87,10 @@ class SearchOracle extends SearchDatabase {
                        return new SqlSearchResultSet( false, '' );
                }
 
-               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) );
+               $resultSet = $this->db->resultObject(
+                       $this->db->query( $this->getQuery( $this->filter( $term ), false ) )
+               );
+
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
@@ -171,7 +176,7 @@ class SearchOracle extends SearchDatabase {
         */
        function parseQuery( $filteredText, $fulltext ) {
                global $wgContLang;
-               $lc = SearchEngine::legalSearchChars();
+               $lc = $this->legalSearchChars();
                $this->searchTerms = array();
 
                # @todo FIXME: This doesn't handle parenthetical expressions.
index 1ac4946..62fb236 100644 (file)
@@ -42,7 +42,7 @@ class SearchSqlite extends SearchDatabase {
         */
        function parseQuery( $filteredText, $fulltext ) {
                global $wgContLang;
-               $lc = SearchEngine::legalSearchChars(); // Minus format chars
+               $lc = $this->legalSearchChars(); // Minus format chars
                $searchon = '';
                $this->searchTerms = array();
 
@@ -50,7 +50,9 @@ class SearchSqlite extends SearchDatabase {
                if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
                                $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach ( $m as $bits ) {
-                               @list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
+                               wfSuppressWarnings();
+                               list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
+                               wfRestoreWarnings();
 
                                if ( $nonQuoted != '' ) {
                                        $term = $nonQuoted;
index 2a86b31..4854bcb 100644 (file)
@@ -33,7 +33,6 @@
  * @ingroup Site
  */
 class MediaWikiSite extends Site {
-
        const PATH_FILE = 'file_path';
        const PATH_PAGE = 'page_path';
 
@@ -76,14 +75,16 @@ class MediaWikiSite extends Site {
        }
 
        /**
-        * Returns the normalized form of the given page title, using the normalization rules of the given site.
-        * If the given title is a redirect, the redirect weill be resolved and the redirect target is returned.
+        * Returns the normalized form of the given page title, using the
+        * normalization rules of the given site. If the given title is a redirect,
+        * the redirect weill be resolved and the redirect target is returned.
         *
-        * @note  : This actually makes an API request to the remote site, so beware that this function is slow and depends
-        *          on an external service.
+        * @note This actually makes an API request to the remote site, so beware
+        *   that this function is slow and depends on an external service.
         *
-        * @note  : If MW_PHPUNIT_TEST is defined, the call to the external site is skipped, and the title
-        *          is normalized using the local normalization rules as implemented by the Title class.
+        * @note If MW_PHPUNIT_TEST is defined, the call to the external site is
+        *   skipped, and the title is normalized using the local normalization
+        *   rules as implemented by the Title class.
         *
         * @see Site::normalizePageName
         *
@@ -103,8 +104,10 @@ class MediaWikiSite extends Site {
 
                // Go on call the external site
                if ( defined( 'MW_PHPUNIT_TEST' ) ) {
-                       // If the code is under test, don't call out to other sites, just normalize locally.
-                       // Note: this may cause results to be inconsistent with the actual normalization used by the respective remote site!
+                       // If the code is under test, don't call out to other sites, just
+                       // normalize locally.
+                       // Note: this may cause results to be inconsistent with the actual
+                       // normalization used by the respective remote site!
 
                        $t = Title::newFromText( $pageName );
                        return $t->getPrefixedText();
@@ -152,12 +155,14 @@ class MediaWikiSite extends Site {
                $page = static::extractPageRecord( $data, $pageName );
 
                if ( isset( $page['missing'] ) ) {
-                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for a missing page title! " . $ret );
+                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for a missing page title! "
+                               . $ret );
                        return false;
                }
 
                if ( isset( $page['invalid'] ) ) {
-                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for an invalid page title! " . $ret );
+                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for an invalid page title! "
+                               . $ret );
                        return false;
                }
 
@@ -348,5 +353,4 @@ class MediaWikiSite extends Site {
 
                return $filePath;
        }
-
 }
index 59230c7..e3559f5 100644 (file)
@@ -27,7 +27,6 @@
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class Site implements Serializable {
-
        const TYPE_UNKNOWN = 'unknown';
        const TYPE_MEDIAWIKI = 'mediawiki';
 
@@ -340,11 +339,12 @@ class Site implements Serializable {
        }
 
        /**
-        * Returns the main path type, that is the type of the path that should generally be used to construct links
-        * to the target site.
+        * Returns the main path type, that is the type of the path that should
+        * generally be used to construct links to the target site.
         *
-        * This default implementation returns Site::PATH_LINK as the default path type. Subclasses can override this
-        * to define a different default path type, or return false to disable site links.
+        * This default implementation returns Site::PATH_LINK as the default path
+        * type. Subclasses can override this to define a different default path
+        * type, or return false to disable site links.
         *
         * @since 1.21
         *
@@ -541,7 +541,9 @@ class Site implements Serializable {
         * @return string[]
         */
        public function getInterwikiIds() {
-               return array_key_exists( self::ID_INTERWIKI, $this->localIds ) ? $this->localIds[self::ID_INTERWIKI] : array();
+               return array_key_exists( self::ID_INTERWIKI, $this->localIds )
+                       ? $this->localIds[self::ID_INTERWIKI]
+                       : array();
        }
 
        /**
@@ -553,7 +555,9 @@ class Site implements Serializable {
         * @return string[]
         */
        public function getNavigationIds() {
-               return array_key_exists( self::ID_EQUIVALENT, $this->localIds ) ? $this->localIds[self::ID_EQUIVALENT] : array();
+               return array_key_exists( self::ID_EQUIVALENT, $this->localIds )
+                       ? $this->localIds[self::ID_EQUIVALENT] :
+                       array();
        }
 
        /**
@@ -693,10 +697,10 @@ class Site implements Serializable {
                $this->setForward( $fields['forward'] );
                $this->setInternalId( $fields['internalid'] );
        }
-
 }
 
 /**
  * @deprecated
  */
-class SiteObject extends Site {}
+class SiteObject extends Site {
+}
index 6992450..dfe4ec5 100644 (file)
@@ -27,7 +27,6 @@
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class SiteList extends GenericArrayObject {
-
        /**
         * Internal site identifiers pointing to their sites offset value.
         *
@@ -350,10 +349,10 @@ class SiteList extends GenericArrayObject {
 
                return $serializationData;
        }
-
 }
 
 /**
  * @deprecated
  */
-class SiteArray extends SiteList {}
+class SiteArray extends SiteList {
+}
index d14569a..f382d98 100644 (file)
@@ -29,7 +29,6 @@
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class SiteSQLStore implements SiteStore {
-
        /**
         * @since 1.21
         *
@@ -169,7 +168,10 @@ class SiteSQLStore implements SiteStore {
                }
 
                if ( $siteRow->hasField( 'language' ) ) {
-                       $site->setLanguageCode( $siteRow->getField( 'language' ) === '' ? null : $siteRow->getField( 'language' ) );
+                       $site->setLanguageCode( $siteRow->getField( 'language' ) === ''
+                               ? null
+                               : $siteRow->getField( 'language' )
+                       );
                }
 
                if ( $siteRow->hasField( 'source' ) ) {
@@ -504,5 +506,4 @@ class Sites extends SiteSQLStore {
        public function getSiteGroup( $group ) {
                return $this->getSites()->getGroup( $group );
        }
-
 }
index 7e108af..f7c95d1 100644 (file)
@@ -405,42 +405,42 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                global $wgRecentChangesFlags;
                $user = $context->getUser();
                # The legend showing what the letters and stuff mean
-               $legend = Xml::openElement( 'dl' ) . "\n";
+               $legend = Html::openElement( 'dl' ) . "\n";
                # Iterates through them and gets the messages for both letter and tooltip
                $legendItems = $wgRecentChangesFlags;
-               if ( !$user->useRCPatrol() ) {
+               if ( !( $user->useRCPatrol() || $user->useNPPatrol() ) ) {
                        unset( $legendItems['unpatrolled'] );
                }
-               foreach ( $legendItems as $key => $legendInfo ) { # generate items of the legend
-                       $label = $legendInfo['title'];
-                       $letter = $legendInfo['letter'];
-                       $cssClass = isset( $legendInfo['class'] ) ? $legendInfo['class'] : $key;
+               foreach ( $legendItems as $key => $item ) { # generate items of the legend
+                       $label = $item['title'];
+                       $letter = $item['letter'];
+                       $cssClass = isset( $item['class'] ) ? $item['class'] : $key;
 
-                       $legend .= Xml::element( 'dt',
+                       $legend .= Html::element( 'dt',
                                array( 'class' => $cssClass ), $context->msg( $letter )->text()
                        ) . "\n";
                        if ( $key === 'newpage' ) {
-                               $legend .= Xml::openElement( 'dd' );
+                               $legend .= Html::openElement( 'dd' );
                                $legend .= $context->msg( $label )->escaped();
                                $legend .= ' ' . $context->msg( 'recentchanges-legend-newpage' )->parse();
-                               $legend .= Xml::closeElement( 'dd' ) . "\n";
+                               $legend .= Html::closeElement( 'dd' ) . "\n";
                        } else {
-                               $legend .= Xml::element( 'dd', array(),
+                               $legend .= Html::element( 'dd', array(),
                                        $context->msg( $label )->text()
                                ) . "\n";
                        }
                }
                # (+-123)
-               $legend .= Xml::tags( 'dt',
+               $legend .= Html::rawElement( 'dt',
                        array( 'class' => 'mw-plusminus-pos' ),
                        $context->msg( 'recentchanges-legend-plusminus' )->parse()
                ) . "\n";
-               $legend .= Xml::element(
+               $legend .= Html::element(
                        'dd',
                        array( 'class' => 'mw-changeslist-legend-plusminus' ),
                        $context->msg( 'recentchanges-label-plusminus' )->text()
                ) . "\n";
-               $legend .= Xml::closeElement( 'dl' ) . "\n";
+               $legend .= Html::closeElement( 'dl' ) . "\n";
 
                # Collapsibility
                $legend =
index 2305f21..dd22769 100644 (file)
@@ -407,17 +407,21 @@ class SpecialPageFactory {
         * Return categorised listable special pages which are available
         * for the current user, but not for everyone
         *
+        * @param User|null $user User object to use or null for $wgUser
         * @return array ( string => Specialpage )
         */
-       public static function getRestrictedPages() {
-               global $wgUser;
+       public static function getRestrictedPages( User $user = null ) {
                $pages = array();
+               if ( $user === null ) {
+                       global $wgUser;
+                       $user = $wgUser;
+               }
                foreach ( self::getList() as $name => $rec ) {
                        $page = self::getPage( $name );
                        if (
                                $page->isListed()
                                && $page->isRestricted()
-                               && $page->userCanExecute( $wgUser )
+                               && $page->userCanExecute( $user )
                        ) {
                                $pages[$name] = $page;
                        }
index d963677..c42c089 100644 (file)
@@ -31,7 +31,6 @@
  * @ingroup SpecialPage
  */
 class ActiveUsersPager extends UsersPager {
-
        /**
         * @var FormOptions
         */
@@ -194,20 +193,31 @@ class ActiveUsersPager extends UsersPager {
                $self = $this->getTitle();
                $limit = $this->mLimit ? Html::hidden( 'limit', $this->mLimit ) : '';
 
-               $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); # Form tag
+               # Form tag
+               $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
                $out .= Xml::fieldset( $this->msg( 'activeusers' )->text() ) . "\n";
                $out .= Html::hidden( 'title', $self->getPrefixedDBkey() ) . $limit . "\n";
 
+               # Username field
                $out .= Xml::inputLabel( $this->msg( 'activeusers-from' )->text(),
-                       'username', 'offset', 20, $this->requestedUser, array( 'tabindex' => 1 ) ) . '<br />';# Username field
+                       'username', 'offset', 20, $this->requestedUser, array( 'tabindex' => 1 ) ) . '<br />';
 
                $out .= Xml::checkLabel( $this->msg( 'activeusers-hidebots' )->text(),
                        'hidebots', 'hidebots', $this->opts->getValue( 'hidebots' ), array( 'tabindex' => 2 ) );
 
-               $out .= Xml::checkLabel( $this->msg( 'activeusers-hidesysops' )->text(),
-                       'hidesysops', 'hidesysops', $this->opts->getValue( 'hidesysops' ), array( 'tabindex' => 3 ) ) . '<br />';
-
-               $out .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text(), array( 'tabindex' => 4 ) ) . "\n";# Submit button and form bottom
+               $out .= Xml::checkLabel(
+                       $this->msg( 'activeusers-hidesysops' )->text(),
+                       'hidesysops',
+                       'hidesysops',
+                       $this->opts->getValue( 'hidesysops' ),
+                       array( 'tabindex' => 3 )
+               ) . '<br />';
+
+               # Submit button and form bottom
+               $out .= Xml::submitButton(
+                       $this->msg( 'allpagessubmit' )->text(),
+                       array( 'tabindex' => 4 )
+               ) . "\n";
                $out .= Xml::closeElement( 'fieldset' );
                $out .= Xml::closeElement( 'form' );
 
index e0ebd4d..8c46a93 100644 (file)
@@ -84,7 +84,8 @@ class SpecialBlock extends FormSpecialPage {
                        $this->getSkin()->setRelevantUser( $this->target );
                }
 
-               list( $this->previousTarget, /*...*/ ) = Block::parseTarget( $request->getVal( 'wpPreviousTarget' ) );
+               list( $this->previousTarget, /*...*/ ) =
+                       Block::parseTarget( $request->getVal( 'wpPreviousTarget' ) );
                $this->requestedHideUser = $request->getBool( 'wpHideUser' );
        }
 
@@ -128,8 +129,7 @@ class SpecialBlock extends FormSpecialPage {
                $a = array(
                        'Target' => array(
                                'type' => 'text',
-                               'label-message' => 'ipadressorusername',
-                               'tabindex' => '1',
+                               'label-message' => 'ipaddressorusername',
                                'id' => 'mw-bi-target',
                                'size' => '45',
                                'autofocus' => true,
@@ -140,7 +140,6 @@ class SpecialBlock extends FormSpecialPage {
                                'type' => !count( $suggestedDurations ) ? 'text' : 'selectorother',
                                'label-message' => 'ipbexpiry',
                                'required' => true,
-                               'tabindex' => '2',
                                'options' => $suggestedDurations,
                                'other' => $this->msg( 'ipbother' )->text(),
                                'default' => $this->msg( 'ipb-default-expiry' )->inContentLanguage()->text(),
@@ -361,7 +360,10 @@ class SpecialBlock extends FormSpecialPage {
 
                # Link to unblock the specified user, or to a blank unblock form
                if ( $this->target instanceof User ) {
-                       $message = $this->msg( 'ipb-unblock-addr', wfEscapeWikiText( $this->target->getName() ) )->parse();
+                       $message = $this->msg(
+                               'ipb-unblock-addr',
+                               wfEscapeWikiText( $this->target->getName() )
+                       )->parse();
                        $list = SpecialPage::getTitleFor( 'Unblock', $this->target->getName() );
                } else {
                        $message = $this->msg( 'ipb-unblock' )->parse();
@@ -451,7 +453,7 @@ class SpecialBlock extends FormSpecialPage {
 
        /**
         * Determine the target of the block, and the type of target
-        * TODO: should be in Block.php?
+        * @todo Should be in Block.php?
         * @param string $par subpage parameter passed to setup, or data value from
         *     the HTMLForm
         * @param WebRequest $request Optionally try and get data from a request too
@@ -765,7 +767,11 @@ class SpecialBlock extends FormSpecialPage {
 
                # Can't watch a rangeblock
                if ( $type != Block::TYPE_RANGE && $data['Watch'] ) {
-                       WatchAction::doWatch( Title::makeTitle( NS_USER, $target ), $performer, WatchedItem::IGNORE_USER_RIGHTS );
+                       WatchAction::doWatch(
+                               Title::makeTitle( NS_USER, $target ),
+                               $performer,
+                               WatchedItem::IGNORE_USER_RIGHTS
+                       );
                }
 
                # Block constructor sanitizes certain block options on insert
@@ -969,7 +975,3 @@ class SpecialBlock extends FormSpecialPage {
                return 'users';
        }
 }
-
-# BC @since 1.18
-class IPBlockForm extends SpecialBlock {
-}
index bf61cce..9170e3e 100644 (file)
@@ -27,8 +27,9 @@
  * @ingroup SpecialPage
  */
 class SpecialBlockList extends SpecialPage {
+       protected $target;
 
-       protected $target, $options;
+       protected $options;
 
        function __construct() {
                parent::__construct( 'BlockList' );
@@ -67,7 +68,7 @@ class SpecialBlockList extends SpecialPage {
                $fields = array(
                        'Target' => array(
                                'type' => 'text',
-                               'label-message' => 'ipadressorusername',
+                               'label-message' => 'ipaddressorusername',
                                'tabindex' => '1',
                                'size' => '45',
                                'default' => $this->target,
@@ -203,7 +204,11 @@ class SpecialBlockList extends SpecialPage {
                        foreach ( $otherBlockLink as $link ) {
                                $list .= Html::rawElement( 'li', array(), $link ) . "\n";
                        }
-                       $out->addHTML( Html::rawElement( 'ul', array( 'class' => 'mw-ipblocklist-otherblocks' ), $list ) . "\n" );
+                       $out->addHTML( Html::rawElement(
+                               'ul',
+                               array( 'class' => 'mw-ipblocklist-otherblocks' ),
+                               $list
+                       ) . "\n" );
                }
        }
 
@@ -471,11 +476,15 @@ class HTMLBlockedUsersItemSelect extends HTMLSelectField {
                }
 
                // Let folks pick an explicit limit not from our list, as long as it's a real numbr.
-               if ( !in_array( $value, $this->mParams['options'] ) && $value == intval( $value ) && $value > 0 ) {
+               if ( !in_array( $value, $this->mParams['options'] )
+                       && $value == intval( $value )
+                       && $value > 0
+               ) {
                        // This adds the explicitly requested limit value to the drop-down,
                        // then makes sure it's sorted correctly so when we output the list
                        // later, the custom option doesn't just show up last.
-                       $this->mParams['options'][$this->mParent->getLanguage()->formatNum( $value )] = intval( $value );
+                       $this->mParams['options'][$this->mParent->getLanguage()->formatNum( $value )] =
+                               intval( $value );
                        asort( $this->mParams['options'] );
                }
 
index 79636b1..581619f 100644 (file)
@@ -30,7 +30,6 @@
  * @ingroup SpecialPage
  */
 class SpecialBookSources extends SpecialPage {
-
        /**
         * ISBN passed to the page, if any
         */
@@ -55,7 +54,10 @@ class SpecialBookSources extends SpecialPage {
                $this->getOutput()->addHTML( $this->makeForm() );
                if ( strlen( $this->isbn ) > 0 ) {
                        if ( !self::isValidISBN( $this->isbn ) ) {
-                               $this->getOutput()->wrapWikiMsg( "<div class=\"error\">\n$1\n</div>", 'booksources-invalid-isbn' );
+                               $this->getOutput()->wrapWikiMsg(
+                                       "<div class=\"error\">\n$1\n</div>",
+                                       'booksources-invalid-isbn'
+                               );
                        }
                        $this->showList();
                }
@@ -118,10 +120,21 @@ class SpecialBookSources extends SpecialPage {
                global $wgScript;
 
                $form = Html::openElement( 'fieldset' ) . "\n";
-               $form .= Html::element( 'legend', array(), $this->msg( 'booksources-search-legend' )->text() ) . "\n";
+               $form .= Html::element(
+                       'legend',
+                       array(),
+                       $this->msg( 'booksources-search-legend' )->text()
+               ) . "\n";
                $form .= Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ) . "\n";
                $form .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) . "\n";
-               $form .= '<p>' . Xml::inputLabel( $this->msg( 'booksources-isbn' )->text(), 'isbn', 'isbn', 20, $this->isbn, array( 'autofocus' => true ) );
+               $form .= '<p>' . Xml::inputLabel(
+                       $this->msg( 'booksources-isbn' )->text(),
+                       'isbn',
+                       'isbn',
+                       20,
+                       $this->isbn,
+                       array( 'autofocus' => true )
+               );
                $form .= '&#160;' . Xml::submitButton( $this->msg( 'booksources-go' )->text() ) . "</p>\n";
                $form .= Html::closeElement( 'form' ) . "\n";
                $form .= Html::closeElement( 'fieldset' ) . "\n";
index b2ddc22..1bbdbea 100644 (file)
@@ -28,7 +28,6 @@
  * @ingroup SpecialPage
  */
 class BrokenRedirectsPage extends QueryPage {
-
        function __construct( $name = 'BrokenRedirects' ) {
                parent::__construct( $name );
        }
@@ -148,7 +147,8 @@ class BrokenRedirectsPage extends QueryPage {
                        );
                }
 
-               $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage()->pipeList( $links ) )->escaped();
+               $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage()
+                       ->pipeList( $links ) )->escaped();
                $out .= " {$arr} {$to}";
 
                return $out;
index 7763166..cb9b07c 100644 (file)
@@ -38,7 +38,6 @@
  * @since 1.20
  */
 abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
-
        /**
         * CacheHelper object to which we forward the non-SpecialPage specific caching work.
         * Initialized in startCache.
@@ -142,7 +141,11 @@ abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
         * @param string|null $key
         */
        public function addCachedHTML( $computeFunction, $args = array(), $key = null ) {
-               $this->getOutput()->addHTML( $this->cacheHelper->getCachedValue( $computeFunction, $args, $key ) );
+               $this->getOutput()->addHTML( $this->cacheHelper->getCachedValue(
+                       $computeFunction,
+                       $args,
+                       $key
+               ) );
        }
 
        /**
@@ -158,7 +161,8 @@ abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
        }
 
        /**
-        * Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry.
+        * Sets the time to live for the cache, in seconds or a unix timestamp
+        * indicating the point of expiry.
         *
         * @since 1.20
         *
index 07a2a86..c57e33b 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup SpecialPage
  */
 class SpecialChangeEmail extends UnlistedSpecialPage {
-
        /**
         * Users password
         * @var string
@@ -233,13 +232,19 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                $throttleCount = LoginForm::incLoginThrottle( $user->getName() );
                if ( $throttleCount === true ) {
                        $lang = $this->getLanguage();
-                       $this->error( array( 'changeemail-throttled', $lang->formatDuration( $wgPasswordAttemptThrottle['seconds'] ) ) );
+                       $this->error( array(
+                               'changeemail-throttled',
+                               $lang->formatDuration( $wgPasswordAttemptThrottle['seconds'] )
+                       ) );
 
                        return false;
                }
 
                global $wgRequirePasswordforEmailChange;
-               if ( $wgRequirePasswordforEmailChange && !$user->checkTemporaryPassword( $pass ) && !$user->checkPassword( $pass ) ) {
+               if ( $wgRequirePasswordforEmailChange
+                       && !$user->checkTemporaryPassword( $pass )
+                       && !$user->checkPassword( $pass )
+               ) {
                        $this->error( 'wrongpassword' );
 
                        return false;
index 91d0404..f4ce882 100644 (file)
@@ -27,8 +27,8 @@
  * @ingroup SpecialPage
  */
 class SpecialChangePassword extends FormSpecialPage {
-
-       protected $mUserName, $mDomain;
+       protected $mUserName;
+       protected $mDomain;
 
        // Optional Wikitext Message to show above the password change form
        protected $mPreTextMessage = null;
@@ -178,7 +178,6 @@ class SpecialChangePassword extends FormSpecialPage {
                        return false;
                }
 
-
                if ( $request->getCheck( 'wpCancel' ) ) {
                        $titleObj = Title::newFromText( $request->getVal( 'returnto' ) );
                        if ( !$titleObj instanceof Title ) {
@@ -296,7 +295,8 @@ class SpecialChangePassword extends FormSpecialPage {
                if ( $isSelf ) {
                        // This is needed to keep the user connected since
                        // changing the password also modifies the user's token.
-                       $user->setCookies();
+                       $remember = $this->getRequest()->getCookie( 'Token' ) !== null;
+                       $user->setCookies( null, null, $remember );
                }
                $user->resetPasswordExpiration();
                $user->saveSettings();
index 6a4467c..0571d0d 100644 (file)
@@ -1055,7 +1055,8 @@ class ContribsPager extends ReverseChronologicalPager {
                        # Show user names for /newbies as there may be different users.
                        # Note that we already excluded rows with hidden user names.
                        if ( $this->contribs == 'newbie' ) {
-                               $userlink = ' . . ' . $lang->getDirMark() . Linker::userLink( $rev->getUser(), $rev->getUserText() );
+                               $userlink = ' . . ' . $lang->getDirMark()
+                                       . Linker::userLink( $rev->getUser(), $rev->getUserText() );
                                $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams(
                                        Linker::userTalkLink( $rev->getUser(), $rev->getUserText() ) )->escaped() . ' ';
                        } else {
index d781e6d..448637e 100644 (file)
  */
 class SpecialCreateAccount extends SpecialRedirectToSpecial {
        function __construct() {
-               parent::__construct( 'CreateAccount', 'Userlogin', 'signup', array( 'returnto', 'returntoquery', 'uselang' ) );
+               parent::__construct(
+                       'CreateAccount',
+                       'Userlogin',
+                       'signup',
+                       array( 'returnto', 'returntoquery', 'uselang' )
+               );
        }
 
        // No reason to hide this link on Special:Specialpages
index 0c860a5..4d1933f 100644 (file)
@@ -93,6 +93,14 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                                        $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) );
                                }
                                break;
+                       case self::EDIT_CLEAR:
+                               $out->setPageTitle( $this->msg( 'watchlistedit-clear-title' ) );
+                               $form = $this->getClearForm();
+                               if ( $form->show() ) {
+                                       $out->addHTML( $this->successMessage );
+                                       $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) );
+                               }
+                               break;
 
                        case self::EDIT_NORMAL:
                        default:
@@ -191,6 +199,18 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                return true;
        }
 
+      public function submitClear( $data ) {
+               $current = $this->getWatchlist();
+               $this->clearWatchlist();
+               $this->getUser()->invalidateCache();
+                       $this->successMessage = $this->msg( 'watchlistedit-clear-done' )->parse();
+               $this->successMessage .= ' ' . $this->msg( 'watchlistedit-clear-removed' )
+                       ->numParams( count( $current ) )->parse();
+               $this->showTitles( $current, $this->successMessage );
+
+               return true;
+}
+
        /**
         * Print out a list of linked titles
         *
@@ -204,6 +224,10 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                $talk = $this->msg( 'talkpagelinktext' )->escaped();
                // Do a batch existence check
                $batch = new LinkBatch();
+               if (count($titles) >= 100) {
+                       $output = wfMessage( 'watchlistedit-too-many' )->parse();
+                       return;
+               }
                foreach ( $titles as $title ) {
                        if ( !$title instanceof Title ) {
                                $title = Title::newFromText( $title );
@@ -611,6 +635,25 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                return $form;
        }
 
+       /**
+        * Get a form for clearing the watchlist
+        *
+        * @return HTMLForm
+        */
+       protected function getClearForm() {
+               $context = new DerivativeContext( $this->getContext() );
+               $context->setTitle( $this->getPageTitle( 'clear' ) ); // Reset subpage
+               $form = new HTMLForm( array(), $context );
+               $form->setSubmitTextMsg( 'watchlistedit-clear-submit' );
+               # Used message keys: 'accesskey-watchlistedit-clear-submit', 'tooltip-watchlistedit-clear-submit'
+               $form->setSubmitTooltip( 'watchlistedit-clear-submit' );
+               $form->setWrapperLegendMsg( 'watchlistedit-clear-legend' );
+               $form->addHeaderText( $this->msg( 'watchlistedit-clear-explain' )->parse() );
+               $form->setSubmitCallback( array( $this, 'submitClear' ) );
+
+               return $form;
+       }
+
        /**
         * Determine whether we are editing the watchlist, and if so, what
         * kind of editing operation
@@ -625,6 +668,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                switch ( $mode ) {
                        case 'clear':
                        case self::EDIT_CLEAR:
+                               return self::EDIT_CLEAR;
                        case 'raw':
                        case self::EDIT_RAW:
                                return self::EDIT_RAW;
@@ -651,6 +695,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        'view' => array( 'Watchlist', false ),
                        'edit' => array( 'EditWatchlist', false ),
                        'raw' => array( 'EditWatchlist', 'raw' ),
+                       'clear' => array( 'EditWatchlist', 'clear' ),
                );
 
                foreach ( $modes as $mode => $arr ) {
@@ -669,10 +714,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
        }
 }
 
-# B/C since 1.18
-class WatchlistEditor extends SpecialEditWatchlist {
-}
-
 /**
  * Extend HTMLForm purely so we can have a more sane way of getting the section headers
  */
index 91ef797..14d671c 100644 (file)
@@ -163,6 +163,11 @@ class MovePageForm extends UnlistedSpecialPage {
                                        "<div class=\"error mw-moveuserpage-warning\">\n$1\n</div>",
                                        'moveuserpage-warning'
                                );
+                       } elseif ( $this->oldTitle->getNamespace() == NS_CATEGORY ) {
+                               $out->wrapWikiMsg(
+                                       "<div class=\"error mw-movecategorypage-warning\">\n$1\n</div>",
+                                       'movecategorypage-warning'
+                               );
                        }
 
                        $out->addWikiMsg( $wgFixDoubleRedirects ?
index 1d06071..6891b16 100644 (file)
@@ -183,7 +183,7 @@ class NewFilesPager extends ReverseChronologicalPager {
                        ),
                        'showbots' => array(
                                'type' => 'check',
-                               'label' => $this->msg( 'showhidebots', $this->msg( 'show' )->plain() )->escaped(),
+                               'label-message' => 'newimages-showbots',
                                'name' => 'showbots',
                        ),
                        'limit' => array(
index 4edf33c..3cda8c6 100644 (file)
@@ -55,7 +55,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        /** @var array UI Labels about the current type */
        private $typeLabels;
 
-       /** @var RevDel_List RevDel_List object, storing the list of items to be deleted/undeleted */
+       /** @var RevDelList RevDelList object, storing the list of items to be deleted/undeleted */
        private $revDelList;
 
        /** @var bool Whether user is allowed to perform the action */
@@ -336,7 +336,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
        /**
         * Get the list object for this request
-        * @return RevDel_List
+        * @return RevDelList
         */
        protected function getList() {
                if ( is_null( $this->revDelList ) ) {
@@ -606,7 +606,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        }
 
        /**
-        * Do the write operations. Simple wrapper for RevDel_*List::setVisibility().
+        * Do the write operations. Simple wrapper for RevDel*List::setVisibility().
         * @param int $bitfield
         * @param string $reason
         * @param Title $title
index 6eee861..c2b5f9b 100644 (file)
@@ -259,8 +259,6 @@ class SpecialSearch extends SpecialPage {
 
                // did you mean... suggestions
                if ( $showSuggestion && $textMatches && !$textStatus && $textMatches->hasSuggestion() ) {
-                       $st = SpecialPage::getTitleFor( 'Search' );
-
                        # mirror Go/Search behavior of original request ..
                        $didYouMeanParams = array( 'search' => $textMatches->getSuggestionQuery() );
 
@@ -280,7 +278,7 @@ class SpecialSearch extends SpecialPage {
                        }
 
                        $suggestLink = Linker::linkKnown(
-                               $st,
+                               $this->getPageTitle(),
                                $suggestionSnippet,
                                array(),
                                $stParams
@@ -651,7 +649,6 @@ class SpecialSearch extends SpecialPage {
                // link to related articles if supported
                $related = '';
                if ( $result->hasRelated() ) {
-                       $st = SpecialPage::getTitleFor( 'Search' );
                        $stParams = array_merge(
                                $this->powerSearchOptions(),
                                array(
@@ -662,7 +659,7 @@ class SpecialSearch extends SpecialPage {
                        );
 
                        $related = ' -- ' . Linker::linkKnown(
-                               $st,
+                               $this->getPageTitle(),
                                $this->msg( 'search-relatedarticle' )->text(),
                                array(),
                                $stParams
index ac6aaf6..797543f 100644 (file)
@@ -82,14 +82,14 @@ class SpecialUnblock extends SpecialPage {
                $fields = array(
                        'Target' => array(
                                'type' => 'text',
-                               'label-message' => 'ipadressorusername',
+                               'label-message' => 'ipaddressorusername',
                                'tabindex' => '1',
                                'size' => '45',
                                'required' => true,
                        ),
                        'Name' => array(
                                'type' => 'info',
-                               'label-message' => 'ipadressorusername',
+                               'label-message' => 'ipaddressorusername',
                        ),
                        'Reason' => array(
                                'type' => 'text',
index 4006e49..5ce2812 100644 (file)
@@ -435,7 +435,11 @@ class LoginForm extends SpecialPage {
 
                // Normalize the name so that silly things don't cause "invalid username"
                // errors. User::newFromName does some rather strict checking, rejecting
-               // e.g. leading/trailing/multiple spaces.
+               // e.g. leading/trailing/multiple spaces. But first we need to reject
+               // usernames that would be treated as titles with a fragment part.
+               if ( strpos( $this->mUsername, '#' ) !== false ) {
+                       return Status::newFatal( 'noname' );
+               }
                $title = Title::makeTitleSafe( NS_USER, $this->mUsername );
                if ( !is_object( $title ) ) {
                        return Status::newFatal( 'noname' );
index e61d17a..41847dc 100644 (file)
@@ -1113,6 +1113,15 @@ class SpecialVersion extends SpecialPage {
                return $repo->getHeadSHA1();
        }
 
+       /**
+        * @param string $dir Directory of the git checkout
+        * @return bool|string Branch currently checked out
+        */
+       public static function getGitCurrentBranch( $dir ) {
+               $repo = new GitInfo( $dir );
+               return $repo->getCurrentBranch();
+       }
+
        /**
         * Get the list of entry points and their URLs
         * @return string Wikitext
index fc39ef5..bae5ab3 100644 (file)
@@ -50,6 +50,8 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                if ( $mode !== false ) {
                        if ( $mode === SpecialEditWatchlist::EDIT_RAW ) {
                                $title = SpecialPage::getTitleFor( 'EditWatchlist', 'raw' );
+                       } elseif ( $mode === SpecialEditWatchlist::EDIT_CLEAR ) {
+                                $title = SpecialPage::getTitleFor( 'EditWatchlist', 'clear' );
                        } else {
                                $title = SpecialPage::getTitleFor( 'EditWatchlist' );
                        }
index d5b8d8b..33b2400 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+// @codingStandardsIgnoreFile
 /**
  * Template used when there is no LocalSettings.php file.
  *
index 1c8bbd1..9118701 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+// @codingStandardsIgnoreFile
 /**
  * Html form for account creation (since 1.22 with VForm appearance).
  *
@@ -22,7 +23,6 @@
  */
 
 class UsercreateTemplate extends BaseTemplate {
-
        /**
         * Extensions (AntiSpoof and TitleBlacklist) call this in response to
         * UserCreateForm hook to add checkboxes to the create account form.
index 29908d7..0aad07d 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+// @codingStandardsIgnoreFile
 /**
  * Html form for user login (since 1.22 with VForm appearance).
  *
index 746c16d..bef80be 100644 (file)
@@ -44,7 +44,13 @@ abstract class UploadBase {
        protected $mBlackListedExtensions;
        protected $mJavaDetected, $mSVGNSError;
 
-       protected static $safeXmlEncodings = array( 'UTF-8', 'ISO-8859-1', 'ISO-8859-2', 'UTF-16', 'UTF-32' );
+       protected static $safeXmlEncodings = array(
+               'UTF-8',
+               'ISO-8859-1',
+               'ISO-8859-2',
+               'UTF-16',
+               'UTF-32'
+       );
 
        const SUCCESS = 0;
        const OK = 0;
@@ -120,11 +126,12 @@ abstract class UploadBase {
                                return $permission;
                        }
                }
+
                return true;
        }
 
        // Upload handlers. Should probably just be a global.
-       static $uploadHandlers = array( 'Stash', 'File', 'Url' );
+       private static $uploadHandlers = array( 'Stash', 'File', 'Url' );
 
        /**
         * Create a form of UploadBase depending on wpSourceType and initializes it
@@ -167,6 +174,7 @@ abstract class UploadBase {
                $handler = new $className;
 
                $handler->initializeFromRequest( $request );
+
                return $handler;
        }
 
@@ -179,7 +187,8 @@ abstract class UploadBase {
                return false;
        }
 
-       public function __construct() {}
+       public function __construct() {
+       }
 
        /**
         * Returns the upload type. Should be overridden by child classes
@@ -256,8 +265,9 @@ abstract class UploadBase {
                wfProfileIn( __METHOD__ );
                $repo = RepoGroup::singleton()->getLocalRepo();
                if ( $repo->isVirtualUrl( $srcPath ) ) {
-                       // @todo just make uploads work with storage paths
-                       // UploadFromStash loads files via virtual URLs
+                       /** @todo Just make uploads work with storage paths UploadFromStash
+                        *  loads files via virtual URLs.
+                        */
                        $tmpFile = $repo->getLocalCopy( $srcPath );
                        if ( $tmpFile ) {
                                $tmpFile->bind( $this ); // keep alive with $this
@@ -267,6 +277,7 @@ abstract class UploadBase {
                        $path = $srcPath;
                }
                wfProfileOut( __METHOD__ );
+
                return $path;
        }
 
@@ -282,6 +293,7 @@ abstract class UploadBase {
                 */
                if ( $this->isEmptyFile() ) {
                        wfProfileOut( __METHOD__ );
+
                        return array( 'status' => self::EMPTY_FILE );
                }
 
@@ -291,6 +303,7 @@ abstract class UploadBase {
                $maxSize = self::getMaxUploadSize( $this->getSourceType() );
                if ( $this->mFileSize > $maxSize ) {
                        wfProfileOut( __METHOD__ );
+
                        return array(
                                'status' => self::FILE_TOO_LARGE,
                                'max' => $maxSize,
@@ -305,6 +318,7 @@ abstract class UploadBase {
                $verification = $this->verifyFile();
                if ( $verification !== true ) {
                        wfProfileOut( __METHOD__ );
+
                        return array(
                                'status' => self::VERIFICATION_ERROR,
                                'details' => $verification
@@ -317,6 +331,7 @@ abstract class UploadBase {
                $result = $this->validateName();
                if ( $result !== true ) {
                        wfProfileOut( __METHOD__ );
+
                        return $result;
                }
 
@@ -325,10 +340,12 @@ abstract class UploadBase {
                        array( $this->mDestName, $this->mTempPath, &$error ) )
                ) {
                        wfProfileOut( __METHOD__ );
+
                        return array( 'status' => self::HOOK_ABORTED, 'error' => $error );
                }
 
                wfProfileOut( __METHOD__ );
+
                return array( 'status' => self::OK );
        }
 
@@ -351,6 +368,7 @@ abstract class UploadBase {
                                        $result['blacklistedExt'] = $this->mBlackListedExtensions;
                                }
                        }
+
                        return $result;
                }
                $this->mDestName = $this->getLocalFile()->getName();
@@ -374,6 +392,7 @@ abstract class UploadBase {
                        global $wgMimeTypeBlacklist;
                        if ( $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
                                wfProfileOut( __METHOD__ );
+
                                return array( 'filetype-badmime', $mime );
                        }
 
@@ -388,12 +407,14 @@ abstract class UploadBase {
                        foreach ( $ieTypes as $ieType ) {
                                if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
                                        wfProfileOut( __METHOD__ );
+
                                        return array( 'filetype-bad-ie-mime', $ieType );
                                }
                        }
                }
 
                wfProfileOut( __METHOD__ );
+
                return true;
        }
 
@@ -409,6 +430,7 @@ abstract class UploadBase {
                $status = $this->verifyPartialFile();
                if ( $status !== true ) {
                        wfProfileOut( __METHOD__ );
+
                        return $status;
                }
 
@@ -419,6 +441,7 @@ abstract class UploadBase {
                        # XXX: Missing extension will be caught by validateName() via getTitle()
                        if ( $this->mFinalExtension != '' && !$this->verifyExtension( $mime, $this->mFinalExtension ) ) {
                                wfProfileOut( __METHOD__ );
+
                                return array( 'filetype-mime-mismatch', $this->mFinalExtension, $mime );
                        }
                }
@@ -429,6 +452,7 @@ abstract class UploadBase {
                        if ( !$handlerStatus->isOK() ) {
                                $errors = $handlerStatus->getErrorsArray();
                                wfProfileOut( __METHOD__ );
+
                                return reset( $errors );
                        }
                }
@@ -436,11 +460,13 @@ abstract class UploadBase {
                wfRunHooks( 'UploadVerifyFile', array( $this, $mime, &$status ) );
                if ( $status !== true ) {
                        wfProfileOut( __METHOD__ );
+
                        return $status;
                }
 
                wfDebug( __METHOD__ . ": all clear; passing.\n" );
                wfProfileOut( __METHOD__ );
+
                return true;
        }
 
@@ -466,6 +492,7 @@ abstract class UploadBase {
                $status = $this->verifyMimeType( $mime );
                if ( $status !== true ) {
                        wfProfileOut( __METHOD__ );
+
                        return $status;
                }
 
@@ -473,12 +500,14 @@ abstract class UploadBase {
                if ( !$wgDisableUploadScriptChecks ) {
                        if ( self::detectScript( $this->mTempPath, $mime, $this->mFinalExtension ) ) {
                                wfProfileOut( __METHOD__ );
+
                                return array( 'uploadscripted' );
                        }
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
                                $svgStatus = $this->detectScriptInSvg( $this->mTempPath );
                                if ( $svgStatus !== false ) {
                                        wfProfileOut( __METHOD__ );
+
                                        return $svgStatus;
                                }
                        }
@@ -495,11 +524,13 @@ abstract class UploadBase {
                                $error = reset( $errors );
                                if ( $error[0] !== 'zip-wrong-format' ) {
                                        wfProfileOut( __METHOD__ );
+
                                        return $error;
                                }
                        }
                        if ( $this->mJavaDetected ) {
                                wfProfileOut( __METHOD__ );
+
                                return array( 'uploadjava' );
                        }
                }
@@ -508,10 +539,12 @@ abstract class UploadBase {
                $virus = $this->detectVirus( $this->mTempPath );
                if ( $virus ) {
                        wfProfileOut( __METHOD__ );
+
                        return array( 'uploadvirus', $virus );
                }
 
                wfProfileOut( __METHOD__ );
+
                return true;
        }
 
@@ -541,8 +574,10 @@ abstract class UploadBase {
        }
 
        /**
-        * Alias for verifyTitlePermissions. The function was originally 'verifyPermissions'
-        * but that suggests it's checking the user, when it's really checking the title + user combination.
+        * Alias for verifyTitlePermissions. The function was originally
+        * 'verifyPermissions', but that suggests it's checking the user, when it's
+        * really checking the title + user combination.
+        *
         * @param User $user User object to verify the permissions against
         * @return mixed An array as returned by getUserPermissionsErrors or true
         *   in case the user has proper permissions.
@@ -581,6 +616,7 @@ abstract class UploadBase {
                if ( $permErrors || $permErrorsUpload || $permErrorsCreate ) {
                        $permErrors = array_merge( $permErrors, wfArrayDiff2( $permErrorsUpload, $permErrors ) );
                        $permErrors = array_merge( $permErrors, wfArrayDiff2( $permErrorsCreate, $permErrors ) );
+
                        return $permErrors;
                }
 
@@ -618,7 +654,8 @@ abstract class UploadBase {
                if ( $this->mDesiredDestName != $filename && $comparableName != $filename ) {
                        $warnings['badfilename'] = $filename;
                        // Debugging for bug 62241
-                       wfDebugLog( 'upload', "Filename: '$filename', mDesiredDestName: '$this->mDesiredDestName', comparableName: '$comparableName'" );
+                       wfDebugLog( 'upload', "Filename: '$filename', mDesiredDestName: "
+                               . "'$this->mDesiredDestName', comparableName: '$comparableName'" );
                }
 
                // Check whether the file extension is on the unwanted list
@@ -670,6 +707,7 @@ abstract class UploadBase {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $warnings;
        }
 
@@ -699,12 +737,17 @@ abstract class UploadBase {
 
                if ( $status->isGood() ) {
                        if ( $watch ) {
-                               WatchAction::doWatch( $this->getLocalFile()->getTitle(), $user, WatchedItem::IGNORE_USER_RIGHTS );
+                               WatchAction::doWatch(
+                                       $this->getLocalFile()->getTitle(),
+                                       $user,
+                                       WatchedItem::IGNORE_USER_RIGHTS
+                               );
                        }
                        wfRunHooks( 'UploadComplete', array( &$this ) );
                }
 
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -733,6 +776,7 @@ abstract class UploadBase {
                if ( strlen( $this->mFilteredName ) > 240 ) {
                        $this->mTitleError = self::FILENAME_TOO_LONG;
                        $this->mTitle = null;
+
                        return $this->mTitle;
                }
 
@@ -747,6 +791,7 @@ abstract class UploadBase {
                if ( is_null( $nt ) ) {
                        $this->mTitleError = self::ILLEGAL_FILENAME;
                        $this->mTitle = null;
+
                        return $this->mTitle;
                }
                $this->mFilteredName = $nt->getDBkey();
@@ -789,13 +834,16 @@ abstract class UploadBase {
                if ( $this->mFinalExtension == '' ) {
                        $this->mTitleError = self::FILETYPE_MISSING;
                        $this->mTitle = null;
+
                        return $this->mTitle;
                } elseif ( $blackListedExtensions ||
-                               ( $wgCheckFileExtensions && $wgStrictFileExtensions &&
-                                       !$this->checkFileExtension( $this->mFinalExtension, $wgFileExtensions ) ) ) {
+                       ( $wgCheckFileExtensions && $wgStrictFileExtensions &&
+                               !$this->checkFileExtension( $this->mFinalExtension, $wgFileExtensions ) )
+               ) {
                        $this->mBlackListedExtensions = $blackListedExtensions;
                        $this->mTitleError = self::FILETYPE_BADTYPE;
                        $this->mTitle = null;
+
                        return $this->mTitle;
                }
 
@@ -803,13 +851,15 @@ abstract class UploadBase {
                if ( wfIsWindows() && !preg_match( '/^[\x0-\x7f]*$/', $nt->getText() ) ) {
                        $this->mTitleError = self::WINDOWS_NONASCII_FILENAME;
                        $this->mTitle = null;
+
                        return $this->mTitle;
                }
 
                # If there was more than one "extension", reassemble the base
                # filename to prevent bogus complaints about length
                if ( count( $ext ) > 1 ) {
-                       for ( $i = 0; $i < count( $ext ) - 1; $i++ ) {
+                       $iterations = count( $ext ) - 1;
+                       for ( $i = 0; $i < $iterations; $i++ ) {
                                $partname .= '.' . $ext[$i];
                        }
                }
@@ -817,10 +867,12 @@ abstract class UploadBase {
                if ( strlen( $partname ) < 1 ) {
                        $this->mTitleError = self::MIN_LENGTH_PARTNAME;
                        $this->mTitle = null;
+
                        return $this->mTitle;
                }
 
                $this->mTitle = $nt;
+
                return $this->mTitle;
        }
 
@@ -834,17 +886,21 @@ abstract class UploadBase {
                        $nt = $this->getTitle();
                        $this->mLocalFile = is_null( $nt ) ? null : wfLocalFile( $nt );
                }
+
                return $this->mLocalFile;
        }
 
        /**
-        * If the user does not supply all necessary information in the first upload form submission (either by accident or
-        * by design) then we may want to stash the file temporarily, get more information, and publish the file later.
+        * If the user does not supply all necessary information in the first upload
+        * form submission (either by accident or by design) then we may want to
+        * stash the file temporarily, get more information, and publish the file
+        * later.
         *
-        * This method will stash a file in a temporary directory for later processing, and save the necessary descriptive info
-        * into the database.
-        * This method returns the file object, which also has a 'fileKey' property which can be passed through a form or
-        * API request to find this stashed file again.
+        * This method will stash a file in a temporary directory for later
+        * processing, and save the necessary descriptive info into the database.
+        * This method returns the file object, which also has a 'fileKey' property
+        * which can be passed through a form or API request to find this stashed
+        * file again.
         *
         * @param User $user
         * @return UploadStashFile Stashed file
@@ -858,11 +914,13 @@ abstract class UploadBase {
                $this->mLocalFile = $file;
 
                wfProfileOut( __METHOD__ );
+
                return $file;
        }
 
        /**
-        * Stash a file in a temporary directory, returning a key which can be used to find the file again. See stashFile().
+        * Stash a file in a temporary directory, returning a key which can be used
+        * to find the file again. See stashFile().
         *
         * @return string File key
         */
@@ -906,6 +964,7 @@ abstract class UploadBase {
        public static function splitExtensions( $filename ) {
                $bits = explode( '.', $filename );
                $basename = array_shift( $bits );
+
                return array( $basename, $bits );
        }
 
@@ -947,10 +1006,12 @@ abstract class UploadBase {
                        if ( !$magic->isRecognizableExtension( $extension ) ) {
                                wfDebug( __METHOD__ . ": passing file with unknown detected mime type; " .
                                        "unrecognized extension '$extension', can't verify\n" );
+
                                return true;
                        } else {
                                wfDebug( __METHOD__ . ": rejecting file with unknown detected mime type; " .
                                        "recognized extension '$extension', so probably invalid file\n" );
+
                                return false;
                        }
                }
@@ -960,19 +1021,22 @@ abstract class UploadBase {
                if ( $match === null ) {
                        if ( $magic->getTypesForExtension( $extension ) !== null ) {
                                wfDebug( __METHOD__ . ": No extension known for $mime, but we know a mime for $extension\n" );
+
                                return false;
                        } else {
                                wfDebug( __METHOD__ . ": no file extension known for mime type $mime, passing file\n" );
+
                                return true;
                        }
                } elseif ( $match === true ) {
                        wfDebug( __METHOD__ . ": mime type $mime matches extension $extension, passing file\n" );
 
-                       #TODO: if it's a bitmap, make sure PHP or ImageMagic resp. can handle it!
+                       /** @todo If it's a bitmap, make sure PHP or ImageMagick resp. can handle it! */
                        return true;
-
                } else {
-                       wfDebug( __METHOD__ . ": mime type $mime mismatches file extension $extension, rejecting file\n" );
+                       wfDebug( __METHOD__
+                               . ": mime type $mime mismatches file extension $extension, rejecting file\n" );
+
                        return false;
                }
        }
@@ -1007,6 +1071,7 @@ abstract class UploadBase {
 
                if ( !$chunk ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                }
 
@@ -1025,12 +1090,13 @@ abstract class UploadBase {
 
                $chunk = trim( $chunk );
 
-               # @todo FIXME: Convert from UTF-16 if necessary!
+               /** @todo FIXME: Convert from UTF-16 if necessary! */
                wfDebug( __METHOD__ . ": checking for embedded scripts and HTML stuff\n" );
 
                # check for HTML doctype
                if ( preg_match( "/<!DOCTYPE *X?HTML/i", $chunk ) ) {
                        wfProfileOut( __METHOD__ );
+
                        return true;
                }
 
@@ -1039,6 +1105,7 @@ abstract class UploadBase {
                if ( $extension == 'svg' || strpos( $mime, 'image/svg' ) === 0 ) {
                        if ( self::checkXMLEncodingMissmatch( $file ) ) {
                                wfProfileOut( __METHOD__ );
+
                                return true;
                        }
                }
@@ -1062,7 +1129,7 @@ abstract class UploadBase {
                        '<a href',
                        '<body',
                        '<head',
-                       '<html',   #also in safari
+                       '<html', #also in safari
                        '<img',
                        '<pre',
                        '<script', #also in safari
@@ -1077,6 +1144,7 @@ abstract class UploadBase {
                        if ( false !== strpos( $chunk, $tag ) ) {
                                wfDebug( __METHOD__ . ": found something that may make it be mistaken for html: $tag\n" );
                                wfProfileOut( __METHOD__ );
+
                                return true;
                        }
                }
@@ -1092,6 +1160,7 @@ abstract class UploadBase {
                if ( preg_match( '!type\s*=\s*[\'"]?\s*(?:\w*/)?(?:ecma|java)!sim', $chunk ) ) {
                        wfDebug( __METHOD__ . ": found script types\n" );
                        wfProfileOut( __METHOD__ );
+
                        return true;
                }
 
@@ -1099,6 +1168,7 @@ abstract class UploadBase {
                if ( preg_match( '!(?:href|src|data)\s*=\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) ) {
                        wfDebug( __METHOD__ . ": found html-style script urls\n" );
                        wfProfileOut( __METHOD__ );
+
                        return true;
                }
 
@@ -1106,11 +1176,13 @@ abstract class UploadBase {
                if ( preg_match( '!url\s*\(\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) ) {
                        wfDebug( __METHOD__ . ": found css-style script urls\n" );
                        wfProfileOut( __METHOD__ );
+
                        return true;
                }
 
                wfDebug( __METHOD__ . ": no scripts found\n" );
                wfProfileOut( __METHOD__ );
+
                return false;
        }
 
@@ -1131,16 +1203,19 @@ abstract class UploadBase {
                                && !in_array( strtoupper( $encMatch[1] ), self::$safeXmlEncodings )
                        ) {
                                wfDebug( __METHOD__ . ": Found unsafe XML encoding '{$encMatch[1]}'\n" );
+
                                return true;
                        }
                } elseif ( preg_match( "!<\?xml\b!si", $contents ) ) {
                        // Start of XML declaration without an end in the first $wgSVGMetadataCutoff
                        // bytes. There shouldn't be a legitimate reason for this to happen.
                        wfDebug( __METHOD__ . ": Unmatched XML declaration start\n" );
+
                        return true;
                } elseif ( substr( $contents, 0, 4 ) == "\x4C\x6F\xA7\x94" ) {
                        // EBCDIC encoded XML
                        wfDebug( __METHOD__ . ": EBCDIC Encoded XML\n" );
+
                        return true;
                }
 
@@ -1151,17 +1226,19 @@ abstract class UploadBase {
                        wfSuppressWarnings();
                        $str = iconv( $encoding, 'UTF-8', $contents );
                        wfRestoreWarnings();
-                       if ( $str != '' && preg_match( "!<\?xml\b(.*?)\?>!si", $str, $matches ) ) {
+                       if ( $str != '' && preg_match( "!<\?xml\b(.*?)\?>!si", $str, $matches ) ) {
                                if ( preg_match( $encodingRegex, $matches[1], $encMatch )
                                        && !in_array( strtoupper( $encMatch[1] ), self::$safeXmlEncodings )
                                ) {
                                        wfDebug( __METHOD__ . ": Found unsafe XML encoding '{$encMatch[1]}'\n" );
+
                                        return true;
                                }
                        } elseif ( $str != '' && preg_match( "!<\?xml\b!si", $str ) ) {
                                // Start of XML declaration without an end in the first $wgSVGMetadataCutoff
                                // bytes. There shouldn't be a legitimate reason for this to happen.
                                wfDebug( __METHOD__ . ": Unmatched XML declaration start\n" );
+
                                return true;
                        }
                }
@@ -1188,8 +1265,10 @@ abstract class UploadBase {
                        if ( $this->mSVGNSError ) {
                                return array( 'uploadscriptednamespace', $this->mSVGNSError );
                        }
+
                        return array( 'uploadscripted' );
                }
+
                return false;
        }
 
@@ -1204,6 +1283,7 @@ abstract class UploadBase {
                if ( preg_match( '/xml-stylesheet/i', $target ) ) {
                        return true;
                }
+
                return false;
        }
 
@@ -1255,8 +1335,9 @@ abstract class UploadBase {
 
                if ( !in_array( $namespace, $validNamespaces ) ) {
                        wfDebug( __METHOD__ . ": Non-svg namespace '$namespace' in uploaded file.\n" );
-                       // @TODO return a status object to a closure in XmlTypeCheck, for MW1.21+
+                       /** @todo Return a status object to a closure in XmlTypeCheck, for MW1.21+ */
                        $this->mSVGNSError = $namespace;
+
                        return true;
                }
 
@@ -1265,24 +1346,29 @@ abstract class UploadBase {
                 */
                if ( $strippedElement == 'script' ) {
                        wfDebug( __METHOD__ . ": Found script element '$element' in uploaded file.\n" );
+
                        return true;
                }
 
-               # e.g., <svg xmlns="http://www.w3.org/2000/svg"> <handler xmlns:ev="http://www.w3.org/2001/xml-events" ev:event="load">alert(1)</handler> </svg>
+               # e.g., <svg xmlns="http://www.w3.org/2000/svg">
+               #  <handler xmlns:ev="http://www.w3.org/2001/xml-events" ev:event="load">alert(1)</handler> </svg>
                if ( $strippedElement == 'handler' ) {
                        wfDebug( __METHOD__ . ": Found scriptable element '$element' in uploaded file.\n" );
+
                        return true;
                }
 
                # SVG reported in Feb '12 that used xml:stylesheet to generate javascript block
                if ( $strippedElement == 'stylesheet' ) {
                        wfDebug( __METHOD__ . ": Found scriptable element '$element' in uploaded file.\n" );
+
                        return true;
                }
 
                # Block iframes, in case they pass the namespace check
                if ( $strippedElement == 'iframe' ) {
                        wfDebug( __METHOD__ . ": iframe in uploaded file.\n" );
+
                        return true;
                }
 
@@ -1291,69 +1377,105 @@ abstract class UploadBase {
                        $value = strtolower( $value );
 
                        if ( substr( $stripped, 0, 2 ) == 'on' ) {
-                               wfDebug( __METHOD__ . ": Found event-handler attribute '$attrib'='$value' in uploaded file.\n" );
+                               wfDebug( __METHOD__
+                                       . ": Found event-handler attribute '$attrib'='$value' in uploaded file.\n" );
+
                                return true;
                        }
 
                        # href with javascript target
                        if ( $stripped == 'href' && strpos( strtolower( $value ), 'javascript:' ) !== false ) {
-                               wfDebug( __METHOD__ . ": Found script in href attribute '$attrib'='$value' in uploaded file.\n" );
+                               wfDebug( __METHOD__
+                                       . ": Found script in href attribute '$attrib'='$value' in uploaded file.\n" );
+
                                return true;
                        }
 
                        # href with embedded svg as target
                        if ( $stripped == 'href' && preg_match( '!data:[^,]*image/svg[^,]*,!sim', $value ) ) {
-                               wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found href to embedded svg "
+                                       . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+
                                return true;
                        }
 
                        # href with embedded (text/xml) svg as target
                        if ( $stripped == 'href' && preg_match( '!data:[^,]*text/xml[^,]*,!sim', $value ) ) {
-                               wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found href to embedded svg "
+                                       . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+
                                return true;
                        }
 
                        # use set/animate to add event-handler attribute to parent
-                       if ( ( $strippedElement == 'set' || $strippedElement == 'animate' ) && $stripped == 'attributename' && substr( $value, 0, 2 ) == 'on' ) {
-                               wfDebug( __METHOD__ . ": Found svg setting event-handler attribute with \"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
+                       if ( ( $strippedElement == 'set' || $strippedElement == 'animate' )
+                               && $stripped == 'attributename'
+                               && substr( $value, 0, 2 ) == 'on'
+                       ) {
+                               wfDebug( __METHOD__ . ": Found svg setting event-handler attribute with "
+                                       . "\"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
+
                                return true;
                        }
 
                        # use set to add href attribute to parent element
-                       if ( $strippedElement == 'set' && $stripped == 'attributename' && strpos( $value, 'href' ) !== false ) {
+                       if ( $strippedElement == 'set'
+                               && $stripped == 'attributename'
+                               && strpos( $value, 'href' ) !== false
+                       ) {
                                wfDebug( __METHOD__ . ": Found svg setting href attribute '$value' in uploaded file.\n" );
+
                                return true;
                        }
 
                        # use set to add a remote / data / script target to an element
-                       if ( $strippedElement == 'set' && $stripped == 'to' && preg_match( '!(http|https|data|script):!sim', $value ) ) {
+                       if ( $strippedElement == 'set'
+                               && $stripped == 'to'
+                               && preg_match( '!(http|https|data|script):!sim', $value )
+                       ) {
                                wfDebug( __METHOD__ . ": Found svg setting attribute to '$value' in uploaded file.\n" );
+
                                return true;
                        }
 
                        # use handler attribute with remote / data / script
                        if ( $stripped == 'handler' && preg_match( '!(http|https|data|script):!sim', $value ) ) {
-                               wfDebug( __METHOD__ . ": Found svg setting handler with remote/data/script '$attrib'='$value' in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found svg setting handler with remote/data/script "
+                                       . "'$attrib'='$value' in uploaded file.\n" );
+
                                return true;
                        }
 
                        # use CSS styles to bring in remote code
                        # catch url("http:..., url('http:..., url(http:..., but not url("#..., url('#..., url(#....
-                       if ( $stripped == 'style' && preg_match_all( '!((?:font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke)\s*:\s*url\s*\(\s*["\']?\s*[^#]+.*?\))!sim', $value, $matches ) ) {
+                       $tagsList = "font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke";
+                       if ( $stripped == 'style'
+                               && preg_match_all(
+                                       '!((?:' . $tagsList . ')\s*:\s*url\s*\(\s*["\']?\s*[^#]+.*?\))!sim',
+                                       $value,
+                                       $matches
+                               )
+                       ) {
                                foreach ( $matches[1] as $match ) {
-                                       if ( !preg_match( '!(?:font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke)\s*:\s*url\s*\(\s*(#|\'#|"#)!sim', $match ) ) {
-                                               wfDebug( __METHOD__ . ": Found svg setting a style with remote url '$attrib'='$value' in uploaded file.\n" );
+                                       if ( !preg_match( '!(?:' . $tagsList . ')\s*:\s*url\s*\(\s*(#|\'#|"#)!sim', $match ) ) {
+                                               wfDebug( __METHOD__ . ": Found svg setting a style with "
+                                                       . "remote url '$attrib'='$value' in uploaded file.\n" );
+
                                                return true;
                                        }
                                }
                        }
 
                        # image filters can pull in url, which could be svg that executes scripts
-                       if ( $strippedElement == 'image' && $stripped == 'filter' && preg_match( '!url\s*\(!sim', $value ) ) {
-                               wfDebug( __METHOD__ . ": Found image filter with url: \"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
+                       if ( $strippedElement == 'image'
+                               && $stripped == 'filter'
+                               && preg_match( '!url\s*\(!sim', $value )
+                       ) {
+                               wfDebug( __METHOD__ . ": Found image filter with url: "
+                                       . "\"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
+
                                return true;
                        }
-
                }
 
                return false; //No scripts detected
@@ -1369,6 +1491,7 @@ abstract class UploadBase {
                $parts = explode( ':', strtolower( $element ) );
                $name = array_pop( $parts );
                $ns = implode( ':', $parts );
+
                return array( $ns, $name );
        }
 
@@ -1379,6 +1502,7 @@ abstract class UploadBase {
        private function stripXmlNamespace( $name ) {
                // 'http://www.w3.org/2000/svg:script' -> 'script'
                $parts = explode( ':', strtolower( $name ) );
+
                return array_pop( $parts );
        }
 
@@ -1399,6 +1523,7 @@ abstract class UploadBase {
                if ( !$wgAntivirus ) {
                        wfDebug( __METHOD__ . ": virus scanner disabled\n" );
                        wfProfileOut( __METHOD__ );
+
                        return null;
                }
 
@@ -1407,6 +1532,7 @@ abstract class UploadBase {
                        $wgOut->wrapWikiMsg( "<div class=\"error\">\n$1\n</div>",
                                array( 'virus-badscanner', $wgAntivirus ) );
                        wfProfileOut( __METHOD__ );
+
                        return wfMessage( 'virus-unknownscanner' )->text() . " $wgAntivirus";
                }
 
@@ -1451,7 +1577,9 @@ abstract class UploadBase {
                        # scan failed (code was mapped to false by $exitCodeMap)
                        wfDebug( __METHOD__ . ": failed to scan $file (code $exitCode).\n" );
 
-                       $output = $wgAntivirusRequired ? wfMessage( 'virus-scanfailed', array( $exitCode ) )->text() : null;
+                       $output = $wgAntivirusRequired
+                               ? wfMessage( 'virus-scanfailed', array( $exitCode ) )->text()
+                               : null;
                } elseif ( $mappedCode === AV_SCAN_ABORTED ) {
                        # scan failed because filetype is unknown (probably imune)
                        wfDebug( __METHOD__ . ": unsupported file type $file (code $exitCode).\n" );
@@ -1478,6 +1606,7 @@ abstract class UploadBase {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $output;
        }
 
@@ -1589,7 +1718,7 @@ abstract class UploadBase {
 
                // Check for files with the same name but a different extension
                $similarFiles = RepoGroup::singleton()->getLocalRepo()->findFilesByPrefix(
-                               "{$partname}.", 1 );
+                       "{$partname}.", 1 );
                if ( count( $similarFiles ) ) {
                        return array(
                                'warning' => 'exists-normalized',
@@ -1600,7 +1729,10 @@ abstract class UploadBase {
 
                if ( self::isThumbName( $file->getName() ) ) {
                        # Check for filenames like 50px- or 180px-, these are mostly thumbnails
-                       $nt_thb = Title::newFromText( substr( $partname, strpos( $partname, '-' ) + 1 ) . '.' . $extension, NS_FILE );
+                       $nt_thb = Title::newFromText(
+                               substr( $partname, strpos( $partname, '-' ) + 1 ) . '.' . $extension,
+                               NS_FILE
+                       );
                        $file_thb = wfLocalFile( $nt_thb );
                        if ( $file_thb->exists() ) {
                                return array(
@@ -1639,11 +1771,12 @@ abstract class UploadBase {
        public static function isThumbName( $filename ) {
                $n = strrpos( $filename, '.' );
                $partname = $n ? substr( $filename, 0, $n ) : $filename;
+
                return (
-                                       substr( $partname, 3, 3 ) == 'px-' ||
-                                       substr( $partname, 2, 3 ) == 'px-'
-                               ) &&
-                               preg_match( "/[0-9]{2}/", substr( $partname, 0, 2 ) );
+                       substr( $partname, 3, 3 ) == 'px-' ||
+                       substr( $partname, 2, 3 ) == 'px-'
+               ) &&
+               preg_match( "/[0-9]{2}/", substr( $partname, 0, 2 ) );
        }
 
        /**
@@ -1670,23 +1803,28 @@ abstract class UploadBase {
                                $blacklist[] = trim( $line );
                        }
                }
+
                return $blacklist;
        }
 
        /**
         * Gets image info about the file just uploaded.
         *
-        * Also has the effect of setting metadata to be an 'indexed tag name' in returned API result if
-        * 'metadata' was requested. Oddly, we have to pass the "result" object down just so it can do that
-        * with the appropriate format, presumably.
+        * Also has the effect of setting metadata to be an 'indexed tag name' in
+        * returned API result if 'metadata' was requested. Oddly, we have to pass
+        * the "result" object down just so it can do that with the appropriate
+        * format, presumably.
         *
         * @param ApiResult $result
         * @return array Image info
         */
        public function getImageInfo( $result ) {
                $file = $this->getLocalFile();
-               // TODO This cries out for refactoring. We really want to say $file->getAllInfo(); here.
-               // Perhaps "info" methods should be moved into files, and the API should just wrap them in queries.
+               /** @todo This cries out for refactoring.
+                *  We really want to say $file->getAllInfo(); here.
+                * Perhaps "info" methods should be moved into files, and the API should
+                * just wrap them in queries.
+                */
                if ( $file instanceof UploadStashFile ) {
                        $imParam = ApiQueryStashImageInfo::getPropertyNames();
                        $info = ApiQueryStashImageInfo::getInfo( $file, array_flip( $imParam ), $result );
@@ -1694,6 +1832,7 @@ abstract class UploadBase {
                        $imParam = ApiQueryImageInfo::getPropertyNames();
                        $info = ApiQueryImageInfo::getInfo( $file, array_flip( $imParam ), $result );
                }
+
                return $info;
        }
 
@@ -1704,6 +1843,7 @@ abstract class UploadBase {
        public function convertVerifyErrorToStatus( $error ) {
                $code = $error['status'];
                unset( $code['status'] );
+
                return Status::newFatal( $this->getVerificationErrorCode( $code ), $error );
        }
 
index d15ae43..6f90280 100644 (file)
@@ -87,6 +87,7 @@ class UploadFromChunks extends UploadFromFile {
 
                // Update db table to reflect initial "chunk" state
                $this->updateChunkStatus();
+
                return $this->mLocalFile;
        }
 
@@ -154,6 +155,7 @@ class UploadFromChunks extends UploadFromFile {
                if ( $ret['status'] !== UploadBase::OK ) {
                        wfDebugLog( 'fileconcatenate', "Verification failed for chunked upload" );
                        $status->fatal( $this->getVerificationErrorCode( $ret['status'] ) );
+
                        return $status;
                }
 
@@ -178,6 +180,7 @@ class UploadFromChunks extends UploadFromFile {
         */
        public function performUpload( $comment, $pageText, $watch, $user ) {
                $rv = parent::performUpload( $comment, $pageText, $watch, $user );
+
                return $rv;
        }
 
@@ -188,11 +191,11 @@ class UploadFromChunks extends UploadFromFile {
         */
        function getVirtualChunkLocation( $index ) {
                return $this->repo->getVirtualUrl( 'temp' ) .
-                               '/' .
-                               $this->repo->getHashPath(
-                                       $this->getChunkFileKey( $index )
-                               ) .
-                               $this->getChunkFileKey( $index );
+                       '/' .
+                       $this->repo->getHashPath(
+                               $this->getChunkFileKey( $index )
+                       ) .
+                       $this->getChunkFileKey( $index );
        }
 
        /**
@@ -234,6 +237,7 @@ class UploadFromChunks extends UploadFromFile {
                                $status = Status::newFatal( 'invalid-chunk-offset' );
                        }
                }
+
                return $status;
        }
 
@@ -242,7 +246,7 @@ class UploadFromChunks extends UploadFromFile {
         */
        private function updateChunkStatus() {
                wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" .
-                                       $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
+                       $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
                $dbw = $this->repo->getMasterDb();
                // Use a quick transaction since we will upload the full temp file into shared
@@ -294,6 +298,7 @@ class UploadFromChunks extends UploadFromFile {
                if ( $this->mChunkIndex !== null ) {
                        return $this->mChunkIndex;
                }
+
                return 0;
        }
 
@@ -305,6 +310,7 @@ class UploadFromChunks extends UploadFromFile {
                if ( $this->mOffset !== null ) {
                        return $this->mOffset;
                }
+
                return 0;
        }
 
@@ -325,19 +331,20 @@ class UploadFromChunks extends UploadFromFile {
                        $this->repo->getZonePath( 'temp' ) . "/{$hashPath}{$fileKey}" );
 
                // Check for error in stashing the chunk:
-               if ( ! $storeStatus->isOK() ) {
+               if ( !$storeStatus->isOK() ) {
                        $error = $storeStatus->getErrorsArray();
                        $error = reset( $error );
-                       if ( ! count( $error ) ) {
+                       if ( !count( $error ) ) {
                                $error = $storeStatus->getWarningsArray();
                                $error = reset( $error );
-                               if ( ! count( $error ) ) {
+                               if ( !count( $error ) ) {
                                        $error = array( 'unknown', 'no error recorded' );
                                }
                        }
                        throw new UploadChunkFileException( "Error storing file in '$chunkPath': " .
                                implode( '; ', $error ) );
                }
+
                return $storeStatus;
        }
 
@@ -345,6 +352,7 @@ class UploadFromChunks extends UploadFromFile {
                if ( $index === null ) {
                        $index = $this->getChunkIndex();
                }
+
                return $this->mFileKey . '.' . $index;
        }
 
index 5bc040c..3a1e8bd 100644 (file)
@@ -28,7 +28,6 @@
  * @author Bryan Tong Minh
  */
 class UploadFromFile extends UploadBase {
-
        /**
         * @var WebRequestUpload
         */
index a67fc57..b4e815f 100644 (file)
@@ -157,6 +157,7 @@ class UploadFromStash extends UploadBase {
                // replace mLocalFile with an instance of UploadStashFile, which adds some methods
                // that are useful for stashed files.
                $this->mLocalFile = parent::stashFile( $user );
+
                return $this->mLocalFile;
        }
 
@@ -187,6 +188,7 @@ class UploadFromStash extends UploadBase {
        public function performUpload( $comment, $pageText, $watch, $user ) {
                $rv = parent::performUpload( $comment, $pageText, $watch, $user );
                $this->unsaveUploadedFile();
+
                return $rv;
        }
 }
index 9ebd7a9..b605640 100644 (file)
@@ -49,6 +49,7 @@ class UploadFromUrl extends UploadBase {
                if ( !$user->isAllowed( 'upload_by_url' ) ) {
                        return 'upload_by_url';
                }
+
                return parent::isAllowed( $user );
        }
 
@@ -58,6 +59,7 @@ class UploadFromUrl extends UploadBase {
         */
        public static function isEnabled() {
                global $wgAllowCopyUploads;
+
                return $wgAllowCopyUploads && parent::isEnabled();
        }
 
@@ -103,6 +105,7 @@ class UploadFromUrl extends UploadBase {
                        }
                        */
                }
+
                return $valid;
        }
 
@@ -118,6 +121,7 @@ class UploadFromUrl extends UploadBase {
                        wfRunHooks( 'IsUploadAllowedFromUrl', array( $url, &$allowed ) );
                        self::$allowedUrls[$url] = $allowed;
                }
+
                return self::$allowedUrls[$url];
        }
 
@@ -169,6 +173,7 @@ class UploadFromUrl extends UploadBase {
                global $wgUser;
 
                $url = $request->getVal( 'wpUploadFileURL' );
+
                return !empty( $url )
                        && Http::isValidURI( $url )
                        && $wgUser->isAllowed( 'upload_by_url' );
@@ -202,6 +207,7 @@ class UploadFromUrl extends UploadBase {
                if ( !$this->mAsync ) {
                        return $this->reallyFetchFile( $httpOptions );
                }
+
                return Status::newGood();
        }
 
@@ -213,6 +219,7 @@ class UploadFromUrl extends UploadBase {
        protected function makeTemporaryFile() {
                $tmpFile = TempFSFile::factory( 'URL' );
                $tmpFile->bind( $this );
+
                return $tmpFile->getPath();
        }
 
@@ -259,12 +266,12 @@ class UploadFromUrl extends UploadBase {
                $this->mRemoveTempFile = true;
                $this->mFileSize = 0;
 
-               $options = $httpOptions + array(
-                       'followRedirects' => true,
-               );
+               $options = $httpOptions + array( 'followRedirects' => true );
+
                if ( $wgCopyUploadProxy !== false ) {
                        $options['proxy'] = $wgCopyUploadProxy;
                }
+
                if ( $wgCopyUploadTimeout && !isset( $options['timeout'] ) ) {
                        $options['timeout'] = $wgCopyUploadTimeout;
                }
@@ -297,6 +304,7 @@ class UploadFromUrl extends UploadBase {
                if ( $this->mAsync ) {
                        return array( 'status' => UploadBase::OK );
                }
+
                return parent::verifyUpload();
        }
 
@@ -308,8 +316,10 @@ class UploadFromUrl extends UploadBase {
        public function checkWarnings() {
                if ( $this->mAsync ) {
                        $this->mIgnoreWarnings = false;
+
                        return array();
                }
+
                return parent::checkWarnings();
        }
 
@@ -323,6 +333,7 @@ class UploadFromUrl extends UploadBase {
                if ( $this->mAsync ) {
                        return true;
                }
+
                return parent::verifyTitlePermissions( $user );
        }
 
@@ -367,7 +378,7 @@ class UploadFromUrl extends UploadBase {
                ) );
                $job->initializeSessionData();
                JobQueueGroup::singleton()->push( $job );
+
                return $sessionKey;
        }
-
 }
index 33cb0db..a7e7100 100644 (file)
 
 /**
  * UploadStash is intended to accomplish a few things:
- *   - enable applications to temporarily stash files without publishing them to the wiki.
- *      - Several parts of MediaWiki do this in similar ways: UploadBase, UploadWizard, and FirefoggChunkedExtension
- *        And there are several that reimplement stashing from scratch, in idiosyncratic ways. The idea is to unify them all here.
- *       Mostly all of them are the same except for storing some custom fields, which we subsume into the data array.
- *   - enable applications to find said files later, as long as the db table or temp files haven't been purged.
- *   - enable the uploading user (and *ONLY* the uploading user) to access said files, and thumbnails of said files, via a URL.
- *     We accomplish this using a database table, with ownership checking as you might expect. See SpecialUploadStash, which
- *     implements a web interface to some files stored this way.
+ *   - Enable applications to temporarily stash files without publishing them to
+ *     the wiki.
+ *      - Several parts of MediaWiki do this in similar ways: UploadBase,
+ *        UploadWizard, and FirefoggChunkedExtension.
+ *        And there are several that reimplement stashing from scratch, in
+ *        idiosyncratic ways. The idea is to unify them all here.
+ *        Mostly all of them are the same except for storing some custom fields,
+ *        which we subsume into the data array.
+ *   - Enable applications to find said files later, as long as the db table or
+ *     temp files haven't been purged.
+ *   - Enable the uploading user (and *ONLY* the uploading user) to access said
+ *     files, and thumbnails of said files, via a URL. We accomplish this using
+ *     a database table, with ownership checking as you might expect. See
+ *     SpecialUploadStash, which implements a web interface to some files stored
+ *     this way.
  *
- * UploadStash right now is *mostly* intended to show you one user's slice of the entire stash. The user parameter is only optional
- * because there are few cases where we clean out the stash from an automated script. In the future we might refactor this.
+ * UploadStash right now is *mostly* intended to show you one user's slice of
+ * the entire stash. The user parameter is only optional because there are few
+ * cases where we clean out the stash from an automated script. In the future we
+ * might refactor this.
  *
  * UploadStash represents the entire stash of temporary files.
  * UploadStashFile is a filestore for the actual physical disk files.
- * UploadFromStash extends UploadBase, and represents a single stashed file as it is moved from the stash to the regular file repository
+ * UploadFromStash extends UploadBase, and represents a single stashed file as
+ * it is moved from the stash to the regular file repository
  *
  * @ingroup Upload
  */
 class UploadStash {
-
        // Format of the key for files -- has to be suitable as a filename itself (e.g. ab12cd34ef.jpg)
        const KEY_FORMAT_REGEX = '/^[\w-\.]+\.\w*$/';
 
@@ -95,7 +104,8 @@ class UploadStash {
 
        /**
         * Get a file and its metadata from the stash.
-        * The noAuth param is a bit janky but is required for automated scripts which clean out the stash.
+        * The noAuth param is a bit janky but is required for automated scripts
+        * which clean out the stash.
         *
         * @param string $key Key under which file information is stored
         * @param bool $noAuth (optional) Don't check authentication. Used by maintenance scripts.
@@ -106,7 +116,7 @@ class UploadStash {
         * @return UploadStashFile
         */
        public function getFile( $key, $noAuth = false ) {
-               if ( ! preg_match( self::KEY_FORMAT_REGEX, $key ) ) {
+               if ( !preg_match( self::KEY_FORMAT_REGEX, $key ) ) {
                        throw new UploadStashBadPathException( "key '$key' is not in a proper format" );
                }
 
@@ -117,7 +127,8 @@ class UploadStash {
 
                if ( !isset( $this->fileMetadata[$key] ) ) {
                        if ( !$this->fetchFileMetadata( $key ) ) {
-                               // If nothing was received, it's likely due to replication lag.  Check the master to see if the record is there.
+                               // If nothing was received, it's likely due to replication lag.
+                               // Check the master to see if the record is there.
                                $this->fetchFileMetadata( $key, DB_MASTER );
                        }
 
@@ -138,14 +149,15 @@ class UploadStash {
                        }
                }
 
-               if ( ! $this->files[$key]->exists() ) {
+               if ( !$this->files[$key]->exists() ) {
                        wfDebug( __METHOD__ . " tried to get file at $key, but it doesn't exist\n" );
                        throw new UploadStashBadPathException( "path doesn't exist" );
                }
 
                if ( !$noAuth ) {
                        if ( $this->fileMetadata[$key]['us_user'] != $this->userId ) {
-                               throw new UploadStashWrongOwnerException( "This file ($key) doesn't belong to the current user." );
+                               throw new UploadStashWrongOwnerException( "This file ($key) doesn't "
+                                       . "belong to the current user." );
                        }
                }
 
@@ -160,6 +172,7 @@ class UploadStash {
         */
        public function getMetadata( $key ) {
                $this->getFile( $key );
+
                return $this->fileMetadata[$key];
        }
 
@@ -171,14 +184,17 @@ class UploadStash {
         */
        public function getFileProps( $key ) {
                $this->getFile( $key );
+
                return $this->fileProps[$key];
        }
 
        /**
-        * Stash a file in a temp directory and record that we did this in the database, along with other metadata.
+        * Stash a file in a temp directory and record that we did this in the
+        * database, along with other metadata.
         *
         * @param string $path Path to file you want stashed
-        * @param string $sourceType The type of upload that generated this file (currently, I believe, 'file' or null)
+        * @param string $sourceType The type of upload that generated this file
+        *   (currently, I believe, 'file' or null)
         * @throws UploadStashBadPathException
         * @throws UploadStashFileException
         * @throws UploadStashNotLoggedInException
@@ -201,10 +217,11 @@ class UploadStash {
                        $pathWithGoodExtension = $path;
                }
 
-               // If no key was supplied, make one.  a mysql insertid would be totally reasonable here, except
-               // that for historical reasons, the key is this random thing instead.  At least it's not guessable.
+               // If no key was supplied, make one.  a mysql insertid would be totally
+               // reasonable here, except that for historical reasons, the key is this
+               // random thing instead.  At least it's not guessable.
                //
-               // some things that when combined will make a suitably unique key.
+               // Some things that when combined will make a suitably unique key.
                // see: http://www.jwz.org/doc/mid.html
                list( $usec, $sec ) = explode( ' ', microtime() );
                $usec = substr( $usec, 2 );
@@ -215,7 +232,7 @@ class UploadStash {
 
                $this->fileProps[$key] = $fileProps;
 
-               if ( ! preg_match( self::KEY_FORMAT_REGEX, $key ) ) {
+               if ( !preg_match( self::KEY_FORMAT_REGEX, $key ) ) {
                        throw new UploadStashBadPathException( "key '$key' is not in a proper format" );
                }
 
@@ -224,30 +241,36 @@ class UploadStash {
                // if not already in a temporary area, put it there
                $storeStatus = $this->repo->storeTemp( basename( $pathWithGoodExtension ), $path );
 
-               if ( ! $storeStatus->isOK() ) {
-                       // It is a convention in MediaWiki to only return one error per API exception, even if multiple errors
-                       // are available. We use reset() to pick the "first" thing that was wrong, preferring errors to warnings.
-                       // This is a bit lame, as we may have more info in the $storeStatus and we're throwing it away, but to fix it means
+               if ( !$storeStatus->isOK() ) {
+                       // It is a convention in MediaWiki to only return one error per API
+                       // exception, even if multiple errors are available. We use reset()
+                       // to pick the "first" thing that was wrong, preferring errors to
+                       // warnings. This is a bit lame, as we may have more info in the
+                       // $storeStatus and we're throwing it away, but to fix it means
                        // redesigning API errors significantly.
-                       // $storeStatus->value just contains the virtual URL (if anything) which is probably useless to the caller
+                       // $storeStatus->value just contains the virtual URL (if anything)
+                       // which is probably useless to the caller.
                        $error = $storeStatus->getErrorsArray();
                        $error = reset( $error );
-                       if ( ! count( $error ) ) {
+                       if ( !count( $error ) ) {
                                $error = $storeStatus->getWarningsArray();
                                $error = reset( $error );
-                               if ( ! count( $error ) ) {
+                               if ( !count( $error ) ) {
                                        $error = array( 'unknown', 'no error recorded' );
                                }
                        }
-                       // at this point, $error should contain the single "most important" error, plus any parameters.
+                       // At this point, $error should contain the single "most important"
+                       // error, plus any parameters.
                        $errorMsg = array_shift( $error );
-                       throw new UploadStashFileException( "Error storing file in '$path': " . wfMessage( $errorMsg, $error )->text() );
+                       throw new UploadStashFileException( "Error storing file in '$path': "
+                               . wfMessage( $errorMsg, $error )->text() );
                }
                $stashPath = $storeStatus->value;
 
                // fetch the current user ID
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__ . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException( __METHOD__
+                               . ' No user is logged in, files must belong to users' );
                }
 
                // insert the file metadata into the db.
@@ -279,7 +302,8 @@ class UploadStash {
                        __METHOD__
                );
 
-               // store the insertid in the class variable so immediate retrieval (possibly laggy) isn't necesary.
+               // store the insertid in the class variable so immediate retrieval
+               // (possibly laggy) isn't necesary.
                $this->fileMetadata[$key]['us_id'] = $dbw->insertId();
 
                # create the UploadStashFile object for this file.
@@ -297,7 +321,8 @@ class UploadStash {
         */
        public function clear() {
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__ . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException( __METHOD__
+                               . ' No user is logged in, files must belong to users' );
                }
 
                wfDebug( __METHOD__ . ' clearing all rows for user ' . $this->userId . "\n" );
@@ -319,18 +344,20 @@ class UploadStash {
         * Remove a particular file from the stash.  Also removes it from the repo.
         *
         * @param string $key
-        * @throws UploadStashNoSuchKeyException|UploadStashNotLoggedInException|UploadStashWrongOwnerException
+        * @throws UploadStashNoSuchKeyException|UploadStashNotLoggedInException
+        * @throws UploadStashWrongOwnerException
         * @return bool Success
         */
        public function removeFile( $key ) {
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__ . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException( __METHOD__
+                               . ' No user is logged in, files must belong to users' );
                }
 
                $dbw = $this->repo->getMasterDb();
 
-               // this is a cheap query. it runs on the master so that this function still works when there's lag.
-               // it won't be called all that often.
+               // this is a cheap query. it runs on the master so that this function
+               // still works when there's lag. It won't be called all that often.
                $row = $dbw->selectRow(
                        'uploadstash',
                        'us_user',
@@ -343,7 +370,8 @@ class UploadStash {
                }
 
                if ( $row->us_user != $this->userId ) {
-                       throw new UploadStashWrongOwnerException( "Can't delete: the file ($key) doesn't belong to this user." );
+                       throw new UploadStashWrongOwnerException( "Can't delete: "
+                               . "the file ($key) doesn't belong to this user." );
                }
 
                return $this->removeFileNoAuth( $key );
@@ -369,8 +397,9 @@ class UploadStash {
                        __METHOD__
                );
 
-               // TODO: look into UnregisteredLocalFile and find out why the rv here is sometimes wrong (false when file was removed)
-               // for now, ignore.
+               /** @todo Look into UnregisteredLocalFile and find out why the rv here is
+                *  sometimes wrong (false when file was removed). For now, ignore.
+                */
                $this->files[$key]->remove();
 
                unset( $this->files[$key] );
@@ -387,7 +416,8 @@ class UploadStash {
         */
        public function listFiles() {
                if ( !$this->isLoggedIn ) {
-                       throw new UploadStashNotLoggedInException( __METHOD__ . ' No user is logged in, files must belong to users' );
+                       throw new UploadStashNotLoggedInException( __METHOD__
+                               . ' No user is logged in, files must belong to users' );
                }
 
                $dbr = $this->repo->getSlaveDb();
@@ -451,6 +481,7 @@ class UploadStash {
                        // put it in a web accesible directory.
                        return '';
                }
+
                return $extension;
        }
 
@@ -502,6 +533,7 @@ class UploadStash {
                        throw new UploadStashZeroLengthFileException( "File is zero length" );
                }
                $this->files[$key] = $file;
+
                return true;
        }
 }
@@ -512,8 +544,10 @@ class UploadStashFile extends UnregisteredLocalFile {
        protected $url;
 
        /**
-        * A LocalFile wrapper around a file that has been temporarily stashed, so we can do things like create thumbnails for it
-        * Arguably UnregisteredLocalFile should be handling its own file repo but that class is a bit retarded currently
+        * A LocalFile wrapper around a file that has been temporarily stashed,
+        * so we can do things like create thumbnails for it. Arguably
+        * UnregisteredLocalFile should be handling its own file repo but that
+        * class is a bit retarded currently.
         *
         * @param FileRepo $repo Repository where we should find the path
         * @param string $path Path to file
@@ -528,18 +562,21 @@ class UploadStashFile extends UnregisteredLocalFile {
                if ( $repo->isVirtualUrl( $path ) ) {
                        $path = $repo->resolveVirtualUrl( $path );
                } else {
-
-                       // check if path appears to be sane, no parent traversals, and is in this repo's temp zone.
+                       // check if path appears to be sane, no parent traversals,
+                       // and is in this repo's temp zone.
                        $repoTempPath = $repo->getZonePath( 'temp' );
-                       if ( ( ! $repo->validateFilename( $path ) ) ||
-                                       ( strpos( $path, $repoTempPath ) !== 0 ) ) {
-                               wfDebug( "UploadStash: tried to construct an UploadStashFile from a file that should already exist at '$path', but path is not valid\n" );
+                       if ( ( !$repo->validateFilename( $path ) ) ||
+                               ( strpos( $path, $repoTempPath ) !== 0 )
+                       ) {
+                               wfDebug( "UploadStash: tried to construct an UploadStashFile "
+                                       . "from a file that should already exist at '$path', but path is not valid\n" );
                                throw new UploadStashBadPathException( 'path is not valid' );
                        }
 
                        // check if path exists! and is a plain file.
-                       if ( ! $repo->fileExists( $path ) ) {
-                               wfDebug( "UploadStash: tried to construct an UploadStashFile from a file that should already exist at '$path', but path is not found\n" );
+                       if ( !$repo->fileExists( $path ) ) {
+                               wfDebug( "UploadStash: tried to construct an UploadStashFile from "
+                                       . "a file that should already exist at '$path', but path is not found\n" );
                                throw new UploadStashFileNotFoundException( 'cannot find path, or not a plain file' );
                        }
                }
@@ -552,8 +589,8 @@ class UploadStashFile extends UnregisteredLocalFile {
        /**
         * A method needed by the file transforming and scaling routines in File.php
         * We do not necessarily care about doing the description at this point
-        * However, we also can't return the empty string, as the rest of MediaWiki demands this (and calls to imagemagick
-        * convert require it to be there)
+        * However, we also can't return the empty string, as the rest of MediaWiki
+        * demands this (and calls to imagemagick convert require it to be there)
         *
         * @return string Dummy value
         */
@@ -566,14 +603,17 @@ class UploadStashFile extends UnregisteredLocalFile {
         * The actual argument is the result of thumbName although we seem to have
         * buggy code elsewhere that expects a boolean 'suffix'
         *
-        * @param string $thumbName Name of thumbnail (e.g. "120px-123456.jpg" ), or false to just get the path
-        * @return string Path thumbnail should take on filesystem, or containing directory if thumbname is false
+        * @param string $thumbName Name of thumbnail (e.g. "120px-123456.jpg" ),
+        *   or false to just get the path
+        * @return string Path thumbnail should take on filesystem, or containing
+        *   directory if thumbname is false
         */
        public function getThumbPath( $thumbName = false ) {
                $path = dirname( $this->path );
                if ( $thumbName !== false ) {
                        $path .= "/$thumbName";
                }
+
                return $path;
        }
 
@@ -591,7 +631,8 @@ class UploadStashFile extends UnregisteredLocalFile {
        }
 
        /**
-        * Helper function -- given a 'subpage', return the local URL e.g. /wiki/Special:UploadStash/subpage
+        * Helper function -- given a 'subpage', return the local URL,
+        * e.g. /wiki/Special:UploadStash/subpage
         * @param string $subPage
         * @return string Local URL for this subpage in the Special:UploadStash space.
         */
@@ -602,14 +643,16 @@ class UploadStashFile extends UnregisteredLocalFile {
        /**
         * Get a URL to access the thumbnail
         * This is required because the model of how files work requires that
-        * the thumbnail urls be predictable. However, in our model the URL is not based on the filename
-        * (that's hidden in the db)
+        * the thumbnail urls be predictable. However, in our model the URL is
+        * not based on the filename (that's hidden in the db)
         *
-        * @param string $thumbName Basename of thumbnail file -- however, we don't want to use the file exactly
+        * @param string $thumbName Basename of thumbnail file -- however, we don't
+        *   want to use the file exactly
         * @return string URL to access thumbnail, or URL with partial path
         */
        public function getThumbUrl( $thumbName = false ) {
                wfDebug( __METHOD__ . " getting for $thumbName \n" );
+
                return $this->getSpecialUrl( 'thumb/' . $this->getUrlName() . '/' . $thumbName );
        }
 
@@ -620,9 +663,10 @@ class UploadStashFile extends UnregisteredLocalFile {
         * @return string Base url name, like '120px-123456.jpg'
         */
        public function getUrlName() {
-               if ( ! $this->urlName ) {
+               if ( !$this->urlName ) {
                        $this->urlName = $this->fileKey;
                }
+
                return $this->urlName;
        }
 
@@ -636,12 +680,14 @@ class UploadStashFile extends UnregisteredLocalFile {
                if ( !isset( $this->url ) ) {
                        $this->url = $this->getSpecialUrl( 'file/' . $this->getUrlName() );
                }
+
                return $this->url;
        }
 
        /**
-        * Parent classes use this method, for no obvious reason, to return the path (relative to wiki root, I assume).
-        * But with this class, the URL is unrelated to the path.
+        * Parent classes use this method, for no obvious reason, to return the path
+        * (relative to wiki root, I assume). But with this class, the URL is
+        * unrelated to the path.
         *
         * @return string Url
         */
@@ -650,7 +696,8 @@ class UploadStashFile extends UnregisteredLocalFile {
        }
 
        /**
-        * Getter for file key (the unique id by which this file's location & metadata is stored in the db)
+        * Getter for file key (the unique id by which this file's location &
+        * metadata is stored in the db)
         *
         * @return string File key
         */
@@ -674,15 +721,32 @@ class UploadStashFile extends UnregisteredLocalFile {
        public function exists() {
                return $this->repo->fileExists( $this->path );
        }
+}
+
+class UploadStashException extends MWException {
+}
+
+class UploadStashNotAvailableException extends UploadStashException {
+}
+
+class UploadStashFileNotFoundException extends UploadStashException {
+}
+
+class UploadStashBadPathException extends UploadStashException {
+}
+
+class UploadStashFileException extends UploadStashException {
+}
+
+class UploadStashZeroLengthFileException extends UploadStashException {
+}
+
+class UploadStashNotLoggedInException extends UploadStashException {
+}
+
+class UploadStashWrongOwnerException extends UploadStashException {
+}
 
+class UploadStashNoSuchKeyException extends UploadStashException {
 }
 
-class UploadStashException extends MWException {};
-class UploadStashNotAvailableException extends UploadStashException {};
-class UploadStashFileNotFoundException extends UploadStashException {};
-class UploadStashBadPathException extends UploadStashException {};
-class UploadStashFileException extends UploadStashException {};
-class UploadStashZeroLengthFileException extends UploadStashException {};
-class UploadStashNotLoggedInException extends UploadStashException {};
-class UploadStashWrongOwnerException extends UploadStashException {};
-class UploadStashNoSuchKeyException extends UploadStashException {};
index 037663c..b6df18b 100644 (file)
@@ -109,7 +109,9 @@ class ArrayUtils {
         * @return int|bool The item index of the lower bound, or false if the target value
         *     sorts before all items.
         */
-       public static function findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target ) {
+       public static function findLowerBound( $valueCallback, $valueCount,
+               $comparisonCallback, $target
+       ) {
                if ( $valueCount === 0 ) {
                        return false;
                }
index f556ee7..b16d4a4 100644 (file)
@@ -158,4 +158,5 @@ abstract class CdbWriter {
  * Exception for Cdb errors.
  * This explicitly doesn't subclass MWException to encourage reuse.
  */
-class CdbException extends Exception {}
+class CdbException extends Exception {
+}
index c178ffe..baba580 100644 (file)
@@ -101,28 +101,28 @@ class CdbFunctions {
  */
 class CdbReaderPHP extends CdbReader {
        /** The filename */
-       var $fileName;
+       protected $fileName;
 
        /* number of hash slots searched under this key */
-       var $loop;
+       protected $loop;
 
        /* initialized if loop is nonzero */
-       var $khash;
+       protected $khash;
 
        /* initialized if loop is nonzero */
-       var $kpos;
+       protected $kpos;
 
        /* initialized if loop is nonzero */
-       var $hpos;
+       protected $hpos;
 
        /* initialized if loop is nonzero */
-       var $hslots;
+       protected $hslots;
 
        /* initialized if findNext() returns true */
-       var $dpos;
+       protected $dpos;
 
        /* initialized if cdb_findnext() returns 1 */
-       var $dlen;
+       protected $dlen;
 
        /**
         * @param $fileName string
@@ -288,8 +288,11 @@ class CdbReaderPHP extends CdbReader {
  * CDB writer class
  */
 class CdbWriterPHP extends CdbWriter {
-       var $hplist;
-       var $numentries, $pos;
+       protected $hplist;
+
+       protected $numentries;
+
+       protected $pos;
 
        /**
         * @param $fileName string
index c7bb4f3..e2013b0 100644 (file)
@@ -278,7 +278,9 @@ class UIDGenerator {
                if ( ( $flags & self::QUICK_VOLATILE ) && PHP_SAPI !== 'cli' ) {
                        try {
                                $cache = ObjectCache::newAccelerator( array() );
-                       } catch ( MWException $e ) {} // not supported
+                       } catch ( MWException $e ) {
+                               // not supported
+                       }
                }
                if ( $cache ) {
                        $counter = $cache->incr( $bucket, $count );
index 964cd9f..38d3af5 100644 (file)
@@ -1908,12 +1908,9 @@ class Language {
                        $data[0] = 'Offset';
                }
 
-               $minDiff = 0;
                if ( $data[0] == 'System' || $tz == '' ) {
-                       #  Global offset in minutes.
-                       if ( isset( $wgLocalTZoffset ) ) {
-                               $minDiff = $wgLocalTZoffset;
-                       }
+                       # Global offset in minutes.
+                       $minDiff = $wgLocalTZoffset;
                } elseif ( $data[0] == 'Offset' ) {
                        $minDiff = intval( $data[1] );
                } else {
index 98938b2..65d74e9 100644 (file)
@@ -754,6 +754,9 @@ class LanguageConverter {
                global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest;
                $isredir = $wgRequest->getText( 'redirect', 'yes' );
                $action = $wgRequest->getText( 'action' );
+               if ( $action == 'edit' && $wgRequest->getBool( 'redlink' ) ) {
+                       $action = 'view';
+               }
                $linkconvert = $wgRequest->getText( 'linkconvert', 'yes' );
                $disableLinkConversion = $wgDisableLangConversion
                        || $wgDisableTitleConversion;
index 6ab0ee6..18c115c 100644 (file)
        "permalink": "Permanente skakel",
        "print": "Druk",
        "view": "Wys",
+       "view-foreign": "Wys op $1",
        "edit": "Wysig",
+       "edit-local": "Wysig plaaslike beskrywing",
        "create": "Skep",
+       "create-local": "Voeg plaaslike beskrywing by",
        "editthispage": "Wysig hierdie bladsy",
        "create-this-page": "Skep hierdie bladsy",
        "delete": "Skrap",
        "loginlanguagelabel": "Taal: $1",
        "suspicious-userlogout": "U versoek om af te teken is geïgnoreer omdat dit lyk asof dit deur 'n gebreekte webleser of instaanbediener gestuur is.",
        "createacct-another-realname-tip": "Regte naam is opsioneel.\nAs u dit verskaf, sal dit gebruik word om u erkenning vir u werk te gee.",
+       "pt-login": "Meld aan",
+       "pt-login-button": "Meld aan",
+       "pt-createaccount": "Skep gebruiker",
+       "pt-userlogout": "Meld af",
        "php-mail-error-unknown": "Onbekende fout in PHP se mail()-funksie",
        "user-mail-no-addy": "Geprobeer om e-pos te stuur sonder 'n e-posadres.",
        "user-mail-no-body": "Daar is probeer om 'n leë of 'n onredelike kort boodskap te stuur.",
        "edit-gone-missing": "Die bladsy is nie gewysig nie.\nDit lyk of dit verwyder is.",
        "edit-conflict": "Wysigingskonflik",
        "edit-no-change": "U wysiging was geignoreer omdat die teks nie verander is nie.",
+       "postedit-confirmation-created": "Die bladsy is geskep.",
+       "postedit-confirmation-restored": "Die bladsy is teruggeplaas.",
        "postedit-confirmation-saved": "U wysigings is gestoor.",
        "edit-already-exists": "Die bladsy is nie geskep nie.\nDit bestaan alreeds.",
        "defaultmessagetext": "Verstekteks",
        "search-section": "(afdeling $1)",
        "search-suggest": "Het u $1 bedoel?",
        "search-interwiki-caption": "Susterprojekte",
-       "search-interwiki-default": "$1 resultate:",
+       "search-interwiki-default": "Resultate van $1:",
        "search-interwiki-more": "(meer)",
        "search-relatedarticle": "Verwante",
        "searcheverything-enable": "Soek in alle naamruimtes",
        "rcnotefrom": "Wysigings sedert <strong>$2</strong> (maksimum van <strong>$1</strong> word gewys).",
        "rclistfrom": "Vertoon wysigings vanaf $3 $2",
        "rcshowhideminor": "$1 klein wysigings",
+       "rcshowhideminor-show": "Wys",
+       "rcshowhideminor-hide": "Versteek",
        "rcshowhidebots": "$1 robotte",
+       "rcshowhidebots-show": "Wys",
+       "rcshowhidebots-hide": "Versteek",
        "rcshowhideliu": "$1 geregistreerde gebruikers",
+       "rcshowhideliu-show": "Wys",
+       "rcshowhideliu-hide": "Versteek",
        "rcshowhideanons": "$1 anonieme gebruikers",
+       "rcshowhideanons-show": "Wys",
+       "rcshowhideanons-hide": "Versteek",
        "rcshowhidepatr": "$1 gekontroleerde wysigings",
+       "rcshowhidepatr-show": "Wys",
+       "rcshowhidepatr-hide": "Versteek",
        "rcshowhidemine": "$1 my wysigings",
+       "rcshowhidemine-show": "Wys",
+       "rcshowhidemine-hide": "Versteek",
        "rclinks": "Vertoon die laaste $1 wysigings in die afgelope $2 dae<br />$3",
        "diff": "verskil",
        "hist": "geskiedenis",
        "protectedpages": "Beskermde bladsye",
        "protectedpages-indef": "Slegs blokkades sonder vervaldatum",
        "protectedpages-cascade": "Slegs blokkades wat neergolf",
+       "protectedpages-noredirect": "Versteek aansture",
        "protectedpagesempty": "Geen bladsye is tans met die parameters beveilig nie.",
+       "protectedpages-timestamp": "Tydstip",
+       "protectedpages-page": "Bladsy",
+       "protectedpages-expiry": "Verval",
+       "protectedpages-reason": "Rede",
+       "protectedpages-unknown-timestamp": "Onbekend",
+       "protectedpages-unknown-performer": "Onbekende gebruiker",
        "protectedtitles": "Beskermde titels",
        "protectedtitlesempty": "Geen titels is tans met die parameters beveilig nie.",
        "listusers": "Gebruikerslys",
        "listgrouprights-removegroup-self": "Die volgende {{PLURAL:$2|groep|groepe}} verwyder van eie gebruiker: $1",
        "listgrouprights-addgroup-self-all": "Alle groepe byvoeg tot eie gebruiker",
        "listgrouprights-removegroup-self-all": "Alle groepe verwyder van eie gebruiker",
+       "listgrouprights-namespaceprotection-namespace": "Naamruimte",
+       "trackingcategories-name": "Boodskapnaam",
+       "trackingcategories-nodesc": "Geen beskrywing beskikbaar nie.",
+       "trackingcategories-disabled": "Kategorie is gedeaktiveer",
        "mailnologin": "Geen versendadres beskikbaar",
        "mailnologintext": "U moet [[Special:UserLogin|ingeteken]] wees en 'n geldige e-posadres in u [[Special:Preferences|voorkeure]] hê om e-pos aan ander gebruikers te kan stuur.",
        "emailuser": "Stuur e-pos na hierdie gebruiker",
        "contributions-title": "$1 se bydraes",
        "mycontris": "Bydraes",
        "contribsub2": "Vir {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Die gebruiker \"$1\" is nie geregistreer nie.",
        "nocontribs": "Geen veranderinge wat by hierdie kriteria pas, is gevind nie.",
        "uctop": "(laaste wysiging)",
        "month": "Vanaf maand (en vroeër):",
        "sp-contributions-newbies-sub": "Vir nuwe gebruikers",
        "sp-contributions-newbies-title": "Bydraes van nuwe gebruikers",
        "sp-contributions-blocklog": "blokkeer-logboek",
+       "sp-contributions-suppresslog": "onderdrukte gebruikersbydraes",
        "sp-contributions-deleted": "geskrapte gebruikersbydraes",
        "sp-contributions-uploads": "oplaaie",
        "sp-contributions-logs": "logboeke",
        "blockip": "Blokkeer gebruiker",
        "blockip-legend": "Blokkeer gebruiker of IP-adres",
        "blockiptext": "Gebruik die vorm hier onder om skryftoegang vir 'n gebruiker of IP-adres in te trek.\nDit mag slegs as beskerming teen vandalisme en in ooreenstemming met die [[{{MediaWiki:Policy-url}}|beleid]] gedoen word.\nVul 'n spesifieke rede hier onder in (haal byvoorbeeld spesifieke bladsye wat gevandaliseer is, aan).",
-       "ipadressorusername": "IP-adres of gebruikersnaam:",
+       "ipaddressorusername": "IP-adres of gebruikersnaam:",
        "ipbexpiry": "Duur:",
        "ipbreason": "Rede:",
        "ipbreason-dropdown": "*Algemene redes vir versperring\n** Invoeg van valse inligting\n** Skrap van bladsyinhoud\n** \"Spam\" van skakels na eksterne webwerwe\n** Invoeg van gemors op bladsye\n** Intimiderende gedrag (teistering)\n** Misbruik van veelvuldige rekeninge\n** Onaanvaarbare gebruikersnaam",
        "newimages-summary": "Die spesiale bladsy wys die nuutste lêers wat na die wiki opgelaai is.",
        "newimages-legend": "Filter",
        "newimages-label": "Lêernaam (of deel daarvan):",
-       "showhidebots": "($1 robotte)",
        "noimages": "Niks te sien nie.",
        "ilsubmit": "Soek",
        "bydate": "volgens datum",
        "htmlform-no": "Nee",
        "htmlform-yes": "Ja",
        "htmlform-chosen-placeholder": "Kies 'n opsie",
+       "htmlform-cloner-delete": "Verwyder",
+       "htmlform-cloner-required": "Ten minste één waarde verwag.",
        "sqlite-has-fts": "Weergawe $1 met ondersteuning vir vol-teks soektogte (\"full-text search\")",
        "sqlite-no-fts": "Weergawe $1 sonder ondersteuning vir vol-teks soektogte (\"full-text search\")",
        "logentry-delete-delete": "$1 {{GENDER:$2|het}} bladsy $3 verwyder",
index a1078aa..3752ef0 100644 (file)
        "blockip": "ተጠቃሚውን ለማገድ",
        "blockip-legend": "ተጠቃሚ ለማገድ",
        "blockiptext": "ከዚህ ታች ያለው ማመልከቻ በአንድ ቁጥር አድርሻ ወይም ብዕር ስም ላይ ማገጃ (ማዕቀብ) ለመጣል ይጠቀማል።  ይህ በ[[{{MediaWiki:Policy-url}}|መርመርያዎቻችን]] መሠረት ተንኮል ወይም ጉዳት ለመከልከል ብቻ እንዲደረግ ይገባል። ከዚህ ታች የተለየ ምክንያት (ለምሣሌ የተጎዳው ገጽ በማጠቆም) ይጻፉ።",
-       "ipadressorusername": "የቁ. አድራሻ ወይም የብዕር ስም፦",
+       "ipaddressorusername": "የቁ. አድራሻ ወይም የብዕር ስም፦",
        "ipbexpiry": "የሚያልቅበት፦",
        "ipbreason": "ምክንያቱ፦",
        "ipbreason-dropdown": "*ተራ የማገጃ ምክንያቶች\n** የሀሠት መረጃ መጨምር\n** ከገጾች ይዞታውን መደምሰስ\n** የ'ስፓም' ማያያዣ ማብዛት\n** እንቶ ፈንቶ መጨምር\n** ዛቻ ማብዛት\n** በአድራሻዎች ብዛት መተንኮል\n** የማይገባ ብዕር ስም",
        "newimages": "የአዳዲስ ሥዕሎች ማሳያ አዳራሽ",
        "imagelisttext": "$1 የተጨመሩ ሥእሎች ወይም ፋይሎች ከታች ይዘረዝራሉ ($2)።",
        "newimages-legend": "ማጣሪያ",
-       "showhidebots": "(«bots» $1)",
        "noimages": "ምንም የለም!",
        "ilsubmit": "ፍለጋ",
        "bydate": "በተጨመሩበት ወቅት",
index 1d54dbd..1c2bcae 100644 (file)
        "blockip": "Bloqueyar usuario",
        "blockip-legend": "Bloqueyar usuario",
        "blockiptext": "Replene o siguient formulario ta bloqueyar l'acceso\nd'escritura dende una cuenta d'usuario u una adreza IP especifica.\nIsto habría de fer-se nomás ta privar vandalismos, y d'alcuerdo con\nas [[{{MediaWiki:Policy-url}}|politicas]].\nEscriba a razón especifica ta o bloqueyo (por exemplo, quaternando\nas pachinas que s'han vandalizato).",
-       "ipadressorusername": "Adreza IP u nombre d'usuario",
+       "ipaddressorusername": "Adreza IP u nombre d'usuario",
        "ipbexpiry": "Circumducción:",
        "ipbreason": "Razón:",
        "ipbreason-dropdown": "*Razons comuns de bloqueyo\n** Meter información falsa\n** Borrar conteniu d'as pachinas\n** Fer publicidat ficando vinclos con atras pachinas web\n** Meter sinconisions u vasuera en as pachinas\n** Portar-se de traza intimidatoria u violenta / atosegar\n** Abusar de multiples cuentas\n** Nombre d'usuario inacceptable",
        "newimages-summary": "Ista pachina especial amuestra os zaguers fichers cargatos.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nombre d'o fichero (u bella parte d'el):",
-       "showhidebots": "($1 bots)",
        "noimages": "No bi ha cosa a veyer.",
        "ilsubmit": "Mirar",
        "bydate": "por a calendata",
index 134d5a9..8771207 100644 (file)
@@ -43,7 +43,8 @@
                        "نصوح",
                        "وهراني",
                        "아라",
-                       "Test Create account"
+                       "Test Create account",
+                       "Kuwaity26"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "permalink": "رابط دائم",
        "print": "اطبع",
        "view": "مطالعة",
+       "view-foreign": "اعرض على $1",
        "edit": "عدل",
        "edit-local": "تعديل الوصف المحلي",
        "create": "أنشئ",
        "search-file-match": "(يطابق محتوى الملف)",
        "search-suggest": "أتقصد: $1",
        "search-interwiki-caption": "المشاريع الشقيقة",
-       "search-interwiki-default": "$1 نتيجة:",
+       "search-interwiki-default": "نتائح من $1:",
        "search-interwiki-more": "(المزيد)",
        "search-relatedarticle": "مرتبطة",
        "searcheverything-enable": "ابحث في جميع النطاقات",
        "action-createpage": "إنشاء الصفحات",
        "action-createtalk": "إنشاء صفحات النقاش",
        "action-createaccount": "إنشاء حساب المستخدم هذا",
+       "action-history": "اعرض تاريخ هذه الصفحة",
        "action-minoredit": "التعليم على هذا التعديل كطفيف",
        "action-move": "نقل هذه الصفحة",
        "action-move-subpages": "نقل هذه الصفحة، وصفحاتها الفرعية",
        "listgrouprights-removegroup-self": "يمكنه إزالة {{PLURAL:$2|المجموعة|المجموعات}} من حسابه الخاص: $1",
        "listgrouprights-addgroup-self-all": "يمكنه إضافة كل المجموعات إلى حسابه الخاص",
        "listgrouprights-removegroup-self-all": "يمكنه إزالة كل المجموعات من حسابه الخاص",
+       "listgrouprights-namespaceprotection-namespace": "النطاق",
+       "trackingcategories-name": "اسم الرسالة",
+       "trackingcategories-disabled": "التصنيف غير مفعل",
        "mailnologin": "لا يوجد عنوان للإرسال",
        "mailnologintext": "يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.",
        "emailuser": "مراسلة المستخدم",
        "blockip": "منع المستخدم",
        "blockip-legend": "منع المستخدم",
        "blockiptext": "استخدم النموذج التالي لمنع مستخدم، أو عنوان آيبي، معين من التعديل أو إنشاء حسابات جديدة. تُستخدم هذه العملية لمنع التخريب فقط، ويجب أن تتماشى مع [[{{MediaWiki:Policy-url}}|سياسة المنع]]. أدخل تعليلاً واضحًا لسبب المنع في الخانة المخصصة لذلك (مثلاً: ذكر صفحات محددة تمّ تخريبها من قبل المستخدم).",
-       "ipadressorusername": "عنوان الأيبي أو اسم المستخدم:",
+       "ipaddressorusername": "عنوان الأيبي أو اسم المستخدم:",
        "ipbexpiry": "مدة المنع:",
        "ipbreason": "السبب:",
        "ipbreason-dropdown": "*أسباب المنع الشائعة\n** كتابة معلومات زائفة\n** إزالة المحتوى من الصفحات\n** سبام وصلات لمواقع خارجية\n** كتابة كلام لا معنى له في الصفحات\n** سلوك عدواني\n** إساءة استخدام حسابات متعددة\n** اسم مستخدم غير مقبول",
        "newimages-summary": "هذه الصفحة الخاصة تعرض آخر الملفات المرفوعة.",
        "newimages-legend": "المرشح",
        "newimages-label": "اسم الملف (أو جزء منه):",
-       "showhidebots": "($1 بوتات)",
        "noimages": "لا شيء للعرض.",
        "ilsubmit": "بحث",
        "bydate": "حسب التاريخ",
index 58b9e0b..ae9538a 100644 (file)
        "blockip": "منع يوزر",
        "blockip-legend": "منع اليوزر",
        "blockiptext": "استخدم الاستمارة اللى تحت لمنع عنوان أيبى أو يوزر معين من الكتابة.\nدا لازم يحصل بس علشان تمنع التخريب ،و على حسب\n[[{{MediaWiki:Policy-url}}|السياسة]].\nاكتب سبب محدد تحت (يعنى مثلا، اكتب الصفحات المعينة اللى اتخربت بسببه).",
-       "ipadressorusername": "عنوان الأيبى أو اسم اليوزر:",
+       "ipaddressorusername": "عنوان الأيبى أو اسم اليوزر:",
        "ipbexpiry": "مدة المنع:",
        "ipbreason": "السبب:",
        "ipbreason-dropdown": "*أسباب المنع المشهورة\n** تدخيل معلومات غلط\n** مسح المحتوى من الصفحات\n** سبام لينك لمواقع خارجية\n** كتابة كلام مالوش معنى فى الصفحات\n** سلوك عدواني/تحرش\n** إساءة استخدام اكتر من حسابات\n** اسم يوزر مش مقبول",
        "newimages-summary": "الصفحةالمخصوصة دى بتعرض آخر الملفات المتحملة",
        "newimages-legend": "اسم الملف",
        "newimages-label": "اسم الملف (او حتة منه):",
-       "showhidebots": "($1 بوتات)",
        "noimages": "مافيش حاجة للعرض.",
        "ilsubmit": "تدوير",
        "bydate": "على حسب التاريخ",
index 891f16d..b7bf121 100644 (file)
        "accmailtext": "[[User talk:$1|$1]]-ৰ কাৰণে যাদৃচ্ছিকভাৱে উৎপন্ন কৰা গুপ্তশব্দ $2লৈ পঠোৱা হ'ল । \nএই নতুন একাউন্টত প্ৰৱেশ কৰি ''[[Special:ChangePassword|গুপ্তশব্দ সলনি কৰক]]'' পৃষ্ঠাখনত শব্দতো সলনি কৰি ল’ব পাৰিব ।",
        "newarticle": "(নতুন)",
        "newarticletext": "আপুনি বিচৰা প্ৰবন্ধটো বিচাৰি পোৱা নগ'ল।\n\nইচ্ছা কৰিলে আপুনিয়েই এই প্ৰবন্ধটো লিখা আৰম্ভ কৰিব পাৰে। [$1 ইয়াত] সহায় পাব।\n\nআপুনি যদি ইয়ালৈ ভুলতে আহিছে, তেনেহলে আপোনাৰ ব্ৰাওজাৰৰ '''BACK''' বুটামত টিপা মাৰক।",
-       "anontalkpagetext": "----''à¦\8fà¦\87à¦\96ন à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠা à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dযৰ à¦¬à¦¾à¦¬à§\87, à¦¯à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦\9cা à¦\8fà¦\95াà¦\89নà§\8dà¦\9f  à¦¸à§\83ষà§\8dà¦\9fি à¦\95ৰা à¦¨à¦¾à¦\87 à¦¬à¦¾ à¦¯à¦¿à¦¯à¦¼à§\87 à¦¸à§\87à¦\87 à¦\8fà¦\95াà¦\89নà§\8dà¦\9f à¦¬à§\8dযৱহাৰ à¦¨à¦\95ৰà§\87 à¥¤\nà¦\8fতà§\87à¦\95à§\87 à¦\86মি à¦¤à§\87à¦\96à§\87তসà¦\95লà¦\95 à¦\86à¦\87-পি à¦ à¦¿à¦\95নাৰà§\87 à¦\9aিনাà¦\95à§\8dত à¦\95ৰিবলà§\88 à¦¬à¦¾à¦§à§\8dয à¥¤\nসà§\87à¦\87 à¦\8fà¦\95à§\87à¦\87 à¦\86à¦\87-পি à¦ à¦¿à¦\95না à¦\85নà§\87à¦\95à§\87à¦\87 à¦¬à§\8dযৱহাৰ à¦\95ৰিব à¦ªà¦¾à§°à§\87 ।\nআপুনি যদি এজন বেনামী সদস্য আৰু যদি আপুনি অনুভৱ কৰে যে আপোনাৰ প্ৰতি অপ্ৰাসঙ্গিক মন্তব্য কৰা হৈছে, তেনেহলে আন বেনামী সদস্যৰ পৰা পৃথক কৰিবলৈ \n[[Special:UserLogin/signup|একাউন্ট সৃষ্টি কৰক]] বা [[Special:UserLogin|প্ৰৱেশ কৰক]] ।''",
+       "anontalkpagetext": "----''à¦\8fà¦\87à¦\96ন à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠা à¦¬à§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dযৰ à¦¬à¦¾à¦¬à§\87, à¦¯à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦\9cা à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f  à¦¸à§\83ষà§\8dà¦\9fি à¦\95ৰা à¦¨à¦¾à¦\87 à¦¬à¦¾ à¦¯à¦¿à¦¯à¦¼à§\87 à¦¸à§\87à¦\87 à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f à¦¬à§\8dযৱহাৰ à¦¨à¦\95ৰà§\87।\nà¦\8fতà§\87à¦\95à§\87 à¦\86মি à¦¤à§\87à¦\96à§\87তসà¦\95লà¦\95 à¦\86à¦\87-পি à¦ à¦¿à¦\95নাৰà§\87 à¦\9aিনাà¦\95à§\8dত à¦\95ৰিবলà§\88 à¦¬à¦¾à¦§à§\8dয।\nসà§\87à¦\87 à¦\8fà¦\95à§\87à¦\87 à¦\86à¦\87-পি à¦ à¦¿à¦\95না à¦\85নà§\87à¦\95à§\87à¦\87 à¦¬à§\8dযৱহাৰ à¦\95ৰিব à¦ªà¦¾à§°à§\87।\nআপুনি যদি এজন বেনামী সদস্য আৰু যদি আপুনি অনুভৱ কৰে যে আপোনাৰ প্ৰতি অপ্ৰাসঙ্গিক মন্তব্য কৰা হৈছে, তেনেহলে আন বেনামী সদস্যৰ পৰা পৃথক কৰিবলৈ \n[[Special:UserLogin/signup|একাউন্ট সৃষ্টি কৰক]] বা [[Special:UserLogin|প্ৰৱেশ কৰক]] ।''",
        "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": "\"{{FULLPAGENAME}}\" নামৰ পৃষ্ঠাৰ #$1 সংশোধনৰ অস্তিত্ব নাই।\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন ল'গ]ত অধিক তথ্য পাব।",
        "action-edit": "এই পৃষ্ঠা সম্পাদনা কৰক",
        "action-createpage": "পৃষ্ঠা সৃষ্টি কৰক",
        "action-createtalk": "কথাবতৰা পৃষ্ঠা সৃষ্টি কৰক",
-       "action-createaccount": "à¦\8fà¦\87 à¦¸à¦¦à¦¸à§\8dয à¦\8fà¦\95াà¦\89নà§\8dà¦\9f  সৃষ্টি কৰক",
+       "action-createaccount": "à¦\8fà¦\87 à¦¸à¦¦à¦¸à§\8dয à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f সৃষ্টি কৰক",
        "action-minoredit": "সম্পাদনা অগুৰুত্বপূৰ্ণ বুলি চিহ্নিত কৰক",
        "action-move": "এই পৃষ্ঠা স্থানান্তৰ কৰক",
        "action-move-subpages": "এই পৃষ্ঠা আৰু ইয়াৰ উপপৃষ্ঠাসমূহ আঁতৰাওক",
        "blockip": "সদস্য বাৰণ কৰক",
        "blockip-legend": "সদস্য বাৰণ কৰক",
        "blockiptext": "তলৰ প্ৰপত্ৰখন ব্যৱহাৰ কৰি কোনো নিৰ্দিষ্ট আই.পি. ঠিকনা বা সদস্যনামৰ লিখাৰ অধিকাৰ বাৰণ কৰিব পাৰে ।\nকেৱল ধ্বংসপ্ৰৱণতা ৰোধ কৰিবলৈ আৰু [[{{MediaWiki:Policy-url}}|নীতি]] মানি চলি এনে কৰক ।\nতলত এটা নিৰ্দিষ্ট কাৰণ উল্লেখ কৰক (যেনে, ধ্বংসসাধন কৰা পৃষ্ঠাৰ নাম) ।",
-       "ipadressorusername": "আই-পি ঠিকনা বা সদস্যনাম:",
+       "ipaddressorusername": "আই-পি ঠিকনা বা সদস্যনাম:",
        "ipbexpiry": "ম্যাদ উকলিব:",
        "ipbreason": "কাৰণ:",
        "ipbreason-dropdown": "*প্ৰতিবন্ধকৰ সাধাৰণ কাৰণসমূহ\n** ভুল তথ্য দিয়া\n** পৃষ্ঠাৰ বিষয়বস্তু আঁতৰাই পেলোৱা\n** কোনো বাহিৰা চাইটলৈ স্পাম সংযোগ দিয়া\n** পৃষ্ঠাত অৰ্থহীন বিষয়বস্তু প্ৰৱেশ কৰোৱা\n** ভীতি উদ্ৰেককাৰী আচৰণ/হাৰাশাস্তি\n** একাধিক একাউণ্টৰ অপব্যৱহাৰ\n** অগ্ৰহণযোগ্য সদস্যনাম",
        "blocklogtext": "এই অভিলেখ অৱৰোধ কৰা আৰু অৱৰোধ আঁতৰ কৰা সদস্য সম্পৰ্কীয়।\nস্বয়ংক্ৰিয়ভাৱে প্ৰতিবন্ধক পোৱা আই.পি. ঠিকনাবোৰ ইয়াত তালিকাভুক্ত কৰা হোৱা নাই।\nসাম্প্ৰতিক কাৰ্যৰত নিষেধ আৰু প্ৰতিবন্ধকৰ বাবে [[Special:BlockList|প্ৰতিবন্ধক তালিকা]] চাওক।",
        "unblocklogentry": "$1 বাৰণ উঠাই লোৱা হ’ল",
        "block-log-flags-anononly": "কেৱল বেনামী সদস্য",
-       "block-log-flags-nocreate": "à¦\8fà¦\95াà¦\89ন্ট সৃষ্টি নিষ্ক্ৰিয় কৰা হৈছে",
+       "block-log-flags-nocreate": "à¦\8fà¦\95াà¦\89ণ্ট সৃষ্টি নিষ্ক্ৰিয় কৰা হৈছে",
        "block-log-flags-noautoblock": "স্বয়ংক্ৰিয়-প্ৰতিবন্ধক নিষ্ক্ৰিয় কৰা হৈছে",
        "block-log-flags-noemail": "ই-মেইল অৱৰোধ কৰা হৈছে",
        "block-log-flags-nousertalk": "নিজৰ কথা-বতৰা পৃষ্ঠা সম্পাদনা কৰিব নোৱাৰি",
        "block-log-flags-angry-autoblock": "বৰ্ধিত স্বয়ংক্ৰিয়-প্ৰতিবন্ধক সক্ৰিয় কৰা হৈছে",
        "block-log-flags-hiddenname": "সদস্যনাম গোপন কৰা হ’ল",
-       "range_block_disabled": "প্ৰশাসকৰ পৰিসীমা প্ৰতিবন্ধক সৃষ্টি কৰিব পৰা ক্ষমতা নিষ্ক্ৰিয় কৰা হৈছে ।",
+       "range_block_disabled": "প্ৰশাসকৰ পৰিসীমা প্ৰতিবন্ধক সৃষ্টি কৰিব পৰা ক্ষমতা নিষ্ক্ৰিয় কৰা হৈছে।",
        "ipb_expiry_invalid": "অবৈধ ম্যাদ উকলা সময়",
        "ipb_expiry_temp": "গুপ্ত সদস্যনাম অৱৰোধ স্থায়ী হ’ব লাগিব ।",
        "ipb_hide_invalid": "এই বিষয়বস্তু নিবাৰণ কৰিব পৰা নগ’ল; ইয়াত {{PLURAL:$1|এটা সম্পাদনা|$1টা সম্পাদনা}} আছে ।",
        "newimages-summary": "এই বিশেষ পৃষ্ঠাখনত সৰ্বশেষত আপল'ড কৰা ফাইলসমূহ দেখিব ।",
        "newimages-legend": "ছেকনী",
        "newimages-label": "নথিৰ নাম (বা তাৰ এটা অংশ)",
-       "showhidebots": "(বট $1)",
        "noimages": "চাবলৈ একো নাই ।",
        "ilsubmit": "সন্ধান কৰক",
        "bydate": "তাৰিখ অনুযায়ী",
index d23c839..5ce286e 100644 (file)
        "jumptonavigation": "navegación",
        "jumptosearch": "buscar",
        "view-pool-error": "Sentímoslo, los sirvidores tán sobrecargaos nestos momentos.\nHai demasiaos usuarios intentando ver esta páxina.\nPor favor espera un ratu enantes d'intentar otra vuelta entrar a esta páxina.\n\n$1",
+       "generic-pool-error": "Sentímoslo, los sirvidores tán sobrecargaos nestos momentos.\nHai demasiaos usuarios intentando ver esti recursu.\nPor favor espera un momentu enantes d'intentar otra vuelta acceder a esti recursu.",
        "pool-timeout": "Tiempu escosáu esperando pal bloquéu",
        "pool-queuefull": "La cola de trabayu ta enllena",
        "pool-errorunknown": "Fallu desconocíu",
        "edit-gone-missing": "Nun se pudo actualizar la páxina.\nPaez que se desanició.",
        "edit-conflict": "Conflictu d'edición.",
        "edit-no-change": "S'inoró la to edición, porque nun se fizo nengún cambéu nel testu.",
+       "postedit-confirmation-created": "Creóse la páxina.",
+       "postedit-confirmation-restored": "Restauróse la páxina.",
        "postedit-confirmation-saved": "Guardose la edición.",
        "edit-already-exists": "Nun pudo crease una páxina nueva.\nEsta yá esiste.",
        "defaultmessagetext": "Testu predetermináu",
        "action-createpage": "crear páxines",
        "action-createtalk": "crear páxines d'alderique",
        "action-createaccount": "crear esta cuenta d'usuariu",
+       "action-history": "ver l'historial d'esta páxina",
        "action-minoredit": "marcar esta edición como menor",
        "action-move": "treslladar esta páxina",
        "action-move-subpages": "treslladar esta páxina y les sos subpáxines",
        "pageswithprop-prophidden-binary": "valor de propiedá binaria tapecíu ($1)",
        "doubleredirects": "Redireiciones dobles",
        "doubleredirectstext": "Esta páxina llista páxines que redireicionen a otres páxines de redireición.\nCada filera contién enllaces a la primer y segunda redireición, asina como al oxetivu de la segunda redireición, que de vezu ye la páxina oxetivu \"real\", onde tendría d'empobinar la primer redireición.\nLes entraes <del>tachaes</del> tan resueltes.",
-       "double-redirect-fixed-move": "[[$1]] foi treslladáu, agora ye una redireición haza [[$2]]",
-       "double-redirect-fixed-maintenance": "Iguando la doble redireición de [[$1]] a [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] treslladóse.\nAnovóse automáticamente y agora redirixe haza [[$2]].",
+       "double-redirect-fixed-maintenance": "Iguando automáticamente la doble redireición de [[$1]] a [[$2]] nuna xera de mantenimientu.",
        "double-redirect-fixer": "Iguador de redireiciones",
        "brokenredirects": "Redireiciones rotes",
        "brokenredirectstext": "Les siguientes redireiciones enllacien a páxines non esistentes:",
        "blockip": "Bloquiar usuariu",
        "blockip-legend": "Bloquiar usuariu",
        "blockiptext": "Usa'l siguiente formulariu pa bloquiar el permisu d'escritura a una IP o a un usuariu concretu.\nEsto debería facese sólo pa prevenir vandalismu como indiquen les [[{{MediaWiki:Policy-url}}|polítiques]]. Da un motivu específicu (como por exemplu citar páxines que fueron vandalizaes).",
-       "ipadressorusername": "Direición IP o nome d'usuariu:",
+       "ipaddressorusername": "Direición IP o nome d'usuariu:",
        "ipbexpiry": "Caducidá:",
        "ipbreason": "Motivu:",
        "ipbreason-dropdown": "*Motivos comunes de bloquéu\n** Enxertamientu d'información falso\n** Dexar les páxines en blanco\n** Enllaces spam a páxines esternes\n** Enxertamientu de babayaes/enguedeyos nes páxines\n** Comportamientu intimidatoriu o d'acosu\n** Abusu de cuentes múltiples\n** Nome d'usuariu inaceutable",
        "newimages-summary": "Esta páxina especial amuesa los caberos archivos xubíos.",
        "newimages-legend": "Peñera",
        "newimages-label": "Nome d'archivu (o una parte d'él):",
-       "showhidebots": "($1 bots)",
        "noimages": "Nun hai nada que ver.",
        "ilsubmit": "Buscar",
        "bydate": "por fecha",
        "htmlform-no": "Non",
        "htmlform-yes": "Sí",
        "htmlform-chosen-placeholder": "Seleicione una opción",
+       "htmlform-cloner-create": "Amestar más",
+       "htmlform-cloner-delete": "Desaniciar",
+       "htmlform-cloner-required": "Necesítase polo menos un valor.",
        "sqlite-has-fts": "$1 con sofitu pa busca de testu completu",
        "sqlite-no-fts": "$1 ensin sofitu pa busca de testu completu",
        "logentry-delete-delete": "$1 {{GENDER:$2|desanició}} la páxina $3",
index 4cdc88c..a93e2de 100644 (file)
        "blockip": "Elekara va IP mane ok favesik",
        "blockip-legend": "Elekara va favesik",
        "blockiptext": "Ta suterafa elekara va vansara male pilkovafe IP mane ok favesikyolt va vlevefa erurateza favel !\nMana sabegara zo goskur ta weyonara va cidara is dotrakason va [[{{MediaWiki:Policy-url}}|gotarkan vexeem]].\nVa lazavanha (tulon ozwason va cidayanu bu se) vlevon bazel !",
-       "ipadressorusername": "IP mane ok favesikyolt",
+       "ipaddressorusername": "IP mane ok favesikyolt",
        "ipbexpiry": "Elekaracek",
        "ipbreason": "Elekaradanda :",
        "ipbcreateaccount": "Djira va pataredura",
        "newimages-summary": "Batu aptafu bu va ironokaf kalvajayan iyeltakeem nedir.",
        "newimages-legend": "Espara",
        "newimages-label": "Iyeltak (ok ki) :",
-       "showhidebots": "($1 stiernik)",
        "noimages": "Mecoba rowina",
        "ilsubmit": "Aneyara",
        "bydate": "kan evla",
index e5b0a6d..bd8c2bf 100644 (file)
        "unblock": "İstifadəçinin blokunu götür",
        "blockip": "İstifadəçini blokla",
        "blockip-legend": "İstifadəçinin bloklanması",
-       "ipadressorusername": "IP-ünvanı və ya istifadəçi adı",
+       "ipaddressorusername": "IP-ünvanı və ya istifadəçi adı",
        "ipbexpiry": "Bitmə müddəti:",
        "ipbreason": "Səbəb:",
        "ipbreason-dropdown": "*Bloklama səbəbləri:\n** Yalan məlumatların əlavə edilməsi\n** Səhifənin məzmununun silinməsi\n** Xarici saytlara spam-keçidlər\n** Səhifəyə mənasız və yararsız əlavələrə görə\n** Hədə və təqiblərə görə\n** Təhqirə görə\n** Çoxsaylı hesabdan sui istifadəyə görə\n** Qadağan olunmuş istifadəçi adına görə",
        "newimages": "Yeni faylların siyahısı",
        "newimages-legend": "Filtrlər",
        "newimages-label": "Faylın (və ya onun bir hissəsinin) adı:",
-       "showhidebots": "($1 bot redaktə)",
        "noimages": "Heç nəyi görməmək.",
        "ilsubmit": "Axtar",
        "bydate": "tarixə görə",
index 6a175dd..66a889a 100644 (file)
                        "아라"
                ]
        },
-       "tog-underline": "باغلانتیلارین آلتینی خطله:",
-       "tog-hideminor": "سÙ\88Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ردÙ\87 Ú©Û\8cÚ\86Û\8cÚ©â\80\8cلری گیزلت",
-       "tog-hidepatrolled": "نظارتلنمیش دَییشیکلیکلری سون دییشیکلیکلرده گیزلت",
-       "tog-newpageshidepatrolled": "نظارتلنمیش صحیفه‌لری یئنی صحیفه‌لر سیاهی‌سیندان گیزلت",
-       "tog-extendwatchlist": "ایزله‌دیکلری، بوتون دیشیکلیکلری گؤسترمک اوچون گئنیشلندیر",
+       "tog-underline": "باغلانتیلارین آلتینی خطله:",
+       "tog-hideminor": "سÙ\88Ù\92Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ردÙ\87 Ú©Û\8cÚ\86Û\8cÚ©لری گیزلت",
+       "tog-hidepatrolled": "سوْن دییشیکلیکلرده نظارتلنمیش دَییشیکلیکلری گیزلت",
+       "tog-newpageshidepatrolled": "نظارتلنمیش صحیفه‌لری یئنی صحیفه‌لر لیستین‌دن گیزلت",
+       "tog-extendwatchlist": "گؤزله‌دیکلری، یالنیز یئنیلر اۆچون یوْخ، بۆتون دییشیکلیکلری گؤسترمک اۆچون، گئنیشلندیر.",
        "tog-usenewrc": "دَییشیکلیکلری سون دَییشیکلیکلر صحیفه‌سینده ایزله‌دیکلر صحیفه‌سینده گروپ‌لا (جاوااسکریپت لازیم‌دیر)",
-       "tog-numberheadings": "باشلیق‌لاری اوتوماتیک نومره‌له",
-       "tog-showtoolbar": "دَییشدیرمه آراج چوبوغونو گؤستر",
-       "tog-editondblclick": "صحیفه‌‌لری ایکی کلیک‌ده دَییشدیر",
-       "tog-editsectiononrightclick": "بؤلوم‌لرین دیشدیرمه‌سینی، باشلیقلارین اوزرینده ساغ‌کلیک ائتمک‌له ایجازه وئر",
-       "tog-watchcreations": "ياراتدیغیم صحیفه‌‌لری و يوکله‌دیگیم فايل‌لاری ایزله‌مه‌لریمه آرتیر",
-       "tog-watchdefault": "دَییشدیردیگیم صحیفه‌‌لری و فايل‌لاری ایزله‌دیکلریمه آرتیر",
-       "tog-watchmoves": "داشیدیغیم صحیفه‌‌لری و فايل‌لاری ایزله‌دیکلریمه آرتیر",
-       "tog-watchdeletion": "سیلدیگیم صحیفه‌‌لری و فايل‌لاری ایزله‌دیکلریمه آرتیر",
-       "tog-minordefault": "دیفالت اولاراق بوتون دَییشدیر‌مه‌لریمی کیچیک دَییشدیر کیمی نیشانلا",
-       "tog-previewontop": "اؤن‌گؤستریشی يازماق قوتوسوندان قاباق گؤستر",
+       "tog-numberheadings": "باشلیقلاری اوْتوماتیک نۆمره‌له",
+       "tog-showtoolbar": "دَییشدیرمک آراج-چۇبوغونو گؤستر",
+       "tog-editondblclick": "صحیفه‌‌لری ایکی کیلیک‌ده دَییشدیر",
+       "tog-editsectiononrightclick": "بؤلوم‌لرین دَییشدیرمه‌سینی، باشلیقلارین اۆزرینده ساغ‌کلیک ائتمک‌له ایجازه وئر",
+       "tog-watchcreations": "ياراتدیغیم صحیفه‌‌لری و يۆکله‌دیگیم فايل‌لاری، گؤزله‌دیکلریمه آرتیر",
+       "tog-watchdefault": "دَییشدیردیگیم صحیفه‌‌لری و فايل‌لاری، گؤزله‌دیکلریمه آرتیر",
+       "tog-watchmoves": "داشیدیغیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
+       "tog-watchdeletion": "سیلدیگیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
+       "tog-minordefault": "وارساییلان اوْلاراق، بۆتون دَییشدیر‌مه‌لری کیچیک کیمی نیشانلا",
+       "tog-previewontop": "اؤن‌گؤستریشی، يازماق قۇتوسوندان قاباق گؤستر",
        "tog-previewonfirst": "ایلک دَییشدیرمه‌ده اؤن‌گؤستریشی گؤستر",
-       "tog-enotifwatchlistpages": "ایزله‌دیکلریم‌ده اولان صحیفه یوخسا فایل دَییشدیریلنده، منه ایمیل گؤندر",
+       "tog-enotifwatchlistpages": "گؤزله‌دیکلریم‌ده اولان بیر صحیفه یا فایل دَییشدیریلنده، منه ایمیل گؤندر",
        "tog-enotifusertalkpages": "دانیشیق صحیفه‌‌م دَییشدیریلنده منه ایمیل گؤندر",
        "tog-enotifminoredits": "صحیفه‌لرده و فایل‌لاردا کیچیک دَییشیکلیکلر اولسا دا منه ایمیل گؤندر",
-       "tog-enotifrevealaddr": "Ù\85Ù\86Û\8cÙ\85 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¢Ø¯Ø±Ø³Û\8cÙ\85Û\8c Ø®Ø¨Ø± Ù\88ئرÙ\85Ù\87 ایمیل‌لرینده گؤستر",
-       "tog-shownumberswatching": "ایزله‌ين ایستیفاده‌چیلرین سایینی گؤستر",
+       "tog-enotifrevealaddr": "Ù\85Ù\86Û\8cÙ\85 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¢Ø¯Ø±Ø³Û\8cÙ\85Û\8c Ø¨Û\8cÙ\84دÛ\8cرÛ\8cØ´ ایمیل‌لرینده گؤستر",
+       "tog-shownumberswatching": "گؤزله‌ین ایستیفاده‌چیلرین سایینی گؤستر",
        "tog-oldsig": "ایندی‌کی ایمضا:",
-       "tog-fancysig": "ویکی متن کیمی ایمضا (اوتوماتیک باغلانتی‌سیز)",
-       "tog-uselivepreview": "دیری اؤن‌گؤستریش ایشلت (تست مرحله‌سینده)",
+       "tog-fancysig": "ایمضانی ویکی-متن کیمی نظره آل (اوْتوماتیک باغلانتی‌سیز)",
+       "tog-uselivepreview": "دیری اؤن‌گؤستریش ایشلت (تِست مرحله‌سینده)",
        "tog-forceeditsummary": "دَییشیکلیک قیساسی بوش قالاندا منی بیلدیر",
-       "tog-watchlisthideown": "منیم دَییشیکلیکلریمی ایزله‌دیکلردن گیزلت",
-       "tog-watchlisthidebots": "بوت دَییشیکلیکلرینی ایزله‌دیکلردن گیزلت",
-       "tog-watchlisthideminor": "کیچیک دَییشیکلیکلری ایزله‌دیکلردن گیزلت",
-       "tog-watchlisthideliu": "گیرمیش ایستیفاده‌چیلرین دَییشیکلیکلرینی ایزله‌دیکلردن گیزلت",
-       "tog-watchlisthideanons": "تانینمامیش ایستیفاده‌چیلرین دَییشیکلیکلرینی ایزله‌دیکلردن گیزلت",
-       "tog-watchlisthidepatrolled": "نظارتلنمیش دَییشیکلیکلری ایزله‌دیکلردن گیزلت",
-       "tog-ccmeonemails": "باشÙ\82ا Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÙ\87 Ú¯Ø¤Ù\86دردÛ\8cÚ¯Û\8cÙ\85 Ø§Û\8cÙ\85Û\8cÙ\84â\80\8cÙ\84رÛ\8cÙ\86 Ú©Ù\88پیلرینی منه گؤندر",
-       "tog-diffonly": "موقاییسه‌لر آلیتندا صحیفه‌لرین ایچینده‌کیلرینی گؤسترمه",
+       "tog-watchlisthideown": "منیم دَییشیکلیکلریمی گؤزله‌دیکلردن گیزلت",
+       "tog-watchlisthidebots": "بوْت دَییشیکلیکلرینی گؤزله‌دیکلردن گیزلت",
+       "tog-watchlisthideminor": "کیچیک دَییشیکلیکلری گؤزله‌دیکلردن گیزلت",
+       "tog-watchlisthideliu": "گیرمیش ایستیفاده‌چیلرین دَییشیکلیکلرینی گؤزله‌دیکلردن گیزلت",
+       "tog-watchlisthideanons": "تانینمامیش ایستیفاده‌چیلرین دَییشیکلیکلرینی گؤزله‌دیکلردن گیزلت",
+       "tog-watchlisthidepatrolled": "نظارتلنمیش دَییشیکلیکلری گؤزله‌دیکلردن گیزلت",
+       "tog-ccmeonemails": "Ø¢Û\8cرÛ\8c Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÙ\87 Ú¯Ø¤Ù\86دردÛ\8cÚ¯Û\8cÙ\85 Ø§Û\8cÙ\85Û\8cÙ\84â\80\8cÙ\84رÛ\8cÙ\86 Ú©Ù\88Ù\92پیلرینی منه گؤندر",
+       "tog-diffonly": "مۇقاییسه‌لر آلیتندا صحیفه‌لرین ایچینده‌کیلرینی گؤسترمه",
        "tog-showhiddencats": "گیزلی بؤلمه‌لری گؤستر",
        "tog-norollbackdiff": "قایتاراندان سونرا موقاییسه گؤسترمه",
-       "tog-useeditwarning": "دÙ\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ù\87 ØµØ­Û\8cÙ\81Ù\87â\80\8cسÛ\8cÙ\86دÙ\87 Ú\86Û\8cØ®Û\8cØ´ Ø²Ø§Ù\85اÙ\86Û\8cØ\8c Ø¢Ú\86Û\8cÙ\82 Ù\88 Ù\82ئÛ\8cد Ø§Ù\88Ù\84Ù\85اÛ\8cاÙ\86 Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ù\87 ØµØ­Û\8cÙ\81Ù\87 Ù\88ارسا Ù\85Ù\86Ù\87 Ù\87شدار Ù\88ئرÛ\8cÙ\84سÛ\8cÙ\86",
+       "tog-useeditwarning": "دÙ\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ù\87 ØµØ­Û\8cÙ\81Ù\87â\80\8cسÛ\8cÙ\86دÙ\86 Ú\86Û\8cخاÙ\86داØ\8c Ù\82ئÛ\8cد Ø§Ø¦Ø¯Û\8cÙ\84Ù\85Ù\87â\80\8cÙ\85Û\8cØ´ Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ù\87 Ø§Ù\88Ù\92Ù\84ساØ\8c Ù\85Ù\86Ù\87 Ù\87شدار Ù\88ئر",
        "tog-prefershttps": "هر زامان گیریش ائتمگه امن باغلانتی ایشلت",
-       "underline-always": "همیشه",
+       "underline-always": "هر زامان",
        "underline-never": "هئچ واخت",
-       "underline-default": "دیفالت قابیق یوخسا براوزر",
-       "editfont-style": "دَییشدیرمه قوتوطونون فونت نؤوعو:",
-       "editfont-default": "براوزر دیفالتی",
-       "editfont-monospace": "ثابیت آرالی فونت",
-       "editfont-sansserif": "بوجاق‌سیز فونت",
-       "editfont-serif": "بوجاق‌لی فونت",
-       "sunday": "سود گونو(یکشنبه)",
-       "monday": "دوزگونو(دوشنبه)",
-       "tuesday": "آرا گون(سه‌شنبه)",
-       "wednesday": "اوْدگونو(چهارشنبه)",
-       "thursday": "سوگونو(پنجشنبه)",
-       "friday": "جÙ\88Ù\85ا(Ø¢Û\8cÙ\86Û\8câ\80\8cÚ¯Ù\88Ù\86)",
-       "saturday": "يئل‌گونو(شنبه)",
-       "sun": "سود گونو(یکشنبه)",
-       "mon": "دوزگونو(دوشنبه)",
-       "tue": "سÙ\87â\80\8cØ´Ù\86بÙ\87(آرا Ú¯Ù\88Ù\86)",
+       "underline-default": "وارساییلان قابیق یا براوزِر",
+       "editfont-style": "دَییشدیرمه قۇتوسونون فوْنتی:",
+       "editfont-default": "براوزِر وارساییلانی",
+       "editfont-monospace": "ثابÛ\8cت Ø¢Ø±Ø§Ù\84Û\8c Ù\81Ù\88Ù\92Ù\86ت",
+       "editfont-sansserif": "بۇجاق‌سیز فوْنت",
+       "editfont-serif": "بۇجاق‌لی فوْنت",
+       "sunday": "سۆدگونو (یکشنبه)",
+       "monday": "دۇزگونو (دوشنبه)",
+       "tuesday": "آراگون (سه‌شنبه)",
+       "wednesday": "اوْدگونو (چهارشنبه)",
+       "thursday": "سۇگونو (پنجشنبه)",
+       "friday": "Ø¢Û\8cÙ\86Û\8câ\80\8cÚ¯Ù\88Ù\86 (جÛ\86Ù\85عÙ\87)",
+       "saturday": "يئل‌گونو (شنبه)",
+       "sun": "سۆدگونو (یکشنبه)",
+       "mon": "دۇزگونو (دوشنبه)",
+       "tue": "آراگÙ\88Ù\86 (سÙ\87â\80\8cØ´Ù\86بÙ\87)",
        "wed": "اوْدگونو (چهارشنبه)",
-       "thu": "سوگونو(پنجشنبه)",
-       "fri": "آینی‌گون(جوما)",
-       "sat": "يئل‌گونو(شنبه)",
+       "thu": "سۇگونو (پنجشنبه)",
+       "fri": "آینی‌گون (جۆمعه)",
+       "sat": "يئل‌گونو (شنبه)",
        "january": "ژانویه",
        "february": "فئوریه",
        "march": "مارس",
        "july": "ژولای",
        "august": "آقوست",
        "september": "سئپتامبر",
-       "october": "اوکتوبر",
-       "november": "نووامبر",
+       "october": "اوْکتوبر",
+       "november": "Ù\86Ù\88Ù\92Ù\88اÙ\85بر",
        "december": "دئسامبر",
        "january-gen": "ژانویه",
-       "february-gen": "فوریه",
+       "february-gen": "فئوریه",
        "march-gen": "مارس",
        "april-gen": "آوریل",
-       "may-gen": "مِی",
+       "may-gen": "مئی",
        "june-gen": "ژوئن",
        "july-gen": "جولای",
        "august-gen": "آقوست",
        "jul": "ژولای",
        "aug": "آقوست",
        "sep": "سئپتامبر",
-       "oct": "اوکتوبر",
-       "nov": "نووامبر",
+       "oct": "اوْکتوبر",
+       "nov": "Ù\86Ù\88Ù\92Ù\88اÙ\85بر",
        "dec": "دئسامبر",
        "january-date": "ژانویه‌نین $1-ی",
-       "february-date": "$1 فئوریه",
+       "february-date": "فئوریه‌نین $1-ی",
        "march-date": "مارسین $1-ی",
        "april-date": "آوریلین $1-ی",
-       "may-date": "$1 مئی",
+       "may-date": "مئیین $1-ی",
        "june-date": "ژوئنین $1-ی",
-       "july-date": "$1 ژولای",
-       "august-date": "$1 آقوست",
-       "september-date": "$1 سئپتامبر",
-       "october-date": "$1 اوکتوبر",
-       "november-date": "$1 نووامبر",
-       "december-date": "$1 دئسامبر",
+       "july-date": "ژولایین $1-ی",
+       "august-date": "آقوستون $1-ی",
+       "september-date": "سئپتامبرین $1-ی",
+       "october-date": "اوْکتوبرون $1-ی",
+       "november-date": "نوْوامبرین $1-ی",
+       "december-date": "دئسامبرین $1-ی",
        "pagecategories": "{{PLURAL:$1|بؤلمه|بؤلمه‌لر}}",
-       "category_header": "«$1» بؤلمه‌سین‌ده‌کی مقاله‌لر",
-       "subcategories": "آلت بؤلمه‌لر",
-       "category-media-header": "«$1» بؤلمه‌سینده مئدیا",
-       "category-empty": "''بو بؤلمه‌نین ایندی فایل یوخسا مئدیاسی یوخدور.''",
+       "category_header": "«$1» بؤلمه‌سین‌ده صحیفه‌لر",
+       "subcategories": "آلتبؤلمه‌لر",
+       "category-media-header": "«$1» بؤلمه‌سینده مئدیا",
+       "category-empty": "<em>بو بؤلمه‌ده ایندی فایل یا مئدیا یوْخدور.</em>",
        "hidden-categories": "{{PLURAL:$1|گیزلی بؤلمه|گیزلی بؤلمه‌لر}}",
        "hidden-category-category": "گیزلی بؤلمه‌لر",
-       "category-subcat-count": "بو بؤلمه‌ده {{PLURAL:$2|یالنیز|}} آشاغیداکی {{PLURAL:$1|بیر|$1}} آلت‌بؤلمه وار؛ بو بؤلمه‌نین جمعاً $2 آلت‌بؤلمه‌سی وار.",
-       "category-subcat-count-limited": "بو بؤلمه‌ده آشاغیداکی {{PLURAL:$1|آلت‌بؤلمه|$1 آلت‌بؤلمه}} واردیر.",
-       "category-article-count": "بو بؤلمه‌ده {{PLURAL:$2|یالنیز|}} آشاغیداکی {{PLURAL:$1|بیر|$1}} صحیفه وار؛ بو بؤلمه‌نین جمعاً $2 صحیفه‌سی وار.",
-       "category-article-count-limited": "بو بؤلمه‌ده، آشاغیداکی {{PLURAL:$1|یارپاق|$1 یارپاق}} واردیر.",
-       "category-file-count": "بو بؤلمه‌ده {{PLURAL:$2|یالنیز|}} آشاغیداکی {{PLURAL:$1|بیر|$1}} فایل وار؛ بو بؤلمه‌نین جمعاً $2 فایلی وار.",
-       "category-file-count-limited": "بؤلمه‌ده، بو {{PLURAL:$1|فایل|$1 فایل}} واردیر.",
+       "category-subcat-count": "{{PLURAL:$2|بۇ بؤلمه‌ده یالنیز آشاغیداکی آلت‌بؤلمه واردیر.|بۇ بؤلمه‌ده، توپلام $2-دن، آشاغیداکی {{PLURAL:$1|آلت‌بؤلمه|$1 آلت‌بؤلمه}} واردیر.}}",
+       "category-subcat-count-limited": "بۇ بؤلمه‌ده آشاغیداکی {{PLURAL:$1|آلت‌بؤلمه|$1 آلت‌بؤلمه}} واردیر.",
+       "category-article-count": "{{PLURAL:$2|بۇ بؤلمه‌ده یالنیز آشاغیداکی صحیفه واردیر.|بۇ بؤلمه‌ده توْپلام $2 صحیفه‌دن، آشاغیداکی {{PLURAL:$1|صحیفه|$1 صحیفه}} واردیر.}}",
+       "category-article-count-limited": "بۇ بؤلمه‌ده، آشاغیداکی {{PLURAL:$1|صحیفه|$1 صحیفه}} واردیر.",
+       "category-file-count": "{{PLURAL:$2|بۇ بؤلمه‌ده یالنیز آشاغیداکی فایل واردیر.|بۇ بؤلمه‌ده توْپلام $1-دن، آشاغیداکی {{PLURAL:$1|فایل|$1 فایل}} واردیر.}}",
+       "category-file-count-limited": "بۇ بؤلمه‌ده، آشاغیداکی {{PLURAL:$1|فایل|$1 فایل}} واردیر.",
        "listingcontinuesabbrev": "(قالانی)",
-       "index-category": "ایندئکس‌لشدیریلمیش یارپاقلار",
-       "noindex-category": "ایندئکس‌لشدیریلمه‌ین یارپاقلار",
-       "broken-file-category": "Ù\81اÛ\8cÙ\84â\80\8cÙ\84ارا Ù\82Û\8cرÛ\8cÙ\84Ù\85Û\8cØ´ Ø¨Ø§ØºÙ\84اÙ\86تÛ\8cÙ\84ارÛ\8c Ø§Ù\88Ù\84اÙ\86 Û\8cارپاÙ\82Ù\84ار",
-       "about": "گؤره",
-       "article": "ایچری‌لی یارپاق",
+       "index-category": "ایندئکس‌لشدیریلمیش صحیفه‌لر",
+       "noindex-category": "ایندئکس‌لشدیریلمه‌میش صحیفه‌لر",
+       "broken-file-category": "Ù\82Û\8cرÛ\8cÙ\84Ù\85Û\8cØ´ Ù\81اÛ\8cÙ\84 Ø¨Ø§ØºÙ\84اÙ\86تÛ\8cÙ\84ارÛ\8c Ø§Ù\88Ù\92Ù\84اÙ\86 ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84ر",
+       "about": "حاقیندا",
+       "article": "ایچری‌لی صحیفه",
        "newwindow": "(یئنی پنجره‌ده آچیلیر)",
-       "cancel": "Ù\84غÙ\88 Ø§Ø¦Øª",
+       "cancel": "Ù\88ازگئÚ\86",
        "moredotdotdot": "داها...",
-       "morenotlisted": "بو لیست کامل دئییل.",
-       "mypage": "مقاله",
+       "morenotlisted": "بۇ لیست کامل دئییل.",
+       "mypage": "صحیفه",
        "mytalk": "دانیشیق",
        "anontalk": "بو آی‌پی آدرسینه دانیشیق",
-       "navigation": "دولانماق",
+       "navigation": "دÙ\88Ù\92Ù\84اÙ\86Ù\85اÙ\82",
        "and": "&#32;و",
        "qbfind": "تاپ",
-       "qbbrowse": "گؤزدÙ\86 Ú¯Ø¦Ú\86Û\8cد",
+       "qbbrowse": "گؤزدÙ\86 Ú¯Ø¦Ú\86Û\8cرت",
        "qbedit": "دَییشدیر",
-       "qbpageoptions": "بو صحیفه‌‌",
-       "qbmyoptions": "منیم صحیفه‌‌لریم",
-       "faq": "چوخ سوروشولان سواللار",
-       "faqpage": "Project:چوخلو سوروشولان سورغولار",
-       "vector-action-addsection": "قونو آرتیر",
+       "qbpageoptions": "بۇ صحیفه‌‌",
+       "qbmyoptions": "صحیفه‌‌لریم",
+       "faq": "چوْخ سوْروشولان سوْال‌لار",
+       "faqpage": "Project:چوْخ سوْروشولان سوْال‌لار",
+       "vector-action-addsection": "Ù\82Ù\88Ù\92Ù\86Ù\88 Ø¢Ø±ØªÛ\8cر",
        "vector-action-delete": "سیل",
-       "vector-action-move": "آدÛ\8cÙ\86Û\8c Ø¯Ù\8aÙ\8eÛ\8cشدÛ\8cر",
-       "vector-action-protect": "قورو",
+       "vector-action-move": "داشÛ\8c",
+       "vector-action-protect": "قوْرو",
        "vector-action-undelete": "سیلمگی قایتار",
-       "vector-action-unprotect": "قوروماغی دَییشدیر",
+       "vector-action-unprotect": "قوْروماغی دَییشدیر",
        "vector-view-create": "یارات",
        "vector-view-edit": "دَییشدیر",
        "vector-view-history": "گئچمیشه باخ",
-       "vector-view-view": "اوخو",
+       "vector-view-view": "اوْخو",
        "vector-view-viewsource": "قایناغا باخ",
-       "actions": "ایشلر",
-       "namespaces": "آدلار فضاسی",
+       "actions": "چالیشمالار",
+       "namespaces": "آد فضالاری",
        "variants": "واریانتلار",
-       "navigation-heading": "دولانماق مِنوسو",
+       "navigation-heading": "دÙ\88Ù\92Ù\84اÙ\86Ù\85اÙ\82 Ù\85Ù\90Ù\86Ù\88سÙ\88",
        "errorpagetitle": "خطا",
        "returnto": "$1-ه قاییت.",
        "tagline": "{{SITENAME}} سایتیندان",
        "searcharticle": "گئت",
        "history": "صحیفه‌‌نین گئچمیشی",
        "history_short": "گئچمیش",
-       "updatedmarker": "سÙ\88Ù\86 Ø¨Ø§Ø®Û\8cØ´Û\8cÙ\85داÙ\86 Ø¨Ù\88Û\8cاÙ\86اØ\8c Û\8cئÙ\86Û\8câ\80\8cÙ\84Ø´یب‌دیر",
-       "printableversion": "چاپ ائتمه‌لی نوسخه",
+       "updatedmarker": "سÙ\88Ù\92Ù\86 Ø¨Ø§Ø®Û\8cØ´Û\8cÙ\85داÙ\86 Ø³Ù\88Ù\92Ù\86را Û\8cئÙ\86Û\8câ\80\8cÙ\84Ù\86یب‌دیر",
+       "printableversion": "یازدیریرا بیلن نۆسخه",
        "permalink": "قالان باغلانتی",
        "print": "یازدیر",
        "view": "باخ",
        "edit": "دَییشدیر",
        "create": "یارات",
-       "editthispage": "بو صحیفه‌‌نی دَییشدیر",
-       "create-this-page": "بو صحیفه‌‌نی يارات",
+       "editthispage": "بۇ صحیفه‌‌نی دَییشدیر",
+       "create-this-page": "بۇ صحیفه‌‌نی يارات",
        "delete": "سیل",
-       "deletethispage": "بو صحیفه‌‌نی سیل",
-       "undeletethispage": "بو صحیفه‌نی دیریلت",
-       "undelete_short": "{{PLURAL:$1|بیر دَییشیکلیگی|$1 دَییشیکلیگی}} برپا ائت",
-       "viewdeleted_short": "{{PLURAL:$1|بیر|$1}} سیلینمیش دَییشیکلیگی گؤستر",
-       "protect": "قوروماق",
+       "deletethispage": "بۇ صحیفه‌‌نی سیل",
+       "undeletethispage": "بۇ صحیفه‌نی دیریلت",
+       "undelete_short": "{{PLURAL:$1|بیر دَییشیکلیگی|$1 دَییشیکلیگی}} قایتار",
+       "viewdeleted_short": "{{PLURAL:$1|بیر|$1}} سیلینمیش دَییشیکلیگه باخ",
+       "protect": "قوْرو",
        "protect_change": "ديَیشدیر",
-       "protectthispage": "بو صحیفه‌‌نی قورو",
-       "unprotect": "قوروماغی دَییشدیر",
-       "unprotectthispage": "بو یارپاغین قوروماسینی دَییشدیر",
+       "protectthispage": "بۇ صحیفه‌‌نی قوْرو",
+       "unprotect": "قوْروماغی دَییشدیر",
+       "unprotectthispage": "بۇ صحیفه‌نین قوْروماسینی دَییشدیر",
        "newpage": "يئنی صحیفه‌‌",
-       "talkpage": "بو صحیفه‌یه گؤره دانیشیق آپارین",
+       "talkpage": "بۇ صحیفه‌نی دانیش",
        "talkpagelinktext": "دانیشیق",
        "specialpage": "اؤزل صحیفه",
        "personaltools": "شخصی آراجلار",
        "postcomment": "يئنی بؤلوم",
-       "articlepage": "مقاله‌یه باخین",
+       "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
        "views": "گؤرونوشلر",
        "toolbox": "آراجلار",
-       "userpage": "ایستیفاده‌چی صحیفه‌‌سینی باخین",
-       "projectpage": "پروژه صحیفه‌سینه باخین",
-       "imagepage": "فایل صحیفه‌سینه باخین",
-       "mediawikipage": "مئساژ صحیفه‌سینه باخین",
-       "templatepage": "شابلون صحیفه‌سینه باخین",
-       "viewhelppage": "یاردیم صحیفه‌سینه باخین",
-       "categorypage": "بؤلمه صحیفه‌‌سینی گؤستر",
-       "viewtalkpage": "دانیشیغا باخین",
+       "userpage": "ایستیفاده‌چی صحیفه‌‌سینه باخ",
+       "projectpage": "پروژه صحیفه‌سینه باخ",
+       "imagepage": "فایل صحیفه‌سینه باخ",
+       "mediawikipage": "مئساژ صحیفه‌سینه باخ",
+       "templatepage": "شابلون صحیفه‌سینه باخ",
+       "viewhelppage": "یاردیم صحیفه‌سینه باخ",
+       "categorypage": "بؤلمه صحیفه‌‌سینه باخ",
+       "viewtalkpage": "دانیشیغا باخ",
        "otherlanguages": "آیری دیل‌لرده",
-       "redirectedfrom": "($1 صحیفه‌‌سیندن يؤنلن‌دیریلمیش‌دیر)",
-       "redirectpagesub": "Û\8cÙ\88Ù\84لاندیرما صحیفه‌سی",
-       "lastmodifiedat": "بو صحیفه‌‌ سون دفعه‌‌ $1، $2 چاغیندا دَییشیلیب‌دیر.",
-       "viewcount": "بو یارپاق {{PLURAL:$1|بیر|$1}} دفعه گؤرونوب‌دور.",
-       "protectedpage": "قورونموش یارپاق",
-       "jumpto": "آتلان:",
-       "jumptonavigation": "دولانماق",
+       "redirectedfrom": "($1-دن يوْل‌لاندیریلمیش)",
+       "redirectpagesub": "Û\8cÙ\88Ù\92Ù\84â\80\8cلاندیرما صحیفه‌سی",
+       "lastmodifiedat": "بۇ صحیفه‌‌ سوْن دفعه‌‌ $1، $2 چاغیندا دَییشیلمیشدیر.",
+       "viewcount": "بۇ صحیفه {{PLURAL:$1|بیر|$1}} دفعه گؤرولوبدور.",
+       "protectedpage": "قوْرونموش صحیفه",
+       "jumpto": "آتیل:",
+       "jumptonavigation": "دÙ\88Ù\92Ù\84اÙ\86Ù\85اÙ\82",
        "jumptosearch": "آختار",
-       "view-pool-error": "باغیشلایین، ایندی خیدمت‌چیلر آرتیق یوک آلتیندادیلار.\nچوخلو ایشلدنلر بو یارپاغی گؤرمک ایسته‌ییرلر.\nلوطفاً یئنی‌دن بو یارپاغا ال تاپماغا چالیشماقدان اؤنجه، بیر آز دؤزون.\n\n$1",
-       "pool-timeout": "قیفیلا دؤزمک واختی قورتاردی",
-       "pool-queuefull": "مخزن صفی دولودور",
-       "pool-errorunknown": "تاÙ\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ خطا",
-       "aboutsite": "{{SITENAME}}-ا گؤره",
+       "view-pool-error": "باغیشلایین، ایندی خیدمت‌چیلر آرتیق یۆک آلتیندادیلار.\nچوْخلو ایستیفاده‌چیلر بۇ صحیفه‌نی گؤرمک ایسته‌ییرلر.\nلۆطفاً یئنی‌دن بۇ صحیفه‌یه ال تاپماغا چالیشماقدان اؤنجه، بیر آز دؤزون.\n\n$1",
+       "pool-timeout": "قیفیلا دؤزماغین واختی بیتیردی",
+       "pool-queuefull": "Ù\85خزÙ\86 ØµÙ\81Û\8c Ø¯Ù\88Ù\92Ù\84Ù\88دÙ\88ر",
+       "pool-errorunknown": "بÛ\8cÙ\84Û\8cÙ\86Ù\85Ù\87â\80\8cÛ\8cÙ\86 خطا",
+       "aboutsite": "{{SITENAME}} حاقیندا",
        "aboutpage": "Project:حاقیندا",
        "copyright": "ایچینده‌کیلر $1 لیسانسی احاطه‌سینده‌دیلر.",
-       "copyrightpage": "{{ns:project}}:Ú©Ù\88Ù¾Û\8c Ø­Ø§Ù\82ی",
+       "copyrightpage": "{{ns:project}}:Ú©Ù\88Ù\92Ù¾Û\8c Ø­Ø§Ù\82Ù\84اری",
        "currentevents": "ایندیکی اولایلار",
        "currentevents-url": "Project:ایندیکی اولایلار",
        "disclaimers": "رد ائتمک",
        "disclaimerpage": "Project:عمومی رد ائتمک",
-       "edithelp": "ديَیشیکلیک‌لر اوچون یاردیم",
+       "edithelp": "ديَیشتیرمک یاردیمی",
        "mainpage": "آنا صحیفه",
        "mainpage-description": "آنا صحیفه",
        "policy-url": "Project:قایدالار",
-       "portal": "تÙ\88Ù¾Ù\84Ù\88Ù\85 Ù¾Ù\88رتالی",
-       "portal-url": "Project:تÙ\88Ù¾Ù\84Ù\88Ù\85 Ù¾Ù\88رتالی",
+       "portal": "تÙ\88Ù\92Ù¾Ù\84Ù\88Ù\85 Ù¾Ù\88Ù\92رتالی",
+       "portal-url": "Project:تÙ\88Ù\92Ù¾Ù\84Ù\88Ù\85 Ù¾Ù\88Ù\92رتالی",
        "privacy": "گیزلیلیک سیاستی",
        "privacypage": "Project:گیزلیلیک سیاستی",
-       "badaccess": "یول وئرمه خطاسی",
-       "badaccess-group0": "ایسته‌دیگینیز ایشه ایجازه‌نیز یوخدور.",
-       "badaccess-groups": "ایسته‌دیگینیز ایشین ایجازه‌سی، تکجه بو {{PLURAL:$2|قروپ|قروپلار}}داکی ایشلدنلره وئریلیب‌دیر: $1.",
-       "versionrequired": "مدئدیاویکی یازیلیمینین $1 نوسخه‌سی لازیم‌دیر",
-       "versionrequiredtext": "بو یارپاغی ایشلتدماغا، مئدیاویکی یازیلیمینین $1 نوسخه‌سی لازیم‌دیر.\n[[Special:Version|نوسخه یارپاغینا]] باخین.",
-       "ok": "اÙ\88Ù\84دÙ\88",
+       "badaccess": "ایجازه خطاسی",
+       "badaccess-group0": "ایسته‌دیگینیز ایشه ایجازه‌نیز یوْخدور.",
+       "badaccess-groups": "ایسته‌دیگینیز ایشین ایجازه‌سی، یالنیز بۇ {{PLURAL:$2|قروپ‌داکی|قروپلارین بیرینده‌کی}} ایستیفاده‌چیلره وئریلیب‌دیر: $1.",
+       "versionrequired": "مِدیاویکی یازیلیمینین $1 نۆسخه‌سی لازیمدیر",
+       "versionrequiredtext": "بۇ صحیفه‌نی ایشلتمک اۆچون، مِدیاویکی یازیلیمینین $1 نۆسخه‌سی لازیم‌دیر.\n[[Special:Version|نۆسخه صحیفه‌سینه]] باخ.",
+       "ok": "اÙ\88Ù\92Ù\84سÙ\88Ù\86",
        "retrievedfrom": "«$1»-دن آلینمیشدیر",
        "youhavenewmessages": "سیزین $1 ($2) وارینیزدیر.",
        "youhavenewmessagesfromusers": "سیزین {{PLURAL:$3|بیر آیری ایستیفاده‌چی‌دن|$3 ایستیفاده‌چی‌دن}} $1 وارینیزدیر ($2).",
-       "youhavenewmessagesmanyusers": "سیزین چوخلو ایشلدنلردن $1 وارینیزدیر ($2).",
+       "youhavenewmessagesmanyusers": "سیزین چوْخلو ایستیفاده‌چیلردن $1 وارینیزدیر ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|بیر یئنی مئساژ|999=یئنی مئساژلار}}",
        "newmessagesdifflinkplural": "سون {{PLURAL:$1|دَییشیکلیک|999=دَییشیکلیکلر}}",
-       "youhavenewmessagesmulti": "$1-دا یئنی بیلدیرینیز وار.",
+       "youhavenewmessagesmulti": "$1-ده یئنی مئساژینیز وار.",
        "editsection": "دَییشدیر",
        "editold": "دَییشدیر",
        "viewsourceold": "قایناغا باخ",
        "toc": "ایچینده‌کیلر",
        "showtoc": "گؤستر",
        "hidetoc": "گیزلت",
-       "collapsible-collapse": "گیزلت",
-       "collapsible-expand": "گئنیشلندیر",
-       "thisisdeleted": "$1-نا باخ یا اونو قایتار؟",
+       "collapsible-collapse": "ییغیشلات",
+       "collapsible-expand": "گئنیشلت",
+       "thisisdeleted": "$1-Ù\86ا Ø¨Ø§Ø® Û\8cا Ø§Ù\88Ù\92Ù\86Ù\88 Ù\82اÛ\8cتارØ\9f",
        "viewdeleted": "$1 گؤستریلسین؟",
-       "restorelink": "{{PLURAL:$1|بیر سیلینمیش دَییشیکلیک|$1 سیلینمیش دَییشیکلیکلر}}",
-       "feedlinks": "بسÙ\84Ù\85Ù\87",
-       "feed-invalid": "گئچرسیز آبونه کانال جورو.",
-       "feed-unavailable": "سیندیکاسیا خطلری ال‌ده دئییل‌لر",
+       "restorelink": "{{PLURAL:$1|بیر|$1}} سیلینمیش دَییشیکلیک",
+       "feedlinks": "بسÙ\84Ù\87â\80\8cÙ\85Ù\87:",
+       "feed-invalid": "گئچرسیز آبونه بسله‌مه جۆرو.",
+       "feed-unavailable": "سیندیکالاشما خطلری ال‌ده دئییل‌لر",
        "site-rss-feed": "$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": "مقاله",
+       "sort-ascending": "چوْخالان سیرالاماق",
+       "nstab-main": "صحیفه",
        "nstab-user": "ایستیفاده‌چی صحیفه‌سی",
        "nstab-media": "مئدیا صحیفه‌سی",
        "nstab-special": "اؤزل صحیفه",
        "nstab-template": "شابلون",
        "nstab-help": "یاردیم صحیفه‌سی",
        "nstab-category": "بؤلمه",
-       "nosuchaction": "بئله چالیشما یوخدور",
-       "nosuchactiontext": "URL-ده گؤستریلن ایش گئچرسیزدیر.\nاولا بیلر کی URL-ی یانلیش یازیب یوخسا یانلیش باغلانتی‌لا گلمیشسینیز.\nهمده بو، {{SITENAME}} سایتی ایشلدن یازیلیمین خطاسینی گؤستره بیلر.",
-       "nosuchspecialpage": "بئله اؤزل یارپاق یوخدور",
-       "nospecialpagetext": "<strong>سیز بیر یانلیش اؤزل یارپاغینی ایسته‌میسینیز.</strong>\nدوزگون اؤزل یارپاق‌لارین سیاهی‌سینی [[Special:SpecialPages|{{int:specialpages}}]]-ده گؤره بیلرسینیز.",
+       "nosuchaction": "بئله چالیشما یوْخدور",
+       "nosuchactiontext": "URL طرفیندن بیلینن ایش گئچرسیزدیر.\nURL-ی یانلیش یازمیش، یا یانلیش بیر باغلانتی ایله گلمیش، اوْلابیلرسیز.\nهم‌ده بۇ، {{SITENAME}} سایتی ایشلدن یازیلیمین خطاسینی گؤستره بیلر.",
+       "nosuchspecialpage": "بئله اؤزل صحیفه یوْخدور",
+       "nospecialpagetext": "<strong>سیز بیر یانلیش اؤزل صحیفه ایسته‌میسینیز.</strong>\n\nدۆزگون اؤزل صحیفه‌لرین لیستینی [[Special:SpecialPages|{{int:specialpages}}]]-ده گؤره بیلرسینیز.",
        "error": "خطا",
-       "databaseerror": "دیتابیس خطاسی",
+       "databaseerror": "دِیتابِیس خطاسی",
        "laggedslavemode": "'''دیقت:''' یارپاق‌دا، سون دَییشیکلیکلرین اولماماسی ایمکانی وار.",
        "readonly": "دیتابیس باغلانیب",
        "enterlockreason": "باغلاما نَدَن‌لیگی و آچیلماغین تخمینی واختینی یازین",
        "action-viewmyprivateinfo": "گیزلی بیلگیلرینی گؤر",
        "action-editmyprivateinfo": "گیزلی بیلگیلرینی دَییشدیر",
        "nchanges": "$1 {{PLURAL:$1|دَییشیکلیک}}",
+       "enhancedrc-history": "گئچمیش",
        "recentchanges": "سون دَییشیکلیکلر",
        "recentchanges-legend": "سون دَییشیکلیکلر سئچمه‌لری",
        "recentchanges-summary": "بو صحیفه‌ده، بو ویکی‌ده وئریلن ان سون دَییشیکلیکلری ایزله‌یین.",
        "recentchanges-label-minor": "بو بیر کیچیک دَییشدیرمه‌دیر",
        "recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
        "recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
+       "recentchanges-legend-heading": "'''ایختیصارلار:'''",
+       "recentchanges-legend-newpage": "(هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
        "rcnotefrom": "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر گلیبلر.",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
        "rcshowhideminor": "کیچیک دَییشیکلری $1",
+       "rcshowhideminor-show": "گؤستر",
+       "rcshowhideminor-hide": "گیزلت",
        "rcshowhidebots": "بوتلاری $1",
-       "rcshowhideliu": "ایچری گیرمیش ایستیفاده‌چیلری $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": "گئچمیش",
        "rc_categories_any": "هر",
        "rc-change-size-new": "دَییشیکلیک‌دن سونرا {{PLURAL:|بیر|$1}} بایت",
        "newsectionsummary": "/* $1 */ یئنی بؤلمه",
-       "rc-enhanced-expand": "تفصیلاتی گؤستر (جاوااسکریپت لازیم‌دیر)",
+       "rc-enhanced-expand": "تفصیل‌لری گؤستر",
        "rc-enhanced-hide": "تفصیل‌لری گیزلت",
        "rc-old-title": "ایلک‌جه «$1» آدی‌له یارانمیشدیر",
        "recentchangeslinked": "ایلگیلی دَییشیکلیکلر",
        "fileexists-shared-forbidden": "بو آددا بیر فايل اورتاق آمباردا مؤوجود دیر. \nفايلینیزی يئنه ده يوکله‌مک ایسته‌يیرسینیزسه، خاهیش ائدیریک گئری گئدیب يئنی بیر آد ایستیفاده ائدین. \n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "بو فایل آشاغی‌داکی {{PLURAL:$1 | فایلین | فایل‌لارین}} تکراری سی‌دیر:",
        "file-deleted-duplicate": "بو فایلین عینی اولان باشقا بیر فایل([[:$1]])داها اول‌دن سیلیندی. بو فای‌لی یئنی‌دن یوکلمه‌دن اول دیگر فایلین سیلینمه‌سی قئیدلرینی ایداره ائتملیسینیز.",
+       "file-deleted-duplicate-notitle": "قاباقجا بۇ فایلا عینی اولان بیر فایل سیلینمیشدیر، و بۇ فایل آدی قاداغان اوْلموشدور.\nاوْنی یئنی‌دن یۆکله‌مک‌دن اؤنجه، قاداغان اوْلونموش فایل‌لارا باخماق ایجازه‌سی اوْلان بیر ایستیفاده‌چی‌دن، وضعیتی گؤزدن گئچیرمگی ایسته‌مه‌لیسینیز.",
        "uploadwarning": "يوکله‌مه خبردارلیغی",
        "uploadwarning-text": "خاهیش ائدیریک آشاغی‌داکی فایل شرحینی دییش‌دیرین و یئنی‌دن جهد ائدین.",
        "savefile": "فايلی قئيد ائت",
        "uploaddisabledtext": "فايل يوکلنمه‌سی باش توتمادی.",
        "php-uploaddisabledtext": "پی اچ پی فایل یوکلملری دؤوره خاریجی‌دیر. خاهیش ائدیریک file_uploads تنظیم لرین یئنی دن بیر باخین.",
        "uploadscripted": "بو فایل بیر اینتئرنئت آختاریش برنامه سی طرفین‌دن سهو چئوریلبیلجک بیر HTML و یا ایسکریپت کودو عبارت‌دیر.",
+       "uploadscriptednamespace": "بۇ SVG فایلیندا بیر یاساق آدفضاسی ($1) واردیر.",
+       "uploadinvalidxml": "یۆکله‌نیلن فایل‌دا XML تحلیل اولونانمادی.",
        "uploadvirus": "فايلدا ویروس وار!  \nدئتاللار: $1",
        "uploadjava": "فایل، بیر جاوا. نوع ‎‎class ائهتیوا ائدن بیر زیپ فایلی‌دیر.\nجاوا فایل‌لارینین یوکلنمه‌سینه ایجازه وئریلمیر، چونکی تهلوکه‌سیزلیک محدودلاشدیرما‌لارینین آتلانماسینا سبب اولا بیلمکده‌دیرلر.",
        "upload-source": "قایناق فايلی",
        "license-nopreview": "(اؤن‌گؤستریش یوخدور)",
        "upload_source_url": "(بیر گئچرلی و عموم گؤره بیلن اینترنت آدرسی)",
        "upload_source_file": "(بیلگی‌سایارینیزدا بیر فایل)",
-       "listfiles-summary": "بو اؤزل صحیفه، بوتون یوکله‌نیلن فایل‌لاری گؤستریر.\nایستیفاده‌چیه فیلتر اولوناندا، یالنیز او ایستیفاده‌چی سون نوسخه‌لرینی یوکله‌ین فایل‌لار گؤستریلیر.",
+       "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": "فايلین اول‌کی وئرسیياسینی گؤرمک اۆچون گۆن/تاریخ بؤلمه‌سینده‌کی تاریخلری تێقلايین.",
        "download": "اندیر",
        "unwatchedpages": "ایزلنمه‌میش صحیفه‌لر",
        "listredirects": "یول‌لاندیرمالارین لیستی",
+       "listduplicatedfiles": "کوْپی‌لری اولان فایل‌لاری لیستی",
+       "listduplicatedfiles-summary": "بۇرا، سوْن نۆسخه‌لری آیری بیر فایلین سوْن نۆسخه‌سی‌نین کوْپی‌سی اوْلان فایل‌لارین لیستیدیر. یالنیز یئرلی فایل‌لار گؤز آلتینا آلینیبلار.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]]-ین [[$3|{{PLURAL:$2|بیر کوْپی‌سی|$2 کوْپی‌سی}}]] واردیر.",
        "unusedtemplates": "ایشلدیلمه‌میش شابلونلار",
        "unusedtemplatestext": "بو صحیفه بوتون، {{ns:template}} آدفضاسیندا اولان و باشقا صحیفه‌لرده اولمایان صحیفه‌لری لیست ائدیر.\nشابلونلاری سیلمک‌دن اؤنجه، لوطفاً اونلارا اولان باشقا باغلانتیلاری یوخلایین.",
        "unusedtemplateswlh": "باشقا باغلانتیلار",
        "randompage": "راست‌گله صحیفه",
        "randompage-nopages": "بو {{PLURAL:$2|آدفضاسیندا|آدفضالاریندا}} هئچ صحیفه یوخدور: $1.",
+       "randomincategory": "بؤلمه‌ده راست‌گله صحیفه",
+       "randomincategory-invalidcategory": "«$1» بیر گئچرلی بؤلمه آدی دئییل.",
+       "randomincategory-nopages": "[[:Category:$1|$1]] بؤلمه‌سین‌ده، هئچ صحیفه یوخدور.",
+       "randomincategory-selectcategory": "بؤلمه‌دن آلیناجاق راست‌گله صحیفه: $1 $2.",
+       "randomincategory-selectcategory-submit": "گئت",
        "randomredirect": "راست‌گله یول‌لاندیرما",
        "randomredirect-nopages": "«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.",
        "statistics": "آمارلار",
        "pageswithprop-text": "بو صحیفه‌ده، بیر خاص صحیفه اؤزل‌لیگی ایشلدن صحیفه‌لرین لیستی واردیر.",
        "pageswithprop-prop": "اؤزل‌لیک آدی:",
        "pageswithprop-submit": "گئت",
+       "pageswithprop-prophidden-long": "اۇزون یازی اؤزل‌لیک دَیَری گیزلی ($1)",
+       "pageswithprop-prophidden-binary": "ایکی‌لی اؤزل‌لیک دَیَری گیزلی ($1)",
        "doubleredirects": "ایکی‌قات یول‌لاندیرمالار",
        "doubleredirectstext": "بو صحیفه دیگر ایستیقامتلندیرمه صحیفه‌لرینه ایستیقامتلندیرمه ائدن صحیفه‌لری سیاهی‌لار.\nهر سطرین ائهتیوا ائتدیگی کئچیدلر؛ بیرینجی و ایکینجی ایستیقامتلندیرمه، هم‌چی‌نین ایکینجی ایستیقامتلن‌دیرمک هدفی، کی بو عمومیتله بیرینجی ایستیقامتلن‌دیرمک گؤسترمه‌سی لازیم اولان \"گئرچک\" هدف صحیفه‌سی‌دیر.\n<del> اوستو خط لنیب </del> دوزلمیش دیر.",
-       "double-redirect-fixed-move": "[[$1]] Ø¯Û\8cÛ\8cشدÛ\8cرÛ\8cÙ\84Û\8cب.\nحاضردا [[$2]]-Û\8cÙ\87 Ø§Û\8cستÛ\8cÙ\82اÙ\85تÙ\84Ù\86Û\8cب.",
-       "double-redirect-fixed-maintenance": "[[$1]]-دن [[$2]]-یه ایکی‌قات ایستیقامتلنمه دوزلدیلیر.",
+       "double-redirect-fixed-move": "[[$1]] Ø¢Ù¾Ø§Ø±Û\8cÙ\84Ù\85Û\8cØ´â\80\8cدÛ\8cر.\nاÙ\88Ù\92تÙ\88Ù\85اتÛ\8cÚ© Ø§Ù\88Ù\92Ù\84اراÙ\82 Ú¯Û\86Ù\86جÙ\84â\80\8cÙ\84Ù\87â\80\8cÙ\86Û\8cبدÛ\8cر Ù\88 Ø§Û\8cÙ\86دÛ\8c [[$2]]-Ù\87 Û\8cÙ\88Ù\92Ù\84â\80\8cÙ\84اÙ\86دÛ\8cرÛ\8cر.",
+       "double-redirect-fixed-maintenance": "[[$1]]-دن [[$2]]-ه ایکی‌قات یوْل‌لاندیرما، بیر ساخلاما ایشین‌ده، اوْتوماتیک اوْلاراق دۆزلدیلیر.",
        "double-redirect-fixer": "يؤنلندیرمه تعمیرجیسی",
        "brokenredirects": "خطالی ایستیقامتلندیرمه",
        "brokenredirectstext": "آشاغی‌داکی ایستیقامتلندیرمه‌لر مؤوجود اولمایان صحیفه‌لره کئچید وئریر:",
        "ninterwikis": "{{PLURAL:$1|بیر|$1}} ویکی‌آراسی",
        "nlinks": "{{PLURAL:$1|بیر|$1}} باغلانتی",
        "nmembers": "{{PLURAL:$1|بیر|$1}} عوضو",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|عۆضو}}",
        "nrevisions": "{{PLURAL:$1|بیر|$1}} نوسخه",
        "nviews": "{{PLURAL:$1|بیر|$1}} گؤرونوش",
        "nimagelinks": "$1 ده{{PLURAL:$1|صحیفه‌ده}}ایستیفاده اولونمور",
        "mostrevisions": "ان چوخ نظردن کئچیریلمیش (وئرسیا‌لی) مقاله‌لر",
        "prefixindex": "بوتون اؤن‌اَکلی صحیفه‌لر",
        "prefixindex-namespace": "بوتون صفحه لر (آد فضاسی$1) قاباق دان یاپیشیقی وار",
+       "prefixindex-strip": "لیست‌ده، اؤن‌اَکی قوْپارت",
        "shortpages": "قیسا صحیفه‌‌لر",
        "longpages": "اوزون صحیفه‌‌لر",
        "deadendpages": "کئچید وئرمه‌ين صحیفه‌‌لر",
        "deadendpagestext": "آشاغیداکی صحیفه‌‌لردن بو ویکیپئدیياداکی دیگر صحیفه‌‌لره هئچ بیر کئچید يوخدور.",
        "protectedpages": "محافظه‌‌لی صحیفه‌‌لر",
        "protectedpages-indef": "يالنیز مدتسیز محافظه‌‌لر",
+       "protectedpages-summary": "بۇ صحیفه، ایندیکی قوْرونان موْجود اوْلان صحیفه‌لری لیست ائدیر. یارانماق‌دان قوْرونان باشلیقلارین لیستینی گؤرمک اۆچون [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]-ه باخین.",
        "protectedpages-cascade": "یالنیز کاسکاد محافظه‌لر",
+       "protectedpages-noredirect": "یوْل‌لاندیرمالاری گیزلت",
        "protectedpagesempty": "حال-حاضردا بو پارامئتره اویغون هئچ بیر محافظه‌لی صحیفه یوخ‌دور",
+       "protectedpages-timestamp": "واخت دامغاسی",
+       "protectedpages-page": "صحیفه",
+       "protectedpages-expiry": "بیتمک تاریخی",
+       "protectedpages-performer": "قوْرویان ایستیفاده‌چی",
+       "protectedpages-params": "قوْروماق پارامئترلری",
+       "protectedpages-reason": "نَدَن‌لیگی",
+       "protectedpages-unknown-timestamp": "بیلینمه‌ین",
+       "protectedpages-unknown-performer": "بیلینمه‌ین ایستیفاده‌چی",
        "protectedtitles": "محافظه‌لی باش‌لیق‌لار",
+       "protectedtitles-summary": "بۇ صحیفه، ایندیکی یارانماق‌دان قوْرونان باشلیقلاری لیست ائدیر. ایندیکی قوْرونان موْجود اوْلان صحیفه‌لرین لیستینی گؤرمک اۆچون، [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]-ه باخین.",
        "protectedtitlesempty": "حال-حاضردا، بو پارامئترلری قورونان هئچ بیر موضوع یوخ‌دور.",
        "listusers": "ایستیفاده‌چی سیياهیسی",
        "listusers-editsonly": "يالنیز دَییشدیرمه ائدن ایستیفاده‌چیلری گؤستر",
        "listusers-creationsort": "يارانما تاریخینه گؤره سیرالا",
+       "listusers-desc": "آزالان سیرادا سیرالا",
        "usereditcount": "$1 {{PLURAL:$1|دَییشدیرمه}}",
        "usercreated": "$1 تاریخینده، ساعات $2-ده {{GENDER:$3|یارانیب‌دیر}}",
        "newpages": "يئنی صحیفه‌‌‌لر",
        "activeusers-noresult": "هئچ ایستیفاده‌چی تاپیلمادی.",
        "listgrouprights": "ایستیفاده‌چی قروپ حاقلاری",
        "listgrouprights-summary": "آشاغیدا، بو ویکی‌ده تانیلان ایستیفاده‌چی گروپلاری و اونلارین حاقلاری گؤستریلیر.\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-desc": "بؤلمه ایچری آلماق معیارلاری",
        "mailnologin": "گؤندرمه آدرسی یوخدور",
        "mailnologintext": "باشقا ایستیفاده‌چیلره ایمیل گؤندرک اوچون، [[Special:UserLogin|گیریش]] ائدیب و [[Special:Preferences|ترجیحلر]]ینیزده گئچرلی ایمیل آدرسی وئرمه‌لیسینیز.",
        "emailuser": "بو ایستیفاده‌چی‌یه ایمیل گؤندر",
        "blockip": "ایستیفاده چی نی باغلا",
        "blockip-legend": "ایستیفادچی نی باغلا",
        "blockiptext": "آشاغی‌داکی فورمو ایستیفاده ائده‌رک مویین بیر ایپنین و یا قئیدیات‌دان کئچمیش ایستیفاده‌چی‌نین دییشیک‌لیک ائتمه‌سینی مانعه تؤره‌ده بیلرسینیز. بو یالنیز واندالیزمی قارشی‌سینی آلماق اوچون و [[{{MediaWiki:Policy-url}}|قایدا‌لارا]] اویغون اولا‌راق ائدیلمه‌لی. آشاغییا موتلق قاداغا ایله علاقه‌دار بیر شرح یازین. (نومونه:-بو-صحیفه‌لرده واندالیزم ائتمیش‌دیر).",
-       "ipadressorusername": "آی-پی عونوانی و یا ایستیفاده‌چی آدی",
+       "ipaddressorusername": "آی-پی عونوانی و یا ایستیفاده‌چی آدی",
        "ipbexpiry": "بیتمه مدتی:",
        "ipbreason": "ندن:",
        "ipbreason-dropdown": "*باغلانما سبب‌لری:\n** یالان معلومات‌لارین علاوه ائدیلمه‌سی\n** صحیفه‌نین مزمونونون سیلینمه‌سی\n** خاریجی سایت‌لارا ایسپام-کئچیدلر\n** صحیفه‌یه معنا‌سیز و یارارسیز علاوه‌لره گؤره\n** حده و تعقیب‌لره گؤره\n** تحقیره گؤره\n** چوخسای‌لی حساب‌دان سوی ایستیفاده‌یه گؤره\n** قاداغان اولونموش ایستیفاده‌چی آدینا گؤره",
        "allmessages-prefix": "اؤنک ایله فیلترلی:",
        "allmessages-language": "دیل:",
        "allmessages-filter-submit": "گئت",
+       "allmessages-filter-translate": "چئویر",
        "thumbnail-more": "بؤیوت",
        "filemissing": "فایل تاپیلمادی",
        "thumbnail_error": "کیچیک شکیل یاراتما خطاسی: $1",
        "newimages-summary": "بو خصوصی صحیفه، ان سون یوک‌لنن فایل‌لاری گؤستریر.",
        "newimages-legend": "سۆزگَج",
        "newimages-label": "فایلین (و یا اونون بیر حیسه‌سی‌نین) آدی:",
-       "showhidebots": "($1 روبات دییشدیر)",
        "noimages": "هئچ نیی گؤرممک.",
        "ilsubmit": "آختار",
        "bydate": "تاریخین اوستوندن",
        "imgmultipagenext": "سونراکی صحیفه‌‌ &rarr;",
        "imgmultigo": "گئت!",
        "imgmultigoto": "$1 صحیفه‌‌يه گئت",
+       "img-lang-default": "(وارساییلان دیل)",
+       "img-lang-go": "گئت",
        "ascending_abbrev": "آرتما سیراسینا گؤره",
        "descending_abbrev": "آزالما سیراسینا گؤره",
        "table_pager_next": "سونراکی صحیفه",
        "version-hook-name": "چنگه‌لین آدی",
        "version-hook-subscribedby": "طرفیندن گیریش‌‌میش",
        "version-version": "(نسخه $1)",
-       "version-license": "لیسانس",
+       "version-license": "مِدیاویکی لیسانسی",
+       "version-ext-license": "لیسانس",
        "version-poweredby-credits": "بو wیکی ' ''[https://www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیله‌رک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
        "version-poweredby-others": "آیریلار",
        "version-credits-summary": "بو ایستفاده چیلر دییشدیر لرینه گوره [[Special:Version|مئدیاویکی]] تانیش ائدیرم.",
        "tags-tag": "یاپیشقان آدی",
        "tags-display-header": "ديَیشیکلیک لیستئلئریندئکی گؤرونوش",
        "tags-description-header": "آنلامینین تام آچیقلاماسی",
+       "tags-active-header": "چالیشقلان؟",
        "tags-hitcount-header": "یاپیشقانلی دییشیک‌لیک‌لر",
+       "tags-active-yes": "بلی",
+       "tags-active-no": "یوْخ",
        "tags-edit": "دَییشدیر",
        "tags-hitcount": "$1 {{PLURAL:$1|دییشیکلیک|دییشیک‌لیک}}",
        "comparepages": "صحیفه‌لری قارشی‌لاش‌دیر",
        "duration-decades": "{{PLURAL:$1|بیر|$1}} اون‌ایل",
        "duration-centuries": "{{PLURAL:$1|بیر|$1}} یوز-ایل",
        "duration-millennia": "{{PLURAL:$1|بیر|$1}} مین‌ایل",
-       "rotate-comment": "عکس $1 {{PLURAL:$1|درجه}} ساعات عقربه‌لری ایستیقامتینده فیرلاندیریلب‌دیر"
+       "rotate-comment": "عکس $1 {{PLURAL:$1|درجه}} ساعات عقربه‌لری ایستیقامتینده فیرلاندیریلب‌دیر",
+       "expand_templates_generate_rawhtml": "چیی اچ‌تی‌ام‌ال گؤستر",
+       "expand_templates_preview": "اؤن‌گؤستریش"
 }
index 90dfa10..65c22ab 100644 (file)
        "blockip": "Ҡатнашыусыны бикләү",
        "blockip-legend": "Ҡатнашыусыны бикләү",
        "blockiptext": "Билдәләнгән IP адрестан яҙыу мөмкинлеген бикләү өсөн, түбәндәге форманы ҡулланығыҙ.\nБыл бары тик вандаллыҡҡа юл ҡуймау өсөн генә һәм [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса ғына эшләнергә тейеш.\nТүбәндә бикләү сәбәбен күрһәтегеҙ (мәҫәлән, вандаллыҡ эҙҙәре булған бер нисә биттең цитатаһын килтерегеҙ).",
-       "ipadressorusername": "Ҡатнашыусының IP-адресы йәки исеме:",
+       "ipaddressorusername": "Ҡатнашыусының IP-адресы йәки исеме:",
        "ipbexpiry": "Тамамлана:",
        "ipbreason": "Сәбәп:",
        "ipbreason-dropdown": "*Ғәҙәттәге бикләү сәбәптәре \n** Ялған мәғлүмәт өҫтәү\n** Биттәрҙең эстәлеген юйыу\n** Тышҡы сайттарға һылтанмалар спамлау\n** Биттәргә мәғәнәһеҙ яҙмалар (ҡый) өҫтәү \n** Ҡатнашыусыларға янау (эҙәрлекләү)\n** Бер нисә иҫәп яҙмаларын артығы менән булдырыу\n** Килешһеҙ иҫәп яҙмаһы",
        "newimages-summary": "Был махсус бит һуңғы тейәлгән файлдарҙы күрһәтә.",
        "newimages-legend": "Һайлау",
        "newimages-label": "Файл исеме (йәки өлөшө):",
-       "showhidebots": "(боттарҙы $1)",
        "noimages": "Рәсемдәр юҡ.",
        "ilsubmit": "Эҙләү",
        "bydate": "булдырыу көнө буйынса",
index 0a7074d..d2efc3a 100644 (file)
        "blockip": "IP-Adress/Benytzer sperrn",
        "blockip-legend": "IP-Adresse/Benutzer sperrn",
        "blockiptext": "Mid dem Formular sperrst a IP-Adress oder an Benytzernåmen, das vo durten aus koane Endarungen mer vurgnumma wern kennan.\nDes soid nur dafoing, um an Vandalismus z' vahindern und in Yweraistimmung mid d' [[{{MediaWiki:Policy-url}}|Richtlinien]].\nGib bittschee an Grund fyr d' Sperrn å.",
-       "ipadressorusername": "IP-Adress oder Benytzernåm:",
+       "ipaddressorusername": "IP-Adress oder Benytzernåm:",
        "ipbexpiry": "Sperrdauer:",
        "ipbreason": "Grund:",
        "ipbreason-dropdown": "* Oigmoahne Sperrgrynd\n** Eihfyng voh voische Informaziónen\n** Laarn voh Seiten\n** Massenweiss Eihfyng voh externe Links\n** Eihstön voh unsinnige Inhoite auf Seiten\n** néd åbrochts Vahoiden\n** Missbrauch mid mererne Benutzerkontós\n** néd geigneter Benutzernåm",
index d6a66f9..f98f58a 100644 (file)
        "blockip": "محدود کتن کاربر",
        "blockip-legend": "کاربر محدود کن",
        "blockiptext": "چه ای فرم جهلی په نوشتن دسترسی په یک خاصین آدرس آی پی یا نام کاربری استفاده کن.\nشی فقط انجام بیت په خاطر جلوگیری چه هرابکاری  په اساس [[{{MediaWiki:Policy-url}}|سیاست]].\nیک حاصین دلیلی بنویس جهلء (مثلا، گوشگ صفخات خاصی که هراب بپتگنت).",
-       "ipadressorusername": "آدرس آي پی یا نام کاربری:",
+       "ipaddressorusername": "آدرس آي پی یا نام کاربری:",
        "ipbexpiry": "وهد هلگ:",
        "ipbreason": "دلیل:",
        "ipbreason-dropdown": "* متداولین دلایل محدودیت\n** وارد کتن غلطین اطلاحات\n** زورگ محتوا چه صفحات\n** لینکان اسپمی په دراین سایت\n**وارد کتن بی ربطین/نامفومین چیز په صفحات\n** ترسناکین رفتار/ آزار\n**سوء استفاده چه چنت حساب\n** غیر قابل قبولین نام کاربری",
        "newimages-summary": "ای حاصین صفحه اهرین آپلود بوتگین فایلان پیشداریت",
        "newimages-legend": "فیلتر",
        "newimages-label": "نام فایل ( یا چنڈی چه آيی):",
-       "showhidebots": "(روباتان $1 )",
        "noimages": "هیچی په دیستن",
        "ilsubmit": "گردگ",
        "bydate": "گون تاریح",
index 9b3c2df..2a84873 100644 (file)
        "blockip": "Bagáton an paragamit",
        "blockip-legend": "Kubkuba an paragamit",
        "blockiptext": "Gamiton an pormularyo sa babâ para bagaton an pagsurat kan sarong espesipikong IP o ngaran nin parágamit.\nDapat gibohon sana ini para maibitaran vandalismo, asin kompirmi sa [[{{MediaWiki:Policy-url}}|palakaw]].\nMagkaag nin espisipikong rason (halimbawa, magtao nin ehemplo kan mga páhinang rinaot).",
-       "ipadressorusername": "direksyon nin IP o gahâ:",
+       "ipaddressorusername": "direksyon nin IP o gahâ:",
        "ipbexpiry": "Pasó:",
        "ipbreason": "Rason:",
        "ipbreason-dropdown": "*Mga komon na rason sa pagbagat\n** Nagkakaag nin salang impormasyon\n** Naghahalî nin mga laog kan páhina\n** Nagkakaag nin mga takod na ''spam'' kan mga panluwas na ''site''\n** Nagkakaag nin kalokohan/ringaw sa mga pahina\n** Gawî-gawing makatakót/makauyám\n** Nag-aabuso nin mga lain-lain na ''account''\n** Dai akong ngaran nin parágamit",
        "newimages-summary": "Ining espesyal na pahina minaphiling kan huring pinagkargang mga sagunson.",
        "newimages-legend": "An saraan",
        "newimages-label": "Ngaran nin sagunson (o sarong parte kaini):",
-       "showhidebots": "($1 na bots)",
        "noimages": "Mayong mahihilíng.",
        "ilsubmit": "Hanápon",
        "bydate": "sa petsa",
index 23f6fbd..84593ce 100644 (file)
        "action-createpage": "стварэньне старонак",
        "action-createtalk": "стварэньне старонак абмеркаваньняў",
        "action-createaccount": "стварэньне гэтага рахунку ўдзельніка",
+       "action-history": "прагляд гісторыі гэтай старонкі",
        "action-minoredit": "пазначэньне гэтай праўкі як дробнай",
        "action-move": "перанос гэтай старонкі",
        "action-move-subpages": "перанос гэтай старонкі і яе падстаронак",
        "index-category-desc": "На старонцы знаходзіцца магічнае слова <code><nowiki>__INDEX__</nowiki></code> (пры гэтым старонка знаходзіцца ў прасторы назваў, дзе дазволены гэты сьцяг), таму яна індэксуецца пошукавымі робатамі ў тых выпадках, калі звычайна гэтага не адбываецца.",
        "post-expand-template-inclusion-category-desc": "Пасьля разгортваньня ўсіх шаблёнаў, памер старонкі перавысіў <code>$wgMaxArticleSize</code>, таму некаторыя шаблёны не былі паказаныя цалкам.",
        "post-expand-template-argument-category-desc": "Пасьля раскрыцьця аргумэнту шаблёну (нешта ў трайных дужках, напрыклад, <code>{{{Foo}}}</code>), старонка перавышае памер <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "На старонцы ўжываецца зашмат рэсурсаёмістых функцыяў парсэру (такіх, як <code>#ifexist</code>). Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Катэгорыя дадаецца, калі старонка ўтрымлівае няслушную спасылку на файл (спасылку на файл, які не існуе).",
+       "hidden-category-category-desc": "Гэта катэгорыя з дададзенай меткай <code><nowiki>__HIDDENCAT__</nowiki></code> у ёй, што па змоўчаньні не адлюстроўвае яе на старонках у сьпісе катэгорыяў.",
        "mailnologin": "Няма адрасу атрымальніка",
        "mailnologintext": "Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]] і мець пацьверджаны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], каб дасылаць лісты іншым удзельнікам.",
        "emailuser": "Даслаць ліст",
        "blockip": "Заблякаваць",
        "blockip-legend": "Заблякаваць удзельніка",
        "blockiptext": "Наступная форма дазваляе заблякаваць магчымасьць рэдагаваньня з пэўнага IP-адрасу альбо імя ўдзельніка. Гэта трэба рабіць толькі дзеля прадухіленьня вандалізму і згодна з [[{{MediaWiki:Policy-url}}|правіламі]]. Пазначце ніжэй дакладную прычыну (напрыклад, пералічыце асобныя старонкі, на якіх былі парушэньні).",
-       "ipadressorusername": "IP-адрас альбо імя ўдзельніка/ўдзельніцы:",
+       "ipaddressorusername": "IP-адрас альбо імя ўдзельніка/ўдзельніцы:",
        "ipbexpiry": "Тэрмін:",
        "ipbreason": "Прычына:",
        "ipbreason-dropdown": "* Агульныя прычыны блякаваньняў\n** Даданьне ілжывай інфармацыі\n** Выдаленьне зьместу старонак\n** Спам\n** Даданьне бязглузьдзіцы\n** Абразы/пагрозы\n** Злоўжываньне некалькімі рахункамі\n** Недапушчальнае імя ўдзельніка",
        "newimages-summary": "Гэтая спэцыяльная старонка паказвае нядаўна загружаныя файлы.",
        "newimages-legend": "Фільтар",
        "newimages-label": "Назва файла (альбо яе частка):",
-       "showhidebots": "($1 робатаў)",
        "noimages": "Выявы адсутнічаюць.",
        "ilsubmit": "Шукаць",
        "bydate": "па даце",
index 8ac3bf8..25f6b13 100644 (file)
        "blockip": "Заблакаваць удзельніка",
        "blockip-legend": "Заблакаваць удзельніка",
        "blockiptext": "Гэты фармуляр дазваляе заблакаваць магчымасць запісу для пэўнага адрасу IP ці імя ўдзельніка.\nГэта трэба рабіць толькі дзеля засцерагання ад вандалізму і ў адпаведнасці з [[{{MediaWiki:Policy-url}}|правіламі]].\nНіжэй трэба ўпісаць канкрэтную прычыну (напрыклад, пералічваючы канкрэтныя старонкі, якія былі вандалізаваныя).",
-       "ipadressorusername": "IP-адрас ці імя ўдзельніка:",
+       "ipaddressorusername": "IP-адрас ці імя ўдзельніка:",
        "ipbexpiry": "Згасае:",
        "ipbreason": "Прычына:",
        "ipbreason-dropdown": "*Звычайныя прычыны блоку\n** Упісванне несапраўднай інфармацыі\n** Сціранне інфармацыі са старонак\n** Спамавыя спасылкі на вонкавыя сайты\n** Упісванне бессэнсоўнай інфармацыі\n** Некультурныя паводзіны/пераследаванне\n** Злоўжыванне некалькімі рахункамі\n** Недапушчальнае імя ўдзельніка",
        "newimages-summary": "Тут паказаныя нядаўна ўкладзеныя файлы.",
        "newimages-legend": "Фільтр",
        "newimages-label": "Назва файла (або яе частка):",
-       "showhidebots": "($1 робатаў)",
        "noimages": "Тут нічога няма.",
        "ilsubmit": "Знайсці",
        "bydate": "п. датаў",
index 2762dc0..1763074 100644 (file)
        "blockip": "Блокиране",
        "blockip-legend": "Блокиране на потребител",
        "blockiptext": "Формулярът по-долу се използва, за да се забрани правото на писане\nна определен IP-адрес или потребител.\nТова трябва да се направи само за да се предотвратят прояви на вандализъм\nи в съответствие с [[{{MediaWiki:Policy-url}}|политиката за поведение]] в {{SITENAME}}.\nНеобходимо е да се посочи и причина за блокирането (например заглавия на страници, станали обект на вандализъм).",
-       "ipadressorusername": "IP-адрес или потребител:",
+       "ipaddressorusername": "IP-адрес или потребител:",
        "ipbexpiry": "Срок:",
        "ipbreason": "Причина:",
        "ipbreason-dropdown": "* Общи причини за блокиране\n** Въвеждане на невярна информация\n** Премахване на съдържание от страниците\n** Добавяне на спам/нежелани външни препратки\n** Въвеждане на безсмислици в страниците\n** Заплашително поведение/тормоз\n** Злупотреба с няколко потребителски сметки\n** Неприемливо потребителско име",
        "newimages-summary": "Тази специална страница показва последно качените файлове.",
        "newimages-legend": "Име на файл",
        "newimages-label": "Име на файл (или част от него):",
-       "showhidebots": "($1 на ботове)",
        "noimages": "Няма нищо.",
        "ilsubmit": "Търсене",
        "bydate": "по дата",
index 18b51c7..290cdbb 100644 (file)
        "blockip": "Blukir pamuruk",
        "blockip-legend": "Blukir pamuruk",
        "blockiptext": "Puruk purmulir di bawah hagan mamblukir hak ungkai manulis matan sabuah alamat IP atawa ngaran-pamuruk.\nNgini dipuruk hagan mancagah vandalisma haja, wan sasuai awan [[{{MediaWiki:Policy-url}}|kabijakan]].\nIsi sabuah alasan khas di bawah (gasan cuntuh, manulisakan tutungkaran nang suah divandal)",
-       "ipadressorusername": "Alamat IP atawa ngaran pamuruk:",
+       "ipaddressorusername": "Alamat IP atawa ngaran pamuruk:",
        "ipbexpiry": "Kadaluwarsa:",
        "ipbreason": "Alasan:",
        "ipbreason-dropdown": "*Alasan awam pamblukiran\n** Mambuati panjalasan salah\n** Mambuang isi matan tutungkaran\n** Spam tautan ka luar\n** Mambuati pandiran kusung/ratik ka tutungkaran\n** Parilaku palecehan/intimidasi\n** Panyalahpurukan akun banyak\n** Ngaran-pamuruk kada-kawa-ditarima",
        "newimages-summary": "Tungkaran istimiwa ngini manampaikan babarakas nang hahanyar dihunggah.",
        "newimages-legend": "Saringan",
        "newimages-label": "Ngaran barakas (atawa sapalihnya):",
-       "showhidebots": "($1 bot)",
        "noimages": "Kadada nang dijanaki.",
        "ilsubmit": "Gagai",
        "bydate": "ulih tanggal",
index 2e26ebf..4c1ab8e 100644 (file)
        "blockip": "ব্যবহারকারীকে বাধা দাও",
        "blockip-legend": "ব্যবহারকারীকে বাধা দেওয়া হোক",
        "blockiptext": "কোন নির্দিষ্ট আইপি ঠিকানা বা ব্যবহারকারীর লেখার অধিকারে বাধা দিতে নিচের ফর্মটি ব্যবহার করুন।\nএটি কেবলমাত্র ধ্বংসপ্রবণতা প্রতিরোধে ও [[{{MediaWiki:Policy-url}}|নীতিমালা]] মেনে সম্পাদন করা উচিত।\nনিচে একটি নির্দিষ্ট কারণ দিন (উদাহরণস্বরূপ, যেসব পাতার ধ্বংসসাধন করা হয়েছে, সেগুলি উল্লেখ করতে পারেন)।",
-       "ipadressorusername": "আইপি ঠিকানা বা ব্যবহারকারীর নাম:",
+       "ipaddressorusername": "আইপি ঠিকানা বা ব্যবহারকারীর নাম:",
        "ipbexpiry": "যখন মেয়াদোত্তীর্ণ হবে:",
        "ipbreason": "কারণ:",
        "ipbreason-dropdown": "*বাধা দানের সাধারণ কারণ\n** মিথ্যা তথ্য ঢোকানো\n** পাতা থেকে বিষয়বস্তু মুছে ফেলা\n** বাইরের কোন সাইটের সংযোগ স্প্যাম করা\n** পাতাগুলিতে অর্থহীন বিষয়বস্তু ঢোকানো\n** ভীতি উদ্রেককারী আচরণ/হয়রানি\n** একাধিক অ্যাকাউন্টের অপব্যবহার\n** ব্যবহারকারী নাম অ-গ্রহণযোগ্য",
        "newimages-summary": "এই বিশেষ পাতা সর্বশেষ আপলোডকৃত ফাইল দেখাবে।",
        "newimages-legend": "ছাকনী",
        "newimages-label": "ফাইলের নাম (অথবা এর কোন অংশ):",
-       "showhidebots": "($1 বট)",
        "noimages": "দেখার মত কিছু নেই।",
        "ilsubmit": "অনুসন্ধান",
        "bydate": "তারিখ অনুযায়ী",
        "htmlform-no": "না",
        "htmlform-yes": "হ্যাঁ",
        "htmlform-chosen-placeholder": "অপশন নির্বাচন করুন",
+       "htmlform-cloner-delete": "অপসারণ",
        "sqlite-has-fts": "$1 সহ পূর্ণ টেক্সট সার্চ সমর্থন",
        "sqlite-no-fts": "$1 বাদে পূর্ণ টেক্সট সার্চ সমর্থন",
        "logentry-delete-delete": "$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে",
index 1438612..3c36737 100644 (file)
        "edit-gone-missing": "Dibosupl hizivaat ar bajenn.\nDiverket eo bet evit doare.",
        "edit-conflict": "Tabut kemmañ.",
        "edit-no-change": "N'eo ket bet kemeret ho tegasadenn e kont rak ne oa ket bet kemmet netra en destenn.",
+       "postedit-confirmation-created": "Krouet eo bet ar bajenn.",
+       "postedit-confirmation-restored": "Adsavet eo bet ar bajenn.",
        "postedit-confirmation-saved": "Enrollet eo bet ho kemmoù.",
        "edit-already-exists": "N'eus ket bet gallet krouiñ ur bajenn nevez.\nKrouet e oa bet c'hoazh.",
        "defaultmessagetext": "Testenn dre ziouer",
        "blockip": "Stankañ ur chomlec'h IP",
        "blockip-legend": "Stankañ an implijer",
        "blockiptext": "Grit gant ar furmskrid a-is evit stankañ ar moned skrivañ ouzh ur chomlec'h IP pe un implijer bennak.\nSeurt diarbennoù n'hallont bezañ kemeret nemet evit mirout ouzh ar vandalerezh hag a-du gant an [[{{MediaWiki:Policy-url}}|erbedadennoù ha reolennoù da heuliañ]].\nRoit a-is an abeg resis (o verkañ, da skouer, roll ar pajennoù bet graet gaou outo).",
-       "ipadressorusername": "Chomlec'h IP pe anv implijer",
+       "ipaddressorusername": "Chomlec'h IP pe anv implijer",
        "ipbexpiry": "Pad ar stankadenn",
        "ipbreason": "Abeg :",
        "ipbreason-dropdown": "*Abegoù stankañ boutinañ\n** Degas titouroù faos\n** Tennañ danvez eus ar pajennoù\n** Degas liammoù Strobus war-du lec'hiennoù diavaez\n** Degas danvez diboell/dizoare er pajennoù\n** Emzalc'h hegazus/handeus betek re\n** Mont re bell gant implij meur a gont\n** Anv implijer n'eo ket aotreet",
        "newimages-summary": "Diskouez a ra ar bajenn dibar-mañ roll ar restroù diwezhañ bet enporzhiet.",
        "newimages-legend": "Sil",
        "newimages-label": "Anv ar restr (pe darn anezhi) :",
-       "showhidebots": "($1 bot)",
        "noimages": "Netra da welet.",
        "ilsubmit": "Klask",
        "bydate": "dre an deiziad anezho",
        "htmlform-no": "Ket",
        "htmlform-yes": "Ya",
        "htmlform-chosen-placeholder": "Diuzañ un dibarzh",
+       "htmlform-cloner-create": "Ouzhpennañ muioc'h",
+       "htmlform-cloner-delete": "Dilemel",
+       "htmlform-cloner-required": "Un dalvoudenn a zo ret da vihanañ.",
        "sqlite-has-fts": "$1 gant enklask eus an destenn a-bezh embreget",
        "sqlite-no-fts": "$1 hep enklask eus an destenn a-bezh embreget",
        "logentry-delete-delete": "Diverket eo bet ar bajenn $3 gant $1",
index be9020c..2310ae3 100644 (file)
        "blockip": "Blokiraj korisnika",
        "blockip-legend": "Blokiranje korisnika",
        "blockiptext": "Upotrebite donji upitnik da biste uklonili prava pisanja sa određene IP adrese ili korisničkog imena.  Ovo bi trebalo da bude urađeno samo da bi se spriječio vandalizam, i u skladu sa [[{{MediaWiki:Policy-url}}|smjernicama]]. Unesite konkretan razlog ispod (na primjer, navodeći koje stranice su vandalizovane).",
-       "ipadressorusername": "IP adresa ili korisničko ime:",
+       "ipaddressorusername": "IP adresa ili korisničko ime:",
        "ipbexpiry": "Ističe:",
        "ipbreason": "Razlog:",
        "ipbreason-dropdown": "*Najčešći razlozi blokiranja\n**Netačne informacije\n**Uklanjanje sadržaja stranica\n**Postavljanje spam vanjskih linkova\n**Ubacivanje gluposti/grafita\n**Osobni napadi (ili napadačko ponašanje)\n**Čarapare (zloupotreba više korisničkih računa)\n**Neprihvatljivo korisničko ime",
        "newimages-summary": "Ova specijalna stranica prikazuje posljednje postavljene datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Ime datoteke (ili dio imena):",
-       "showhidebots": "($1 botove)",
        "noimages": "Ništa za prikazati.",
        "ilsubmit": "Traži",
        "bydate": "po datumu",
index d628e5e..6052d7d 100644 (file)
        "sp-contributions-blocklog": "Registre de bloquejos",
        "sp-contributions-suppresslog": "contribucions suprimides de l'usuari",
        "sp-contributions-deleted": "contribucions d'usuari esborrades",
-       "sp-contributions-uploads": "pujades",
+       "sp-contributions-uploads": "càrregues",
        "sp-contributions-logs": "registres",
        "sp-contributions-talk": "discussió",
        "sp-contributions-userrights": "gestió de drets d'usuari",
        "blockip": "Bloqueig d'usuaris",
        "blockip-legend": "Bloca l'usuari",
        "blockiptext": "Empreu el següent formulari per blocar l'accés\nd'escriptura des d'una adreça IP específica o des d'un usuari determinat.\naixò només s'hauria de fer per prevenir el vandalisme, i\nd'acord amb la [[{{MediaWiki:Policy-url}}|política del projecte]].\nEmpleneu el diàleg de sota amb un motiu específic (per exemple, citant\nquines pàgines en concret estan sent vandalitzades).",
-       "ipadressorusername": "Adreça IP o nom de l'usuari",
+       "ipaddressorusername": "Adreça IP o nom de l'usuari",
        "ipbexpiry": "Venciment",
        "ipbreason": "Motiu:",
        "ipbreason-dropdown": "*Motius de bloqueig més freqüents\n** Inserció d'informació falsa\n** Supressió de contingut sense justificació\n** Inserció d'enllaços promocionals (spam)\n** Inserció de contingut sense cap sentit\n** Conducta intimidatòria o hostil\n** Abús de comptes d'usuari múltiples\n** Nom d'usuari no acceptable",
        "newimages-summary": "Aquesta pàgina especial mostra els darrers fitxers carregats.",
        "newimages-legend": "Nom del fitxer",
        "newimages-label": "Nom de fitxer (o part d'ell):",
-       "showhidebots": "($1 bots)",
        "noimages": "Res per veure.",
        "ilsubmit": "Cerca",
        "bydate": "per data",
index e6f18d2..d92253f 100644 (file)
        "listingcontinuesabbrev": "(кхин дlа)",
        "index-category": "Меттигтерахьйо агlонаш",
        "noindex-category": "ДӀахьушйоцу агӀонаш",
-       "broken-file-category": "{{#switch:{{NAMESPACE}}\n |{{ns:0}}=Ð\91олÑ\85 Ñ\86абеÑ\88 Ñ\84айлийн Ñ\85Ñ\8cажоÑ\80агаÑ\88 Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80онаÑ\88}}",
+       "broken-file-category": "{{#switch:{{NAMESPACE}}\n |{{ns:0}}=Болх цабеш файлийн хьажоргаш йолу агӀонаш}}",
        "about": "Цуьнах лаьцна",
        "article": "Яззам",
        "newwindow": "(керлачу корехь)",
        "rows": "МогӀанаш:",
        "columns": "БӀогӀамаш:",
        "searchresultshead": "Лаха",
-       "stub-threshold": "Ð\9aеÑ\87 Ñ\8fÑ\80ан Ð´Ð¾Ð·Ð° <a href=\"#\" class=\"stub\">коÑ\8cÑ\80Ñ\82амогÓ\80амна Ñ\85Ñ\8cажоÑ\80агаÑ\88</a> (байÑ\82аÑ\88каÑ\85):",
+       "stub-threshold": "Кеч яран доза <a href=\"#\" class=\"stub\">коьртамогӀамна хьажоргаш</a> (байташках):",
        "stub-threshold-disabled": "ДӀадайина",
        "recentchangesdays": "Керла нисдар гайта динахь:",
        "recentchangesdays-max": "Къезиг $1 {{PLURAL:$1|дена}}",
        "brokenredirectstext": "Лахара дӀасахьажийнарш ю йоцучу агӀонийн тӀе хьажийна:",
        "brokenredirects-edit": "нисъе",
        "brokenredirects-delete": "дӀаяккха",
-       "withoutinterwiki": "ЮкÑ\8aаÑ\80вики-Ñ\85Ñ\8cажоÑ\80агаÑ\88 Ð¹Ð¾Ñ\86Ñ\83 Ð°Ð³Ó\80онаÑ\88",
+       "withoutinterwiki": "Юкъарвики-хьажоргаш йоцу агӀонаш",
        "withoutinterwiki-summary": "Лахара агӀонийн юкъарвики-хьажоргаш яц:",
        "withoutinterwiki-submit": "Гайта",
        "fewestrevisions": "ЧIогIа кIезиг башхонаш йолу агIонаш",
        "whatlinkshere-hideredirs": "$1 дӀасахьажорш",
        "whatlinkshere-hidetrans": "$1 латораш",
        "whatlinkshere-hidelinks": "$1 хьажоргаш",
-       "whatlinkshere-hideimages": "$1 Ñ\84айлийн Ñ\85Ñ\8cажоÑ\80агаÑ\88",
+       "whatlinkshere-hideimages": "$1 файлийн хьажоргаш",
        "whatlinkshere-filters": "Литтарш",
        "autoblockid": "Ша блоккхетар #$1",
        "block": "Декъашхочун блоктохар",
        "blockip": "Блоктоха",
        "blockip-legend": "Декъашхочун блоктохар",
        "blockiptext": "Бухахь йолу форманца блоктоха IP-адресна цунтӏера дӏаяздарш ца дайта.\nБлоктоха магийна цо зенаш деш делахь кхин хӏокху [[{{MediaWiki:Policy-url}}|низам ца]].\nЛахахь билгалде блоктохарна бахьна.",
-       "ipadressorusername": "IP-адрес я декъашхочун цӀе:",
+       "ipaddressorusername": "IP-адрес я декъашхочун цӀе:",
        "ipbexpiry": "Хан чекхйолу:",
        "ipbreason": "Бахьна:",
        "ipbreason-dropdown": "* Белхан некъ дӀакъовлар бахьанаш:\n** Харца хаам бар\n** АгӀонан чураниг дӀаяккхар\n** Спам-хьажорагаш арахьара сайташна\n** МаьӀна доцу текст тӀетохар\n** Декъашхой хьийзабар, кхерамаш тиссар\n** Масийтта лараман яздар зуламан лелаяр\n** Магитина йоцу декъашхочун цӀе",
        "newimages": "Керлачу файлийн галерей",
        "newimages-summary": "ХӀокху белхан агӀона чохь гойтуш ю дукха хан йоццуш чуйаьхна файлаш.",
        "newimages-legend": "Литтар",
-       "showhidebots": "$1 боташ",
        "noimages": "Суьрташ дац.",
        "ilsubmit": "Лаха",
        "bydate": "терахьашца",
index 4a517a9..0f786c4 100644 (file)
        "protectedpages": "پەڕە پارێزراوەکان",
        "protectedpages-indef": "تەنیا پاراستنە بێسنوورەکان",
        "protectedpages-cascade": "تەنیا پاراستنە زنجیرییەکان",
+       "protectedpages-noredirect": "ڕەوانەکەرەکان بشارەوە",
        "protectedpagesempty": "هیچ لاپەڕەیک ئێستا بەم دیاریکراوانە نەپارێزراوە.",
        "protectedpages-page": "پەڕە",
+       "protectedpages-params": "پارامەترەکانی پاراستن",
+       "protectedpages-reason": "ھۆکار",
        "protectedtitles": "سەرناوە پارێزراوەکان",
        "protectedtitlesempty": "ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.",
        "listusers": "پێرستی بەکارھێنەران",
        "blockip": "بەربەستنی بەکارھێنەر",
        "blockip-legend": "بەربەست‌کردنی بەکارهێنەر",
        "blockiptext": "لەم فۆرمەی خوارەوە دەتوانی بۆ بەربەست‌کردنی دەست‌پێ‌گەیشتنی نووسین لە ناونیشانێکی ئای‌پی تایبەت یا ناوی بەکارهێنەریەک، کەڵک وەرگریت.\nئەمە تەنها دەبێ بۆ بەرگری لە خراپکاری بەکاربێت و ڕێکەوتنی هەبێ دەگەڵ [[{{MediaWiki:Policy-url}}|سیاسەتەکان]].\nلە خوارەوە هۆکارێک بە ڕوونی بنووسە (بۆ نموونە بە وردی ئەو لاپەڕانە و خراپکاری تێدا کراوە وەک، وەک بەڵگە، بنووسە).",
-       "ipadressorusername": "ناونیشانی ئایپی یان ناوی‌ بەکارھێنەر:",
+       "ipaddressorusername": "ناونیشانی ئایپی یان ناوی‌ بەکارھێنەر:",
        "ipbexpiry": "بەسەرچوون:",
        "ipbreason": "هۆکار:",
        "ipbreason-dropdown": "*ھۆکارە ھاوبەشەکانی بەربستن\n**دانانی زانیاریی ھەڵە\n**لابردنی ناوەرۆکی پەڕەکان\n**بەستەر بۆ پەڕەی دەرەکی نەگونجاو\n**نووسینی قسەی بێ‌مانا و بێ‌سوود\n**ھەڵسوکەوت یان وتاری ھاندەر بۆ توندوتیژی\n**بەکارھێنانی چەند ھەژمار پێکەوە\n**ناوی بەکارھێنەریی نەگونجاو",
        "newimages-summary": "ئەم پەڕە تایبەتە دوایین پەڕگە بارکراوەکان نیشان دەدات.",
        "newimages-legend": "پاڵاوتن",
        "newimages-label": "ناوی پەڕگە (یان بەشێکیی):",
-       "showhidebots": "(بۆتەکان $1)",
        "noimages": "هیچ بۆ بینین نییە.",
        "ilsubmit": "بگەڕێ",
        "bydate": "بەپێی ڕێکەوت",
index 7a1d270..42671bb 100644 (file)
        "whatlinkshere-links": "$1 ligami",
        "whatlinkshere-hidetrans": "inclusione",
        "whatlinkshere-hidelinks": "$1 ligami",
-       "ipadressorusername": "Adrizzu IP o nome di cuntributore",
+       "ipaddressorusername": "Adrizzu IP o nome di cuntributore",
        "ipbreason": "Mutivu:",
        "ipboptions": "2 ore:2 hours,1 ghjornu:1 day,3 ghjorni:3 days,1 sittimana:1 week,2 sittimane:2 weeks,1 mese:1 month,3 mesi:3 months,6 mesi:6 months,1 annu:1 year,infinitu:infinite",
        "ipblocklist": "Cuntributori bluccati",
        "file-nohires": "Una diversione incù una risoluzione più alta ùn hè micca dispunibile.",
        "show-big-image": "Schedariu originale",
        "show-big-image-other": "{{PLURAL:$2|Altra risuluzione|Altre risuluzioni}}: $1.",
-       "showhidebots": "($1 boti)",
        "noimages": "Nulla da vede.",
        "ilsubmit": "Ricerca",
        "bydate": "per data",
        "table_pager_limit_label": "Risultati per pagina:",
        "table_pager_limit_submit": "Invià",
        "table_pager_empty": "Micca risultati",
+       "autosumm-replace": "Pagina sustituita incù '$1'",
        "autoredircomment": "Reindirizzamentu à [[$1]]",
        "autosumm-new": "Pagina nova: $1",
        "watchlistedit-raw-titles": "Pagine:",
        "tags-edit": "mudificà",
        "logentry-delete-delete": "$1 ha cancellatu a pagina $3",
        "logentry-move-move": "$1 {{GENDER:$2|hà spustatu}} a pagina $3 à $4",
+       "logentry-newusers-create": "U participante $3 hè statu creatu da $1",
        "rightsnone": "(nessunu)",
        "expand_templates_output": "Risultatu"
 }
index cc0c92e..f3eb3bc 100644 (file)
        "blockip": "Бу IP адресинден иришимни блок эт",
        "blockip-legend": "Къулланыджыны блок эт",
        "blockiptext": "Ашагъыдаки форманы къулланып белли бир IP адресининъ я да къулланыджынынъ иришимини блок этип оласынъыз. Бу тек вандализмни блок этмек ичюн ве [[{{MediaWiki:Policy-url}}|къаиделерге]] уйгъун оларакъ япылмалы. Ашагъыгъа мытлакъа блок этюв иле багълы бир изаат язынъыз. (меселя: Шу саифелерде вандализм япты).",
-       "ipadressorusername": "IP адреси я да къулланыджы ады",
+       "ipaddressorusername": "IP адреси я да къулланыджы ады",
        "ipbexpiry": "Битиш муддети",
        "ipbreason": "Себеп",
        "ipbsubmit": "Бу къулланыджыны блок эт",
        "newimages-summary": "Бу махсус саифе сонъки юкленген файлларны косьтере.",
        "newimages-legend": "Сюзгюч",
        "newimages-label": "Файл ады (я да онынъ бир парчасы):",
-       "showhidebots": "(ботларны $1)",
        "noimages": "Ресим ёкъ.",
        "ilsubmit": "Къыдыр",
        "bydate": "хронологик сыранен",
index 59e62e3..1bc4ccf 100644 (file)
        "blockip": "Bu IP adresinden irişimni blok et",
        "blockip-legend": "Qullanıcını blok et",
        "blockiptext": "Aşağıdaki formanı qullanıp belli bir IP adresiniñ ya da qullanıcınıñ irişimini blok etip olasıñız. Bu tek vandalizmni blok etmek içün ve [[{{MediaWiki:Policy-url}}|qaidelerge]] uyğun olaraq yapılmalı. Aşağığa mıtlaqa blok etüv ile bağlı bir izaat yazıñız. (meselâ: Şu saifelerde vandalizm yaptı).",
-       "ipadressorusername": "IP adresi ya da qullanıcı adı",
+       "ipaddressorusername": "IP adresi ya da qullanıcı adı",
        "ipbexpiry": "Bitiş müddeti",
        "ipbreason": "Sebep",
        "ipbsubmit": "Bu qullanıcını blok et",
        "newimages-summary": "Bu mahsus saife soñki yüklengen fayllarnı köstere.",
        "newimages-legend": "Süzgüç",
        "newimages-label": "Fayl adı (ya da onıñ bir parçası):",
-       "showhidebots": "(botlarnı $1)",
        "noimages": "Resim yoq.",
        "ilsubmit": "Qıdır",
        "bydate": "hronologik sıranen",
index 505980b..e2c451a 100644 (file)
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "expensive-parserfunction-warning": "Varování: Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí parseru.\n\nPovolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $2 volání|zde je $2 volání}}.",
-       "expensive-parserfunction-category": "Stránky s příliš mnoho voláními náročných funkcí parseru",
+       "expensive-parserfunction-warning": "Varování: Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí syntaktického analyzátoru.\n\nPovolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $2 volání|zde je $2 volání}}.",
+       "expensive-parserfunction-category": "Stránky s příliš mnoho voláními náročných funkcí syntaktického analyzátoru",
        "post-expand-template-inclusion-warning": "Varování: Objem vkládaných šablon je příliš velký.\nNěkteré šablony nebudou vloženy.",
        "post-expand-template-inclusion-category": "Stránky překračující povolenou velikost vložených šablon",
        "post-expand-template-argument-warning": "Varování: Tato stránka obsahuje alespoň jeden argument šablony, který je po rozbalení příliš velký.\nTyto argumenty byly vynechány.",
        "action-createpage": "vytvářet stránky",
        "action-createtalk": "vytvářet diskusní stránky",
        "action-createaccount": "vytvořit tento uživatelský účet",
+       "action-history": "prohlížet si historii této stránky",
        "action-minoredit": "označit tuto editaci jako malou",
        "action-move": "přesunout tuto stránku",
        "action-move-subpages": "přesunout tuto stránku a její podstránky",
        "index-category-desc": "Stránka obsahuje kouzelné slovo <code><nowiki>__INDEX__</nowiki></code> (a je ve jmenném prostoru, ve kterém je tento příznak dovolen), takže je indexována roboty, přestože by normálně nebyla.",
        "post-expand-template-inclusion-category-desc": "Po rozbalení všech šablon je stránka větší než <code>$wgMaxArticleSize</code>, takže některé šablony rozbaleny nebyly.",
        "post-expand-template-argument-category-desc": "Po rozbalení argumentu šablony (něco v trojitých závorkách, např. <code>{{{Foo}}})</code> je stránka větší než <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "Na stránce je použito příliš mnoho náročných funkcí parseru (jako <code>#ifexist</code>). Vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "expensive-parserfunction-category-desc": "Na stránce je použito příliš mnoho náročných funkcí syntaktického analyzátoru (jako <code>#ifexist</code>). Vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Kategorie přidaná pokud stránka obsahuje nefunkční odkaz na soubor (odkaz pro vložení souboru, který neexistuje).",
        "hidden-category-category-desc": "Toto je kategorie, která obsahuje <code><nowiki>__HIDDENCAT__</nowiki></code>, což způsobuje, že se na stránkách implicitně nezobrazuje v rámečku odkazů na kategorie.",
        "trackingcategories-nodesc": "Popis není k dispozici.",
        "blockip": "Zablokovat uživatele",
        "blockip-legend": "Zablokovat uživatele",
        "blockiptext": "Tento formulář slouží k zablokování editací z konkrétní IP adresy nebo uživatelského jména.\nToto by mělo být používáno jen v souladu s [[{{MediaWiki:Policy-url}}|pravidly]].\nUdejte přesný důvod níže (například ocitujte, které stránky byly poškozeny).",
-       "ipadressorusername": "IP adresa nebo uživatelské jméno:",
+       "ipaddressorusername": "IP adresa nebo uživatelské jméno:",
        "ipbexpiry": "Čas vypršení:",
        "ipbreason": "Důvod:",
        "ipbreason-dropdown": "*Časté důvody blokování\n** Vkládání klamných informací\n** Odstraňování obsahu stránek\n** Vkládání reklamních externích odkazů\n** Vkládání nesmyslů\n** Zastrašování nebo vyhrožování\n** Zneužívání více účtů\n** Nevhodné uživatelské jméno",
        "newimages-summary": "Na této speciální stránce se zobrazují poslední načtené soubory.",
        "newimages-legend": "Filtr",
        "newimages-label": "Název souboru (nebo jeho část):",
-       "showhidebots": "($1 roboty)",
        "noimages": "Není co zobrazit.",
        "ilsubmit": "Hledat",
        "bydate": "podle data",
        "version": "Verze",
        "version-extensions": "Nainstalovaná rozšíření",
        "version-specialpages": "Speciální stránky",
-       "version-parserhooks": "Přípojné body parseru",
+       "version-parserhooks": "Přípojné body syntaktického analyzátoru",
        "version-variables": "Proměnné",
        "version-antispam": "Ochrana proti spamu",
        "version-skins": "Vzhledy",
        "htmlform-no": "Ne",
        "htmlform-yes": "Ano",
        "htmlform-chosen-placeholder": "Zvolte možnost",
+       "htmlform-cloner-create": "Přidat další",
+       "htmlform-cloner-delete": "Odstranit",
+       "htmlform-cloner-required": "Je povinná nejméně jedna hodnota.",
        "sqlite-has-fts": "$1 s podporou plnotextového vyhledávání",
        "sqlite-no-fts": "$1 bez podpory plnotextového vyhledávání",
        "logentry-delete-delete": "$1 {{GENDER:$2|smazal|smazala}} stránku $3",
        "duration-centuries": "$1 {{PLURAL:$1|století}}",
        "duration-millennia": "$1 {{PLURAL:$1|tisíciletí}}",
        "rotate-comment": "Obrázek otočen o $1 {{PLURAL:$1|stupeň|stupně|stupňů}} po směru hodinových ručiček",
-       "limitreport-title": "Data profilování parseru:",
+       "limitreport-title": "Data profilování syntaktického analyzátoru:",
        "limitreport-cputime": "Využití času procesoru",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|sekunda|sekundy|sekund}}",
        "limitreport-walltime": "Využití reálného času",
        "limitreport-templateargumentsize": "Velikost argumentů šablon",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bajt|bajty|bajtů}}",
        "limitreport-expansiondepth": "Největší hloubka expanze",
-       "limitreport-expensivefunctioncount": "Počet náročných funkcí parseru",
+       "limitreport-expensivefunctioncount": "Počet náročných funkcí syntaktického analyzátoru",
        "expandtemplates": "Substituce šablon",
-       "expand_templates_intro": "Tato speciální stránka vezme text a rekurzivně rozbalí všechny použité šablony.\nTaké rozbalí podporované funkce parseru jako\n<code><nowiki>{{</nowiki>#language:…}}</code> a proměnné jako\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nV podstatě rozbalí prakticky všechno v dvojitých složených závorkách.",
+       "expand_templates_intro": "Tato speciální stránka zpracuje text a rekurzivně rozbalí všechny použité šablony.\nTaké rozbalí podporované funkce syntaktického analyzátoru jako\n<code><nowiki>{{</nowiki>#language:…}}</code> a proměnné jako\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nV podstatě rozbalí všechno v dvojitých složených závorkách.",
        "expand_templates_title": "Název stránky kvůli kontextu pro {{FULLPAGENAME}} apod.:",
        "expand_templates_input": "Vstupní text:",
        "expand_templates_output": "Výstup",
index 75e88a7..db82d56 100644 (file)
        "action-createpage": "creu tudalennau",
        "action-createtalk": "creu tudalennau sgwrs",
        "action-createaccount": "creu'r cyfrif defnyddiwr hwn",
+       "action-history": "gweld hanes y dudalen",
        "action-minoredit": "marcio'r golygiad yn un bach",
        "action-move": "symud y dudalen",
        "action-move-subpages": "symud y dudalen a'i is-dudalennau",
        "listgrouprights-removegroup-self": "Yn gallu tynnu {{PLURAL:$2|grŵp}} oddi ar eich cyfrif eich hunan: $1",
        "listgrouprights-addgroup-self-all": "Yn gallu ychwanegu'r holl grwpiau at eich cyfrif eich hunan",
        "listgrouprights-removegroup-self-all": "Yn gallu tynnu'r holl grwpiau oddi ar eich cyfrif eich hunan",
+       "listgrouprights-namespaceprotection-namespace": "Parth",
+       "listgrouprights-namespaceprotection-restrictedto": "Gallu(oedd) yn caniatau i'r defnyddiwr olygu",
        "trackingcategories-name": "Enw'r neges",
        "trackingcategories-nodesc": "Dim disgrifiad ar gael.",
        "trackingcategories-disabled": "Categorïau yr analluogwyd",
        "blockip": "Rhwystro'r defnyddiwr",
        "blockip-legend": "Rhwystro'r defnyddiwr",
        "blockiptext": "Defnyddiwch y ffurflen hon i rwystro cyfeiriad IP neu ddefnyddiwr rhag ysgrifennu i'r gronfa ddata. \nDylech chi ddim ond gwneud hyn er mwyn rhwystro fandaliaeth, a chan ddilyn [[{{MediaWiki:Policy-url}}|polisi'r wici]]. \nRhowch reswm dros rwystro'r defnyddiwr (er enghraifft, dywedwch pa dudalen(au) a fandaleiddiwyd).",
-       "ipadressorusername": "Cyfeiriad IP neu enw defnyddiwr:",
+       "ipaddressorusername": "Cyfeiriad IP neu enw defnyddiwr:",
        "ipbexpiry": "Am gyfnod:",
        "ipbreason": "Rheswm:",
        "ipbreason-dropdown": "*Rhesymau cyffredin dros flocio\n** Gosod gwybodaeth anghywir\n** Dileu cynnwys tudalennau\n** Gosod cysylltiadau sbam i wefannau eraill\n** Gosod dwli/lol ar dudalennau\n** Ymddygiad sy'n dychrynu neu'n aflonyddu\n** Camddefnyddio nifer o gyfrifon\n** Enw defnyddiwr annerbyniol",
        "newimages-summary": "Mae'r dudalen arbennig hon yn dangos y ffeiliau a uwchlwythwyd yn ddiweddar.",
        "newimages-legend": "Hidlo",
        "newimages-label": "Enw'r ffeil (neu ran ohono):",
-       "showhidebots": "($1 botiau)",
        "noimages": "Does dim byd i'w weld.",
        "ilsubmit": "Chwilio",
        "bydate": "yn ôl dyddiad",
        "htmlform-no": "Na/Nac ydw/Na fydd...",
        "htmlform-yes": "Ie/Iawn/Ydw/Oes...",
        "htmlform-chosen-placeholder": "Dewiswch opsiwn",
+       "htmlform-cloner-create": "Ychwaneger rhes",
+       "htmlform-cloner-delete": "Tynner i ffwrdd",
        "sqlite-has-fts": "$1 gyda chymorth chwilio yr holl destun",
        "sqlite-no-fts": "$1 heb gymorth chwiliad yr holl destun",
        "logentry-delete-delete": "Dileodd $1 y dudalen $3",
index c2baddd..f4749fb 100644 (file)
        "blockip": "Bloker bruger",
        "blockip-legend": "Bloker bruger",
        "blockiptext": "Brug formularen herunder til at blokere for skriveadgang fra en bestemt IP-adresse eller et brugernavn.\nDette bør kun gøres for at forhindre vandalisme og skal være i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].\nAngiv en konkret begrundelse herunder (for eksempel med angivelse af sider der har været udsat for vandalisme).",
-       "ipadressorusername": "IP-adresse eller brugernavn",
+       "ipaddressorusername": "IP-adresse eller brugernavn",
        "ipbexpiry": "varighed",
        "ipbreason": "Begrundelse:",
        "ipbreason-dropdown": "*Generelle begrundelser\n** Indsættelse af forkerte oplysninger\n** Fjernelse af korrekt indhold\n** Linkspam\n** Indsættelse af vås/nonsens\n** Utilstedelig opførsel\n** Misbrug af flere brugerkonti\n** Uacceptabelt brugernavn",
        "newimages-summary": "Denne specialside viser de senest oplagte filer.",
        "newimages-legend": "Filter",
        "newimages-label": "Filnavn (eller en del af det):",
-       "showhidebots": "($1 botter)",
        "noimages": "Ingen filer fundet.",
        "ilsubmit": "Søg",
        "bydate": "efter dato",
index 7705a91..99d8414 100644 (file)
        "contributions-title": "Benutzerbeiträge von „$1“",
        "mycontris": "Beiträge",
        "contribsub2": "Von {{GENDER:$3|$1}} ($2)",
-       "contributions-userdoesnotexist": "Das Benutzerkonto „$1“ ist nicht registriert.",
+       "contributions-userdoesnotexist": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
        "nocontribs": "Es wurden keine Benutzerbeiträge mit diesen Kriterien gefunden.",
        "uctop": "(aktuell)",
        "month": "und Monat:",
        "blockip": "IP-Adresse/Benutzer sperren",
        "blockip-legend": "IP-Adresse/Benutzer sperren",
        "blockiptext": "Mit diesem Formular sperrst du eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.\nDies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte gib den Grund für die Sperre an.",
-       "ipadressorusername": "IP-Adresse oder Benutzername:",
+       "ipaddressorusername": "IP-Adresse oder Benutzername:",
        "ipbexpiry": "Sperrdauer:",
        "ipbreason": "Grund:",
        "ipbreason-dropdown": "* Allgemeine Sperrgründe\n** Einfügen falscher Informationen\n** Leeren von Seiten\n** Massenweises Einfügen externer Links\n** Einstellen unsinniger Inhalte in Seiten\n** Ungebührliches Verhalten\n** Missbrauch mit mehreren Benutzerkonten\n** Ungeeigneter Benutzername",
        "newimages-summary": "Diese Spezialseite zeigt die zuletzt hochgeladenen Dateien an.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateiname (oder ein Teil davon):",
-       "showhidebots": "(Bots $1)",
+       "newimages-showbots": "Uploads von Bots anzeigen",
        "noimages": "Keine Dateien gefunden.",
        "ilsubmit": "Suchen",
        "bydate": "nach Datum",
index fe31bf8..20a78da 100644 (file)
        "october-date": "Tışrino Verên $1",
        "november-date": "Tışrino Peyên $1",
        "december-date": "Kanun $1",
-       "pagecategories": "{{PLURAL:$1|Kategori|Kategoriy}}",
+       "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriy}}",
        "category_header": "Pelê ke kategoriya \"$1\" derê",
        "subcategories": "Kategoriyê bınêni",
        "category-media-header": "Dosyeyê ke kategoriya \"$1\" derê",
        "vector-action-unprotect": "Starkerdışi bıvurne",
        "vector-view-create": "Vıraze",
        "vector-view-edit": "Bıvurne",
-       "vector-view-history": "Verênan bıvêne",
+       "vector-view-history": "Tarixê pele bıvêne",
        "vector-view-view": "Bıwane",
        "vector-view-viewsource": "Çımey bıvêne",
        "actions": "Hereketi",
        "formerror": "Xeta: Form nêerşawiyeno",
        "badarticleerror": "Kar  ke şıma kenê, qebul nêbi.",
        "cannotdelete": "Pel  \"$1\" o ke şıma nişane kerd hewn a neşı.\nBelka yewna ten kerdo hewn a.",
-       "cannotdelete-title": "Şıma nêşenê pela \"$1\" besternê",
+       "cannotdelete-title": "Şıma nêşenê pela \"$1\" besterê",
        "delete-hook-aborted": "Esterıtışi terefê çengeli ra ibtal bi.\nQet tesrih beyan nêbi.",
        "no-null-revision": "Qandé \"$1\" zew rewizyono newe névıraziya.",
        "badtitle": "Sernameo xırabın",
        "hr_tip": "Xeta verardiye (teserrufın bıgureyne/bıxebetne)",
        "summary": "Xulasa:",
        "subject": "Mewzu/sernuşte:",
-       "minoredit": "Vırnayışo werkek",
-       "watchthis": "'''Ena pele seyr ke'''",
+       "minoredit": "No yew vurnayışo werdiyo",
+       "watchthis": "Ena pele seyr ke",
        "savearticle": "Pele qeyd ke",
        "preview": "Verqayt",
        "showpreview": "Verqayti bımocne",
        "recentchangescount": "Amarê vurnayışê ke hesıbyaye deye bımocneyê:",
        "prefs-help-recentchangescount": "Ney de vurnayışê peyêni, tarixê pelan u cıkewteni asenê.",
        "prefs-help-watchlist-token2": "Na pawıtış nımnayi kılta listada şımaya.\nOke kıliti zano şeno listeya tamaşann bıvino. Poğta coy ra kesiya me hesırne. \n[[Special:ResetTokens|Na kıliti reset kerdışi re tiyay bıploğne]].",
-       "savedprefs": "Tecihey şıma qeyd biyey.",
+       "savedprefs": "Tecihê şıma qeyd biy.",
        "timezonelegend": "Warey saete:",
        "localtime": "saeta mehelliye:",
        "timezoneuseserverdefault": "Zey karkerdışê Wiki ($1)",
        "recentchanges-noresult": "Goreyê kriteranê kıfşkerdeyan ra qet yew vurnayış nêvêniya.",
        "recentchanges-feed-description": "Ena feed dı vurnayişanê tewr peniyan teqip bık.",
        "recentchanges-label-newpage": "Enê vurnayışi ra yew pela newiye vıraziye",
-       "recentchanges-label-minor": "Vırnayışo werkek",
+       "recentchanges-label-minor": "No yew vurnayışo werdiyo",
        "recentchanges-label-bot": "Eno vurnayış terefê yew boti ra vıraziyo",
        "recentchanges-label-unpatrolled": "Eno vurnayış hewna dewriya nêbiyo",
        "recentchanges-label-plusminus": "Ebadê pele de bazê bayti de vayeyê cı",
        "zip-unsupported": "Dosya MediaWiki ra ZIP dosyaya nêwanêna yana derganiya ZIP de cı aya pıro nina. Kontrolê emeleyey oyo veş nêbeno.",
        "uploadstash": "Nımıtışê barkerdışi",
        "uploadstash-summary": "Na pela barkerdış (yana hewna barbenayış dı) hema hewna wiki'dedosyeyê ke nêpêseryayê enarê rasayış gre danop. Enê dosyay o ke a dosya keno bar tek o şena a dosya bıvino.",
-       "uploadstash-clear": "Dosyeyanê ke idareten vuriyenê inan bester",
+       "uploadstash-clear": "Dosyeyanê ke idareten vuriyenê inan bestere",
        "uploadstash-nofiles": "Dosyeyê ke idareten bıvıryê çınyê.",
        "uploadstash-badtoken": "Karkerdışê cı nêbı, muhtemelen desture şımayê timarkerdışi zeman do şıma ravêrdo. Fına bıcerbnê.",
        "uploadstash-errclear": "Besternayışê dosyayan nêbı",
        "withoutinterwiki-submit": "Bımocne",
        "fewestrevisions": "Pelê be senık çımraviyarnayışi",
        "nbytes": "$1 {{PLURAL:$1|bayt|bayti}}",
-       "ncategories": "$1 {{PLURAL:$1|Kategori|Kategoriy}}",
+       "ncategories": "$1 {{PLURAL:$1|Kategoriye|Kategoriy}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikiy}}",
        "nlinks": "$1 {{PLURAL:$1|link|linkî}}",
        "nmembers": "$1 {{PLURAL:$1|eza|ezayan}}",
        "specialpage-empty": "Seba na rapore netice çıniyo.",
        "lonelypages": "Pelê seyi",
        "lonelypagestext": "Ena pelî link nibiyê ya zi pelanê binî {{SITENAME}} de transclude biy.",
-       "uncategorizedpages": "Pelayanê ke kategorî nibiye",
-       "uncategorizedcategories": "Kategoriyê ke bêkategoriyê",
+       "uncategorizedpages": "Pelê ke kategorize nêbiyê",
+       "uncategorizedcategories": "Kategoriyê ke kategorize nêbiyê",
        "uncategorizedimages": "Dosyayê ke bê kategoriyê",
        "uncategorizedtemplates": "Şablonê ke bêkategoriyê",
-       "unusedcategories": "Kategoriyê ke nê xebtênê",
+       "unusedcategories": "Kategoriyê ke nêgureniyê",
        "unusedimages": "Dosyeyê ke nê xebtênê",
        "popularpages": "Pelî ke populer o.",
-       "wantedcategories": "Kategoriye ke waziyayê",
+       "wantedcategories": "Kategoriyê ke waziyayê",
        "wantedpages": "Peleye ke waştênê",
        "wantedpages-badtitle": "sernuşte meqbul niyo: $1",
        "wantedfiles": "Dosyeyê cıgeyriyayey",
        "wantedfiletext-nocat": "Dosyeyê cêrêni estê lekin karnêvıstê. Dosyeyê xeribi liste benê. bo babeta dano <del>ateber</del>",
        "wantedtemplates": "Şablonê ke waziyenê",
        "mostlinked": "Pelî ke tewr zafî lînk bîy.",
-       "mostlinkedcategories": "Kategoriyê ke tewr zaf wesiqa rê gıreyê",
+       "mostlinkedcategories": "Kategoriyê ke tewr zehf meqaley tede estê",
        "mostlinkedtemplates": "Şablonê ke tewr zafî pela re gıre bîye.",
        "mostcategories": "Pelan ke tewr zaf kategorî estê.",
        "mostimages": "Dosyayan ke tewr zaf link estê.",
        "move": "Bere",
        "movethispage": "Ena pele bere",
        "unusedimagestext": "Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.\nXo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.",
-       "unusedcategoriestext": "kategoriyê ke cêrdeyê estê lakin qet ju wesiqa yana kategori de nexebtênê.",
+       "unusedcategoriestext": "Kategoriyê ke cêr derê, nê bıbê zi, terefê qet madeyan ya zi kategoriyan ra nêgureniyenê.",
        "notargettitle": "Hedef çini yo",
        "notargettext": "qey xebıtnayişê ney fonksiyoni şıma yew hedef nişane nêkerd.",
        "nopagetitle": "wina yew pelê hedefi çin o.",
        "activeusers-count": "$1 peyni {{PLURAL:$3|roz de|$3 rozan de}} $1 {{PLURAL:$1|hereket|hereketi}} kerdê",
        "activeusers-from": "Enê karberi ra tepya bımocne:",
        "activeusers-hidebots": "Botan bınımne",
-       "activeusers-hidesysops": "İdarekerdoğan bınımne",
+       "activeusers-hidesysops": "İdarekaran bınımne",
        "activeusers-noresult": "Karberi nêdiyayê.",
        "listgrouprights": "heqê grubê karberi",
        "listgrouprights-summary": "wikiya cêrın a ke tede grubê karberi nişane biyê, listeya heqê cıresayişê inan o.\nqey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed]] belka esto.",
        "listgrouprights-addgroup-self-all": "şıma eşkeni hesabê xo re heme gruban têare bıkerî",
        "listgrouprights-removegroup-self-all": "şıma hesabê xo ra eşkeni heme gruban bıveci",
        "listgrouprights-namespaceprotection-namespace": "Caynami",
-       "trackingcategories": "Kategoriye taqiban",
-       "trackingcategories-msg": "Kategoriya taqibi",
+       "trackingcategories": "Kategoriyê teqibi",
+       "trackingcategories-msg": "Kategoriya teqibi",
        "trackingcategories-name": "Namey mesaci",
        "trackingcategories-desc": "Kriterê definayışê kategoriye",
        "trackingcategories-disabled": "Kategoriya feal niya",
        "nowatchlist": "listeya temaşa kerdıişê şıma de yew madde zi çina.",
        "watchlistanontext": "qey vurnayişê maddeya listeya temaşakerdişi $1.",
        "watchnologin": "Şıma cıkewtış nêvıraşto",
-       "addwatch": "Listeyê seyri deke",
+       "addwatch": "Lista seyrkerdışi ke",
        "addedwatchtext": "Ma pele \"[[:$1]]\" zerri [[Special:Watchlist|watchlist]]ê tı kerd de.\nEna deme ra, ma qe vurnayışan ser ena pele tı haberdar keni.",
-       "removewatch": "Listedê mınê seyr kerdışi ra hewad",
+       "removewatch": "Lista seyrkerdışi ra wedare",
        "removedwatchtext": "Ena pela \"[[:$1]]\" biya wedariya [[Special:Watchlist|listeyê seyr-kerdışi şıma]].",
        "watch": "Seyr ke",
-       "watchthispage": "'''Ena pele seyr ke'''",
-       "unwatch": "Teqib meke",
+       "watchthispage": "Ena pele seyr ke",
+       "unwatch": "Teqib meke",
        "unwatchthispage": "temaşa kerdışê peli vındarn.",
        "notanarticle": "mebhesê peli niyo",
        "notvisiblerev": "Revizyon esteriyayo",
        "sp-contributions-username": "Adresa IPy ya zi nameyê karberi:",
        "sp-contributions-toponly": "Tenya rewizyonanê tewr peyniyan bimocne",
        "sp-contributions-submit": "Cı geyre",
-       "whatlinkshere": "Pela rê gırey",
+       "whatlinkshere": "Pele rê gırey",
        "whatlinkshere-title": "Per da \"$1\" rê perê ke gre danê",
        "whatlinkshere-page": "Pele:",
        "linkshere": "Ena peleyan grey biya '''[[:$1]]''':",
        "blockip": "Karberi kılit ke",
        "blockip-legend": "Karber blok bike",
        "blockiptext": "pê şuxulnayişê formê cêrıni, şıma eşkeni verniyê vurnayişkerdışê yew karberi ya zi yew IPyi bıgêrî. No têna qey verni-gırewtışê vandalizmiyo u gani şıma [[{{MediaWiki:Policy-url}}|qaydeyan]] re diqqet bıkeri. cêr de muheqqeq sebebê verni-grewtışi bınusi. (mesela: -nê- pelani de vandalizm kerdo).",
-       "ipadressorusername": "Adresa IPy ya zi nameyê karberi:",
+       "ipaddressorusername": "Adresa IPy ya zi nameyê karberi:",
        "ipbexpiry": "Qedyayış:",
        "ipbreason": "Sebeb:",
        "ipbreason-dropdown": "*sebebê verni-grewtışi yê pêroyi\n** malumatê şaş têare kerdış\n** Zerreyê pelan vetış\n** keyepelê teberi re gırey eştış\n** pelani re qıseyê tewşan(toşan) eştış\n** Tehditwari hereket/Taciz\n** yew ra ziyed hesaban xırab şuxulnayiş\n** nameyê karberi yo ke meqbul niyo",
        "import-comment": "Vatış:",
        "importtext": "Kerem ke dosyay, çımeyê wiki ra pê [[Special:Export|kırıştışê teberdayişi]] bıdê teber, Komputerê xo de qeyd kerê u bar kerê tiya.",
        "importstart": "Pelan împort kenî",
-       "import-revision-count": "$1 {{PLURAL:$1|revizyon|revizyon}}",
+       "import-revision-count": "$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
        "importnopages": "Pel çino ke import bike",
        "imported-log-entries": " $1 {{PLURAL:$1|logê dekerdişi|loganê dekerdişan}} ard.",
        "importfailed": "Împort nebiy: <nowiki>$1</nowiki>",
        "import-logentry-upload": "dosyayê bar kerdişî ra [[$1]] împort biyo",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
        "import-logentry-interwiki": "$1 transwiki biyo",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revizyon|revizyonî}} $2 ra",
+       "import-logentry-interwiki-detail": "$2 ra $1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
        "javascripttest": "Cerebnayışê JavaScripti",
        "javascripttest-title": "Testê $1 gurweyênê",
        "javascripttest-pagetext-noframework": "Na pela testanê JavaScripta gurweynayışi re abıryaya.",
        "tooltip-pt-watchlist": "Lista pelanê ke to gırewtê seyrkerdış",
        "tooltip-pt-mycontris": "Listeya dekerdışan de şıma",
        "tooltip-pt-login": "Mayê şıma ronıştış akerdışi rê dawet keme; labelê ronıştış mecburi niyo",
-       "tooltip-pt-logout": "Sistem ra vıcyayış",
+       "tooltip-pt-logout": "Bıveciye",
        "tooltip-ca-talk": "Zerrekê pele sero werênayış",
        "tooltip-ca-edit": "Tı şenay na pele bıvurnê. Kerem ke, qeydkerdış ra ver gocega verqayti bıgurene.",
        "tooltip-ca-addsection": "Zu bınnusteya newi ak",
        "tooltip-compareselectedversions": "Ena per de ferqê rewziyonan de dı weçinaya bıvinê",
        "tooltip-watch": "Ena pele lista xoya seyrkerdışi ke",
        "tooltip-watchlistedit-normal-submit": "Sernuşteyan wedare",
-       "tooltip-watchlistedit-raw-submit": "Listeyê seyri newen ke",
+       "tooltip-watchlistedit-raw-submit": "Lista seyrkerdışi newe ke",
        "tooltip-recreate": "pel hewn a bışiyo zi tepiya biya",
        "tooltip-upload": "Sergen de bari be",
        "tooltip-rollback": "\"Peyser bia\" be yew tık pela iştıraq(an)ê peyên|i(an) peyser ano.",
        "pageinfo-recent-edits": "Amariya vurnayışan ($1 ra nata)",
        "pageinfo-recent-authors": "Amarina nuştekaran pêro",
        "pageinfo-magic-words": "{{PLURAL:$1|Çekuya|Çekuyê}} ($1) sihırini",
-       "pageinfo-hidden-categories": "($1) {{PLURAL:$1|Kategoriyer|Kategoriyan}} bınımne",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Kategoriya nımıtiye|Kategoriyê nımıtey}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Şablono|Şablonê}} ke mocniyenê ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|1 Pele|$1 Pelan}} de bestiya pıra",
        "pageinfo-toolboxlink": "Melumatê pele",
        "newimages-summary": "Ena pela xasi dosyayi ke peni de bar biyayeyi mocnane.",
        "newimages-legend": "Avrêc",
        "newimages-label": "Nameyê dosya ( ya zi parçe ey)",
-       "showhidebots": "(bota $1)",
        "noimages": "Çik çini yo.",
        "ilsubmit": "Cı geyre",
        "bydate": "goreyê zemani",
        "minutes": "{{PLURAL:$1|$1 deqa|$1 deqan}}",
        "hours": "{{PLURAL:$1|$1 saete|$1 saetan}}",
        "days": "{{PLURAL:$1|$1 roce|$1 roci}}",
-       "weeks": "{{PLURAL:$1|$1 hefte|$1 hefteyan}}",
+       "weeks": "{{PLURAL:$1|$1 hefte|$1 heftey}}",
        "months": "{{PLURAL:$1|aşme|$1 aşman}}",
-       "years": "{{PLURAL:$1|$1 serre|$1 serran}}",
+       "years": "{{PLURAL:$1|$1 serre|$1 serri}}",
        "ago": "Verê $1",
-       "just-now": "Hema newke",
-       "hours-ago": "Verê $1 {{PLURAL:$1|saete|saetan}}",
+       "just-now": "tafte nıka",
+       "hours-ago": "$1 {{PLURAL:$1|saete|saeti}} raver",
        "minutes-ago": "Verê $1 {{PLURAL:$1|deqa|deqan}}",
        "seconds-ago": "Verê $1 {{PLURAL:$1|saniya|saniyeyan}}",
        "monday-at": "Dışeme $1 de",
        "exif-languagecode": "Zıwan",
        "exif-iimversion": "Verqaydê IIM",
        "exif-iimcategory": "Kategoriye",
-       "exif-iimsupplementalcategory": "Kategoriyê temam kerdışi",
+       "exif-iimsupplementalcategory": "Kategoriyê temamkerdışi",
        "exif-datetimeexpires": "No peyra mekarênê",
        "exif-datetimereleased": "Bıroşe",
        "exif-originaltransmissionref": "Oricinal pusula da kodê açarnayışi",
        "bitrate-yottabits": "$1Ybps",
        "lag-warn-normal": "Vurnayîşî ke {{PLURAL:$1|seniye|seniyeyî}} ra newiyerî belki inan nimucneno.",
        "lag-warn-high": "Eka serverê databaseyî zaf hebitiyeno, ayra vurnayîşî ke {{PLURAL:$1|seniye|seniyeyî}} ra newiyerî belki inan nimucneno.",
-       "watchlistedit-normal-title": "Listeyê seyirkerdişi bivurne",
-       "watchlistedit-normal-legend": "Listeya seyri ra sername wedarne.",
+       "watchlistedit-normal-title": "Lista seyrkerdışi bıvurne",
+       "watchlistedit-normal-legend": "Lista seyrkerdışi ra sernameyan wedare",
        "watchlistedit-normal-explain": "Listeyê seyr kerdîşî ti de serogî cor de mucnayiyo.\nEka ti wazeno seroğ biwedarne, kuti ke kistê de, ay işaret bike u \"{{int:Watchlistedit-normal-submit}}\" klik bike.\nTi hem zi eşkeno [[Special:EditWatchlist/raw|edit the raw list]].",
        "watchlistedit-normal-submit": "Sernuşteyan wedare",
        "watchlistedit-normal-done": "{{PLURAL:$1|1 seroğ|$1 seroğî}} seyr kerdişê tu ra wedarno.",
-       "watchlistedit-raw-title": "Listeyê seyirkerdişi ye hami bivurne",
-       "watchlistedit-raw-legend": "Listeyê seyirkerdişi ye hami bivurne",
+       "watchlistedit-raw-title": "Lista seyrkerdışia xame bıvurne",
+       "watchlistedit-raw-legend": "Lista seyrkerdışia xame bıvurne",
        "watchlistedit-raw-explain": "Listeyê seyr kerdîşî ti de serogî cor de mucnayiyo u ti eşkeno pê dekerdiş u wedarnayîş liste bivurne.\nEka vurnayîşê ti qediyo, Listeyê Seyr Kerdişî Rocaniye Bike \"{{int:Watchlistedit-raw-submit}}\" klik bike.\nTi hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].",
        "watchlistedit-raw-titles": "Seroğî:",
-       "watchlistedit-raw-submit": "Listeyê seyri newen ke",
+       "watchlistedit-raw-submit": "Lista seyrkerdışi newe ke",
        "watchlistedit-raw-done": "Listeyê tuyê seyrkerdişi rocaniye biyo",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 seroğ|$1 seroğî}} de kerd:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 seroğ|$1 seroği}} besteriyaye:",
-       "watchlisttools-view": "vurnayışanê eleqadari bıvin",
-       "watchlisttools-edit": "Lista seyrkerdışi bıvênên u bıvurnên",
-       "watchlisttools-raw": "Listeyê seyr-kerdışi bıvin",
+       "watchlisttools-view": "Vurnayışanê elaqedaran bıvêne",
+       "watchlisttools-edit": "Lista seyrkerdışi bıvêne û bıvurne",
+       "watchlisttools-raw": "Lista seyrkerdışia xame bıvurne",
        "iranian-calendar-m1": "Farvardin",
        "iranian-calendar-m2": "Ordibeheşt",
        "iranian-calendar-m3": "Xordad",
        "htmlform-no": "Nê",
        "htmlform-yes": "Eya",
        "htmlform-chosen-placeholder": "Opsiyon weçine",
+       "htmlform-cloner-create": "Tayêna cı ke",
+       "htmlform-cloner-delete": "Wedare",
        "sqlite-has-fts": "$1 tam-metn destegê cı geyrayışiya piya",
        "sqlite-no-fts": "$1 tam-metn bê destegê cı geyrayışi",
        "logentry-delete-delete": "$1 pela $3 {{GENDER:$2|esterıte}}",
index 9cdc751..250ee94 100644 (file)
        "permalink": "Wobstawny wótkaz",
        "print": "Śišćaś",
        "view": "Woglědaś se",
+       "view-foreign": "Na $1 se woglědaś",
        "edit": "wobźěłaś",
+       "edit-local": "Lokalne wopisanje wobźěłaś",
        "create": "Wuźěłaś",
+       "create-local": "Lokalne wopisanje pśidaś",
        "editthispage": "Bok wobźěłaś",
        "create-this-page": "Bok wuźěłaś",
        "delete": "Wulašowaś",
        "edit-gone-missing": "Njejo móžno było bok aktualizěrowaś.\nZda sem až jo wulašowany.",
        "edit-conflict": "Wobźěłański konflikt.",
        "edit-no-change": "Wašo wobźěłanje jo se ignorěrowało, dokulaž tekst njejo se změnił.",
+       "postedit-confirmation-created": "Toś ten bok jo se napórał.",
+       "postedit-confirmation-restored": "Bok jo se wótnowił.",
        "postedit-confirmation-saved": "Twója změna jo se składła.",
        "edit-already-exists": "Njejo móžno było nowy bok napóraś.\nEksistěrujo južo.",
        "defaultmessagetext": "Standardny tekst powěźeńki",
        "action-createpage": "Boki napóraś",
        "action-createtalk": "Diskusijne boki napóraś",
        "action-createaccount": "Toś to wužywarske konto napóraś",
+       "action-history": "historiju toś togo boka pokazaś",
        "action-minoredit": "toś tu změnu ako snadnu markěrowaś",
        "action-move": "toś ten bok pśesunuś",
        "action-move-subpages": "toś ten bok a jogo pódboki pśesunuś",
        "pageswithprop-prophidden-binary": "binarna kakostna gódnota schowana ($1)",
        "doubleredirects": "Dwójne dalejpósrědnjenja",
        "doubleredirectstext": "Toś ten bok nalicujo boki, kótarež dalej pósrědnjaju na druge dalejpósrědnjenja.\nKužda smužka wopśimjejo wótkaze na prědne a druge dalejpósrědnjenje a teke na cel drugego dalejpósrědnjenja, což jo w normalnem paźe \"napšawdny\" celowy bok, na kótaryž by mógło prědne dalejpósrědnjenje pokazaś. <del>Pśešmarnjone</del> zapiski su južo wobstarane.",
-       "double-redirect-fixed-move": "[[$1]] jo se pśesunuł, jo něnto dalejposrědnjenje do [[$2]]",
-       "double-redirect-fixed-maintenance": "Dwójne dalejpósrědnjenje wót [[$1]] do [[$2]] se pórěźa.",
+       "double-redirect-fixed-move": "[[$1]] jo se pśesunuł.\nJo se awtomatiski zaktualizěrował a pósrědnja se něnto dalej do [[$2]].",
+       "double-redirect-fixed-maintenance": "Dwójne dalejpósrědnjenje wót [[$1]] do [[$2]] pórěźa se awtomatiski w wótwardowańskem nadawku.",
        "double-redirect-fixer": "Pórěźaŕ dalejpósrědnjenjow",
        "brokenredirects": "Skóńcowane dalejpósrědnjenja",
        "brokenredirectstext": "Slědujuce dalejpósrědnjenja wótkazuju na njeeksistěrujuce boki:",
        "listgrouprights-removegroup-self": "Móžo {{PLURAL:$2|kupku|kupce|kupki|kupkow}} ze swójskego konta wótpóraś: $1",
        "listgrouprights-addgroup-self-all": "Móžo wše kupki swójskemu kontoju pśidaś",
        "listgrouprights-removegroup-self-all": "Móžo wše kupki ze swójskego konta wótpóraś",
+       "listgrouprights-namespaceprotection-header": "Wobgranicowanja mjenjowego ruma",
+       "listgrouprights-namespaceprotection-namespace": "Mjenjowy rum",
+       "listgrouprights-namespaceprotection-restrictedto": "Pšawa, kótarež dowóluju wužywarjeju wobźěłowanje",
+       "trackingcategories": "Slědowańske kategorije",
+       "trackingcategories-msg": "Slědowańska kategorija",
+       "trackingcategories-name": "Mě powěźeńki",
+       "trackingcategories-desc": "Kriterije za zapśěgowanje kategorije",
+       "trackingcategories-nodesc": "Žedno wopisanje k dispoziciji",
+       "trackingcategories-disabled": "Kategorija jo znjemóžnjona",
        "mailnologin": "Njejo móžno e-mailku pósłaś.",
        "mailnologintext": "Dejš [[Special:UserLogin|pśizjawjony]] byś a płaśiwu e-mailowu adresu w swójich [[Special:Preferences|nastajenjach]] měś, aby drugim wužywarjam e-mail pósłał.",
        "emailuser": "Toś tomu wužywarjeju e-mail pósłaś",
        "contributions-title": "Wužywarske pśinoski wót $1",
        "mycontris": "Pśinoski",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Wužywarske konto \"$1\" njejo zregistrowane.",
        "nocontribs": "Za toś te kriterije njejsu žedne změny se namakali.",
        "uctop": "(aktualny)",
        "month": "wót mjaseca (a jěsnjej):",
        "blockip": "Wužywarja blokěrowaś",
        "blockip-legend": "Wužywarja blokěrowaś",
        "blockiptext": "Wužywaj slědujucy formular, jolic až coš wěstej IP-adresy abo konkretnemu wužywarjeju pśistup znjemóžniś. Take dejało se pó [[{{MediaWiki:Policy-url}}|směrnicach]] jano staś, aby se wandalizmoju zadorało. Pšosym zapódaj pśicynu za twójo blokěrowanje (na pś. mógu se citěrowaś konkretne boki, źo jo se wandalěrowało).",
-       "ipadressorusername": "IP-adresa abo wužywarske mě",
+       "ipaddressorusername": "IP-adresa abo wužywarske mě",
        "ipbexpiry": "Cas blokěrowanja:",
        "ipbreason": "Pśicyna:",
        "ipbreason-dropdown": "*powšykne pśicyny blokěrowanja\n** pódawanje njepšawych informacijow\n** wulašowanje wopśimjeśa bokow\n** pódawanje spamowych eksternych wótkazow\n** pisanje głuposćow na bokach\n** pśestupjenje zasady \"žedne wósobinske atakěrowanja\"\n** złowólne wužywanje wjele wužywarskich kontow\n** njekorektne wužywarske mě",
        "newimages-summary": "Toś ten specialny bok pokazujo dataje, kótarež su se ako slědne nagrali.",
        "newimages-legend": "Filter",
        "newimages-label": "Datajowe mě (abo źěl z togo):",
-       "showhidebots": "(awtomatiske programy (boty) $1)",
        "noimages": "Žedne dataje njejsu se namakali.",
        "ilsubmit": "Pytaś",
        "bydate": "pó datumje",
        "htmlform-no": "Ně",
        "htmlform-yes": "Jo",
        "htmlform-chosen-placeholder": "Wubjeŕ móžnosć",
+       "htmlform-cloner-create": "Wěcej pśidaś",
+       "htmlform-cloner-delete": "Wótpóraś",
+       "htmlform-cloner-required": "Nanejmjenjej jadna gódnota jo trěbna.",
        "sqlite-has-fts": "Wersija $1 z pódpěru za połnotekstowe pytanje",
        "sqlite-no-fts": "Wersija $1 bźez pódpěry za połnotekstowe pytanje",
        "logentry-delete-delete": "$1 jo bok $3 {{GENDER:$2|wulašował|wulašowała}}",
index db7a2ec..3342411 100644 (file)
        "file-info-gif-looped": "A ripetisiòun",
        "file-info-png-looped": "A ripetisiòun",
        "newimages-legend": "Fîltra",
-       "showhidebots": "($1 i bot)",
        "ilsubmit": "Sērca",
        "bydate": "per dâta",
        "ago": "$1 fa",
index 07aed30..87fe5ba 100644 (file)
        "blockip": "Φραγή χρήστη ή διεύθυνσης IP",
        "blockip-legend": "Φραγή του χρήστη",
        "blockiptext": "Χρησιμοποιήστε την παρακάτω φόρμα για να εμποδίσετε παρεμβάσεις στο κείμενο από μια συγκεκριμένη διεύθυνση IP ή όνομα χρήστη.\nΤο μέτρο αυτό πρέπει να λαμβάνεται μόνο σε περιπτώσεις βανδαλισμού σελίδων και πάντα σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].\nΠαρακαλούμε να αιτιολογήσετε την ενέργειά σας (παραπέμποντας π.χ. σε συγκεκριμένες σελίδες που υπέστησαν βανδαλισμό).",
-       "ipadressorusername": "Διεύθυνση IP ή όνομα χρήστη",
+       "ipaddressorusername": "Διεύθυνση IP ή όνομα χρήστη",
        "ipbexpiry": "Λήξη",
        "ipbreason": "Αιτία:",
        "ipbreason-dropdown": "*Συχνοί λόγοι φραγής\n** Εισαγωγή λανθασμένων πληροφοριών\n** Αφαίρεση περιεχομένου από σελίδες\n** Σύνδεσμοι τύπου spam σε εξωτερικούς ιστοτόπους\n** Εισαγωγή ασυναρτησιών σε σελίδες\n** Εκφοβιστική συμπεριφορά/παρενόχληση\n** Κατάχρηση πολλαπλών λογαριασμών\n** Απαράδεκτο όνομα χρήστη",
        "newimages-summary": "Αυτή η ειδική σελίδα δείχνει τα πιο πρόσφατα φορτωμένα αρχεία.",
        "newimages-legend": "Φίλτρο",
        "newimages-label": "Όνομα αρχείου (ή μέρος αυτού):",
-       "showhidebots": "($1 bots)",
        "noimages": "Δεν υπάρχουν εικόνες.",
        "ilsubmit": "Αναζήτηση",
        "bydate": "ημερομηνίας",
index c1b4e4c..7a118c7 100644 (file)
 {
-    "@metadata": {
-        "authors": []
-    },
-    "sidebar": "\n* navigation\n** mainpage|mainpage-description\n** recentchanges-url|recentchanges\n** randompage-url|randompage\n** helppage|help\n* SEARCH\n* TOOLBOX\n* LANGUAGES",
-    "tog-underline": "Link underlining:",
-    "tog-hideminor": "Hide minor edits in recent changes",
-    "tog-hidepatrolled": "Hide patrolled edits in recent changes",
-    "tog-newpageshidepatrolled": "Hide patrolled pages from new page list",
-    "tog-extendwatchlist": "Expand watchlist to show all changes, not just the most recent",
-    "tog-usenewrc": "Group changes by page in recent changes and watchlist",
-    "tog-numberheadings": "Auto-number headings",
-    "tog-showtoolbar": "Show edit toolbar",
-    "tog-editondblclick": "Edit pages on double click",
-    "tog-editsectiononrightclick": "Enable section editing by right clicking on section titles",
-    "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
-    "tog-watchdefault": "Add pages and files I edit to my watchlist",
-    "tog-watchmoves": "Add pages and files I move to my watchlist",
-    "tog-watchdeletion": "Add pages and files I delete to my watchlist",
-    "tog-minordefault": "Mark all edits minor by default",
-    "tog-previewontop": "Show preview before edit box",
-    "tog-previewonfirst": "Show preview on first edit",
-    "tog-enotifwatchlistpages": "Email me when a page or file on my watchlist is changed",
-    "tog-enotifusertalkpages": "Email me when my user talk page is changed",
-    "tog-enotifminoredits": "Email me also for minor edits of pages and files",
-    "tog-enotifrevealaddr": "Reveal my email address in notification emails",
-    "tog-shownumberswatching": "Show the number of watching users",
-    "tog-oldsig": "Existing signature:",
-    "tog-fancysig": "Treat signature as wikitext (without an automatic link)",
-    "tog-uselivepreview": "Use live preview (experimental)",
-    "tog-forceeditsummary": "Prompt me when entering a blank edit summary",
-    "tog-watchlisthideown": "Hide my edits from the watchlist",
-    "tog-watchlisthidebots": "Hide bot edits from the watchlist",
-    "tog-watchlisthideminor": "Hide minor edits from the watchlist",
-    "tog-watchlisthideliu": "Hide edits by logged in users from the watchlist",
-    "tog-watchlisthideanons": "Hide edits by anonymous users from the watchlist",
-    "tog-watchlisthidepatrolled": "Hide patrolled edits from the watchlist",
-    "tog-ccmeonemails": "Send me copies of emails I send to other users",
-    "tog-diffonly": "Do not show page content below diffs",
-    "tog-showhiddencats": "Show hidden categories",
-    "tog-norollbackdiff": "Omit diff after performing a rollback",
-    "tog-useeditwarning": "Warn me when I leave an edit page with unsaved changes",
-    "tog-prefershttps": "Always use a secure connection when logged in",
-    "underline-always": "Always",
-    "underline-never": "Never",
-    "underline-default": "Skin or browser default",
-    "editfont-style": "Edit area font style:",
-    "editfont-default": "Browser default",
-    "editfont-monospace": "Monospaced font",
-    "editfont-sansserif": "Sans-serif font",
-    "editfont-serif": "Serif font",
-    "sunday": "Sunday",
-    "monday": "Monday",
-    "tuesday": "Tuesday",
-    "wednesday": "Wednesday",
-    "thursday": "Thursday",
-    "friday": "Friday",
-    "saturday": "Saturday",
-    "sun": "Sun",
-    "mon": "Mon",
-    "tue": "Tue",
-    "wed": "Wed",
-    "thu": "Thu",
-    "fri": "Fri",
-    "sat": "Sat",
-    "january": "January",
-    "february": "February",
-    "march": "March",
-    "april": "April",
-    "may_long": "May",
-    "june": "June",
-    "july": "July",
-    "august": "August",
-    "september": "September",
-    "october": "October",
-    "november": "November",
-    "december": "December",
-    "january-gen": "January",
-    "february-gen": "February",
-    "march-gen": "March",
-    "april-gen": "April",
-    "may-gen": "May",
-    "june-gen": "June",
-    "july-gen": "July",
-    "august-gen": "August",
-    "september-gen": "September",
-    "october-gen": "October",
-    "november-gen": "November",
-    "december-gen": "December",
-    "jan": "Jan",
-    "feb": "Feb",
-    "mar": "Mar",
-    "apr": "Apr",
-    "may": "May",
-    "jun": "Jun",
-    "jul": "Jul",
-    "aug": "Aug",
-    "sep": "Sep",
-    "oct": "Oct",
-    "nov": "Nov",
-    "dec": "Dec",
-    "january-date": "January $1",
-    "february-date": "February $1",
-    "march-date": "March $1",
-    "april-date": "April $1",
-    "may-date": "May $1",
-    "june-date": "June $1",
-    "july-date": "July $1",
-    "august-date": "August $1",
-    "september-date": "September $1",
-    "october-date": "October $1",
-    "november-date": "November $1",
-    "december-date": "December $1",
-    "pagecategories": "{{PLURAL:$1|Category|Categories}}",
-    "pagecategorieslink": "Special:Categories",
-    "category_header": "Pages in category \"$1\"",
-    "subcategories": "Subcategories",
-    "category-media-header": "Media in category \"$1\"",
-    "category-empty": "<em>This category currently contains no pages or media.</em>",
-    "hidden-categories": "{{PLURAL:$1|Hidden category|Hidden categories}}",
-    "hidden-category-category": "Hidden categories",
-    "category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
-    "category-subcat-count-limited": "This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}.",
-    "category-article-count": "{{PLURAL:$2|This category contains only the following page.|The following {{PLURAL:$1|page is|$1 pages are}} in this category, out of $2 total.}}",
-    "category-article-count-limited": "The following {{PLURAL:$1|page is|$1 pages are}} in the current category.",
-    "category-file-count": "{{PLURAL:$2|This category contains only the following file.|The following {{PLURAL:$1|file is|$1 files are}} in this category, out of $2 total.}}",
-    "category-file-count-limited": "The following {{PLURAL:$1|file is|$1 files are}} in the current category.",
-    "listingcontinuesabbrev": "cont.",
-    "index-category": "Indexed pages",
-    "noindex-category": "Noindexed pages",
-    "broken-file-category": "Pages with broken file links",
-    "categoryviewer-pagedlinks": "($1) ($2)",
-    "about": "About",
-    "article": "Content page",
-    "newwindow": "(opens in new window)",
-    "cancel": "Cancel",
-    "moredotdotdot": "More...",
-    "morenotlisted": "This list is not complete.",
-    "mypage": "Page",
-    "mytalk": "Talk",
-    "anontalk": "Talk for this IP address",
-    "navigation": "Navigation",
-    "and": "&#32;and",
-    "qbfind": "Find",
-    "qbbrowse": "Browse",
-    "qbedit": "Edit",
-    "qbpageoptions": "This page",
-    "qbmyoptions": "My pages",
-    "faq": "FAQ",
-    "faqpage": "Project:FAQ",
-    "sitetitle": "{{SITENAME}}",
-    "sitesubtitle": "",
-    "vector-action-addsection": "Add topic",
-    "vector-action-delete": "Delete",
-    "vector-action-move": "Move",
-    "vector-action-protect": "Protect",
-    "vector-action-undelete": "Undelete",
-    "vector-action-unprotect": "Change protection",
-    "vector-view-create": "Create",
-    "vector-view-edit": "Edit",
-    "vector-view-history": "View history",
-    "vector-view-view": "Read",
-    "vector-view-viewsource": "View source",
-    "actions": "Actions",
-    "namespaces": "Namespaces",
-    "variants": "Variants",
-    "navigation-heading": "Navigation menu",
-    "errorpagetitle": "Error",
-    "returnto": "Return to $1.",
-    "tagline": "From {{SITENAME}}",
-    "help": "Help",
-    "search": "Search",
-    "searchbutton": "Search",
-    "go": "Go",
-    "searcharticle": "Go",
-    "history": "Page history",
-    "history_short": "History",
-    "updatedmarker": "updated since my last visit",
-    "printableversion": "Printable version",
-    "permalink": "Permanent link",
-    "print": "Print",
-    "view": "View",
-    "view-foreign": "View on $1",
-    "edit": "Edit",
-    "edit-local": "Edit local description",
-    "create": "Create",
-    "create-local": "Add local description",
-    "editthispage": "Edit this page",
-    "create-this-page": "Create this page",
-    "delete": "Delete",
-    "deletethispage": "Delete this page",
-    "undeletethispage": "Undelete this page",
-    "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
-    "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
-    "protect": "Protect",
-    "protect_change": "change",
-    "protectthispage": "Protect this page",
-    "unprotect": "Change protection",
-    "unprotectthispage": "Change protection of this page",
-    "newpage": "New page",
-    "talkpage": "Discuss this page",
-    "talkpagelinktext": "Talk",
-    "specialpage": "Special page",
-    "personaltools": "Personal tools",
-    "postcomment": "New section",
-    "addsection": "+",
-    "articlepage": "View content page",
-    "talk": "Discussion",
-    "views": "Views",
-    "toolbox": "Tools",
-    "userpage": "View user page",
-    "projectpage": "View project page",
-    "imagepage": "View file page",
-    "mediawikipage": "View message page",
-    "templatepage": "View template page",
-    "viewhelppage": "View help page",
-    "categorypage": "View category page",
-    "viewtalkpage": "View discussion",
-    "otherlanguages": "In other languages",
-    "redirectedfrom": "(Redirected from $1)",
-    "redirectpagesub": "Redirect page",
-    "talkpageheader": "-",
-    "lastmodifiedat": "This page was last modified on $1, at $2.",
-    "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}.",
-    "protectedpage": "Protected page",
-    "jumpto": "Jump to:",
-    "jumptonavigation": "navigation",
-    "jumptosearch": "search",
-    "view-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this page.\nPlease wait a while before you try to access this page again.\n\n$1",
-    "generic-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this resource.\nPlease wait a while before you try to access this resource again.",
-    "pool-timeout": "Timeout waiting for the lock",
-    "pool-queuefull": "Pool queue is full",
-    "pool-errorunknown": "Unknown error",
-    "pool-servererror": "The pool counter service is not available ($1).",
-    "aboutsite": "About {{SITENAME}}",
-    "aboutpage": "Project:About",
-    "copyright": "Content is available under $1 unless otherwise noted.",
-    "copyrightpage": "{{ns:project}}:Copyrights",
-    "currentevents": "Current events",
-    "currentevents-url": "Project:Current events",
-    "disclaimers": "Disclaimers",
-    "disclaimerpage": "Project:General disclaimer",
-    "edithelp": "Editing help",
-    "edithelppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages",
-    "helppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents",
-    "mainpage": "Main Page",
-    "mainpage-description": "Main page",
-    "policy-url": "Project:Policy",
-    "portal": "Community portal",
-    "portal-url": "Project:Community portal",
-    "privacy": "Privacy policy",
-    "privacypage": "Project:Privacy policy",
-    "badaccess": "Permission error",
-    "badaccess-group0": "You are not allowed to execute the action you have requested.",
-    "badaccess-groups": "The action you have requested is limited to users in {{PLURAL:$2|the group|one of the groups}}: $1.",
-    "versionrequired": "Version $1 of MediaWiki required",
-    "versionrequiredtext": "Version $1 of MediaWiki is required to use this page.\nSee [[Special:Version|version page]].",
-    "ok": "OK",
-    "pagetitle": "$1 - {{SITENAME}}",
-    "pagetitle-view-mainpage": "{{SITENAME}}",
-    "backlinksubtitle": "← $1",
-    "retrievedfrom": "Retrieved from \"$1\"",
-    "youhavenewmessages": "{{PLURAL:$3|You have}} $1 ($2).",
-    "youhavenewmessagesfromusers": "{{PLURAL:$4|You have}} $1 from {{PLURAL:$3|another user|$3 users}} ($2).",
-    "youhavenewmessagesmanyusers": "You have $1 from many users ($2).",
-    "newmessageslinkplural": "{{PLURAL:$1|a new message|999=new messages}}",
-    "newmessagesdifflinkplural": "last {{PLURAL:$1|change|999=changes}}",
-    "youhavenewmessagesmulti": "You have new messages on $1",
-    "newtalkseparator": ",&#32;",
-    "editsection": "edit",
-    "editold": "edit",
-    "viewsourceold": "view source",
-    "editlink": "edit",
-    "viewsourcelink": "view source",
-    "editsectionhint": "Edit section: $1",
-    "toc": "Contents",
-    "showtoc": "show",
-    "hidetoc": "hide",
-    "collapsible-collapse": "Collapse",
-    "collapsible-expand": "Expand",
-    "thisisdeleted": "View or restore $1?",
-    "viewdeleted": "View $1?",
-    "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
-    "feedlinks": "Feed:",
-    "feed-invalid": "Invalid subscription feed type.",
-    "feed-unavailable": "Syndication feeds are not available",
-    "site-rss-feed": "$1 RSS feed",
-    "site-atom-feed": "$1 Atom feed",
-    "page-rss-feed": "\"$1\" RSS feed",
-    "page-atom-feed": "\"$1\" Atom feed",
-    "feed-atom": "Atom",
-    "feed-rss": "RSS",
-    "sitenotice": "-",
-    "anonnotice": "-",
-    "newsectionheaderdefaultlevel": "== $1 ==",
-    "red-link-title": "$1 (page does not exist)",
-    "sort-descending": "Sort descending",
-    "sort-ascending": "Sort ascending",
-    "nstab-main": "Page",
-    "nstab-user": "User page",
-    "nstab-media": "Media page",
-    "nstab-special": "Special page",
-    "nstab-project": "Project page",
-    "nstab-image": "File",
-    "nstab-mediawiki": "Message",
-    "nstab-template": "Template",
-    "nstab-help": "Help page",
-    "nstab-category": "Category",
-    "mainpage-nstab": "",
-    "nosuchaction": "No such action",
-    "nosuchactiontext": "The action specified by the URL is invalid.\nYou might have mistyped the URL, or followed an incorrect link.\nThis might also indicate a bug in the software used by {{SITENAME}}.",
-    "nosuchspecialpage": "No such special page",
-    "nospecialpagetext": "<strong>You have requested an invalid special page.</strong>\n\nA list of valid special pages can be found at [[Special:SpecialPages|{{int:specialpages}}]].",
-    "error": "Error",
-    "databaseerror": "Database error",
-    "databaseerror-text": "A database query error has occurred.\nThis may indicate a bug in the software.",
-    "databaseerror-textcl": "A database query error has occurred.",
-    "databaseerror-query": "Query: $1",
-    "databaseerror-function": "Function: $1",
-    "databaseerror-error": "Error: $1",
-    "laggedslavemode": "<strong>Warning:</strong> Page may not contain recent updates.",
-    "readonly": "Database locked",
-    "enterlockreason": "Enter a reason for the lock, including an estimate of when the lock will be released",
-    "readonlytext": "The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.\n\nThe administrator who locked it offered this explanation: $1",
-    "missing-article": "The database did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
-    "missingarticle-rev": "(revision#: $1)",
-    "missingarticle-diff": "(Diff: $1, $2)",
-    "readonly_lag": "The database has been automatically locked while the slave database servers catch up to the master",
-    "internalerror": "Internal error",
-    "internalerror_info": "Internal error: $1",
-    "filecopyerror": "Could not copy file \"$1\" to \"$2\".",
-    "filerenameerror": "Could not rename file \"$1\" to \"$2\".",
-    "filedeleteerror": "Could not delete file \"$1\".",
-    "directorycreateerror": "Could not create directory \"$1\".",
-    "filenotfound": "Could not find file \"$1\".",
-    "unexpected": "Unexpected value: \"$1\"=\"$2\".",
-    "formerror": "Error: Could not submit form.",
-    "badarticleerror": "This action cannot be performed on this page.",
-    "cannotdelete": "The page or file \"$1\" could not be deleted.\nIt may have already been deleted by someone else.",
-    "cannotdelete-title": "Cannot delete page \"$1\"",
-    "delete-hook-aborted": "Deletion aborted by hook.\nIt gave no explanation.",
-    "no-null-revision": "Could not create new null revision for page \"$1\"",
-    "badtitle": "Bad title",
-    "badtitletext": "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.\nIt may contain one or more characters that cannot be used in titles.",
-    "perfcached": "The following data is cached and may not be up to date. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
-    "perfcachedts": "The following data is cached, and was last updated $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
-    "querypage-no-updates": "Updates for this page are currently disabled.\nData here will not presently be refreshed.",
-    "viewsource": "View source",
-    "viewsource-title": "View source for $1",
-    "actionthrottled": "Action throttled",
-    "actionthrottledtext": "As an anti-spam measure, you are limited from performing this action too many times in a short space of time, and you have exceeded this limit.\nPlease try again in a few minutes.",
-    "protectedpagetext": "This page has been protected to prevent editing or other actions.",
-    "viewsourcetext": "You can view and copy the source of this page:",
-    "viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page:",
-    "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-    "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-    "cascadeprotected": "This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
-    "namespaceprotected": "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
-    "customcssprotected": "You do not have permission to edit this CSS page because it contains another user's personal settings.",
-    "customjsprotected": "You do not have permission to edit this JavaScript page because it contains another user's personal settings.",
-    "mycustomcssprotected": "You do not have permission to edit this CSS page.",
-    "mycustomjsprotected": "You do not have permission to edit this JavaScript page.",
-    "myprivateinfoprotected": "You do not have permission to edit your private information.",
-    "mypreferencesprotected": "You do not have permission to edit your preferences.",
-    "ns-specialprotected": "Special pages cannot be edited.",
-    "titleprotected": "This title has been protected from creation by [[User:$1|$1]].\nThe reason given is \"<em>$2</em>\".",
-    "filereadonlyerror": "Unable to modify the file \"$1\" because the file repository \"$2\" is in read-only mode.\n\nThe administrator who locked it offered this explanation: \"$3\".",
-    "invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
-    "invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
-    "exception-nologin": "Not logged in",
-    "exception-nologin-text": "Please [[Special:Userlogin|log in]] to be able to access this page or action.",
-    "exception-nologin-text-manual": "Please $1 to be able to access this page or action.",
-    "virus-badscanner": "Bad configuration: Unknown virus scanner: <em>$1</em>",
-    "virus-scanfailed": "scan failed (code $1)",
-    "virus-unknownscanner": "unknown antivirus:",
-    "logouttext": "<strong>You are now logged out.</strong>\n\nNote that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-    "welcomeuser": "Welcome, $1!",
-    "welcomecreation-msg": "Your account has been created.\nYou can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish.",
-    "yourname": "Username:",
-    "userlogin-yourname": "Username",
-    "userlogin-yourname-ph": "Enter your username",
-    "createacct-another-username-ph": "Enter the username",
-    "createacct-helpusername": "",
-    "yourpassword": "Password:",
-    "userlogin-yourpassword": "Password",
-    "userlogin-yourpassword-ph": "Enter your password",
-    "createacct-yourpassword-ph": "Enter a password",
-    "yourpasswordagain": "Retype password:",
-    "createacct-yourpasswordagain": "Confirm password",
-    "createacct-yourpasswordagain-ph": "Enter password again",
-    "remembermypassword": "Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "userlogin-remembermypassword": "Keep me logged in",
-    "userlogin-signwithsecure": "Use secure connection",
-    "yourdomainname": "Your domain:",
-    "password-change-forbidden": "You cannot change passwords on this wiki.",
-    "externaldberror": "There was either an authentication database error or you are not allowed to update your external account.",
-    "login": "Log in",
-    "nav-login-createaccount": "Log in / create account",
-    "loginprompt": "You must have cookies enabled to log in to {{SITENAME}}.",
-    "userlogin": "Log in / create account",
-    "userloginnocreate": "Log in",
-    "logout": "Log out",
-    "userlogout": "Log out",
-    "userlogout-summary": "",
-    "notloggedin": "Not logged in",
-    "userlogin-noaccount": "Don't have an account?",
-    "userlogin-joinproject": "Join {{SITENAME}}",
-    "nologin": "Don't have an account? $1.",
-    "nologinlink": "Create an account",
-    "createaccount": "Create account",
-    "gotaccount": "Already have an account? $1.",
-    "gotaccountlink": "Log in",
-    "userlogin-resetlink": "Forgotten your login details?",
-    "userlogin-resetpassword-link": "Forgot your password?",
-    "helplogin-url": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Logging_in",
-    "userlogin-helplink2": "Help with logging in",
-    "userlogin-loggedin": "You are already logged in as {{GENDER:$1|$1}}.\nUse the form below to log in as another user.",
-    "userlogin-createanother": "Create another account",
-    "createacct-emailrequired": "Email address",
-    "createacct-emailoptional": "Email address (optional)",
-    "createacct-email-ph": "Enter your email address",
-    "createacct-another-email-ph": "Enter email address",
-    "createaccountmail": "Use a temporary random password and send it to the specified email address",
-    "createacct-realname": "Real name (optional)",
-    "createaccountreason": "Reason:",
-    "createacct-reason": "Reason",
-    "createacct-reason-ph": "Why you are creating another account",
-    "createacct-captcha": "Security check",
-    "createacct-imgcaptcha-help": "",
-    "createacct-imgcaptcha-ph": "Enter the text you see above",
-    "createacct-submit": "Create your account",
-    "createacct-another-submit": "Create another account",
-    "createacct-benefit-heading": "{{SITENAME}} is made by people like you.",
-    "createacct-benefit-icon1": "icon-edits",
-    "createacct-benefit-head1": "{{NUMBEROFEDITS}}",
-    "createacct-benefit-body1": "{{PLURAL:$1|edit|edits}}",
-    "createacct-benefit-icon2": "icon-pages",
-    "createacct-benefit-head2": "{{NUMBEROFARTICLES}}",
-    "createacct-benefit-body2": "{{PLURAL:$1|page|pages}}",
-    "createacct-benefit-icon3": "icon-contributors",
-    "createacct-benefit-head3": "{{NUMBEROFACTIVEUSERS}}",
-    "createacct-benefit-body3": "recent {{PLURAL:$1|contributor|contributors}}",
-    "badretype": "The passwords you entered do not match.",
-    "userexists": "Username entered already in use.\nPlease choose a different name.",
-    "loginerror": "Login error",
-    "createacct-error": "Account creation error",
-    "createaccounterror": "Could not create account: $1",
-    "nocookiesnew": "The user account was created, but you are not logged in.\n{{SITENAME}} uses cookies to log in users.\nYou have cookies disabled.\nPlease enable them, then log in with your new username and password.",
-    "nocookieslogin": "{{SITENAME}} uses cookies to log in users.\nYou have cookies disabled.\nPlease enable them and try again.",
-    "nocookiesfornew": "The user account was not created, as we could not confirm its source.\nEnsure you have cookies enabled, reload this page and try again.",
-    "nocookiesforlogin": "{{int:nocookieslogin}}",
-    "noname": "You have not specified a valid username.",
-    "loginsuccesstitle": "Login successful",
-    "loginsuccess": "<strong>You are now logged in to {{SITENAME}} as \"$1\".</strong>",
-    "nosuchuser": "There is no user by the name \"$1\".\nUsernames are case sensitive.\nCheck your spelling, or [[Special:UserLogin/signup|create a new account]].",
-    "nosuchusershort": "There is no user by the name \"$1\".\nCheck your spelling.",
-    "nouserspecified": "You have to specify a username.",
-    "login-userblocked": "This user is blocked. Login not allowed.",
-    "wrongpassword": "Incorrect password entered.\nPlease try again.",
-    "wrongpasswordempty": "Password entered was blank.\nPlease try again.",
-    "passwordtooshort": "Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.",
-    "password-name-match": "Your password must be different from your username.",
-    "password-login-forbidden": "The use of this username and password has been forbidden.",
-    "mailmypassword": "Reset password",
-    "passwordremindertitle": "New temporary password for {{SITENAME}}",
-    "passwordremindertext": "Someone (probably you, from IP address $1) requested a new\npassword for {{SITENAME}} ($4). A temporary password for user\n\"$2\" has been created and was set to \"$3\". If this was your\nintent, you will need to log in and choose a new password now.\nYour temporary password will expire in {{PLURAL:$5|one day|$5 days}}.\n\nIf someone else made this request, or if you have remembered your password,\nand you no longer wish to change it, you may ignore this message and\ncontinue using your old password.",
-    "noemail": "There is no email address recorded for user \"$1\".",
-    "noemailcreate": "You need to provide a valid email address.",
-    "passwordsent": "A new password has been sent to the email address registered for \"$1\".\nPlease log in again after you receive it.",
-    "blocked-mailpassword": "Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.",
-    "eauthentsent": "A confirmation email has been sent to the specified email address.\nBefore any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.",
-    "throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.",
-    "loginstart": "",
-    "loginend": "",
-    "loginend-https": "",
-    "signupstart": "{{int:loginstart}}",
-    "signupend": "{{int:loginend}}",
-    "signupend-https": "",
-    "mailerror": "Error sending mail: $1",
-    "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
-    "emailauthenticated": "Your email address was confirmed on $2 at $3.",
-    "emailnotauthenticated": "Your email address is not yet confirmed.\nNo email will be sent for any of the following features.",
-    "noemailprefs": "Specify an email address in your preferences for these features to work.",
-    "emailconfirmlink": "Confirm your email address",
-    "invalidemailaddress": "The email address cannot be accepted as it appears to have an invalid format.\nPlease enter a well-formatted address or empty that field.",
-    "cannotchangeemail": "Account email addresses cannot be changed on this wiki.",
-    "emaildisabled": "This site cannot send emails.",
-    "emailsender": "{{SITENAME}}",
-    "accountcreated": "Account created",
-    "accountcreatedtext": "The user account for [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) has been created.",
-    "createaccount-title": "Account creation for {{SITENAME}}",
-    "createaccount-text": "Someone created an account for your email address on {{SITENAME}} ($4) named \"$2\", with password \"$3\".\nYou should log in and change your password now.\n\nYou may ignore this message, if this account was created in error.",
-    "login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
-    "login-abort-generic": "Your login was unsuccessful - Aborted",
-    "loginlanguagelabel": "Language: $1",
-    "loginlanguagelinks": "* {{#language:de}}|de\n* {{#language:en}}|en\n* {{#language:eo}}|eo\n* {{#language:fr}}|fr\n* {{#language:es}}|es\n* {{#language:it}}|it\n* {{#language:nl}}|nl",
-    "suspicious-userlogout": "Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.",
-    "createacct-another-realname-tip": "Real name is optional.\nIf you choose to provide it, this will be used for giving the user attribution for their work.",
-    "pt-login": "Log in",
-    "pt-login-button": "Log in",
-    "pt-createaccount": "Create account",
-    "pt-userlogout": "Log out",
-    "pear-mail-error": "$1",
-    "php-mail-error": "$1",
-    "php-mail-error-unknown": "Unknown error in PHP's mail() function.",
-    "user-mail-no-addy": "Tried to send email without an email address.",
-    "user-mail-no-body": "Tried to send email with an empty or unreasonably short body.",
-    "changepassword": "Change password",
-    "changepassword-summary": "",
-    "resetpass_announce": "To finish logging in, you must set a new password.",
-    "resetpass_text": "<!-- Add text here -->",
-    "resetpass_header": "Change account password",
-    "oldpassword": "Old password:",
-    "newpassword": "New password:",
-    "retypenew": "Retype new password:",
-    "resetpass_submit": "Set password and log in",
-    "changepassword-success": "Your password has been changed successfully!",
-    "changepassword-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
-    "resetpass_forbidden": "Passwords cannot be changed",
-    "resetpass-no-info": "You must be logged in to access this page directly.",
-    "resetpass-submit-loggedin": "Change password",
-    "resetpass-submit-cancel": "Cancel",
-    "resetpass-wrong-oldpass": "Invalid temporary or current password.\nYou may have already successfully changed your password or requested a new temporary password.",
-    "resetpass-recycled": "Please reset your password to something other than your current password.",
-    "resetpass-temp-emailed": "You logged in with a temporary emailed code.\nTo finish logging in, you must set a new password here:",
-    "resetpass-temp-password": "Temporary password:",
-    "resetpass-abort-generic": "Password change has been aborted by an extension.",
-    "resetpass-expired": "Your password has expired. Please set a new password to log in.",
-    "resetpass-expired-soft": "Your password has expired and needs to be reset. Please choose a new password now, or click \"{{int:resetpass-submit-cancel}}\" to reset it later.",
-    "resetpass-validity-soft": "Your password is not valid: $1\n\nPlease choose a new password now, or click \"{{int:resetpass-submit-cancel}}\" to reset it later.",
-    "passwordreset": "Reset password",
-    "passwordreset-text-one": "Complete this form to receive a temporary password via email.",
-    "passwordreset-text-many": "{{PLURAL:$1|Fill in one of the fields to receive a temporary password via email.}}",
-    "passwordreset-legend": "Reset password",
-    "passwordreset-disabled": "Password resets have been disabled on this wiki.",
-    "passwordreset-emaildisabled": "Email features have been disabled on this wiki.",
-    "passwordreset-username": "Username:",
-    "passwordreset-domain": "Domain:",
-    "passwordreset-capture": "View the resulting email?",
-    "passwordreset-capture-help": "If you check this box, the email (with the temporary password) will be shown to you as well as being sent to the user.",
-    "passwordreset-email": "Email address:",
-    "passwordreset-emailtitle": "Account details on {{SITENAME}}",
-    "passwordreset-emailtext-ip": "Someone (probably you, from IP address $1) requested a reset of your\npassword for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}\nassociated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
-    "passwordreset-emailtext-user": "User $1 on {{SITENAME}} requested a reset of your password for {{SITENAME}}\n($4). The following user {{PLURAL:$3|account is|accounts are}} associated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
-    "passwordreset-emailelement": "Username: $1\nTemporary password: $2",
-    "passwordreset-emailsent": "A password reset email has been sent.",
-    "passwordreset-emailsent-capture": "A password reset email has been sent, which is shown below.",
-    "passwordreset-emailerror-capture": "A password reset email was generated, which is shown below, but sending it to the {{GENDER:$2|user}} failed: $1",
-    "changeemail": "Change email address",
-    "changeemail-summary": "",
-    "changeemail-header": "Change account email address",
-    "changeemail-text": "Complete this form to change your email address. You will need to enter your password to confirm this change.",
-    "changeemail-no-info": "You must be logged in to access this page directly.",
-    "changeemail-oldemail": "Current email address:",
-    "changeemail-newemail": "New email address:",
-    "changeemail-none": "(none)",
-    "changeemail-password": "Your {{SITENAME}} password:",
-    "changeemail-submit": "Change email",
-    "changeemail-cancel": "Cancel",
-    "changeemail-throttled": "You have made too many login attempts.\nPlease wait $1 before trying again.",
-    "resettokens": "Reset tokens",
-    "resettokens-summary": "",
-    "resettokens-text": "You can reset tokens which allow access to certain private data associated with your account here.\n\nYou should do it if you accidentally shared them with someone or if your account has been compromised.",
-    "resettokens-no-tokens": "There are no tokens to reset.",
-    "resettokens-legend": "Reset tokens",
-    "resettokens-tokens": "Tokens:",
-    "resettokens-token-label": "$1 (current value: $2)",
-    "resettokens-watchlist-token": "Token for the web feed (Atom/RSS) of [[Special:Watchlist|changes to pages on your watchlist]]",
-    "resettokens-done": "Tokens reset.",
-    "resettokens-resetbutton": "Reset selected tokens",
-    "bold_sample": "Bold text",
-    "bold_tip": "Bold text",
-    "italic_sample": "Italic text",
-    "italic_tip": "Italic text",
-    "link_sample": "Link title",
-    "link_tip": "Internal link",
-    "extlink_sample": "http://www.example.com link title",
-    "extlink_tip": "External link (remember http:// prefix)",
-    "headline_sample": "Headline text",
-    "headline_tip": "Level 2 headline",
-    "nowiki_sample": "Insert non-formatted text here",
-    "nowiki_tip": "Ignore wiki formatting",
-    "image_sample": "Example.jpg",
-    "image_tip": "Embedded file",
-    "media_sample": "Example.ogg",
-    "media_tip": "File link",
-    "sig_tip": "Your signature with timestamp",
-    "hr_tip": "Horizontal line (use sparingly)",
-    "summary": "Summary:",
-    "subject": "Subject/headline:",
-    "minoredit": "This is a minor edit",
-    "watchthis": "Watch this page",
-    "savearticle": "Save page",
-    "preview": "Preview",
-    "showpreview": "Show preview",
-    "showdiff": "Show changes",
-    "anoneditwarning": "<strong>Warning:</strong> You are not logged in.\nYour IP address will be recorded in this page's edit history.",
-    "anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
-    "missingsummary": "<strong>Reminder:</strong> You have not provided an edit summary.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
-    "missingcommenttext": "Please enter a comment below.",
-    "missingcommentheader": "<strong>Reminder:</strong> You have not provided a subject/headline for this comment.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
-    "summary-preview": "Summary preview:",
-    "subject-preview": "Subject/headline preview:",
-    "blockedtitle": "User is blocked",
-    "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
-    "autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
-    "blockednoreason": "no reason given",
-    "whitelistedittext": "Please $1 to edit pages.",
-    "confirmedittext": "You must confirm your email address before editing pages.\nPlease set and validate your email address through your [[Special:Preferences|user preferences]].",
-    "nosuchsectiontitle": "Cannot find section",
-    "nosuchsectiontext": "You tried to edit a section that does not exist.\nIt may have been moved or deleted while you were viewing the page.",
-    "loginreqtitle": "Login required",
-    "loginreqlink": "log in",
-    "loginreqpagetext": "Please $1 to view other pages.",
-    "accmailtitle": "Password sent",
-    "accmailtext": "A randomly generated password for [[User talk:$1|$1]] has been sent to $2. It can be changed on the <em>[[Special:ChangePassword|change password]]</em> page upon logging in.",
-    "newarticle": "(New)",
-    "newarticletext": "You have followed a link to a page that does not exist yet.\nTo create the page, start typing in the box below (see the [$1 help page] for more info).\nIf you are here by mistake, click your browser's <strong>back</strong> button.",
-    "newarticletextanon": "{{int:newarticletext|$1}}",
-    "talkpagetext": "<!-- MediaWiki:talkpagetext -->",
-    "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify him/her.\nSuch an IP address can be shared by several users.\nIf you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
-    "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.",
-    "noarticletext-nopermission": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.",
-    "noarticletextanon": "{{int:noarticletext}}",
-    "missing-revision": "The revision #$1 of the page named \"{{FULLPAGENAME}}\" does not exist.\n\nThis is usually caused by following an outdated history link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-    "userpage-userdoesnotexist": "User account \"$1\" is not registered.\nPlease check if you want to create/edit this page.",
-    "userpage-userdoesnotexist-view": "User account \"$1\" is not registered.",
-    "blocked-notice-logextract": "This user is currently blocked.\nThe latest block log entry is provided below for reference:",
-    "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Clear the cache in <em>Tools → Preferences</em>",
-    "usercssyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new CSS before saving.",
-    "userjsyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new JavaScript before saving.",
-    "usercsspreview": "<strong>Remember that you are only previewing your user CSS.\nIt has not yet been saved!</strong>",
-    "userjspreview": "<strong>Remember that you are only testing/previewing your user JavaScript.\nIt has not yet been saved!</strong>",
-    "sitecsspreview": "<strong>Remember that you are only previewing this CSS.\nIt has not yet been saved!</strong>",
-    "sitejspreview": "<strong>Remember that you are only previewing this JavaScript code.\nIt has not yet been saved!</strong>",
-    "userinvalidcssjstitle": "<strong>Warning:</strong> There is no skin \"$1\".\nCustom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.css as opposed to {{ns:user}}:Foo/Vector.css.",
-    "updated": "(Updated)",
-    "note": "<strong>Note:</strong>",
-    "previewnote": "<strong>Remember that this is only a preview.</strong>\nYour changes have not yet been saved!",
-    "continue-editing": "Go to editing area",
-    "previewconflict": "This preview reflects the text in the upper text editing area as it will appear if you choose to save.",
-    "session_fail_preview": "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>\nPlease try again.\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
-    "session_fail_preview_html": "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>\n\n<em>Because {{SITENAME}} has raw HTML enabled, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate edit attempt, please try again.</strong>\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
-    "token_suffix_mismatch": "<strong>Your edit has been rejected because your client mangled the punctuation characters in the edit token.</strong>\nThe edit has been rejected to prevent corruption of the page text.\nThis sometimes happens when you are using a buggy web-based anonymous proxy service.",
-    "edit_form_incomplete": "<strong>Some parts of the edit form did not reach the server; double-check that your edits are intact and try again.</strong>",
-    "editing": "Editing $1",
-    "creating": "Creating $1",
-    "editingsection": "Editing $1 (section)",
-    "editingcomment": "Editing $1 (new section)",
-    "editconflict": "Edit conflict: $1",
-    "explainconflict": "Someone else has changed this page since you started editing it.\nThe upper text area contains the page text as it currently exists.\nYour changes are shown in the lower text area.\nYou will have to merge your changes into the existing text.\n<strong>Only</strong> the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
-    "yourtext": "Your text",
-    "storedversion": "Stored revision",
-    "nonunicodebrowser": "<strong>Warning: Your browser is not Unicode compliant.</strong>\nA workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.",
-    "editingold": "<strong>Warning: You are editing an out-of-date revision of this page.</strong>\nIf you save it, any changes made since this revision will be lost.",
-    "yourdiff": "Differences",
-    "copyrightwarning": "Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details).\nIf you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.<br />\nYou are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.\n<strong>Do not submit copyrighted work without permission!</strong>",
-    "copyrightwarning2": "Please note that all contributions to {{SITENAME}} may be edited, altered, or removed by other contributors.\nIf you do not want your writing to be edited mercilessly, then do not submit it here.<br />\nYou are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see $1 for details).\n<strong>Do not submit copyrighted work without permission!</strong>",
-    "editpage-head-copy-warn": "-",
-    "editpage-tos-summary": "-",
-    "longpage-hint": "-",
-    "longpageerror": "<strong>Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.</strong>\nIt cannot be saved.",
-    "readonlywarning": "<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>\nYou may wish to copy and paste your text into a text file and save it for later.\n\nThe administrator who locked it offered this explanation: $1",
-    "protectedpagewarning": "<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>\nThe latest log entry is provided below for reference:",
-    "semiprotectedpagewarning": "<strong>Note:</strong> This page has been protected so that only registered users can edit it.\nThe latest log entry is provided below for reference:",
-    "cascadeprotectedwarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
-    "titleprotectedwarning": "<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>\nThe latest log entry is provided below for reference:",
-    "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
-    "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} used in this preview:",
-    "templatesusedsection": "{{PLURAL:$1|Template|Templates}} used in this section:",
-    "template-protected": "(protected)",
-    "template-semiprotected": "(semi-protected)",
-    "hiddencategories": "This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:",
-    "edittools": "<!-- Text here will be shown below edit and upload forms. -->",
-    "edittools-upload": "-",
-    "nocreatetext": "{{SITENAME}} has restricted the ability to create new pages.\nYou can go back and edit an existing page, or [[Special:UserLogin|log in or create an account]].",
-    "nocreate-loggedin": "You do not have permission to create new pages.",
-    "sectioneditnotsupported-title": "Section editing not supported",
-    "sectioneditnotsupported-text": "Section editing is not supported in this page.",
-    "permissionserrors": "Permission error",
-    "permissionserrorstext": "You do not have permission to do that, for the following {{PLURAL:$1|reason|reasons}}:",
-    "permissionserrorstext-withaction": "You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:",
-    "recreate-moveddeleted-warn": "<strong>Warning: You are recreating a page that was previously deleted.</strong>\n\nYou should consider whether it is appropriate to continue editing this page.\nThe deletion and move log for this page are provided here for convenience:",
-    "moveddeleted-notice": "This page has been deleted.\nThe deletion and move log for the page are provided below for reference.",
-    "log-fulllog": "View full log",
-    "edit-hook-aborted": "Edit aborted by hook.\nIt gave no explanation.",
-    "edit-gone-missing": "Could not update the page.\nIt appears to have been deleted.",
-    "edit-conflict": "Edit conflict.",
-    "edit-no-change": "Your edit was ignored because no change was made to the text.",
-    "postedit-confirmation-created": "The page has been created.",
-    "postedit-confirmation-restored": "The page has been restored.",
-    "postedit-confirmation-saved": "Your edit was saved.",
-    "edit-already-exists": "Could not create a new page.\nIt already exists.",
-    "addsection-preload": "",
-    "addsection-editintro": "",
-    "defaultmessagetext": "Default message text",
-    "content-failed-to-parse": "Failed to parse $2 content for $1 model: $3",
-    "invalid-content-data": "Invalid content data",
-    "content-not-allowed-here": "\"$1\" content is not allowed on page [[$2]]",
-    "editwarning-warning": "Leaving this page may cause you to lose any changes you have made.\nIf you are logged in, you can disable this warning in the \"{{int:prefs-editing}}\" section of your preferences.",
-    "editpage-notsupportedcontentformat-title": "Content format not supported",
-    "editpage-notsupportedcontentformat-text": "The content format $1 is not supported by the content model $2.",
-    "content-model-wikitext": "wikitext",
-    "content-model-text": "plain text",
-    "content-model-javascript": "JavaScript",
-    "content-model-css": "CSS",
-    "expensive-parserfunction-warning": "<strong>Warning:</strong> This page contains too many expensive parser function calls.\n\nIt should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.",
-    "expensive-parserfunction-category": "Pages with too many expensive parser function calls",
-    "post-expand-template-inclusion-warning": "<strong>Warning:</strong> Template include size is too large.\nSome templates will not be included.",
-    "post-expand-template-inclusion-category": "Pages where template include size is exceeded",
-    "post-expand-template-argument-warning": "<strong>Warning:</strong> This page contains at least one template argument that has a too large expansion size.\nThese arguments have been omitted.",
-    "post-expand-template-argument-category": "Pages containing omitted template arguments",
-    "parser-template-loop-warning": "Template loop detected: [[$1]]",
-    "parser-template-recursion-depth-warning": "Template recursion depth limit exceeded ($1)",
-    "language-converter-depth-warning": "Language converter depth limit exceeded ($1)",
-    "node-count-exceeded-category": "Pages where node-count is exceeded",
-    "node-count-exceeded-warning": "Page exceeded the node-count",
-    "expansion-depth-exceeded-category": "Pages where expansion depth is exceeded",
-    "expansion-depth-exceeded-warning": "Page exceeded the expansion depth",
-    "parser-unstrip-loop-warning": "Unstrip loop detected",
-    "parser-unstrip-recursion-limit": "Unstrip recursion limit exceeded ($1)",
-    "converter-manual-rule-error": "Error detected in manual language conversion rule",
-    "undo-success": "The edit can be undone.\nPlease check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.",
-    "undo-failure": "The edit could not be undone due to conflicting intermediate edits.",
-    "undo-norev": "The edit could not be undone because it does not exist or was deleted.",
-    "undo-nochange": "The edit appears to have already been undone.",
-    "undo-summary": "Undo revision $1 by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])",
-    "undo-summary-username-hidden": "Undo revision $1 by a hidden user",
-    "cantcreateaccounttitle": "Cannot create account",
-    "cantcreateaccount-text": "Account creation from this IP address (<strong>$1</strong>) has been blocked by [[User:$3|$3]].\n\nThe reason given by $3 is <em>$2</em>",
-    "cantcreateaccount-range-text": "Account creation from IP addresses in the range '''$1''', which includes your IP address ('''$4'''), has been blocked by [[User:$3|$3]].\n\nThe reason given by $3 is ''$2''",
-    "createaccount-hook-aborted": "$1",
-    "viewpagelogs": "View logs for this page",
-    "nohistory": "There is no edit history for this page.",
-    "currentrev": "Latest revision",
-    "currentrev-asof": "Latest revision as of $1",
-    "revisionasof": "Revision as of $1",
-    "revision-info": "Revision as of $1 by $2",
-    "revision-info-current": "-",
-    "revision-nav": "($1) $2{{int:pipe-separator}}$3 ($4){{int:pipe-separator}}$5 ($6)",
-    "previousrevision": "← Older revision",
-    "nextrevision": "Newer revision →",
-    "currentrevisionlink": "Latest revision",
-    "cur": "cur",
-    "next": "next",
-    "last": "prev",
-    "page_first": "first",
-    "page_last": "last",
-    "histlegend": "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />\nLegend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = minor edit.",
-    "history-fieldset-title": "Browse history",
-    "history-show-deleted": "Deleted only",
-    "history_copyright": "-",
-    "histfirst": "oldest",
-    "histlast": "newest",
-    "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
-    "historyempty": "(empty)",
-    "history-feed-title": "Revision history",
-    "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.",
-    "rev-deleted-comment": "(edit summary removed)",
-    "rev-deleted-user": "(username removed)",
-    "rev-deleted-event": "(log action removed)",
-    "rev-deleted-user-contribs": "[username or IP address removed - edit hidden from contributions]",
-    "rev-deleted-text-permission": "This page revision has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-    "rev-deleted-text-unhide": "This page revision has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nYou can still [$1 view this revision] if you wish to proceed.",
-    "rev-suppressed-text-unhide": "This page revision has been <strong>suppressed</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nYou can still [$1 view this revision] if you wish to proceed.",
-    "rev-deleted-text-view": "This page revision has been <strong>deleted</strong>.\nYou can view it; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-    "rev-suppressed-text-view": "This page revision has been <strong>suppressed</strong>.\nYou can view it; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
-    "rev-deleted-no-diff": "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-    "rev-suppressed-no-diff": "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.",
-    "rev-deleted-unhide-diff": "One of the revisions of this diff has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nYou can still [$1 view this diff] if you wish to proceed.",
-    "rev-suppressed-unhide-diff": "One of the revisions of this diff has been <strong>suppressed</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nYou can still [$1 view this diff] if you wish to proceed.",
-    "rev-deleted-diff-view": "One of the revisions of this diff has been <strong>deleted</strong>.\nYou can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-    "rev-suppressed-diff-view": "One of the revisions of this diff has been <strong>suppressed</strong>.\nYou can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
-    "rev-delundel": "change visibility",
-    "rev-showdeleted": "show",
-    "revisiondelete": "Delete/undelete revisions",
-    "revdelete-nooldid-title": "Invalid target revision",
-    "revdelete-nooldid-text": "You have either not specified a target revision(s) to perform this\nfunction, the specified revision does not exist, or you are attempting to hide the current revision.",
-    "revdelete-no-file": "The file specified does not exist.",
-    "revdelete-show-file-confirm": "Are you sure you want to view a deleted revision of the file \"<nowiki>$1</nowiki>\" from $2 at $3?",
-    "revdelete-show-file-submit": "Yes",
-    "revdelete-selected-text": "{{PLURAL:$1|Selected revision|Selected revisions}} of [[:$2]]:",
-    "revdelete-selected-file": "{{PLURAL:$1|Selected file version|Selected file versions}} of [[:$2]]:",
-    "logdelete-selected": "{{PLURAL:$1|Selected log event|Selected log events}}:",
-    "revdelete-text-text": "Deleted revisions will still appear in the page history, but parts of their content will be inaccessible to the public.",
-    "revdelete-text-file": "Deleted file versions will still appear in the file history, but parts of their content will be inaccessible to the public.",
-    "logdelete-text": "Deleted log events will still appear in the logs, but parts of their content will be inaccessible to the public.",
-    "revdelete-text-others": "Other administrators on {{SITENAME}} will still be able to access the hidden content and can undelete it again through this same interface, unless additional restrictions are set.",
-    "revdelete-confirm": "Please confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].",
-    "revdelete-suppress-text": "Suppression should <strong>only</strong> be used for the following cases:\n* potentially libelous information\n* inappropriate personal information\n*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>",
-    "revdelete-legend": "Set visibility restrictions",
-    "revdelete-hide-text": "Revision text",
-    "revdelete-hide-image": "Hide file content",
-    "revdelete-hide-name": "Hide action and target",
-    "revdelete-hide-comment": "Edit summary",
-    "revdelete-hide-user": "Editor's username/IP address",
-    "revdelete-hide-restricted": "Suppress data from administrators as well as others",
-    "revdelete-radio-same": "(do not change)",
-    "revdelete-radio-set": "Hidden",
-    "revdelete-radio-unset": "Visible",
-    "revdelete-suppress": "Suppress data from administrators as well as others",
-    "revdelete-unsuppress": "Remove restrictions on restored revisions",
-    "revdelete-log": "Reason:",
-    "revdelete-submit": "Apply to selected {{PLURAL:$1|revision|revisions}}",
-    "revdelete-success": "<strong>Revision visibility successfully updated.</strong>",
-    "revdelete-failure": "<strong>Revision visibility could not be updated:</strong>\n$1",
-    "logdelete-success": "<strong>Log visibility successfully set.</strong>",
-    "logdelete-failure": "<strong>Log visibility could not be set:</strong>\n$1",
-    "revdel-restore": "change visibility",
-    "pagehist": "Page history",
-    "deletedhist": "Deleted history",
-    "revdelete-hide-current": "Error hiding the item dated $2, $1: This is the current revision.\nIt cannot be hidden.",
-    "revdelete-show-no-access": "Error showing the item dated $2, $1: This item has been marked \"restricted\".\nYou do not have access to it.",
-    "revdelete-modify-no-access": "Error modifying the item dated $2, $1: This item has been marked \"restricted\".\nYou do not have access to it.",
-    "revdelete-modify-missing": "Error modifying item ID $1: It is missing from the database!",
-    "revdelete-no-change": "<strong>Warning:</strong> The item dated $2, $1 already had the requested visibility settings.",
-    "revdelete-concurrent-change": "Error modifying the item dated $2, $1: Its status appears to have been changed by someone else while you attempted to modify it.\nPlease check the logs.",
-    "revdelete-only-restricted": "Error hiding the item dated $2, $1: You cannot suppress items from view by administrators without also selecting one of the other visibility options.",
-    "revdelete-reason-dropdown": "*Common delete reasons\n** Copyright violation\n** Inappropriate comment or personal information\n** Inappropriate username\n** Potentially libelous information",
-    "revdelete-otherreason": "Other/additional reason:",
-    "revdelete-reasonotherlist": "Other reason",
-    "revdelete-edit-reasonlist": "Edit delete reasons",
-    "revdelete-offender": "Revision author:",
-    "suppressionlog": "Suppression log",
-    "suppressionlogtext": "Below is a list of deletions and blocks involving content hidden from administrators.\nSee the [[Special:BlockList|block list]] for the list of currently operational bans and blocks.",
-    "mergehistory": "Merge page histories",
-    "mergehistory-header": "This page lets you merge revisions of the history of one source page into a newer page.\nMake sure that this change will maintain historical page continuity.",
-    "mergehistory-box": "Merge revisions of two pages:",
-    "mergehistory-from": "Source page:",
-    "mergehistory-into": "Destination page:",
-    "mergehistory-list": "Mergeable edit history",
-    "mergehistory-merge": "The following revisions of [[:$1]] can be merged into [[:$2]].\nUse the radio button column to merge in only the revisions created at and before the specified time.\nNote that using the navigation links will reset this column.",
-    "mergehistory-go": "Show mergeable edits",
-    "mergehistory-submit": "Merge revisions",
-    "mergehistory-empty": "No revisions can be merged.",
-    "mergehistory-success": "$3 {{PLURAL:$3|revision|revisions}} of [[:$1]] successfully merged into [[:$2]].",
-    "mergehistory-fail": "Unable to perform history merge, please recheck the page and time parameters.",
-    "mergehistory-no-source": "Source page $1 does not exist.",
-    "mergehistory-no-destination": "Destination page $1 does not exist.",
-    "mergehistory-invalid-source": "Source page must be a valid title.",
-    "mergehistory-invalid-destination": "Destination page must be a valid title.",
-    "mergehistory-autocomment": "Merged [[:$1]] into [[:$2]]",
-    "mergehistory-comment": "Merged [[:$1]] into [[:$2]]: $3",
-    "mergehistory-same-destination": "Source and destination pages cannot be the same",
-    "mergehistory-reason": "Reason:",
-    "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
-    "mergelog": "Merge log",
-    "pagemerge-logentry": "merged [[$1]] into [[$2]] (revisions up to $3)",
-    "revertmerge": "Unmerge",
-    "mergelogpagetext": "Below is a list of the most recent merges of one page history into another.",
-    "history-title": "Revision history of \"$1\"",
-    "difference-title": "Difference between revisions of \"$1\"",
-    "difference-title-multipage": "Difference between pages \"$1\" and \"$2\"",
-    "difference-multipage": "(Difference between pages)",
-    "lineno": "Line $1:",
-    "compareselectedversions": "Compare selected revisions",
-    "showhideselectedversions": "Change visibility of selected revisions",
-    "editundo": "undo",
-    "diff-empty": "(No difference)",
-    "diff-multi-sameuser": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)",
-    "diff-multi-otherusers": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one other user|$2 users}} not shown)",
-    "diff-multi-manyusers": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)",
-    "difference-missing-revision": "{{PLURAL:$2|One revision|$2 revisions}} of this difference ($1) {{PLURAL:$2|was|were}} not found.\n\nThis is usually caused by following an outdated diff link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-    "search-summary": "",
-    "searchresults": "Search results",
-    "searchresults-title": "Search results for \"$1\"",
-    "toomanymatches": "Too many matches were returned, please try a different query",
-    "titlematches": "Page title matches",
-    "textmatches": "Page text matches",
-    "notextmatches": "No page text matches",
-    "prevn": "previous {{PLURAL:$1|$1}}",
-    "nextn": "next {{PLURAL:$1|$1}}",
-    "prevn-title": "Previous $1 {{PLURAL:$1|result|results}}",
-    "nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
-    "shown-title": "Show $1 {{PLURAL:$1|result|results}} per page",
-    "viewprevnext": "View ($1 {{int:pipe-separator}} $2) ($3)",
-    "searchmenu-exists": "<strong>There is a page named \"[[:$1]]\" on this wiki.</strong> {{PLURAL:$2|0=|See also the other search results found.}}",
-    "searchmenu-new": "<strong>Create the page \"[[:$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
-    "searchmenu-new-nocreate": "",
-    "searchprofile-articles": "Content pages",
-    "searchprofile-project": "Help and Project pages",
-    "searchprofile-images": "Multimedia",
-    "searchprofile-everything": "Everything",
-    "searchprofile-advanced": "Advanced",
-    "searchprofile-articles-tooltip": "Search in $1",
-    "searchprofile-project-tooltip": "Search in $1",
-    "searchprofile-images-tooltip": "Search for files",
-    "searchprofile-everything-tooltip": "Search all of content (including talk pages)",
-    "searchprofile-advanced-tooltip": "Search in custom namespaces",
-    "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
-    "search-result-category-size": "{{PLURAL:$1|1 member|$1 members}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})",
-    "search-result-score": "Relevance: $1%",
-    "search-redirect": "(redirect $1)",
-    "search-section": "(section $1)",
-    "search-file-match": "(matches file content)",
-    "search-suggest": "Did you mean: $1",
-    "search-interwiki-caption": "Sister projects",
-    "search-interwiki-default": "Results from $1:",
-    "search-interwiki-custom": "",
-    "search-interwiki-more": "(more)",
-    "search-relatedarticle": "Related",
-    "searcheverything-enable": "Search in all namespaces",
-    "searchrelated": "related",
-    "searchall": "all",
-    "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
-    "showingresultsinrange": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</strong>.",
-    "showingresultsnum": "Showing below {{PLURAL:$3|<strong>1</strong> result|<strong>$3</strong> results}} starting with #<strong>$2</strong>.",
-    "showingresultsheader": "{{PLURAL:$5|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}} for <strong>$4</strong>",
-    "search-nonefound": "There were no results matching the query.",
-    "powersearch-legend": "Advanced search",
-    "powersearch-ns": "Search in namespaces:",
-    "powersearch-togglelabel": "Check:",
-    "powersearch-toggleall": "All",
-    "powersearch-togglenone": "None",
-    "search-external": "External search",
-    "searchdisabled": "{{SITENAME}} search is disabled.\nYou can search via Google in the meantime.\nNote that their indexes of {{SITENAME}} content may be out of date.",
-    "googlesearch": "<form method=\"get\" action=\"//www.google.com/search\" id=\"googlesearch\">\n\t<input type=\"hidden\" name=\"domains\" value=\"{{SERVER}}\" />\n\t<input type=\"hidden\" name=\"num\" value=\"50\" />\n\t<input type=\"hidden\" name=\"ie\" value=\"$2\" />\n\t<input type=\"hidden\" name=\"oe\" value=\"$2\" />\n\n\t<input type=\"text\" name=\"q\" size=\"31\" maxlength=\"255\" value=\"$1\" />\n\t<input type=\"submit\" name=\"btnG\" value=\"$3\" />\n  <div>\n\t<input type=\"radio\" name=\"sitesearch\" id=\"gwiki\" value=\"{{SERVER}}\" checked=\"checked\" /><label for=\"gwiki\">{{SITENAME}}</label>\n\t<input type=\"radio\" name=\"sitesearch\" id=\"gWWW\" value=\"\" /><label for=\"gWWW\">WWW</label>\n  </div>\n</form>",
-    "search-error": "An error has occurred while searching: $1",
-    "opensearch-desc": "{{SITENAME}} ({{CONTENTLANGUAGE}})",
-    "preferences": "Preferences",
-    "preferences-summary": "",
-    "mypreferences": "Preferences",
-    "prefs-edits": "Number of edits:",
-    "prefsnologintext2": "Please $1 to change your preferences.",
-    "prefs-skin": "Skin",
-    "skin-preview": "Preview",
-    "datedefault": "No preference",
-    "prefs-labs": "Labs features",
-    "prefs-user-pages": "User pages",
-    "prefs-personal": "User profile",
-    "prefs-rc": "Recent changes",
-    "prefs-watchlist": "Watchlist",
-    "prefs-watchlist-days": "Days to show in watchlist:",
-    "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
-    "prefs-watchlist-edits": "Maximum number of changes to show in expanded watchlist:",
-    "prefs-watchlist-edits-max": "Maximum number: 1000",
-    "prefs-watchlist-token": "Watchlist token:",
-    "prefs-misc": "Misc",
-    "prefs-resetpass": "Change password",
-    "prefs-changeemail": "Change email address",
-    "prefs-setemail": "Set an email address",
-    "prefs-email": "Email options",
-    "prefs-rendering": "Appearance",
-    "saveprefs": "Save",
-    "restoreprefs": "Restore all default settings (in all sections)",
-    "prefs-editing": "Editing",
-    "rows": "Rows:",
-    "columns": "Columns:",
-    "searchresultshead": "Search",
-    "stub-threshold": "Threshold for <a href=\"#\" class=\"stub\">stub link</a> formatting (bytes):",
-    "stub-threshold-disabled": "Disabled",
-    "recentchangesdays": "Days to show in recent changes:",
-    "recentchangesdays-max": "Maximum $1 {{PLURAL:$1|day|days}}",
-    "recentchangescount": "Number of edits to show by default:",
-    "prefs-help-recentchangescount": "This includes recent changes, page histories, and logs.",
-    "prefs-help-watchlist-token2": "This is the secret key to the web feed of your watchlist.\nAnyone who knows it will be able to read your watchlist, so do not share it.\nIf you need to, [[Special:ResetTokens|you can reset it]].",
-    "savedprefs": "Your preferences have been saved.",
-    "timezonelegend": "Time zone:",
-    "localtime": "Local time:",
-    "timezoneuseserverdefault": "Use wiki default ($1)",
-    "timezoneuseoffset": "Other (specify offset)",
-    "servertime": "Server time:",
-    "guesstimezone": "Fill in from browser",
-    "timezoneregion-africa": "Africa",
-    "timezoneregion-america": "America",
-    "timezoneregion-antarctica": "Antarctica",
-    "timezoneregion-arctic": "Arctic",
-    "timezoneregion-asia": "Asia",
-    "timezoneregion-atlantic": "Atlantic Ocean",
-    "timezoneregion-australia": "Australia",
-    "timezoneregion-europe": "Europe",
-    "timezoneregion-indian": "Indian Ocean",
-    "timezoneregion-pacific": "Pacific Ocean",
-    "allowemail": "Enable email from other users",
-    "prefs-searchoptions": "Search",
-    "prefs-namespaces": "Namespaces",
-    "defaultns": "Otherwise search in these namespaces:",
-    "default": "default",
-    "prefs-files": "Files",
-    "prefs-custom-css": "Custom CSS",
-    "prefs-custom-js": "Custom JavaScript",
-    "prefs-common-css-js": "Shared CSS/JavaScript for all skins:",
-    "prefs-reset-intro": "You can use this page to reset your preferences to the site defaults.\nThis cannot be undone.",
-    "prefs-emailconfirm-label": "Email confirmation:",
-    "youremail": "Email:",
-    "username": "{{GENDER:$1|Username}}:",
-    "uid": "{{GENDER:$1|User}} ID:",
-    "prefs-memberingroups": "{{GENDER:$2|Member}} of {{PLURAL:$1|group|groups}}:",
-    "prefs-memberingroups-type": "$1",
-    "prefs-registration": "Registration time:",
-    "prefs-registration-date-time": "$1",
-    "yourrealname": "Real name:",
-    "yourlanguage": "Language:",
-    "yourvariant": "Content language variant:",
-    "prefs-help-variant": "Your preferred variant or orthography to display the content pages of this wiki in.",
-    "yournick": "New signature:",
-    "prefs-help-signature": "Comments on talk pages should be signed with \"<nowiki>~~~~</nowiki>\", which will be converted into your signature and a timestamp.",
-    "badsig": "Invalid raw signature.\nCheck HTML tags.",
-    "badsiglength": "Your signature is too long.\nIt must not be more than $1 {{PLURAL:$1|character|characters}} long.",
-    "yourgender": "How do you prefer to be described?",
-    "gender-unknown": "I prefer not to say",
-    "gender-male": "He edits wiki pages",
-    "gender-female": "She edits wiki pages",
-    "prefs-help-gender": "Setting this preference is optional.\nThe software uses its value to address you and to mention you to others using the appropriate grammatical gender.\nThis information will be public.",
-    "email": "Email",
-    "prefs-help-realname": "Real name is optional.\nIf you choose to provide it, this will be used for giving you attribution for your work.",
-    "prefs-help-email": "Email address is optional, but is needed for password resets, should you forget your password.",
-    "prefs-help-email-others": "You can also choose to let others contact you by email through a link on your user or talk page.\nYour email address is not revealed when other users contact you.",
-    "prefs-help-email-required": "Email address is required.",
-    "prefs-info": "Basic information",
-    "prefs-i18n": "Internationalisation",
-    "prefs-signature": "Signature",
-    "prefs-dateformat": "Date format",
-    "prefs-timeoffset": "Time offset",
-    "prefs-advancedediting": "General options",
-    "prefs-editor": "Editor",
-    "prefs-preview": "Preview",
-    "prefs-advancedrc": "Advanced options",
-    "prefs-advancedrendering": "Advanced options",
-    "prefs-advancedsearchoptions": "Advanced options",
-    "prefs-advancedwatchlist": "Advanced options",
-    "prefs-displayrc": "Display options",
-    "prefs-displaywatchlist": "Display options",
-    "prefs-tokenwatchlist": "Token",
-    "prefs-diffs": "Diffs",
-    "prefs-help-prefershttps": "This preference will take effect on your next login.",
-    "prefs-tabs-navigation-hint": "Tip: You can use the left and right arrow keys to navigate between the tabs in the tabs list.",
-    "email-address-validity-valid": "Email address appears valid",
-    "email-address-validity-invalid": "Enter a valid email address",
-    "userrights": "User rights management",
-    "userrights-summary": "",
-    "userrights-lookup-user": "Manage user groups",
-    "userrights-user-editname": "Enter a username:",
-    "editusergroup": "Edit user groups",
-    "editinguser": "Changing user rights of user <strong>[[User:$1|$1]]</strong> $2",
-    "userrights-editusergroup": "Edit user groups",
-    "saveusergroups": "Save user groups",
-    "userrights-groupsmember": "Member of:",
-    "userrights-groupsmember-auto": "Implicit member of:",
-    "userrights-groupsmember-type": "$1",
-    "userrights-groups-help": "You may alter the groups this user is in:\n* A checked box means the user is in that group.\n* An unchecked box means the user is not in that group.\n* A * indicates that you cannot remove the group once you have added it, or vice versa.",
-    "userrights-reason": "Reason:",
-    "userrights-no-interwiki": "You do not have permission to edit user rights on other wikis.",
-    "userrights-nodatabase": "Database $1 does not exist or is not local.",
-    "userrights-nologin": "You must [[Special:UserLogin|log in]] with an administrator account to assign user rights.",
-    "userrights-notallowed": "You do not have permission to add or remove user rights.",
-    "userrights-changeable-col": "Groups you can change",
-    "userrights-unchangeable-col": "Groups you cannot change",
-    "userrights-irreversible-marker": "$1*",
-    "userrights-conflict": "Conflict of user rights changes! Please review and confirm your changes.",
-    "userrights-removed-self": "You successfully removed your own rights. As such, you are no longer able to access this page.",
-    "group": "Group:",
-    "group-user": "Users",
-    "group-autoconfirmed": "Autoconfirmed users",
-    "group-bot": "Bots",
-    "group-sysop": "Administrators",
-    "group-bureaucrat": "Bureaucrats",
-    "group-suppress": "Oversights",
-    "group-all": "(all)",
-    "group-user-member": "{{GENDER:$1|user}}",
-    "group-autoconfirmed-member": "{{GENDER:$1|autoconfirmed user}}",
-    "group-bot-member": "{{GENDER:$1|bot}}",
-    "group-sysop-member": "{{GENDER:$1|administrator}}",
-    "group-bureaucrat-member": "{{GENDER:$1|bureaucrat}}",
-    "group-suppress-member": "{{GENDER:$1|oversight}}",
-    "grouppage-user": "{{ns:project}}:Users",
-    "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmed users",
-    "grouppage-bot": "{{ns:project}}:Bots",
-    "grouppage-sysop": "{{ns:project}}:Administrators",
-    "grouppage-bureaucrat": "{{ns:project}}:Bureaucrats",
-    "grouppage-suppress": "{{ns:project}}:Oversight",
-    "right-read": "Read pages",
-    "right-edit": "Edit pages",
-    "right-createpage": "Create pages (which are not discussion pages)",
-    "right-createtalk": "Create discussion pages",
-    "right-createaccount": "Create new user accounts",
-    "right-minoredit": "Mark edits as minor",
-    "right-move": "Move pages",
-    "right-move-subpages": "Move pages with their subpages",
-    "right-move-rootuserpages": "Move root user pages",
-    "right-movefile": "Move files",
-    "right-suppressredirect": "Not create redirects from source pages when moving pages",
-    "right-upload": "Upload files",
-    "right-reupload": "Overwrite existing files",
-    "right-reupload-own": "Overwrite existing files uploaded by oneself",
-    "right-reupload-shared": "Override files on the shared media repository locally",
-    "right-upload_by_url": "Upload files from a URL",
-    "right-purge": "Purge the site cache for a page without confirmation",
-    "right-autoconfirmed": "Not be affected by IP-based rate limits",
-    "right-bot": "Be treated as an automated process",
-    "right-nominornewtalk": "Not have minor edits to discussion pages trigger the new messages prompt",
-    "right-apihighlimits": "Use higher limits in API queries",
-    "right-writeapi": "Use of the write API",
-    "right-delete": "Delete pages",
-    "right-bigdelete": "Delete pages with large histories",
-    "right-deletelogentry": "Delete and undelete specific log entries",
-    "right-deleterevision": "Delete and undelete specific revisions of pages",
-    "right-deletedhistory": "View deleted history entries, without their associated text",
-    "right-deletedtext": "View deleted text and changes between deleted revisions",
-    "right-browsearchive": "Search deleted pages",
-    "right-undelete": "Undelete a page",
-    "right-suppressrevision": "Review and restore revisions hidden from administrators",
-    "right-suppressionlog": "View private logs",
-    "right-block": "Block other users from editing",
-    "right-blockemail": "Block a user from sending email",
-    "right-hideuser": "Block a username, hiding it from the public",
-    "right-ipblock-exempt": "Bypass IP blocks, auto-blocks and range blocks",
-    "right-proxyunbannable": "Bypass automatic blocks of proxies",
-    "right-unblockself": "Unblock oneself",
-    "right-protect": "Change protection levels and edit cascade-protected pages",
-    "right-editprotected": "Edit pages protected as \"{{int:protect-level-sysop}}\"",
-    "right-editsemiprotected": "Edit pages protected as \"{{int:protect-level-autoconfirmed}}\"",
-    "right-editinterface": "Edit the user interface",
-    "right-editusercssjs": "Edit other users' CSS and JavaScript files",
-    "right-editusercss": "Edit other users' CSS files",
-    "right-edituserjs": "Edit other users' JavaScript files",
-    "right-editmyusercss": "Edit your own user CSS files",
-    "right-editmyuserjs": "Edit your own user JavaScript files",
-    "right-viewmywatchlist": "View your own watchlist",
-    "right-editmywatchlist": "Edit your own watchlist. Note some actions will still add pages even without this right.",
-    "right-viewmyprivateinfo": "View your own private data (e.g. email address, real name)",
-    "right-editmyprivateinfo": "Edit your own private data (e.g. email address, real name)",
-    "right-editmyoptions": "Edit your own preferences",
-    "right-rollback": "Quickly rollback the edits of the last user who edited a particular page",
-    "right-markbotedits": "Mark rolled-back edits as bot edits",
-    "right-noratelimit": "Not be affected by rate limits",
-    "right-import": "Import pages from other wikis",
-    "right-importupload": "Import pages from a file upload",
-    "right-patrol": "Mark others' edits as patrolled",
-    "right-autopatrol": "Have one's own edits automatically marked as patrolled",
-    "right-patrolmarks": "View recent changes patrol marks",
-    "right-unwatchedpages": "View a list of unwatched pages",
-    "right-mergehistory": "Merge the history of pages",
-    "right-userrights": "Edit all user rights",
-    "right-userrights-interwiki": "Edit user rights of users on other wikis",
-    "right-siteadmin": "Lock and unlock the database",
-    "right-override-export-depth": "Export pages including linked pages up to a depth of 5",
-    "right-sendemail": "Send email to other users",
-    "right-passwordreset": "View password reset emails",
-    "newuserlogpage": "User creation log",
-    "newuserlogpagetext": "This is a log of user creations.",
-    "rightslog": "User rights log",
-    "rightslogtext": "This is a log of changes to user rights.",
-    "action-read": "read this page",
-    "action-edit": "edit this page",
-    "action-createpage": "create pages",
-    "action-createtalk": "create discussion pages",
-    "action-createaccount": "create this user account",
-    "action-history": "view the history of this page",
-    "action-minoredit": "mark this edit as minor",
-    "action-move": "move this page",
-    "action-move-subpages": "move this page, and its subpages",
-    "action-move-rootuserpages": "move root user pages",
-    "action-movefile": "move this file",
-    "action-upload": "upload this file",
-    "action-reupload": "overwrite this existing file",
-    "action-reupload-shared": "override this file on a shared repository",
-    "action-upload_by_url": "upload this file from a URL",
-    "action-writeapi": "use the write API",
-    "action-delete": "delete this page",
-    "action-deleterevision": "delete this revision",
-    "action-deletedhistory": "view this page's deleted history",
-    "action-browsearchive": "search deleted pages",
-    "action-undelete": "undelete this page",
-    "action-suppressrevision": "review and restore this hidden revision",
-    "action-suppressionlog": "view this private log",
-    "action-block": "block this user from editing",
-    "action-protect": "change protection levels for this page",
-    "action-rollback": "quickly rollback the edits of the last user who edited a particular page",
-    "action-import": "import pages from another wiki",
-    "action-importupload": "import pages from a file upload",
-    "action-patrol": "mark others' edits as patrolled",
-    "action-autopatrol": "have your edit marked as patrolled",
-    "action-unwatchedpages": "view the list of unwatched pages",
-    "action-mergehistory": "merge the history of this page",
-    "action-userrights": "edit all user rights",
-    "action-userrights-interwiki": "edit user rights of users on other wikis",
-    "action-siteadmin": "lock or unlock the database",
-    "action-sendemail": "send emails",
-    "action-editmywatchlist": "edit your watchlist",
-    "action-viewmywatchlist": "view your watchlist",
-    "action-viewmyprivateinfo": "view your private information",
-    "action-editmyprivateinfo": "edit your private information",
-    "nchanges": "$1 {{PLURAL:$1|change|changes}}",
-    "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|since last visit}}",
-    "enhancedrc-history": "history",
-    "recentchanges": "Recent changes",
-    "recentchanges-url": "Special:RecentChanges",
-    "recentchanges-legend": "Recent changes options",
-    "recentchanges-summary": "Track the most recent changes to the wiki on this page.",
-    "recentchangestext": "-",
-    "recentchanges-noresult": "No changes during the given period matching these criteria.",
-    "recentchanges-feed-description": "Track the most recent changes to the wiki in this feed.",
-    "recentchanges-label-newpage": "This edit created a new page",
-    "recentchanges-label-minor": "This is a minor edit",
-    "recentchanges-label-bot": "This edit was performed by a bot",
-    "recentchanges-label-unpatrolled": "This edit has not yet been patrolled",
-    "recentchanges-label-plusminus": "The page size changed by this number of bytes",
-    "recentchanges-legend-heading": "'''Legend:'''",
-    "recentchanges-legend-newpage": "(also see [[Special:NewPages|list of new pages]])",
-    "recentchanges-legend-plusminus": "(<em>±123</em>)",
-    "rcnotefrom": "Below are the changes since <strong>$2</strong> (up to <strong>$1</strong> shown).",
-    "rclistfrom": "Show new changes starting from $2, $3",
-    "rcshowhideminor": "$1 minor edits",
-    "rcshowhideminor-show": "Show",
-    "rcshowhideminor-hide": "Hide",
-    "rcshowhidebots": "$1 bots",
-    "rcshowhidebots-show": "Show",
-    "rcshowhidebots-hide": "Hide",
-    "rcshowhideliu": "$1 registered users",
-    "rcshowhideliu-show": "Show",
-    "rcshowhideliu-hide": "Hide",
-    "rcshowhideanons": "$1 anonymous users",
-    "rcshowhideanons-show": "Show",
-    "rcshowhideanons-hide": "Hide",
-    "rcshowhidepatr": "$1 patrolled edits",
-    "rcshowhidepatr-show": "Show",
-    "rcshowhidepatr-hide": "Hide",
-    "rcshowhidemine": "$1 my edits",
-    "rcshowhidemine-show": "Show",
-    "rcshowhidemine-hide": "Hide",
-    "rclinks": "Show last $1 changes in last $2 days<br />$3",
-    "diff": "diff",
-    "hist": "hist",
-    "hide": "Hide",
-    "show": "Show",
-    "minoreditletter": "m",
-    "newpageletter": "N",
-    "boteditletter": "b",
-    "unpatrolledletter": "!",
-    "number_of_watching_users_RCview": "[$1]",
-    "number_of_watching_users_pageview": "[$1 watching {{PLURAL:$1|user|users}}]",
-    "rc_categories": "Limit to categories (separate with \"|\")",
-    "rc_categories_any": "Any",
-    "rc-change-size": "$1",
-    "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} after change",
-    "newsectionsummary": "/* $1 */ new section",
-    "rc-enhanced-expand": "Show details",
-    "rc-enhanced-hide": "Hide details",
-    "rc-old-title": "originally created as \"$1\"",
-    "recentchangeslinked": "Related changes",
-    "recentchangeslinked-feed": "Related changes",
-    "recentchangeslinked-toolbox": "Related changes",
-    "recentchangeslinked-title": "Changes related to \"$1\"",
-    "recentchangeslinked-summary": "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).\nPages on [[Special:Watchlist|your watchlist]] are <strong>bold</strong>.",
-    "recentchangeslinked-page": "Page name:",
-    "recentchangeslinked-to": "Show changes to pages linked to the given page instead",
-    "upload": "Upload file",
-    "uploadbtn": "Upload file",
-    "reuploaddesc": "Cancel upload and return to the upload form",
-    "upload-tryagain": "Submit modified file description",
-    "uploadnologin": "Not logged in",
-    "uploadnologintext": "Please $1 to upload files.",
-    "upload_directory_missing": "The upload directory ($1) is missing and could not be created by the webserver.",
-    "upload_directory_read_only": "The upload directory ($1) is not writable by the webserver.",
-    "uploaderror": "Upload error",
-    "upload-summary": "",
-    "upload-recreate-warning": "<strong>Warning: A file by that name has been deleted or moved.</strong>\n\nThe deletion and move log for this page are provided here for convenience:",
-    "uploadtext": "Use the form below to upload files.\nTo view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].\n\nTo include a file in a page, use a link in one of the following forms:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> to use the full version of the file\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> for directly linking to the file without displaying the file",
-    "upload-permitted": "Permitted file types: $1.",
-    "upload-preferred": "Preferred file types: $1.",
-    "upload-prohibited": "Prohibited file types: $1.",
-    "uploadfooter": "-",
-    "upload-default-description": "-",
-    "uploadlogpage": "Upload log",
-    "uploadlogpagetext": "Below is a list of the most recent file uploads.\nSee the [[Special:NewFiles|gallery of new files]] for a more visual overview.",
-    "filename": "Filename",
-    "filedesc": "Summary",
-    "fileuploadsummary": "Summary:",
-    "filereuploadsummary": "File changes:",
-    "filestatus": "Copyright status:",
-    "filesource": "Source:",
-    "ignorewarning": "Ignore warning and save file anyway",
-    "ignorewarnings": "Ignore any warnings",
-    "minlength1": "Filenames must be at least one letter.",
-    "illegalfilename": "The filename \"$1\" contains characters that are not allowed in page titles.\nPlease rename the file and try uploading it again.",
-    "filename-toolong": "Filenames may not be longer than 240 bytes.",
-    "badfilename": "Filename has been changed to \"$1\".",
-    "filetype-mime-mismatch": "File extension \".$1\" does not match the detected MIME type of the file ($2).",
-    "filetype-badmime": "Files of the MIME type \"$1\" are not allowed to be uploaded.",
-    "filetype-bad-ie-mime": "Cannot upload this file because Internet Explorer would detect it as \"$1\", which is a disallowed and potentially dangerous file type.",
-    "filetype-unwanted-type": "<strong>\".$1\"</strong> is an unwanted file type.\nPreferred {{PLURAL:$3|file type is|file types are}} $2.",
-    "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|is not a permitted file type|are not permitted file types}}.\nPermitted {{PLURAL:$3|file type is|file types are}} $2.",
-    "filetype-missing": "The file has no extension (like \".jpg\").",
-    "empty-file": "The file you submitted was empty.",
-    "file-too-large": "The file you submitted was too large.",
-    "filename-tooshort": "The filename is too short.",
-    "filetype-banned": "This type of file is banned.",
-    "verification-error": "This file did not pass file verification.",
-    "hookaborted": "The modification you tried to make was aborted by an extension.",
-    "illegal-filename": "The filename is not allowed.",
-    "overwrite": "Overwriting an existing file is not allowed.",
-    "unknown-error": "An unknown error occurred.",
-    "tmp-create-error": "Could not create temporary file.",
-    "tmp-write-error": "Error writing temporary file.",
-    "large-file": "It is recommended that files are no larger than $1;\nthis file is $2.",
-    "largefileserver": "This file is bigger than the server is configured to allow.",
-    "emptyfile": "The file you uploaded seems to be empty.\nThis might be due to a typo in the filename.\nPlease check whether you really want to upload this file.",
-    "windows-nonascii-filename": "This wiki does not support filenames with special characters.",
-    "fileexists": "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.\n[[$1|thumb]]",
-    "filepageexists": "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.\nThe summary you enter will not appear on the description page.\nTo make your summary appear there, you will need to manually edit it.\n[[$1|thumb]]",
-    "fileexists-extension": "A file with a similar name exists: [[$2|thumb]]\n* Name of the uploading file: <strong>[[:$1]]</strong>\n* Name of the existing file: <strong>[[:$2]]</strong>\nPlease choose a different name.",
-    "fileexists-thumbnail-yes": "The file seems to be an image of reduced size <em>(thumbnail)</em>.\n[[$1|thumb]]\nPlease check the file <strong>[[:$1]]</strong>.\nIf the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
-    "file-thumbnail-no": "The filename begins with <strong>$1</strong>.\nIt seems to be an image of reduced size <em>(thumbnail)</em>.\nIf you have this image in full resolution upload this one, otherwise change the filename please.",
-    "fileexists-forbidden": "A file with this name already exists, and cannot be overwritten.\nIf you still want to upload your file, please go back and use a new name.\n[[File:$1|thumb|center|$1]]",
-    "fileexists-shared-forbidden": "A file with this name exists already in the shared file repository.\nIf you still want to upload your file, please go back and use a new name.\n[[File:$1|thumb|center|$1]]",
-    "file-exists-duplicate": "This file is a duplicate of the following {{PLURAL:$1|file|files}}:",
-    "file-deleted-duplicate": "A file identical to this file ([[:$1]]) has previously been deleted.\nYou should check that file's deletion history before proceeding to re-upload it.",
-    "file-deleted-duplicate-notitle": "A file identical to this file has previously been deleted, and the title has been suppressed.\nYou should ask someone with the ability to view suppressed file data to review the situation before proceeding to re-upload it.",
-    "uploadwarning": "Upload warning",
-    "uploadwarning-text": "Please modify the file description below and try again.",
-    "savefile": "Save file",
-    "uploadedimage": "uploaded \"[[$1]]\"",
-    "overwroteimage": "uploaded a new version of \"[[$1]]\"",
-    "uploaddisabled": "Uploads disabled.",
-    "copyuploaddisabled": "Upload by URL disabled.",
-    "uploaddisabledtext": "File uploads are disabled.",
-    "php-uploaddisabledtext": "File uploads are disabled in PHP.\nPlease check the file_uploads setting.",
-    "uploadscripted": "This file contains HTML or script code that may be erroneously interpreted by a web browser.",
-    "uploadscriptednamespace": "This SVG file contains an illegal namespace \"$1\".",
-    "uploadinvalidxml": "The XML in the uploaded file could not be parsed.",
-    "uploadvirus": "The file contains a virus!\nDetails: $1",
-    "uploadjava": "The file is a ZIP file that contains a Java .class file.\nUploading Java files is not allowed because they can cause security restrictions to be bypassed.",
-    "upload-source": "Source file",
-    "sourcefilename": "Source filename:",
-    "sourceurl": "Source URL:",
-    "destfilename": "Destination filename:",
-    "upload-maxfilesize": "Maximum file size: $1",
-    "upload-description": "File description",
-    "upload-options": "Upload options",
-    "watchthisupload": "Watch this file",
-    "filewasdeleted": "A file of this name has been previously uploaded and subsequently deleted.\nYou should check the $1 before proceeding to upload it again.",
-    "filename-bad-prefix": "The name of the file you are uploading begins with <strong>\"$1\"</strong>, which is a non-descriptive name typically assigned automatically by digital cameras.\nPlease choose a more descriptive name for your file.",
-    "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment\n#   * Every non-blank line is a prefix for typical filenames assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobile phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
-    "upload-success-subj": "Successful upload",
-    "upload-success-msg": "Your upload from [$2] was successful. It is available here: [[:{{ns:file}}:$1]]",
-    "upload-failure-subj": "Upload problem",
-    "upload-failure-msg": "There was a problem with your upload from [$2]:\n\n$1",
-    "upload-warning-subj": "Upload warning",
-    "upload-warning-msg": "There was a problem with your upload from [$2]. You may return to the [[Special:Upload/stash/$1|upload form]] to correct this problem.",
-    "upload-proto-error": "Incorrect protocol",
-    "upload-proto-error-text": "Remote upload requires URLs beginning with <code>http://</code> or <code>ftp://</code>.",
-    "upload-file-error": "Internal error",
-    "upload-file-error-text": "An internal error occurred when attempting to create a temporary file on the server.\nPlease contact an [[Special:ListUsers/sysop|administrator]].",
-    "upload-misc-error": "Unknown upload error",
-    "upload-misc-error-text": "An unknown error occurred during the upload.\nPlease verify that the URL is valid and accessible and try again.\nIf the problem persists, contact an [[Special:ListUsers/sysop|administrator]].",
-    "upload-too-many-redirects": "The URL contained too many redirects",
-    "upload-http-error": "An HTTP error occurred: $1",
-    "upload-copy-upload-invalid-domain": "Copy uploads are not available from this domain.",
-    "backend-fail-stream": "Could not stream file \"$1\".",
-    "backend-fail-backup": "Could not backup file \"$1\".",
-    "backend-fail-notexists": "The file $1 does not exist.",
-    "backend-fail-hashes": "Could not get file hashes for comparison.",
-    "backend-fail-notsame": "A non-identical file already exists at \"$1\".",
-    "backend-fail-invalidpath": "\"$1\" is not a valid storage path.",
-    "backend-fail-delete": "Could not delete file \"$1\".",
-    "backend-fail-describe": "Could not change metadata for file \"$1\".",
-    "backend-fail-alreadyexists": "The file \"$1\" already exists.",
-    "backend-fail-store": "Could not store file \"$1\" at \"$2\".",
-    "backend-fail-copy": "Could not copy file \"$1\" to \"$2\".",
-    "backend-fail-move": "Could not move file \"$1\" to \"$2\".",
-    "backend-fail-opentemp": "Could not open temporary file.",
-    "backend-fail-writetemp": "Could not write to temporary file.",
-    "backend-fail-closetemp": "Could not close temporary file.",
-    "backend-fail-read": "Could not read file \"$1\".",
-    "backend-fail-create": "Could not write file \"$1\".",
-    "backend-fail-maxsize": "Could not write file \"$1\" because it is larger than {{PLURAL:$2|one byte|$2 bytes}}.",
-    "backend-fail-readonly": "The storage backend \"$1\" is currently read-only. The reason given is: \"<em>$2</em>\"",
-    "backend-fail-synced": "The file \"$1\" is in an inconsistent state within the internal storage backends",
-    "backend-fail-connect": "Could not connect to storage backend \"$1\".",
-    "backend-fail-internal": "An unknown error occurred in storage backend \"$1\".",
-    "backend-fail-contenttype": "Could not determine the content type of the file to store at \"$1\".",
-    "backend-fail-batchsize": "The storage backend was given a batch of $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.",
-    "backend-fail-usable": "Could not read or write file \"$1\" due to insufficient permissions or missing directories/containers.",
-    "filejournal-fail-dbconnect": "Could not connect to the journal database for storage backend \"$1\".",
-    "filejournal-fail-dbquery": "Could not update the journal database for storage backend \"$1\".",
-    "lockmanager-notlocked": "Could not unlock \"$1\"; it is not locked.",
-    "lockmanager-fail-closelock": "Could not close lock file for \"$1\".",
-    "lockmanager-fail-deletelock": "Could not delete lock file for \"$1\".",
-    "lockmanager-fail-acquirelock": "Could not acquire lock for \"$1\".",
-    "lockmanager-fail-openlock": "Could not open lock file for \"$1\".",
-    "lockmanager-fail-releaselock": "Could not release lock for \"$1\".",
-    "lockmanager-fail-db-bucket": "Could not contact enough lock databases in bucket $1.",
-    "lockmanager-fail-db-release": "Could not release locks on database $1.",
-    "lockmanager-fail-svr-acquire": "Could not acquire locks on server $1.",
-    "lockmanager-fail-svr-release": "Could not release locks on server $1.",
-    "zip-file-open-error": "An error was encountered when opening the file for ZIP checks.",
-    "zip-wrong-format": "The specified file was not a ZIP file.",
-    "zip-bad": "The file is a corrupt or otherwise unreadable ZIP file.\nIt cannot be properly checked for security.",
-    "zip-unsupported": "The file is a ZIP file that uses ZIP features not supported by MediaWiki.\nIt cannot be properly checked for security.",
-    "uploadstash": "Upload stash",
-    "uploadstash-summary": "This page provides access to files that are uploaded or in the process of uploading, but are not yet published to the wiki. These files are not visible to anyone but the user who uploaded them.",
-    "uploadstash-clear": "Clear stashed files",
-    "uploadstash-nofiles": "You have no stashed files.",
-    "uploadstash-badtoken": "Performing of that action was unsuccessful, perhaps because your editing credentials expired. Try again.",
-    "uploadstash-errclear": "Clearing the files was unsuccessful.",
-    "uploadstash-refresh": "Refresh the list of files",
-    "invalid-chunk-offset": "Invalid chunk offset",
-    "img-auth-accessdenied": "Access denied",
-    "img-auth-nopathinfo": "Missing PATH_INFO.\nYour server is not set up to pass this information.\nIt may be CGI-based and cannot support img_auth.\nSee https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
-    "img-auth-notindir": "Requested path is not in the configured upload directory.",
-    "img-auth-badtitle": "Unable to construct a valid title from \"$1\".",
-    "img-auth-nologinnWL": "You are not logged in and \"$1\" is not in the whitelist.",
-    "img-auth-nofile": "File \"$1\" does not exist.",
-    "img-auth-isdir": "You are trying to access a directory \"$1\".\nOnly file access is allowed.",
-    "img-auth-streaming": "Streaming \"$1\".",
-    "img-auth-public": "The function of img_auth.php is to output files from a private wiki.\nThis wiki is configured as a public wiki.\nFor optimal security, img_auth.php is disabled.",
-    "img-auth-noread": "User does not have access to read \"$1\".",
-    "http-invalid-url": "Invalid URL: $1",
-    "http-invalid-scheme": "URLs with the \"$1\" scheme are not supported.",
-    "http-request-error": "HTTP request failed due to unknown error.",
-    "http-read-error": "HTTP read error.",
-    "http-timed-out": "HTTP request timed out.",
-    "http-curl-error": "Error fetching URL: $1",
-    "http-bad-status": "There was a problem during the HTTP request: $1 $2",
-    "upload-curl-error6": "Could not reach URL",
-    "upload-curl-error6-text": "The URL provided could not be reached.\nPlease double-check that the URL is correct and the site is up.",
-    "upload-curl-error28": "Upload timeout",
-    "upload-curl-error28-text": "The site took too long to respond.\nPlease check the site is up, wait a short while and try again.\nYou may want to try at a less busy time.",
-    "license": "Licensing:",
-    "license-header": "Licensing",
-    "nolicense": "None selected",
-    "licenses": "-",
-    "license-nopreview": "(Preview not available)",
-    "upload_source_url": "(a valid, publicly accessible URL)",
-    "upload_source_file": "(a file on your computer)",
-    "listfiles-summary": "This special page shows all uploaded files.",
-    "listfiles_search_for": "Search for media name:",
-    "imgfile": "file",
-    "listfiles": "File list",
-    "listfiles_thumb": "Thumbnail",
-    "listfiles_date": "Date",
-    "listfiles_name": "Name",
-    "listfiles_user": "User",
-    "listfiles_size": "Size",
-    "listfiles_description": "Description",
-    "listfiles_count": "Versions",
-    "listfiles-show-all": "Include old versions of images",
-    "listfiles-latestversion": "Current version",
-    "listfiles-latestversion-yes": "Yes",
-    "listfiles-latestversion-no": "No",
-    "file-anchor-link": "File",
-    "filehist": "File history",
-    "filehist-help": "Click on a date/time to view the file as it appeared at that time.",
-    "filehist-deleteall": "delete all",
-    "filehist-deleteone": "delete",
-    "filehist-revert": "revert",
-    "filehist-current": "current",
-    "filehist-datetime": "Date/Time",
-    "filehist-thumb": "Thumbnail",
-    "filehist-thumbtext": "Thumbnail for version as of $1",
-    "filehist-nothumb": "No thumbnail",
-    "filehist-user": "User",
-    "filehist-dimensions": "Dimensions",
-    "filehist-filesize": "File size",
-    "filehist-comment": "Comment",
-    "imagelinks": "File usage",
-    "linkstoimage": "The following {{PLURAL:$1|page links|$1 pages link}} to this file:",
-    "linkstoimage-more": "More than $1 {{PLURAL:$1|page links|pages link}} to this file.\nThe following list shows the {{PLURAL:$1|first page link|first $1 page links}} to this file only.\nA [[Special:WhatLinksHere/$2|full list]] is available.",
-    "nolinkstoimage": "There are no pages that link to this file.",
-    "morelinkstoimage": "View [[Special:WhatLinksHere/$1|more links]] to this file.",
-    "linkstoimage-redirect": "$1 (file redirect) $2",
-    "duplicatesoffile": "The following {{PLURAL:$1|file is a duplicate|$1 files are duplicates}} of this file ([[Special:FileDuplicateSearch/$2|more details]]):",
-    "sharedupload": "This file is from $1 and may be used by other projects.",
-    "sharedupload-desc-there": "This file is from $1 and may be used by other projects.\nPlease see the [$2 file description page] for further information.",
-    "sharedupload-desc-here": "This file is from $1 and may be used by other projects.\nThe description on its [$2 file description page] there is shown below.",
-    "sharedupload-desc-edit": "This file is from $1 and may be used by other projects.\nMaybe you want to edit the description on its [$2 file description page] there.",
-    "sharedupload-desc-create": "This file is from $1 and may be used by other projects.\nMaybe you want to edit the description on its [$2 file description page] there.",
-    "shareddescriptionfollows": "-",
-    "filepage-nofile": "No file by this name exists.",
-    "filepage-nofile-link": "No file by this name exists, but you can [$1 upload it].",
-    "uploadnewversion-linktext": "Upload a new version of this file",
-    "shared-repo-from": "from $1",
-    "shared-repo": "a shared repository",
-    "shared-repo-name-wikimediacommons": "Wikimedia Commons",
-    "filepage.css": "/* CSS placed here is included on the file description page, also included on foreign client wikis */",
-    "upload-disallowed-here": "You cannot overwrite this file.",
-    "filerevert": "Revert $1",
-    "filerevert-legend": "Revert file",
-    "filerevert-intro": "You are about to revert the file <strong>[[Media:$1|$1]]</strong> to the [$4 version as of $3, $2].",
-    "filerevert-comment": "Reason:",
-    "filerevert-defaultcomment": "Reverted to version as of $2, $1",
-    "filerevert-submit": "Revert",
-    "filerevert-success": "<strong>[[Media:$1|$1]]</strong> has been reverted to the [$4 version as of $3, $2].",
-    "filerevert-badversion": "There is no previous local version of this file with the provided timestamp.",
-    "filedelete": "Delete $1",
-    "filedelete-legend": "Delete file",
-    "filedelete-intro": "You are about to delete the file <strong>[[Media:$1|$1]]</strong> along with all of its history.",
-    "filedelete-intro-old": "You are deleting the version of <strong>[[Media:$1|$1]]</strong> as of [$4 $3, $2].",
-    "filedelete-comment": "Reason:",
-    "filedelete-submit": "Delete",
-    "filedelete-success": "<strong>$1</strong> has been deleted.",
-    "filedelete-success-old": "The version of <strong>[[Media:$1|$1]]</strong> as of $3, $2 has been deleted.",
-    "filedelete-nofile": "<strong>$1</strong> does not exist.",
-    "filedelete-nofile-old": "There is no archived version of <strong>$1</strong> with the specified attributes.",
-    "filedelete-otherreason": "Other/additional reason:",
-    "filedelete-reason-otherlist": "Other reason",
-    "filedelete-reason-dropdown": "*Common delete reasons\n** Copyright violation\n** Duplicated file",
-    "filedelete-edit-reasonlist": "Edit delete reasons",
-    "filedelete-maintenance": "Deletion and restoration of files temporarily disabled during maintenance.",
-    "filedelete-maintenance-title": "Cannot delete file",
-    "mimesearch": "MIME search",
-    "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.",
-    "mimetype": "MIME type:",
-    "download": "download",
-    "unwatchedpages": "Unwatched pages",
-    "unwatchedpages-summary": "",
-    "listredirects": "List of redirects",
-    "listredirects-summary": "",
-    "listduplicatedfiles": "List of files with duplicates",
-    "listduplicatedfiles-summary": "This is a list of files where the most recent version of the file is a duplicate of the most recent version of some other file. Only local files are considered.",
-    "listduplicatedfiles-entry": "[[:File:$1|$1]] has [[$3|{{PLURAL:$2|a duplicate|$2 duplicates}}]].",
-    "unusedtemplates": "Unused templates",
-    "unusedtemplates-summary": "",
-    "unusedtemplatestext": "This page lists all pages in the {{ns:template}} namespace that are not included in another page.\nRemember to check for other links to the templates before deleting them.",
-    "unusedtemplateswlh": "other links",
-    "randompage": "Random page",
-    "randompage-nopages": "There are no pages in the following {{PLURAL:$2|namespace|namespaces}}: $1.",
-    "randompage-url": "Special:Random",
-    "randomincategory": "Random page in category",
-    "randomincategory-invalidcategory": "\"$1\" is not a valid category name.",
-    "randomincategory-nopages": "There are no pages in the [[:Category:$1|$1]] category.",
-    "randomincategory-selectcategory": "Get random page from category: $1 $2.",
-    "randomincategory-selectcategory-submit": "Go",
-    "randomredirect": "Random redirect",
-    "randomredirect-nopages": "There are no redirects in the namespace \"$1\".",
-    "statistics": "Statistics",
-    "statistics-summary": "",
-    "statistics-header-pages": "Page statistics",
-    "statistics-header-edits": "Edit statistics",
-    "statistics-header-views": "View statistics",
-    "statistics-header-users": "User statistics",
-    "statistics-header-hooks": "Other statistics",
-    "statistics-articles": "Content pages",
-    "statistics-pages": "Pages",
-    "statistics-pages-desc": "All pages in the wiki, including talk pages, redirects, etc.",
-    "statistics-files": "Uploaded files",
-    "statistics-edits": "Page edits since {{SITENAME}} was set up",
-    "statistics-edits-average": "Average edits per page",
-    "statistics-views-total": "Views total",
-    "statistics-views-total-desc": "Views to non-existing pages and special pages are not included",
-    "statistics-views-peredit": "Views per edit",
-    "statistics-users": "Registered [[Special:ListUsers|users]]",
-    "statistics-users-active": "Active users",
-    "statistics-users-active-desc": "Users who have performed an action in the last {{PLURAL:$1|day|$1 days}}",
-    "statistics-mostpopular": "Most viewed pages",
-    "statistics-footer": "",
-    "pageswithprop": "Pages with a page property",
-    "pageswithprop-summary": "",
-    "pageswithprop-legend": "Pages with a page property",
-    "pageswithprop-text": "This page lists pages that use a particular page property.",
-    "pageswithprop-prop": "Property name:",
-    "pageswithprop-submit": "Go",
-    "pageswithprop-prophidden-long": "long text property value hidden ($1)",
-    "pageswithprop-prophidden-binary": "binary property value hidden ($1)",
-    "doubleredirects": "Double redirects",
-    "doubleredirects-summary": "",
-    "doubleredirectstext": "This page lists pages that redirect to other redirect pages.\nEach row contains links to the first and second redirect, as well as the target of the second redirect, which is usually the \"real\" target page to which the first redirect should point.\n<del>Crossed out</del> entries have been solved.",
-    "double-redirect-fixed-move": "[[$1]] has been moved.\nIt was automatically updated and now it redirects to [[$2]].",
-    "double-redirect-fixed-maintenance": "Automatically fixing double redirect from [[$1]] to [[$2]] in a maintenance job.",
-    "double-redirect-fixer": "Redirect fixer",
-    "brokenredirects": "Broken redirects",
-    "brokenredirects-summary": "",
-    "brokenredirectstext": "The following redirects link to non-existent pages:",
-    "brokenredirects-edit": "edit",
-    "brokenredirects-delete": "delete",
-    "withoutinterwiki": "Pages without language links",
-    "withoutinterwiki-summary": "The following pages do not link to other language versions.",
-    "withoutinterwiki-legend": "Prefix",
-    "withoutinterwiki-submit": "Show",
-    "fewestrevisions": "Pages with the fewest revisions",
-    "fewestrevisions-summary": "",
-    "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
-    "ncategories": "$1 {{PLURAL:$1|category|categories}}",
-    "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
-    "nlinks": "$1 {{PLURAL:$1|link|links}}",
-    "nmembers": "$1 {{PLURAL:$1|member|members}}",
-    "nmemberschanged": "$1 → $2 {{PLURAL:$2|member|members}}",
-    "nrevisions": "$1 {{PLURAL:$1|revision|revisions}}",
-    "nviews": "$1 {{PLURAL:$1|view|views}}",
-    "nimagelinks": "Used on $1 {{PLURAL:$1|page|pages}}",
-    "ntransclusions": "used on $1 {{PLURAL:$1|page|pages}}",
-    "specialpage-empty": "There are no results for this report.",
-    "lonelypages": "Orphaned pages",
-    "lonelypages-summary": "",
-    "lonelypagestext": "The following pages are not linked from or transcluded into other pages in {{SITENAME}}.",
-    "uncategorizedpages": "Uncategorized pages",
-    "uncategorizedpages-summary": "",
-    "uncategorizedcategories": "Uncategorized categories",
-    "uncategorizedcategories-summary": "",
-    "uncategorizedimages": "Uncategorized files",
-    "uncategorizedimages-summary": "",
-    "uncategorizedtemplates": "Uncategorized templates",
-    "uncategorizedtemplates-summary": "",
-    "unusedcategories": "Unused categories",
-    "unusedcategories-summary": "",
-    "unusedimages": "Unused files",
-    "unusedimages-summary": "",
-    "popularpages": "Popular pages",
-    "popularpages-summary": "",
-    "wantedcategories": "Wanted categories",
-    "wantedcategories-summary": "",
-    "wantedpages": "Wanted pages",
-    "wantedpages-summary": "",
-    "wantedpages-badtitle": "Invalid title in result set: $1",
-    "wantedfiles": "Wanted files",
-    "wantedfiles-summary": "",
-    "wantedfiletext-cat": "The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>. Additionally, pages that embed files that do not exist are listed in [[:$1]].",
-    "wantedfiletext-nocat": "The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>.",
-    "wantedtemplates": "Wanted templates",
-    "wantedtemplates-summary": "",
-    "mostlinked": "Most linked-to pages",
-    "mostlinked-summary": "",
-    "mostlinkedcategories": "Most linked-to categories",
-    "mostlinkedcategories-summary": "",
-    "mostlinkedtemplates": "Most linked-to templates",
-    "mostlinkedtemplates-summary": "",
-    "mostcategories": "Pages with the most categories",
-    "mostcategories-summary": "",
-    "mostimages": "Most linked-to files",
-    "mostimages-summary": "",
-    "mostinterwikis": "Pages with the most interwikis",
-    "mostinterwikis-summary": "",
-    "mostrevisions": "Pages with the most revisions",
-    "mostrevisions-summary": "",
-    "prefixindex": "All pages with prefix",
-    "prefixindex-namespace": "All pages with prefix ($1 namespace)",
-    "prefixindex-summary": "",
-    "prefixindex-strip": "Strip prefix in list",
-    "shortpages": "Short pages",
-    "shortpages-summary": "",
-    "longpages": "Long pages",
-    "longpages-summary": "",
-    "deadendpages": "Dead-end pages",
-    "deadendpages-summary": "",
-    "deadendpagestext": "The following pages do not link to other pages in {{SITENAME}}.",
-    "protectedpages": "Protected pages",
-    "protectedpages-indef": "Indefinite protections only",
-    "protectedpages-summary": "This page lists existing pages that are currently protected. For a list of titles that are protected from creation, see [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
-    "protectedpages-cascade": "Cascading protections only",
-    "protectedpages-noredirect": "Hide redirects",
-    "protectedpagesempty": "No pages are currently protected with these parameters.",
-    "protectedpages-timestamp": "Timestamp",
-    "protectedpages-page": "Page",
-    "protectedpages-expiry": "Expires",
-    "protectedpages-performer": "Protecting user",
-    "protectedpages-params": "Protection parameters",
-    "protectedpages-reason": "Reason",
-    "protectedpages-unknown-timestamp": "Unknown",
-    "protectedpages-unknown-performer": "Unknown user",
-    "protectedpages-unknown-reason": "—",
-    "protectedtitles": "Protected titles",
-    "protectedtitles-summary": "This page lists titles that are currently protected from creation. For a list of existing pages that are protected, see [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
-    "protectedtitlesempty": "No titles are currently protected with these parameters.",
-    "listusers": "User list",
-    "listusers-summary": "",
-    "listusers-editsonly": "Show only users with edits",
-    "listusers-creationsort": "Sort by creation date",
-    "listusers-desc": "Sort in descending order",
-    "usereditcount": "$1 {{PLURAL:$1|edit|edits}}",
-    "usercreated": "{{GENDER:$3|Created}} on $1 at $2",
-    "newpages": "New pages",
-    "newpages-summary": "",
-    "newpages-username": "Username:",
-    "ancientpages": "Oldest pages",
-    "ancientpages-summary": "",
-    "move": "Move",
-    "movethispage": "Move this page",
-    "unusedimagestext": "The following files exist but are not embedded in any page.\nPlease note that other web sites may link to a file with a direct URL, and so may still be listed here despite being in active use.",
-    "unusedcategoriestext": "The following category pages exist, although no other page or category makes use of them.",
-    "notargettitle": "No target",
-    "notargettext": "You have not specified a target page or user to perform this function on.",
-    "nopagetitle": "No such target page",
-    "nopagetext": "The target page you have specified does not exist.",
-    "pager-newer-n": "{{PLURAL:$1|newer 1|newer $1}}",
-    "pager-older-n": "{{PLURAL:$1|older 1|older $1}}",
-    "suppress": "Oversight",
-    "querypage-disabled": "This special page is disabled for performance reasons.",
-    "booksources": "Book sources",
-    "booksources-summary": "",
-    "booksources-search-legend": "Search for book sources",
-    "booksources-isbn": "ISBN:",
-    "booksources-go": "Go",
-    "booksources-text": "Below is a list of links to other sites that sell new and used books, and may also have further information about books you are looking for:",
-    "booksources-invalid-isbn": "The given ISBN does not appear to be valid; check for errors copying from the original source.",
-    "rfcurl": "//tools.ietf.org/html/rfc$1",
-    "pubmedurl": "//www.ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract",
-    "specialloguserlabel": "Performer:",
-    "speciallogtitlelabel": "Target (title or user):",
-    "log": "Logs",
-    "all-logs-page": "All public logs",
-    "alllogstext": "Combined display of all available logs of {{SITENAME}}.\nYou can narrow down the view by selecting a log type, the username (case-sensitive), or the affected page (also case-sensitive).",
-    "logempty": "No matching items in log.",
-    "log-title-wildcard": "Search titles starting with this text",
-    "showhideselectedlogentries": "Change visibility of selected log entries",
-    "allpages": "All pages",
-    "allpages-summary": "",
-    "alphaindexline": "$1 to $2",
-    "nextpage": "Next page ($1)",
-    "prevpage": "Previous page ($1)",
-    "allpagesfrom": "Display pages starting at:",
-    "allpagesto": "Display pages ending at:",
-    "allarticles": "All pages",
-    "allinnamespace": "All pages ($1 namespace)",
-    "allpagessubmit": "Go",
-    "allpagesprefix": "Display pages with prefix:",
-    "allpagesbadtitle": "The given page title was invalid or had an inter-language or inter-wiki prefix.\nIt may contain one or more characters that cannot be used in titles.",
-    "allpages-bad-ns": "{{SITENAME}} does not have namespace \"$1\".",
-    "allpages-hide-redirects": "Hide redirects",
-    "cachedspecial-viewing-cached-ttl": "You are viewing a cached version of this page, which can be up to $1 old.",
-    "cachedspecial-viewing-cached-ts": "You are viewing a cached version of this page, which might not be completely actual.",
-    "cachedspecial-refresh-now": "View latest.",
-    "categories": "Categories",
-    "categories-summary": "",
-    "categoriespagetext": "The following {{PLURAL:$1|category contains|categories contain}} pages or media.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
-    "categoriesfrom": "Display categories starting at:",
-    "special-categories-sort-count": "sort by count",
-    "special-categories-sort-abc": "sort alphabetically",
-    "deletedcontributions": "Deleted user contributions",
-    "deletedcontributions-summary": "",
-    "deletedcontributions-title": "Deleted user contributions",
-    "sp-deletedcontributions-contribs": "contributions",
-    "linksearch": "External links search",
-    "linksearch-summary": "",
-    "linksearch-pat": "Search pattern:",
-    "linksearch-ns": "Namespace:",
-    "linksearch-ok": "Search",
-    "linksearch-text": "Wildcards such as \"*.wikipedia.org\" may be used.\nNeeds at least a top-level domain, for example \"*.org\".<br />\nSupported {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http:// if no protocol is specified).",
-    "linksearch-line": "$1 is linked from $2",
-    "linksearch-error": "Wildcards may appear only at the start of the hostname.",
-    "listusersfrom": "Display users starting at:",
-    "listusers-submit": "Show",
-    "listusers-noresult": "No user found.",
-    "listusers-blocked": "(blocked)",
-    "activeusers": "Active users list",
-    "activeusers-summary": "",
-    "activeusers-intro": "This is a list of users who had some kind of activity within the last $1 {{PLURAL:$1|day|days}}.",
-    "activeusers-count": "$1 {{PLURAL:$1|action|actions}} in the last {{PLURAL:$3|day|$3 days}}",
-    "activeusers-from": "Display users starting at:",
-    "activeusers-hidebots": "Hide bots",
-    "activeusers-hidesysops": "Hide administrators",
-    "activeusers-noresult": "No users found.",
-    "listgrouprights": "User group rights",
-    "listgrouprights-summary": "The following is a list of user groups defined on this wiki, with their associated access rights.\nThere may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] about individual rights.",
-    "listgrouprights-key": "Legend:\n* <span class=\"listgrouprights-granted\">Granted right</span>\n* <span class=\"listgrouprights-revoked\">Revoked right</span>",
-    "listgrouprights-group": "Group",
-    "listgrouprights-rights": "Rights",
-    "listgrouprights-helppage": "Help:Group rights",
-    "listgrouprights-members": "(list of 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": "Add {{PLURAL:$2|group|groups}}: $1",
-    "listgrouprights-removegroup": "Remove {{PLURAL:$2|group|groups}}: $1",
-    "listgrouprights-addgroup-all": "Add all groups",
-    "listgrouprights-removegroup-all": "Remove all groups",
-    "listgrouprights-addgroup-self": "Add {{PLURAL:$2|group|groups}} to own account: $1",
-    "listgrouprights-removegroup-self": "Remove {{PLURAL:$2|group|groups}} from own account: $1",
-    "listgrouprights-addgroup-self-all": "Add all groups to own account",
-    "listgrouprights-removegroup-self-all": "Remove all groups from own account",
-    "listgrouprights-namespaceprotection-header": "Namespace restrictions",
-    "listgrouprights-namespaceprotection-namespace": "Namespace",
-    "listgrouprights-namespaceprotection-restrictedto": "Right(s) allowing user to edit",
-    "trackingcategories": "Tracking categories",
-    "trackingcategories-summary": "This page lists tracking categories which are automatically populated by the MediaWiki software. Their names can be changed by altering the relevant system messages in the {{ns:8}} namespace.",
-    "trackingcategories-msg": "Tracking category",
-    "trackingcategories-name": "Message name",
-    "trackingcategories-desc": "Category inclusion criteria",
-    "noindex-category-desc": "The page is not indexed by robots because it has the magic word <code><nowiki>__NOINDEX__</nowiki></code> on it and is in a namespace where that flag is allowed.",
-    "index-category-desc": "The page has a <code><nowiki>__INDEX__</nowiki></code> on it (and is in a namespace where that flag is allowed), and hence is indexed by robots where it normally wouldn't be.",
-    "post-expand-template-inclusion-category-desc": "After expanding all the templates, the page size is bigger than <code>$wgMaxArticleSize</code>, so some templates weren't expanded.",
-    "post-expand-template-argument-category-desc": "After expanding a template argument (something in triple braces, like <code>{{{Foo}}}</code>), the page is bigger than <code>$wgMaxArticleSize</code>.",
-    "expensive-parserfunction-category-desc": "Too many expensive parser functions (like <code>#ifexist</code>) included on a page. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-    "broken-file-category-desc": "Category added if the page contains a broken file link (a link to embed a file when the file does not exist).",
-    "hidden-category-category-desc": "This is a category with <code><nowiki>__HIDDENCAT__</nowiki></code> on it, which prevents it from showing up in the category links box on pages, by default.",
-    "trackingcategories-nodesc": "No description available.",
-    "trackingcategories-disabled": "Category is disabled",
-    "mailnologin": "No send address",
-    "mailnologintext": "You must be [[Special:UserLogin|logged in]] and have a valid email address in your [[Special:Preferences|preferences]] to send email to other users.",
-    "emailuser": "Email this user",
-    "emailuser-title-target": "Email this {{GENDER:$1|user}}",
-    "emailuser-title-notarget": "Email user",
-    "emailuser-summary": "",
-    "emailpage": "Email user",
-    "emailpagetext": "You can use the form below to send an email message to this {{GENDER:$1|user}}.\nThe email address you entered in [[Special:Preferences|your user preferences]] will appear as the \"From\" address of the email, so the recipient will be able to reply directly to you.",
-    "defemailsubject": "{{SITENAME}} email from user \"$1\"",
-    "usermaildisabled": "User email disabled",
-    "usermaildisabledtext": "You cannot send email to other users on this wiki",
-    "noemailtitle": "No email address",
-    "noemailtext": "This user has not specified a valid email address.",
-    "nowikiemailtext": "This user has chosen not to receive email from other users.",
-    "emailnotarget": "Non-existent or invalid username for recipient.",
-    "emailtarget": "Enter username of recipient",
-    "emailusername": "Username:",
-    "emailusernamesubmit": "Submit",
-    "email-legend": "Send an email to another {{SITENAME}} user",
-    "emailfrom": "From:",
-    "emailto": "To:",
-    "emailsubject": "Subject:",
-    "emailmessage": "Message:",
-    "emailsend": "Send",
-    "emailccme": "Email me a copy of my message.",
-    "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}}.",
-    "usermessage-summary": "Leaving system message.",
-    "usermessage-editor": "System messenger",
-    "usermessage-template": "MediaWiki:UserMessage",
-    "watchlist": "Watchlist",
-    "watchlist-summary": "",
-    "mywatchlist": "Watchlist",
-    "watchlistfor2": "For $1 $2",
-    "nowatchlist": "You have no items on your watchlist.",
-    "watchlistanontext": "Please $1 to view or edit items on your watchlist.",
-    "watchnologin": "Not logged in",
-    "addwatch": "Add to watchlist",
-    "addedwatchtext": "The page \"[[:$1]]\" has been added to your [[Special:Watchlist|watchlist]].\nFuture changes to this page and its associated talk page will be listed there.",
-    "removewatch": "Remove from watchlist",
-    "removedwatchtext": "The page \"[[:$1]]\" has been removed from [[Special:Watchlist|your watchlist]].",
-    "watch": "Watch",
-    "watchthispage": "Watch this page",
-    "unwatch": "Unwatch",
-    "unwatchthispage": "Stop watching",
-    "notanarticle": "Not a content page",
-    "notvisiblerev": "The last revision by a different user has been deleted",
-    "watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not separately counting talk pages.",
-    "wlheader-enotif": "Email notification is enabled.",
-    "wlheader-showupdated": "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
-    "wlnote2": "Below are the changes in the last {{PLURAL:$1|hour|<strong>$1</strong> hours}}, as of $2, $3.",
-    "wlshowlast": "Show last $1 hours $2 days $3",
-    "watchlist-options": "Watchlist options",
-    "watching": "Watching...",
-    "unwatching": "Unwatching...",
-    "watcherrortext": "An error occurred while changing your watchlist settings for \"$1\".",
-    "enotif_reset": "Mark all pages visited",
-    "enotif_impersonal_salutation": "{{SITENAME}} user",
-    "enotif_subject_deleted": "{{SITENAME}} page $1 has been {{GENDER:$2|deleted}} by $2",
-    "enotif_subject_created": "{{SITENAME}} page $1 has been {{GENDER:$2|created}} by $2",
-    "enotif_subject_moved": "{{SITENAME}} page $1 has been {{GENDER:$2|moved}} by $2",
-    "enotif_subject_restored": "{{SITENAME}} page $1 has been {{GENDER:$2|restored}} by $2",
-    "enotif_subject_changed": "{{SITENAME}} page $1 has been {{GENDER:$2|changed}} by $2",
-    "enotif_body_intro_deleted": "The {{SITENAME}} page $1 has been {{GENDER:$2|deleted}} on $PAGEEDITDATE by $2, see $3.",
-    "enotif_body_intro_created": "The {{SITENAME}} page $1 has been {{GENDER:$2|created}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
-    "enotif_body_intro_moved": "The {{SITENAME}} page $1 has been {{GENDER:$2|moved}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
-    "enotif_body_intro_restored": "The {{SITENAME}} page $1 has been {{GENDER:$2|restored}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
-    "enotif_body_intro_changed": "The {{SITENAME}} page $1 has been {{GENDER:$2|changed}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
-    "enotif_lastvisited": "See $1 for all changes since your last visit.",
-    "enotif_lastdiff": "See $1 to view this change.",
-    "enotif_anon_editor": "anonymous user $1",
-    "enotif_body": "Dear $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nEditor's summary: $PAGESUMMARY $PAGEMINOREDIT\n\nContact the editor:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nThere will be no other notifications in case of further activity unless you visit this page while logged in. You could also reset the notification flags for all your watched pages on your watchlist.\n\nYour friendly {{SITENAME}} notification system\n\n--\nTo change your email notification settings, visit\n{{canonicalurl:{{#special:Preferences}}}}\n\nTo change your watchlist settings, visit\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nTo delete the page from your watchlist, visit\n$UNWATCHURL\n\nFeedback and further assistance:\n$HELPPAGE",
-    "created": "created",
-    "changed": "changed",
-    "deletepage": "Delete page",
-    "confirm": "Confirm",
-    "excontent": "content was: \"$1\"",
-    "excontentauthor": "content was: \"$1\" (and the only contributor was \"[[Special:Contributions/$2|$2]]\")",
-    "exbeforeblank": "content before blanking was: \"$1\"",
-    "delete-confirm": "Delete \"$1\"",
-    "delete-legend": "Delete",
-    "historywarning": "<strong>Warning:</strong> The page you are about to delete has a history with approximately $1 {{PLURAL:$1|revision|revisions}}:",
-    "confirmdeletetext": "You are about to delete a page along with all of its history.\nPlease confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].",
-    "actioncomplete": "Action complete",
-    "actionfailed": "Action failed",
-    "deletedtext": "\"$1\" has been deleted.\nSee $2 for a record of recent deletions.",
-    "dellogpage": "Deletion log",
-    "dellogpagetext": "Below is a list of the most recent deletions.",
-    "deletionlog": "deletion log",
-    "reverted": "Reverted to earlier revision",
-    "deletecomment": "Reason:",
-    "deleteotherreason": "Other/additional reason:",
-    "deletereasonotherlist": "Other reason",
-    "deletereason-dropdown": "* Common delete reasons\n** Spam\n** Vandalism\n** Copyright violation\n** Author request\n** Broken redirect",
-    "delete-edit-reasonlist": "Edit deletion reasons",
-    "delete-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeletion of such pages has been restricted to prevent accidental disruption of {{SITENAME}}.",
-    "delete-warning-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeleting it may disrupt database operations of {{SITENAME}};\nproceed with caution.",
-    "deleting-backlinks-warning": "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.",
-    "rollback": "Roll back edits",
-    "rollback_short": "Rollback",
-    "rollbacklink": "rollback",
-    "rollbacklinkcount": "rollback $1 {{PLURAL:$1|edit|edits}}",
-    "rollbacklinkcount-morethan": "rollback more than $1 {{PLURAL:$1|edit|edits}}",
-    "rollbackfailed": "Rollback failed",
-    "cantrollback": "Cannot revert edit;\nlast contributor is only author of this page.",
-    "alreadyrolled": "Cannot rollback last edit of [[:$1]] by [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nsomeone else has edited or rolled back the page already.\n\nThe last edit to the page was by [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-    "editcomment": "The edit summary was: \"''$1''\".",
-    "revertpage": "Reverted edits by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) to last revision by [[User:$1|$1]]",
-    "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}",
-    "rollback-success": "Reverted edits by $1;\nchanged back to last revision by $2.",
-    "sessionfailure-title": "Session failure",
-    "sessionfailure": "There seems to be a problem with your login session;\nthis action has been canceled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
-    "protectlogpage": "Protection log",
-    "protectlogtext": "Below is a list of changes to page protections.\nSee the [[Special:ProtectedPages|protected pages list]] for the list of currently operational page protections.",
-    "protectedarticle": "protected \"[[$1]]\"",
-    "modifiedarticleprotection": "changed protection level for \"[[$1]]\"",
-    "unprotectedarticle": "removed protection from \"[[$1]]\"",
-    "movedarticleprotection": "moved protection settings from \"[[$2]]\" to \"[[$1]]\"",
-    "protect-title": "Change protection level for \"$1\"",
-    "protect-title-notallowed": "View protection level of \"$1\"",
-    "prot_1movedto2": "[[$1]] moved to [[$2]]",
-    "protect-badnamespace-title": "Non-protectable namespace",
-    "protect-badnamespace-text": "Pages in this namespace cannot be protected.",
-    "protect-norestrictiontypes-text": "This page cannot be protected as there are no restriction types available.",
-    "protect-norestrictiontypes-title": "Non-protectable page",
-    "protect-legend": "Confirm protection",
-    "protectcomment": "Reason:",
-    "protectexpiry": "Expires:",
-    "protect_expiry_invalid": "Expiry time is invalid.",
-    "protect_expiry_old": "Expiry time is in the past.",
-    "protect-unchain-permissions": "Unlock further protect options",
-    "protect-text": "Here you may view and change the protection level for the page <strong>$1</strong>.",
-    "protect-locked-blocked": "You cannot change protection levels while blocked.\nHere are the current settings for the page <strong>$1</strong>:",
-    "protect-locked-dblock": "Protection levels cannot be changed due to an active database lock.\nHere are the current settings for the page <strong>$1</strong>:",
-    "protect-locked-access": "Your account does not have permission to change page protection levels.\nHere are the current settings for the page <strong>$1</strong>:",
-    "protect-cascadeon": "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.\nChanges to this page's protection level will not affect the cascading protection.",
-    "protect-default": "Allow all users",
-    "protect-fallback": "Allow only users with \"$1\" permission",
-    "protect-level-autoconfirmed": "Allow only autoconfirmed users",
-    "protect-level-sysop": "Allow only administrators",
-    "protect-summary-desc": "[$1=$2] ($3)",
-    "protect-summary-cascade": "cascading",
-    "protect-expiring": "expires $1 (UTC)",
-    "protect-expiring-local": "expires $1",
-    "protect-expiry-indefinite": "indefinite",
-    "protect-cascade": "Protect pages included in this page (cascading protection)",
-    "protect-cantedit": "You cannot change the protection levels of this page because you do not have permission to edit it.",
-    "protect-othertime": "Other time:",
-    "protect-othertime-op": "other time",
-    "protect-existing-expiry": "Existing expiry time: $3, $2",
-    "protect-otherreason": "Other/additional reason:",
-    "protect-otherreason-op": "Other reason",
-    "protect-dropdown": "*Common protection reasons\n** Excessive vandalism\n** Excessive spamming\n** Counter-productive edit warring\n** High traffic page",
-    "protect-edit-reasonlist": "Edit protection reasons",
-    "protect-expiry-options": "1 hour:1 hour,1 day:1 day,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite",
-    "restriction-type": "Permission:",
-    "restriction-level": "Restriction level:",
-    "minimum-size": "Min size",
-    "maximum-size": "Max size:",
-    "pagesize": "(bytes)",
-    "restriction-edit": "Edit",
-    "restriction-move": "Move",
-    "restriction-create": "Create",
-    "restriction-upload": "Upload",
-    "restriction-level-sysop": "fully protected",
-    "restriction-level-autoconfirmed": "semi protected",
-    "restriction-level-all": "any level",
-    "undelete": "View deleted pages",
-    "undelete-summary": "",
-    "undeletepage": "View and restore deleted pages",
-    "undeletepagetitle": "<strong>The following consists of deleted revisions of [[:$1|$1]]</strong>.",
-    "viewdeletedpage": "View deleted pages",
-    "undeletepagetext": "The following {{PLURAL:$1|page has been deleted but is|$1 pages have been deleted but are}} still in the archive and can be restored.\nThe archive may be periodically cleaned out.",
-    "undelete-fieldset-title": "Restore revisions",
-    "undeleteextrahelp": "To restore the page's entire history, leave all checkboxes deselected and click <strong><em>{{int:undeletebtn}}</em></strong>.\nTo perform a selective restoration, check the boxes corresponding to the revisions to be restored, and click <strong><em>{{int:undeletebtn}}</em></strong>.",
-    "undeleterevisions": "$1 {{PLURAL:$1|revision|revisions}} archived",
-    "undeletehistory": "If you restore the page, all revisions will be restored to the history.\nIf a new page with the same name has been created since the deletion, the restored revisions will appear in the prior history.",
-    "undeleterevdel": "Undeletion will not be performed if it will result in the top page or file revision being partially deleted.\nIn such cases, you must uncheck or unhide the newest deleted revision.",
-    "undeletehistorynoadmin": "This page has been deleted.\nThe reason for deletion is shown in the summary below, along with details of the users who had edited this page before deletion.\nThe actual text of these deleted revisions is only available to administrators.",
-    "undelete-revision": "Deleted revision of $1 (as of $4, at $5) by $3:",
-    "undeleterevision-missing": "Invalid or missing revision.\nYou may have a bad link, or the revision may have been restored or removed from the archive.",
-    "undelete-nodiff": "No previous revision found.",
-    "undeletebtn": "Restore",
-    "undeletelink": "view/restore",
-    "undeleteviewlink": "view",
-    "undeleteinvert": "Invert selection",
-    "undeletecomment": "Reason:",
-    "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 revisions}} restored",
-    "undeletedrevisions-files": "{{PLURAL:$1|1 revision|$1 revisions}} and {{PLURAL:$2|1 file|$2 files}} restored",
-    "undeletedfiles": "{{PLURAL:$1|1 file|$1 files}} restored",
-    "cannotundelete": "Undelete failed:\n$1",
-    "undeletedpage": "<strong>$1 has been restored</strong>\n\nConsult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.",
-    "undelete-header": "See [[Special:Log/delete|the deletion log]] for recently deleted pages.",
-    "undelete-search-title": "Search deleted pages",
-    "undelete-search-box": "Search deleted pages",
-    "undelete-search-prefix": "Show pages starting with:",
-    "undelete-search-submit": "Search",
-    "undelete-no-results": "No matching pages found in the deletion archive.",
-    "undelete-filename-mismatch": "Cannot undelete file revision with timestamp $1: Filename mismatch.",
-    "undelete-bad-store-key": "Cannot undelete file revision with timestamp $1: File was missing before deletion.",
-    "undelete-cleanup-error": "Error deleting unused archive file \"$1\".",
-    "undelete-missing-filearchive": "Unable to restore file archive ID $1 because it is not in the database.\nIt may have already been undeleted.",
-    "undelete-error": "Error undeleting page",
-    "undelete-error-short": "Error undeleting file: $1",
-    "undelete-error-long": "Errors were encountered while undeleting the file:\n\n$1",
-    "undelete-show-file-confirm": "Are you sure you want to view the deleted revision of the file \"<nowiki>$1</nowiki>\" from $2 at $3?",
-    "undelete-show-file-submit": "Yes",
-    "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
-    "namespace": "Namespace:",
-    "invert": "Invert selection",
-    "tooltip-invert": "Check this box to hide changes to pages within the selected namespace (and the associated namespace if checked)",
-    "namespace_association": "Associated namespace",
-    "tooltip-namespace_association": "Check this box to also include the talk or subject namespace associated with the selected namespace",
-    "blanknamespace": "(Main)",
-    "contributions": "{{GENDER:$1|User}} contributions",
-    "contributions-summary": "",
-    "contributions-title": "User contributions for $1",
-    "mycontris": "Contributions",
-    "contribsub2": "For {{GENDER:$3|$1}} ($2)",
-    "contributions-userdoesnotexist": "User account \"$1\" is not registered.",
-    "nocontribs": "No changes were found matching these criteria.",
-    "uctop": "(current)",
-    "month": "From month (and earlier):",
-    "year": "From year (and earlier):",
-    "sp-contributions-newbies": "Show contributions of new accounts only",
-    "sp-contributions-newbies-sub": "For new accounts",
-    "sp-contributions-newbies-title": "User contributions for new accounts",
-    "sp-contributions-blocklog": "block log",
-    "sp-contributions-suppresslog": "suppressed user contributions",
-    "sp-contributions-deleted": "deleted user contributions",
-    "sp-contributions-uploads": "uploads",
-    "sp-contributions-logs": "logs",
-    "sp-contributions-talk": "talk",
-    "sp-contributions-userrights": "user rights management",
-    "sp-contributions-blocked-notice": "This user is currently blocked.\nThe latest block log entry is provided below for reference:",
-    "sp-contributions-blocked-notice-anon": "This IP address is currently blocked.\nThe latest block log entry is provided below for reference:",
-    "sp-contributions-search": "Search for contributions",
-    "sp-contributions-username": "IP address or username:",
-    "sp-contributions-toponly": "Only show edits that are latest revisions",
-    "sp-contributions-newonly": "Only show edits that are page creations",
-    "sp-contributions-submit": "Search",
-    "sp-contributions-explain": "",
-    "sp-contributions-footer": "-",
-    "sp-contributions-footer-anon": "-",
-    "sp-contributions-footer-newbies": "-",
-    "whatlinkshere": "What links here",
-    "whatlinkshere-title": "Pages that link to \"$1\"",
-    "whatlinkshere-summary": "",
-    "whatlinkshere-page": "Page:",
-    "linkshere": "The following pages link to <strong>[[:$1]]</strong>:",
-    "nolinkshere": "No pages link to <strong>[[:$1]]</strong>.",
-    "nolinkshere-ns": "No pages link to <strong>[[:$1]]</strong> in the chosen namespace.",
-    "isredirect": "redirect page",
-    "istemplate": "transclusion",
-    "isimage": "file link",
-    "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
-    "whatlinkshere-next": "{{PLURAL:$1|next|next $1}}",
-    "whatlinkshere-links": "← links",
-    "whatlinkshere-hideredirs": "$1 redirects",
-    "whatlinkshere-hidetrans": "$1 transclusions",
-    "whatlinkshere-hidelinks": "$1 links",
-    "whatlinkshere-hideimages": "$1 file links",
-    "whatlinkshere-filters": "Filters",
-    "autoblockid": "Autoblock #$1",
-    "block": "Block user",
-    "unblock": "Unblock user",
-    "unblock-summary": "",
-    "blockip": "Block user",
-    "blockip-legend": "Block user",
-    "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalized).",
-    "ipadressorusername": "IP address or username:",
-    "ipbexpiry": "Expiry:",
-    "ipbreason": "Reason:",
-    "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behavior/harassment\n** Abusing multiple accounts\n** Unacceptable username",
-    "ipb-hardblock": "Prevent logged-in users from editing from this IP address",
-    "ipbcreateaccount": "Prevent account creation",
-    "ipbemailban": "Prevent user from sending email",
-    "ipbenableautoblock": "Automatically block the last IP address used by this user, and any subsequent IP addresses they try to edit from",
-    "ipbsubmit": "Block this user",
-    "ipbother": "Other time:",
-    "ipboptions": "2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,indefinite:infinite",
-    "ipbhidename": "Hide username from edits and lists",
-    "ipbwatchuser": "Watch this user's user and talk pages",
-    "ipb-disableusertalk": "Prevent this user from editing their own talk page while blocked",
-    "ipb-change-block": "Re-block the user with these settings",
-    "ipb-confirm": "Confirm block",
-    "badipaddress": "Invalid IP address",
-    "blockipsuccesssub": "Block succeeded",
-    "blockipsuccesstext": "[[Special:Contributions/$1|$1]] has been blocked.<br />\nSee the [[Special:BlockList|block list]] to review blocks.",
-    "ipb-blockingself": "You are about to block yourself! Are you sure you want to do that?",
-    "ipb-confirmhideuser": "You are about to block a user with \"hide user\" enabled. This will suppress the user's name in all lists and log entries. Are you sure you want to do that?",
-    "ipb-confirmaction": "If you are sure you really want to do it, please check the \"{{int:ipb-confirm}}\" field at the bottom.",
-    "ipb-edit-dropdown": "Edit block reasons",
-    "ipb-unblock-addr": "Unblock $1",
-    "ipb-unblock": "Unblock a username or IP address",
-    "ipb-blocklist": "View existing blocks",
-    "ipb-blocklist-contribs": "Contributions for $1",
-    "unblockip": "Unblock user",
-    "unblockiptext": "Use the form below to restore write access to a previously blocked IP address or username.",
-    "ipusubmit": "Remove this block",
-    "unblocked": "[[User:$1|$1]] has been unblocked.",
-    "unblocked-range": "$1 has been unblocked.",
-    "unblocked-id": "Block $1 has been removed.",
-    "blocklist": "Blocked users",
-    "ipblocklist": "Blocked users",
-    "ipblocklist-legend": "Find a blocked user",
-    "blocklist-userblocks": "Hide account blocks",
-    "blocklist-tempblocks": "Hide temporary blocks",
-    "blocklist-addressblocks": "Hide single IP blocks",
-    "blocklist-rangeblocks": "Hide range blocks",
-    "blocklist-timestamp": "Timestamp",
-    "blocklist-target": "Target",
-    "blocklist-expiry": "Expires",
-    "blocklist-by": "Blocking admin",
-    "blocklist-params": "Block parameters",
-    "blocklist-reason": "Reason",
-    "blocklist-summary": "",
-    "ipblocklist-submit": "Search",
-    "ipblocklist-localblock": "Local block",
-    "ipblocklist-otherblocks": "Other {{PLURAL:$1|block|blocks}}",
-    "infiniteblock": "infinite",
-    "expiringblock": "expires on $1 at $2",
-    "anononlyblock": "anon. only",
-    "noautoblockblock": "autoblock disabled",
-    "createaccountblock": "account creation disabled",
-    "emailblock": "email disabled",
-    "blocklist-nousertalk": "cannot edit own talk page",
-    "ipblocklist-empty": "The block list is empty.",
-    "ipblocklist-no-results": "The requested IP address or username is not blocked.",
-    "blocklink": "block",
-    "unblocklink": "unblock",
-    "change-blocklink": "change block",
-    "contribslink": "contribs",
-    "emaillink": "send email",
-    "autoblocker": "Autoblocked because your IP address has been recently used by \"[[User:$1|$1]]\".\nThe reason given for $1's block is \"$2\"",
-    "blocklogpage": "Block log",
-    "blocklog-showlog": "This user has been blocked previously.\nThe block log is provided below for reference:",
-    "blocklog-showsuppresslog": "This user has been blocked and hidden previously.\nThe suppress log is provided below for reference:",
-    "blocklogentry": "blocked [[$1]] with an expiry time of $2 $3",
-    "reblock-logentry": "changed block settings for [[$1]] with an expiry time of $2 $3",
-    "blocklogtext": "This is a log of user blocking and unblocking actions.\nAutomatically blocked IP addresses are not listed.\nSee the [[Special:BlockList|block list]] for the list of currently operational bans and blocks.",
-    "unblocklogentry": "unblocked $1",
-    "block-log-flags-anononly": "anonymous users only",
-    "block-log-flags-nocreate": "account creation disabled",
-    "block-log-flags-noautoblock": "autoblock disabled",
-    "block-log-flags-noemail": "email disabled",
-    "block-log-flags-nousertalk": "cannot edit own talk page",
-    "block-log-flags-angry-autoblock": "enhanced autoblock enabled",
-    "block-log-flags-hiddenname": "username hidden",
-    "range_block_disabled": "The administrator ability to create range blocks is disabled.",
-    "ipb_expiry_invalid": "Expiry time invalid.",
-    "ipb_expiry_temp": "Hidden username blocks must be permanent.",
-    "ipb_hide_invalid": "Unable to suppress this account; it has more than {{PLURAL:$1|one edit|$1 edits}}.",
-    "ipb_already_blocked": "\"$1\" is already blocked.",
-    "ipb-needreblock": "$1 is already blocked. Do you want to change the settings?",
-    "ipb-otherblocks-header": "Other {{PLURAL:$1|block|blocks}}",
-    "unblock-hideuser": "You cannot unblock this user, as their username has been hidden.",
-    "ipb_cant_unblock": "Error: Block ID $1 not found. It may have been unblocked already.",
-    "ipb_blocked_as_range": "Error: The IP address $1 is not blocked directly and cannot be unblocked.\nIt is, however, blocked as part of the range $2, which can be unblocked.",
-    "ip_range_invalid": "Invalid IP range.",
-    "ip_range_toolarge": "Range blocks larger than /$1 are not allowed.",
-    "proxyblocker": "Proxy blocker",
-    "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organization and inform them of this serious security problem.",
-    "sorbs": "DNSBL",
-    "sorbsreason": "Your IP address is listed as an open proxy in the DNSBL used by {{SITENAME}}.",
-    "sorbs_create_account_reason": "Your IP address is listed as an open proxy in the DNSBL used by {{SITENAME}}.\nYou cannot create an account.",
-    "xffblockreason": "An IP address present in the X-Forwarded-For header, either yours or that of a proxy server you are using, has been blocked. The original block reason was: $1",
-    "cant-see-hidden-user": "The user you are trying to block has already been blocked and hidden.\nSince you do not have the hideuser right, you cannot see or edit the user's block.",
-    "ipbblocked": "You cannot block or unblock other users because you are yourself blocked.",
-    "ipbnounblockself": "You are not allowed to unblock yourself.",
-    "ipb-default-expiry": "",
-    "lockdb": "Lock database",
-    "unlockdb": "Unlock database",
-    "lockdbtext": "Locking the database will suspend the ability of all users to edit pages, change their preferences, edit their watchlists, and other things requiring changes in the database.\nPlease confirm that this is what you intend to do, and that you will unlock the database when your maintenance is done.",
-    "unlockdbtext": "Unlocking the database will restore the ability of all users to edit pages, change their preferences, edit their watchlists, and other things requiring changes in the database.\nPlease confirm that this is what you intend to do.",
-    "lockconfirm": "Yes, I really want to lock the database.",
-    "unlockconfirm": "Yes, I really want to unlock the database.",
-    "lockbtn": "Lock database",
-    "unlockbtn": "Unlock database",
-    "locknoconfirm": "You did not check the confirmation box.",
-    "lockdbsuccesssub": "Database lock succeeded",
-    "unlockdbsuccesssub": "Database lock removed",
-    "lockdbsuccesstext": "The database has been locked.<br />\nRemember to [[Special:UnlockDB|remove the lock]] after your maintenance is complete.",
-    "unlockdbsuccesstext": "The database has been unlocked.",
-    "lockfilenotwritable": "The database lock file is not writable.\nTo lock or unlock the database, this needs to be writable by the web server.",
-    "databasenotlocked": "The database is not locked.",
-    "lockedbyandtime": "(by {{GENDER:$1|$1}} on $2 at $3)",
-    "move-page": "Move $1",
-    "movepage-summary": "",
-    "move-page-legend": "Move page",
-    "movepagetext": "Using the form below will rename a page, moving all of its history to the new name.\nThe old title will become a redirect page to the new title.\nYou can update redirects that point to the original title automatically.\nIf you choose not to, be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].\nYou are responsible for making sure that links continue to point where they are supposed to go.\n\nNote that the page will <strong>not</strong> be moved if there is already a page at the new title, unless the latter is a redirect and has no past edit history.\nThis means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.\n\n<strong>Warning!</strong>\nThis can be a drastic and unexpected change for a popular page;\nplease be sure you understand the consequences of this before proceeding.",
-    "movepagetext-noredirectfixer": "Using the form below will rename a page, moving all of its history to the new name.\nThe old title will become a redirect page to the new title.\nBe sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].\nYou are responsible for making sure that links continue to point where they are supposed to go.\n\nNote that the page will <strong>not</strong> be moved if there is already a page at the new title, unless it is a redirect and has no past edit history.\nThis means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.\n\n<strong>Warning!</strong>\nThis can be a drastic and unexpected change for a popular page;\nplease be sure you understand the consequences of this before proceeding.",
-    "movepagetalktext": "The associated talk page will be automatically moved along with it <strong>unless:</strong>\n*A non-empty talk page already exists under the new name, or\n*You uncheck the box below.\n\nIn those cases, you will have to move or merge the page manually if desired.",
-    "movearticle": "Move page:",
-    "moveuserpage-warning": "<strong>Warning:</strong> You are about to move a user page. Please note that only the page will be moved and the user will <em>not</em> be renamed.",
-    "movenologintext": "You must be a registered user and [[Special:UserLogin|logged in]] to move a page.",
-    "movenotallowed": "You do not have permission to move pages.",
-    "movenotallowedfile": "You do not have permission to move files.",
-    "cant-move-user-page": "You do not have permission to move user pages (apart from subpages).",
-    "cant-move-to-user-page": "You do not have permission to move a page to a user page (except to a user subpage).",
-    "newtitle": "To new title:",
-    "move-watch": "Watch source page and target page",
-    "movepagebtn": "Move page",
-    "pagemovedsub": "Move succeeded",
-    "movepage-moved": "<strong>\"$1\" has been moved to \"$2\"</strong>",
-    "movepage-moved-redirect": "A redirect has been created.",
-    "movepage-moved-noredirect": "The creation of a redirect has been suppressed.",
-    "articleexists": "A page of that name already exists, or the name you have chosen is not valid.\nPlease choose another name.",
-    "cantmove-titleprotected": "You cannot move a page to this location because the new title has been protected from creation",
-    "movetalk": "Move associated talk page",
-    "move-subpages": "Move subpages (up to $1)",
-    "move-talk-subpages": "Move subpages of talk page (up to $1)",
-    "movepage-page-exists": "The page $1 already exists and cannot be automatically overwritten.",
-    "movepage-page-moved": "The page $1 has been moved to $2.",
-    "movepage-page-unmoved": "The page $1 could not be moved to $2.",
-    "movepage-max-pages": "The maximum of $1 {{PLURAL:$1|page|pages}} has been moved and no more will be moved automatically.",
-    "movelogpage": "Move log",
-    "movelogpagetext": "Below is a list of all page moves.",
-    "movesubpage": "{{PLURAL:$1|Subpage|Subpages}}",
-    "movesubpagetext": "This page has $1 {{PLURAL:$1|subpage|subpages}} shown below.",
-    "movenosubpage": "This page has no subpages.",
-    "movereason": "Reason:",
-    "move-redirect-text": "",
-    "revertmove": "revert",
-    "delete_and_move": "Delete and move",
-    "delete_and_move_text": "== Deletion required ==\nThe destination page \"[[:$1]]\" already exists.\nDo you want to delete it to make way for the move?",
-    "delete_and_move_confirm": "Yes, delete the page",
-    "delete_and_move_reason": "Deleted to make way for move from \"[[$1]]\"",
-    "selfmove": "Source and destination titles are the same;\ncannot move a page over itself.",
-    "immobile-source-namespace": "Cannot move pages in namespace \"$1\"",
-    "immobile-target-namespace": "Cannot move pages into namespace \"$1\"",
-    "immobile-target-namespace-iw": "Interwiki link is not a valid target for page move.",
-    "immobile-source-page": "This page is not movable.",
-    "immobile-target-page": "Cannot move to that destination title.",
-    "bad-target-model": "The desired destination uses a different content model. Cannot convert from $1 to $2.",
-    "imagenocrossnamespace": "Cannot move file to non-file namespace",
-    "nonfile-cannot-move-to-file": "Cannot move non-file to file namespace",
-    "imagetypemismatch": "The new file extension does not match its type",
-    "imageinvalidfilename": "The target filename is invalid",
-    "fix-double-redirects": "Update any redirects that point to the original title",
-    "move-leave-redirect": "Leave a redirect behind",
-    "protectedpagemovewarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can move it.\nThe latest log entry is provided below for reference:",
-    "semiprotectedpagemovewarning": "<strong>Note:</strong> This page has been protected so that only registered users can move it.\nThe latest log entry is provided below for reference:",
-    "move-over-sharedrepo": "== File exists ==\n[[:$1]] exists on a shared repository. Moving a file to this title will override the shared file.",
-    "file-exists-sharedrepo": "The filename chosen is already in use on a shared repository.\nPlease choose another name.",
-    "export": "Export pages",
-    "export-summary": "",
-    "exporttext": "You can export the text and editing history of a particular page or set of pages wrapped in some XML.\nThis can be imported into another wiki using MediaWiki via the [[Special:Import|import page]].\n\nTo export pages, enter the titles in the text box below, one title per line, and select whether you want the current revision as well as all old revisions, with the page history lines, or the current revision with the info about the last edit.\n\nIn the latter case you can also use a link, for example [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for the page \"[[{{MediaWiki:Mainpage}}]]\".",
-    "exportall": "Export all pages",
-    "exportcuronly": "Include only the current revision, not the full history",
-    "exportnohistory": "----\n<strong>Note:</strong> Exporting the full history of pages through this form has been disabled due to performance reasons.",
-    "exportlistauthors": "Include a full list of contributors for each page",
-    "export-submit": "Export",
-    "export-addcattext": "Add pages from category:",
-    "export-addcat": "Add",
-    "export-addnstext": "Add pages from namespace:",
-    "export-addns": "Add",
-    "export-download": "Save as file",
-    "export-templates": "Include templates",
-    "export-pagelinks": "Include linked pages to a depth of:",
-    "allmessages": "System messages",
-    "allmessagesname": "Name",
-    "allmessagesdefault": "Default message text",
-    "allmessagescurrent": "Current message text",
-    "allmessagestext": "This is a list of system messages available in the MediaWiki namespace.\nPlease visit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
-    "allmessagesnotsupportedDB": "This page cannot be used because <strong>$wgUseDatabaseMessages</strong> has been disabled.",
-    "allmessages-filter-legend": "Filter",
-    "allmessages-filter": "Filter by customization state:",
-    "allmessages-filter-unmodified": "Unmodified",
-    "allmessages-filter-all": "All",
-    "allmessages-filter-modified": "Modified",
-    "allmessages-prefix": "Filter by prefix:",
-    "allmessages-language": "Language:",
-    "allmessages-filter-submit": "Go",
-    "allmessages-filter-translate": "Translate",
-    "thumbnail-more": "Enlarge",
-    "filemissing": "File missing",
-    "thumbnail_error": "Error creating thumbnail: $1",
-    "thumbnail_error_remote": "Error message from $1:\n$2",
-    "djvu_page_error": "DjVu page out of range",
-    "djvu_no_xml": "Unable to fetch XML for DjVu file",
-    "thumbnail-temp-create": "Unable to create temporary thumbnail file",
-    "thumbnail-dest-create": "Unable to save thumbnail to destination",
-    "thumbnail_invalid_params": "Invalid thumbnail parameters",
-    "thumbnail_dest_directory": "Unable to create destination directory",
-    "thumbnail_image-type": "Image type not supported",
-    "thumbnail_gd-library": "Incomplete GD library configuration: Missing function $1",
-    "thumbnail_image-missing": "File seems to be missing: $1",
-    "thumbnail_image-failure-limit": "There have been too many recent failed attempts ($1 or more) to render this thumbnail. Please try again later.",
-    "import": "Import pages",
-    "import-summary": "",
-    "importinterwiki": "Transwiki import",
-    "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll transwiki import actions are logged at the [[Special:Log/import|import log]].",
-    "import-interwiki-source": "Source wiki/page:",
-    "import-interwiki-history": "Copy all history revisions for this page",
-    "import-interwiki-templates": "Include all templates",
-    "import-interwiki-submit": "Import",
-    "import-interwiki-namespace": "Destination namespace:",
-    "import-interwiki-rootpage": "Destination root page (optional):",
-    "import-upload-filename": "Filename:",
-    "import-comment": "Comment:",
-    "importtext": "Please export the file from the source wiki using the [[Special:Export|export utility]].\nSave it to your computer and upload it here.",
-    "importstart": "Importing pages...",
-    "import-revision-count": "$1 {{PLURAL:$1|revision|revisions}}",
-    "importnopages": "No pages to import.",
-    "imported-log-entries": "Imported $1 {{PLURAL:$1|log entry|log entries}}.",
-    "importfailed": "Import failed: <nowiki>$1</nowiki>",
-    "importunknownsource": "Unknown import source type",
-    "importcantopen": "Could not open import file",
-    "importbadinterwiki": "Bad interwiki link",
-    "importsuccess": "Import finished!",
-    "importnosources": "No transwiki import sources have been defined and direct history uploads are disabled.",
-    "importnofile": "No import file was uploaded.",
-    "importuploaderrorsize": "Upload of import file failed.\nThe file is bigger than the allowed upload size.",
-    "importuploaderrorpartial": "Upload of import file failed.\nThe file was only partially uploaded.",
-    "importuploaderrortemp": "Upload of import file failed.\nA temporary folder is missing.",
-    "import-parse-failure": "XML import parse failure",
-    "import-noarticle": "No page to import!",
-    "import-nonewrevisions": "No revisions imported (all were either already present, or skipped due to errors).",
-    "xml-error-string": "$1 at line $2, col $3 (byte $4): $5",
-    "import-upload": "Upload XML data",
-    "import-token-mismatch": "Loss of session data.\nPlease try again.",
-    "import-invalid-interwiki": "Cannot import from the specified wiki.",
-    "import-error-edit": "Page \"$1\" is not imported because you are not allowed to edit it.",
-    "import-error-create": "Page \"$1\" is not imported because you are not allowed to create it.",
-    "import-error-interwiki": "Page \"$1\" is not imported because its name is reserved for external linking (interwiki).",
-    "import-error-special": "Page \"$1\" is not imported because it belongs to a special namespace that does not allow pages.",
-    "import-error-invalid": "Page \"$1\" is not imported because its name is invalid.",
-    "import-error-unserialize": "Revision $2 of page \"$1\" could not be unserialized. The revision was reported to use content model $3 serialized as $4.",
-    "import-error-bad-location": "Revision $2 using content model $3 cannot be stored on \"$1\" on this wiki, since that model is not supported on that page.",
-    "import-options-wrong": "Wrong {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>",
-    "import-rootpage-invalid": "Given root page is an invalid title.",
-    "import-rootpage-nosubpage": "Namespace \"$1\" of the root page does not allow subpages.",
-    "importlogpage": "Import log",
-    "importlogpagetext": "Administrative imports of pages with edit history from other wikis.",
-    "import-logentry-upload": "imported [[$1]] by file upload",
-    "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision|revisions}}",
-    "import-logentry-interwiki": "transwikied $1",
-    "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision|revisions}} from $2",
-    "javascripttest": "JavaScript testing",
-    "javascripttest-backlink": "< $1",
-    "javascripttest-title": "Running $1 tests",
-    "javascripttest-pagetext-noframework": "This page is reserved for running JavaScript tests.",
-    "javascripttest-pagetext-unknownframework": "Unknown testing framework \"$1\".",
-    "javascripttest-pagetext-frameworks": "Please choose one of the following testing frameworks: $1",
-    "javascripttest-pagetext-skins": "Choose a skin to run the tests with:",
-    "javascripttest-qunit-name": "QUnit",
-    "javascripttest-qunit-intro": "See [$1 testing documentation] on mediawiki.org.",
-    "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
-    "accesskey-pt-userpage": ".",
-    "accesskey-pt-anonuserpage": ".",
-    "accesskey-pt-mytalk": "n",
-    "accesskey-pt-anontalk": "n",
-    "accesskey-pt-preferences": "",
-    "accesskey-pt-watchlist": "l",
-    "accesskey-pt-mycontris": "y",
-    "accesskey-pt-login": "o",
-    "accesskey-pt-logout": "",
-    "accesskey-ca-talk": "t",
-    "accesskey-ca-edit": "e",
-    "accesskey-ca-addsection": "+",
-    "accesskey-ca-viewsource": "e",
-    "accesskey-ca-history": "h",
-    "accesskey-ca-protect": "=",
-    "accesskey-ca-unprotect": "=",
-    "accesskey-ca-delete": "d",
-    "accesskey-ca-undelete": "d",
-    "accesskey-ca-move": "m",
-    "accesskey-ca-watch": "w",
-    "accesskey-ca-unwatch": "w",
-    "accesskey-search": "f",
-    "accesskey-search-go": "",
-    "accesskey-search-fulltext": "",
-    "accesskey-p-logo": "",
-    "accesskey-n-mainpage": "z",
-    "accesskey-n-mainpage-description": "z",
-    "accesskey-n-portal": "",
-    "accesskey-n-currentevents": "",
-    "accesskey-n-recentchanges": "r",
-    "accesskey-n-randompage": "x",
-    "accesskey-n-help": "",
-    "accesskey-t-whatlinkshere": "j",
-    "accesskey-t-recentchangeslinked": "k",
-    "accesskey-feed-rss": "",
-    "accesskey-feed-atom": "",
-    "accesskey-t-contributions": "",
-    "accesskey-t-emailuser": "",
-    "accesskey-t-permalink": "",
-    "accesskey-t-print": "p",
-    "accesskey-t-upload": "u",
-    "accesskey-t-specialpages": "q",
-    "accesskey-ca-nstab-main": "c",
-    "accesskey-ca-nstab-user": "c",
-    "accesskey-ca-nstab-media": "c",
-    "accesskey-ca-nstab-special": "",
-    "accesskey-ca-nstab-project": "a",
-    "accesskey-ca-nstab-image": "c",
-    "accesskey-ca-nstab-mediawiki": "c",
-    "accesskey-ca-nstab-template": "c",
-    "accesskey-ca-nstab-help": "c",
-    "accesskey-ca-nstab-category": "c",
-    "accesskey-minoredit": "i",
-    "accesskey-save": "s",
-    "accesskey-preview": "p",
-    "accesskey-diff": "v",
-    "accesskey-compareselectedversions": "v",
-    "accesskey-watch": "w",
-    "accesskey-upload": "s",
-    "accesskey-preferences-save": "s",
-    "accesskey-summary": "b",
-    "accesskey-userrights-set": "s",
-    "accesskey-blockip-block": "s",
-    "accesskey-export": "s",
-    "accesskey-import": "s",
-    "accesskey-watchlistedit-normal-submit": "s",
-    "accesskey-watchlistedit-raw-submit": "s",
-    "tooltip-pt-userpage": "Your user page",
-    "tooltip-pt-anonuserpage": "The user page for the IP address you are editing as",
-    "tooltip-pt-mytalk": "Your talk page",
-    "tooltip-pt-anontalk": "Discussion about edits from this IP address",
-    "tooltip-pt-preferences": "Your preferences",
-    "tooltip-pt-watchlist": "A list of pages you are monitoring for changes",
-    "tooltip-pt-mycontris": "A list of your contributions",
-    "tooltip-pt-login": "You are encouraged to log in; however, it is not mandatory",
-    "tooltip-pt-logout": "Log out",
-    "tooltip-ca-talk": "Discussion about the content page",
-    "tooltip-ca-edit": "You can edit this page. Please use the preview button before saving",
-    "tooltip-ca-addsection": "Start a new section",
-    "tooltip-ca-viewsource": "This page is protected.\nYou can view its source",
-    "tooltip-ca-history": "Past revisions of this page",
-    "tooltip-ca-protect": "Protect this page",
-    "tooltip-ca-unprotect": "Change protection of this page",
-    "tooltip-ca-delete": "Delete this page",
-    "tooltip-ca-undelete": "Restore the edits done to this page before it was deleted",
-    "tooltip-ca-move": "Move this page",
-    "tooltip-ca-watch": "Add this page to your watchlist",
-    "tooltip-ca-unwatch": "Remove this page from your watchlist",
-    "tooltip-search": "Search {{SITENAME}}",
-    "tooltip-search-go": "Go to a page with this exact name if exists",
-    "tooltip-search-fulltext": "Search the pages for this text",
-    "tooltip-p-logo": "Visit the main page",
-    "tooltip-n-mainpage": "Visit the main page",
-    "tooltip-n-mainpage-description": "Visit the main page",
-    "tooltip-n-portal": "About the project, what you can do, where to find things",
-    "tooltip-n-currentevents": "Find background information on current events",
-    "tooltip-n-recentchanges": "A list of recent changes in the wiki",
-    "tooltip-n-randompage": "Load a random page",
-    "tooltip-n-help": "The place to find out",
-    "tooltip-t-whatlinkshere": "A list of all wiki pages that link here",
-    "tooltip-t-recentchangeslinked": "Recent changes in pages linked from this page",
-    "tooltip-feed-rss": "RSS feed for this page",
-    "tooltip-feed-atom": "Atom feed for this page",
-    "tooltip-t-contributions": "A list of contributions of this user",
-    "tooltip-t-emailuser": "Send an email to this user",
-    "tooltip-t-upload": "Upload files",
-    "tooltip-t-specialpages": "A list of all special pages",
-    "tooltip-t-print": "Printable version of this page",
-    "tooltip-t-permalink": "Permanent link to this revision of the page",
-    "tooltip-ca-nstab-main": "View the content page",
-    "tooltip-ca-nstab-user": "View the user page",
-    "tooltip-ca-nstab-media": "View the media page",
-    "tooltip-ca-nstab-special": "This is a special page, you cannot edit the page itself",
-    "tooltip-ca-nstab-project": "View the project page",
-    "tooltip-ca-nstab-image": "View the file page",
-    "tooltip-ca-nstab-mediawiki": "View the system message",
-    "tooltip-ca-nstab-template": "View the template",
-    "tooltip-ca-nstab-help": "View the help page",
-    "tooltip-ca-nstab-category": "View the category page",
-    "tooltip-minoredit": "Mark this as a minor edit",
-    "tooltip-save": "Save your changes",
-    "tooltip-preview": "Preview your changes, please use this before saving!",
-    "tooltip-diff": "Show which changes you made to the text",
-    "tooltip-compareselectedversions": "See the differences between the two selected revisions of this page",
-    "tooltip-watch": "Add this page to your watchlist",
-    "tooltip-watchlistedit-normal-submit": "Remove titles",
-    "tooltip-watchlistedit-raw-submit": "Update watchlist",
-    "tooltip-recreate": "Recreate the page even though it has been deleted",
-    "tooltip-upload": "Start upload",
-    "tooltip-rollback": "\"Rollback\" reverts edit(s) to this page of the last contributor in one click",
-    "tooltip-undo": "\"Undo\" reverts this edit and opens the edit form in preview mode. It allows adding a reason in the summary.",
-    "tooltip-preferences-save": "Save preferences",
-    "tooltip-summary": "Enter a short summary",
-    "interlanguage-link-title": "$1 – $2",
-    "interlanguage-link-title-langonly": "$1",
-    "common.css": "/* CSS placed here will be applied to all skins */",
-    "cologneblue.css": "/* CSS placed here will affect users of the Cologne Blue skin */",
-    "monobook.css": "/* CSS placed here will affect users of the MonoBook skin */",
-    "modern.css": "/* CSS placed here will affect users of the Modern skin */",
-    "vector.css": "/* CSS placed here will affect users of the Vector skin */",
-    "print.css": "/* CSS placed here will affect the print output */",
-    "noscript.css": "/* CSS placed here will affect users with JavaScript disabled */",
-    "group-autoconfirmed.css": "/* CSS placed here will affect autoconfirmed users only */",
-    "group-user.css": "/* CSS placed here will affect registered users only */",
-    "group-bot.css": "/* CSS placed here will affect bots only */",
-    "group-sysop.css": "/* CSS placed here will affect sysops only */",
-    "group-bureaucrat.css": "/* CSS placed here will affect bureaucrats only */",
-    "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
-    "cologneblue.js": "/* Any JavaScript here will be loaded for users using the Cologne Blue skin */",
-    "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */",
-    "modern.js": "/* Any JavaScript here will be loaded for users using the Modern skin */",
-    "vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
-    "group-autoconfirmed.js": "/* Any JavaScript here will be loaded for autoconfirmed users only */",
-    "group-user.js": "/* Any JavaScript here will be loaded for registered users only */",
-    "group-bot.js": "/* Any JavaScript here will be loaded for bots only */",
-    "group-sysop.js": "/* Any JavaScript here will be loaded for sysops only */",
-    "group-bureaucrat.js": "/* Any JavaScript here will be loaded for bureaucrats only */",
-    "anonymous": "Anonymous {{PLURAL:$1|user|users}} of {{SITENAME}}",
-    "siteuser": "{{SITENAME}} user $1",
-    "anonuser": "{{SITENAME}} anonymous user $1",
-    "lastmodifiedatby": "This page was last modified $2, $1 by $3.",
-    "othercontribs": "Based on work by $1.",
-    "others": "others",
-    "siteusers": "{{SITENAME}} {{PLURAL:$2|user|users}} $1",
-    "anonusers": "{{SITENAME}} anonymous {{PLURAL:$2|user|users}} $1",
-    "creditspage": "Page credits",
-    "nocredits": "There is no credits info available for this page.",
-    "spamprotectiontitle": "Spam protection filter",
-    "spamprotectiontext": "The text you wanted to save was blocked by the spam filter.\nThis is probably caused by a link to a blacklisted external site.",
-    "spamprotectionmatch": "The following text is what triggered our spam filter: $1",
-    "spambot_username": "MediaWiki spam cleanup",
-    "spam_reverting": "Reverting to last revision not containing links to $1",
-    "spam_blanking": "All revisions contained links to $1, blanking",
-    "spam_deleting": "All revisions contained links to $1, deleting",
-    "simpleantispam-label": "Anti-spam check.\nDo <strong>NOT</strong> fill this in!",
-    "pageinfo-header": "-",
-    "pageinfo-title": "Information for \"$1\"",
-    "pageinfo-not-current": "Sorry, it's impossible to provide this information for old revisions.",
-    "pageinfo-header-basic": "Basic information",
-    "pageinfo-header-edits": "Edit history",
-    "pageinfo-header-restrictions": "Page protection",
-    "pageinfo-header-properties": "Page properties",
-    "pageinfo-display-title": "Display title",
-    "pageinfo-default-sort": "Default sort key",
-    "pageinfo-length": "Page length (in bytes)",
-    "pageinfo-article-id": "Page ID",
-    "pageinfo-language": "Page content language",
-    "pageinfo-content-model": "Page content model",
-    "pageinfo-robot-policy": "Indexing by robots",
-    "pageinfo-robot-index": "Allowed",
-    "pageinfo-robot-noindex": "Disallowed",
-    "pageinfo-views": "Number of views",
-    "pageinfo-watchers": "Number of page watchers",
-    "pageinfo-few-watchers": "Fewer than $1 {{PLURAL:$1|watcher|watchers}}",
-    "pageinfo-redirects-name": "Number of redirects to this page",
-    "pageinfo-redirects-value": "$1",
-    "pageinfo-subpages-name": "Number of subpages of this page",
-    "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})",
-    "pageinfo-firstuser": "Page creator",
-    "pageinfo-firsttime": "Date of page creation",
-    "pageinfo-lastuser": "Latest editor",
-    "pageinfo-lasttime": "Date of latest edit",
-    "pageinfo-edits": "Total number of edits",
-    "pageinfo-authors": "Total number of distinct authors",
-    "pageinfo-recent-edits": "Recent number of edits (within past $1)",
-    "pageinfo-recent-authors": "Recent number of distinct authors",
-    "pageinfo-magic-words": "Magic {{PLURAL:$1|word|words}} ($1)",
-    "pageinfo-hidden-categories": "Hidden {{PLURAL:$1|category|categories}} ($1)",
-    "pageinfo-templates": "Transcluded {{PLURAL:$1|template|templates}} ($1)",
-    "pageinfo-transclusions": "{{PLURAL:$1|Page|Pages}} transcluded on ($1)",
-    "pageinfo-footer": "-",
-    "pageinfo-toolboxlink": "Page information",
-    "pageinfo-redirectsto": "Redirects to",
-    "pageinfo-redirectsto-info": "info",
-    "pageinfo-contentpage": "Counted as a content page",
-    "pageinfo-contentpage-yes": "Yes",
-    "pageinfo-protect-cascading": "Protections are cascading from here",
-    "pageinfo-protect-cascading-yes": "Yes",
-    "pageinfo-protect-cascading-from": "Protections are cascading from",
-    "pageinfo-category-info": "Category information",
-    "pageinfo-category-pages": "Number of pages",
-    "pageinfo-category-subcats": "Number of subcategories",
-    "pageinfo-category-files": "Number of files",
-    "skinname-cologneblue": "Cologne Blue",
-    "skinname-monobook": "MonoBook",
-    "skinname-modern": "Modern",
-    "skinname-vector": "Vector",
-    "markaspatrolleddiff": "Mark as patrolled",
-    "markaspatrolledlink": "[$1]",
-    "markaspatrolledtext": "Mark this page as patrolled",
-    "markedaspatrolled": "Marked as patrolled",
-    "markedaspatrolledtext": "The selected revision of [[:$1]] has been marked as patrolled.",
-    "rcpatroldisabled": "Recent changes patrol disabled",
-    "rcpatroldisabledtext": "The recent changes patrol feature is currently disabled.",
-    "markedaspatrollederror": "Cannot mark as patrolled",
-    "markedaspatrollederrortext": "You need to specify a revision to mark as patrolled.",
-    "markedaspatrollederror-noautopatrol": "You are not allowed to mark your own changes as patrolled.",
-    "markedaspatrollednotify": "This change to $1 has been marked as patrolled.",
-    "markedaspatrollederrornotify": "Marking as patrolled failed.",
-    "patrol-log-page": "Patrol log",
-    "patrol-log-header": "This is a log of patrolled revisions.",
-    "log-show-hide-patrol": "$1 patrol log",
-    "deletedrevision": "Deleted old revision $1",
-    "filedeleteerror-short": "Error deleting file: $1",
-    "filedeleteerror-long": "Errors were encountered while deleting the file:\n\n$1",
-    "filedelete-missing": "The file \"$1\" cannot be deleted because it does not exist.",
-    "filedelete-old-unregistered": "The specified file revision \"$1\" is not in the database.",
-    "filedelete-current-unregistered": "The specified file \"$1\" is not in the database.",
-    "filedelete-archive-read-only": "The archive directory \"$1\" is not writable by the webserver.",
-    "previousdiff": "← Older edit",
-    "nextdiff": "Newer edit →",
-    "mediawarning": "<strong>Warning:</strong> This file type may contain malicious code.\nBy executing it, your system may be compromised.",
-    "imagemaxsize": "Image size limit:<br /><em>(for file description pages)</em>",
-    "thumbsize": "Thumbnail size:",
-    "widthheight": "$1 × $2",
-    "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|page|pages}}",
-    "file-info": "file size: $1, MIME type: $2",
-    "file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
-    "file-info-size-pages": "$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}",
-    "file-nohires": "No higher resolution available.",
-    "svg-long-desc": "SVG file, nominally $1 × $2 pixels, file size: $3",
-    "svg-long-desc-animated": "Animated SVG file, nominally $1 × $2 pixels, file size: $3",
-    "svg-long-error": "Invalid SVG file: $1",
-    "show-big-image": "Original file",
-    "show-big-image-preview": "Size of this preview: $1.",
-    "show-big-image-other": "Other {{PLURAL:$2|resolution|resolutions}}: $1.",
-    "show-big-image-size": "$1 × $2 pixels",
-    "file-info-gif-looped": "looped",
-    "file-info-gif-frames": "$1 {{PLURAL:$1|frame|frames}}",
-    "file-info-png-looped": "looped",
-    "file-info-png-repeat": "played $1 {{PLURAL:$1|time|times}}",
-    "file-info-png-frames": "$1 {{PLURAL:$1|frame|frames}}",
-    "file-no-thumb-animation": "<strong>Note: Due to technical limitations, thumbnails of this file will not be animated.</strong>",
-    "file-no-thumb-animation-gif": "<strong>Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.</strong>",
-    "newimages": "Gallery of new files",
-    "newimagestext": "-",
-    "imagelisttext": "Below is a list of <strong>$1</strong> {{PLURAL:$1|file|files}} sorted $2.",
-    "newimages-summary": "This special page shows the last uploaded files.",
-    "newimages-legend": "Filter",
-    "newimages-label": "Filename (or a part of it):",
-    "showhidebots": "($1 bots)",
-    "noimages": "Nothing to see.",
-    "ilsubmit": "Search",
-    "bydate": "by date",
-    "sp-newimages-showfrom": "Show new files starting from $2, $1",
-    "video-dims": "$1, $2 × $3",
-    "seconds-abbrev": "$1 s",
-    "minutes-abbrev": "$1 min",
-    "hours-abbrev": "$1 h",
-    "days-abbrev": "$1 d",
-    "seconds": "{{PLURAL:$1|$1 second|$1 seconds}}",
-    "minutes": "{{PLURAL:$1|$1 minute|$1 minutes}}",
-    "hours": "{{PLURAL:$1|$1 hour|$1 hours}}",
-    "days": "{{PLURAL:$1|$1 day|$1 days}}",
-    "weeks": "{{PLURAL:$1|$1 week|$1 weeks}}",
-    "months": "{{PLURAL:$1|$1 month|$1 months}}",
-    "years": "{{PLURAL:$1|$1 year|$1 years}}",
-    "ago": "$1 ago",
-    "just-now": "just now",
-    "hours-ago": "$1 {{PLURAL:$1|hour|hours}} ago",
-    "minutes-ago": "$1 {{PLURAL:$1|minute|minutes}} ago",
-    "seconds-ago": "$1 {{PLURAL:$1|second|seconds}} ago",
-    "monday-at": "Monday at $1",
-    "tuesday-at": "Tuesday at $1",
-    "wednesday-at": "Wednesday at $1",
-    "thursday-at": "Thursday at $1",
-    "friday-at": "Friday at $1",
-    "saturday-at": "Saturday at $1",
-    "sunday-at": "Sunday at $1",
-    "today-at": "$1",
-    "yesterday-at": "Yesterday at $1",
-    "bad_image_list": "The format is as follows:\n\nOnly list items (lines starting with *) are considered.\nThe first link on a line must be a link to a bad file.\nAny subsequent links on the same line are considered to be exceptions, i.e. pages where the file may occur inline.",
-    "variantname-zh-hans": "hans",
-    "variantname-zh-hant": "hant",
-    "variantname-zh-cn": "cn",
-    "variantname-zh-tw": "tw",
-    "variantname-zh-hk": "hk",
-    "variantname-zh-mo": "mo",
-    "variantname-zh-sg": "sg",
-    "variantname-zh-my": "my",
-    "variantname-zh": "zh",
-    "variantname-gan-hans": "hans",
-    "variantname-gan-hant": "hant",
-    "variantname-gan": "gan",
-    "variantname-sr-ec": "sr-ec",
-    "variantname-sr-el": "sr-el",
-    "variantname-sr": "sr",
-    "variantname-kk-kz": "kk-kz",
-    "variantname-kk-tr": "kk-tr",
-    "variantname-kk-cn": "kk-cn",
-    "variantname-kk-cyrl": "kk-cyrl",
-    "variantname-kk-latn": "kk-latn",
-    "variantname-kk-arab": "kk-arab",
-    "variantname-kk": "kk",
-    "variantname-ku-arab": "ku-Arab",
-    "variantname-ku-latn": "ku-Latn",
-    "variantname-ku": "ku",
-    "variantname-tg-cyrl": "tg-Cyrl",
-    "variantname-tg-latn": "tg-Latn",
-    "variantname-tg": "tg",
-    "variantname-ike-cans": "ike-Cans",
-    "variantname-ike-latn": "ike-Latn",
-    "variantname-iu": "iu",
-    "variantname-shi-tfng": "shi-Tfng",
-    "variantname-shi-latn": "shi-Latn",
-    "variantname-shi": "shi",
-    "metadata": "Metadata",
-    "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
-    "metadata-expand": "Show extended details",
-    "metadata-collapse": "Hide extended details",
-    "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
-    "metadata-langitem": "<strong>$2:</strong> $1",
-    "metadata-langitem-default": "$1",
-    "exif-imagewidth": "Width",
-    "exif-imagelength": "Height",
-    "exif-bitspersample": "Bits per component",
-    "exif-compression": "Compression scheme",
-    "exif-photometricinterpretation": "Pixel composition",
-    "exif-orientation": "Orientation",
-    "exif-samplesperpixel": "Number of components",
-    "exif-planarconfiguration": "Data arrangement",
-    "exif-ycbcrsubsampling": "Subsampling ratio of Y to C",
-    "exif-ycbcrpositioning": "Y and C positioning",
-    "exif-xresolution": "Horizontal resolution",
-    "exif-yresolution": "Vertical resolution",
-    "exif-stripoffsets": "Image data location",
-    "exif-rowsperstrip": "Number of rows per strip",
-    "exif-stripbytecounts": "Bytes per compressed strip",
-    "exif-jpeginterchangeformat": "Offset to JPEG SOI",
-    "exif-jpeginterchangeformatlength": "Bytes of JPEG data",
-    "exif-whitepoint": "White point chromaticity",
-    "exif-primarychromaticities": "Chromaticities of primarities",
-    "exif-ycbcrcoefficients": "Color space transformation matrix coefficients",
-    "exif-referenceblackwhite": "Pair of black and white reference values",
-    "exif-datetime": "File change date and time",
-    "exif-imagedescription": "Image title",
-    "exif-make": "Camera manufacturer",
-    "exif-model": "Camera model",
-    "exif-software": "Software used",
-    "exif-artist": "Author",
-    "exif-copyright": "Copyright holder",
-    "exif-exifversion": "Exif version",
-    "exif-flashpixversion": "Supported Flashpix version",
-    "exif-colorspace": "Color space",
-    "exif-componentsconfiguration": "Meaning of each component",
-    "exif-compressedbitsperpixel": "Image compression mode",
-    "exif-pixelydimension": "Image width",
-    "exif-pixelxdimension": "Image height",
-    "exif-usercomment": "User comments",
-    "exif-relatedsoundfile": "Related audio file",
-    "exif-datetimeoriginal": "Date and time of data generation",
-    "exif-datetimedigitized": "Date and time of digitizing",
-    "exif-subsectime": "DateTime subseconds",
-    "exif-subsectimeoriginal": "DateTimeOriginal subseconds",
-    "exif-subsectimedigitized": "DateTimeDigitized subseconds",
-    "exif-exposuretime": "Exposure time",
-    "exif-exposuretime-format": "$1 sec ($2)",
-    "exif-fnumber": "F Number",
-    "exif-fnumber-format": "f/$1",
-    "exif-exposureprogram": "Exposure Program",
-    "exif-spectralsensitivity": "Spectral sensitivity",
-    "exif-isospeedratings": "ISO speed rating",
-    "exif-shutterspeedvalue": "APEX shutter speed",
-    "exif-aperturevalue": "APEX aperture",
-    "exif-brightnessvalue": "APEX brightness",
-    "exif-exposurebiasvalue": "APEX exposure bias",
-    "exif-maxaperturevalue": "Maximum land aperture",
-    "exif-subjectdistance": "Subject distance",
-    "exif-meteringmode": "Metering mode",
-    "exif-lightsource": "Light source",
-    "exif-flash": "Flash",
-    "exif-focallength": "Lens focal length",
-    "exif-focallength-format": "$1 mm",
-    "exif-subjectarea": "Subject area",
-    "exif-flashenergy": "Flash energy",
-    "exif-focalplanexresolution": "Focal plane X resolution",
-    "exif-focalplaneyresolution": "Focal plane Y resolution",
-    "exif-focalplaneresolutionunit": "Focal plane resolution unit",
-    "exif-subjectlocation": "Subject location",
-    "exif-exposureindex": "Exposure index",
-    "exif-sensingmethod": "Sensing method",
-    "exif-filesource": "File source",
-    "exif-scenetype": "Scene type",
-    "exif-customrendered": "Custom image processing",
-    "exif-exposuremode": "Exposure mode",
-    "exif-whitebalance": "White balance",
-    "exif-digitalzoomratio": "Digital zoom ratio",
-    "exif-focallengthin35mmfilm": "Focal length in 35 mm film",
-    "exif-scenecapturetype": "Scene capture type",
-    "exif-gaincontrol": "Scene control",
-    "exif-contrast": "Contrast",
-    "exif-saturation": "Saturation",
-    "exif-sharpness": "Sharpness",
-    "exif-devicesettingdescription": "Device settings description",
-    "exif-subjectdistancerange": "Subject distance range",
-    "exif-imageuniqueid": "Unique image ID",
-    "exif-gpsversionid": "GPS tag version",
-    "exif-gpslatituderef": "North or south latitude",
-    "exif-gpslatitude": "Latitude",
-    "exif-gpslongituderef": "East or west longitude",
-    "exif-gpslongitude": "Longitude",
-    "exif-gpsaltituderef": "Altitude reference",
-    "exif-gpsaltitude": "Altitude",
-    "exif-gpstimestamp": "GPS time (atomic clock)",
-    "exif-gpssatellites": "Satellites used for measurement",
-    "exif-gpsstatus": "Receiver status",
-    "exif-gpsmeasuremode": "Measurement mode",
-    "exif-gpsdop": "Measurement precision",
-    "exif-gpsspeedref": "Speed unit",
-    "exif-gpsspeed": "Speed of GPS receiver",
-    "exif-gpstrackref": "Reference for direction of movement",
-    "exif-gpstrack": "Direction of movement",
-    "exif-gpsimgdirectionref": "Reference for direction of image",
-    "exif-gpsimgdirection": "Direction of image",
-    "exif-gpsmapdatum": "Geodetic survey data used",
-    "exif-gpsdestlatituderef": "Reference for latitude of destination",
-    "exif-gpsdestlatitude": "Latitude destination",
-    "exif-gpsdestlongituderef": "Reference for longitude of destination",
-    "exif-gpsdestlongitude": "Longitude of destination",
-    "exif-gpsdestbearingref": "Reference for bearing of destination",
-    "exif-gpsdestbearing": "Bearing of destination",
-    "exif-gpsdestdistanceref": "Reference for distance to destination",
-    "exif-gpsdestdistance": "Distance to destination",
-    "exif-gpsprocessingmethod": "Name of GPS processing method",
-    "exif-gpsareainformation": "Name of GPS area",
-    "exif-gpsdatestamp": "GPS date",
-    "exif-gpsdifferential": "GPS differential correction",
-    "exif-coordinate-format": "$1° $2′ $3″ $4",
-    "exif-jpegfilecomment": "JPEG file comment",
-    "exif-keywords": "Keywords",
-    "exif-worldregioncreated": "World region that the picture was taken in",
-    "exif-countrycreated": "Country that the picture was taken in",
-    "exif-countrycodecreated": "Code for the country that the picture was taken in",
-    "exif-provinceorstatecreated": "Province or state that the picture was taken in",
-    "exif-citycreated": "City that the picture was taken in",
-    "exif-sublocationcreated": "Sublocation of the city that the picture was taken in",
-    "exif-worldregiondest": "World region shown",
-    "exif-countrydest": "Country shown",
-    "exif-countrycodedest": "Code for country shown",
-    "exif-provinceorstatedest": "Province or state shown",
-    "exif-citydest": "City shown",
-    "exif-sublocationdest": "Sublocation of city shown",
-    "exif-objectname": "Short title",
-    "exif-specialinstructions": "Special instructions",
-    "exif-headline": "Headline",
-    "exif-credit": "Credit/Provider",
-    "exif-source": "Source",
-    "exif-editstatus": "Editorial status of image",
-    "exif-urgency": "Urgency",
-    "exif-fixtureidentifier": "Fixture name",
-    "exif-locationdest": "Location depicted",
-    "exif-locationdestcode": "Code of location depicted",
-    "exif-objectcycle": "Time of day that media is intended for",
-    "exif-contact": "Contact information",
-    "exif-writer": "Writer",
-    "exif-languagecode": "Language",
-    "exif-iimversion": "IIM version",
-    "exif-iimcategory": "Category",
-    "exif-iimsupplementalcategory": "Supplemental categories",
-    "exif-datetimeexpires": "Do not use after",
-    "exif-datetimereleased": "Released on",
-    "exif-originaltransmissionref": "Original transmission location code",
-    "exif-identifier": "Identifier",
-    "exif-lens": "Lens used",
-    "exif-serialnumber": "Serial number of camera",
-    "exif-cameraownername": "Owner of camera",
-    "exif-label": "Label",
-    "exif-datetimemetadata": "Date metadata was last modified",
-    "exif-nickname": "Informal name of image",
-    "exif-rating": "Rating (out of 5)",
-    "exif-rightscertificate": "Rights management certificate",
-    "exif-copyrighted": "Copyright status",
-    "exif-copyrightowner": "Copyright owner",
-    "exif-usageterms": "Usage terms",
-    "exif-webstatement": "Online copyright statement",
-    "exif-originaldocumentid": "Unique ID of original document",
-    "exif-licenseurl": "URL for copyright license",
-    "exif-morepermissionsurl": "Alternative licensing information",
-    "exif-attributionurl": "When re-using this work, please link to",
-    "exif-preferredattributionname": "When re-using this work, please credit",
-    "exif-pngfilecomment": "PNG file comment",
-    "exif-disclaimer": "Disclaimer",
-    "exif-contentwarning": "Content warning",
-    "exif-giffilecomment": "GIF file comment",
-    "exif-intellectualgenre": "Type of item",
-    "exif-subjectnewscode": "Subject code",
-    "exif-scenecode": "IPTC scene code",
-    "exif-event": "Event depicted",
-    "exif-organisationinimage": "Organization depicted",
-    "exif-personinimage": "Person depicted",
-    "exif-originalimageheight": "Height of image before it was cropped",
-    "exif-originalimagewidth": "Width of image before it was cropped",
-    "exif-make-value": "$1",
-    "exif-model-value": "$1",
-    "exif-software-value": "$1",
-    "exif-software-version-value": "$1 (Version $2)",
-    "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
-    "exif-subjectnewscode-value": "$2 ($1)",
-    "exif-compression-1": "Uncompressed",
-    "exif-compression-2": "CCITT Group 3 1-Dimensional Modified Huffman run length encoding",
-    "exif-compression-3": "CCITT Group 3 fax encoding",
-    "exif-compression-4": "CCITT Group 4 fax encoding",
-    "exif-compression-5": "LZW",
-    "exif-compression-6": "JPEG (old)",
-    "exif-compression-7": "JPEG",
-    "exif-compression-8": "Deflate (Adobe)",
-    "exif-compression-32773": "PackBits (Macintosh RLE)",
-    "exif-compression-32946": "Deflate (PKZIP)",
-    "exif-compression-34712": "JPEG2000",
-    "exif-copyrighted-true": "Copyrighted",
-    "exif-copyrighted-false": "Copyright status not set",
-    "exif-photometricinterpretation-2": "RGB",
-    "exif-photometricinterpretation-6": "YCbCr",
-    "exif-unknowndate": "Unknown date",
-    "exif-orientation-1": "Normal",
-    "exif-orientation-2": "Flipped horizontally",
-    "exif-orientation-3": "Rotated 180°",
-    "exif-orientation-4": "Flipped vertically",
-    "exif-orientation-5": "Rotated 90° CCW and flipped vertically",
-    "exif-orientation-6": "Rotated 90° CCW",
-    "exif-orientation-7": "Rotated 90° CW and flipped vertically",
-    "exif-orientation-8": "Rotated 90° CW",
-    "exif-planarconfiguration-1": "chunky format",
-    "exif-planarconfiguration-2": "planar format",
-    "exif-xyresolution-i": "$1 dpi",
-    "exif-xyresolution-c": "$1 dpc",
-    "exif-colorspace-1": "sRGB",
-    "exif-colorspace-65535": "Uncalibrated",
-    "exif-componentsconfiguration-0": "does not exist",
-    "exif-componentsconfiguration-1": "Y",
-    "exif-componentsconfiguration-2": "Cb",
-    "exif-componentsconfiguration-3": "Cr",
-    "exif-componentsconfiguration-4": "R",
-    "exif-componentsconfiguration-5": "G",
-    "exif-componentsconfiguration-6": "B",
-    "exif-exposureprogram-0": "Not defined",
-    "exif-exposureprogram-1": "Manual",
-    "exif-exposureprogram-2": "Normal program",
-    "exif-exposureprogram-3": "Aperture priority",
-    "exif-exposureprogram-4": "Shutter priority",
-    "exif-exposureprogram-5": "Creative program (biased toward depth of field)",
-    "exif-exposureprogram-6": "Action program (biased toward fast shutter speed)",
-    "exif-exposureprogram-7": "Portrait mode (for closeup photos with the background out of focus)",
-    "exif-exposureprogram-8": "Landscape mode (for landscape photos with the background in focus)",
-    "exif-subjectdistance-value": "$1 meters",
-    "exif-meteringmode-0": "Unknown",
-    "exif-meteringmode-1": "Average",
-    "exif-meteringmode-2": "Center weighted average",
-    "exif-meteringmode-3": "Spot",
-    "exif-meteringmode-4": "Multi-Spot",
-    "exif-meteringmode-5": "Pattern",
-    "exif-meteringmode-6": "Partial",
-    "exif-meteringmode-255": "Other",
-    "exif-lightsource-0": "Unknown",
-    "exif-lightsource-1": "Daylight",
-    "exif-lightsource-2": "Fluorescent",
-    "exif-lightsource-3": "Tungsten (incandescent light)",
-    "exif-lightsource-4": "Flash",
-    "exif-lightsource-9": "Fine weather",
-    "exif-lightsource-10": "Cloudy weather",
-    "exif-lightsource-11": "Shade",
-    "exif-lightsource-12": "Daylight fluorescent (D 5700 – 7100K)",
-    "exif-lightsource-13": "Day white fluorescent (N 4600 – 5400K)",
-    "exif-lightsource-14": "Cool white fluorescent (W 3900 – 4500K)",
-    "exif-lightsource-15": "White fluorescent (WW 3200 – 3700K)",
-    "exif-lightsource-17": "Standard light A",
-    "exif-lightsource-18": "Standard light B",
-    "exif-lightsource-19": "Standard light C",
-    "exif-lightsource-20": "D55",
-    "exif-lightsource-21": "D65",
-    "exif-lightsource-22": "D75",
-    "exif-lightsource-23": "D50",
-    "exif-lightsource-24": "ISO studio tungsten",
-    "exif-lightsource-255": "Other light source",
-    "exif-flash-fired-0": "Flash did not fire",
-    "exif-flash-fired-1": "Flash fired",
-    "exif-flash-return-0": "no strobe return detection function",
-    "exif-flash-return-2": "strobe return light not detected",
-    "exif-flash-return-3": "strobe return light detected",
-    "exif-flash-mode-1": "compulsory flash firing",
-    "exif-flash-mode-2": "compulsory flash suppression",
-    "exif-flash-mode-3": "auto mode",
-    "exif-flash-function-1": "No flash function",
-    "exif-flash-redeye-1": "red-eye reduction mode",
-    "exif-focalplaneresolutionunit-2": "inches",
-    "exif-sensingmethod-1": "Undefined",
-    "exif-sensingmethod-2": "One-chip color area sensor",
-    "exif-sensingmethod-3": "Two-chip color area sensor",
-    "exif-sensingmethod-4": "Three-chip color area sensor",
-    "exif-sensingmethod-5": "Color sequential area sensor",
-    "exif-sensingmethod-7": "Trilinear sensor",
-    "exif-sensingmethod-8": "Color sequential linear sensor",
-    "exif-filesource-3": "Digital still camera",
-    "exif-scenetype-1": "A directly photographed image",
-    "exif-customrendered-0": "Normal process",
-    "exif-customrendered-1": "Custom process",
-    "exif-exposuremode-0": "Auto exposure",
-    "exif-exposuremode-1": "Manual exposure",
-    "exif-exposuremode-2": "Auto bracket",
-    "exif-whitebalance-0": "Auto white balance",
-    "exif-whitebalance-1": "Manual white balance",
-    "exif-scenecapturetype-0": "Standard",
-    "exif-scenecapturetype-1": "Landscape",
-    "exif-scenecapturetype-2": "Portrait",
-    "exif-scenecapturetype-3": "Night scene",
-    "exif-gaincontrol-0": "None",
-    "exif-gaincontrol-1": "Low gain up",
-    "exif-gaincontrol-2": "High gain up",
-    "exif-gaincontrol-3": "Low gain down",
-    "exif-gaincontrol-4": "High gain down",
-    "exif-contrast-0": "Normal",
-    "exif-contrast-1": "Soft",
-    "exif-contrast-2": "Hard",
-    "exif-saturation-0": "Normal",
-    "exif-saturation-1": "Low saturation",
-    "exif-saturation-2": "High saturation",
-    "exif-sharpness-0": "Normal",
-    "exif-sharpness-1": "Soft",
-    "exif-sharpness-2": "Hard",
-    "exif-subjectdistancerange-0": "Unknown",
-    "exif-subjectdistancerange-1": "Macro",
-    "exif-subjectdistancerange-2": "Close view",
-    "exif-subjectdistancerange-3": "Distant view",
-    "exif-gpslatitude-n": "North latitude",
-    "exif-gpslatitude-s": "South latitude",
-    "exif-gpslongitude-e": "East longitude",
-    "exif-gpslongitude-w": "West longitude",
-    "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|meter|meters}} above sea level",
-    "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|meter|meters}} below sea level",
-    "exif-gpsstatus-a": "Measurement in progress",
-    "exif-gpsstatus-v": "Measurement interoperability",
-    "exif-gpsmeasuremode-2": "2-dimensional measurement",
-    "exif-gpsmeasuremode-3": "3-dimensional measurement",
-    "exif-gpsspeed-k": "Kilometers per hour",
-    "exif-gpsspeed-m": "Miles per hour",
-    "exif-gpsspeed-n": "Knots",
-    "exif-gpsdestdistance-k": "Kilometers",
-    "exif-gpsdestdistance-m": "Miles",
-    "exif-gpsdestdistance-n": "Nautical miles",
-    "exif-gpsdop-excellent": "Excellent ($1)",
-    "exif-gpsdop-good": "Good ($1)",
-    "exif-gpsdop-moderate": "Moderate ($1)",
-    "exif-gpsdop-fair": "Fair ($1)",
-    "exif-gpsdop-poor": "Poor ($1)",
-    "exif-objectcycle-a": "Morning only",
-    "exif-objectcycle-p": "Evening only",
-    "exif-objectcycle-b": "Both morning and evening",
-    "exif-gpsdirection-t": "True direction",
-    "exif-gpsdirection-m": "Magnetic direction",
-    "exif-ycbcrpositioning-1": "Centered",
-    "exif-ycbcrpositioning-2": "Co-sited",
-    "exif-dc-contributor": "Contributors",
-    "exif-dc-coverage": "Spatial or temporal scope of media",
-    "exif-dc-date": "Date(s)",
-    "exif-dc-publisher": "Publisher",
-    "exif-dc-relation": "Related media",
-    "exif-dc-rights": "Rights",
-    "exif-dc-source": "Source media",
-    "exif-dc-type": "Type of media",
-    "exif-rating-rejected": "Rejected",
-    "exif-isospeedratings-overflow": "Greater than 65535",
-    "exif-maxaperturevalue-value": "$1 APEX (f/$2)",
-    "exif-iimcategory-ace": "Arts, culture and entertainment",
-    "exif-iimcategory-clj": "Crime and law",
-    "exif-iimcategory-dis": "Disasters and accidents",
-    "exif-iimcategory-fin": "Economy and business",
-    "exif-iimcategory-edu": "Education",
-    "exif-iimcategory-evn": "Environment",
-    "exif-iimcategory-hth": "Health",
-    "exif-iimcategory-hum": "Human interest",
-    "exif-iimcategory-lab": "Labor",
-    "exif-iimcategory-lif": "Lifestyle and leisure",
-    "exif-iimcategory-pol": "Politics",
-    "exif-iimcategory-rel": "Religion and belief",
-    "exif-iimcategory-sci": "Science and technology",
-    "exif-iimcategory-soi": "Social issues",
-    "exif-iimcategory-spo": "Sports",
-    "exif-iimcategory-war": "War, conflict and unrest",
-    "exif-iimcategory-wea": "Weather",
-    "exif-urgency-normal": "Normal ($1)",
-    "exif-urgency-low": "Low ($1)",
-    "exif-urgency-high": "High ($1)",
-    "exif-urgency-other": "User-defined priority ($1)",
-    "watchlistall2": "all",
-    "namespacesall": "all",
-    "monthsall": "all",
-    "confirmemail": "Confirm email address",
-    "confirmemail_noemail": "You do not have a valid email address set in your [[Special:Preferences|user preferences]].",
-    "confirmemail_text": "{{SITENAME}} requires that you validate your email address before using email features.\nActivate the button below to send a confirmation mail to your address.\nThe mail will include a link containing a code;\nload the link in your browser to confirm that your email address is valid.",
-    "confirmemail_pending": "A confirmation code has already been emailed to you;\nif you recently created your account, you may wish to wait a few minutes for it to arrive before trying to request a new code.",
-    "confirmemail_send": "Mail a confirmation code",
-    "confirmemail_sent": "Confirmation email sent.",
-    "confirmemail_oncreate": "A confirmation code was sent to your email address.\nThis code is not required to log in, but you will need to provide it before enabling any email-based features in the wiki.",
-    "confirmemail_sendfailed": "{{SITENAME}} could not send your confirmation mail.\nPlease check your email address for invalid characters.\n\nMailer returned: $1",
-    "confirmemail_invalid": "Invalid confirmation code.\nThe code may have expired.",
-    "confirmemail_needlogin": "Please $1 to confirm your email address.",
-    "confirmemail_success": "Your email address has been confirmed.\nYou may now [[Special:UserLogin|log in]] and enjoy the wiki.",
-    "confirmemail_loggedin": "Your email address has now been confirmed.",
-    "confirmemail_subject": "{{SITENAME}} email address confirmation",
-    "confirmemail_body": "Someone, probably you, from IP address $1,\nhas registered an account \"$2\" with this email address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and activate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf you did *not* register the account, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.",
-    "confirmemail_body_changed": "Someone, probably you, from IP address $1,\nhas changed the email address of the account \"$2\" to this address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and reactivate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf the account does *not* belong to you, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.",
-    "confirmemail_body_set": "Someone, probably you, from IP address $1,\nhas set the email address of the account \"$2\" to this address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and activate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf the account does *not* belong to you, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.",
-    "confirmemail_invalidated": "Email address confirmation canceled",
-    "invalidateemail": "Cancel email confirmation",
-    "scarytranscludedisabled": "[Interwiki transcluding is disabled]",
-    "scarytranscludefailed": "[Template fetch failed for $1]",
-    "scarytranscludefailed-httpstatus": "[Template fetch failed for $1: HTTP $2]",
-    "scarytranscludetoolong": "[URL is too long]",
-    "deletedwhileediting": "<strong>Warning:</strong> This page was deleted after you started editing!",
-    "confirmrecreate": "User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing with reason:\n: <em>$2</em>\nPlease confirm that you really want to recreate this page.",
-    "confirmrecreate-noreason": "User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing. Please confirm that you really want to recreate this page.",
-    "recreate": "Recreate",
-    "unit-pixel": "px",
-    "confirm_purge_button": "OK",
-    "confirm-purge-top": "Clear the cache of this page?",
-    "confirm-purge-bottom": "Purging a page clears the cache and forces the most current revision to appear.",
-    "confirm-watch-button": "OK",
-    "confirm-watch-top": "Add this page to your watchlist?",
-    "confirm-unwatch-button": "OK",
-    "confirm-unwatch-top": "Remove this page from your watchlist?",
-    "semicolon-separator": ";&#32;",
-    "comma-separator": ",&#32;",
-    "colon-separator": ":&#32;",
-    "autocomment-prefix": "",
-    "pipe-separator": "&#32;|&#32;",
-    "word-separator": "&#32;",
-    "ellipsis": "...",
-    "percent": "$1%",
-    "parentheses": "($1)",
-    "brackets": "[$1]",
-    "quotation-marks": "\"$1\"",
-    "imgmultipageprev": "← previous page",
-    "imgmultipagenext": "next page →",
-    "imgmultigo": "Go!",
-    "imgmultigoto": "Go to page $1",
-    "img-lang-opt": "$2 ($1)",
-    "img-lang-default": "(default language)",
-    "img-lang-info": "Render this image in $1. $2",
-    "img-lang-go": "Go",
-    "ascending_abbrev": "asc",
-    "descending_abbrev": "desc",
-    "table_pager_next": "Next page",
-    "table_pager_prev": "Previous page",
-    "table_pager_first": "First page",
-    "table_pager_last": "Last page",
-    "table_pager_limit": "Show $1 items per page",
-    "table_pager_limit_label": "Items per page:",
-    "table_pager_limit_submit": "Go",
-    "table_pager_empty": "No results",
-    "autosumm-blank": "Blanked the page",
-    "autosumm-replace": "Replaced content with \"$1\"",
-    "autoredircomment": "Redirected page to [[$1]]",
-    "autosumm-new": "Created page with \"$1\"",
-    "autoblock_whitelist": "AOL http://webmaster.info.aol.com/proxyinfo.html\n*64.12.96.0/19\n*149.174.160.0/20\n*152.163.240.0/21\n*152.163.248.0/22\n*152.163.252.0/23\n*152.163.96.0/22\n*152.163.100.0/23\n*195.93.32.0/22\n*195.93.48.0/22\n*195.93.64.0/19\n*195.93.96.0/19\n*195.93.16.0/20\n*198.81.0.0/22\n*198.81.16.0/20\n*198.81.8.0/23\n*202.67.64.128/25\n*205.188.192.0/20\n*205.188.208.0/23\n*205.188.112.0/20\n*205.188.146.144/30\n*207.200.112.0/21",
-    "size-bytes": "$1 B",
-    "size-kilobytes": "$1 KB",
-    "size-megabytes": "$1 MB",
-    "size-gigabytes": "$1 GB",
-    "size-terabytes": "$1 TB",
-    "size-petabytes": "$1 PB",
-    "size-exabytes": "$1 EB",
-    "size-zetabytes": "$1 ZB",
-    "size-yottabytes": "$1 YB",
-    "bitrate-bits": "$1 bps",
-    "bitrate-kilobits": "$1 kbps",
-    "bitrate-megabits": "$1 Mbps",
-    "bitrate-gigabits": "$1 Gbps",
-    "bitrate-terabits": "$1 Tbps",
-    "bitrate-petabits": "$1 Pbps",
-    "bitrate-exabits": "$1 Ebps",
-    "bitrate-zetabits": "$1 Zbps",
-    "bitrate-yottabits": "$1 Ybps",
-    "lag-warn-normal": "Changes newer than $1 {{PLURAL:$1|second|seconds}} may not be shown in this list.",
-    "lag-warn-high": "Due to high database server lag, changes newer than $1 {{PLURAL:$1|second|seconds}} may not be shown in this list.",
-    "editwatchlist-summary": "",
-    "watchlistedit-normal-title": "Edit watchlist",
-    "watchlistedit-normal-legend": "Remove titles from watchlist",
-    "watchlistedit-normal-explain": "Titles on your watchlist are shown below.\nTo remove a title, check the box next to it, and click \"{{int:Watchlistedit-normal-submit}}\".\nYou can also [[Special:EditWatchlist/raw|edit the raw list]].",
-    "watchlistedit-normal-submit": "Remove titles",
-    "watchlistedit-normal-done": "{{PLURAL:$1|1 title was|$1 titles were}} removed from your watchlist:",
-    "watchlistedit-raw-title": "Edit raw watchlist",
-    "watchlistedit-raw-legend": "Edit raw watchlist",
-    "watchlistedit-raw-explain": "Titles on your watchlist are shown below, and can be edited by adding to and removing from the list;\none title per line.\nWhen finished, click \"{{int:Watchlistedit-raw-submit}}\".\nYou can also [[Special:EditWatchlist|use the standard editor]].",
-    "watchlistedit-raw-titles": "Titles:",
-    "watchlistedit-raw-submit": "Update watchlist",
-    "watchlistedit-raw-done": "Your watchlist has been updated.",
-    "watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 titles were}} added:",
-    "watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:",
-    "watchlisttools-view": "View relevant changes",
-    "watchlisttools-edit": "View and edit watchlist",
-    "watchlisttools-raw": "Edit raw watchlist",
-    "iranian-calendar-m1": "Farvardin",
-    "iranian-calendar-m2": "Ordibehesht",
-    "iranian-calendar-m3": "Khordad",
-    "iranian-calendar-m4": "Tir",
-    "iranian-calendar-m5": "Mordad",
-    "iranian-calendar-m6": "Shahrivar",
-    "iranian-calendar-m7": "Mehr",
-    "iranian-calendar-m8": "Aban",
-    "iranian-calendar-m9": "Azar",
-    "iranian-calendar-m10": "Dey",
-    "iranian-calendar-m11": "Bahman",
-    "iranian-calendar-m12": "Esfand",
-    "hijri-calendar-m1": "Muharram",
-    "hijri-calendar-m2": "Safar",
-    "hijri-calendar-m3": "Rabi' al-awwal",
-    "hijri-calendar-m4": "Rabi' al-thani",
-    "hijri-calendar-m5": "Jumada al-awwal",
-    "hijri-calendar-m6": "Jumada al-thani",
-    "hijri-calendar-m7": "Rajab",
-    "hijri-calendar-m8": "Sha'aban",
-    "hijri-calendar-m9": "Ramadan",
-    "hijri-calendar-m10": "Shawwal",
-    "hijri-calendar-m11": "Dhu al-Qi'dah",
-    "hijri-calendar-m12": "Dhu al-Hijjah",
-    "hebrew-calendar-m1": "Tishrei",
-    "hebrew-calendar-m2": "Cheshvan",
-    "hebrew-calendar-m3": "Kislev",
-    "hebrew-calendar-m4": "Tevet",
-    "hebrew-calendar-m5": "Shevat",
-    "hebrew-calendar-m6": "Adar",
-    "hebrew-calendar-m6a": "Adar I",
-    "hebrew-calendar-m6b": "Adar II",
-    "hebrew-calendar-m7": "Nisan",
-    "hebrew-calendar-m8": "Iyar",
-    "hebrew-calendar-m9": "Sivan",
-    "hebrew-calendar-m10": "Tamuz",
-    "hebrew-calendar-m11": "Av",
-    "hebrew-calendar-m12": "Elul",
-    "hebrew-calendar-m1-gen": "Tishrei",
-    "hebrew-calendar-m2-gen": "Cheshvan",
-    "hebrew-calendar-m3-gen": "Kislev",
-    "hebrew-calendar-m4-gen": "Tevet",
-    "hebrew-calendar-m5-gen": "Shevat",
-    "hebrew-calendar-m6-gen": "Adar",
-    "hebrew-calendar-m6a-gen": "Adar I",
-    "hebrew-calendar-m6b-gen": "Adar II",
-    "hebrew-calendar-m7-gen": "Nisan",
-    "hebrew-calendar-m8-gen": "Iyar",
-    "hebrew-calendar-m9-gen": "Sivan",
-    "hebrew-calendar-m10-gen": "Tamuz",
-    "hebrew-calendar-m11-gen": "Av",
-    "hebrew-calendar-m12-gen": "Elul",
-    "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
-    "signature-anon": "[[{{#special:Contributions}}/$1|$2]]",
-    "timezone-utc": "UTC",
-    "unknown_extension_tag": "Unknown extension tag \"$1\"",
-    "duplicate-defaultsort": "<strong>Warning:</strong> Default sort key \"$2\" overrides earlier default sort key \"$1\".",
-    "version": "Version",
-    "version-summary": "",
-    "version-extensions": "Installed extensions",
-    "version-specialpages": "Special pages",
-    "version-parserhooks": "Parser hooks",
-    "version-variables": "Variables",
-    "version-antispam": "Spam prevention",
-    "version-skins": "Skins",
-    "version-api": "API",
-    "version-other": "Other",
-    "version-mediahandlers": "Media handlers",
-    "version-hooks": "Hooks",
-    "version-parser-extensiontags": "Parser extension tags",
-    "version-parser-function-hooks": "Parser function hooks",
-    "version-hook-name": "Hook name",
-    "version-hook-subscribedby": "Subscribed by",
-    "version-version": "($1)",
-    "version-svn-revision": "r$1",
-    "version-license": "MediaWiki License",
-    "version-ext-license": "License",
-    "version-ext-colheader-name": "Extension",
-    "version-ext-colheader-version": "Version",
-    "version-ext-colheader-license": "License",
-    "version-ext-colheader-description": "Description",
-    "version-ext-colheader-credits": "Authors",
-    "version-license-title": "License for $1",
-    "version-license-not-found": "No detailed license information was found for this extension.",
-    "version-credits-title": "Credits for $1",
-    "version-credits-not-found": "No detailed credits information was found for this extension.",
-    "version-poweredby-credits": "This wiki is powered by <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
-    "version-poweredby-others": "others",
-    "version-poweredby-translators": "translatewiki.net translators",
-    "version-credits-summary": "We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].",
-    "version-license-info": "MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nMediaWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING 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 or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
-    "version-software": "Installed software",
-    "version-software-product": "Product",
-    "version-software-version": "Version",
-    "version-db-mysql-url": "http://www.mysql.com/",
-    "version-db-mariadb-url": "http://mariadb.org/",
-    "version-db-percona-url": "http://www.percona.com/software/percona-server",
-    "version-db-postgres-url": "http://www.postgresql.org/",
-    "version-db-oracle-url": "http://www.oracle.com/database/",
-    "version-db-sqlite-url": "http://www.sqlite.org/",
-    "version-db-mssql-url": "http://www.microsoft.com/sql/",
-    "version-entrypoints": "Entry point URLs",
-    "version-entrypoints-header-entrypoint": "Entry point",
-    "version-entrypoints-header-url": "URL",
-    "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]",
-    "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]",
-    "version-entrypoints-index-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:index.php index.php]",
-    "version-entrypoints-api-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:api.php api.php]",
-    "version-entrypoints-load-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:load.php load.php]",
-    "redirect": "Redirect by file, user, page or revision ID",
-    "redirect-legend": "Redirect to a file or page",
-    "redirect-text": "",
-    "redirect-summary": "This special page redirects to a file (given the file name), a page (given a revision ID or page ID), or a user page (given a numeric user ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
-    "redirect-submit": "Go",
-    "redirect-lookup": "Lookup:",
-    "redirect-value": "Value:",
-    "redirect-user": "User ID",
-    "redirect-page": "Page ID",
-    "redirect-revision": "Page revision",
-    "redirect-file": "File name",
-    "redirect-not-exists": "Value not found",
-    "fileduplicatesearch": "Search for duplicate files",
-    "fileduplicatesearch-summary": "Search for duplicate files based on hash values.",
-    "fileduplicatesearch-legend": "Search for a duplicate",
-    "fileduplicatesearch-filename": "Filename:",
-    "fileduplicatesearch-submit": "Search",
-    "fileduplicatesearch-info": "$1 × $2 pixel<br />File size: $3<br />MIME type: $4",
-    "fileduplicatesearch-result-1": "The file \"$1\" has no identical duplication.",
-    "fileduplicatesearch-result-n": "The file \"$1\" has {{PLURAL:$2|1 identical duplication|$2 identical duplications}}.",
-    "fileduplicatesearch-noresults": "No file named \"$1\" found.",
-    "specialpages": "Special pages",
-    "specialpages-summary": "",
-    "specialpages-note-top": "Legend",
-    "specialpages-note": "* Normal special pages.\n* <span class=\"mw-specialpagerestricted\">Restricted special pages.</span>",
-    "specialpages-group-maintenance": "Maintenance reports",
-    "specialpages-group-other": "Other special pages",
-    "specialpages-group-login": "Login / create account",
-    "specialpages-group-changes": "Recent changes and logs",
-    "specialpages-group-media": "Media reports and uploads",
-    "specialpages-group-users": "Users and rights",
-    "specialpages-group-highuse": "High use pages",
-    "specialpages-group-pages": "Lists of pages",
-    "specialpages-group-pagetools": "Page tools",
-    "specialpages-group-wiki": "Data and tools",
-    "specialpages-group-redirects": "Redirecting special pages",
-    "specialpages-group-spam": "Spam tools",
-    "blankpage": "Blank page",
-    "intentionallyblankpage": "This page is intentionally left blank.",
-    "external_image_whitelist": " #Leave this line exactly as it is<pre>\n#Put regular expression fragments (just the part that goes between the //) below\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#Lines beginning with # are treated as comments\n#This is case-insensitive\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
-    "tags": "Valid change tags",
-    "tags-summary": "",
-    "tag-filter": "[[Special:Tags|Tag]] filter:",
-    "tag-filter-submit": "Filter",
-    "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
-    "tags-title": "Tags",
-    "tags-intro": "This page lists the tags that the software may mark an edit with, and their meaning.",
-    "tags-tag": "Tag name",
-    "tags-display-header": "Appearance on change lists",
-    "tags-description-header": "Full description of meaning",
-    "tags-active-header": "Active?",
-    "tags-hitcount-header": "Tagged changes",
-    "tags-active-yes": "Yes",
-    "tags-active-no": "No",
-    "tags-edit": "edit",
-    "tags-hitcount": "$1 {{PLURAL:$1|change|changes}}",
-    "comparepages": "Compare pages",
-    "comparepages-summary": "",
-    "compare-page1": "Page 1",
-    "compare-page2": "Page 2",
-    "compare-rev1": "Revision 1",
-    "compare-rev2": "Revision 2",
-    "compare-submit": "Compare",
-    "compare-invalid-title": "The title you specified is invalid.",
-    "compare-title-not-exists": "The title you specified does not exist.",
-    "compare-revision-not-exists": "The revision you specified does not exist.",
-    "dberr-problems": "Sorry! This site is experiencing technical difficulties.",
-    "dberr-again": "Try waiting a few minutes and reloading.",
-    "dberr-info": "(Cannot contact the database server: $1)",
-    "dberr-info-hidden": "(Cannot contact the database server)",
-    "dberr-usegoogle": "You can try searching via Google in the meantime.",
-    "dberr-outofdate": "Note that their indexes of our content may be out of date.",
-    "dberr-cachederror": "This is a cached copy of the requested page, and may not be up to date.",
-    "htmlform-invalid-input": "There are problems with some of your input.",
-    "htmlform-select-badoption": "The value you specified is not a valid option.",
-    "htmlform-int-invalid": "The value you specified is not an integer.",
-    "htmlform-float-invalid": "The value you specified is not a number.",
-    "htmlform-int-toolow": "The value you specified is below the minimum of $1.",
-    "htmlform-int-toohigh": "The value you specified is above the maximum of $1.",
-    "htmlform-required": "This value is required.",
-    "htmlform-submit": "Submit",
-    "htmlform-reset": "Undo changes",
-    "htmlform-selectorother-other": "Other",
-    "htmlform-no": "No",
-    "htmlform-yes": "Yes",
-    "htmlform-chosen-placeholder": "Select an option",
+       "@metadata": {
+               "authors": []
+       },
+       "sidebar": "\n* navigation\n** mainpage|mainpage-description\n** recentchanges-url|recentchanges\n** randompage-url|randompage\n** helppage|help\n* SEARCH\n* TOOLBOX\n* LANGUAGES",
+       "tog-underline": "Link underlining:",
+       "tog-hideminor": "Hide minor edits in recent changes",
+       "tog-hidepatrolled": "Hide patrolled edits in recent changes",
+       "tog-newpageshidepatrolled": "Hide patrolled pages from new page list",
+       "tog-extendwatchlist": "Expand watchlist to show all changes, not just the most recent",
+       "tog-usenewrc": "Group changes by page in recent changes and watchlist",
+       "tog-numberheadings": "Auto-number headings",
+       "tog-showtoolbar": "Show edit toolbar",
+       "tog-editondblclick": "Edit pages on double click",
+       "tog-editsectiononrightclick": "Enable section editing by right clicking on section titles",
+       "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
+       "tog-watchdefault": "Add pages and files I edit to my watchlist",
+       "tog-watchmoves": "Add pages and files I move to my watchlist",
+       "tog-watchdeletion": "Add pages and files I delete to my watchlist",
+       "tog-minordefault": "Mark all edits minor by default",
+       "tog-previewontop": "Show preview before edit box",
+       "tog-previewonfirst": "Show preview on first edit",
+       "tog-enotifwatchlistpages": "Email me when a page or file on my watchlist is changed",
+       "tog-enotifusertalkpages": "Email me when my user talk page is changed",
+       "tog-enotifminoredits": "Email me also for minor edits of pages and files",
+       "tog-enotifrevealaddr": "Reveal my email address in notification emails",
+       "tog-shownumberswatching": "Show the number of watching users",
+       "tog-oldsig": "Existing signature:",
+       "tog-fancysig": "Treat signature as wikitext (without an automatic link)",
+       "tog-uselivepreview": "Use live preview (experimental)",
+       "tog-forceeditsummary": "Prompt me when entering a blank edit summary",
+       "tog-watchlisthideown": "Hide my edits from the watchlist",
+       "tog-watchlisthidebots": "Hide bot edits from the watchlist",
+       "tog-watchlisthideminor": "Hide minor edits from the watchlist",
+       "tog-watchlisthideliu": "Hide edits by logged in users from the watchlist",
+       "tog-watchlisthideanons": "Hide edits by anonymous users from the watchlist",
+       "tog-watchlisthidepatrolled": "Hide patrolled edits from the watchlist",
+       "tog-ccmeonemails": "Send me copies of emails I send to other users",
+       "tog-diffonly": "Do not show page content below diffs",
+       "tog-showhiddencats": "Show hidden categories",
+       "tog-norollbackdiff": "Omit diff after performing a rollback",
+       "tog-useeditwarning": "Warn me when I leave an edit page with unsaved changes",
+       "tog-prefershttps": "Always use a secure connection when logged in",
+       "underline-always": "Always",
+       "underline-never": "Never",
+       "underline-default": "Skin or browser default",
+       "editfont-style": "Edit area font style:",
+       "editfont-default": "Browser default",
+       "editfont-monospace": "Monospaced font",
+       "editfont-sansserif": "Sans-serif font",
+       "editfont-serif": "Serif font",
+       "sunday": "Sunday",
+       "monday": "Monday",
+       "tuesday": "Tuesday",
+       "wednesday": "Wednesday",
+       "thursday": "Thursday",
+       "friday": "Friday",
+       "saturday": "Saturday",
+       "sun": "Sun",
+       "mon": "Mon",
+       "tue": "Tue",
+       "wed": "Wed",
+       "thu": "Thu",
+       "fri": "Fri",
+       "sat": "Sat",
+       "january": "January",
+       "february": "February",
+       "march": "March",
+       "april": "April",
+       "may_long": "May",
+       "june": "June",
+       "july": "July",
+       "august": "August",
+       "september": "September",
+       "october": "October",
+       "november": "November",
+       "december": "December",
+       "january-gen": "January",
+       "february-gen": "February",
+       "march-gen": "March",
+       "april-gen": "April",
+       "may-gen": "May",
+       "june-gen": "June",
+       "july-gen": "July",
+       "august-gen": "August",
+       "september-gen": "September",
+       "october-gen": "October",
+       "november-gen": "November",
+       "december-gen": "December",
+       "jan": "Jan",
+       "feb": "Feb",
+       "mar": "Mar",
+       "apr": "Apr",
+       "may": "May",
+       "jun": "Jun",
+       "jul": "Jul",
+       "aug": "Aug",
+       "sep": "Sep",
+       "oct": "Oct",
+       "nov": "Nov",
+       "dec": "Dec",
+       "january-date": "January $1",
+       "february-date": "February $1",
+       "march-date": "March $1",
+       "april-date": "April $1",
+       "may-date": "May $1",
+       "june-date": "June $1",
+       "july-date": "July $1",
+       "august-date": "August $1",
+       "september-date": "September $1",
+       "october-date": "October $1",
+       "november-date": "November $1",
+       "december-date": "December $1",
+       "pagecategories": "{{PLURAL:$1|Category|Categories}}",
+       "pagecategorieslink": "Special:Categories",
+       "category_header": "Pages in category \"$1\"",
+       "subcategories": "Subcategories",
+       "category-media-header": "Media in category \"$1\"",
+       "category-empty": "<em>This category currently contains no pages or media.</em>",
+       "hidden-categories": "{{PLURAL:$1|Hidden category|Hidden categories}}",
+       "hidden-category-category": "Hidden categories",
+       "category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
+       "category-subcat-count-limited": "This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}.",
+       "category-article-count": "{{PLURAL:$2|This category contains only the following page.|The following {{PLURAL:$1|page is|$1 pages are}} in this category, out of $2 total.}}",
+       "category-article-count-limited": "The following {{PLURAL:$1|page is|$1 pages are}} in the current category.",
+       "category-file-count": "{{PLURAL:$2|This category contains only the following file.|The following {{PLURAL:$1|file is|$1 files are}} in this category, out of $2 total.}}",
+       "category-file-count-limited": "The following {{PLURAL:$1|file is|$1 files are}} in the current category.",
+       "listingcontinuesabbrev": "cont.",
+       "index-category": "Indexed pages",
+       "noindex-category": "Noindexed pages",
+       "broken-file-category": "Pages with broken file links",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "about": "About",
+       "article": "Content page",
+       "newwindow": "(opens in new window)",
+       "cancel": "Cancel",
+       "moredotdotdot": "More...",
+       "morenotlisted": "This list is not complete.",
+       "mypage": "Page",
+       "mytalk": "Talk",
+       "anontalk": "Talk for this IP address",
+       "navigation": "Navigation",
+       "and": "&#32;and",
+       "qbfind": "Find",
+       "qbbrowse": "Browse",
+       "qbedit": "Edit",
+       "qbpageoptions": "This page",
+       "qbmyoptions": "My pages",
+       "faq": "FAQ",
+       "faqpage": "Project:FAQ",
+       "sitetitle": "{{SITENAME}}",
+       "sitesubtitle": "",
+       "vector-action-addsection": "Add topic",
+       "vector-action-delete": "Delete",
+       "vector-action-move": "Move",
+       "vector-action-protect": "Protect",
+       "vector-action-undelete": "Undelete",
+       "vector-action-unprotect": "Change protection",
+       "vector-view-create": "Create",
+       "vector-view-edit": "Edit",
+       "vector-view-history": "View history",
+       "vector-view-view": "Read",
+       "vector-view-viewsource": "View source",
+       "actions": "Actions",
+       "namespaces": "Namespaces",
+       "variants": "Variants",
+       "navigation-heading": "Navigation menu",
+       "errorpagetitle": "Error",
+       "returnto": "Return to $1.",
+       "tagline": "From {{SITENAME}}",
+       "help": "Help",
+       "search": "Search",
+       "searchbutton": "Search",
+       "go": "Go",
+       "searcharticle": "Go",
+       "history": "Page history",
+       "history_short": "History",
+       "updatedmarker": "updated since my last visit",
+       "printableversion": "Printable version",
+       "permalink": "Permanent link",
+       "print": "Print",
+       "view": "View",
+       "view-foreign": "View on $1",
+       "edit": "Edit",
+       "edit-local": "Edit local description",
+       "create": "Create",
+       "create-local": "Add local description",
+       "editthispage": "Edit this page",
+       "create-this-page": "Create this page",
+       "delete": "Delete",
+       "deletethispage": "Delete this page",
+       "undeletethispage": "Undelete this page",
+       "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
+       "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "protect": "Protect",
+       "protect_change": "change",
+       "protectthispage": "Protect this page",
+       "unprotect": "Change protection",
+       "unprotectthispage": "Change protection of this page",
+       "newpage": "New page",
+       "talkpage": "Discuss this page",
+       "talkpagelinktext": "Talk",
+       "specialpage": "Special page",
+       "personaltools": "Personal tools",
+       "postcomment": "New section",
+       "addsection": "+",
+       "articlepage": "View content page",
+       "talk": "Discussion",
+       "views": "Views",
+       "toolbox": "Tools",
+       "userpage": "View user page",
+       "projectpage": "View project page",
+       "imagepage": "View file page",
+       "mediawikipage": "View message page",
+       "templatepage": "View template page",
+       "viewhelppage": "View help page",
+       "categorypage": "View category page",
+       "viewtalkpage": "View discussion",
+       "otherlanguages": "In other languages",
+       "redirectedfrom": "(Redirected from $1)",
+       "redirectpagesub": "Redirect page",
+       "talkpageheader": "-",
+       "lastmodifiedat": "This page was last modified on $1, at $2.",
+       "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}.",
+       "protectedpage": "Protected page",
+       "jumpto": "Jump to:",
+       "jumptonavigation": "navigation",
+       "jumptosearch": "search",
+       "view-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this page.\nPlease wait a while before you try to access this page again.\n\n$1",
+       "generic-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this resource.\nPlease wait a while before you try to access this resource again.",
+       "pool-timeout": "Timeout waiting for the lock",
+       "pool-queuefull": "Pool queue is full",
+       "pool-errorunknown": "Unknown error",
+       "pool-servererror": "The pool counter service is not available ($1).",
+       "aboutsite": "About {{SITENAME}}",
+       "aboutpage": "Project:About",
+       "copyright": "Content is available under $1 unless otherwise noted.",
+       "copyrightpage": "{{ns:project}}:Copyrights",
+       "currentevents": "Current events",
+       "currentevents-url": "Project:Current events",
+       "disclaimers": "Disclaimers",
+       "disclaimerpage": "Project:General disclaimer",
+       "edithelp": "Editing help",
+       "edithelppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages",
+       "helppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents",
+       "mainpage": "Main Page",
+       "mainpage-description": "Main page",
+       "policy-url": "Project:Policy",
+       "portal": "Community portal",
+       "portal-url": "Project:Community portal",
+       "privacy": "Privacy policy",
+       "privacypage": "Project:Privacy policy",
+       "badaccess": "Permission error",
+       "badaccess-group0": "You are not allowed to execute the action you have requested.",
+       "badaccess-groups": "The action you have requested is limited to users in {{PLURAL:$2|the group|one of the groups}}: $1.",
+       "versionrequired": "Version $1 of MediaWiki required",
+       "versionrequiredtext": "Version $1 of MediaWiki is required to use this page.\nSee [[Special:Version|version page]].",
+       "ok": "OK",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
+       "retrievedfrom": "Retrieved from \"$1\"",
+       "youhavenewmessages": "{{PLURAL:$3|You have}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|You have}} $1 from {{PLURAL:$3|another user|$3 users}} ($2).",
+       "youhavenewmessagesmanyusers": "You have $1 from many users ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|a new message|999=new messages}}",
+       "newmessagesdifflinkplural": "last {{PLURAL:$1|change|999=changes}}",
+       "youhavenewmessagesmulti": "You have new messages on $1",
+       "newtalkseparator": ",&#32;",
+       "editsection": "edit",
+       "editold": "edit",
+       "viewsourceold": "view source",
+       "editlink": "edit",
+       "viewsourcelink": "view source",
+       "editsectionhint": "Edit section: $1",
+       "toc": "Contents",
+       "showtoc": "show",
+       "hidetoc": "hide",
+       "collapsible-collapse": "Collapse",
+       "collapsible-expand": "Expand",
+       "thisisdeleted": "View or restore $1?",
+       "viewdeleted": "View $1?",
+       "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "feedlinks": "Feed:",
+       "feed-invalid": "Invalid subscription feed type.",
+       "feed-unavailable": "Syndication feeds are not available",
+       "site-rss-feed": "$1 RSS feed",
+       "site-atom-feed": "$1 Atom feed",
+       "page-rss-feed": "\"$1\" RSS feed",
+       "page-atom-feed": "\"$1\" Atom feed",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
+       "sitenotice": "-",
+       "anonnotice": "-",
+       "newsectionheaderdefaultlevel": "== $1 ==",
+       "red-link-title": "$1 (page does not exist)",
+       "sort-descending": "Sort descending",
+       "sort-ascending": "Sort ascending",
+       "nstab-main": "Page",
+       "nstab-user": "User page",
+       "nstab-media": "Media page",
+       "nstab-special": "Special page",
+       "nstab-project": "Project page",
+       "nstab-image": "File",
+       "nstab-mediawiki": "Message",
+       "nstab-template": "Template",
+       "nstab-help": "Help page",
+       "nstab-category": "Category",
+       "mainpage-nstab": "",
+       "nosuchaction": "No such action",
+       "nosuchactiontext": "The action specified by the URL is invalid.\nYou might have mistyped the URL, or followed an incorrect link.\nThis might also indicate a bug in the software used by {{SITENAME}}.",
+       "nosuchspecialpage": "No such special page",
+       "nospecialpagetext": "<strong>You have requested an invalid special page.</strong>\n\nA list of valid special pages can be found at [[Special:SpecialPages|{{int:specialpages}}]].",
+       "error": "Error",
+       "databaseerror": "Database error",
+       "databaseerror-text": "A database query error has occurred.\nThis may indicate a bug in the software.",
+       "databaseerror-textcl": "A database query error has occurred.",
+       "databaseerror-query": "Query: $1",
+       "databaseerror-function": "Function: $1",
+       "databaseerror-error": "Error: $1",
+       "laggedslavemode": "<strong>Warning:</strong> Page may not contain recent updates.",
+       "readonly": "Database locked",
+       "enterlockreason": "Enter a reason for the lock, including an estimate of when the lock will be released",
+       "readonlytext": "The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.\n\nThe administrator who locked it offered this explanation: $1",
+       "missing-article": "The database did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
+       "missingarticle-rev": "(revision#: $1)",
+       "missingarticle-diff": "(Diff: $1, $2)",
+       "readonly_lag": "The database has been automatically locked while the slave database servers catch up to the master",
+       "internalerror": "Internal error",
+       "internalerror_info": "Internal error: $1",
+       "filecopyerror": "Could not copy file \"$1\" to \"$2\".",
+       "filerenameerror": "Could not rename file \"$1\" to \"$2\".",
+       "filedeleteerror": "Could not delete file \"$1\".",
+       "directorycreateerror": "Could not create directory \"$1\".",
+       "filenotfound": "Could not find file \"$1\".",
+       "unexpected": "Unexpected value: \"$1\"=\"$2\".",
+       "formerror": "Error: Could not submit form.",
+       "badarticleerror": "This action cannot be performed on this page.",
+       "cannotdelete": "The page or file \"$1\" could not be deleted.\nIt may have already been deleted by someone else.",
+       "cannotdelete-title": "Cannot delete page \"$1\"",
+       "delete-hook-aborted": "Deletion aborted by hook.\nIt gave no explanation.",
+       "no-null-revision": "Could not create new null revision for page \"$1\"",
+       "badtitle": "Bad title",
+       "badtitletext": "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.\nIt may contain one or more characters that cannot be used in titles.",
+       "perfcached": "The following data is cached and may not be up to date. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
+       "perfcachedts": "The following data is cached, and was last updated $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+       "querypage-no-updates": "Updates for this page are currently disabled.\nData here will not presently be refreshed.",
+       "viewsource": "View source",
+       "viewsource-title": "View source for $1",
+       "actionthrottled": "Action throttled",
+       "actionthrottledtext": "As an anti-spam measure, you are limited from performing this action too many times in a short space of time, and you have exceeded this limit.\nPlease try again in a few minutes.",
+       "protectedpagetext": "This page has been protected to prevent editing or other actions.",
+       "viewsourcetext": "You can view and copy the source of this page:",
+       "viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page:",
+       "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+       "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+       "cascadeprotected": "This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
+       "namespaceprotected": "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
+       "customcssprotected": "You do not have permission to edit this CSS page because it contains another user's personal settings.",
+       "customjsprotected": "You do not have permission to edit this JavaScript page because it contains another user's personal settings.",
+       "mycustomcssprotected": "You do not have permission to edit this CSS page.",
+       "mycustomjsprotected": "You do not have permission to edit this JavaScript page.",
+       "myprivateinfoprotected": "You do not have permission to edit your private information.",
+       "mypreferencesprotected": "You do not have permission to edit your preferences.",
+       "ns-specialprotected": "Special pages cannot be edited.",
+       "titleprotected": "This title has been protected from creation by [[User:$1|$1]].\nThe reason given is \"<em>$2</em>\".",
+       "filereadonlyerror": "Unable to modify the file \"$1\" because the file repository \"$2\" is in read-only mode.\n\nThe administrator who locked it offered this explanation: \"$3\".",
+       "invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
+       "invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
+       "exception-nologin": "Not logged in",
+       "exception-nologin-text": "Please [[Special:Userlogin|log in]] to be able to access this page or action.",
+       "exception-nologin-text-manual": "Please $1 to be able to access this page or action.",
+       "virus-badscanner": "Bad configuration: Unknown virus scanner: <em>$1</em>",
+       "virus-scanfailed": "scan failed (code $1)",
+       "virus-unknownscanner": "unknown antivirus:",
+       "logouttext": "<strong>You are now logged out.</strong>\n\nNote that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
+       "welcomeuser": "Welcome, $1!",
+       "welcomecreation-msg": "Your account has been created.\nYou can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish.",
+       "yourname": "Username:",
+       "userlogin-yourname": "Username",
+       "userlogin-yourname-ph": "Enter your username",
+       "createacct-another-username-ph": "Enter the username",
+       "createacct-helpusername": "",
+       "yourpassword": "Password:",
+       "userlogin-yourpassword": "Password",
+       "userlogin-yourpassword-ph": "Enter your password",
+       "createacct-yourpassword-ph": "Enter a password",
+       "yourpasswordagain": "Retype password:",
+       "createacct-yourpasswordagain": "Confirm password",
+       "createacct-yourpasswordagain-ph": "Enter password again",
+       "remembermypassword": "Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "userlogin-remembermypassword": "Keep me logged in",
+       "userlogin-signwithsecure": "Use secure connection",
+       "yourdomainname": "Your domain:",
+       "password-change-forbidden": "You cannot change passwords on this wiki.",
+       "externaldberror": "There was either an authentication database error or you are not allowed to update your external account.",
+       "login": "Log in",
+       "nav-login-createaccount": "Log in / create account",
+       "loginprompt": "You must have cookies enabled to log in to {{SITENAME}}.",
+       "userlogin": "Log in / create account",
+       "userloginnocreate": "Log in",
+       "logout": "Log out",
+       "userlogout": "Log out",
+       "userlogout-summary": "",
+       "notloggedin": "Not logged in",
+       "userlogin-noaccount": "Don't have an account?",
+       "userlogin-joinproject": "Join {{SITENAME}}",
+       "nologin": "Don't have an account? $1.",
+       "nologinlink": "Create an account",
+       "createaccount": "Create account",
+       "gotaccount": "Already have an account? $1.",
+       "gotaccountlink": "Log in",
+       "userlogin-resetlink": "Forgotten your login details?",
+       "userlogin-resetpassword-link": "Forgot your password?",
+       "helplogin-url": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Logging_in",
+       "userlogin-helplink2": "Help with logging in",
+       "userlogin-loggedin": "You are already logged in as {{GENDER:$1|$1}}.\nUse the form below to log in as another user.",
+       "userlogin-createanother": "Create another account",
+       "createacct-emailrequired": "Email address",
+       "createacct-emailoptional": "Email address (optional)",
+       "createacct-email-ph": "Enter your email address",
+       "createacct-another-email-ph": "Enter email address",
+       "createaccountmail": "Use a temporary random password and send it to the specified email address",
+       "createacct-realname": "Real name (optional)",
+       "createaccountreason": "Reason:",
+       "createacct-reason": "Reason",
+       "createacct-reason-ph": "Why you are creating another account",
+       "createacct-captcha": "Security check",
+       "createacct-imgcaptcha-help": "",
+       "createacct-imgcaptcha-ph": "Enter the text you see above",
+       "createacct-submit": "Create your account",
+       "createacct-another-submit": "Create another account",
+       "createacct-benefit-heading": "{{SITENAME}} is made by people like you.",
+       "createacct-benefit-icon1": "icon-edits",
+       "createacct-benefit-head1": "{{NUMBEROFEDITS}}",
+       "createacct-benefit-body1": "{{PLURAL:$1|edit|edits}}",
+       "createacct-benefit-icon2": "icon-pages",
+       "createacct-benefit-head2": "{{NUMBEROFARTICLES}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|page|pages}}",
+       "createacct-benefit-icon3": "icon-contributors",
+       "createacct-benefit-head3": "{{NUMBEROFACTIVEUSERS}}",
+       "createacct-benefit-body3": "recent {{PLURAL:$1|contributor|contributors}}",
+       "badretype": "The passwords you entered do not match.",
+       "userexists": "Username entered already in use.\nPlease choose a different name.",
+       "loginerror": "Login error",
+       "createacct-error": "Account creation error",
+       "createaccounterror": "Could not create account: $1",
+       "nocookiesnew": "The user account was created, but you are not logged in.\n{{SITENAME}} uses cookies to log in users.\nYou have cookies disabled.\nPlease enable them, then log in with your new username and password.",
+       "nocookieslogin": "{{SITENAME}} uses cookies to log in users.\nYou have cookies disabled.\nPlease enable them and try again.",
+       "nocookiesfornew": "The user account was not created, as we could not confirm its source.\nEnsure you have cookies enabled, reload this page and try again.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
+       "noname": "You have not specified a valid username.",
+       "loginsuccesstitle": "Login successful",
+       "loginsuccess": "<strong>You are now logged in to {{SITENAME}} as \"$1\".</strong>",
+       "nosuchuser": "There is no user by the name \"$1\".\nUsernames are case sensitive.\nCheck your spelling, or [[Special:UserLogin/signup|create a new account]].",
+       "nosuchusershort": "There is no user by the name \"$1\".\nCheck your spelling.",
+       "nouserspecified": "You have to specify a username.",
+       "login-userblocked": "This user is blocked. Login not allowed.",
+       "wrongpassword": "Incorrect password entered.\nPlease try again.",
+       "wrongpasswordempty": "Password entered was blank.\nPlease try again.",
+       "passwordtooshort": "Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.",
+       "password-name-match": "Your password must be different from your username.",
+       "password-login-forbidden": "The use of this username and password has been forbidden.",
+       "mailmypassword": "Reset password",
+       "passwordremindertitle": "New temporary password for {{SITENAME}}",
+       "passwordremindertext": "Someone (probably you, from IP address $1) requested a new\npassword for {{SITENAME}} ($4). A temporary password for user\n\"$2\" has been created and was set to \"$3\". If this was your\nintent, you will need to log in and choose a new password now.\nYour temporary password will expire in {{PLURAL:$5|one day|$5 days}}.\n\nIf someone else made this request, or if you have remembered your password,\nand you no longer wish to change it, you may ignore this message and\ncontinue using your old password.",
+       "noemail": "There is no email address recorded for user \"$1\".",
+       "noemailcreate": "You need to provide a valid email address.",
+       "passwordsent": "A new password has been sent to the email address registered for \"$1\".\nPlease log in again after you receive it.",
+       "blocked-mailpassword": "Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.",
+       "eauthentsent": "A confirmation email has been sent to the specified email address.\nBefore any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.",
+       "throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.",
+       "loginstart": "",
+       "loginend": "",
+       "loginend-https": "",
+       "signupstart": "{{int:loginstart}}",
+       "signupend": "{{int:loginend}}",
+       "signupend-https": "",
+       "mailerror": "Error sending mail: $1",
+       "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
+       "emailauthenticated": "Your email address was confirmed on $2 at $3.",
+       "emailnotauthenticated": "Your email address is not yet confirmed.\nNo email will be sent for any of the following features.",
+       "noemailprefs": "Specify an email address in your preferences for these features to work.",
+       "emailconfirmlink": "Confirm your email address",
+       "invalidemailaddress": "The email address cannot be accepted as it appears to have an invalid format.\nPlease enter a well-formatted address or empty that field.",
+       "cannotchangeemail": "Account email addresses cannot be changed on this wiki.",
+       "emaildisabled": "This site cannot send emails.",
+       "emailsender": "{{SITENAME}}",
+       "accountcreated": "Account created",
+       "accountcreatedtext": "The user account for [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) has been created.",
+       "createaccount-title": "Account creation for {{SITENAME}}",
+       "createaccount-text": "Someone created an account for your email address on {{SITENAME}} ($4) named \"$2\", with password \"$3\".\nYou should log in and change your password now.\n\nYou may ignore this message, if this account was created in error.",
+       "login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
+       "login-abort-generic": "Your login was unsuccessful - Aborted",
+       "loginlanguagelabel": "Language: $1",
+       "loginlanguagelinks": "* {{#language:de}}|de\n* {{#language:en}}|en\n* {{#language:eo}}|eo\n* {{#language:fr}}|fr\n* {{#language:es}}|es\n* {{#language:it}}|it\n* {{#language:nl}}|nl",
+       "suspicious-userlogout": "Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.",
+       "createacct-another-realname-tip": "Real name is optional.\nIf you choose to provide it, this will be used for giving the user attribution for their work.",
+       "pt-login": "Log in",
+       "pt-login-button": "Log in",
+       "pt-createaccount": "Create account",
+       "pt-userlogout": "Log out",
+       "pear-mail-error": "$1",
+       "php-mail-error": "$1",
+       "php-mail-error-unknown": "Unknown error in PHP's mail() function.",
+       "user-mail-no-addy": "Tried to send email without an email address.",
+       "user-mail-no-body": "Tried to send email with an empty or unreasonably short body.",
+       "changepassword": "Change password",
+       "changepassword-summary": "",
+       "resetpass_announce": "To finish logging in, you must set a new password.",
+       "resetpass_text": "<!-- Add text here -->",
+       "resetpass_header": "Change account password",
+       "oldpassword": "Old password:",
+       "newpassword": "New password:",
+       "retypenew": "Retype new password:",
+       "resetpass_submit": "Set password and log in",
+       "changepassword-success": "Your password has been changed successfully!",
+       "changepassword-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
+       "resetpass_forbidden": "Passwords cannot be changed",
+       "resetpass-no-info": "You must be logged in to access this page directly.",
+       "resetpass-submit-loggedin": "Change password",
+       "resetpass-submit-cancel": "Cancel",
+       "resetpass-wrong-oldpass": "Invalid temporary or current password.\nYou may have already successfully changed your password or requested a new temporary password.",
+       "resetpass-recycled": "Please reset your password to something other than your current password.",
+       "resetpass-temp-emailed": "You logged in with a temporary emailed code.\nTo finish logging in, you must set a new password here:",
+       "resetpass-temp-password": "Temporary password:",
+       "resetpass-abort-generic": "Password change has been aborted by an extension.",
+       "resetpass-expired": "Your password has expired. Please set a new password to log in.",
+       "resetpass-expired-soft": "Your password has expired and needs to be reset. Please choose a new password now, or click \"{{int:resetpass-submit-cancel}}\" to reset it later.",
+       "resetpass-validity-soft": "Your password is not valid: $1\n\nPlease choose a new password now, or click \"{{int:resetpass-submit-cancel}}\" to reset it later.",
+       "passwordreset": "Reset password",
+       "passwordreset-text-one": "Complete this form to receive a temporary password via email.",
+       "passwordreset-text-many": "{{PLURAL:$1|Fill in one of the fields to receive a temporary password via email.}}",
+       "passwordreset-legend": "Reset password",
+       "passwordreset-disabled": "Password resets have been disabled on this wiki.",
+       "passwordreset-emaildisabled": "Email features have been disabled on this wiki.",
+       "passwordreset-username": "Username:",
+       "passwordreset-domain": "Domain:",
+       "passwordreset-capture": "View the resulting email?",
+       "passwordreset-capture-help": "If you check this box, the email (with the temporary password) will be shown to you as well as being sent to the user.",
+       "passwordreset-email": "Email address:",
+       "passwordreset-emailtitle": "Account details on {{SITENAME}}",
+       "passwordreset-emailtext-ip": "Someone (probably you, from IP address $1) requested a reset of your\npassword for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}\nassociated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
+       "passwordreset-emailtext-user": "User $1 on {{SITENAME}} requested a reset of your password for {{SITENAME}}\n($4). The following user {{PLURAL:$3|account is|accounts are}} associated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
+       "passwordreset-emailelement": "Username: $1\nTemporary password: $2",
+       "passwordreset-emailsent": "A password reset email has been sent.",
+       "passwordreset-emailsent-capture": "A password reset email has been sent, which is shown below.",
+       "passwordreset-emailerror-capture": "A password reset email was generated, which is shown below, but sending it to the {{GENDER:$2|user}} failed: $1",
+       "changeemail": "Change email address",
+       "changeemail-summary": "",
+       "changeemail-header": "Change account email address",
+       "changeemail-text": "Complete this form to change your email address. You will need to enter your password to confirm this change.",
+       "changeemail-no-info": "You must be logged in to access this page directly.",
+       "changeemail-oldemail": "Current email address:",
+       "changeemail-newemail": "New email address:",
+       "changeemail-none": "(none)",
+       "changeemail-password": "Your {{SITENAME}} password:",
+       "changeemail-submit": "Change email",
+       "changeemail-cancel": "Cancel",
+       "changeemail-throttled": "You have made too many login attempts.\nPlease wait $1 before trying again.",
+       "resettokens": "Reset tokens",
+       "resettokens-summary": "",
+       "resettokens-text": "You can reset tokens which allow access to certain private data associated with your account here.\n\nYou should do it if you accidentally shared them with someone or if your account has been compromised.",
+       "resettokens-no-tokens": "There are no tokens to reset.",
+       "resettokens-legend": "Reset tokens",
+       "resettokens-tokens": "Tokens:",
+       "resettokens-token-label": "$1 (current value: $2)",
+       "resettokens-watchlist-token": "Token for the web feed (Atom/RSS) of [[Special:Watchlist|changes to pages on your watchlist]]",
+       "resettokens-done": "Tokens reset.",
+       "resettokens-resetbutton": "Reset selected tokens",
+       "bold_sample": "Bold text",
+       "bold_tip": "Bold text",
+       "italic_sample": "Italic text",
+       "italic_tip": "Italic text",
+       "link_sample": "Link title",
+       "link_tip": "Internal link",
+       "extlink_sample": "http://www.example.com link title",
+       "extlink_tip": "External link (remember http:// prefix)",
+       "headline_sample": "Headline text",
+       "headline_tip": "Level 2 headline",
+       "nowiki_sample": "Insert non-formatted text here",
+       "nowiki_tip": "Ignore wiki formatting",
+       "image_sample": "Example.jpg",
+       "image_tip": "Embedded file",
+       "media_sample": "Example.ogg",
+       "media_tip": "File link",
+       "sig_tip": "Your signature with timestamp",
+       "hr_tip": "Horizontal line (use sparingly)",
+       "summary": "Summary:",
+       "subject": "Subject/headline:",
+       "minoredit": "This is a minor edit",
+       "watchthis": "Watch this page",
+       "savearticle": "Save page",
+       "preview": "Preview",
+       "showpreview": "Show preview",
+       "showdiff": "Show changes",
+       "anoneditwarning": "<strong>Warning:</strong> You are not logged in.\nYour IP address will be recorded in this page's edit history.",
+       "anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
+       "missingsummary": "<strong>Reminder:</strong> You have not provided an edit summary.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
+       "missingcommenttext": "Please enter a comment below.",
+       "missingcommentheader": "<strong>Reminder:</strong> You have not provided a subject/headline for this comment.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
+       "summary-preview": "Summary preview:",
+       "subject-preview": "Subject/headline preview:",
+       "blockedtitle": "User is blocked",
+       "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
+       "autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
+       "blockednoreason": "no reason given",
+       "whitelistedittext": "Please $1 to edit pages.",
+       "confirmedittext": "You must confirm your email address before editing pages.\nPlease set and validate your email address through your [[Special:Preferences|user preferences]].",
+       "nosuchsectiontitle": "Cannot find section",
+       "nosuchsectiontext": "You tried to edit a section that does not exist.\nIt may have been moved or deleted while you were viewing the page.",
+       "loginreqtitle": "Login required",
+       "loginreqlink": "log in",
+       "loginreqpagetext": "Please $1 to view other pages.",
+       "accmailtitle": "Password sent",
+       "accmailtext": "A randomly generated password for [[User talk:$1|$1]] has been sent to $2. It can be changed on the <em>[[Special:ChangePassword|change password]]</em> page upon logging in.",
+       "newarticle": "(New)",
+       "newarticletext": "You have followed a link to a page that does not exist yet.\nTo create the page, start typing in the box below (see the [$1 help page] for more info).\nIf you are here by mistake, click your browser's <strong>back</strong> button.",
+       "newarticletextanon": "{{int:newarticletext|$1}}",
+       "talkpagetext": "<!-- MediaWiki:talkpagetext -->",
+       "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify him/her.\nSuch an IP address can be shared by several users.\nIf you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
+       "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.",
+       "noarticletext-nopermission": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.",
+       "noarticletextanon": "{{int:noarticletext}}",
+       "missing-revision": "The revision #$1 of the page named \"{{FULLPAGENAME}}\" does not exist.\n\nThis is usually caused by following an outdated history link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "userpage-userdoesnotexist": "User account \"$1\" is not registered.\nPlease check if you want to create/edit this page.",
+       "userpage-userdoesnotexist-view": "User account \"$1\" is not registered.",
+       "blocked-notice-logextract": "This user is currently blocked.\nThe latest block log entry is provided below for reference:",
+       "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Clear the cache in <em>Tools → Preferences</em>",
+       "usercssyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new CSS before saving.",
+       "userjsyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new JavaScript before saving.",
+       "usercsspreview": "<strong>Remember that you are only previewing your user CSS.\nIt has not yet been saved!</strong>",
+       "userjspreview": "<strong>Remember that you are only testing/previewing your user JavaScript.\nIt has not yet been saved!</strong>",
+       "sitecsspreview": "<strong>Remember that you are only previewing this CSS.\nIt has not yet been saved!</strong>",
+       "sitejspreview": "<strong>Remember that you are only previewing this JavaScript code.\nIt has not yet been saved!</strong>",
+       "userinvalidcssjstitle": "<strong>Warning:</strong> There is no skin \"$1\".\nCustom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.css as opposed to {{ns:user}}:Foo/Vector.css.",
+       "updated": "(Updated)",
+       "note": "<strong>Note:</strong>",
+       "previewnote": "<strong>Remember that this is only a preview.</strong>\nYour changes have not yet been saved!",
+       "continue-editing": "Go to editing area",
+       "previewconflict": "This preview reflects the text in the upper text editing area as it will appear if you choose to save.",
+       "session_fail_preview": "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>\nPlease try again.\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
+       "session_fail_preview_html": "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>\n\n<em>Because {{SITENAME}} has raw HTML enabled, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate edit attempt, please try again.</strong>\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
+       "token_suffix_mismatch": "<strong>Your edit has been rejected because your client mangled the punctuation characters in the edit token.</strong>\nThe edit has been rejected to prevent corruption of the page text.\nThis sometimes happens when you are using a buggy web-based anonymous proxy service.",
+       "edit_form_incomplete": "<strong>Some parts of the edit form did not reach the server; double-check that your edits are intact and try again.</strong>",
+       "editing": "Editing $1",
+       "creating": "Creating $1",
+       "editingsection": "Editing $1 (section)",
+       "editingcomment": "Editing $1 (new section)",
+       "editconflict": "Edit conflict: $1",
+       "explainconflict": "Someone else has changed this page since you started editing it.\nThe upper text area contains the page text as it currently exists.\nYour changes are shown in the lower text area.\nYou will have to merge your changes into the existing text.\n<strong>Only</strong> the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
+       "yourtext": "Your text",
+       "storedversion": "Stored revision",
+       "nonunicodebrowser": "<strong>Warning: Your browser is not Unicode compliant.</strong>\nA workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.",
+       "editingold": "<strong>Warning: You are editing an out-of-date revision of this page.</strong>\nIf you save it, any changes made since this revision will be lost.",
+       "yourdiff": "Differences",
+       "copyrightwarning": "Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details).\nIf you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.<br />\nYou are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.\n<strong>Do not submit copyrighted work without permission!</strong>",
+       "copyrightwarning2": "Please note that all contributions to {{SITENAME}} may be edited, altered, or removed by other contributors.\nIf you do not want your writing to be edited mercilessly, then do not submit it here.<br />\nYou are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see $1 for details).\n<strong>Do not submit copyrighted work without permission!</strong>",
+       "editpage-head-copy-warn": "-",
+       "editpage-tos-summary": "-",
+       "longpage-hint": "-",
+       "longpageerror": "<strong>Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.</strong>\nIt cannot be saved.",
+       "readonlywarning": "<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>\nYou may wish to copy and paste your text into a text file and save it for later.\n\nThe administrator who locked it offered this explanation: $1",
+       "protectedpagewarning": "<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>\nThe latest log entry is provided below for reference:",
+       "semiprotectedpagewarning": "<strong>Note:</strong> This page has been protected so that only registered users can edit it.\nThe latest log entry is provided below for reference:",
+       "cascadeprotectedwarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
+       "titleprotectedwarning": "<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>\nThe latest log entry is provided below for reference:",
+       "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
+       "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} used in this preview:",
+       "templatesusedsection": "{{PLURAL:$1|Template|Templates}} used in this section:",
+       "template-protected": "(protected)",
+       "template-semiprotected": "(semi-protected)",
+       "hiddencategories": "This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:",
+       "edittools": "<!-- Text here will be shown below edit and upload forms. -->",
+       "edittools-upload": "-",
+       "nocreatetext": "{{SITENAME}} has restricted the ability to create new pages.\nYou can go back and edit an existing page, or [[Special:UserLogin|log in or create an account]].",
+       "nocreate-loggedin": "You do not have permission to create new pages.",
+       "sectioneditnotsupported-title": "Section editing not supported",
+       "sectioneditnotsupported-text": "Section editing is not supported in this page.",
+       "permissionserrors": "Permission error",
+       "permissionserrorstext": "You do not have permission to do that, for the following {{PLURAL:$1|reason|reasons}}:",
+       "permissionserrorstext-withaction": "You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:",
+       "recreate-moveddeleted-warn": "<strong>Warning: You are recreating a page that was previously deleted.</strong>\n\nYou should consider whether it is appropriate to continue editing this page.\nThe deletion and move log for this page are provided here for convenience:",
+       "moveddeleted-notice": "This page has been deleted.\nThe deletion and move log for the page are provided below for reference.",
+       "log-fulllog": "View full log",
+       "edit-hook-aborted": "Edit aborted by hook.\nIt gave no explanation.",
+       "edit-gone-missing": "Could not update the page.\nIt appears to have been deleted.",
+       "edit-conflict": "Edit conflict.",
+       "edit-no-change": "Your edit was ignored because no change was made to the text.",
+       "postedit-confirmation-created": "The page has been created.",
+       "postedit-confirmation-restored": "The page has been restored.",
+       "postedit-confirmation-saved": "Your edit was saved.",
+       "edit-already-exists": "Could not create a new page.\nIt already exists.",
+       "addsection-preload": "",
+       "addsection-editintro": "",
+       "defaultmessagetext": "Default message text",
+       "content-failed-to-parse": "Failed to parse $2 content for $1 model: $3",
+       "invalid-content-data": "Invalid content data",
+       "content-not-allowed-here": "\"$1\" content is not allowed on page [[$2]]",
+       "editwarning-warning": "Leaving this page may cause you to lose any changes you have made.\nIf you are logged in, you can disable this warning in the \"{{int:prefs-editing}}\" section of your preferences.",
+       "editpage-notsupportedcontentformat-title": "Content format not supported",
+       "editpage-notsupportedcontentformat-text": "The content format $1 is not supported by the content model $2.",
+       "content-model-wikitext": "wikitext",
+       "content-model-text": "plain text",
+       "content-model-javascript": "JavaScript",
+       "content-model-css": "CSS",
+       "expensive-parserfunction-warning": "<strong>Warning:</strong> This page contains too many expensive parser function calls.\n\nIt should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.",
+       "expensive-parserfunction-category": "Pages with too many expensive parser function calls",
+       "post-expand-template-inclusion-warning": "<strong>Warning:</strong> Template include size is too large.\nSome templates will not be included.",
+       "post-expand-template-inclusion-category": "Pages where template include size is exceeded",
+       "post-expand-template-argument-warning": "<strong>Warning:</strong> This page contains at least one template argument that has a too large expansion size.\nThese arguments have been omitted.",
+       "post-expand-template-argument-category": "Pages containing omitted template arguments",
+       "parser-template-loop-warning": "Template loop detected: [[$1]]",
+       "parser-template-recursion-depth-warning": "Template recursion depth limit exceeded ($1)",
+       "language-converter-depth-warning": "Language converter depth limit exceeded ($1)",
+       "node-count-exceeded-category": "Pages where node-count is exceeded",
+       "node-count-exceeded-warning": "Page exceeded the node-count",
+       "expansion-depth-exceeded-category": "Pages where expansion depth is exceeded",
+       "expansion-depth-exceeded-warning": "Page exceeded the expansion depth",
+       "parser-unstrip-loop-warning": "Unstrip loop detected",
+       "parser-unstrip-recursion-limit": "Unstrip recursion limit exceeded ($1)",
+       "converter-manual-rule-error": "Error detected in manual language conversion rule",
+       "undo-success": "The edit can be undone.\nPlease check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.",
+       "undo-failure": "The edit could not be undone due to conflicting intermediate edits.",
+       "undo-norev": "The edit could not be undone because it does not exist or was deleted.",
+       "undo-nochange": "The edit appears to have already been undone.",
+       "undo-summary": "Undo revision $1 by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])",
+       "undo-summary-username-hidden": "Undo revision $1 by a hidden user",
+       "cantcreateaccounttitle": "Cannot create account",
+       "cantcreateaccount-text": "Account creation from this IP address (<strong>$1</strong>) has been blocked by [[User:$3|$3]].\n\nThe reason given by $3 is <em>$2</em>",
+       "cantcreateaccount-range-text": "Account creation from IP addresses in the range '''$1''', which includes your IP address ('''$4'''), has been blocked by [[User:$3|$3]].\n\nThe reason given by $3 is ''$2''",
+       "createaccount-hook-aborted": "$1",
+       "viewpagelogs": "View logs for this page",
+       "nohistory": "There is no edit history for this page.",
+       "currentrev": "Latest revision",
+       "currentrev-asof": "Latest revision as of $1",
+       "revisionasof": "Revision as of $1",
+       "revision-info": "Revision as of $1 by $2",
+       "revision-info-current": "-",
+       "revision-nav": "($1) $2{{int:pipe-separator}}$3 ($4){{int:pipe-separator}}$5 ($6)",
+       "previousrevision": "← Older revision",
+       "nextrevision": "Newer revision →",
+       "currentrevisionlink": "Latest revision",
+       "cur": "cur",
+       "next": "next",
+       "last": "prev",
+       "page_first": "first",
+       "page_last": "last",
+       "histlegend": "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />\nLegend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = minor edit.",
+       "history-fieldset-title": "Browse history",
+       "history-show-deleted": "Deleted only",
+       "history_copyright": "-",
+       "histfirst": "oldest",
+       "histlast": "newest",
+       "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
+       "historyempty": "(empty)",
+       "history-feed-title": "Revision history",
+       "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.",
+       "rev-deleted-comment": "(edit summary removed)",
+       "rev-deleted-user": "(username removed)",
+       "rev-deleted-event": "(log action removed)",
+       "rev-deleted-user-contribs": "[username or IP address removed - edit hidden from contributions]",
+       "rev-deleted-text-permission": "This page revision has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-deleted-text-unhide": "This page revision has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nYou can still [$1 view this revision] if you wish to proceed.",
+       "rev-suppressed-text-unhide": "This page revision has been <strong>suppressed</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nYou can still [$1 view this revision] if you wish to proceed.",
+       "rev-deleted-text-view": "This page revision has been <strong>deleted</strong>.\nYou can view it; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-text-view": "This page revision has been <strong>suppressed</strong>.\nYou can view it; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
+       "rev-deleted-no-diff": "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-no-diff": "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.",
+       "rev-deleted-unhide-diff": "One of the revisions of this diff has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nYou can still [$1 view this diff] if you wish to proceed.",
+       "rev-suppressed-unhide-diff": "One of the revisions of this diff has been <strong>suppressed</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nYou can still [$1 view this diff] if you wish to proceed.",
+       "rev-deleted-diff-view": "One of the revisions of this diff has been <strong>deleted</strong>.\nYou can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-diff-view": "One of the revisions of this diff has been <strong>suppressed</strong>.\nYou can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
+       "rev-delundel": "change visibility",
+       "rev-showdeleted": "show",
+       "revisiondelete": "Delete/undelete revisions",
+       "revdelete-nooldid-title": "Invalid target revision",
+       "revdelete-nooldid-text": "You have either not specified a target revision(s) to perform this\nfunction, the specified revision does not exist, or you are attempting to hide the current revision.",
+       "revdelete-no-file": "The file specified does not exist.",
+       "revdelete-show-file-confirm": "Are you sure you want to view a deleted revision of the file \"<nowiki>$1</nowiki>\" from $2 at $3?",
+       "revdelete-show-file-submit": "Yes",
+       "revdelete-selected-text": "{{PLURAL:$1|Selected revision|Selected revisions}} of [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Selected file version|Selected file versions}} of [[:$2]]:",
+       "logdelete-selected": "{{PLURAL:$1|Selected log event|Selected log events}}:",
+       "revdelete-text-text": "Deleted revisions will still appear in the page history, but parts of their content will be inaccessible to the public.",
+       "revdelete-text-file": "Deleted file versions will still appear in the file history, but parts of their content will be inaccessible to the public.",
+       "logdelete-text": "Deleted log events will still appear in the logs, but parts of their content will be inaccessible to the public.",
+       "revdelete-text-others": "Other administrators on {{SITENAME}} will still be able to access the hidden content and can undelete it again through this same interface, unless additional restrictions are set.",
+       "revdelete-confirm": "Please confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].",
+       "revdelete-suppress-text": "Suppression should <strong>only</strong> be used for the following cases:\n* potentially libelous information\n* inappropriate personal information\n*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>",
+       "revdelete-legend": "Set visibility restrictions",
+       "revdelete-hide-text": "Revision text",
+       "revdelete-hide-image": "Hide file content",
+       "revdelete-hide-name": "Hide action and target",
+       "revdelete-hide-comment": "Edit summary",
+       "revdelete-hide-user": "Editor's username/IP address",
+       "revdelete-hide-restricted": "Suppress data from administrators as well as others",
+       "revdelete-radio-same": "(do not change)",
+       "revdelete-radio-set": "Hidden",
+       "revdelete-radio-unset": "Visible",
+       "revdelete-suppress": "Suppress data from administrators as well as others",
+       "revdelete-unsuppress": "Remove restrictions on restored revisions",
+       "revdelete-log": "Reason:",
+       "revdelete-submit": "Apply to selected {{PLURAL:$1|revision|revisions}}",
+       "revdelete-success": "<strong>Revision visibility successfully updated.</strong>",
+       "revdelete-failure": "<strong>Revision visibility could not be updated:</strong>\n$1",
+       "logdelete-success": "<strong>Log visibility successfully set.</strong>",
+       "logdelete-failure": "<strong>Log visibility could not be set:</strong>\n$1",
+       "revdel-restore": "change visibility",
+       "pagehist": "Page history",
+       "deletedhist": "Deleted history",
+       "revdelete-hide-current": "Error hiding the item dated $2, $1: This is the current revision.\nIt cannot be hidden.",
+       "revdelete-show-no-access": "Error showing the item dated $2, $1: This item has been marked \"restricted\".\nYou do not have access to it.",
+       "revdelete-modify-no-access": "Error modifying the item dated $2, $1: This item has been marked \"restricted\".\nYou do not have access to it.",
+       "revdelete-modify-missing": "Error modifying item ID $1: It is missing from the database!",
+       "revdelete-no-change": "<strong>Warning:</strong> The item dated $2, $1 already had the requested visibility settings.",
+       "revdelete-concurrent-change": "Error modifying the item dated $2, $1: Its status appears to have been changed by someone else while you attempted to modify it.\nPlease check the logs.",
+       "revdelete-only-restricted": "Error hiding the item dated $2, $1: You cannot suppress items from view by administrators without also selecting one of the other visibility options.",
+       "revdelete-reason-dropdown": "*Common delete reasons\n** Copyright violation\n** Inappropriate comment or personal information\n** Inappropriate username\n** Potentially libelous information",
+       "revdelete-otherreason": "Other/additional reason:",
+       "revdelete-reasonotherlist": "Other reason",
+       "revdelete-edit-reasonlist": "Edit delete reasons",
+       "revdelete-offender": "Revision author:",
+       "suppressionlog": "Suppression log",
+       "suppressionlogtext": "Below is a list of deletions and blocks involving content hidden from administrators.\nSee the [[Special:BlockList|block list]] for the list of currently operational bans and blocks.",
+       "mergehistory": "Merge page histories",
+       "mergehistory-header": "This page lets you merge revisions of the history of one source page into a newer page.\nMake sure that this change will maintain historical page continuity.",
+       "mergehistory-box": "Merge revisions of two pages:",
+       "mergehistory-from": "Source page:",
+       "mergehistory-into": "Destination page:",
+       "mergehistory-list": "Mergeable edit history",
+       "mergehistory-merge": "The following revisions of [[:$1]] can be merged into [[:$2]].\nUse the radio button column to merge in only the revisions created at and before the specified time.\nNote that using the navigation links will reset this column.",
+       "mergehistory-go": "Show mergeable edits",
+       "mergehistory-submit": "Merge revisions",
+       "mergehistory-empty": "No revisions can be merged.",
+       "mergehistory-success": "$3 {{PLURAL:$3|revision|revisions}} of [[:$1]] successfully merged into [[:$2]].",
+       "mergehistory-fail": "Unable to perform history merge, please recheck the page and time parameters.",
+       "mergehistory-no-source": "Source page $1 does not exist.",
+       "mergehistory-no-destination": "Destination page $1 does not exist.",
+       "mergehistory-invalid-source": "Source page must be a valid title.",
+       "mergehistory-invalid-destination": "Destination page must be a valid title.",
+       "mergehistory-autocomment": "Merged [[:$1]] into [[:$2]]",
+       "mergehistory-comment": "Merged [[:$1]] into [[:$2]]: $3",
+       "mergehistory-same-destination": "Source and destination pages cannot be the same",
+       "mergehistory-reason": "Reason:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
+       "mergelog": "Merge log",
+       "pagemerge-logentry": "merged [[$1]] into [[$2]] (revisions up to $3)",
+       "revertmerge": "Unmerge",
+       "mergelogpagetext": "Below is a list of the most recent merges of one page history into another.",
+       "history-title": "Revision history of \"$1\"",
+       "difference-title": "Difference between revisions of \"$1\"",
+       "difference-title-multipage": "Difference between pages \"$1\" and \"$2\"",
+       "difference-multipage": "(Difference between pages)",
+       "lineno": "Line $1:",
+       "compareselectedversions": "Compare selected revisions",
+       "showhideselectedversions": "Change visibility of selected revisions",
+       "editundo": "undo",
+       "diff-empty": "(No difference)",
+       "diff-multi-sameuser": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)",
+       "diff-multi-otherusers": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one other user|$2 users}} not shown)",
+       "diff-multi-manyusers": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)",
+       "difference-missing-revision": "{{PLURAL:$2|One revision|$2 revisions}} of this difference ($1) {{PLURAL:$2|was|were}} not found.\n\nThis is usually caused by following an outdated diff link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "search-summary": "",
+       "searchresults": "Search results",
+       "searchresults-title": "Search results for \"$1\"",
+       "toomanymatches": "Too many matches were returned, please try a different query",
+       "titlematches": "Page title matches",
+       "textmatches": "Page text matches",
+       "notextmatches": "No page text matches",
+       "prevn": "previous {{PLURAL:$1|$1}}",
+       "nextn": "next {{PLURAL:$1|$1}}",
+       "prevn-title": "Previous $1 {{PLURAL:$1|result|results}}",
+       "nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
+       "shown-title": "Show $1 {{PLURAL:$1|result|results}} per page",
+       "viewprevnext": "View ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "<strong>There is a page named \"[[:$1]]\" on this wiki.</strong> {{PLURAL:$2|0=|See also the other search results found.}}",
+       "searchmenu-new": "<strong>Create the page \"[[:$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
+       "searchmenu-new-nocreate": "",
+       "searchprofile-articles": "Content pages",
+       "searchprofile-project": "Help and Project pages",
+       "searchprofile-images": "Multimedia",
+       "searchprofile-everything": "Everything",
+       "searchprofile-advanced": "Advanced",
+       "searchprofile-articles-tooltip": "Search in $1",
+       "searchprofile-project-tooltip": "Search in $1",
+       "searchprofile-images-tooltip": "Search for files",
+       "searchprofile-everything-tooltip": "Search all of content (including talk pages)",
+       "searchprofile-advanced-tooltip": "Search in custom namespaces",
+       "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
+       "search-result-category-size": "{{PLURAL:$1|1 member|$1 members}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})",
+       "search-result-score": "Relevance: $1%",
+       "search-redirect": "(redirect $1)",
+       "search-section": "(section $1)",
+       "search-file-match": "(matches file content)",
+       "search-suggest": "Did you mean: $1",
+       "search-interwiki-caption": "Sister projects",
+       "search-interwiki-default": "Results from $1:",
+       "search-interwiki-custom": "",
+       "search-interwiki-more": "(more)",
+       "search-relatedarticle": "Related",
+       "searcheverything-enable": "Search in all namespaces",
+       "searchrelated": "related",
+       "searchall": "all",
+       "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
+       "showingresultsinrange": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</strong>.",
+       "showingresultsnum": "Showing below {{PLURAL:$3|<strong>1</strong> result|<strong>$3</strong> results}} starting with #<strong>$2</strong>.",
+       "showingresultsheader": "{{PLURAL:$5|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}} for <strong>$4</strong>",
+       "search-nonefound": "There were no results matching the query.",
+       "powersearch-legend": "Advanced search",
+       "powersearch-ns": "Search in namespaces:",
+       "powersearch-togglelabel": "Check:",
+       "powersearch-toggleall": "All",
+       "powersearch-togglenone": "None",
+       "search-external": "External search",
+       "searchdisabled": "{{SITENAME}} search is disabled.\nYou can search via Google in the meantime.\nNote that their indexes of {{SITENAME}} content may be out of date.",
+       "googlesearch": "<form method=\"get\" action=\"//www.google.com/search\" id=\"googlesearch\">\n\t<input type=\"hidden\" name=\"domains\" value=\"{{SERVER}}\" />\n\t<input type=\"hidden\" name=\"num\" value=\"50\" />\n\t<input type=\"hidden\" name=\"ie\" value=\"$2\" />\n\t<input type=\"hidden\" name=\"oe\" value=\"$2\" />\n\n\t<input type=\"text\" name=\"q\" size=\"31\" maxlength=\"255\" value=\"$1\" />\n\t<input type=\"submit\" name=\"btnG\" value=\"$3\" />\n  <div>\n\t<input type=\"radio\" name=\"sitesearch\" id=\"gwiki\" value=\"{{SERVER}}\" checked=\"checked\" /><label for=\"gwiki\">{{SITENAME}}</label>\n\t<input type=\"radio\" name=\"sitesearch\" id=\"gWWW\" value=\"\" /><label for=\"gWWW\">WWW</label>\n  </div>\n</form>",
+       "search-error": "An error has occurred while searching: $1",
+       "opensearch-desc": "{{SITENAME}} ({{CONTENTLANGUAGE}})",
+       "preferences": "Preferences",
+       "preferences-summary": "",
+       "mypreferences": "Preferences",
+       "prefs-edits": "Number of edits:",
+       "prefsnologintext2": "Please $1 to change your preferences.",
+       "prefs-skin": "Skin",
+       "skin-preview": "Preview",
+       "datedefault": "No preference",
+       "prefs-labs": "Labs features",
+       "prefs-user-pages": "User pages",
+       "prefs-personal": "User profile",
+       "prefs-rc": "Recent changes",
+       "prefs-watchlist": "Watchlist",
+       "prefs-watchlist-days": "Days to show in watchlist:",
+       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-edits": "Maximum number of changes to show in expanded watchlist:",
+       "prefs-watchlist-edits-max": "Maximum number: 1000",
+       "prefs-watchlist-token": "Watchlist token:",
+       "prefs-misc": "Misc",
+       "prefs-resetpass": "Change password",
+       "prefs-changeemail": "Change email address",
+       "prefs-setemail": "Set an email address",
+       "prefs-email": "Email options",
+       "prefs-rendering": "Appearance",
+       "saveprefs": "Save",
+       "restoreprefs": "Restore all default settings (in all sections)",
+       "prefs-editing": "Editing",
+       "rows": "Rows:",
+       "columns": "Columns:",
+       "searchresultshead": "Search",
+       "stub-threshold": "Threshold for <a href=\"#\" class=\"stub\">stub link</a> formatting (bytes):",
+       "stub-threshold-disabled": "Disabled",
+       "recentchangesdays": "Days to show in recent changes:",
+       "recentchangesdays-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "recentchangescount": "Number of edits to show by default:",
+       "prefs-help-recentchangescount": "This includes recent changes, page histories, and logs.",
+       "prefs-help-watchlist-token2": "This is the secret key to the web feed of your watchlist.\nAnyone who knows it will be able to read your watchlist, so do not share it.\nIf you need to, [[Special:ResetTokens|you can reset it]].",
+       "savedprefs": "Your preferences have been saved.",
+       "timezonelegend": "Time zone:",
+       "localtime": "Local time:",
+       "timezoneuseserverdefault": "Use wiki default ($1)",
+       "timezoneuseoffset": "Other (specify offset)",
+       "servertime": "Server time:",
+       "guesstimezone": "Fill in from browser",
+       "timezoneregion-africa": "Africa",
+       "timezoneregion-america": "America",
+       "timezoneregion-antarctica": "Antarctica",
+       "timezoneregion-arctic": "Arctic",
+       "timezoneregion-asia": "Asia",
+       "timezoneregion-atlantic": "Atlantic Ocean",
+       "timezoneregion-australia": "Australia",
+       "timezoneregion-europe": "Europe",
+       "timezoneregion-indian": "Indian Ocean",
+       "timezoneregion-pacific": "Pacific Ocean",
+       "allowemail": "Enable email from other users",
+       "prefs-searchoptions": "Search",
+       "prefs-namespaces": "Namespaces",
+       "defaultns": "Otherwise search in these namespaces:",
+       "default": "default",
+       "prefs-files": "Files",
+       "prefs-custom-css": "Custom CSS",
+       "prefs-custom-js": "Custom JavaScript",
+       "prefs-common-css-js": "Shared CSS/JavaScript for all skins:",
+       "prefs-reset-intro": "You can use this page to reset your preferences to the site defaults.\nThis cannot be undone.",
+       "prefs-emailconfirm-label": "Email confirmation:",
+       "youremail": "Email:",
+       "username": "{{GENDER:$1|Username}}:",
+       "uid": "{{GENDER:$1|User}} ID:",
+       "prefs-memberingroups": "{{GENDER:$2|Member}} of {{PLURAL:$1|group|groups}}:",
+       "prefs-memberingroups-type": "$1",
+       "prefs-registration": "Registration time:",
+       "prefs-registration-date-time": "$1",
+       "yourrealname": "Real name:",
+       "yourlanguage": "Language:",
+       "yourvariant": "Content language variant:",
+       "prefs-help-variant": "Your preferred variant or orthography to display the content pages of this wiki in.",
+       "yournick": "New signature:",
+       "prefs-help-signature": "Comments on talk pages should be signed with \"<nowiki>~~~~</nowiki>\", which will be converted into your signature and a timestamp.",
+       "badsig": "Invalid raw signature.\nCheck HTML tags.",
+       "badsiglength": "Your signature is too long.\nIt must not be more than $1 {{PLURAL:$1|character|characters}} long.",
+       "yourgender": "How do you prefer to be described?",
+       "gender-unknown": "I prefer not to say",
+       "gender-male": "He edits wiki pages",
+       "gender-female": "She edits wiki pages",
+       "prefs-help-gender": "Setting this preference is optional.\nThe software uses its value to address you and to mention you to others using the appropriate grammatical gender.\nThis information will be public.",
+       "email": "Email",
+       "prefs-help-realname": "Real name is optional.\nIf you choose to provide it, this will be used for giving you attribution for your work.",
+       "prefs-help-email": "Email address is optional, but is needed for password resets, should you forget your password.",
+       "prefs-help-email-others": "You can also choose to let others contact you by email through a link on your user or talk page.\nYour email address is not revealed when other users contact you.",
+       "prefs-help-email-required": "Email address is required.",
+       "prefs-info": "Basic information",
+       "prefs-i18n": "Internationalisation",
+       "prefs-signature": "Signature",
+       "prefs-dateformat": "Date format",
+       "prefs-timeoffset": "Time offset",
+       "prefs-advancedediting": "General options",
+       "prefs-editor": "Editor",
+       "prefs-preview": "Preview",
+       "prefs-advancedrc": "Advanced options",
+       "prefs-advancedrendering": "Advanced options",
+       "prefs-advancedsearchoptions": "Advanced options",
+       "prefs-advancedwatchlist": "Advanced options",
+       "prefs-displayrc": "Display options",
+       "prefs-displaywatchlist": "Display options",
+       "prefs-tokenwatchlist": "Token",
+       "prefs-diffs": "Diffs",
+       "prefs-help-prefershttps": "This preference will take effect on your next login.",
+       "prefs-tabs-navigation-hint": "Tip: You can use the left and right arrow keys to navigate between the tabs in the tabs list.",
+       "email-address-validity-valid": "Email address appears valid",
+       "email-address-validity-invalid": "Enter a valid email address",
+       "userrights": "User rights management",
+       "userrights-summary": "",
+       "userrights-lookup-user": "Manage user groups",
+       "userrights-user-editname": "Enter a username:",
+       "editusergroup": "Edit user groups",
+       "editinguser": "Changing user rights of user <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Edit user groups",
+       "saveusergroups": "Save user groups",
+       "userrights-groupsmember": "Member of:",
+       "userrights-groupsmember-auto": "Implicit member of:",
+       "userrights-groupsmember-type": "$1",
+       "userrights-groups-help": "You may alter the groups this user is in:\n* A checked box means the user is in that group.\n* An unchecked box means the user is not in that group.\n* A * indicates that you cannot remove the group once you have added it, or vice versa.",
+       "userrights-reason": "Reason:",
+       "userrights-no-interwiki": "You do not have permission to edit user rights on other wikis.",
+       "userrights-nodatabase": "Database $1 does not exist or is not local.",
+       "userrights-nologin": "You must [[Special:UserLogin|log in]] with an administrator account to assign user rights.",
+       "userrights-notallowed": "You do not have permission to add or remove user rights.",
+       "userrights-changeable-col": "Groups you can change",
+       "userrights-unchangeable-col": "Groups you cannot change",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Conflict of user rights changes! Please review and confirm your changes.",
+       "userrights-removed-self": "You successfully removed your own rights. As such, you are no longer able to access this page.",
+       "group": "Group:",
+       "group-user": "Users",
+       "group-autoconfirmed": "Autoconfirmed users",
+       "group-bot": "Bots",
+       "group-sysop": "Administrators",
+       "group-bureaucrat": "Bureaucrats",
+       "group-suppress": "Oversights",
+       "group-all": "(all)",
+       "group-user-member": "{{GENDER:$1|user}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|autoconfirmed user}}",
+       "group-bot-member": "{{GENDER:$1|bot}}",
+       "group-sysop-member": "{{GENDER:$1|administrator}}",
+       "group-bureaucrat-member": "{{GENDER:$1|bureaucrat}}",
+       "group-suppress-member": "{{GENDER:$1|oversight}}",
+       "grouppage-user": "{{ns:project}}:Users",
+       "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmed users",
+       "grouppage-bot": "{{ns:project}}:Bots",
+       "grouppage-sysop": "{{ns:project}}:Administrators",
+       "grouppage-bureaucrat": "{{ns:project}}:Bureaucrats",
+       "grouppage-suppress": "{{ns:project}}:Oversight",
+       "right-read": "Read pages",
+       "right-edit": "Edit pages",
+       "right-createpage": "Create pages (which are not discussion pages)",
+       "right-createtalk": "Create discussion pages",
+       "right-createaccount": "Create new user accounts",
+       "right-minoredit": "Mark edits as minor",
+       "right-move": "Move pages",
+       "right-move-subpages": "Move pages with their subpages",
+       "right-move-rootuserpages": "Move root user pages",
+       "right-move-categorypages": "Move category pages",
+       "right-movefile": "Move files",
+       "right-suppressredirect": "Not create redirects from source pages when moving pages",
+       "right-upload": "Upload files",
+       "right-reupload": "Overwrite existing files",
+       "right-reupload-own": "Overwrite existing files uploaded by oneself",
+       "right-reupload-shared": "Override files on the shared media repository locally",
+       "right-upload_by_url": "Upload files from a URL",
+       "right-purge": "Purge the site cache for a page without confirmation",
+       "right-autoconfirmed": "Not be affected by IP-based rate limits",
+       "right-bot": "Be treated as an automated process",
+       "right-nominornewtalk": "Not have minor edits to discussion pages trigger the new messages prompt",
+       "right-apihighlimits": "Use higher limits in API queries",
+       "right-writeapi": "Use of the write API",
+       "right-delete": "Delete pages",
+       "right-bigdelete": "Delete pages with large histories",
+       "right-deletelogentry": "Delete and undelete specific log entries",
+       "right-deleterevision": "Delete and undelete specific revisions of pages",
+       "right-deletedhistory": "View deleted history entries, without their associated text",
+       "right-deletedtext": "View deleted text and changes between deleted revisions",
+       "right-browsearchive": "Search deleted pages",
+       "right-undelete": "Undelete a page",
+       "right-suppressrevision": "Review and restore revisions hidden from administrators",
+       "right-suppressionlog": "View private logs",
+       "right-block": "Block other users from editing",
+       "right-blockemail": "Block a user from sending email",
+       "right-hideuser": "Block a username, hiding it from the public",
+       "right-ipblock-exempt": "Bypass IP blocks, auto-blocks and range blocks",
+       "right-proxyunbannable": "Bypass automatic blocks of proxies",
+       "right-unblockself": "Unblock oneself",
+       "right-protect": "Change protection levels and edit cascade-protected pages",
+       "right-editprotected": "Edit pages protected as \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Edit pages protected as \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editinterface": "Edit the user interface",
+       "right-editusercssjs": "Edit other users' CSS and JavaScript files",
+       "right-editusercss": "Edit other users' CSS files",
+       "right-edituserjs": "Edit other users' JavaScript files",
+       "right-editmyusercss": "Edit your own user CSS files",
+       "right-editmyuserjs": "Edit your own user JavaScript files",
+       "right-viewmywatchlist": "View your own watchlist",
+       "right-editmywatchlist": "Edit your own watchlist. Note some actions will still add pages even without this right.",
+       "right-viewmyprivateinfo": "View your own private data (e.g. email address, real name)",
+       "right-editmyprivateinfo": "Edit your own private data (e.g. email address, real name)",
+       "right-editmyoptions": "Edit your own preferences",
+       "right-rollback": "Quickly rollback the edits of the last user who edited a particular page",
+       "right-markbotedits": "Mark rolled-back edits as bot edits",
+       "right-noratelimit": "Not be affected by rate limits",
+       "right-import": "Import pages from other wikis",
+       "right-importupload": "Import pages from a file upload",
+       "right-patrol": "Mark others' edits as patrolled",
+       "right-autopatrol": "Have one's own edits automatically marked as patrolled",
+       "right-patrolmarks": "View recent changes patrol marks",
+       "right-unwatchedpages": "View a list of unwatched pages",
+       "right-mergehistory": "Merge the history of pages",
+       "right-userrights": "Edit all user rights",
+       "right-userrights-interwiki": "Edit user rights of users on other wikis",
+       "right-siteadmin": "Lock and unlock the database",
+       "right-override-export-depth": "Export pages including linked pages up to a depth of 5",
+       "right-sendemail": "Send email to other users",
+       "right-passwordreset": "View password reset emails",
+       "newuserlogpage": "User creation log",
+       "newuserlogpagetext": "This is a log of user creations.",
+       "rightslog": "User rights log",
+       "rightslogtext": "This is a log of changes to user rights.",
+       "action-read": "read this page",
+       "action-edit": "edit this page",
+       "action-createpage": "create pages",
+       "action-createtalk": "create discussion pages",
+       "action-createaccount": "create this user account",
+       "action-history": "view the history of this page",
+       "action-minoredit": "mark this edit as minor",
+       "action-move": "move this page",
+       "action-move-subpages": "move this page, and its subpages",
+       "action-move-rootuserpages": "move root user pages",
+       "action-move-categorypages": "move category pages",
+       "action-movefile": "move this file",
+       "action-upload": "upload this file",
+       "action-reupload": "overwrite this existing file",
+       "action-reupload-shared": "override this file on a shared repository",
+       "action-upload_by_url": "upload this file from a URL",
+       "action-writeapi": "use the write API",
+       "action-delete": "delete this page",
+       "action-deleterevision": "delete this revision",
+       "action-deletedhistory": "view this page's deleted history",
+       "action-browsearchive": "search deleted pages",
+       "action-undelete": "undelete this page",
+       "action-suppressrevision": "review and restore this hidden revision",
+       "action-suppressionlog": "view this private log",
+       "action-block": "block this user from editing",
+       "action-protect": "change protection levels for this page",
+       "action-rollback": "quickly rollback the edits of the last user who edited a particular page",
+       "action-import": "import pages from another wiki",
+       "action-importupload": "import pages from a file upload",
+       "action-patrol": "mark others' edits as patrolled",
+       "action-autopatrol": "have your edit marked as patrolled",
+       "action-unwatchedpages": "view the list of unwatched pages",
+       "action-mergehistory": "merge the history of this page",
+       "action-userrights": "edit all user rights",
+       "action-userrights-interwiki": "edit user rights of users on other wikis",
+       "action-siteadmin": "lock or unlock the database",
+       "action-sendemail": "send emails",
+       "action-editmywatchlist": "edit your watchlist",
+       "action-viewmywatchlist": "view your watchlist",
+       "action-viewmyprivateinfo": "view your private information",
+       "action-editmyprivateinfo": "edit your private information",
+       "nchanges": "$1 {{PLURAL:$1|change|changes}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|since last visit}}",
+       "enhancedrc-history": "history",
+       "recentchanges": "Recent changes",
+       "recentchanges-url": "Special:RecentChanges",
+       "recentchanges-legend": "Recent changes options",
+       "recentchanges-summary": "Track the most recent changes to the wiki on this page.",
+       "recentchangestext": "-",
+       "recentchanges-noresult": "No changes during the given period matching these criteria.",
+       "recentchanges-feed-description": "Track the most recent changes to the wiki in this feed.",
+       "recentchanges-label-newpage": "This edit created a new page",
+       "recentchanges-label-minor": "This is a minor edit",
+       "recentchanges-label-bot": "This edit was performed by a bot",
+       "recentchanges-label-unpatrolled": "This edit has not yet been patrolled",
+       "recentchanges-label-plusminus": "The page size changed by this number of bytes",
+       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-newpage": "(also see [[Special:NewPages|list of new pages]])",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
+       "rcnotefrom": "Below are the changes since <strong>$2</strong> (up to <strong>$1</strong> shown).",
+       "rclistfrom": "Show new changes starting from $2, $3",
+       "rcshowhideminor": "$1 minor edits",
+       "rcshowhideminor-show": "Show",
+       "rcshowhideminor-hide": "Hide",
+       "rcshowhidebots": "$1 bots",
+       "rcshowhidebots-show": "Show",
+       "rcshowhidebots-hide": "Hide",
+       "rcshowhideliu": "$1 registered users",
+       "rcshowhideliu-show": "Show",
+       "rcshowhideliu-hide": "Hide",
+       "rcshowhideanons": "$1 anonymous users",
+       "rcshowhideanons-show": "Show",
+       "rcshowhideanons-hide": "Hide",
+       "rcshowhidepatr": "$1 patrolled edits",
+       "rcshowhidepatr-show": "Show",
+       "rcshowhidepatr-hide": "Hide",
+       "rcshowhidemine": "$1 my edits",
+       "rcshowhidemine-show": "Show",
+       "rcshowhidemine-hide": "Hide",
+       "rclinks": "Show last $1 changes in last $2 days<br />$3",
+       "diff": "diff",
+       "hist": "hist",
+       "hide": "Hide",
+       "show": "Show",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "unpatrolledletter": "!",
+       "number_of_watching_users_RCview": "[$1]",
+       "number_of_watching_users_pageview": "[$1 watching {{PLURAL:$1|user|users}}]",
+       "rc_categories": "Limit to categories (separate with \"|\")",
+       "rc_categories_any": "Any",
+       "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} after change",
+       "newsectionsummary": "/* $1 */ new section",
+       "rc-enhanced-expand": "Show details",
+       "rc-enhanced-hide": "Hide details",
+       "rc-old-title": "originally created as \"$1\"",
+       "recentchangeslinked": "Related changes",
+       "recentchangeslinked-feed": "Related changes",
+       "recentchangeslinked-toolbox": "Related changes",
+       "recentchangeslinked-title": "Changes related to \"$1\"",
+       "recentchangeslinked-summary": "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).\nPages on [[Special:Watchlist|your watchlist]] are <strong>bold</strong>.",
+       "recentchangeslinked-page": "Page name:",
+       "recentchangeslinked-to": "Show changes to pages linked to the given page instead",
+       "upload": "Upload file",
+       "uploadbtn": "Upload file",
+       "reuploaddesc": "Cancel upload and return to the upload form",
+       "upload-tryagain": "Submit modified file description",
+       "uploadnologin": "Not logged in",
+       "uploadnologintext": "Please $1 to upload files.",
+       "upload_directory_missing": "The upload directory ($1) is missing and could not be created by the webserver.",
+       "upload_directory_read_only": "The upload directory ($1) is not writable by the webserver.",
+       "uploaderror": "Upload error",
+       "upload-summary": "",
+       "upload-recreate-warning": "<strong>Warning: A file by that name has been deleted or moved.</strong>\n\nThe deletion and move log for this page are provided here for convenience:",
+       "uploadtext": "Use the form below to upload files.\nTo view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].\n\nTo include a file in a page, use a link in one of the following forms:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> to use the full version of the file\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> for directly linking to the file without displaying the file",
+       "upload-permitted": "Permitted file types: $1.",
+       "upload-preferred": "Preferred file types: $1.",
+       "upload-prohibited": "Prohibited file types: $1.",
+       "uploadfooter": "-",
+       "upload-default-description": "-",
+       "uploadlogpage": "Upload log",
+       "uploadlogpagetext": "Below is a list of the most recent file uploads.\nSee the [[Special:NewFiles|gallery of new files]] for a more visual overview.",
+       "filename": "Filename",
+       "filedesc": "Summary",
+       "fileuploadsummary": "Summary:",
+       "filereuploadsummary": "File changes:",
+       "filestatus": "Copyright status:",
+       "filesource": "Source:",
+       "ignorewarning": "Ignore warning and save file anyway",
+       "ignorewarnings": "Ignore any warnings",
+       "minlength1": "Filenames must be at least one letter.",
+       "illegalfilename": "The filename \"$1\" contains characters that are not allowed in page titles.\nPlease rename the file and try uploading it again.",
+       "filename-toolong": "Filenames may not be longer than 240 bytes.",
+       "badfilename": "Filename has been changed to \"$1\".",
+       "filetype-mime-mismatch": "File extension \".$1\" does not match the detected MIME type of the file ($2).",
+       "filetype-badmime": "Files of the MIME type \"$1\" are not allowed to be uploaded.",
+       "filetype-bad-ie-mime": "Cannot upload this file because Internet Explorer would detect it as \"$1\", which is a disallowed and potentially dangerous file type.",
+       "filetype-unwanted-type": "<strong>\".$1\"</strong> is an unwanted file type.\nPreferred {{PLURAL:$3|file type is|file types are}} $2.",
+       "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|is not a permitted file type|are not permitted file types}}.\nPermitted {{PLURAL:$3|file type is|file types are}} $2.",
+       "filetype-missing": "The file has no extension (like \".jpg\").",
+       "empty-file": "The file you submitted was empty.",
+       "file-too-large": "The file you submitted was too large.",
+       "filename-tooshort": "The filename is too short.",
+       "filetype-banned": "This type of file is banned.",
+       "verification-error": "This file did not pass file verification.",
+       "hookaborted": "The modification you tried to make was aborted by an extension.",
+       "illegal-filename": "The filename is not allowed.",
+       "overwrite": "Overwriting an existing file is not allowed.",
+       "unknown-error": "An unknown error occurred.",
+       "tmp-create-error": "Could not create temporary file.",
+       "tmp-write-error": "Error writing temporary file.",
+       "large-file": "It is recommended that files are no larger than $1;\nthis file is $2.",
+       "largefileserver": "This file is bigger than the server is configured to allow.",
+       "emptyfile": "The file you uploaded seems to be empty.\nThis might be due to a typo in the filename.\nPlease check whether you really want to upload this file.",
+       "windows-nonascii-filename": "This wiki does not support filenames with special characters.",
+       "fileexists": "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.\n[[$1|thumb]]",
+       "filepageexists": "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.\nThe summary you enter will not appear on the description page.\nTo make your summary appear there, you will need to manually edit it.\n[[$1|thumb]]",
+       "fileexists-extension": "A file with a similar name exists: [[$2|thumb]]\n* Name of the uploading file: <strong>[[:$1]]</strong>\n* Name of the existing file: <strong>[[:$2]]</strong>\nPlease choose a different name.",
+       "fileexists-thumbnail-yes": "The file seems to be an image of reduced size <em>(thumbnail)</em>.\n[[$1|thumb]]\nPlease check the file <strong>[[:$1]]</strong>.\nIf the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
+       "file-thumbnail-no": "The filename begins with <strong>$1</strong>.\nIt seems to be an image of reduced size <em>(thumbnail)</em>.\nIf you have this image in full resolution upload this one, otherwise change the filename please.",
+       "fileexists-forbidden": "A file with this name already exists, and cannot be overwritten.\nIf you still want to upload your file, please go back and use a new name.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "A file with this name exists already in the shared file repository.\nIf you still want to upload your file, please go back and use a new name.\n[[File:$1|thumb|center|$1]]",
+       "file-exists-duplicate": "This file is a duplicate of the following {{PLURAL:$1|file|files}}:",
+       "file-deleted-duplicate": "A file identical to this file ([[:$1]]) has previously been deleted.\nYou should check that file's deletion history before proceeding to re-upload it.",
+       "file-deleted-duplicate-notitle": "A file identical to this file has previously been deleted, and the title has been suppressed.\nYou should ask someone with the ability to view suppressed file data to review the situation before proceeding to re-upload it.",
+       "uploadwarning": "Upload warning",
+       "uploadwarning-text": "Please modify the file description below and try again.",
+       "savefile": "Save file",
+       "uploadedimage": "uploaded \"[[$1]]\"",
+       "overwroteimage": "uploaded a new version of \"[[$1]]\"",
+       "uploaddisabled": "Uploads disabled.",
+       "copyuploaddisabled": "Upload by URL disabled.",
+       "uploaddisabledtext": "File uploads are disabled.",
+       "php-uploaddisabledtext": "File uploads are disabled in PHP.\nPlease check the file_uploads setting.",
+       "uploadscripted": "This file contains HTML or script code that may be erroneously interpreted by a web browser.",
+       "uploadscriptednamespace": "This SVG file contains an illegal namespace \"$1\".",
+       "uploadinvalidxml": "The XML in the uploaded file could not be parsed.",
+       "uploadvirus": "The file contains a virus!\nDetails: $1",
+       "uploadjava": "The file is a ZIP file that contains a Java .class file.\nUploading Java files is not allowed because they can cause security restrictions to be bypassed.",
+       "upload-source": "Source file",
+       "sourcefilename": "Source filename:",
+       "sourceurl": "Source URL:",
+       "destfilename": "Destination filename:",
+       "upload-maxfilesize": "Maximum file size: $1",
+       "upload-description": "File description",
+       "upload-options": "Upload options",
+       "watchthisupload": "Watch this file",
+       "filewasdeleted": "A file of this name has been previously uploaded and subsequently deleted.\nYou should check the $1 before proceeding to upload it again.",
+       "filename-bad-prefix": "The name of the file you are uploading begins with <strong>\"$1\"</strong>, which is a non-descriptive name typically assigned automatically by digital cameras.\nPlease choose a more descriptive name for your file.",
+       "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment\n#   * Every non-blank line is a prefix for typical filenames assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobile phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
+       "upload-success-subj": "Successful upload",
+       "upload-success-msg": "Your upload from [$2] was successful. It is available here: [[:{{ns:file}}:$1]]",
+       "upload-failure-subj": "Upload problem",
+       "upload-failure-msg": "There was a problem with your upload from [$2]:\n\n$1",
+       "upload-warning-subj": "Upload warning",
+       "upload-warning-msg": "There was a problem with your upload from [$2]. You may return to the [[Special:Upload/stash/$1|upload form]] to correct this problem.",
+       "upload-proto-error": "Incorrect protocol",
+       "upload-proto-error-text": "Remote upload requires URLs beginning with <code>http://</code> or <code>ftp://</code>.",
+       "upload-file-error": "Internal error",
+       "upload-file-error-text": "An internal error occurred when attempting to create a temporary file on the server.\nPlease contact an [[Special:ListUsers/sysop|administrator]].",
+       "upload-misc-error": "Unknown upload error",
+       "upload-misc-error-text": "An unknown error occurred during the upload.\nPlease verify that the URL is valid and accessible and try again.\nIf the problem persists, contact an [[Special:ListUsers/sysop|administrator]].",
+       "upload-too-many-redirects": "The URL contained too many redirects",
+       "upload-http-error": "An HTTP error occurred: $1",
+       "upload-copy-upload-invalid-domain": "Copy uploads are not available from this domain.",
+       "backend-fail-stream": "Could not stream file \"$1\".",
+       "backend-fail-backup": "Could not backup file \"$1\".",
+       "backend-fail-notexists": "The file $1 does not exist.",
+       "backend-fail-hashes": "Could not get file hashes for comparison.",
+       "backend-fail-notsame": "A non-identical file already exists at \"$1\".",
+       "backend-fail-invalidpath": "\"$1\" is not a valid storage path.",
+       "backend-fail-delete": "Could not delete file \"$1\".",
+       "backend-fail-describe": "Could not change metadata for file \"$1\".",
+       "backend-fail-alreadyexists": "The file \"$1\" already exists.",
+       "backend-fail-store": "Could not store file \"$1\" at \"$2\".",
+       "backend-fail-copy": "Could not copy file \"$1\" to \"$2\".",
+       "backend-fail-move": "Could not move file \"$1\" to \"$2\".",
+       "backend-fail-opentemp": "Could not open temporary file.",
+       "backend-fail-writetemp": "Could not write to temporary file.",
+       "backend-fail-closetemp": "Could not close temporary file.",
+       "backend-fail-read": "Could not read file \"$1\".",
+       "backend-fail-create": "Could not write file \"$1\".",
+       "backend-fail-maxsize": "Could not write file \"$1\" because it is larger than {{PLURAL:$2|one byte|$2 bytes}}.",
+       "backend-fail-readonly": "The storage backend \"$1\" is currently read-only. The reason given is: \"<em>$2</em>\"",
+       "backend-fail-synced": "The file \"$1\" is in an inconsistent state within the internal storage backends",
+       "backend-fail-connect": "Could not connect to storage backend \"$1\".",
+       "backend-fail-internal": "An unknown error occurred in storage backend \"$1\".",
+       "backend-fail-contenttype": "Could not determine the content type of the file to store at \"$1\".",
+       "backend-fail-batchsize": "The storage backend was given a batch of $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.",
+       "backend-fail-usable": "Could not read or write file \"$1\" due to insufficient permissions or missing directories/containers.",
+       "filejournal-fail-dbconnect": "Could not connect to the journal database for storage backend \"$1\".",
+       "filejournal-fail-dbquery": "Could not update the journal database for storage backend \"$1\".",
+       "lockmanager-notlocked": "Could not unlock \"$1\"; it is not locked.",
+       "lockmanager-fail-closelock": "Could not close lock file for \"$1\".",
+       "lockmanager-fail-deletelock": "Could not delete lock file for \"$1\".",
+       "lockmanager-fail-acquirelock": "Could not acquire lock for \"$1\".",
+       "lockmanager-fail-openlock": "Could not open lock file for \"$1\".",
+       "lockmanager-fail-releaselock": "Could not release lock for \"$1\".",
+       "lockmanager-fail-db-bucket": "Could not contact enough lock databases in bucket $1.",
+       "lockmanager-fail-db-release": "Could not release locks on database $1.",
+       "lockmanager-fail-svr-acquire": "Could not acquire locks on server $1.",
+       "lockmanager-fail-svr-release": "Could not release locks on server $1.",
+       "zip-file-open-error": "An error was encountered when opening the file for ZIP checks.",
+       "zip-wrong-format": "The specified file was not a ZIP file.",
+       "zip-bad": "The file is a corrupt or otherwise unreadable ZIP file.\nIt cannot be properly checked for security.",
+       "zip-unsupported": "The file is a ZIP file that uses ZIP features not supported by MediaWiki.\nIt cannot be properly checked for security.",
+       "uploadstash": "Upload stash",
+       "uploadstash-summary": "This page provides access to files that are uploaded or in the process of uploading, but are not yet published to the wiki. These files are not visible to anyone but the user who uploaded them.",
+       "uploadstash-clear": "Clear stashed files",
+       "uploadstash-nofiles": "You have no stashed files.",
+       "uploadstash-badtoken": "Performing of that action was unsuccessful, perhaps because your editing credentials expired. Try again.",
+       "uploadstash-errclear": "Clearing the files was unsuccessful.",
+       "uploadstash-refresh": "Refresh the list of files",
+       "invalid-chunk-offset": "Invalid chunk offset",
+       "img-auth-accessdenied": "Access denied",
+       "img-auth-nopathinfo": "Missing PATH_INFO.\nYour server is not set up to pass this information.\nIt may be CGI-based and cannot support img_auth.\nSee https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-notindir": "Requested path is not in the configured upload directory.",
+       "img-auth-badtitle": "Unable to construct a valid title from \"$1\".",
+       "img-auth-nologinnWL": "You are not logged in and \"$1\" is not in the whitelist.",
+       "img-auth-nofile": "File \"$1\" does not exist.",
+       "img-auth-isdir": "You are trying to access a directory \"$1\".\nOnly file access is allowed.",
+       "img-auth-streaming": "Streaming \"$1\".",
+       "img-auth-public": "The function of img_auth.php is to output files from a private wiki.\nThis wiki is configured as a public wiki.\nFor optimal security, img_auth.php is disabled.",
+       "img-auth-noread": "User does not have access to read \"$1\".",
+       "http-invalid-url": "Invalid URL: $1",
+       "http-invalid-scheme": "URLs with the \"$1\" scheme are not supported.",
+       "http-request-error": "HTTP request failed due to unknown error.",
+       "http-read-error": "HTTP read error.",
+       "http-timed-out": "HTTP request timed out.",
+       "http-curl-error": "Error fetching URL: $1",
+       "http-bad-status": "There was a problem during the HTTP request: $1 $2",
+       "upload-curl-error6": "Could not reach URL",
+       "upload-curl-error6-text": "The URL provided could not be reached.\nPlease double-check that the URL is correct and the site is up.",
+       "upload-curl-error28": "Upload timeout",
+       "upload-curl-error28-text": "The site took too long to respond.\nPlease check the site is up, wait a short while and try again.\nYou may want to try at a less busy time.",
+       "license": "Licensing:",
+       "license-header": "Licensing",
+       "nolicense": "None selected",
+       "licenses": "-",
+       "license-nopreview": "(Preview not available)",
+       "upload_source_url": "(a valid, publicly accessible URL)",
+       "upload_source_file": "(a file on your computer)",
+       "listfiles-summary": "This special page shows all uploaded files.",
+       "listfiles_search_for": "Search for media name:",
+       "imgfile": "file",
+       "listfiles": "File list",
+       "listfiles_thumb": "Thumbnail",
+       "listfiles_date": "Date",
+       "listfiles_name": "Name",
+       "listfiles_user": "User",
+       "listfiles_size": "Size",
+       "listfiles_description": "Description",
+       "listfiles_count": "Versions",
+       "listfiles-show-all": "Include old versions of images",
+       "listfiles-latestversion": "Current version",
+       "listfiles-latestversion-yes": "Yes",
+       "listfiles-latestversion-no": "No",
+       "file-anchor-link": "File",
+       "filehist": "File history",
+       "filehist-help": "Click on a date/time to view the file as it appeared at that time.",
+       "filehist-deleteall": "delete all",
+       "filehist-deleteone": "delete",
+       "filehist-revert": "revert",
+       "filehist-current": "current",
+       "filehist-datetime": "Date/Time",
+       "filehist-thumb": "Thumbnail",
+       "filehist-thumbtext": "Thumbnail for version as of $1",
+       "filehist-nothumb": "No thumbnail",
+       "filehist-user": "User",
+       "filehist-dimensions": "Dimensions",
+       "filehist-filesize": "File size",
+       "filehist-comment": "Comment",
+       "imagelinks": "File usage",
+       "linkstoimage": "The following {{PLURAL:$1|page links|$1 pages link}} to this file:",
+       "linkstoimage-more": "More than $1 {{PLURAL:$1|page links|pages link}} to this file.\nThe following list shows the {{PLURAL:$1|first page link|first $1 page links}} to this file only.\nA [[Special:WhatLinksHere/$2|full list]] is available.",
+       "nolinkstoimage": "There are no pages that link to this file.",
+       "morelinkstoimage": "View [[Special:WhatLinksHere/$1|more links]] to this file.",
+       "linkstoimage-redirect": "$1 (file redirect) $2",
+       "duplicatesoffile": "The following {{PLURAL:$1|file is a duplicate|$1 files are duplicates}} of this file ([[Special:FileDuplicateSearch/$2|more details]]):",
+       "sharedupload": "This file is from $1 and may be used by other projects.",
+       "sharedupload-desc-there": "This file is from $1 and may be used by other projects.\nPlease see the [$2 file description page] for further information.",
+       "sharedupload-desc-here": "This file is from $1 and may be used by other projects.\nThe description on its [$2 file description page] there is shown below.",
+       "sharedupload-desc-edit": "This file is from $1 and may be used by other projects.\nMaybe you want to edit the description on its [$2 file description page] there.",
+       "sharedupload-desc-create": "This file is from $1 and may be used by other projects.\nMaybe you want to edit the description on its [$2 file description page] there.",
+       "shareddescriptionfollows": "-",
+       "filepage-nofile": "No file by this name exists.",
+       "filepage-nofile-link": "No file by this name exists, but you can [$1 upload it].",
+       "uploadnewversion-linktext": "Upload a new version of this file",
+       "shared-repo-from": "from $1",
+       "shared-repo": "a shared repository",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+       "filepage.css": "/* CSS placed here is included on the file description page, also included on foreign client wikis */",
+       "upload-disallowed-here": "You cannot overwrite this file.",
+       "filerevert": "Revert $1",
+       "filerevert-legend": "Revert file",
+       "filerevert-intro": "You are about to revert the file <strong>[[Media:$1|$1]]</strong> to the [$4 version as of $3, $2].",
+       "filerevert-comment": "Reason:",
+       "filerevert-defaultcomment": "Reverted to version as of $2, $1",
+       "filerevert-submit": "Revert",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> has been reverted to the [$4 version as of $3, $2].",
+       "filerevert-badversion": "There is no previous local version of this file with the provided timestamp.",
+       "filedelete": "Delete $1",
+       "filedelete-legend": "Delete file",
+       "filedelete-intro": "You are about to delete the file <strong>[[Media:$1|$1]]</strong> along with all of its history.",
+       "filedelete-intro-old": "You are deleting the version of <strong>[[Media:$1|$1]]</strong> as of [$4 $3, $2].",
+       "filedelete-comment": "Reason:",
+       "filedelete-submit": "Delete",
+       "filedelete-success": "<strong>$1</strong> has been deleted.",
+       "filedelete-success-old": "The version of <strong>[[Media:$1|$1]]</strong> as of $3, $2 has been deleted.",
+       "filedelete-nofile": "<strong>$1</strong> does not exist.",
+       "filedelete-nofile-old": "There is no archived version of <strong>$1</strong> with the specified attributes.",
+       "filedelete-otherreason": "Other/additional reason:",
+       "filedelete-reason-otherlist": "Other reason",
+       "filedelete-reason-dropdown": "*Common delete reasons\n** Copyright violation\n** Duplicated file",
+       "filedelete-edit-reasonlist": "Edit delete reasons",
+       "filedelete-maintenance": "Deletion and restoration of files temporarily disabled during maintenance.",
+       "filedelete-maintenance-title": "Cannot delete file",
+       "mimesearch": "MIME search",
+       "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.",
+       "mimetype": "MIME type:",
+       "download": "download",
+       "unwatchedpages": "Unwatched pages",
+       "unwatchedpages-summary": "",
+       "listredirects": "List of redirects",
+       "listredirects-summary": "",
+       "listduplicatedfiles": "List of files with duplicates",
+       "listduplicatedfiles-summary": "This is a list of files where the most recent version of the file is a duplicate of the most recent version of some other file. Only local files are considered.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] has [[$3|{{PLURAL:$2|a duplicate|$2 duplicates}}]].",
+       "unusedtemplates": "Unused templates",
+       "unusedtemplates-summary": "",
+       "unusedtemplatestext": "This page lists all pages in the {{ns:template}} namespace that are not included in another page.\nRemember to check for other links to the templates before deleting them.",
+       "unusedtemplateswlh": "other links",
+       "randompage": "Random page",
+       "randompage-nopages": "There are no pages in the following {{PLURAL:$2|namespace|namespaces}}: $1.",
+       "randompage-url": "Special:Random",
+       "randomincategory": "Random page in category",
+       "randomincategory-invalidcategory": "\"$1\" is not a valid category name.",
+       "randomincategory-nopages": "There are no pages in the [[:Category:$1|$1]] category.",
+       "randomincategory-selectcategory": "Get random page from category: $1 $2.",
+       "randomincategory-selectcategory-submit": "Go",
+       "randomredirect": "Random redirect",
+       "randomredirect-nopages": "There are no redirects in the namespace \"$1\".",
+       "statistics": "Statistics",
+       "statistics-summary": "",
+       "statistics-header-pages": "Page statistics",
+       "statistics-header-edits": "Edit statistics",
+       "statistics-header-views": "View statistics",
+       "statistics-header-users": "User statistics",
+       "statistics-header-hooks": "Other statistics",
+       "statistics-articles": "Content pages",
+       "statistics-pages": "Pages",
+       "statistics-pages-desc": "All pages in the wiki, including talk pages, redirects, etc.",
+       "statistics-files": "Uploaded files",
+       "statistics-edits": "Page edits since {{SITENAME}} was set up",
+       "statistics-edits-average": "Average edits per page",
+       "statistics-views-total": "Views total",
+       "statistics-views-total-desc": "Views to non-existing pages and special pages are not included",
+       "statistics-views-peredit": "Views per edit",
+       "statistics-users": "Registered [[Special:ListUsers|users]]",
+       "statistics-users-active": "Active users",
+       "statistics-users-active-desc": "Users who have performed an action in the last {{PLURAL:$1|day|$1 days}}",
+       "statistics-mostpopular": "Most viewed pages",
+       "statistics-footer": "",
+       "pageswithprop": "Pages with a page property",
+       "pageswithprop-summary": "",
+       "pageswithprop-legend": "Pages with a page property",
+       "pageswithprop-text": "This page lists pages that use a particular page property.",
+       "pageswithprop-prop": "Property name:",
+       "pageswithprop-submit": "Go",
+       "pageswithprop-prophidden-long": "long text property value hidden ($1)",
+       "pageswithprop-prophidden-binary": "binary property value hidden ($1)",
+       "doubleredirects": "Double redirects",
+       "doubleredirects-summary": "",
+       "doubleredirectstext": "This page lists pages that redirect to other redirect pages.\nEach row contains links to the first and second redirect, as well as the target of the second redirect, which is usually the \"real\" target page to which the first redirect should point.\n<del>Crossed out</del> entries have been solved.",
+       "double-redirect-fixed-move": "[[$1]] has been moved.\nIt was automatically updated and now it redirects to [[$2]].",
+       "double-redirect-fixed-maintenance": "Automatically fixing double redirect from [[$1]] to [[$2]] in a maintenance job.",
+       "double-redirect-fixer": "Redirect fixer",
+       "brokenredirects": "Broken redirects",
+       "brokenredirects-summary": "",
+       "brokenredirectstext": "The following redirects link to non-existent pages:",
+       "brokenredirects-edit": "edit",
+       "brokenredirects-delete": "delete",
+       "withoutinterwiki": "Pages without language links",
+       "withoutinterwiki-summary": "The following pages do not link to other language versions.",
+       "withoutinterwiki-legend": "Prefix",
+       "withoutinterwiki-submit": "Show",
+       "fewestrevisions": "Pages with the fewest revisions",
+       "fewestrevisions-summary": "",
+       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "ncategories": "$1 {{PLURAL:$1|category|categories}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
+       "nlinks": "$1 {{PLURAL:$1|link|links}}",
+       "nmembers": "$1 {{PLURAL:$1|member|members}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|member|members}}",
+       "nrevisions": "$1 {{PLURAL:$1|revision|revisions}}",
+       "nviews": "$1 {{PLURAL:$1|view|views}}",
+       "nimagelinks": "Used on $1 {{PLURAL:$1|page|pages}}",
+       "ntransclusions": "used on $1 {{PLURAL:$1|page|pages}}",
+       "specialpage-empty": "There are no results for this report.",
+       "lonelypages": "Orphaned pages",
+       "lonelypages-summary": "",
+       "lonelypagestext": "The following pages are not linked from or transcluded into other pages in {{SITENAME}}.",
+       "uncategorizedpages": "Uncategorized pages",
+       "uncategorizedpages-summary": "",
+       "uncategorizedcategories": "Uncategorized categories",
+       "uncategorizedcategories-summary": "",
+       "uncategorizedimages": "Uncategorized files",
+       "uncategorizedimages-summary": "",
+       "uncategorizedtemplates": "Uncategorized templates",
+       "uncategorizedtemplates-summary": "",
+       "unusedcategories": "Unused categories",
+       "unusedcategories-summary": "",
+       "unusedimages": "Unused files",
+       "unusedimages-summary": "",
+       "popularpages": "Popular pages",
+       "popularpages-summary": "",
+       "wantedcategories": "Wanted categories",
+       "wantedcategories-summary": "",
+       "wantedpages": "Wanted pages",
+       "wantedpages-summary": "",
+       "wantedpages-badtitle": "Invalid title in result set: $1",
+       "wantedfiles": "Wanted files",
+       "wantedfiles-summary": "",
+       "wantedfiletext-cat": "The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>. Additionally, pages that embed files that do not exist are listed in [[:$1]].",
+       "wantedfiletext-nocat": "The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>.",
+       "wantedtemplates": "Wanted templates",
+       "wantedtemplates-summary": "",
+       "mostlinked": "Most linked-to pages",
+       "mostlinked-summary": "",
+       "mostlinkedcategories": "Most linked-to categories",
+       "mostlinkedcategories-summary": "",
+       "mostlinkedtemplates": "Most linked-to templates",
+       "mostlinkedtemplates-summary": "",
+       "mostcategories": "Pages with the most categories",
+       "mostcategories-summary": "",
+       "mostimages": "Most linked-to files",
+       "mostimages-summary": "",
+       "mostinterwikis": "Pages with the most interwikis",
+       "mostinterwikis-summary": "",
+       "mostrevisions": "Pages with the most revisions",
+       "mostrevisions-summary": "",
+       "prefixindex": "All pages with prefix",
+       "prefixindex-namespace": "All pages with prefix ($1 namespace)",
+       "prefixindex-summary": "",
+       "prefixindex-strip": "Strip prefix in list",
+       "shortpages": "Short pages",
+       "shortpages-summary": "",
+       "longpages": "Long pages",
+       "longpages-summary": "",
+       "deadendpages": "Dead-end pages",
+       "deadendpages-summary": "",
+       "deadendpagestext": "The following pages do not link to other pages in {{SITENAME}}.",
+       "protectedpages": "Protected pages",
+       "protectedpages-indef": "Indefinite protections only",
+       "protectedpages-summary": "This page lists existing pages that are currently protected. For a list of titles that are protected from creation, see [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-cascade": "Cascading protections only",
+       "protectedpages-noredirect": "Hide redirects",
+       "protectedpagesempty": "No pages are currently protected with these parameters.",
+       "protectedpages-timestamp": "Timestamp",
+       "protectedpages-page": "Page",
+       "protectedpages-expiry": "Expires",
+       "protectedpages-performer": "Protecting user",
+       "protectedpages-params": "Protection parameters",
+       "protectedpages-reason": "Reason",
+       "protectedpages-unknown-timestamp": "Unknown",
+       "protectedpages-unknown-performer": "Unknown user",
+       "protectedpages-unknown-reason": "—",
+       "protectedtitles": "Protected titles",
+       "protectedtitles-summary": "This page lists titles that are currently protected from creation. For a list of existing pages that are protected, see [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitlesempty": "No titles are currently protected with these parameters.",
+       "listusers": "User list",
+       "listusers-summary": "",
+       "listusers-editsonly": "Show only users with edits",
+       "listusers-creationsort": "Sort by creation date",
+       "listusers-desc": "Sort in descending order",
+       "usereditcount": "$1 {{PLURAL:$1|edit|edits}}",
+       "usercreated": "{{GENDER:$3|Created}} on $1 at $2",
+       "newpages": "New pages",
+       "newpages-summary": "",
+       "newpages-username": "Username:",
+       "ancientpages": "Oldest pages",
+       "ancientpages-summary": "",
+       "move": "Move",
+       "movethispage": "Move this page",
+       "unusedimagestext": "The following files exist but are not embedded in any page.\nPlease note that other web sites may link to a file with a direct URL, and so may still be listed here despite being in active use.",
+       "unusedcategoriestext": "The following category pages exist, although no other page or category makes use of them.",
+       "notargettitle": "No target",
+       "notargettext": "You have not specified a target page or user to perform this function on.",
+       "nopagetitle": "No such target page",
+       "nopagetext": "The target page you have specified does not exist.",
+       "pager-newer-n": "{{PLURAL:$1|newer 1|newer $1}}",
+       "pager-older-n": "{{PLURAL:$1|older 1|older $1}}",
+       "suppress": "Oversight",
+       "querypage-disabled": "This special page is disabled for performance reasons.",
+       "booksources": "Book sources",
+       "booksources-summary": "",
+       "booksources-search-legend": "Search for book sources",
+       "booksources-isbn": "ISBN:",
+       "booksources-go": "Go",
+       "booksources-text": "Below is a list of links to other sites that sell new and used books, and may also have further information about books you are looking for:",
+       "booksources-invalid-isbn": "The given ISBN does not appear to be valid; check for errors copying from the original source.",
+       "rfcurl": "//tools.ietf.org/html/rfc$1",
+       "pubmedurl": "//www.ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract",
+       "specialloguserlabel": "Performer:",
+       "speciallogtitlelabel": "Target (title or user):",
+       "log": "Logs",
+       "all-logs-page": "All public logs",
+       "alllogstext": "Combined display of all available logs of {{SITENAME}}.\nYou can narrow down the view by selecting a log type, the username (case-sensitive), or the affected page (also case-sensitive).",
+       "logempty": "No matching items in log.",
+       "log-title-wildcard": "Search titles starting with this text",
+       "showhideselectedlogentries": "Change visibility of selected log entries",
+       "allpages": "All pages",
+       "allpages-summary": "",
+       "alphaindexline": "$1 to $2",
+       "nextpage": "Next page ($1)",
+       "prevpage": "Previous page ($1)",
+       "allpagesfrom": "Display pages starting at:",
+       "allpagesto": "Display pages ending at:",
+       "allarticles": "All pages",
+       "allinnamespace": "All pages ($1 namespace)",
+       "allpagessubmit": "Go",
+       "allpagesprefix": "Display pages with prefix:",
+       "allpagesbadtitle": "The given page title was invalid or had an inter-language or inter-wiki prefix.\nIt may contain one or more characters that cannot be used in titles.",
+       "allpages-bad-ns": "{{SITENAME}} does not have namespace \"$1\".",
+       "allpages-hide-redirects": "Hide redirects",
+       "cachedspecial-viewing-cached-ttl": "You are viewing a cached version of this page, which can be up to $1 old.",
+       "cachedspecial-viewing-cached-ts": "You are viewing a cached version of this page, which might not be completely actual.",
+       "cachedspecial-refresh-now": "View latest.",
+       "categories": "Categories",
+       "categories-summary": "",
+       "categoriespagetext": "The following {{PLURAL:$1|category contains|categories contain}} pages or media.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+       "categoriesfrom": "Display categories starting at:",
+       "special-categories-sort-count": "sort by count",
+       "special-categories-sort-abc": "sort alphabetically",
+       "deletedcontributions": "Deleted user contributions",
+       "deletedcontributions-summary": "",
+       "deletedcontributions-title": "Deleted user contributions",
+       "sp-deletedcontributions-contribs": "contributions",
+       "linksearch": "External links search",
+       "linksearch-summary": "",
+       "linksearch-pat": "Search pattern:",
+       "linksearch-ns": "Namespace:",
+       "linksearch-ok": "Search",
+       "linksearch-text": "Wildcards such as \"*.wikipedia.org\" may be used.\nNeeds at least a top-level domain, for example \"*.org\".<br />\nSupported {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http:// if no protocol is specified).",
+       "linksearch-line": "$1 is linked from $2",
+       "linksearch-error": "Wildcards may appear only at the start of the hostname.",
+       "listusersfrom": "Display users starting at:",
+       "listusers-submit": "Show",
+       "listusers-noresult": "No user found.",
+       "listusers-blocked": "(blocked)",
+       "activeusers": "Active users list",
+       "activeusers-summary": "",
+       "activeusers-intro": "This is a list of users who had some kind of activity within the last $1 {{PLURAL:$1|day|days}}.",
+       "activeusers-count": "$1 {{PLURAL:$1|action|actions}} in the last {{PLURAL:$3|day|$3 days}}",
+       "activeusers-from": "Display users starting at:",
+       "activeusers-hidebots": "Hide bots",
+       "activeusers-hidesysops": "Hide administrators",
+       "activeusers-noresult": "No users found.",
+       "listgrouprights": "User group rights",
+       "listgrouprights-summary": "The following is a list of user groups defined on this wiki, with their associated access rights.\nThere may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] about individual rights.",
+       "listgrouprights-key": "Legend:\n* <span class=\"listgrouprights-granted\">Granted right</span>\n* <span class=\"listgrouprights-revoked\">Revoked right</span>",
+       "listgrouprights-group": "Group",
+       "listgrouprights-rights": "Rights",
+       "listgrouprights-helppage": "Help:Group rights",
+       "listgrouprights-members": "(list of 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": "Add {{PLURAL:$2|group|groups}}: $1",
+       "listgrouprights-removegroup": "Remove {{PLURAL:$2|group|groups}}: $1",
+       "listgrouprights-addgroup-all": "Add all groups",
+       "listgrouprights-removegroup-all": "Remove all groups",
+       "listgrouprights-addgroup-self": "Add {{PLURAL:$2|group|groups}} to own account: $1",
+       "listgrouprights-removegroup-self": "Remove {{PLURAL:$2|group|groups}} from own account: $1",
+       "listgrouprights-addgroup-self-all": "Add all groups to own account",
+       "listgrouprights-removegroup-self-all": "Remove all groups from own account",
+       "listgrouprights-namespaceprotection-header": "Namespace restrictions",
+       "listgrouprights-namespaceprotection-namespace": "Namespace",
+       "listgrouprights-namespaceprotection-restrictedto": "Right(s) allowing user to edit",
+       "trackingcategories": "Tracking categories",
+       "trackingcategories-summary": "This page lists tracking categories which are automatically populated by the MediaWiki software. Their names can be changed by altering the relevant system messages in the {{ns:8}} namespace.",
+       "trackingcategories-msg": "Tracking category",
+       "trackingcategories-name": "Message name",
+       "trackingcategories-desc": "Category inclusion criteria",
+       "noindex-category-desc": "The page is not indexed by robots because it has the magic word <code><nowiki>__NOINDEX__</nowiki></code> on it and is in a namespace where that flag is allowed.",
+       "index-category-desc": "The page has a <code><nowiki>__INDEX__</nowiki></code> on it (and is in a namespace where that flag is allowed), and hence is indexed by robots where it normally wouldn't be.",
+       "post-expand-template-inclusion-category-desc": "After expanding all the templates, the page size is bigger than <code>$wgMaxArticleSize</code>, so some templates weren't expanded.",
+       "post-expand-template-argument-category-desc": "After expanding a template argument (something in triple braces, like <code>{{{Foo}}}</code>), the page is bigger than <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Too many expensive parser functions (like <code>#ifexist</code>) included on a page. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Category added if the page contains a broken file link (a link to embed a file when the file does not exist).",
+       "hidden-category-category-desc": "This is a category with <code><nowiki>__HIDDENCAT__</nowiki></code> on it, which prevents it from showing up in the category links box on pages, by default.",
+       "trackingcategories-nodesc": "No description available.",
+       "trackingcategories-disabled": "Category is disabled",
+       "mailnologin": "No send address",
+       "mailnologintext": "You must be [[Special:UserLogin|logged in]] and have a valid email address in your [[Special:Preferences|preferences]] to send email to other users.",
+       "emailuser": "Email this user",
+       "emailuser-title-target": "Email this {{GENDER:$1|user}}",
+       "emailuser-title-notarget": "Email user",
+       "emailuser-summary": "",
+       "emailpage": "Email user",
+       "emailpagetext": "You can use the form below to send an email message to this {{GENDER:$1|user}}.\nThe email address you entered in [[Special:Preferences|your user preferences]] will appear as the \"From\" address of the email, so the recipient will be able to reply directly to you.",
+       "defemailsubject": "{{SITENAME}} email from user \"$1\"",
+       "usermaildisabled": "User email disabled",
+       "usermaildisabledtext": "You cannot send email to other users on this wiki",
+       "noemailtitle": "No email address",
+       "noemailtext": "This user has not specified a valid email address.",
+       "nowikiemailtext": "This user has chosen not to receive email from other users.",
+       "emailnotarget": "Non-existent or invalid username for recipient.",
+       "emailtarget": "Enter username of recipient",
+       "emailusername": "Username:",
+       "emailusernamesubmit": "Submit",
+       "email-legend": "Send an email to another {{SITENAME}} user",
+       "emailfrom": "From:",
+       "emailto": "To:",
+       "emailsubject": "Subject:",
+       "emailmessage": "Message:",
+       "emailsend": "Send",
+       "emailccme": "Email me a copy of my message.",
+       "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}}.",
+       "usermessage-summary": "Leaving system message.",
+       "usermessage-editor": "System messenger",
+       "usermessage-template": "MediaWiki:UserMessage",
+       "watchlist": "Watchlist",
+       "watchlist-summary": "",
+       "mywatchlist": "Watchlist",
+       "watchlistfor2": "For $1 $2",
+       "nowatchlist": "You have no items on your watchlist.",
+       "watchlistanontext": "Please $1 to view or edit items on your watchlist.",
+       "watchnologin": "Not logged in",
+       "addwatch": "Add to watchlist",
+       "addedwatchtext": "The page \"[[:$1]]\" has been added to your [[Special:Watchlist|watchlist]].\nFuture changes to this page and its associated talk page will be listed there.",
+       "removewatch": "Remove from watchlist",
+       "removedwatchtext": "The page \"[[:$1]]\" has been removed from [[Special:Watchlist|your watchlist]].",
+       "watch": "Watch",
+       "watchthispage": "Watch this page",
+       "unwatch": "Unwatch",
+       "unwatchthispage": "Stop watching",
+       "notanarticle": "Not a content page",
+       "notvisiblerev": "The last revision by a different user has been deleted",
+       "watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not separately counting talk pages.",
+       "wlheader-enotif": "Email notification is enabled.",
+       "wlheader-showupdated": "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
+       "wlnote2": "Below are the changes in the last {{PLURAL:$1|hour|<strong>$1</strong> hours}}, as of $2, $3.",
+       "wlshowlast": "Show last $1 hours $2 days $3",
+       "watchlist-options": "Watchlist options",
+       "watching": "Watching...",
+       "unwatching": "Unwatching...",
+       "watcherrortext": "An error occurred while changing your watchlist settings for \"$1\".",
+       "enotif_reset": "Mark all pages visited",
+       "enotif_impersonal_salutation": "{{SITENAME}} user",
+       "enotif_subject_deleted": "{{SITENAME}} page $1 has been {{GENDER:$2|deleted}} by $2",
+       "enotif_subject_created": "{{SITENAME}} page $1 has been {{GENDER:$2|created}} by $2",
+       "enotif_subject_moved": "{{SITENAME}} page $1 has been {{GENDER:$2|moved}} by $2",
+       "enotif_subject_restored": "{{SITENAME}} page $1 has been {{GENDER:$2|restored}} by $2",
+       "enotif_subject_changed": "{{SITENAME}} page $1 has been {{GENDER:$2|changed}} by $2",
+       "enotif_body_intro_deleted": "The {{SITENAME}} page $1 has been {{GENDER:$2|deleted}} on $PAGEEDITDATE by $2, see $3.",
+       "enotif_body_intro_created": "The {{SITENAME}} page $1 has been {{GENDER:$2|created}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
+       "enotif_body_intro_moved": "The {{SITENAME}} page $1 has been {{GENDER:$2|moved}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
+       "enotif_body_intro_restored": "The {{SITENAME}} page $1 has been {{GENDER:$2|restored}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
+       "enotif_body_intro_changed": "The {{SITENAME}} page $1 has been {{GENDER:$2|changed}} on $PAGEEDITDATE by $2, see $3 for the current revision.",
+       "enotif_lastvisited": "See $1 for all changes since your last visit.",
+       "enotif_lastdiff": "See $1 to view this change.",
+       "enotif_anon_editor": "anonymous user $1",
+       "enotif_body": "Dear $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nEditor's summary: $PAGESUMMARY $PAGEMINOREDIT\n\nContact the editor:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nThere will be no other notifications in case of further activity unless you visit this page while logged in. You could also reset the notification flags for all your watched pages on your watchlist.\n\nYour friendly {{SITENAME}} notification system\n\n--\nTo change your email notification settings, visit\n{{canonicalurl:{{#special:Preferences}}}}\n\nTo change your watchlist settings, visit\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nTo delete the page from your watchlist, visit\n$UNWATCHURL\n\nFeedback and further assistance:\n$HELPPAGE",
+       "created": "created",
+       "changed": "changed",
+       "deletepage": "Delete page",
+       "confirm": "Confirm",
+       "excontent": "content was: \"$1\"",
+       "excontentauthor": "content was: \"$1\" (and the only contributor was \"[[Special:Contributions/$2|$2]]\")",
+       "exbeforeblank": "content before blanking was: \"$1\"",
+       "delete-confirm": "Delete \"$1\"",
+       "delete-legend": "Delete",
+       "historywarning": "<strong>Warning:</strong> The page you are about to delete has a history with approximately $1 {{PLURAL:$1|revision|revisions}}:",
+       "confirmdeletetext": "You are about to delete a page along with all of its history.\nPlease confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].",
+       "actioncomplete": "Action complete",
+       "actionfailed": "Action failed",
+       "deletedtext": "\"$1\" has been deleted.\nSee $2 for a record of recent deletions.",
+       "dellogpage": "Deletion log",
+       "dellogpagetext": "Below is a list of the most recent deletions.",
+       "deletionlog": "deletion log",
+       "reverted": "Reverted to earlier revision",
+       "deletecomment": "Reason:",
+       "deleteotherreason": "Other/additional reason:",
+       "deletereasonotherlist": "Other reason",
+       "deletereason-dropdown": "* Common delete reasons\n** Spam\n** Vandalism\n** Copyright violation\n** Author request\n** Broken redirect",
+       "delete-edit-reasonlist": "Edit deletion reasons",
+       "delete-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeletion of such pages has been restricted to prevent accidental disruption of {{SITENAME}}.",
+       "delete-warning-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeleting it may disrupt database operations of {{SITENAME}};\nproceed with caution.",
+       "deleting-backlinks-warning": "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.",
+       "rollback": "Roll back edits",
+       "rollback_short": "Rollback",
+       "rollbacklink": "rollback",
+       "rollbacklinkcount": "rollback $1 {{PLURAL:$1|edit|edits}}",
+       "rollbacklinkcount-morethan": "rollback more than $1 {{PLURAL:$1|edit|edits}}",
+       "rollbackfailed": "Rollback failed",
+       "cantrollback": "Cannot revert edit;\nlast contributor is only author of this page.",
+       "alreadyrolled": "Cannot rollback last edit of [[:$1]] by [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nsomeone else has edited or rolled back the page already.\n\nThe last edit to the page was by [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "editcomment": "The edit summary was: \"''$1''\".",
+       "revertpage": "Reverted edits by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) to last revision by [[User:$1|$1]]",
+       "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}",
+       "rollback-success": "Reverted edits by $1;\nchanged back to last revision by $2.",
+       "sessionfailure-title": "Session failure",
+       "sessionfailure": "There seems to be a problem with your login session;\nthis action has been canceled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
+       "protectlogpage": "Protection log",
+       "protectlogtext": "Below is a list of changes to page protections.\nSee the [[Special:ProtectedPages|protected pages list]] for the list of currently operational page protections.",
+       "protectedarticle": "protected \"[[$1]]\"",
+       "modifiedarticleprotection": "changed protection level for \"[[$1]]\"",
+       "unprotectedarticle": "removed protection from \"[[$1]]\"",
+       "movedarticleprotection": "moved protection settings from \"[[$2]]\" to \"[[$1]]\"",
+       "protect-title": "Change protection level for \"$1\"",
+       "protect-title-notallowed": "View protection level of \"$1\"",
+       "prot_1movedto2": "[[$1]] moved to [[$2]]",
+       "protect-badnamespace-title": "Non-protectable namespace",
+       "protect-badnamespace-text": "Pages in this namespace cannot be protected.",
+       "protect-norestrictiontypes-text": "This page cannot be protected as there are no restriction types available.",
+       "protect-norestrictiontypes-title": "Non-protectable page",
+       "protect-legend": "Confirm protection",
+       "protectcomment": "Reason:",
+       "protectexpiry": "Expires:",
+       "protect_expiry_invalid": "Expiry time is invalid.",
+       "protect_expiry_old": "Expiry time is in the past.",
+       "protect-unchain-permissions": "Unlock further protect options",
+       "protect-text": "Here you may view and change the protection level for the page <strong>$1</strong>.",
+       "protect-locked-blocked": "You cannot change protection levels while blocked.\nHere are the current settings for the page <strong>$1</strong>:",
+       "protect-locked-dblock": "Protection levels cannot be changed due to an active database lock.\nHere are the current settings for the page <strong>$1</strong>:",
+       "protect-locked-access": "Your account does not have permission to change page protection levels.\nHere are the current settings for the page <strong>$1</strong>:",
+       "protect-cascadeon": "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.\nChanges to this page's protection level will not affect the cascading protection.",
+       "protect-default": "Allow all users",
+       "protect-fallback": "Allow only users with \"$1\" permission",
+       "protect-level-autoconfirmed": "Allow only autoconfirmed users",
+       "protect-level-sysop": "Allow only administrators",
+       "protect-summary-desc": "[$1=$2] ($3)",
+       "protect-summary-cascade": "cascading",
+       "protect-expiring": "expires $1 (UTC)",
+       "protect-expiring-local": "expires $1",
+       "protect-expiry-indefinite": "indefinite",
+       "protect-cascade": "Protect pages included in this page (cascading protection)",
+       "protect-cantedit": "You cannot change the protection levels of this page because you do not have permission to edit it.",
+       "protect-othertime": "Other time:",
+       "protect-othertime-op": "other time",
+       "protect-existing-expiry": "Existing expiry time: $3, $2",
+       "protect-otherreason": "Other/additional reason:",
+       "protect-otherreason-op": "Other reason",
+       "protect-dropdown": "*Common protection reasons\n** Excessive vandalism\n** Excessive spamming\n** Counter-productive edit warring\n** High traffic page",
+       "protect-edit-reasonlist": "Edit protection reasons",
+       "protect-expiry-options": "1 hour:1 hour,1 day:1 day,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite",
+       "restriction-type": "Permission:",
+       "restriction-level": "Restriction level:",
+       "minimum-size": "Min size",
+       "maximum-size": "Max size:",
+       "pagesize": "(bytes)",
+       "restriction-edit": "Edit",
+       "restriction-move": "Move",
+       "restriction-create": "Create",
+       "restriction-upload": "Upload",
+       "restriction-level-sysop": "fully protected",
+       "restriction-level-autoconfirmed": "semi protected",
+       "restriction-level-all": "any level",
+       "undelete": "View deleted pages",
+       "undelete-summary": "",
+       "undeletepage": "View and restore deleted pages",
+       "undeletepagetitle": "<strong>The following consists of deleted revisions of [[:$1|$1]]</strong>.",
+       "viewdeletedpage": "View deleted pages",
+       "undeletepagetext": "The following {{PLURAL:$1|page has been deleted but is|$1 pages have been deleted but are}} still in the archive and can be restored.\nThe archive may be periodically cleaned out.",
+       "undelete-fieldset-title": "Restore revisions",
+       "undeleteextrahelp": "To restore the page's entire history, leave all checkboxes deselected and click <strong><em>{{int:undeletebtn}}</em></strong>.\nTo perform a selective restoration, check the boxes corresponding to the revisions to be restored, and click <strong><em>{{int:undeletebtn}}</em></strong>.",
+       "undeleterevisions": "$1 {{PLURAL:$1|revision|revisions}} archived",
+       "undeletehistory": "If you restore the page, all revisions will be restored to the history.\nIf a new page with the same name has been created since the deletion, the restored revisions will appear in the prior history.",
+       "undeleterevdel": "Undeletion will not be performed if it will result in the top page or file revision being partially deleted.\nIn such cases, you must uncheck or unhide the newest deleted revision.",
+       "undeletehistorynoadmin": "This page has been deleted.\nThe reason for deletion is shown in the summary below, along with details of the users who had edited this page before deletion.\nThe actual text of these deleted revisions is only available to administrators.",
+       "undelete-revision": "Deleted revision of $1 (as of $4, at $5) by $3:",
+       "undeleterevision-missing": "Invalid or missing revision.\nYou may have a bad link, or the revision may have been restored or removed from the archive.",
+       "undelete-nodiff": "No previous revision found.",
+       "undeletebtn": "Restore",
+       "undeletelink": "view/restore",
+       "undeleteviewlink": "view",
+       "undeleteinvert": "Invert selection",
+       "undeletecomment": "Reason:",
+       "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 revisions}} restored",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 revision|$1 revisions}} and {{PLURAL:$2|1 file|$2 files}} restored",
+       "undeletedfiles": "{{PLURAL:$1|1 file|$1 files}} restored",
+       "cannotundelete": "Undelete failed:\n$1",
+       "undeletedpage": "<strong>$1 has been restored</strong>\n\nConsult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.",
+       "undelete-header": "See [[Special:Log/delete|the deletion log]] for recently deleted pages.",
+       "undelete-search-title": "Search deleted pages",
+       "undelete-search-box": "Search deleted pages",
+       "undelete-search-prefix": "Show pages starting with:",
+       "undelete-search-submit": "Search",
+       "undelete-no-results": "No matching pages found in the deletion archive.",
+       "undelete-filename-mismatch": "Cannot undelete file revision with timestamp $1: Filename mismatch.",
+       "undelete-bad-store-key": "Cannot undelete file revision with timestamp $1: File was missing before deletion.",
+       "undelete-cleanup-error": "Error deleting unused archive file \"$1\".",
+       "undelete-missing-filearchive": "Unable to restore file archive ID $1 because it is not in the database.\nIt may have already been undeleted.",
+       "undelete-error": "Error undeleting page",
+       "undelete-error-short": "Error undeleting file: $1",
+       "undelete-error-long": "Errors were encountered while undeleting the file:\n\n$1",
+       "undelete-show-file-confirm": "Are you sure you want to view the deleted revision of the file \"<nowiki>$1</nowiki>\" from $2 at $3?",
+       "undelete-show-file-submit": "Yes",
+       "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
+       "namespace": "Namespace:",
+       "invert": "Invert selection",
+       "tooltip-invert": "Check this box to hide changes to pages within the selected namespace (and the associated namespace if checked)",
+       "namespace_association": "Associated namespace",
+       "tooltip-namespace_association": "Check this box to also include the talk or subject namespace associated with the selected namespace",
+       "blanknamespace": "(Main)",
+       "contributions": "{{GENDER:$1|User}} contributions",
+       "contributions-summary": "",
+       "contributions-title": "User contributions for $1",
+       "mycontris": "Contributions",
+       "contribsub2": "For {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "User account \"$1\" is not registered.",
+       "nocontribs": "No changes were found matching these criteria.",
+       "uctop": "(current)",
+       "month": "From month (and earlier):",
+       "year": "From year (and earlier):",
+       "sp-contributions-newbies": "Show contributions of new accounts only",
+       "sp-contributions-newbies-sub": "For new accounts",
+       "sp-contributions-newbies-title": "User contributions for new accounts",
+       "sp-contributions-blocklog": "block log",
+       "sp-contributions-suppresslog": "suppressed user contributions",
+       "sp-contributions-deleted": "deleted user contributions",
+       "sp-contributions-uploads": "uploads",
+       "sp-contributions-logs": "logs",
+       "sp-contributions-talk": "talk",
+       "sp-contributions-userrights": "user rights management",
+       "sp-contributions-blocked-notice": "This user is currently blocked.\nThe latest block log entry is provided below for reference:",
+       "sp-contributions-blocked-notice-anon": "This IP address is currently blocked.\nThe latest block log entry is provided below for reference:",
+       "sp-contributions-search": "Search for contributions",
+       "sp-contributions-username": "IP address or username:",
+       "sp-contributions-toponly": "Only show edits that are latest revisions",
+       "sp-contributions-newonly": "Only show edits that are page creations",
+       "sp-contributions-submit": "Search",
+       "sp-contributions-explain": "",
+       "sp-contributions-footer": "-",
+       "sp-contributions-footer-anon": "-",
+       "sp-contributions-footer-newbies": "-",
+       "whatlinkshere": "What links here",
+       "whatlinkshere-title": "Pages that link to \"$1\"",
+       "whatlinkshere-summary": "",
+       "whatlinkshere-page": "Page:",
+       "linkshere": "The following pages link to <strong>[[:$1]]</strong>:",
+       "nolinkshere": "No pages link to <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "No pages link to <strong>[[:$1]]</strong> in the chosen namespace.",
+       "isredirect": "redirect page",
+       "istemplate": "transclusion",
+       "isimage": "file link",
+       "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|next|next $1}}",
+       "whatlinkshere-links": "← links",
+       "whatlinkshere-hideredirs": "$1 redirects",
+       "whatlinkshere-hidetrans": "$1 transclusions",
+       "whatlinkshere-hidelinks": "$1 links",
+       "whatlinkshere-hideimages": "$1 file links",
+       "whatlinkshere-filters": "Filters",
+       "autoblockid": "Autoblock #$1",
+       "block": "Block user",
+       "unblock": "Unblock user",
+       "unblock-summary": "",
+       "blockip": "Block user",
+       "blockip-legend": "Block user",
+       "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalized).",
+       "ipaddressorusername": "IP address or username:",
+       "ipbexpiry": "Expiry:",
+       "ipbreason": "Reason:",
+       "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behavior/harassment\n** Abusing multiple accounts\n** Unacceptable username",
+       "ipb-hardblock": "Prevent logged-in users from editing from this IP address",
+       "ipbcreateaccount": "Prevent account creation",
+       "ipbemailban": "Prevent user from sending email",
+       "ipbenableautoblock": "Automatically block the last IP address used by this user, and any subsequent IP addresses they try to edit from",
+       "ipbsubmit": "Block this user",
+       "ipbother": "Other time:",
+       "ipboptions": "2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,indefinite:infinite",
+       "ipbhidename": "Hide username from edits and lists",
+       "ipbwatchuser": "Watch this user's user and talk pages",
+       "ipb-disableusertalk": "Prevent this user from editing their own talk page while blocked",
+       "ipb-change-block": "Re-block the user with these settings",
+       "ipb-confirm": "Confirm block",
+       "badipaddress": "Invalid IP address",
+       "blockipsuccesssub": "Block succeeded",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] has been blocked.<br />\nSee the [[Special:BlockList|block list]] to review blocks.",
+       "ipb-blockingself": "You are about to block yourself! Are you sure you want to do that?",
+       "ipb-confirmhideuser": "You are about to block a user with \"hide user\" enabled. This will suppress the user's name in all lists and log entries. Are you sure you want to do that?",
+       "ipb-confirmaction": "If you are sure you really want to do it, please check the \"{{int:ipb-confirm}}\" field at the bottom.",
+       "ipb-edit-dropdown": "Edit block reasons",
+       "ipb-unblock-addr": "Unblock $1",
+       "ipb-unblock": "Unblock a username or IP address",
+       "ipb-blocklist": "View existing blocks",
+       "ipb-blocklist-contribs": "Contributions for $1",
+       "unblockip": "Unblock user",
+       "unblockiptext": "Use the form below to restore write access to a previously blocked IP address or username.",
+       "ipusubmit": "Remove this block",
+       "unblocked": "[[User:$1|$1]] has been unblocked.",
+       "unblocked-range": "$1 has been unblocked.",
+       "unblocked-id": "Block $1 has been removed.",
+       "blocklist": "Blocked users",
+       "ipblocklist": "Blocked users",
+       "ipblocklist-legend": "Find a blocked user",
+       "blocklist-userblocks": "Hide account blocks",
+       "blocklist-tempblocks": "Hide temporary blocks",
+       "blocklist-addressblocks": "Hide single IP blocks",
+       "blocklist-rangeblocks": "Hide range blocks",
+       "blocklist-timestamp": "Timestamp",
+       "blocklist-target": "Target",
+       "blocklist-expiry": "Expires",
+       "blocklist-by": "Blocking admin",
+       "blocklist-params": "Block parameters",
+       "blocklist-reason": "Reason",
+       "blocklist-summary": "",
+       "ipblocklist-submit": "Search",
+       "ipblocklist-localblock": "Local block",
+       "ipblocklist-otherblocks": "Other {{PLURAL:$1|block|blocks}}",
+       "infiniteblock": "infinite",
+       "expiringblock": "expires on $1 at $2",
+       "anononlyblock": "anon. only",
+       "noautoblockblock": "autoblock disabled",
+       "createaccountblock": "account creation disabled",
+       "emailblock": "email disabled",
+       "blocklist-nousertalk": "cannot edit own talk page",
+       "ipblocklist-empty": "The block list is empty.",
+       "ipblocklist-no-results": "The requested IP address or username is not blocked.",
+       "blocklink": "block",
+       "unblocklink": "unblock",
+       "change-blocklink": "change block",
+       "contribslink": "contribs",
+       "emaillink": "send email",
+       "autoblocker": "Autoblocked because your IP address has been recently used by \"[[User:$1|$1]]\".\nThe reason given for $1's block is \"$2\"",
+       "blocklogpage": "Block log",
+       "blocklog-showlog": "This user has been blocked previously.\nThe block log is provided below for reference:",
+       "blocklog-showsuppresslog": "This user has been blocked and hidden previously.\nThe suppress log is provided below for reference:",
+       "blocklogentry": "blocked [[$1]] with an expiry time of $2 $3",
+       "reblock-logentry": "changed block settings for [[$1]] with an expiry time of $2 $3",
+       "blocklogtext": "This is a log of user blocking and unblocking actions.\nAutomatically blocked IP addresses are not listed.\nSee the [[Special:BlockList|block list]] for the list of currently operational bans and blocks.",
+       "unblocklogentry": "unblocked $1",
+       "block-log-flags-anononly": "anonymous users only",
+       "block-log-flags-nocreate": "account creation disabled",
+       "block-log-flags-noautoblock": "autoblock disabled",
+       "block-log-flags-noemail": "email disabled",
+       "block-log-flags-nousertalk": "cannot edit own talk page",
+       "block-log-flags-angry-autoblock": "enhanced autoblock enabled",
+       "block-log-flags-hiddenname": "username hidden",
+       "range_block_disabled": "The administrator ability to create range blocks is disabled.",
+       "ipb_expiry_invalid": "Expiry time invalid.",
+       "ipb_expiry_temp": "Hidden username blocks must be permanent.",
+       "ipb_hide_invalid": "Unable to suppress this account; it has more than {{PLURAL:$1|one edit|$1 edits}}.",
+       "ipb_already_blocked": "\"$1\" is already blocked.",
+       "ipb-needreblock": "$1 is already blocked. Do you want to change the settings?",
+       "ipb-otherblocks-header": "Other {{PLURAL:$1|block|blocks}}",
+       "unblock-hideuser": "You cannot unblock this user, as their username has been hidden.",
+       "ipb_cant_unblock": "Error: Block ID $1 not found. It may have been unblocked already.",
+       "ipb_blocked_as_range": "Error: The IP address $1 is not blocked directly and cannot be unblocked.\nIt is, however, blocked as part of the range $2, which can be unblocked.",
+       "ip_range_invalid": "Invalid IP range.",
+       "ip_range_toolarge": "Range blocks larger than /$1 are not allowed.",
+       "proxyblocker": "Proxy blocker",
+       "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organization and inform them of this serious security problem.",
+       "sorbs": "DNSBL",
+       "sorbsreason": "Your IP address is listed as an open proxy in the DNSBL used by {{SITENAME}}.",
+       "sorbs_create_account_reason": "Your IP address is listed as an open proxy in the DNSBL used by {{SITENAME}}.\nYou cannot create an account.",
+       "xffblockreason": "An IP address present in the X-Forwarded-For header, either yours or that of a proxy server you are using, has been blocked. The original block reason was: $1",
+       "cant-see-hidden-user": "The user you are trying to block has already been blocked and hidden.\nSince you do not have the hideuser right, you cannot see or edit the user's block.",
+       "ipbblocked": "You cannot block or unblock other users because you are yourself blocked.",
+       "ipbnounblockself": "You are not allowed to unblock yourself.",
+       "ipb-default-expiry": "",
+       "lockdb": "Lock database",
+       "unlockdb": "Unlock database",
+       "lockdbtext": "Locking the database will suspend the ability of all users to edit pages, change their preferences, edit their watchlists, and other things requiring changes in the database.\nPlease confirm that this is what you intend to do, and that you will unlock the database when your maintenance is done.",
+       "unlockdbtext": "Unlocking the database will restore the ability of all users to edit pages, change their preferences, edit their watchlists, and other things requiring changes in the database.\nPlease confirm that this is what you intend to do.",
+       "lockconfirm": "Yes, I really want to lock the database.",
+       "unlockconfirm": "Yes, I really want to unlock the database.",
+       "lockbtn": "Lock database",
+       "unlockbtn": "Unlock database",
+       "locknoconfirm": "You did not check the confirmation box.",
+       "lockdbsuccesssub": "Database lock succeeded",
+       "unlockdbsuccesssub": "Database lock removed",
+       "lockdbsuccesstext": "The database has been locked.<br />\nRemember to [[Special:UnlockDB|remove the lock]] after your maintenance is complete.",
+       "unlockdbsuccesstext": "The database has been unlocked.",
+       "lockfilenotwritable": "The database lock file is not writable.\nTo lock or unlock the database, this needs to be writable by the web server.",
+       "databasenotlocked": "The database is not locked.",
+       "lockedbyandtime": "(by {{GENDER:$1|$1}} on $2 at $3)",
+       "move-page": "Move $1",
+       "movepage-summary": "",
+       "move-page-legend": "Move page",
+       "movepagetext": "Using the form below will rename a page, moving all of its history to the new name.\nThe old title will become a redirect page to the new title.\nYou can update redirects that point to the original title automatically.\nIf you choose not to, be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].\nYou are responsible for making sure that links continue to point where they are supposed to go.\n\nNote that the page will <strong>not</strong> be moved if there is already a page at the new title, unless the latter is a redirect and has no past edit history.\nThis means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.\n\n<strong>Warning!</strong>\nThis can be a drastic and unexpected change for a popular page;\nplease be sure you understand the consequences of this before proceeding.",
+       "movepagetext-noredirectfixer": "Using the form below will rename a page, moving all of its history to the new name.\nThe old title will become a redirect page to the new title.\nBe sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].\nYou are responsible for making sure that links continue to point where they are supposed to go.\n\nNote that the page will <strong>not</strong> be moved if there is already a page at the new title, unless it is a redirect and has no past edit history.\nThis means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.\n\n<strong>Warning!</strong>\nThis can be a drastic and unexpected change for a popular page;\nplease be sure you understand the consequences of this before proceeding.",
+       "movepagetalktext": "The associated talk page will be automatically moved along with it <strong>unless:</strong>\n*A non-empty talk page already exists under the new name, or\n*You uncheck the box below.\n\nIn those cases, you will have to move or merge the page manually if desired.",
+       "movearticle": "Move page:",
+       "moveuserpage-warning": "<strong>Warning:</strong> You are about to move a user page. Please note that only the page will be moved and the user will <em>not</em> be renamed.",
+       "movecategorypage-warning": "<strong>Warning:</strong> You are about to move a category page. Please note that only the page will be moved and any pages in the old category will <em>not</em> be recategorized into the new one.",
+       "movenologintext": "You must be a registered user and [[Special:UserLogin|logged in]] to move a page.",
+       "movenotallowed": "You do not have permission to move pages.",
+       "movenotallowedfile": "You do not have permission to move files.",
+       "cant-move-user-page": "You do not have permission to move user pages (apart from subpages).",
+       "cant-move-to-user-page": "You do not have permission to move a page to a user page (except to a user subpage).",
+       "cant-move-category-page": "You do not have permission to move category pages.",
+       "cant-move-to-category-page": "You do not have permission to move a page to a category page.",
+       "newtitle": "To new title:",
+       "move-watch": "Watch source page and target page",
+       "movepagebtn": "Move page",
+       "pagemovedsub": "Move succeeded",
+       "movepage-moved": "<strong>\"$1\" has been moved to \"$2\"</strong>",
+       "movepage-moved-redirect": "A redirect has been created.",
+       "movepage-moved-noredirect": "The creation of a redirect has been suppressed.",
+       "articleexists": "A page of that name already exists, or the name you have chosen is not valid.\nPlease choose another name.",
+       "cantmove-titleprotected": "You cannot move a page to this location because the new title has been protected from creation",
+       "movetalk": "Move associated talk page",
+       "move-subpages": "Move subpages (up to $1)",
+       "move-talk-subpages": "Move subpages of talk page (up to $1)",
+       "movepage-page-exists": "The page $1 already exists and cannot be automatically overwritten.",
+       "movepage-page-moved": "The page $1 has been moved to $2.",
+       "movepage-page-unmoved": "The page $1 could not be moved to $2.",
+       "movepage-max-pages": "The maximum of $1 {{PLURAL:$1|page|pages}} has been moved and no more will be moved automatically.",
+       "movelogpage": "Move log",
+       "movelogpagetext": "Below is a list of all page moves.",
+       "movesubpage": "{{PLURAL:$1|Subpage|Subpages}}",
+       "movesubpagetext": "This page has $1 {{PLURAL:$1|subpage|subpages}} shown below.",
+       "movenosubpage": "This page has no subpages.",
+       "movereason": "Reason:",
+       "move-redirect-text": "",
+       "category-move-redirect-override": "-",
+       "revertmove": "revert",
+       "delete_and_move": "Delete and move",
+       "delete_and_move_text": "== Deletion required ==\nThe destination page \"[[:$1]]\" already exists.\nDo you want to delete it to make way for the move?",
+       "delete_and_move_confirm": "Yes, delete the page",
+       "delete_and_move_reason": "Deleted to make way for move from \"[[$1]]\"",
+       "selfmove": "Source and destination titles are the same;\ncannot move a page over itself.",
+       "immobile-source-namespace": "Cannot move pages in namespace \"$1\"",
+       "immobile-target-namespace": "Cannot move pages into namespace \"$1\"",
+       "immobile-target-namespace-iw": "Interwiki link is not a valid target for page move.",
+       "immobile-source-page": "This page is not movable.",
+       "immobile-target-page": "Cannot move to that destination title.",
+       "bad-target-model": "The desired destination uses a different content model. Cannot convert from $1 to $2.",
+       "imagenocrossnamespace": "Cannot move file to non-file namespace",
+       "nonfile-cannot-move-to-file": "Cannot move non-file to file namespace",
+       "imagetypemismatch": "The new file extension does not match its type",
+       "imageinvalidfilename": "The target filename is invalid",
+       "fix-double-redirects": "Update any redirects that point to the original title",
+       "move-leave-redirect": "Leave a redirect behind",
+       "protectedpagemovewarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can move it.\nThe latest log entry is provided below for reference:",
+       "semiprotectedpagemovewarning": "<strong>Note:</strong> This page has been protected so that only registered users can move it.\nThe latest log entry is provided below for reference:",
+       "move-over-sharedrepo": "== File exists ==\n[[:$1]] exists on a shared repository. Moving a file to this title will override the shared file.",
+       "file-exists-sharedrepo": "The filename chosen is already in use on a shared repository.\nPlease choose another name.",
+       "export": "Export pages",
+       "export-summary": "",
+       "exporttext": "You can export the text and editing history of a particular page or set of pages wrapped in some XML.\nThis can be imported into another wiki using MediaWiki via the [[Special:Import|import page]].\n\nTo export pages, enter the titles in the text box below, one title per line, and select whether you want the current revision as well as all old revisions, with the page history lines, or the current revision with the info about the last edit.\n\nIn the latter case you can also use a link, for example [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for the page \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exportall": "Export all pages",
+       "exportcuronly": "Include only the current revision, not the full history",
+       "exportnohistory": "----\n<strong>Note:</strong> Exporting the full history of pages through this form has been disabled due to performance reasons.",
+       "exportlistauthors": "Include a full list of contributors for each page",
+       "export-submit": "Export",
+       "export-addcattext": "Add pages from category:",
+       "export-addcat": "Add",
+       "export-addnstext": "Add pages from namespace:",
+       "export-addns": "Add",
+       "export-download": "Save as file",
+       "export-templates": "Include templates",
+       "export-pagelinks": "Include linked pages to a depth of:",
+       "allmessages": "System messages",
+       "allmessagesname": "Name",
+       "allmessagesdefault": "Default message text",
+       "allmessagescurrent": "Current message text",
+       "allmessagestext": "This is a list of system messages available in the MediaWiki namespace.\nPlease visit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
+       "allmessagesnotsupportedDB": "This page cannot be used because <strong>$wgUseDatabaseMessages</strong> has been disabled.",
+       "allmessages-filter-legend": "Filter",
+       "allmessages-filter": "Filter by customization state:",
+       "allmessages-filter-unmodified": "Unmodified",
+       "allmessages-filter-all": "All",
+       "allmessages-filter-modified": "Modified",
+       "allmessages-prefix": "Filter by prefix:",
+       "allmessages-language": "Language:",
+       "allmessages-filter-submit": "Go",
+       "allmessages-filter-translate": "Translate",
+       "thumbnail-more": "Enlarge",
+       "filemissing": "File missing",
+       "thumbnail_error": "Error creating thumbnail: $1",
+       "thumbnail_error_remote": "Error message from $1:\n$2",
+       "djvu_page_error": "DjVu page out of range",
+       "djvu_no_xml": "Unable to fetch XML for DjVu file",
+       "thumbnail-temp-create": "Unable to create temporary thumbnail file",
+       "thumbnail-dest-create": "Unable to save thumbnail to destination",
+       "thumbnail_invalid_params": "Invalid thumbnail parameters",
+       "thumbnail_dest_directory": "Unable to create destination directory",
+       "thumbnail_image-type": "Image type not supported",
+       "thumbnail_gd-library": "Incomplete GD library configuration: Missing function $1",
+       "thumbnail_image-missing": "File seems to be missing: $1",
+       "thumbnail_image-failure-limit": "There have been too many recent failed attempts ($1 or more) to render this thumbnail. Please try again later.",
+       "import": "Import pages",
+       "import-summary": "",
+       "importinterwiki": "Transwiki import",
+       "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll transwiki import actions are logged at the [[Special:Log/import|import log]].",
+       "import-interwiki-source": "Source wiki/page:",
+       "import-interwiki-history": "Copy all history revisions for this page",
+       "import-interwiki-templates": "Include all templates",
+       "import-interwiki-submit": "Import",
+       "import-interwiki-namespace": "Destination namespace:",
+       "import-interwiki-rootpage": "Destination root page (optional):",
+       "import-upload-filename": "Filename:",
+       "import-comment": "Comment:",
+       "importtext": "Please export the file from the source wiki using the [[Special:Export|export utility]].\nSave it to your computer and upload it here.",
+       "importstart": "Importing pages...",
+       "import-revision-count": "$1 {{PLURAL:$1|revision|revisions}}",
+       "importnopages": "No pages to import.",
+       "imported-log-entries": "Imported $1 {{PLURAL:$1|log entry|log entries}}.",
+       "importfailed": "Import failed: <nowiki>$1</nowiki>",
+       "importunknownsource": "Unknown import source type",
+       "importcantopen": "Could not open import file",
+       "importbadinterwiki": "Bad interwiki link",
+       "importsuccess": "Import finished!",
+       "importnosources": "No transwiki import sources have been defined and direct history uploads are disabled.",
+       "importnofile": "No import file was uploaded.",
+       "importuploaderrorsize": "Upload of import file failed.\nThe file is bigger than the allowed upload size.",
+       "importuploaderrorpartial": "Upload of import file failed.\nThe file was only partially uploaded.",
+       "importuploaderrortemp": "Upload of import file failed.\nA temporary folder is missing.",
+       "import-parse-failure": "XML import parse failure",
+       "import-noarticle": "No page to import!",
+       "import-nonewrevisions": "No revisions imported (all were either already present, or skipped due to errors).",
+       "xml-error-string": "$1 at line $2, col $3 (byte $4): $5",
+       "import-upload": "Upload XML data",
+       "import-token-mismatch": "Loss of session data.\nPlease try again.",
+       "import-invalid-interwiki": "Cannot import from the specified wiki.",
+       "import-error-edit": "Page \"$1\" is not imported because you are not allowed to edit it.",
+       "import-error-create": "Page \"$1\" is not imported because you are not allowed to create it.",
+       "import-error-interwiki": "Page \"$1\" is not imported because its name is reserved for external linking (interwiki).",
+       "import-error-special": "Page \"$1\" is not imported because it belongs to a special namespace that does not allow pages.",
+       "import-error-invalid": "Page \"$1\" is not imported because its name is invalid.",
+       "import-error-unserialize": "Revision $2 of page \"$1\" could not be unserialized. The revision was reported to use content model $3 serialized as $4.",
+       "import-error-bad-location": "Revision $2 using content model $3 cannot be stored on \"$1\" on this wiki, since that model is not supported on that page.",
+       "import-options-wrong": "Wrong {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>",
+       "import-rootpage-invalid": "Given root page is an invalid title.",
+       "import-rootpage-nosubpage": "Namespace \"$1\" of the root page does not allow subpages.",
+       "importlogpage": "Import log",
+       "importlogpagetext": "Administrative imports of pages with edit history from other wikis.",
+       "import-logentry-upload": "imported [[$1]] by file upload",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision|revisions}}",
+       "import-logentry-interwiki": "transwikied $1",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision|revisions}} from $2",
+       "javascripttest": "JavaScript testing",
+       "javascripttest-backlink": "< $1",
+       "javascripttest-title": "Running $1 tests",
+       "javascripttest-pagetext-noframework": "This page is reserved for running JavaScript tests.",
+       "javascripttest-pagetext-unknownframework": "Unknown testing framework \"$1\".",
+       "javascripttest-pagetext-frameworks": "Please choose one of the following testing frameworks: $1",
+       "javascripttest-pagetext-skins": "Choose a skin to run the tests with:",
+       "javascripttest-qunit-name": "QUnit",
+       "javascripttest-qunit-intro": "See [$1 testing documentation] on mediawiki.org.",
+       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
+       "accesskey-pt-userpage": ".",
+       "accesskey-pt-anonuserpage": ".",
+       "accesskey-pt-mytalk": "n",
+       "accesskey-pt-anontalk": "n",
+       "accesskey-pt-preferences": "",
+       "accesskey-pt-watchlist": "l",
+       "accesskey-pt-mycontris": "y",
+       "accesskey-pt-login": "o",
+       "accesskey-pt-logout": "",
+       "accesskey-ca-talk": "t",
+       "accesskey-ca-edit": "e",
+       "accesskey-ca-addsection": "+",
+       "accesskey-ca-viewsource": "e",
+       "accesskey-ca-history": "h",
+       "accesskey-ca-protect": "=",
+       "accesskey-ca-unprotect": "=",
+       "accesskey-ca-delete": "d",
+       "accesskey-ca-undelete": "d",
+       "accesskey-ca-move": "m",
+       "accesskey-ca-watch": "w",
+       "accesskey-ca-unwatch": "w",
+       "accesskey-search": "f",
+       "accesskey-search-go": "",
+       "accesskey-search-fulltext": "",
+       "accesskey-p-logo": "",
+       "accesskey-n-mainpage": "z",
+       "accesskey-n-mainpage-description": "z",
+       "accesskey-n-portal": "",
+       "accesskey-n-currentevents": "",
+       "accesskey-n-recentchanges": "r",
+       "accesskey-n-randompage": "x",
+       "accesskey-n-help": "",
+       "accesskey-t-whatlinkshere": "j",
+       "accesskey-t-recentchangeslinked": "k",
+       "accesskey-feed-rss": "",
+       "accesskey-feed-atom": "",
+       "accesskey-t-contributions": "",
+       "accesskey-t-emailuser": "",
+       "accesskey-t-permalink": "",
+       "accesskey-t-print": "p",
+       "accesskey-t-upload": "u",
+       "accesskey-t-specialpages": "q",
+       "accesskey-ca-nstab-main": "c",
+       "accesskey-ca-nstab-user": "c",
+       "accesskey-ca-nstab-media": "c",
+       "accesskey-ca-nstab-special": "",
+       "accesskey-ca-nstab-project": "a",
+       "accesskey-ca-nstab-image": "c",
+       "accesskey-ca-nstab-mediawiki": "c",
+       "accesskey-ca-nstab-template": "c",
+       "accesskey-ca-nstab-help": "c",
+       "accesskey-ca-nstab-category": "c",
+       "accesskey-minoredit": "i",
+       "accesskey-save": "s",
+       "accesskey-preview": "p",
+       "accesskey-diff": "v",
+       "accesskey-compareselectedversions": "v",
+       "accesskey-watch": "w",
+       "accesskey-upload": "s",
+       "accesskey-preferences-save": "s",
+       "accesskey-summary": "b",
+       "accesskey-userrights-set": "s",
+       "accesskey-blockip-block": "s",
+       "accesskey-export": "s",
+       "accesskey-import": "s",
+       "accesskey-watchlistedit-normal-submit": "s",
+       "accesskey-watchlistedit-raw-submit": "s",
+       "tooltip-pt-userpage": "Your user page",
+       "tooltip-pt-anonuserpage": "The user page for the IP address you are editing as",
+       "tooltip-pt-mytalk": "Your talk page",
+       "tooltip-pt-anontalk": "Discussion about edits from this IP address",
+       "tooltip-pt-preferences": "Your preferences",
+       "tooltip-pt-watchlist": "A list of pages you are monitoring for changes",
+       "tooltip-pt-mycontris": "A list of your contributions",
+       "tooltip-pt-login": "You are encouraged to log in; however, it is not mandatory",
+       "tooltip-pt-logout": "Log out",
+       "tooltip-ca-talk": "Discussion about the content page",
+       "tooltip-ca-edit": "You can edit this page. Please use the preview button before saving",
+       "tooltip-ca-addsection": "Start a new section",
+       "tooltip-ca-viewsource": "This page is protected.\nYou can view its source",
+       "tooltip-ca-history": "Past revisions of this page",
+       "tooltip-ca-protect": "Protect this page",
+       "tooltip-ca-unprotect": "Change protection of this page",
+       "tooltip-ca-delete": "Delete this page",
+       "tooltip-ca-undelete": "Restore the edits done to this page before it was deleted",
+       "tooltip-ca-move": "Move this page",
+       "tooltip-ca-watch": "Add this page to your watchlist",
+       "tooltip-ca-unwatch": "Remove this page from your watchlist",
+       "tooltip-search": "Search {{SITENAME}}",
+       "tooltip-search-go": "Go to a page with this exact name if exists",
+       "tooltip-search-fulltext": "Search the pages for this text",
+       "tooltip-p-logo": "Visit the main page",
+       "tooltip-n-mainpage": "Visit the main page",
+       "tooltip-n-mainpage-description": "Visit the main page",
+       "tooltip-n-portal": "About the project, what you can do, where to find things",
+       "tooltip-n-currentevents": "Find background information on current events",
+       "tooltip-n-recentchanges": "A list of recent changes in the wiki",
+       "tooltip-n-randompage": "Load a random page",
+       "tooltip-n-help": "The place to find out",
+       "tooltip-t-whatlinkshere": "A list of all wiki pages that link here",
+       "tooltip-t-recentchangeslinked": "Recent changes in pages linked from this page",
+       "tooltip-feed-rss": "RSS feed for this page",
+       "tooltip-feed-atom": "Atom feed for this page",
+       "tooltip-t-contributions": "A list of contributions of this user",
+       "tooltip-t-emailuser": "Send an email to this user",
+       "tooltip-t-upload": "Upload files",
+       "tooltip-t-specialpages": "A list of all special pages",
+       "tooltip-t-print": "Printable version of this page",
+       "tooltip-t-permalink": "Permanent link to this revision of the page",
+       "tooltip-ca-nstab-main": "View the content page",
+       "tooltip-ca-nstab-user": "View the user page",
+       "tooltip-ca-nstab-media": "View the media page",
+       "tooltip-ca-nstab-special": "This is a special page, you cannot edit the page itself",
+       "tooltip-ca-nstab-project": "View the project page",
+       "tooltip-ca-nstab-image": "View the file page",
+       "tooltip-ca-nstab-mediawiki": "View the system message",
+       "tooltip-ca-nstab-template": "View the template",
+       "tooltip-ca-nstab-help": "View the help page",
+       "tooltip-ca-nstab-category": "View the category page",
+       "tooltip-minoredit": "Mark this as a minor edit",
+       "tooltip-save": "Save your changes",
+       "tooltip-preview": "Preview your changes, please use this before saving!",
+       "tooltip-diff": "Show which changes you made to the text",
+       "tooltip-compareselectedversions": "See the differences between the two selected revisions of this page",
+       "tooltip-watch": "Add this page to your watchlist",
+       "tooltip-watchlistedit-normal-submit": "Remove titles",
+       "tooltip-watchlistedit-raw-submit": "Update watchlist",
+       "tooltip-recreate": "Recreate the page even though it has been deleted",
+       "tooltip-upload": "Start upload",
+       "tooltip-rollback": "\"Rollback\" reverts edit(s) to this page of the last contributor in one click",
+       "tooltip-undo": "\"Undo\" reverts this edit and opens the edit form in preview mode. It allows adding a reason in the summary.",
+       "tooltip-preferences-save": "Save preferences",
+       "tooltip-summary": "Enter a short summary",
+       "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-langonly": "$1",
+       "common.css": "/* CSS placed here will be applied to all skins */",
+       "cologneblue.css": "/* CSS placed here will affect users of the Cologne Blue skin */",
+       "monobook.css": "/* CSS placed here will affect users of the MonoBook skin */",
+       "modern.css": "/* CSS placed here will affect users of the Modern skin */",
+       "vector.css": "/* CSS placed here will affect users of the Vector skin */",
+       "print.css": "/* CSS placed here will affect the print output */",
+       "noscript.css": "/* CSS placed here will affect users with JavaScript disabled */",
+       "group-autoconfirmed.css": "/* CSS placed here will affect autoconfirmed users only */",
+       "group-user.css": "/* CSS placed here will affect registered users only */",
+       "group-bot.css": "/* CSS placed here will affect bots only */",
+       "group-sysop.css": "/* CSS placed here will affect sysops only */",
+       "group-bureaucrat.css": "/* CSS placed here will affect bureaucrats only */",
+       "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
+       "cologneblue.js": "/* Any JavaScript here will be loaded for users using the Cologne Blue skin */",
+       "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */",
+       "modern.js": "/* Any JavaScript here will be loaded for users using the Modern skin */",
+       "vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
+       "group-autoconfirmed.js": "/* Any JavaScript here will be loaded for autoconfirmed users only */",
+       "group-user.js": "/* Any JavaScript here will be loaded for registered users only */",
+       "group-bot.js": "/* Any JavaScript here will be loaded for bots only */",
+       "group-sysop.js": "/* Any JavaScript here will be loaded for sysops only */",
+       "group-bureaucrat.js": "/* Any JavaScript here will be loaded for bureaucrats only */",
+       "anonymous": "Anonymous {{PLURAL:$1|user|users}} of {{SITENAME}}",
+       "siteuser": "{{SITENAME}} user $1",
+       "anonuser": "{{SITENAME}} anonymous user $1",
+       "lastmodifiedatby": "This page was last modified $2, $1 by $3.",
+       "othercontribs": "Based on work by $1.",
+       "others": "others",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|user|users}} $1",
+       "anonusers": "{{SITENAME}} anonymous {{PLURAL:$2|user|users}} $1",
+       "creditspage": "Page credits",
+       "nocredits": "There is no credits info available for this page.",
+       "spamprotectiontitle": "Spam protection filter",
+       "spamprotectiontext": "The text you wanted to save was blocked by the spam filter.\nThis is probably caused by a link to a blacklisted external site.",
+       "spamprotectionmatch": "The following text is what triggered our spam filter: $1",
+       "spambot_username": "MediaWiki spam cleanup",
+       "spam_reverting": "Reverting to last revision not containing links to $1",
+       "spam_blanking": "All revisions contained links to $1, blanking",
+       "spam_deleting": "All revisions contained links to $1, deleting",
+       "simpleantispam-label": "Anti-spam check.\nDo <strong>NOT</strong> fill this in!",
+       "pageinfo-header": "-",
+       "pageinfo-title": "Information for \"$1\"",
+       "pageinfo-not-current": "Sorry, it's impossible to provide this information for old revisions.",
+       "pageinfo-header-basic": "Basic information",
+       "pageinfo-header-edits": "Edit history",
+       "pageinfo-header-restrictions": "Page protection",
+       "pageinfo-header-properties": "Page properties",
+       "pageinfo-display-title": "Display title",
+       "pageinfo-default-sort": "Default sort key",
+       "pageinfo-length": "Page length (in bytes)",
+       "pageinfo-article-id": "Page ID",
+       "pageinfo-language": "Page content language",
+       "pageinfo-content-model": "Page content model",
+       "pageinfo-robot-policy": "Indexing by robots",
+       "pageinfo-robot-index": "Allowed",
+       "pageinfo-robot-noindex": "Disallowed",
+       "pageinfo-views": "Number of views",
+       "pageinfo-watchers": "Number of page watchers",
+       "pageinfo-few-watchers": "Fewer than $1 {{PLURAL:$1|watcher|watchers}}",
+       "pageinfo-redirects-name": "Number of redirects to this page",
+       "pageinfo-redirects-value": "$1",
+       "pageinfo-subpages-name": "Number of subpages of this page",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})",
+       "pageinfo-firstuser": "Page creator",
+       "pageinfo-firsttime": "Date of page creation",
+       "pageinfo-lastuser": "Latest editor",
+       "pageinfo-lasttime": "Date of latest edit",
+       "pageinfo-edits": "Total number of edits",
+       "pageinfo-authors": "Total number of distinct authors",
+       "pageinfo-recent-edits": "Recent number of edits (within past $1)",
+       "pageinfo-recent-authors": "Recent number of distinct authors",
+       "pageinfo-magic-words": "Magic {{PLURAL:$1|word|words}} ($1)",
+       "pageinfo-hidden-categories": "Hidden {{PLURAL:$1|category|categories}} ($1)",
+       "pageinfo-templates": "Transcluded {{PLURAL:$1|template|templates}} ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Page|Pages}} transcluded on ($1)",
+       "pageinfo-footer": "-",
+       "pageinfo-toolboxlink": "Page information",
+       "pageinfo-redirectsto": "Redirects to",
+       "pageinfo-redirectsto-info": "info",
+       "pageinfo-contentpage": "Counted as a content page",
+       "pageinfo-contentpage-yes": "Yes",
+       "pageinfo-protect-cascading": "Protections are cascading from here",
+       "pageinfo-protect-cascading-yes": "Yes",
+       "pageinfo-protect-cascading-from": "Protections are cascading from",
+       "pageinfo-category-info": "Category information",
+       "pageinfo-category-pages": "Number of pages",
+       "pageinfo-category-subcats": "Number of subcategories",
+       "pageinfo-category-files": "Number of files",
+       "skinname-cologneblue": "Cologne Blue",
+       "skinname-monobook": "MonoBook",
+       "skinname-modern": "Modern",
+       "skinname-vector": "Vector",
+       "markaspatrolleddiff": "Mark as patrolled",
+       "markaspatrolledlink": "[$1]",
+       "markaspatrolledtext": "Mark this page as patrolled",
+       "markedaspatrolled": "Marked as patrolled",
+       "markedaspatrolledtext": "The selected revision of [[:$1]] has been marked as patrolled.",
+       "rcpatroldisabled": "Recent changes patrol disabled",
+       "rcpatroldisabledtext": "The recent changes patrol feature is currently disabled.",
+       "markedaspatrollederror": "Cannot mark as patrolled",
+       "markedaspatrollederrortext": "You need to specify a revision to mark as patrolled.",
+       "markedaspatrollederror-noautopatrol": "You are not allowed to mark your own changes as patrolled.",
+       "markedaspatrollednotify": "This change to $1 has been marked as patrolled.",
+       "markedaspatrollederrornotify": "Marking as patrolled failed.",
+       "patrol-log-page": "Patrol log",
+       "patrol-log-header": "This is a log of patrolled revisions.",
+       "log-show-hide-patrol": "$1 patrol log",
+       "deletedrevision": "Deleted old revision $1",
+       "filedeleteerror-short": "Error deleting file: $1",
+       "filedeleteerror-long": "Errors were encountered while deleting the file:\n\n$1",
+       "filedelete-missing": "The file \"$1\" cannot be deleted because it does not exist.",
+       "filedelete-old-unregistered": "The specified file revision \"$1\" is not in the database.",
+       "filedelete-current-unregistered": "The specified file \"$1\" is not in the database.",
+       "filedelete-archive-read-only": "The archive directory \"$1\" is not writable by the webserver.",
+       "previousdiff": "← Older edit",
+       "nextdiff": "Newer edit →",
+       "mediawarning": "<strong>Warning:</strong> This file type may contain malicious code.\nBy executing it, your system may be compromised.",
+       "imagemaxsize": "Image size limit:<br /><em>(for file description pages)</em>",
+       "thumbsize": "Thumbnail size:",
+       "widthheight": "$1 × $2",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|page|pages}}",
+       "file-info": "file size: $1, MIME type: $2",
+       "file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
+       "file-info-size-pages": "$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}",
+       "file-nohires": "No higher resolution available.",
+       "svg-long-desc": "SVG file, nominally $1 × $2 pixels, file size: $3",
+       "svg-long-desc-animated": "Animated SVG file, nominally $1 × $2 pixels, file size: $3",
+       "svg-long-error": "Invalid SVG file: $1",
+       "show-big-image": "Original file",
+       "show-big-image-preview": "Size of this preview: $1.",
+       "show-big-image-other": "Other {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-size": "$1 × $2 pixels",
+       "file-info-gif-looped": "looped",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|frame|frames}}",
+       "file-info-png-looped": "looped",
+       "file-info-png-repeat": "played $1 {{PLURAL:$1|time|times}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|frame|frames}}",
+       "file-no-thumb-animation": "<strong>Note: Due to technical limitations, thumbnails of this file will not be animated.</strong>",
+       "file-no-thumb-animation-gif": "<strong>Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.</strong>",
+       "newimages": "Gallery of new files",
+       "newimagestext": "-",
+       "imagelisttext": "Below is a list of <strong>$1</strong> {{PLURAL:$1|file|files}} sorted $2.",
+       "newimages-summary": "This special page shows the last uploaded files.",
+       "newimages-legend": "Filter",
+       "newimages-label": "Filename (or a part of it):",
+       "newimages-showbots": "Show uploads by bots",
+       "noimages": "Nothing to see.",
+       "ilsubmit": "Search",
+       "bydate": "by date",
+       "sp-newimages-showfrom": "Show new files starting from $2, $1",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 s",
+       "minutes-abbrev": "$1 min",
+       "hours-abbrev": "$1 h",
+       "days-abbrev": "$1 d",
+       "seconds": "{{PLURAL:$1|$1 second|$1 seconds}}",
+       "minutes": "{{PLURAL:$1|$1 minute|$1 minutes}}",
+       "hours": "{{PLURAL:$1|$1 hour|$1 hours}}",
+       "days": "{{PLURAL:$1|$1 day|$1 days}}",
+       "weeks": "{{PLURAL:$1|$1 week|$1 weeks}}",
+       "months": "{{PLURAL:$1|$1 month|$1 months}}",
+       "years": "{{PLURAL:$1|$1 year|$1 years}}",
+       "ago": "$1 ago",
+       "just-now": "just now",
+       "hours-ago": "$1 {{PLURAL:$1|hour|hours}} ago",
+       "minutes-ago": "$1 {{PLURAL:$1|minute|minutes}} ago",
+       "seconds-ago": "$1 {{PLURAL:$1|second|seconds}} ago",
+       "monday-at": "Monday at $1",
+       "tuesday-at": "Tuesday at $1",
+       "wednesday-at": "Wednesday at $1",
+       "thursday-at": "Thursday at $1",
+       "friday-at": "Friday at $1",
+       "saturday-at": "Saturday at $1",
+       "sunday-at": "Sunday at $1",
+       "today-at": "$1",
+       "yesterday-at": "Yesterday at $1",
+       "bad_image_list": "The format is as follows:\n\nOnly list items (lines starting with *) are considered.\nThe first link on a line must be a link to a bad file.\nAny subsequent links on the same line are considered to be exceptions, i.e. pages where the file may occur inline.",
+       "variantname-zh-hans": "hans",
+       "variantname-zh-hant": "hant",
+       "variantname-zh-cn": "cn",
+       "variantname-zh-tw": "tw",
+       "variantname-zh-hk": "hk",
+       "variantname-zh-mo": "mo",
+       "variantname-zh-sg": "sg",
+       "variantname-zh-my": "my",
+       "variantname-zh": "zh",
+       "variantname-gan-hans": "hans",
+       "variantname-gan-hant": "hant",
+       "variantname-gan": "gan",
+       "variantname-sr-ec": "sr-ec",
+       "variantname-sr-el": "sr-el",
+       "variantname-sr": "sr",
+       "variantname-kk-kz": "kk-kz",
+       "variantname-kk-tr": "kk-tr",
+       "variantname-kk-cn": "kk-cn",
+       "variantname-kk-cyrl": "kk-cyrl",
+       "variantname-kk-latn": "kk-latn",
+       "variantname-kk-arab": "kk-arab",
+       "variantname-kk": "kk",
+       "variantname-ku-arab": "ku-Arab",
+       "variantname-ku-latn": "ku-Latn",
+       "variantname-ku": "ku",
+       "variantname-tg-cyrl": "tg-Cyrl",
+       "variantname-tg-latn": "tg-Latn",
+       "variantname-tg": "tg",
+       "variantname-ike-cans": "ike-Cans",
+       "variantname-ike-latn": "ike-Latn",
+       "variantname-iu": "iu",
+       "variantname-shi-tfng": "shi-Tfng",
+       "variantname-shi-latn": "shi-Latn",
+       "variantname-shi": "shi",
+       "variantname-uz": "uz",
+       "variantname-uz-latn": "uz-Latn",
+       "variantname-uz-cyrl": "uz-Cyrl",
+       "metadata": "Metadata",
+       "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
+       "metadata-expand": "Show extended details",
+       "metadata-collapse": "Hide extended details",
+       "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-langitem": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
+       "exif-imagewidth": "Width",
+       "exif-imagelength": "Height",
+       "exif-bitspersample": "Bits per component",
+       "exif-compression": "Compression scheme",
+       "exif-photometricinterpretation": "Pixel composition",
+       "exif-orientation": "Orientation",
+       "exif-samplesperpixel": "Number of components",
+       "exif-planarconfiguration": "Data arrangement",
+       "exif-ycbcrsubsampling": "Subsampling ratio of Y to C",
+       "exif-ycbcrpositioning": "Y and C positioning",
+       "exif-xresolution": "Horizontal resolution",
+       "exif-yresolution": "Vertical resolution",
+       "exif-stripoffsets": "Image data location",
+       "exif-rowsperstrip": "Number of rows per strip",
+       "exif-stripbytecounts": "Bytes per compressed strip",
+       "exif-jpeginterchangeformat": "Offset to JPEG SOI",
+       "exif-jpeginterchangeformatlength": "Bytes of JPEG data",
+       "exif-whitepoint": "White point chromaticity",
+       "exif-primarychromaticities": "Chromaticities of primarities",
+       "exif-ycbcrcoefficients": "Color space transformation matrix coefficients",
+       "exif-referenceblackwhite": "Pair of black and white reference values",
+       "exif-datetime": "File change date and time",
+       "exif-imagedescription": "Image title",
+       "exif-make": "Camera manufacturer",
+       "exif-model": "Camera model",
+       "exif-software": "Software used",
+       "exif-artist": "Author",
+       "exif-copyright": "Copyright holder",
+       "exif-exifversion": "Exif version",
+       "exif-flashpixversion": "Supported Flashpix version",
+       "exif-colorspace": "Color space",
+       "exif-componentsconfiguration": "Meaning of each component",
+       "exif-compressedbitsperpixel": "Image compression mode",
+       "exif-pixelydimension": "Image width",
+       "exif-pixelxdimension": "Image height",
+       "exif-usercomment": "User comments",
+       "exif-relatedsoundfile": "Related audio file",
+       "exif-datetimeoriginal": "Date and time of data generation",
+       "exif-datetimedigitized": "Date and time of digitizing",
+       "exif-subsectime": "DateTime subseconds",
+       "exif-subsectimeoriginal": "DateTimeOriginal subseconds",
+       "exif-subsectimedigitized": "DateTimeDigitized subseconds",
+       "exif-exposuretime": "Exposure time",
+       "exif-exposuretime-format": "$1 sec ($2)",
+       "exif-fnumber": "F Number",
+       "exif-fnumber-format": "f/$1",
+       "exif-exposureprogram": "Exposure Program",
+       "exif-spectralsensitivity": "Spectral sensitivity",
+       "exif-isospeedratings": "ISO speed rating",
+       "exif-shutterspeedvalue": "APEX shutter speed",
+       "exif-aperturevalue": "APEX aperture",
+       "exif-brightnessvalue": "APEX brightness",
+       "exif-exposurebiasvalue": "APEX exposure bias",
+       "exif-maxaperturevalue": "Maximum land aperture",
+       "exif-subjectdistance": "Subject distance",
+       "exif-meteringmode": "Metering mode",
+       "exif-lightsource": "Light source",
+       "exif-flash": "Flash",
+       "exif-focallength": "Lens focal length",
+       "exif-focallength-format": "$1 mm",
+       "exif-subjectarea": "Subject area",
+       "exif-flashenergy": "Flash energy",
+       "exif-focalplanexresolution": "Focal plane X resolution",
+       "exif-focalplaneyresolution": "Focal plane Y resolution",
+       "exif-focalplaneresolutionunit": "Focal plane resolution unit",
+       "exif-subjectlocation": "Subject location",
+       "exif-exposureindex": "Exposure index",
+       "exif-sensingmethod": "Sensing method",
+       "exif-filesource": "File source",
+       "exif-scenetype": "Scene type",
+       "exif-customrendered": "Custom image processing",
+       "exif-exposuremode": "Exposure mode",
+       "exif-whitebalance": "White balance",
+       "exif-digitalzoomratio": "Digital zoom ratio",
+       "exif-focallengthin35mmfilm": "Focal length in 35 mm film",
+       "exif-scenecapturetype": "Scene capture type",
+       "exif-gaincontrol": "Scene control",
+       "exif-contrast": "Contrast",
+       "exif-saturation": "Saturation",
+       "exif-sharpness": "Sharpness",
+       "exif-devicesettingdescription": "Device settings description",
+       "exif-subjectdistancerange": "Subject distance range",
+       "exif-imageuniqueid": "Unique image ID",
+       "exif-gpsversionid": "GPS tag version",
+       "exif-gpslatituderef": "North or south latitude",
+       "exif-gpslatitude": "Latitude",
+       "exif-gpslongituderef": "East or west longitude",
+       "exif-gpslongitude": "Longitude",
+       "exif-gpsaltituderef": "Altitude reference",
+       "exif-gpsaltitude": "Altitude",
+       "exif-gpstimestamp": "GPS time (atomic clock)",
+       "exif-gpssatellites": "Satellites used for measurement",
+       "exif-gpsstatus": "Receiver status",
+       "exif-gpsmeasuremode": "Measurement mode",
+       "exif-gpsdop": "Measurement precision",
+       "exif-gpsspeedref": "Speed unit",
+       "exif-gpsspeed": "Speed of GPS receiver",
+       "exif-gpstrackref": "Reference for direction of movement",
+       "exif-gpstrack": "Direction of movement",
+       "exif-gpsimgdirectionref": "Reference for direction of image",
+       "exif-gpsimgdirection": "Direction of image",
+       "exif-gpsmapdatum": "Geodetic survey data used",
+       "exif-gpsdestlatituderef": "Reference for latitude of destination",
+       "exif-gpsdestlatitude": "Latitude destination",
+       "exif-gpsdestlongituderef": "Reference for longitude of destination",
+       "exif-gpsdestlongitude": "Longitude of destination",
+       "exif-gpsdestbearingref": "Reference for bearing of destination",
+       "exif-gpsdestbearing": "Bearing of destination",
+       "exif-gpsdestdistanceref": "Reference for distance to destination",
+       "exif-gpsdestdistance": "Distance to destination",
+       "exif-gpsprocessingmethod": "Name of GPS processing method",
+       "exif-gpsareainformation": "Name of GPS area",
+       "exif-gpsdatestamp": "GPS date",
+       "exif-gpsdifferential": "GPS differential correction",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
+       "exif-jpegfilecomment": "JPEG file comment",
+       "exif-keywords": "Keywords",
+       "exif-worldregioncreated": "World region that the picture was taken in",
+       "exif-countrycreated": "Country that the picture was taken in",
+       "exif-countrycodecreated": "Code for the country that the picture was taken in",
+       "exif-provinceorstatecreated": "Province or state that the picture was taken in",
+       "exif-citycreated": "City that the picture was taken in",
+       "exif-sublocationcreated": "Sublocation of the city that the picture was taken in",
+       "exif-worldregiondest": "World region shown",
+       "exif-countrydest": "Country shown",
+       "exif-countrycodedest": "Code for country shown",
+       "exif-provinceorstatedest": "Province or state shown",
+       "exif-citydest": "City shown",
+       "exif-sublocationdest": "Sublocation of city shown",
+       "exif-objectname": "Short title",
+       "exif-specialinstructions": "Special instructions",
+       "exif-headline": "Headline",
+       "exif-credit": "Credit/Provider",
+       "exif-source": "Source",
+       "exif-editstatus": "Editorial status of image",
+       "exif-urgency": "Urgency",
+       "exif-fixtureidentifier": "Fixture name",
+       "exif-locationdest": "Location depicted",
+       "exif-locationdestcode": "Code of location depicted",
+       "exif-objectcycle": "Time of day that media is intended for",
+       "exif-contact": "Contact information",
+       "exif-writer": "Writer",
+       "exif-languagecode": "Language",
+       "exif-iimversion": "IIM version",
+       "exif-iimcategory": "Category",
+       "exif-iimsupplementalcategory": "Supplemental categories",
+       "exif-datetimeexpires": "Do not use after",
+       "exif-datetimereleased": "Released on",
+       "exif-originaltransmissionref": "Original transmission location code",
+       "exif-identifier": "Identifier",
+       "exif-lens": "Lens used",
+       "exif-serialnumber": "Serial number of camera",
+       "exif-cameraownername": "Owner of camera",
+       "exif-label": "Label",
+       "exif-datetimemetadata": "Date metadata was last modified",
+       "exif-nickname": "Informal name of image",
+       "exif-rating": "Rating (out of 5)",
+       "exif-rightscertificate": "Rights management certificate",
+       "exif-copyrighted": "Copyright status",
+       "exif-copyrightowner": "Copyright owner",
+       "exif-usageterms": "Usage terms",
+       "exif-webstatement": "Online copyright statement",
+       "exif-originaldocumentid": "Unique ID of original document",
+       "exif-licenseurl": "URL for copyright license",
+       "exif-morepermissionsurl": "Alternative licensing information",
+       "exif-attributionurl": "When re-using this work, please link to",
+       "exif-preferredattributionname": "When re-using this work, please credit",
+       "exif-pngfilecomment": "PNG file comment",
+       "exif-disclaimer": "Disclaimer",
+       "exif-contentwarning": "Content warning",
+       "exif-giffilecomment": "GIF file comment",
+       "exif-intellectualgenre": "Type of item",
+       "exif-subjectnewscode": "Subject code",
+       "exif-scenecode": "IPTC scene code",
+       "exif-event": "Event depicted",
+       "exif-organisationinimage": "Organization depicted",
+       "exif-personinimage": "Person depicted",
+       "exif-originalimageheight": "Height of image before it was cropped",
+       "exif-originalimagewidth": "Width of image before it was cropped",
+       "exif-make-value": "$1",
+       "exif-model-value": "$1",
+       "exif-software-value": "$1",
+       "exif-software-version-value": "$1 (Version $2)",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-subjectnewscode-value": "$2 ($1)",
+       "exif-compression-1": "Uncompressed",
+       "exif-compression-2": "CCITT Group 3 1-Dimensional Modified Huffman run length encoding",
+       "exif-compression-3": "CCITT Group 3 fax encoding",
+       "exif-compression-4": "CCITT Group 4 fax encoding",
+       "exif-compression-5": "LZW",
+       "exif-compression-6": "JPEG (old)",
+       "exif-compression-7": "JPEG",
+       "exif-compression-8": "Deflate (Adobe)",
+       "exif-compression-32773": "PackBits (Macintosh RLE)",
+       "exif-compression-32946": "Deflate (PKZIP)",
+       "exif-compression-34712": "JPEG2000",
+       "exif-copyrighted-true": "Copyrighted",
+       "exif-copyrighted-false": "Copyright status not set",
+       "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-6": "YCbCr",
+       "exif-unknowndate": "Unknown date",
+       "exif-orientation-1": "Normal",
+       "exif-orientation-2": "Flipped horizontally",
+       "exif-orientation-3": "Rotated 180°",
+       "exif-orientation-4": "Flipped vertically",
+       "exif-orientation-5": "Rotated 90° CCW and flipped vertically",
+       "exif-orientation-6": "Rotated 90° CCW",
+       "exif-orientation-7": "Rotated 90° CW and flipped vertically",
+       "exif-orientation-8": "Rotated 90° CW",
+       "exif-planarconfiguration-1": "chunky format",
+       "exif-planarconfiguration-2": "planar format",
+       "exif-xyresolution-i": "$1 dpi",
+       "exif-xyresolution-c": "$1 dpc",
+       "exif-colorspace-1": "sRGB",
+       "exif-colorspace-65535": "Uncalibrated",
+       "exif-componentsconfiguration-0": "does not exist",
+       "exif-componentsconfiguration-1": "Y",
+       "exif-componentsconfiguration-2": "Cb",
+       "exif-componentsconfiguration-3": "Cr",
+       "exif-componentsconfiguration-4": "R",
+       "exif-componentsconfiguration-5": "G",
+       "exif-componentsconfiguration-6": "B",
+       "exif-exposureprogram-0": "Not defined",
+       "exif-exposureprogram-1": "Manual",
+       "exif-exposureprogram-2": "Normal program",
+       "exif-exposureprogram-3": "Aperture priority",
+       "exif-exposureprogram-4": "Shutter priority",
+       "exif-exposureprogram-5": "Creative program (biased toward depth of field)",
+       "exif-exposureprogram-6": "Action program (biased toward fast shutter speed)",
+       "exif-exposureprogram-7": "Portrait mode (for closeup photos with the background out of focus)",
+       "exif-exposureprogram-8": "Landscape mode (for landscape photos with the background in focus)",
+       "exif-subjectdistance-value": "$1 meters",
+       "exif-meteringmode-0": "Unknown",
+       "exif-meteringmode-1": "Average",
+       "exif-meteringmode-2": "Center weighted average",
+       "exif-meteringmode-3": "Spot",
+       "exif-meteringmode-4": "Multi-Spot",
+       "exif-meteringmode-5": "Pattern",
+       "exif-meteringmode-6": "Partial",
+       "exif-meteringmode-255": "Other",
+       "exif-lightsource-0": "Unknown",
+       "exif-lightsource-1": "Daylight",
+       "exif-lightsource-2": "Fluorescent",
+       "exif-lightsource-3": "Tungsten (incandescent light)",
+       "exif-lightsource-4": "Flash",
+       "exif-lightsource-9": "Fine weather",
+       "exif-lightsource-10": "Cloudy weather",
+       "exif-lightsource-11": "Shade",
+       "exif-lightsource-12": "Daylight fluorescent (D 5700 – 7100K)",
+       "exif-lightsource-13": "Day white fluorescent (N 4600 – 5400K)",
+       "exif-lightsource-14": "Cool white fluorescent (W 3900 – 4500K)",
+       "exif-lightsource-15": "White fluorescent (WW 3200 – 3700K)",
+       "exif-lightsource-17": "Standard light A",
+       "exif-lightsource-18": "Standard light B",
+       "exif-lightsource-19": "Standard light C",
+       "exif-lightsource-20": "D55",
+       "exif-lightsource-21": "D65",
+       "exif-lightsource-22": "D75",
+       "exif-lightsource-23": "D50",
+       "exif-lightsource-24": "ISO studio tungsten",
+       "exif-lightsource-255": "Other light source",
+       "exif-flash-fired-0": "Flash did not fire",
+       "exif-flash-fired-1": "Flash fired",
+       "exif-flash-return-0": "no strobe return detection function",
+       "exif-flash-return-2": "strobe return light not detected",
+       "exif-flash-return-3": "strobe return light detected",
+       "exif-flash-mode-1": "compulsory flash firing",
+       "exif-flash-mode-2": "compulsory flash suppression",
+       "exif-flash-mode-3": "auto mode",
+       "exif-flash-function-1": "No flash function",
+       "exif-flash-redeye-1": "red-eye reduction mode",
+       "exif-focalplaneresolutionunit-2": "inches",
+       "exif-sensingmethod-1": "Undefined",
+       "exif-sensingmethod-2": "One-chip color area sensor",
+       "exif-sensingmethod-3": "Two-chip color area sensor",
+       "exif-sensingmethod-4": "Three-chip color area sensor",
+       "exif-sensingmethod-5": "Color sequential area sensor",
+       "exif-sensingmethod-7": "Trilinear sensor",
+       "exif-sensingmethod-8": "Color sequential linear sensor",
+       "exif-filesource-3": "Digital still camera",
+       "exif-scenetype-1": "A directly photographed image",
+       "exif-customrendered-0": "Normal process",
+       "exif-customrendered-1": "Custom process",
+       "exif-exposuremode-0": "Auto exposure",
+       "exif-exposuremode-1": "Manual exposure",
+       "exif-exposuremode-2": "Auto bracket",
+       "exif-whitebalance-0": "Auto white balance",
+       "exif-whitebalance-1": "Manual white balance",
+       "exif-scenecapturetype-0": "Standard",
+       "exif-scenecapturetype-1": "Landscape",
+       "exif-scenecapturetype-2": "Portrait",
+       "exif-scenecapturetype-3": "Night scene",
+       "exif-gaincontrol-0": "None",
+       "exif-gaincontrol-1": "Low gain up",
+       "exif-gaincontrol-2": "High gain up",
+       "exif-gaincontrol-3": "Low gain down",
+       "exif-gaincontrol-4": "High gain down",
+       "exif-contrast-0": "Normal",
+       "exif-contrast-1": "Soft",
+       "exif-contrast-2": "Hard",
+       "exif-saturation-0": "Normal",
+       "exif-saturation-1": "Low saturation",
+       "exif-saturation-2": "High saturation",
+       "exif-sharpness-0": "Normal",
+       "exif-sharpness-1": "Soft",
+       "exif-sharpness-2": "Hard",
+       "exif-subjectdistancerange-0": "Unknown",
+       "exif-subjectdistancerange-1": "Macro",
+       "exif-subjectdistancerange-2": "Close view",
+       "exif-subjectdistancerange-3": "Distant view",
+       "exif-gpslatitude-n": "North latitude",
+       "exif-gpslatitude-s": "South latitude",
+       "exif-gpslongitude-e": "East longitude",
+       "exif-gpslongitude-w": "West longitude",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|meter|meters}} above sea level",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|meter|meters}} below sea level",
+       "exif-gpsstatus-a": "Measurement in progress",
+       "exif-gpsstatus-v": "Measurement interoperability",
+       "exif-gpsmeasuremode-2": "2-dimensional measurement",
+       "exif-gpsmeasuremode-3": "3-dimensional measurement",
+       "exif-gpsspeed-k": "Kilometers per hour",
+       "exif-gpsspeed-m": "Miles per hour",
+       "exif-gpsspeed-n": "Knots",
+       "exif-gpsdestdistance-k": "Kilometers",
+       "exif-gpsdestdistance-m": "Miles",
+       "exif-gpsdestdistance-n": "Nautical miles",
+       "exif-gpsdop-excellent": "Excellent ($1)",
+       "exif-gpsdop-good": "Good ($1)",
+       "exif-gpsdop-moderate": "Moderate ($1)",
+       "exif-gpsdop-fair": "Fair ($1)",
+       "exif-gpsdop-poor": "Poor ($1)",
+       "exif-objectcycle-a": "Morning only",
+       "exif-objectcycle-p": "Evening only",
+       "exif-objectcycle-b": "Both morning and evening",
+       "exif-gpsdirection-t": "True direction",
+       "exif-gpsdirection-m": "Magnetic direction",
+       "exif-ycbcrpositioning-1": "Centered",
+       "exif-ycbcrpositioning-2": "Co-sited",
+       "exif-dc-contributor": "Contributors",
+       "exif-dc-coverage": "Spatial or temporal scope of media",
+       "exif-dc-date": "Date(s)",
+       "exif-dc-publisher": "Publisher",
+       "exif-dc-relation": "Related media",
+       "exif-dc-rights": "Rights",
+       "exif-dc-source": "Source media",
+       "exif-dc-type": "Type of media",
+       "exif-rating-rejected": "Rejected",
+       "exif-isospeedratings-overflow": "Greater than 65535",
+       "exif-maxaperturevalue-value": "$1 APEX (f/$2)",
+       "exif-iimcategory-ace": "Arts, culture and entertainment",
+       "exif-iimcategory-clj": "Crime and law",
+       "exif-iimcategory-dis": "Disasters and accidents",
+       "exif-iimcategory-fin": "Economy and business",
+       "exif-iimcategory-edu": "Education",
+       "exif-iimcategory-evn": "Environment",
+       "exif-iimcategory-hth": "Health",
+       "exif-iimcategory-hum": "Human interest",
+       "exif-iimcategory-lab": "Labor",
+       "exif-iimcategory-lif": "Lifestyle and leisure",
+       "exif-iimcategory-pol": "Politics",
+       "exif-iimcategory-rel": "Religion and belief",
+       "exif-iimcategory-sci": "Science and technology",
+       "exif-iimcategory-soi": "Social issues",
+       "exif-iimcategory-spo": "Sports",
+       "exif-iimcategory-war": "War, conflict and unrest",
+       "exif-iimcategory-wea": "Weather",
+       "exif-urgency-normal": "Normal ($1)",
+       "exif-urgency-low": "Low ($1)",
+       "exif-urgency-high": "High ($1)",
+       "exif-urgency-other": "User-defined priority ($1)",
+       "watchlistall2": "all",
+       "namespacesall": "all",
+       "monthsall": "all",
+       "confirmemail": "Confirm email address",
+       "confirmemail_noemail": "You do not have a valid email address set in your [[Special:Preferences|user preferences]].",
+       "confirmemail_text": "{{SITENAME}} requires that you validate your email address before using email features.\nActivate the button below to send a confirmation mail to your address.\nThe mail will include a link containing a code;\nload the link in your browser to confirm that your email address is valid.",
+       "confirmemail_pending": "A confirmation code has already been emailed to you;\nif you recently created your account, you may wish to wait a few minutes for it to arrive before trying to request a new code.",
+       "confirmemail_send": "Mail a confirmation code",
+       "confirmemail_sent": "Confirmation email sent.",
+       "confirmemail_oncreate": "A confirmation code was sent to your email address.\nThis code is not required to log in, but you will need to provide it before enabling any email-based features in the wiki.",
+       "confirmemail_sendfailed": "{{SITENAME}} could not send your confirmation mail.\nPlease check your email address for invalid characters.\n\nMailer returned: $1",
+       "confirmemail_invalid": "Invalid confirmation code.\nThe code may have expired.",
+       "confirmemail_needlogin": "Please $1 to confirm your email address.",
+       "confirmemail_success": "Your email address has been confirmed.\nYou may now [[Special:UserLogin|log in]] and enjoy the wiki.",
+       "confirmemail_loggedin": "Your email address has now been confirmed.",
+       "confirmemail_subject": "{{SITENAME}} email address confirmation",
+       "confirmemail_body": "Someone, probably you, from IP address $1,\nhas registered an account \"$2\" with this email address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and activate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf you did *not* register the account, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.",
+       "confirmemail_body_changed": "Someone, probably you, from IP address $1,\nhas changed the email address of the account \"$2\" to this address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and reactivate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf the account does *not* belong to you, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.",
+       "confirmemail_body_set": "Someone, probably you, from IP address $1,\nhas set the email address of the account \"$2\" to this address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and activate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf the account does *not* belong to you, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.",
+       "confirmemail_invalidated": "Email address confirmation canceled",
+       "invalidateemail": "Cancel email confirmation",
+       "scarytranscludedisabled": "[Interwiki transcluding is disabled]",
+       "scarytranscludefailed": "[Template fetch failed for $1]",
+       "scarytranscludefailed-httpstatus": "[Template fetch failed for $1: HTTP $2]",
+       "scarytranscludetoolong": "[URL is too long]",
+       "deletedwhileediting": "<strong>Warning:</strong> This page was deleted after you started editing!",
+       "confirmrecreate": "User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing with reason:\n: <em>$2</em>\nPlease confirm that you really want to recreate this page.",
+       "confirmrecreate-noreason": "User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing. Please confirm that you really want to recreate this page.",
+       "recreate": "Recreate",
+       "unit-pixel": "px",
+       "confirm_purge_button": "OK",
+       "confirm-purge-top": "Clear the cache of this page?",
+       "confirm-purge-bottom": "Purging a page clears the cache and forces the most current revision to appear.",
+       "confirm-watch-button": "OK",
+       "confirm-watch-top": "Add this page to your watchlist?",
+       "confirm-unwatch-button": "OK",
+       "confirm-unwatch-top": "Remove this page from your watchlist?",
+       "semicolon-separator": ";&#32;",
+       "comma-separator": ",&#32;",
+       "colon-separator": ":&#32;",
+       "autocomment-prefix": "",
+       "pipe-separator": "&#32;|&#32;",
+       "word-separator": "&#32;",
+       "ellipsis": "...",
+       "percent": "$1%",
+       "parentheses": "($1)",
+       "brackets": "[$1]",
+       "quotation-marks": "\"$1\"",
+       "imgmultipageprev": "← previous page",
+       "imgmultipagenext": "next page →",
+       "imgmultigo": "Go!",
+       "imgmultigoto": "Go to page $1",
+       "img-lang-opt": "$2 ($1)",
+       "img-lang-default": "(default language)",
+       "img-lang-info": "Render this image in $1. $2",
+       "img-lang-go": "Go",
+       "ascending_abbrev": "asc",
+       "descending_abbrev": "desc",
+       "table_pager_next": "Next page",
+       "table_pager_prev": "Previous page",
+       "table_pager_first": "First page",
+       "table_pager_last": "Last page",
+       "table_pager_limit": "Show $1 items per page",
+       "table_pager_limit_label": "Items per page:",
+       "table_pager_limit_submit": "Go",
+       "table_pager_empty": "No results",
+       "autosumm-blank": "Blanked the page",
+       "autosumm-replace": "Replaced content with \"$1\"",
+       "autoredircomment": "Redirected page to [[$1]]",
+       "autosumm-new": "Created page with \"$1\"",
+       "autoblock_whitelist": "AOL http://webmaster.info.aol.com/proxyinfo.html\n*64.12.96.0/19\n*149.174.160.0/20\n*152.163.240.0/21\n*152.163.248.0/22\n*152.163.252.0/23\n*152.163.96.0/22\n*152.163.100.0/23\n*195.93.32.0/22\n*195.93.48.0/22\n*195.93.64.0/19\n*195.93.96.0/19\n*195.93.16.0/20\n*198.81.0.0/22\n*198.81.16.0/20\n*198.81.8.0/23\n*202.67.64.128/25\n*205.188.192.0/20\n*205.188.208.0/23\n*205.188.112.0/20\n*205.188.146.144/30\n*207.200.112.0/21",
+       "size-bytes": "$1 B",
+       "size-kilobytes": "$1 KB",
+       "size-megabytes": "$1 MB",
+       "size-gigabytes": "$1 GB",
+       "size-terabytes": "$1 TB",
+       "size-petabytes": "$1 PB",
+       "size-exabytes": "$1 EB",
+       "size-zetabytes": "$1 ZB",
+       "size-yottabytes": "$1 YB",
+       "bitrate-bits": "$1 bps",
+       "bitrate-kilobits": "$1 kbps",
+       "bitrate-megabits": "$1 Mbps",
+       "bitrate-gigabits": "$1 Gbps",
+       "bitrate-terabits": "$1 Tbps",
+       "bitrate-petabits": "$1 Pbps",
+       "bitrate-exabits": "$1 Ebps",
+       "bitrate-zetabits": "$1 Zbps",
+       "bitrate-yottabits": "$1 Ybps",
+       "lag-warn-normal": "Changes newer than $1 {{PLURAL:$1|second|seconds}} may not be shown in this list.",
+       "lag-warn-high": "Due to high database server lag, changes newer than $1 {{PLURAL:$1|second|seconds}} may not be shown in this list.",
+       "editwatchlist-summary": "",
+       "watchlistedit-normal-title": "Edit watchlist",
+       "watchlistedit-normal-legend": "Remove titles from watchlist",
+       "watchlistedit-normal-explain": "Titles on your watchlist are shown below.\nTo remove a title, check the box next to it, and click \"{{int:Watchlistedit-normal-submit}}\".\nYou can also [[Special:EditWatchlist/raw|edit the raw list]].",
+       "watchlistedit-normal-submit": "Remove titles",
+       "watchlistedit-normal-done": "{{PLURAL:$1|1 title was|$1 titles were}} removed from your watchlist:",
+       "watchlistedit-raw-title": "Edit raw watchlist",
+        "watchlistedit-raw-legend": "Edit raw watchlist",
+       "watchlistedit-raw-explain": "Titles on your watchlist are shown below, and can be edited by adding to and removing from the list;\none title per line.\nWhen finished, click \"{{int:Watchlistedit-raw-submit}}\".\nYou can also [[Special:EditWatchlist|use the standard editor]].",
+        "watchlistedit-raw-titles": "Titles:",
+        "watchlistedit-raw-submit": "Update watchlist",
+        "watchlistedit-raw-done": "Your watchlist has been updated.",
+        "watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 titles were}} added:",
+        "watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:",
+       "watchlistedit-clear-title": "Cleared watchlist",
+       "watchlistedit-clear-legend": "Clear watchlist",
+       "watchlistedit-clear-explain": "All of the titles will be removed from your watchlist",
+       "watchlistedit-clear-titles": "Titles:",
+       "watchlistedit-clear-submit": "Clear the watchlist (This is permanent!)",
+       "watchlistedit-clear-done": "Your watchlist has been cleared.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:",
+       "watchlistedit-too-many": "There are too many pages to display here.",
+       "watchlisttools-clear": "Clear the watchlist",
+       "watchlisttools-view": "View relevant changes",
+       "watchlisttools-edit": "View and edit watchlist",
+       "watchlisttools-raw": "Edit raw watchlist",
+       "iranian-calendar-m1": "Farvardin",
+       "iranian-calendar-m2": "Ordibehesht",
+       "iranian-calendar-m3": "Khordad",
+       "iranian-calendar-m4": "Tir",
+       "iranian-calendar-m5": "Mordad",
+       "iranian-calendar-m6": "Shahrivar",
+       "iranian-calendar-m7": "Mehr",
+       "iranian-calendar-m8": "Aban",
+       "iranian-calendar-m9": "Azar",
+       "iranian-calendar-m10": "Dey",
+       "iranian-calendar-m11": "Bahman",
+       "iranian-calendar-m12": "Esfand",
+       "hijri-calendar-m1": "Muharram",
+       "hijri-calendar-m2": "Safar",
+       "hijri-calendar-m3": "Rabi' al-awwal",
+       "hijri-calendar-m4": "Rabi' al-thani",
+       "hijri-calendar-m5": "Jumada al-awwal",
+       "hijri-calendar-m6": "Jumada al-thani",
+       "hijri-calendar-m7": "Rajab",
+       "hijri-calendar-m8": "Sha'aban",
+       "hijri-calendar-m9": "Ramadan",
+       "hijri-calendar-m10": "Shawwal",
+       "hijri-calendar-m11": "Dhu al-Qi'dah",
+       "hijri-calendar-m12": "Dhu al-Hijjah",
+       "hebrew-calendar-m1": "Tishrei",
+       "hebrew-calendar-m2": "Cheshvan",
+       "hebrew-calendar-m3": "Kislev",
+       "hebrew-calendar-m4": "Tevet",
+       "hebrew-calendar-m5": "Shevat",
+       "hebrew-calendar-m6": "Adar",
+       "hebrew-calendar-m6a": "Adar I",
+       "hebrew-calendar-m6b": "Adar II",
+       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m8": "Iyar",
+       "hebrew-calendar-m9": "Sivan",
+       "hebrew-calendar-m10": "Tamuz",
+       "hebrew-calendar-m11": "Av",
+       "hebrew-calendar-m12": "Elul",
+       "hebrew-calendar-m1-gen": "Tishrei",
+       "hebrew-calendar-m2-gen": "Cheshvan",
+       "hebrew-calendar-m3-gen": "Kislev",
+       "hebrew-calendar-m4-gen": "Tevet",
+       "hebrew-calendar-m5-gen": "Shevat",
+       "hebrew-calendar-m6-gen": "Adar",
+       "hebrew-calendar-m6a-gen": "Adar I",
+       "hebrew-calendar-m6b-gen": "Adar II",
+       "hebrew-calendar-m7-gen": "Nisan",
+       "hebrew-calendar-m8-gen": "Iyar",
+       "hebrew-calendar-m9-gen": "Sivan",
+       "hebrew-calendar-m10-gen": "Tamuz",
+       "hebrew-calendar-m11-gen": "Av",
+       "hebrew-calendar-m12-gen": "Elul",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
+       "signature-anon": "[[{{#special:Contributions}}/$1|$2]]",
+       "timezone-utc": "UTC",
+       "unknown_extension_tag": "Unknown extension tag \"$1\"",
+       "duplicate-defaultsort": "<strong>Warning:</strong> Default sort key \"$2\" overrides earlier default sort key \"$1\".",
+       "version": "Version",
+       "version-summary": "",
+       "version-extensions": "Installed extensions",
+       "version-specialpages": "Special pages",
+       "version-parserhooks": "Parser hooks",
+       "version-variables": "Variables",
+       "version-antispam": "Spam prevention",
+       "version-skins": "Skins",
+       "version-api": "API",
+       "version-other": "Other",
+       "version-mediahandlers": "Media handlers",
+       "version-hooks": "Hooks",
+       "version-parser-extensiontags": "Parser extension tags",
+       "version-parser-function-hooks": "Parser function hooks",
+       "version-hook-name": "Hook name",
+       "version-hook-subscribedby": "Subscribed by",
+       "version-version": "($1)",
+       "version-svn-revision": "r$1",
+       "version-license": "MediaWiki License",
+       "version-ext-license": "License",
+       "version-ext-colheader-name": "Extension",
+       "version-ext-colheader-version": "Version",
+       "version-ext-colheader-license": "License",
+       "version-ext-colheader-description": "Description",
+       "version-ext-colheader-credits": "Authors",
+       "version-license-title": "License for $1",
+       "version-license-not-found": "No detailed license information was found for this extension.",
+       "version-credits-title": "Credits for $1",
+       "version-credits-not-found": "No detailed credits information was found for this extension.",
+       "version-poweredby-credits": "This wiki is powered by <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
+       "version-poweredby-others": "others",
+       "version-poweredby-translators": "translatewiki.net translators",
+       "version-credits-summary": "We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].",
+       "version-license-info": "MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nMediaWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING 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 or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
+       "version-software": "Installed software",
+       "version-software-product": "Product",
+       "version-software-version": "Version",
+       "version-db-mysql-url": "http://www.mysql.com/",
+       "version-db-mariadb-url": "http://mariadb.org/",
+       "version-db-percona-url": "http://www.percona.com/software/percona-server",
+       "version-db-postgres-url": "http://www.postgresql.org/",
+       "version-db-oracle-url": "http://www.oracle.com/database/",
+       "version-db-sqlite-url": "http://www.sqlite.org/",
+       "version-db-mssql-url": "http://www.microsoft.com/sql/",
+       "version-entrypoints": "Entry point URLs",
+       "version-entrypoints-header-entrypoint": "Entry point",
+       "version-entrypoints-header-url": "URL",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]",
+       "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]",
+       "version-entrypoints-index-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:index.php index.php]",
+       "version-entrypoints-api-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:api.php api.php]",
+       "version-entrypoints-load-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:load.php load.php]",
+       "redirect": "Redirect by file, user, page or revision ID",
+       "redirect-legend": "Redirect to a file or page",
+       "redirect-text": "",
+       "redirect-summary": "This special page redirects to a file (given the file name), a page (given a revision ID or page ID), or a user page (given a numeric user ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
+       "redirect-submit": "Go",
+       "redirect-lookup": "Lookup:",
+       "redirect-value": "Value:",
+       "redirect-user": "User ID",
+       "redirect-page": "Page ID",
+       "redirect-revision": "Page revision",
+       "redirect-file": "File name",
+       "redirect-not-exists": "Value not found",
+       "fileduplicatesearch": "Search for duplicate files",
+       "fileduplicatesearch-summary": "Search for duplicate files based on hash values.",
+       "fileduplicatesearch-legend": "Search for a duplicate",
+       "fileduplicatesearch-filename": "Filename:",
+       "fileduplicatesearch-submit": "Search",
+       "fileduplicatesearch-info": "$1 × $2 pixel<br />File size: $3<br />MIME type: $4",
+       "fileduplicatesearch-result-1": "The file \"$1\" has no identical duplication.",
+       "fileduplicatesearch-result-n": "The file \"$1\" has {{PLURAL:$2|1 identical duplication|$2 identical duplications}}.",
+       "fileduplicatesearch-noresults": "No file named \"$1\" found.",
+       "specialpages": "Special pages",
+       "specialpages-summary": "",
+       "specialpages-note-top": "Legend",
+       "specialpages-note": "* Normal special pages.\n* <span class=\"mw-specialpagerestricted\">Restricted special pages.</span>",
+       "specialpages-group-maintenance": "Maintenance reports",
+       "specialpages-group-other": "Other special pages",
+       "specialpages-group-login": "Login / create account",
+       "specialpages-group-changes": "Recent changes and logs",
+       "specialpages-group-media": "Media reports and uploads",
+       "specialpages-group-users": "Users and rights",
+       "specialpages-group-highuse": "High use pages",
+       "specialpages-group-pages": "Lists of pages",
+       "specialpages-group-pagetools": "Page tools",
+       "specialpages-group-wiki": "Data and tools",
+       "specialpages-group-redirects": "Redirecting special pages",
+       "specialpages-group-spam": "Spam tools",
+       "blankpage": "Blank page",
+       "intentionallyblankpage": "This page is intentionally left blank.",
+       "external_image_whitelist": " #Leave this line exactly as it is<pre>\n#Put regular expression fragments (just the part that goes between the //) below\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#Lines beginning with # are treated as comments\n#This is case-insensitive\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
+       "tags": "Valid change tags",
+       "tags-summary": "",
+       "tag-filter": "[[Special:Tags|Tag]] filter:",
+       "tag-filter-submit": "Filter",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tags-title": "Tags",
+       "tags-intro": "This page lists the tags that the software may mark an edit with, and their meaning.",
+       "tags-tag": "Tag name",
+       "tags-display-header": "Appearance on change lists",
+       "tags-description-header": "Full description of meaning",
+       "tags-active-header": "Active?",
+       "tags-hitcount-header": "Tagged changes",
+       "tags-active-yes": "Yes",
+       "tags-active-no": "No",
+       "tags-edit": "edit",
+       "tags-hitcount": "$1 {{PLURAL:$1|change|changes}}",
+       "comparepages": "Compare pages",
+       "comparepages-summary": "",
+       "compare-page1": "Page 1",
+       "compare-page2": "Page 2",
+       "compare-rev1": "Revision 1",
+       "compare-rev2": "Revision 2",
+       "compare-submit": "Compare",
+       "compare-invalid-title": "The title you specified is invalid.",
+       "compare-title-not-exists": "The title you specified does not exist.",
+       "compare-revision-not-exists": "The revision you specified does not exist.",
+       "dberr-problems": "Sorry! This site is experiencing technical difficulties.",
+       "dberr-again": "Try waiting a few minutes and reloading.",
+       "dberr-info": "(Cannot contact the database server: $1)",
+       "dberr-info-hidden": "(Cannot contact the database server)",
+       "dberr-usegoogle": "You can try searching via Google in the meantime.",
+       "dberr-outofdate": "Note that their indexes of our content may be out of date.",
+       "dberr-cachederror": "This is a cached copy of the requested page, and may not be up to date.",
+       "htmlform-invalid-input": "There are problems with some of your input.",
+       "htmlform-select-badoption": "The value you specified is not a valid option.",
+       "htmlform-int-invalid": "The value you specified is not an integer.",
+       "htmlform-float-invalid": "The value you specified is not a number.",
+       "htmlform-int-toolow": "The value you specified is below the minimum of $1.",
+       "htmlform-int-toohigh": "The value you specified is above the maximum of $1.",
+       "htmlform-required": "This value is required.",
+       "htmlform-submit": "Submit",
+       "htmlform-reset": "Undo changes",
+       "htmlform-selectorother-other": "Other",
+       "htmlform-no": "No",
+       "htmlform-yes": "Yes",
+       "htmlform-chosen-placeholder": "Select an option",
        "htmlform-cloner-create": "Add more",
        "htmlform-cloner-delete": "Remove",
        "htmlform-cloner-required": "At least one value is required.",
-    "sqlite-has-fts": "$1 with full-text search support",
-    "sqlite-no-fts": "$1 without full-text search support",
-    "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} page $3",
-    "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
-    "logentry-delete-event": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
-    "logentry-delete-revision": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4",
-    "logentry-delete-event-legacy": "$1 {{GENDER:$2|changed}} visibility of log events on $3",
-    "logentry-delete-revision-legacy": "$1 {{GENDER:$2|changed}} visibility of revisions on page $3",
-    "logentry-suppress-delete": "$1 {{GENDER:$2|suppressed}} page $3",
-    "logentry-suppress-event": "$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
-    "logentry-suppress-revision": "$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4",
-    "logentry-suppress-event-legacy": "$1 secretly {{GENDER:$2|changed}} visibility of log events on $3",
-    "logentry-suppress-revision-legacy": "$1 secretly {{GENDER:$2|changed}} visibility of revisions on page $3",
-    "revdelete-content-hid": "content hidden",
-    "revdelete-summary-hid": "edit summary hidden",
-    "revdelete-uname-hid": "username hidden",
-    "revdelete-content-unhid": "content unhidden",
-    "revdelete-summary-unhid": "edit summary unhidden",
-    "revdelete-uname-unhid": "username unhidden",
-    "revdelete-restricted": "applied restrictions to administrators",
-    "revdelete-unrestricted": "removed restrictions for administrators",
-    "logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
-    "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect",
-    "logentry-move-move_redir": "$1 {{GENDER:$2|moved}} page $3 to $4 over redirect",
-    "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 over a redirect without leaving a redirect",
-    "logentry-patrol-patrol": "$1 {{GENDER:$2|marked}} revision $4 of page $3 patrolled",
-    "logentry-patrol-patrol-auto": "$1 automatically {{GENDER:$2|marked}} revision $4 of page $3 patrolled",
-    "logentry-newusers-newusers": "User account $1 was {{GENDER:$2|created}}",
-    "logentry-newusers-create": "User account $1 was {{GENDER:$2|created}}",
-    "logentry-newusers-create2": "User account $3 was {{GENDER:$2|created}} by $1",
-    "logentry-newusers-byemail": "User account $3 was {{GENDER:$2|created}} by $1 and password was sent by email",
-    "logentry-newusers-autocreate": "User account $1 was {{GENDER:$2|created}} automatically",
-    "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for $3 from $4 to $5",
-    "logentry-rights-rights-legacy": "$1 {{GENDER:$2|changed}} group membership for $3",
-    "logentry-rights-autopromote": "$1 was automatically {{GENDER:$2|promoted}} from $4 to $5",
-    "rightsnone": "(none)",
-    "revdelete-logentry": "changed revision visibility of \"[[$1]]\"",
-    "logdelete-logentry": "changed event visibility of \"[[$1]]\"",
-    "revdelete-content": "content",
-    "revdelete-summary": "edit summary",
-    "revdelete-uname": "username",
-    "revdelete-hid": "hid $1",
-    "revdelete-unhid": "unhid $1",
-    "revdelete-log-message": "$1 for $2 {{PLURAL:$2|revision|revisions}}",
-    "logdelete-log-message": "$1 for $2 {{PLURAL:$2|event|events}}",
-    "deletedarticle": "deleted \"[[$1]]\"",
-    "suppressedarticle": "suppressed \"[[$1]]\"",
-    "undeletedarticle": "restored \"[[$1]]\"",
-    "patrol-log-line": "marked $1 of $2 patrolled $3",
-    "patrol-log-auto": "(automatic)",
-    "patrol-log-diff": "revision $1",
-    "1movedto2": "moved [[$1]] to [[$2]]",
-    "1movedto2_redir": "moved [[$1]] to [[$2]] over redirect",
-    "move-redirect-suppressed": "redirect suppressed",
-    "newuserlog-create-entry": "New user account",
-    "newuserlog-create2-entry": "created new account $1",
-    "newuserlog-autocreate-entry": "Account created automatically",
-    "rightslogentry": "changed group membership for $1 from $2 to $3",
-    "rightslogentry-autopromote": "was automatically promoted from $2 to $3",
-    "feedback-bugornote": "If you are ready to describe a technical problem in detail please [$1 report a bug].\nOtherwise, you can use the easy form below. Your comment will be added to the page \"[$3 $2]\", along with your username.",
-    "feedback-subject": "Subject:",
-    "feedback-message": "Message:",
-    "feedback-cancel": "Cancel",
-    "feedback-submit": "Submit Feedback",
-    "feedback-adding": "Adding feedback to page...",
-    "feedback-error1": "Error: Unrecognized result from API",
-    "feedback-error2": "Error: Edit failed",
-    "feedback-error3": "Error: No response from API",
-    "feedback-thanks": "Thanks! Your feedback has been posted to the page \"[$2 $1]\".",
-    "feedback-close": "Done",
-    "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
-    "feedback-bugnew": "I checked. Report a new bug",
-    "searchsuggest-search": "Search",
-    "searchsuggest-containing": "containing...",
-    "api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
-    "api-error-badtoken": "Internal error: Bad token.",
-    "api-error-copyuploaddisabled": "Uploading by URL is disabled on this server.",
-    "api-error-duplicate": "There {{PLURAL:$1|is [$2 another file]|are [$2 some other files]}} already on the site with the same content.",
-    "api-error-duplicate-archive": "There {{PLURAL:$1|was [$2 another file]|were [$2 some other files]}} already on the site with the same content, but {{PLURAL:$1|it was|they were}} deleted.",
-    "api-error-duplicate-archive-popup-title": "Duplicate {{PLURAL:$1|file that has|files that have}} already been deleted.",
-    "api-error-duplicate-popup-title": "Duplicate {{PLURAL:$1|file|files}}.",
-    "api-error-empty-file": "The file you submitted was empty.",
-    "api-error-emptypage": "Creating new, empty pages is not allowed.",
-    "api-error-fetchfileerror": "Internal error: Something went wrong while fetching the file.",
-    "api-error-fileexists-forbidden": "A file with name \"$1\" already exists, and cannot be overwritten.",
-    "api-error-fileexists-shared-forbidden": "A file with name \"$1\" already exists in the shared file repository, and cannot be overwritten.",
-    "api-error-file-too-large": "The file you submitted was too large.",
-    "api-error-filename-tooshort": "The filename is too short.",
-    "api-error-filetype-banned": "This type of file is banned.",
-    "api-error-filetype-banned-type": "$1 {{PLURAL:$4|is not a permitted file type|are not permitted file types}}. Permitted {{PLURAL:$3|file type is|file types are}} $2.",
-    "api-error-filetype-missing": "The filename is missing an extension.",
-    "api-error-hookaborted": "The modification you tried to make was aborted by an extension.",
-    "api-error-http": "Internal error: Unable to connect to server.",
-    "api-error-illegal-filename": "The filename is not allowed.",
-    "api-error-internal-error": "Internal error: Something went wrong with processing your upload on the wiki.",
-    "api-error-invalid-file-key": "Internal error: File was not found in temporary storage.",
-    "api-error-missingparam": "Internal error: Missing parameters on request.",
-    "api-error-missingresult": "Internal error: Could not determine if the copy succeeded.",
-    "api-error-mustbeloggedin": "You must be logged in to upload files.",
-    "api-error-mustbeposted": "Internal error: Request requires HTTP POST.",
-    "api-error-noimageinfo": "The upload succeeded, but the server did not give us any information about the file.",
-    "api-error-nomodule": "Internal error: No upload module set.",
-    "api-error-ok-but-empty": "Internal error: No response from server.",
-    "api-error-overwrite": "Overwriting an existing file is not allowed.",
-    "api-error-stashfailed": "Internal error: Server failed to store temporary file.",
-    "api-error-publishfailed": "Internal error: Server failed to publish temporary file.",
-    "api-error-stasherror": "There was an error while uploading the file to stash.",
-    "api-error-timeout": "The server did not respond within the expected time.",
-    "api-error-unclassified": "An unknown error occurred.",
-    "api-error-unknown-code": "Unknown error: \"$1\".",
-    "api-error-unknown-error": "Internal error: Something went wrong when trying to upload your file.",
-    "api-error-unknown-warning": "Unknown warning: \"$1\".",
-    "api-error-unknownerror": "Unknown error: \"$1\".",
-    "api-error-uploaddisabled": "Uploading is disabled on this wiki.",
-    "api-error-verification-error": "This file might be corrupt, or have the wrong extension.",
-    "duration-seconds": "$1 {{PLURAL:$1|second|seconds}}",
-    "duration-minutes": "$1 {{PLURAL:$1|minute|minutes}}",
-    "duration-hours": "$1 {{PLURAL:$1|hour|hours}}",
-    "duration-days": "$1 {{PLURAL:$1|day|days}}",
-    "duration-weeks": "$1 {{PLURAL:$1|week|weeks}}",
-    "duration-years": "$1 {{PLURAL:$1|year|years}}",
-    "duration-decades": "$1 {{PLURAL:$1|decade|decades}}",
-    "duration-centuries": "$1 {{PLURAL:$1|century|centuries}}",
-    "duration-millennia": "$1 {{PLURAL:$1|millennium|millennia}}",
-    "rotate-comment": "Image rotated by $1 {{PLURAL:$1|degree|degrees}} clockwise",
-    "limitreport-title": "Parser profiling data:",
-    "limitreport-cputime": "CPU time usage",
-    "limitreport-cputime-value": "$1 {{PLURAL:$1|second|seconds}}",
-    "limitreport-walltime": "Real time usage",
-    "limitreport-walltime-value": "$1 {{PLURAL:$1|second|seconds}}",
-    "limitreport-ppvisitednodes": "Preprocessor visited node count",
-    "limitreport-ppvisitednodes-value": "$1/$2",
-    "limitreport-ppgeneratednodes": "Preprocessor generated node count",
-    "limitreport-ppgeneratednodes-value": "$1/$2",
-    "limitreport-postexpandincludesize": "Post-expand include size",
-    "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
-    "limitreport-templateargumentsize": "Template argument size",
-    "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
-    "limitreport-expansiondepth": "Highest expansion depth",
-    "limitreport-expansiondepth-value": "$1/$2",
-    "limitreport-expensivefunctioncount": "Expensive parser function count",
-    "limitreport-expensivefunctioncount-value": "$1/$2",
-    "expandtemplates": "Expand templates",
-    "expand_templates_intro": "This special page takes text and expands all templates in it recursively.\nIt also expands supported parser functions like\n<code><nowiki>{{</nowiki>#language:…}}</code> and variables like\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nIn fact, it expands pretty much everything in double-braces.",
-    "expand_templates_title": "Context title, for {{FULLPAGENAME}}, etc.:",
-    "expand_templates_input": "Input text:",
-    "expand_templates_output": "Result",
-    "expand_templates_xml_output": "XML output",
-    "expand_templates_html_output": "Raw HTML output",
-    "expand_templates_ok": "OK",
-    "expand_templates_remove_comments": "Remove comments",
-    "expand_templates_remove_nowiki": "Suppress <nowiki> tags in result",
-    "expand_templates_generate_xml": "Show XML parse tree",
-    "expand_templates_generate_rawhtml": "Show raw HTML",
-    "expand_templates_preview": "Preview"
+       "sqlite-has-fts": "$1 with full-text search support",
+       "sqlite-no-fts": "$1 without full-text search support",
+       "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} page $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
+       "logentry-delete-event": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|changed}} visibility of log events on $3",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|changed}} visibility of revisions on page $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|suppressed}} page $3",
+       "logentry-suppress-event": "$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
+       "logentry-suppress-revision": "$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4",
+       "logentry-suppress-event-legacy": "$1 secretly {{GENDER:$2|changed}} visibility of log events on $3",
+       "logentry-suppress-revision-legacy": "$1 secretly {{GENDER:$2|changed}} visibility of revisions on page $3",
+       "revdelete-content-hid": "content hidden",
+       "revdelete-summary-hid": "edit summary hidden",
+       "revdelete-uname-hid": "username hidden",
+       "revdelete-content-unhid": "content unhidden",
+       "revdelete-summary-unhid": "edit summary unhidden",
+       "revdelete-uname-unhid": "username unhidden",
+       "revdelete-restricted": "applied restrictions to administrators",
+       "revdelete-unrestricted": "removed restrictions for administrators",
+       "logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|moved}} page $3 to $4 over redirect",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 over a redirect without leaving a redirect",
+       "logentry-patrol-patrol": "$1 {{GENDER:$2|marked}} revision $4 of page $3 patrolled",
+       "logentry-patrol-patrol-auto": "$1 automatically {{GENDER:$2|marked}} revision $4 of page $3 patrolled",
+       "logentry-newusers-newusers": "User account $1 was {{GENDER:$2|created}}",
+       "logentry-newusers-create": "User account $1 was {{GENDER:$2|created}}",
+       "logentry-newusers-create2": "User account $3 was {{GENDER:$2|created}} by $1",
+       "logentry-newusers-byemail": "User account $3 was {{GENDER:$2|created}} by $1 and password was sent by email",
+       "logentry-newusers-autocreate": "User account $1 was {{GENDER:$2|created}} automatically",
+       "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for $3 from $4 to $5",
+       "logentry-rights-rights-legacy": "$1 {{GENDER:$2|changed}} group membership for $3",
+       "logentry-rights-autopromote": "$1 was automatically {{GENDER:$2|promoted}} from $4 to $5",
+       "rightsnone": "(none)",
+       "revdelete-logentry": "changed revision visibility of \"[[$1]]\"",
+       "logdelete-logentry": "changed event visibility of \"[[$1]]\"",
+       "revdelete-content": "content",
+       "revdelete-summary": "edit summary",
+       "revdelete-uname": "username",
+       "revdelete-hid": "hid $1",
+       "revdelete-unhid": "unhid $1",
+       "revdelete-log-message": "$1 for $2 {{PLURAL:$2|revision|revisions}}",
+       "logdelete-log-message": "$1 for $2 {{PLURAL:$2|event|events}}",
+       "deletedarticle": "deleted \"[[$1]]\"",
+       "suppressedarticle": "suppressed \"[[$1]]\"",
+       "undeletedarticle": "restored \"[[$1]]\"",
+       "patrol-log-line": "marked $1 of $2 patrolled $3",
+       "patrol-log-auto": "(automatic)",
+       "patrol-log-diff": "revision $1",
+       "1movedto2": "moved [[$1]] to [[$2]]",
+       "1movedto2_redir": "moved [[$1]] to [[$2]] over redirect",
+       "move-redirect-suppressed": "redirect suppressed",
+       "newuserlog-create-entry": "New user account",
+       "newuserlog-create2-entry": "created new account $1",
+       "newuserlog-autocreate-entry": "Account created automatically",
+       "rightslogentry": "changed group membership for $1 from $2 to $3",
+       "rightslogentry-autopromote": "was automatically promoted from $2 to $3",
+       "feedback-bugornote": "If you are ready to describe a technical problem in detail please [$1 report a bug].\nOtherwise, you can use the easy form below. Your comment will be added to the page \"[$3 $2]\", along with your username.",
+       "feedback-subject": "Subject:",
+       "feedback-message": "Message:",
+       "feedback-cancel": "Cancel",
+       "feedback-submit": "Submit Feedback",
+       "feedback-adding": "Adding feedback to page...",
+       "feedback-error1": "Error: Unrecognized result from API",
+       "feedback-error2": "Error: Edit failed",
+       "feedback-error3": "Error: No response from API",
+       "feedback-thanks": "Thanks! Your feedback has been posted to the page \"[$2 $1]\".",
+       "feedback-close": "Done",
+       "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
+       "feedback-bugnew": "I checked. Report a new bug",
+       "searchsuggest-search": "Search",
+       "searchsuggest-containing": "containing...",
+       "api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
+       "api-error-badtoken": "Internal error: Bad token.",
+       "api-error-copyuploaddisabled": "Uploading by URL is disabled on this server.",
+       "api-error-duplicate": "There {{PLURAL:$1|is [$2 another file]|are [$2 some other files]}} already on the site with the same content.",
+       "api-error-duplicate-archive": "There {{PLURAL:$1|was [$2 another file]|were [$2 some other files]}} already on the site with the same content, but {{PLURAL:$1|it was|they were}} deleted.",
+       "api-error-duplicate-archive-popup-title": "Duplicate {{PLURAL:$1|file that has|files that have}} already been deleted.",
+       "api-error-duplicate-popup-title": "Duplicate {{PLURAL:$1|file|files}}.",
+       "api-error-empty-file": "The file you submitted was empty.",
+       "api-error-emptypage": "Creating new, empty pages is not allowed.",
+       "api-error-fetchfileerror": "Internal error: Something went wrong while fetching the file.",
+       "api-error-fileexists-forbidden": "A file with name \"$1\" already exists, and cannot be overwritten.",
+       "api-error-fileexists-shared-forbidden": "A file with name \"$1\" already exists in the shared file repository, and cannot be overwritten.",
+       "api-error-file-too-large": "The file you submitted was too large.",
+       "api-error-filename-tooshort": "The filename is too short.",
+       "api-error-filetype-banned": "This type of file is banned.",
+       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|is not a permitted file type|are not permitted file types}}. Permitted {{PLURAL:$3|file type is|file types are}} $2.",
+       "api-error-filetype-missing": "The filename is missing an extension.",
+       "api-error-hookaborted": "The modification you tried to make was aborted by an extension.",
+       "api-error-http": "Internal error: Unable to connect to server.",
+       "api-error-illegal-filename": "The filename is not allowed.",
+       "api-error-internal-error": "Internal error: Something went wrong with processing your upload on the wiki.",
+       "api-error-invalid-file-key": "Internal error: File was not found in temporary storage.",
+       "api-error-missingparam": "Internal error: Missing parameters on request.",
+       "api-error-missingresult": "Internal error: Could not determine if the copy succeeded.",
+       "api-error-mustbeloggedin": "You must be logged in to upload files.",
+       "api-error-mustbeposted": "Internal error: Request requires HTTP POST.",
+       "api-error-noimageinfo": "The upload succeeded, but the server did not give us any information about the file.",
+       "api-error-nomodule": "Internal error: No upload module set.",
+       "api-error-ok-but-empty": "Internal error: No response from server.",
+       "api-error-overwrite": "Overwriting an existing file is not allowed.",
+       "api-error-stashfailed": "Internal error: Server failed to store temporary file.",
+       "api-error-publishfailed": "Internal error: Server failed to publish temporary file.",
+       "api-error-stasherror": "There was an error while uploading the file to stash.",
+       "api-error-timeout": "The server did not respond within the expected time.",
+       "api-error-unclassified": "An unknown error occurred.",
+       "api-error-unknown-code": "Unknown error: \"$1\".",
+       "api-error-unknown-error": "Internal error: Something went wrong when trying to upload your file.",
+       "api-error-unknown-warning": "Unknown warning: \"$1\".",
+       "api-error-unknownerror": "Unknown error: \"$1\".",
+       "api-error-uploaddisabled": "Uploading is disabled on this wiki.",
+       "api-error-verification-error": "This file might be corrupt, or have the wrong extension.",
+       "duration-seconds": "$1 {{PLURAL:$1|second|seconds}}",
+       "duration-minutes": "$1 {{PLURAL:$1|minute|minutes}}",
+       "duration-hours": "$1 {{PLURAL:$1|hour|hours}}",
+       "duration-days": "$1 {{PLURAL:$1|day|days}}",
+       "duration-weeks": "$1 {{PLURAL:$1|week|weeks}}",
+       "duration-years": "$1 {{PLURAL:$1|year|years}}",
+       "duration-decades": "$1 {{PLURAL:$1|decade|decades}}",
+       "duration-centuries": "$1 {{PLURAL:$1|century|centuries}}",
+       "duration-millennia": "$1 {{PLURAL:$1|millennium|millennia}}",
+       "rotate-comment": "Image rotated by $1 {{PLURAL:$1|degree|degrees}} clockwise",
+       "limitreport-title": "Parser profiling data:",
+       "limitreport-cputime": "CPU time usage",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|second|seconds}}",
+       "limitreport-walltime": "Real time usage",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|second|seconds}}",
+       "limitreport-ppvisitednodes": "Preprocessor visited node count",
+       "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes": "Preprocessor generated node count",
+       "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-postexpandincludesize": "Post-expand include size",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
+       "limitreport-templateargumentsize": "Template argument size",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
+       "limitreport-expansiondepth": "Highest expansion depth",
+       "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount": "Expensive parser function count",
+       "limitreport-expensivefunctioncount-value": "$1/$2",
+       "expandtemplates": "Expand templates",
+       "expand_templates_intro": "This special page takes text and expands all templates in it recursively.\nIt also expands supported parser functions like\n<code><nowiki>{{</nowiki>#language:…}}</code> and variables like\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nIn fact, it expands pretty much everything in double-braces.",
+       "expand_templates_title": "Context title, for {{FULLPAGENAME}}, etc.:",
+       "expand_templates_input": "Input text:",
+       "expand_templates_output": "Result",
+       "expand_templates_xml_output": "XML output",
+       "expand_templates_html_output": "Raw HTML output",
+       "expand_templates_ok": "OK",
+       "expand_templates_remove_comments": "Remove comments",
+       "expand_templates_remove_nowiki": "Suppress <nowiki> tags in result",
+       "expand_templates_generate_xml": "Show XML parse tree",
+       "expand_templates_generate_rawhtml": "Show raw HTML",
+       "expand_templates_preview": "Preview"
 }
index 85f0c9a..dd696b5 100644 (file)
        "blockip": "Forbari uzanton/IP-adreson",
        "blockip-legend": "Forbari uzanton",
        "blockiptext": "Per jena formularo vi povas forpreni de ajna nomo aŭ IP-adreso la rajton skribi en la vikio. Oni faru tion ''nur'' por eviti vandalismon, kaj sekvante la [[{{MediaWiki:Policy-url}}|regulojn pri forbarado]]. Klarigu la precizan kialon malsupre (ekzemple, citu paĝojn, kiuj estis vandaligitaj).",
-       "ipadressorusername": "IP-adreso aŭ salutnomo:",
+       "ipaddressorusername": "IP-adreso aŭ salutnomo:",
        "ipbexpiry": "Blokdaŭro",
        "ipbreason": "Kialo:",
        "ipbreason-dropdown": "*Oftaj kialoj de forbaro\n** Enmetas malveraĵojn\n** Forviŝas entenon el paĝoj\n** Entrudas ligilojn al eksteraj paĝaroj\n** Enmetas sensencaĵojn\n** Terurigema sinteno\n** Misuzo de pluraj salutnomoj\n** Neakceptebla uzanto-nomo",
        "newimages-summary": "Ĉi tiu speciala paĝo montras la lastajn alŝutitajn dosierojn.",
        "newimages-legend": "Dosiernomo",
        "newimages-label": "Dosiernomo (aŭ parto de ĝi):",
-       "showhidebots": "($1 robotojn)",
        "noimages": "Nenio videbla.",
        "ilsubmit": "Serĉi",
        "bydate": "laŭ dato",
index baeb37f..fe16945 100644 (file)
                        "לערי ריינהארט",
                        "Chocolate con galleta",
                        "Csbotero",
-                       "아라"
+                       "아라",
+                       "Mcervera"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "tog-watchlisthideliu": "Ocultar las ediciones de los usuarios registrados en la lista de seguimiento",
        "tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos en la lista de seguimiento",
        "tog-watchlisthidepatrolled": "Ocultar las ediciones patrulladas en la lista de seguimiento",
-       "tog-ccmeonemails": "Recibir copias de los correos que envío a otros usuarios",
+       "tog-ccmeonemails": "Recibir copias de los mensajes que envíe a otros usuarios",
        "tog-diffonly": "No mostrar bajo las ''diferencias'' el contenido de la página",
        "tog-showhiddencats": "Mostrar las categorías escondidas",
        "tog-norollbackdiff": "Omitir la diferencia después de revertir",
        "nospecialpagetext": "<strong>Ha solicitado una página especial inexistente.</strong>\n\nPuedes ver una lista de las páginas especiales en [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Error",
        "databaseerror": "Error de la base de datos",
-       "databaseerror-text": "Se ha producido un error en la base de datos.\nEsto puede indicar un bug en el software.",
+       "databaseerror-text": "Ocurrió un error de consulta de la base de datos.\nEsto puede indicar un fallo en el software.",
        "databaseerror-textcl": "Se ha producido un error en la base de datos.",
        "databaseerror-query": "Consulta: $1",
        "databaseerror-function": "Función: $1",
        "viewsourcetext": "Puedes ver y copiar el código fuente de esta página:",
        "viewyourtext": "Puedes ver y copiar el código de '''tus ediciones''' a esta página:",
        "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "editinginterface": "'''Aviso:''' Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones, por favor considera usar [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+       "editinginterface": "<strong>Aviso:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
        "cascadeprotected": "Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:\n$2",
        "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres '''$1'''.",
        "customcssprotected": "No tienes permiso para editar esta página CSS, porque contiene configuraciones personales de otro usuario.",
        "mycustomjsprotected": "No tienes permiso para editar esta página JavaScript.",
        "myprivateinfoprotected": "No tienes permiso para editar tu información privada.",
        "mypreferencesprotected": "No tienes permiso para editar tus preferencias.",
-       "ns-specialprotected": "Las páginas especiales no se pueden editar",
+       "ns-specialprotected": "No se pueden editar las páginas especiales.",
        "titleprotected": "Esta página ha sido protegida contra creación por [[User:$1|$1]].\nEl motivo dado fue: \"''$2''\".",
        "filereadonlyerror": "No se puede modificar el archivo \"$1\" porque el repositorio de archivos \"$2\" está en modo de sólo lectura.\nEl administrador que lo ha bloqueado ofrece esta explicación: \"$3\".",
        "invalidtitle-knownnamespace": "Título no válido con el espacio de nombres \"$2\" y el texto \"$3\"",
        "exception-nologin": "No has iniciado sesión",
        "exception-nologin-text": "[[Special:Userlogin|Inicia sesión]] para acceder a esta página o acción.",
        "exception-nologin-text-manual": "Necesitas $1 para acceder a esta página o acción.",
-       "virus-badscanner": "Error de configuración: Antivirus desconocido: ''$1''",
+       "virus-badscanner": "Configuración incorrecta: antivirus desconocido: <em>$1</em>",
        "virus-scanfailed": "falló el análisis (código $1)",
        "virus-unknownscanner": "antivirus desconocido:",
-       "logouttext": "\"'Usted está ahora desconectado.\"'\nTenga en cuenta que algunas páginas pueden continuar mostrándose como si todavía estuviera conectado, hasta que borres la caché de tu navegador.",
+       "logouttext": "<strong>Ha finalizado tu sesión.</strong>\n\nPuede que algunas páginas continúen mostrándose como si la sesión estuviera iniciada hasta que vacíes la memoria caché del navegador.",
        "welcomeuser": "¡Te damos la bienvenida, $1!",
        "welcomecreation-msg": "Se ha creado tu cuenta.\nNo olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]].",
        "yourname": "Nombre de usuario:",
        "remembermypassword": "Mantenerme conectado en este navegador (hasta $1 {{PLURAL:$1|día|días}})",
        "userlogin-remembermypassword": "Mantener mi sesión iniciada",
        "userlogin-signwithsecure": "Usar conexión segura",
-       "yourdomainname": "Dominio",
+       "yourdomainname": "Tu dominio:",
        "password-change-forbidden": "No puedes cambiar las contraseñas de este wiki.",
        "externaldberror": "Hubo un error de autenticación externa de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
        "login": "Acceder",
        "pt-login": "Iniciar sesión",
        "pt-login-button": "Iniciar sesión",
        "pt-createaccount": "Crear una cuenta",
-       "pt-userlogout": "Cerrar sesión",
+       "pt-userlogout": "Salir",
        "php-mail-error-unknown": "Error desconocido en la función mail() de PHP.",
        "user-mail-no-addy": "Se ha intentado enviar correo electrónico sin una dirección de correo electrónico.",
        "user-mail-no-body": "Trató de enviar un correo electrónico con un cuerpo vacío o excesivamente corto.",
        "action-createpage": "crear páginas",
        "action-createtalk": "crear páginas de discusión",
        "action-createaccount": "crear esta cuenta de usuario",
+       "action-history": "Ver el historial de esta página",
        "action-minoredit": "marcar este cambio como menor",
        "action-move": "trasladar esta página",
        "action-move-subpages": "trasladar esta página y sus subpáginas",
        "trackingcategories-disabled": "La categoría está desactivada",
        "mailnologin": "Ninguna dirección de envio",
        "mailnologintext": "Debes [[Special:UserLogin|iniciar sesión]] y tener una dirección electrónica válida en tus [[Special:Preferences|preferencias]] para enviar un correo electrónico a otros usuarios.",
-       "emailuser": "Enviar un correo electrónico a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}}",
-       "emailuser-title-target": "Enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}",
+       "emailuser": "Enviar un mensaje de correo a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}}",
+       "emailuser-title-target": "Enviar un mensaje a {{GENDER:$1|este usuario|esta usuaria}}",
        "emailuser-title-notarget": "Enviar un correo electrónico al usuario",
-       "emailpage": "Enviar un correo electrónico a un usuario",
+       "emailpage": "Enviar mensaje al usuario",
        "emailpagetext": "Puedes usar el formulario de abajo para enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}.\nLa dirección de correo electrónico que indicaste en [[Special:Preferences|tus preferencias de usuario]] aparecerá en el campo \"Remitente\" o \"De\" para que el destinatario pueda responderte.",
        "defemailsubject": "Correo electrónico enviado por el usuario «$1» desde {{SITENAME}}",
        "usermaildisabled": "Correo electrónico del usuario deshabilitado",
        "blockip": "Bloquear usuario",
        "blockip-legend": "Bloquear usuario",
        "blockiptext": "Usa el siguiente formulario para bloquear el acceso de escritura desde una dirección IP específica o nombre de usuario.\nEsto debería hacerse sólo para prevenir vandalismos, y de acuerdo a las [[{{MediaWiki:Policy-url}}|políticas]].\nExplica la razón específica del bloqueo (por ejemplo, citando las páginas en particular que han sido objeto de vandalismo).",
-       "ipadressorusername": "Dirección IP o nombre de usuario:",
+       "ipaddressorusername": "Dirección IP o nombre de usuario:",
        "ipbexpiry": "Caducidad:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Motivos comunes de bloqueo\n** Añadir información falsa\n** Eliminar contenido de las páginas\n** Publicitar enlaces a otras páginas web\n** Añadir basura a las páginas\n** Comportamiento intimidatorio u hostil\n** Abuso de múltiples cuentas\n** Nombre de usuario inaceptable",
        "newimages-summary": "Esta página especial muestra una galería de los últimos archivos subidos.",
        "newimages-legend": "Nombre del fichero",
        "newimages-label": "Nombre del fichero (o una parte):",
-       "showhidebots": "($1 bots)",
        "noimages": "No hay nada que ver.",
        "ilsubmit": "Buscar",
        "bydate": "por fecha",
        "specialpages-note": "* Páginas especiales normales\n* <span class=\"mw-specialpagerestricted\">Páginas especiales restringidas.</span>\n* <span class=\"mw-specialpagecached\">Páginas especiales en caché (podrían ser obsoletas).</span>",
        "specialpages-group-maintenance": "Reportes de mantenimiento",
        "specialpages-group-other": "Otras páginas especiales",
-       "specialpages-group-login": "Iniciar sesión / Crear cuenta",
+       "specialpages-group-login": "Acceder/crear cuenta",
        "specialpages-group-changes": "Cambios recientes y registros",
        "specialpages-group-media": "Páginas sobre archivos",
        "specialpages-group-users": "Usuarios y permisos",
        "htmlform-no": "No",
        "htmlform-yes": "Sí",
        "htmlform-chosen-placeholder": "Selecciona una opción",
+       "htmlform-cloner-create": "Añadir más",
+       "htmlform-cloner-delete": "Eliminar",
+       "htmlform-cloner-required": "Se requiere al menos un valor",
        "sqlite-has-fts": "$1 con soporte para búsqueda de texto completo",
        "sqlite-no-fts": "$1 sin soporte para búsqueda de texto completo",
        "logentry-delete-delete": "$1 {{GENDER:$2|borró}} la página «$3»",
index ce72fea..592287c 100644 (file)
        "blockip": "Kasutaja blokeerimine",
        "blockip-legend": "Kasutaja blokeerimine",
        "blockiptext": "See vorm on kindla IP-aadressi või kasutajanime kirjutamisõiguste blokeerimiseks.\nSeda tohib teha ainult vandalismi vältimiseks ja kooskõlas [[{{MediaWiki:Policy-url}}|{{GRAMMAR:genitive|{{SITENAME}}}} sisekorraga]].\nTäida ka põhjuse väli, näiteks viidates lehekülgedele, mis rikuti.",
-       "ipadressorusername": "IP-aadress või kasutajanimi:",
+       "ipaddressorusername": "IP-aadress või kasutajanimi:",
        "ipbexpiry": "Kehtivus:",
        "ipbreason": "Põhjus:",
        "ipbreason-dropdown": "*Tavalised blokeerimise põhjused\n** Valeandmete lisamine\n** Lehekülgedelt sisu kustutamine\n** Välislinkide rämpspostitus\n** Sodimine\n** Hirmutav käitumine/ahistamine\n** Mitme konto väärkasutus\n** Lubamatu kasutajanimi",
        "newimages-summary": "Sellel erilehel on viimati üles laaditud failid.",
        "newimages-legend": "Filter",
        "newimages-label": "Failinimi (või selle osa):",
-       "showhidebots": "($1 robotite kaastööd)",
        "noimages": "Uusi pilte ei ole.",
        "ilsubmit": "Otsi",
        "bydate": "kuupäeva järgi",
index 9bc62de..154799f 100644 (file)
        "searchbutton": "Bilatu",
        "go": "Joan",
        "searcharticle": "Joan",
-       "history": "Orrialdearen historia",
+       "history": "Orriaren historia",
        "history_short": "Historia",
        "updatedmarker": "nire azkeneko bisitaz geroztik eguneratuta",
        "printableversion": "Inprimatzeko bertsioa",
        "pagemerge-logentry": "[[$1]] [[$2]](r)ekin batu da ($3(e)raino berrikuspenak)",
        "revertmerge": "Bereiztu",
        "mergelogpagetext": "Jarraian dagoen zerrendak orrialde baten historiatik beste batera egindako azken bateratzeak erakusten ditu.",
-       "history-title": "«$1» orrialdearen historia berrikuspena",
+       "history-title": "«$1» orriaren historia berrikuspena",
        "difference-title": "«$1»: berrikuspenen arteko aldeak",
        "difference-title-multipage": "«$1» eta «$2» orrien arteko aldeak",
        "difference-multipage": "(Orrien arteko aldeak)",
        "blockip": "Blokeatu erabiltzailea",
        "blockip-legend": "Blokeatu erabiltzailea",
        "blockiptext": "IP helbide edo erabiltzaile izen bati idazketa baimenak kentzeko beheko formularioa erabil dezakezu. Ekintza hau bandalismoa saihesteko baino ez da burutu behar, eta beti ere [[{{MediaWiki:Policy-url}}|politikak]] errespetatuz. Blokeoaren arrazoi bat ere zehaztu ezazu (adibidez, orrialde batzuk zehaztuz).",
-       "ipadressorusername": "IP Helbidea edo erabiltzaile izena",
+       "ipaddressorusername": "IP Helbidea edo erabiltzaile izena",
        "ipbexpiry": "Iraungipena",
        "ipbreason": "Arrazoia:",
        "ipbreason-dropdown": "*Blokeaketa arrazoi arruntak\n** Benetakoa ez den informazioa ezartzea\n** Orrialdetatik edukia ezabatzea\n** Spam-a edota kanpoko loturak ezarri\n** Bandalismoa egitea\n** Beste erabiltzaileei mehatxatzea\n** Kontu ugari erabiltzea\n** Erabiltzaile izen desegokia",
        "newimages-summary": "Orrialde berezi honek igotako azkeneko fitxategiak erakusten ditu.",
        "newimages-legend": "Iragazkia",
        "newimages-label": "Fitxategia (edo bere zati bat):",
-       "showhidebots": "($1 bot-ak)",
        "noimages": "Ez dago ezer ikusteko.",
        "ilsubmit": "Bilatu",
        "bydate": "dataren arabera",
index d48e85c..46d5017 100644 (file)
        "blockip": "Atarugal usuáriu",
        "blockip-legend": "Atarugal usuáriu",
        "blockiptext": "Gasta el hormuláriu d'embahu p'atarugal el acesu duna IP u dun usuáriu.\nEstu solu ebi hazelsi pa evital el vandalismu, i dalcuerdu cola [[{{MediaWiki:Policy-url}}|póliça]].\nEscrebi una razón concreta embahu (pol sabulugal, almientandu páhinas qu'aigan siu vandalizás pol esti usuáriu).",
-       "ipadressorusername": "IP u nombri d´usuáriu:",
+       "ipaddressorusername": "IP u nombri d´usuáriu:",
        "ipbexpiry": "Acabiha:",
        "ipbreason": "Razón:",
        "ipbreason-dropdown": "*Motivus frecuentis de tarugus\n** Escrebil enhormación farsa\n** Esborral el continiu las páhinas\n** Añiil publiciá d´otras páhinas...\n** Añiil basura enas páhinas\n** Comportamientu encévicu\n** Abusal con varias cuentas\n** Nombris d´usuárius enacetabris",
        "imagelisttext": "Embahu ai una lista con '''$1''' {{PLURAL:$1|archivu|archivus}} ordenaus $2.",
        "newimages-legend": "Filtru",
        "newimages-label": "Nombri el archivu (u parti):",
-       "showhidebots": "($1 bots)",
        "noimages": "Nu ai ná pa vel.",
        "ilsubmit": "Landeal",
        "bydate": "pol fecha",
index 8b008b7..e2d3cfa 100644 (file)
        "showhideselectedversions": "نمایش/نهفتن نسخه‌های انتخاب شده",
        "editundo": "خنثی‌سازی",
        "diff-empty": "(بدون تفاوت)",
-       "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ متوسط|$1 نسخه‌های متوسط}} توسط کاربر مشابهی که نشان داده نشده)",
+       "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}} توسط کاربر مشابهی که نشان داده نشده)",
        "diff-multi-otherusers": "({{PLURAL:$1|یک نسخهٔ متوسط|$1 نسخه‌های متوسط}} توسط {{PLURAL:$2|کاربر دیگری|$2 کاربران}} نشان داده نشده)",
        "diff-multi-manyusers": "({{PLURAL:$1|یک|$1}} ویرایش میانی توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)",
        "difference-missing-revision": "{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}}  نشد.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
        "blockip": "بستن کاربر",
        "blockip-legend": "بستن کاربر",
        "blockiptext": "از فرم زیر برای بستن دسترسی ویرایش یک نشانی آی‌پی یا نام کاربری مشخص استفاده کنید.\nاین کار فقط فقط باید برای جلوگیری از خرابکاری و بر اساس [[{{MediaWiki:Policy-url}}|سیاست قطع دسترسی]] انجام شود.\nدلیل مشخص این کار را در زیر ذکر کنید (مثلاً با ذکر صفحه‌های به‌خصوصی که مورد خرابکاری واقع شده‌اند).",
-       "ipadressorusername": "نشانی آی‌پی یا نام کاربری:",
+       "ipaddressorusername": "نشانی آی‌پی یا نام کاربری:",
        "ipbexpiry": "زمان سرآمدن:",
        "ipbreason": "دلیل:",
        "ipbreason-dropdown": "*دلایل متداول قطع دسترسی\n**واردکردن اطلاعات نادرست\n**پاک‌کردن اطلاعات مفید از صفحه‌ها\n**هرزنگاری از طریق درج مکرر پیوند به وب‌گاه‌ها\n**درج چرندیات یا نوشته‌های بی‌معنا در صفحه‌ها\n**تهدید یا ارعاب دیگر کاربران\n**سوء استفاده از چند حساب کاربری\n**نام کاربری نامناسب",
        "newimages-summary": "این صفحهٔ ویژه آخرین پرونده‌های بارگذاری شده را نمایش می‌دهد",
        "newimages-legend": "پالودن",
        "newimages-label": "نام پرونده (یا قسمتی از آن):",
-       "showhidebots": "($1 ربات‌ها)",
        "noimages": "چیزی برای دیدن نیست.",
        "ilsubmit": "جستجو",
        "bydate": "از روی تاریخ",
index 30d604b..5e20fa2 100644 (file)
        "edit": "Muokkaa",
        "edit-local": "Muokkaa paikallista kuvausta",
        "create": "Luo sivu",
-       "create-local": "Lisää paikallinen kuvaus",
+       "create-local": "Luo paikallinen kuvaus",
        "editthispage": "Muokkaa tätä sivua",
        "create-this-page": "Luo tämä sivu",
        "delete": "Poista",
        "action-createpage": "luoda sivuja",
        "action-createtalk": "luoda keskustelusivuja",
        "action-createaccount": "luoda tätä käyttäjätunnusta",
-       "action-history": "näyttää tämän sivun historiaa",
+       "action-history": "tarkastella tämän sivun historiaa",
        "action-minoredit": "merkitä tätä muokkausta pieneksi",
        "action-move": "siirtää tätä sivua",
        "action-move-subpages": "siirtää tätä sivua eikä sen alasivuja",
        "blockip": "Estä käyttäjä",
        "blockip-legend": "Estä käyttäjä",
        "blockiptext": "Tällä toiminnolla voit estää käyttäjätunnusta tai IP-osoitetta muokkaamasta.<br />\nTällainen muokkausesto pitäisi asettaa vain vandalismin torjumiseksi ja [[{{MediaWiki:Policy-url}}|käytännön]] mukaisesti.\nKirjoita eston syy alla olevaan kenttään.",
-       "ipadressorusername": "IP-osoite tai käyttäjätunnus",
+       "ipaddressorusername": "IP-osoite tai käyttäjätunnus",
        "ipbexpiry": "Kesto",
        "ipbreason": "Syy",
        "ipbreason-dropdown": "*Yleiset estosyyt\n** Väärän tiedon lisääminen\n** Sisällön poistaminen\n** Mainoslinkkien lisääminen\n** Sotkeminen tai roskan lisääminen\n** Häiriköinti\n** Useamman käyttäjätunnuksen väärinkäyttö\n** Sopimaton käyttäjätunnus",
        "newimages": "Uudet tiedostot",
        "imagelisttext": "Alla on {{PLURAL:$1|1 tiedosto|$1 tiedostoa}} lajiteltuna <strong>$2</strong>.",
        "newimages-summary": "Tällä toimintosivulla on viimeisimmät tallennetut tiedostot.",
-       "newimages-legend": "Suodin",
+       "newimages-legend": "Suodatin",
        "newimages-label": "Tiedostonimi (tai osa siitä)",
-       "showhidebots": "($1 botit)",
+       "newimages-showbots": "Näytä bottien tekemät tallennukset",
        "noimages": "Ei uusia tiedostoja.",
        "ilsubmit": "Hae",
        "bydate": "päiväyksen mukaan",
index 953dcf4..c4aa775 100644 (file)
        "action-createpage": "créer des pages",
        "action-createtalk": "créer des pages de discussion",
        "action-createaccount": "créer ce compte utilisateur",
+       "action-history": "afficher l’historique de cette page",
        "action-minoredit": "marquer cette modification comme mineure",
        "action-move": "renommer cette page",
        "action-move-subpages": "renommer cette page et ses sous-pages",
        "blockip": "Bloquer l’utilisateur",
        "blockip-legend": "Bloquer l’utilisateur",
        "blockiptext": "Utilisez le formulaire ci-dessous pour bloquer les tentatives de modification faites à partir d’une adresse IP spécifique ou d’un nom d’utilisateur.\nUne telle mesure ne devrait être prise que pour prévenir le vandalisme et en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].\nDonnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).",
-       "ipadressorusername": "Adresse IP ou nom d'utilisateur :",
+       "ipaddressorusername": "Adresse IP ou nom d'utilisateur :",
        "ipbexpiry": "Durée avant expiration :",
        "ipbreason": "Motif :",
        "ipbreason-dropdown": "* Motifs de blocage les plus fréquents\n** Insertion de fausses informations\n** Suppression injustifiée de contenu des pages\n** Insertion répétée de liens externes publicitaires (pollupostage)\n** Insertion de contenu sans aucun sens et de déchets dans les pages\n** Tentative d'intimidation ou harcèlement\n** Abus d'utilisation de comptes multiples\n** Nom d'utilisateur inacceptable, injurieux ou diffamant",
        "newimages-summary": "Cette page spéciale affiche les derniers fichiers importés.",
        "newimages-legend": "Nom du fichier",
        "newimages-label": "Nom du fichier (ou une partie de celui-ci) :",
-       "showhidebots": "($1 robots)",
+       "newimages-showbots": "Afficher les imports par des robots",
        "noimages": "Aucune image à afficher.",
        "ilsubmit": "Rechercher",
        "bydate": "par date",
        "htmlform-no": "Non",
        "htmlform-yes": "Oui",
        "htmlform-chosen-placeholder": "Choisir une option",
+       "htmlform-cloner-create": "Ajouter encore",
+       "htmlform-cloner-delete": "Supprimer",
+       "htmlform-cloner-required": "Une valeur au moins est obligatoire.",
        "sqlite-has-fts": "$1 avec recherche en texte intégral supportée",
        "sqlite-no-fts": "$1 sans recherche en texte intégral supportée",
        "logentry-delete-delete": "$1 {{GENDER:$2|a supprimé}} la page $3",
index 6ffc38e..1d41451 100644 (file)
        "blockip": "Blocar l’usanciér",
        "blockip-legend": "Blocar l’usanciér",
        "blockiptext": "Utilisâd lo formulèro ce-desot por blocar l’accès en ècritura dês una adrèce IP spècefica ou ben un nom d’usanciér.\nUna tâla mesera devrêt étre prêsa ren que por empachiér lo vandalismo et en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].\nBalyéd ce-desot una rêson justa (per ègzemplo en citent les pâges qu’ont étâ vandalisâs).",
-       "ipadressorusername": "Adrèce IP ou ben nom d’usanciér :",
+       "ipaddressorusername": "Adrèce IP ou ben nom d’usanciér :",
        "ipbexpiry": "Temps devant èxpiracion :",
        "ipbreason": "Rêson :",
        "ipbreason-dropdown": "*Rêsons corentes de blocâjo\n** Entrebetâ d’enformacions fôsses\n** Suprèssion de contegnu de les pâges\n** Entrebetâ de lims de defôr publicitèros (spame)\n** Entrebetâ de contegnu sen gins de significacion et d’ècovelyes dedens les pâges\n** Tentativa d’entimidacion ou ben de torment\n** Abus d’usâjo d’un mouél de comptos\n** Nom d’utilisator pas accèptâblo",
        "newimages-summary": "Ceta pâge spèciâla montre los dèrriérs fichiérs tèlèchargiês.",
        "newimages-legend": "Nom du fichiér",
        "newimages-label": "Nom du fichiér (ou ben una partia de ceti) :",
-       "showhidebots": "($1 los bots)",
        "noimages": "Gins de fichiér a fâre vêre.",
        "ilsubmit": "Rechèrchiér",
        "bydate": "per dâta",
index 766a041..624a890 100644 (file)
        "blockip": "IP-adres/brüker spere",
        "blockip-legend": "IP-adres/brüker spere",
        "blockiptext": "Mä detdiar formulaar sperest dü en IP-adres of en brükernööm, so dat faan diar nian feranrangen muar maaget wurd kön. \nDet skul bluas föörnimen wurd, am jin wandaalen föörtugungen an uun auerianstemang mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]].\nSkriiw en guden grünj för det sper ap.",
-       "ipadressorusername": "IP-adres of brükernööm:",
+       "ipaddressorusername": "IP-adres of brükernööm:",
        "ipbexpiry": "Sperdüür:",
        "ipbreason": "Grünj:",
        "ipbreason-dropdown": "* Mist brükt spergrünjer\n** Skraft wat ferkiards\n** Maaget sidjen leesag\n** Maaget tuföl ferwisangen üüb frääm sidjen\n** Maaget dom tschüch\n** Koon ham ei skake\n** Masbrükt brükerkontos\n** Hää en brükernööm, diar ei tuläät as",
        "newimages-summary": "Detdiar spezial-sidj wiset a tuleetst huuchschüürd datein uun.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateinööm (of en dial diarfaan):",
-       "showhidebots": "(Bots $1)",
        "noimages": "Niks tu sen.",
        "ilsubmit": "Schük",
        "bydate": "efter dootem",
index 69a5a40..ece00d8 100644 (file)
        "blockip": "Slút meidogger út",
        "blockip-legend": "Slút brûker út",
        "blockiptext": "Brûk dizze fjilden om in meidogger fan skriuwtagong út te sluten.\nDat soe allinnich fanwege fandalisme dien wurde moatte, sa't de\n[[{{MediaWiki:Policy-url}}|útslut-rie]] it oanjout.\nMeld de krekte reden! Neam bygelyks de siden dy't oantaaste waarden.",
-       "ipadressorusername": "IP Adres of meidoggernamme:",
+       "ipaddressorusername": "IP Adres of meidoggernamme:",
        "ipbexpiry": "Ferrint nei:",
        "ipbreason": "Reden:",
        "ipbreason-dropdown": "*Faak foarkommende redenen foar blokkades\n** Ferkearde ynformaasje ynfiere\n** Fuortheljen fan ynformaasje út siden\n** Spamferwizing nei eksterne websites\n** Ynfoegjen fan ûnsin yn siden\n** Yntimidearjend gedrach\n** Misbrûk troch meardere brûkers\n** Unakseptabele brûkersnamme",
        "newimages": "Nije ôfbylden",
        "imagelisttext": "Dit is in list fan '''$1''' {{PLURAL:$1|triem|triemen}}, op $2.",
        "newimages-legend": "Filter",
-       "showhidebots": "(Bots $1)",
        "noimages": "Neat te sjen.",
        "ilsubmit": "Sykje",
        "bydate": "datum",
index 79fd14b..97b3acb 100644 (file)
        "blockip": "Coisc úsáideoir",
        "blockip-legend": "Coisc úsáideoir",
        "blockiptext": "Úsáid an foirm anseo thíos chun bealach scríofa a chosc ó\nseoladh IP nó ainm úsáideora áirithe.\nIs féidir leat an rud seo a dhéanamh amháin chun an chreachadóireacht a chosc, de réir\nmar a deirtear sa [[{{MediaWiki:Policy-url}}|polasaí {{GRAMMAR:genitive|{{SITENAME}}}}]].\nLíonaigh cúis áirithe anseo thíos (mar shampla, is féidir leat a luaigh\nleathanaigh áirithe a rinne an duine damáiste ar).",
-       "ipadressorusername": "Seoladh IP nó ainm úsáideora:",
+       "ipaddressorusername": "Seoladh IP nó ainm úsáideora:",
        "ipbexpiry": "Am éaga",
        "ipbreason": "Fáth:",
        "ipbreason-dropdown": "*Fáthanna coitianta\n** Loitiméaracht\n** Naisc turscar\n** Fadhbanna cóipcheart\n** Ag iarraidh ciapadh daoine eile\n** Drochúsáid as cuntais iolrach\n** Fadhbanna idirvicí\n** Feallaire\n** Seachfhreastalaí Oscailte",
        "newimages": "Gailearaí na n-íomhánna nua",
        "imagelisttext": "Tá liosta thíos de {{PLURAL:$1|comhad amháin|$1 comhaid $2}}.",
        "newimages-label": "Comhadainm (nó cuid de):",
-       "showhidebots": "($1 róbónna)",
        "noimages": "Tada le feiceáil.",
        "ilsubmit": "Cuardaigh",
        "bydate": "de réir dáta",
index 4421439..747f40c 100644 (file)
        "whatlinkshere-filters": "筛滤器",
        "blockip": "封到IP地址",
        "blockiptext": "用下底𠮶表格去阻止某一IP𠮶修改权限。除非倷系为到怕佢乱扤,接到非要符合[[{{MediaWiki:Policy-url}}|守则]]𠮶条件下才能啖做。请到下底话只确切原因(比如引用一只拖破坏𠮶页面)。",
-       "ipadressorusername": "IP地址或用户名:",
+       "ipaddressorusername": "IP地址或用户名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*一般𠮶封锁原因\n** 紧编写假𠮶内容\n** 删卟文章内容\n** 乱加外部链接\n** 写冇油盐𠮶话\n** 吓人/骚扰别𠮶\n** 滥用帐号\n** 乱起用户名",
        "show-big-image": "完整分辨率",
        "newimages": "新建图像画廊",
        "imagelisttext": "底下系按$2排列𠮶$1只档案列表。",
-       "showhidebots": "($1机器人)",
        "noimages": "冇什哩可望。",
        "ilsubmit": "寻",
        "bydate": "按日子",
index 395ded1..d98fe23 100644 (file)
        "whatlinkshere-filters": "篩濾器",
        "blockip": "封到IP地址",
        "blockiptext": "用下底嗰表格去阻止某一IP嗰修改許可權。除非倷係為到怕佢亂扤,接到非要符合[[{{MediaWiki:Policy-url}}|守則]]嗰條件下才能噉做。請到下底話隻確切原因(比如引用一隻拕破壞嗰頁面)。",
-       "ipadressorusername": "IP地址或用戶名:",
+       "ipaddressorusername": "IP地址或用戶名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*一般嗰封鎖原因\n** 緊編寫假嗰內容\n** 刪卟文章內容\n** 亂加外部連結\n** 寫冇油鹽嗰話\n** 嚇人/騷擾別嗰\n** 濫用帳號\n** 亂起用戶名",
        "show-big-image": "完整解析度",
        "newimages": "新建圖像畫廊",
        "imagelisttext": "底下係按$2排列嗰$1隻檔案列表。",
-       "showhidebots": "($1機器人)",
        "noimages": "冇什哩可望。",
        "ilsubmit": "尋",
        "bydate": "按日子",
index d3c7021..3072722 100644 (file)
        "blockip": "Bloquear o usuario",
        "blockip-legend": "Bloquear un usuario",
        "blockiptext": "Use o seguinte formulario para bloquear o acceso de escritura desde un enderezo IP ou para bloquear un usuario específico.\nIsto debería facerse só para previr vandalismo, e de acordo coa [[{{MediaWiki:Policy-url}}|política e normas]] vixentes.\nExplique a razón específica do bloqueo (por exemplo, citando as páxinas concretas que sufriron vandalismo).",
-       "ipadressorusername": "Enderezo IP ou nome de usuario:",
+       "ipaddressorusername": "Enderezo IP ou nome de usuario:",
        "ipbexpiry": "Duración:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Motivos frecuentes para bloquear\n** Inserir información falsa\n** Eliminar o contido de páxinas\n** Ligazóns lixo a sitios externos\n** Inserir textos sen sentido ou inintelixibles\n** Comportamento intimidatorio/acoso\n** Abuso de múltiples contas de usuario\n** Nome de usuario inaceptable",
        "newimages-summary": "Esta páxina especial mostra os últimos ficheiros cargados.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nome do ficheiro (ou parte del):",
-       "showhidebots": "($1 os bots)",
        "noimages": "Non hai imaxes para ver.",
        "ilsubmit": "Procurar",
        "bydate": "por data",
index 410c8c9..95e9f9b 100644 (file)
        "whatlinkshere-filters": "Ἠθητήρια",
        "blockip": "Ἀποκλῄειν τόνδε τὸν χρώμενον",
        "blockip-legend": "Φράττειν χρώμενον",
-       "ipadressorusername": "Διεύθυνσις IP ἢ ὄνομα χρωμένου:",
+       "ipaddressorusername": "Διεύθυνσις IP ἢ ὄνομα χρωμένου:",
        "ipbexpiry": "Λῆξις:",
        "ipbreason": "Αἰτία:",
        "ipbreason-dropdown": "*Κοιναὶ αἰτίαι φραγῆς\n** Εἰσαγωγὴ ψευδοῦς πεύσεως\n** Ἁφαίρεσις τοῦ περιεχομένου τῶν δέλτων\n** Σύνδεσμοι πρὸς ἀνεπιθύμητους ἀγγελίας\n** Εἰσαγωγὴ ἀσυναρτησιῶν ἐν ταῖς δέλτοις\n** Ἐκφοβιστικὴ συμπεριφορά/ἐνόχλησις\n** Κατάχρησις πολλαπλῶν λογισμῶν\n** Ἀναπόδεκτον ὄνομα χρωμένου",
        "newimages-summary": "Ἥδε ἡ εἰδικὴ δέλτος δεικνύει τὰ πλέον πρόσφατα ἐπιπεφορτισμένα ἀρχεῖα.",
        "newimages-legend": "Διηθητήριον",
        "newimages-label": "Ἀρχειώνυμον (ἢ μέρος οὗ):",
-       "showhidebots": "($1 αὐτόματα)",
        "noimages": "Οὐδεμία εἰκών.",
        "ilsubmit": "Ζητεῖν",
        "bydate": "κατὰ χρονολογίαν",
index 17454ea..a3ec3ba 100644 (file)
        "blockip": "Däm Binutzer d Bearbeitigsrächt furtnee",
        "blockip-legend": "IP-Adräss/Benutzer sperre",
        "blockiptext": "Nimm des Formular go ne Benutzer oder e IP-Adräss sperre.\nDes sott numme erfolge go Vandalismus verhindere un in Ibereinstimmig mit in dr [[{{MediaWiki:Policy-url}}|Leitlinie]]. Bitte gib au ne Grund fi d Sperri aa (z. B. indäm du einzel ni Syte zitiersch, wu vandaliert wore sin).",
-       "ipadressorusername": "IP-Adräss oder Benutzername:",
+       "ipaddressorusername": "IP-Adräss oder Benutzername:",
        "ipbexpiry": "Sperrduur:",
        "ipbreason": "Grund:",
        "ipbreason-dropdown": "* Allgmeini Sperrgrind\n** Lesche vu Syte\n** Aalege vu bledsinnige Syte\n** Vylfachi Verstess gege d Richtlinie fir Netzgleicher\n** Verstoss gege dr Grundsatz „Kei persenligi Aagriff“\n* Benutzerspezifischi Sperrgrind\n** Uugeignete Benutzername\n** Neijaamäldig vun eme uubschränkt gsperrte Benutzer\n* IP-spezifischi Sperrgrind\n** Proxy, wäge Vandalismus vu einzelne Benutzer lengerfrischtig gsperrt",
        "newimages-summary": "Die Spezialsyte zeigt di zletscht uffegladene Dateie aa.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateiname (oder e Teil devu):",
-       "showhidebots": "(Bötli $1)",
        "noimages": "Kei Dateie gfunde.",
        "ilsubmit": "Suech",
        "bydate": "noch Datum",
index 7a60eb5..bc124ce 100644 (file)
        "blockip": "સભ્ય પર પ્રતિબંધ મુકો",
        "blockip-legend": "સભ્ય પર પ્રતિબંધ મુકો",
        "blockiptext": "કોઈ ચોક્કસ IP સરનામું કે સભ્યના લેખન યોગદાન પર પ્રતિબંધ મુકવા નીચેનું ફોર્મ વાપરો.\nતેનો ઉપયોગ માત્ર ભાંગફોડિયા પ્રવૃત્તિઓને રોકવા અને  [[{{MediaWiki:Policy-url}}|નીતિ]] અનુસાર જ હોવો જોઈએ.\nકારણનું ખાનું અવશ્ય ભરશો (દા.ત. અમુક ભાંગફોડ કરાયેલા પાનાનો સંદર્ભ).",
-       "ipadressorusername": "IP સરનામું અથવા સભ્યનામ:",
+       "ipaddressorusername": "IP સરનામું અથવા સભ્યનામ:",
        "ipbexpiry": "સમાપ્તિ:",
        "ipbreason": "કારણ:",
        "ipbreason-dropdown": "*સામાન્ય પ્રતિબંધ કારણો\n** ખોટી માહિતી ઉમેરાઈ  \n** પાનામાંથી માહિતી ભૂંસી નાંખી\n** અનાવશ્યક બાહ્ય કડીઓ ઉમેરી \n** પાનામાં મૂર્ખામીભરી/અર્થહીન માહિતી ઉમેરી\n** ત્રાસદાયક વર્તન \n** ઘણા ખાતાઓ અને દુરુપયોગ\n** અસ્વીકાર્ય સભ્ય નામ\n** આત્યંતિક ભાંગફોડ",
        "newimages-summary": "આ ખાસ પાનું છેવટની  ચડાવેલા વફાઈલા બતાવે છે",
        "newimages-legend": "ચાળણી",
        "newimages-label": "ફાઈલનામ (કે તેનો ભાગ)",
-       "showhidebots": "($1 બોટ)",
        "noimages": "જોવા માટે કશું નથી.",
        "ilsubmit": "શોધો",
        "bydate": "તારીખ પ્રમાણે",
index 5a01e62..cb5b009 100644 (file)
        "whatlinkshere-filters": "Shollaneyn",
        "blockip": "Glass magh yn ymmydeyr",
        "blockip-legend": "Glass magh yn ymmydeyr",
-       "ipadressorusername": "Enmys IP ny ennym ymmydeyr:",
+       "ipaddressorusername": "Enmys IP ny ennym ymmydeyr:",
        "ipbexpiry": "Jerrey:",
        "ipbreason": "Fa:",
        "ipbreason-dropdown": "* Oyr glassey cadjin\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behavior/harassment\n** Abusing multiple accounts\n* Oyr elley\n** Ennym ymmydeyryn neuchooie\n** Feyshtyn eddyr-wiki",
        "svg-long-desc": "coadan SVG, $1 × {{PLURAL:$2|$2 pixel|$2 phixel|$2 phixel|$2 pixelyn}} dy ennymagh, mooadys y choadan: $3",
        "show-big-image": "Jeeskeaylley ymlane",
        "newimages": "Laaragh coadanyn noa",
-       "showhidebots": "($1 botyn)",
        "ilsubmit": "Ronsee",
        "bydate": "rere date",
        "bad_image_list": "Shoh yn aght:\n\nCha nel agh meeryn ayns rolley (linnaghyn as * ec y toshiaght) ta goll er smooinaghtyn er.\nShegin da'n chied chiangley er linney ve ny chiangley da drogh choadan.\nKianglaghyn eiyrtyssagh erbee er yn linney shoh, t'ad goll er loaghtey myr lhimmaghyn, shen gra, duillagyn as ta'n coadan ayns-linney, foddee.",
index 756ac12..63e467b 100644 (file)
        "whatlinkshere-filters": "過濾器",
        "blockip": "封禁用戶",
        "blockiptext": "用下背嘅表單來禁止來自某一特定IP地址嘅修改許可權。\n單淨在為防止破壞,撈符合[[{{MediaWiki:Policy-url}}|守則]]嘅情況下正做得採取邇行動。\n請在下背輸入一隻具體嘅理由(例如引述一隻分破壞嘅頁面)。",
-       "ipadressorusername": "IP地址或用戶名:",
+       "ipaddressorusername": "IP地址或用戶名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*一般嘅封禁理由\n** 多次加入虛假資料\n** 刪除頁面內容\n** 外部鏈接廣告\n** 在頁面肚增加無意義文字\n** 無禮嘅行為、攻擊/騷擾別儕\n** 濫用多隻賬號\n** 做毋得接受嘅用戶名",
        "show-big-image": "完整分辨率",
        "newimages": "Sîn-kien thù-chhiong ke va̍k-lòng",
        "imagelisttext": "Yî-ha he on $2 phài-lie̍t ke $1-ke tóng-on lie̍t-péu.",
-       "showhidebots": "($1 kî-hi-ngìn)",
        "noimages": "Mò-khó kiám-sṳ thù-chhiong.",
        "ilsubmit": "Chhìm-cháu",
        "bydate": "on-cheu ngit-khì",
index bc02012..6842c20 100644 (file)
        "blockip": "חסימת משתמש",
        "blockip-legend": "חסימת משתמש",
        "blockiptext": "השתמשו בטופס שלהלן כדי לחסום את הרשאות הכתיבה מכתובת IP או משתמש מסוימים.\nחסימות כאלה צריכות להתבצע רק כדי למנוע השחתה, ובהתאם ל[[{{MediaWiki:Policy-url}}|נהלים]].\nאנא מלאו את הסיבה הפרטנית לחסימה להלן (לדוגמה, באמצעות ציון דפים מסוימים שהשחית המשתמש).",
-       "ipadressorusername": "כתובת IP או שם משתמש:",
+       "ipaddressorusername": "כתובת IP או שם משתמש:",
        "ipbexpiry": "פקיעה:",
        "ipbreason": "סיבה:",
        "ipbreason-dropdown": "* סיבות חסימה נפוצות\n** הוספת מידע שגוי\n** הסרת תוכן מדפים\n** הצפת קישורים לאתרים חיצוניים\n** הוספת שטויות/ג'יבריש לדפים\n** התנהגות מאיימת/הטרדה\n** שימוש לרעה בחשבונות מרובים\n** שם משתמש בעייתי",
        "newimages-summary": "דף זה מציג את הקבצים האחרונים שהועלו",
        "newimages-legend": "מסנן",
        "newimages-label": "שם הקובץ (או חלק ממנו):",
-       "showhidebots": "($1 בוטים)",
+       "newimages-showbots": "הצגת העלאות שבוצעו על־ידי בוטים",
        "noimages": "אין קבצים.",
        "ilsubmit": "חיפוש",
        "bydate": "לפי תאריך",
index 4ec3114..5aea0f6 100644 (file)
        "blockip": "अवरोधित करें",
        "blockip-legend": "सदस्य को ब्लॉक करें",
        "blockiptext": "विशिष्ठ IP पते अथवा सदस्य नाम को लिखने के अधिकार से बाध्य करने के लिए निम्न पत्र का प्रयोग करें।\nयह सिर्फ बर्बरता को रोकने के लिए ही किया जाना चाहिए, और [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार ही करना चाहिए।\nनीचे विशिष्ठ कारण भी लिखें (उदाहरण के लिए, सटीक पृष्ठों को दर्शाते हुए, जिनमें बर्बरता की गई हो)।",
-       "ipadressorusername": "आईपी एड्रेस या सदस्यनाम:",
+       "ipaddressorusername": "आईपी एड्रेस या सदस्यनाम:",
        "ipbexpiry": "समाप्ति:",
        "ipbreason": "कारण:",
        "ipbreason-dropdown": "*अवरोधित करने के साधारण कारण\n** अवैध सदस्यनाम\n** एक से अधिक खातें खोलकर उनका दुरुपयोग करना\n** गलत जानकारी भरना\n** पृष्ठों में कचरा भरना\n** पृष्ठों से सामग्री हटाना‍‍‍‍‍\n** बाहरी जालस्थलों की फ़ालतू कड़ियां देना \n** सदस्यों को तंग करना",
        "newimages-summary": "यह विशेष पृष्ठ हाल ही में अपलोड की गयी फ़ाइलें दिखाता है।",
        "newimages-legend": "छननी",
        "newimages-label": "संचिका नाम (या उसका अंश):",
-       "showhidebots": "(बोट्स $1)",
        "noimages": "देखने के लिए कुछ नहीं है।",
        "ilsubmit": "खोजें",
        "bydate": "तिथि अनुसार",
index c4f039e..caa8d29 100644 (file)
        "blockip": "Sadasya ke roko",
        "blockip-legend": "Sadasya ke roko",
        "blockiptext": "Niche ke form ke use kar ke koi khaas IP address nai to username ke write access ke roko.\nIske khaali vandalism ke roke ke khatir use kare ke chaahi [[{{MediaWiki:Policy-url}}|policy]] ke niche.\nNiche ek khaas kaaran likho (jaise ki, citing particular pages that were vandalized).",
-       "ipadressorusername": "IP Address nai to username:",
+       "ipaddressorusername": "IP Address nai to username:",
        "ipbexpiry": "Expiry:",
        "ipbreason": "Kaaran:",
        "ipbreason-dropdown": "*Roke ke sadhaarankaaran\n** Galat jaankari diis\n** Panna se jaankari nikalis\n** Bahaari site se spamming jorr\n** Panna me bakwaas/and sand liko\n** Duusre ke dhamki do\n** Ek se jaada account ke khraab kaam me laao\n** Sadasya ke naam thiik nai hae",
        "newimages-summary": "Ii khaas panna pahile waala upload karaa gais file ke dekhae hai.",
        "newimages-legend": "Chaalo",
        "newimages-label": "Filename (nai to iske ek hissa):",
-       "showhidebots": "($1 bots)",
        "noimages": "Koi chij dekhe ke nai hai.",
        "ilsubmit": "Khojo",
        "bydate": "tarik se",
index 0954165..204d5b0 100644 (file)
        "contributions-title": "Suradnički doprinosi za $1",
        "mycontris": "Moji doprinosi",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Suradnički račun \"$1\" nije registriran.",
        "nocontribs": "Nema promjena koje udovoljavaju ovim kriterijima.",
        "uctop": "(vrh)",
        "month": "Od mjeseca (i ranije):",
        "blockip": "Blokiraj suradnika",
        "blockip-legend": "Blokiraj suradnika",
        "blockiptext": "Koristite donji obrazac za blokiranje pisanja pojedinih suradnika ili IP adresa .\nTo biste trebali raditi samo zbog sprječavanja vandalizma i u skladu\nsa [[{{MediaWiki:Policy-url}}|smjernicama]].\nUpišite i razlog za ovo blokiranje (npr. stranice koje su\nvandalizirane).",
-       "ipadressorusername": "IP adresa ili suradničko ime",
+       "ipaddressorusername": "IP adresa ili suradničko ime",
        "ipbexpiry": "Rok (na engleskom)",
        "ipbreason": "Razlog:",
        "ipbreason-dropdown": "*Najčešći razlozi za blokiranje\n** Netočne informacije\n** Uklanjanje sadržaja stranica\n** Postavljanje ''spam'' vanjskih poveznica\n** Grafiti\n** Osobni napadi (ili napadačko ponašanje)\n** Čarapare (zloporaba više suradničkih računa)\n** Neprihvatljivo suradničko ime",
        "newimages-summary": "Ova posebna stranica pokazuje posljednje nedavno postavljene datoteke.",
        "newimages-legend": "Filtar",
        "newimages-label": "Naziv datoteke (ili njen dio):",
-       "showhidebots": "($1 botova)",
        "noimages": "Nema slika.",
        "ilsubmit": "Traži",
        "bydate": "po datumu",
index d090924..583721f 100644 (file)
        "edit-gone-missing": "Die Seit konnt net aktualisiert sin.\nDie woard oonscheinend gelöscht.",
        "edit-conflict": "Beoorbeitungskonflikt.",
        "edit-no-change": "Dein Beoorbeitung woard ignoriert, do ken Ännrung an dem Text voargenomm  woard.",
+       "postedit-confirmation-created": "Die Seit woard erstellt.",
+       "postedit-confirmation-restored": "Die Seit woard wiederhergestellt.",
        "postedit-confirmation-saved": "Dein Beoorbeitung woard gespeichert.",
        "edit-already-exists": "Die neie Seit konnt net erstellt werre, do sie bereits voarhand ist.",
        "defaultmessagetext": "Standardtext",
        "action-createpage": "Seite zu erstelle",
        "action-createtalk": "Diskussionsseite erstelle",
        "action-createaccount": "der Benutzerkonto erstelle",
+       "action-history": "die Versionsgeschichte von der Seit oonsiehen",
        "action-minoredit": "die Beoorbeitung als klen markiere",
        "action-move": "die Seit verschiebe",
        "action-move-subpages": "die Seit und zugehöriche Unnerseite verschiebe",
        "pageswithprop-prophidden-binary": "Binäreichenschaftsweart versteckt ($1)",
        "doubleredirects": "Doppelte Weiterleitunge",
        "doubleredirectstext": "Diese Liste enthält Weiterleitungen, die auf Weiterleitungen verlinken.\nJede Zeile enthält Links zur ersten und zweiten Weiterleitung sowie dem Ziel der zweiten Weiterleitung, welches für gewöhnlich die gewünschte Zielseite ist, auf die bereits die erste Weiterleitung zeigen sollte.\n<del>Durchgestrichene</del> Einträge wurden bereits erfolgreich bearbeitet.",
-       "double-redirect-fixed-move": "[[$1]] woard verschub und leitet jetzt noh [[$2]] weiter.",
-       "double-redirect-fixed-maintenance": "Bereinichung von der doppelte Weiterleitung von [[$1]] noh [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] woard verschub. Die Seit woard automatisch aktualisiert und leitet jetzt noh [[$2]] weiter.",
+       "double-redirect-fixed-maintenance": "Automatische Bereinichung von der doppelte Weiterleitung von [[$1]] noh [[$2]] in enem Woortungsufftrooch.",
        "double-redirect-fixer": "RedirectBot",
        "brokenredirects": "Defekte Weiterleitunge",
        "brokenredirectstext": "Die Spezialseit listiert Weiterleitung uff net existierende Seite uff.",
        "blockip": "IP-Adress/Benutzer sperre",
        "blockip-legend": "IP-Adress/Benutzer sperre",
        "blockiptext": "Mit dem Formular sperrst du en IP-Adress orrer en Benutzernoome, so dass von dort ken Ännrunge meh voargenomm sin könne.\nDas sollt nuar erfolche, um Vandalismus zu verhinnre und in Üwereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinie]].\nBittschön tue den Grund für die Sperr gebe.",
-       "ipadressorusername": "IP-Adress orrer Benutzernoome:",
+       "ipaddressorusername": "IP-Adress orrer Benutzernoome:",
        "ipbexpiry": "Sperrdauer:",
        "ipbreason": "Grund:",
        "ipbreason-dropdown": "* Allgemein Sperrgründe\n** Infüchung von falscher Informatione\n** Leere von Seite\n** Massweises infüchung von externer Links\n** Instellung von unsinnicher Inhalte in Seite\n** Ungebührliches Verhalte\n** Missbrauch mit mehrre Benutzerkonte\n** Ungeeichneter Benutzernoome",
        "newimages-summary": "Die Spezialseit tut die zuletzt hochgeloodne Dateie oonzeiche.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateinoome (orrer ein Tel davon):",
-       "showhidebots": "(Bots $1)",
        "noimages": "Kene Dateie gefund.",
        "ilsubmit": "Suche",
        "bydate": "noh Datum",
        "htmlform-no": "Ne, nein",
        "htmlform-yes": "Jo",
        "htmlform-chosen-placeholder": "Wähl ein Option",
+       "htmlform-cloner-create": "Weitre dozu tun",
+       "htmlform-cloner-delete": "Entferne",
+       "htmlform-cloner-required": "Es ist minschtens en Weart erforderlich.",
        "sqlite-has-fts": "Version $1 mit Unnerstützung für die Volltextsuch",
        "sqlite-no-fts": "Version $1 ohne Unnerstützung für die Volltextsuch",
        "logentry-delete-delete": "$1 {{GENDER:$2|löschte}} Seit $3",
index dfe8d8c..1951eaf 100644 (file)
        "action-createpage": "strony wutworić",
        "action-createtalk": "diskusijne strony wutworić",
        "action-createaccount": "wužiwarske konto załožić",
+       "action-history": "historiju tuteje strony pokazać",
        "action-minoredit": "tutu změnu jako snadnu markěrować",
        "action-move": "tutu stronu přesunyć",
        "action-move-subpages": "tutu stronu a jeje podstrony přesunyć",
        "blockip": "Wužiwarja zablokować",
        "blockip-legend": "Wužiwarja blokować",
        "blockiptext": "Wužij slědowacy formular deleka, zo by pisanski přistup za podatu IP-adresu abo wužiwarske mjeno blokował. To měło so jenož stać, zo by wandalizmej zadźěwało a woptpowědujo [[{{MediaWiki:Policy-url}}|zasadam]]. Zapodaj deleka přičinu (na př. citujo wosebite strony, kotrež běchu z woporom wandalizma).",
-       "ipadressorusername": "IP-adresa abo wužiwarske mjeno",
+       "ipaddressorusername": "IP-adresa abo wužiwarske mjeno",
        "ipbexpiry": "Spadnjenje",
        "ipbreason": "Přičina:",
        "ipbreason-dropdown": "*powšitkowne přičiny\n** wandalizm\n** wutworjenje njezmyslnych stronow\n** linkspam\n** wobobinske nadběhi\n*specifiske přičiny\n** njepřihódne wužiwarske mjeno\n** znowapřizjewjenje na přeco zablokowaneho wužiwarja\n** proksy, wandalizma jednotliwych wužiwarjow dla dołhodobnje zablokowany",
        "newimages-summary": "Tuta specialna strona naliči aktualnje nahrate wobrazy a druhe dataje.",
        "newimages-legend": "Filter",
        "newimages-label": "Datajowe mjeno (abo dźěl z njeho):",
-       "showhidebots": "(bots $1)",
        "noimages": "Žane dataje.",
        "ilsubmit": "Pytać",
        "bydate": "datumje",
        "htmlform-no": "Ně",
        "htmlform-yes": "Haj",
        "htmlform-chosen-placeholder": "Wubjer móžnosć",
-       "htmlform-cloner-create": "Wjcace přidać",
+       "htmlform-cloner-create": "Wjace přidać",
        "htmlform-cloner-delete": "Wotstronić",
        "htmlform-cloner-required": "Znjamjeńša jedna hódnota je trěbna.",
        "sqlite-has-fts": "$1 połnotekstowe pytanje podpěruje.",
index 595081a..81a3c5b 100644 (file)
        "editundo": "visszavonás",
        "diff-empty": "(Nincs különbség)",
        "diff-multi-sameuser": "({{PLURAL:$1|Egy közbenső módosítás|$1 közbenső módosítás}} ugyanattól a szerkesztőtől nincs mutatva)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Egy közbenső módosítás|$1 közbenső módosítás}}, amit {{PLURAL:$2|egy másik szerkesztő végzett|$2 másik szerkesztő végzett}}, nincs mutatva)",
        "diff-multi-manyusers": "({{PLURAL:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva, amit $2 szerkesztő módosított)",
        "difference-missing-revision": "A(z) \"{{PAGENAME}}\" nevű oldal #$1 $2 változata nem létezik.\n\nEzt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás használata okozza. Részletek a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatóak.",
        "searchresults": "A keresés eredménye",
        "blockip": "Blokkolás",
        "blockip-legend": "Felhasználó blokkolása",
        "blockiptext": "Az alábbi űrlap segítségével megvonhatod egy szerkesztő vagy IP-cím szerkesztési jogait.\nÜgyelj rá, hogy az intézkedésed mindig legyen tekintettel a vonatkozó [[{{MediaWiki:Policy-url}}|irányelvekre]].\nAdd meg a blokkolás okát is (például idézd a blokkolandó személy által vandalizált lapokat).",
-       "ipadressorusername": "IP-cím vagy felhasználói név",
+       "ipaddressorusername": "IP-cím vagy felhasználói név",
        "ipbexpiry": "Lejárat:",
        "ipbreason": "Ok:",
        "ipbreason-dropdown": "*Gyakori blokkolási okok\n** Téves információ beírása\n** Lapok tartalmának eltávolítása\n** Spammelgetés, reklámlinkek tömködése a lapokba\n** Értelmetlen megjegyzések, halandzsa beillesztése a cikkekbe\n** Megfélemlítő viselkedés, zaklatás\n** Több szerkesztői fiókkal való visszaélés\n** Elfogadhatatlan azonosító",
        "newimages-summary": "Ezen a speciális lapon láthatóak a legutóbb feltöltött fájlok.",
        "newimages-legend": "Fájlnév",
        "newimages-label": "Fájlnév (vagy annak részlete):",
-       "showhidebots": "(botok szerkesztéseinek $1)",
        "noimages": "Nem tekinthető meg semmi.",
        "ilsubmit": "Keresés",
        "bydate": "dátum szerint",
index ac2e3f3..ce10d7e 100644 (file)
        "blockip": "Մասնակցի արգելափակում",
        "blockip-legend": "Մասնակցի արգելափակում",
        "blockiptext": "Օգտագործեք ստորև բերված ձևը որոշակի IP-հասցեից կամ մասնակցի անունից գրելու հնարավորությունը արգելափակելու համար։\nՆման բան հարկավոր է անել միայն վանդալության կանխարգելման նպատակով և համաձայն [[{{MediaWiki:Policy-url}}|կանոնակարգի]]։\nՆշեք արգելափակման որոշակի պատճառը ստորև (օրինակ՝ նշեք այն էջը, որում վանդալություն է տեղի ունեցել)։",
-       "ipadressorusername": "IP-հասցե կամ մասնակցի անուն.",
+       "ipaddressorusername": "IP-հասցե կամ մասնակցի անուն.",
        "ipbexpiry": "Մարման ժամկետ.",
        "ipbreason": "Պատճառ.",
        "ipbreason-dropdown": "*Արգելափակման սովորական պատճառներ\n** Կեղծ տեղեկությունների ներմուծում\n** Էջերից նյութերի հեռացում\n** Արտաքին կայքերին հղումների սպամ\n** Անիմաստ/անկապ տեքստի ներմուծում էջերում\n** Վարկաբեկող/ահաբեկող պահվածք\n** Բազմաթիվ մասնակցային հաշիվների չարաշահում\n** Անպատշաճ մասնակցի անուն",
        "newimages": "Նոր նիշքերի սրահ",
        "imagelisttext": "Ստորև բերված է '''$1''' {{PLURAL:$1|նիշքի}} ցանկ՝ դասավորված ըստ $2։",
        "newimages-legend": "Ֆիլտր",
-       "showhidebots": "($1 բոտերին)",
        "noimages": "Տեսնելու բան չկա։",
        "ilsubmit": "Որոնել",
        "bydate": "ըստ ամսաթվի",
index da12405..bd1d41e 100644 (file)
        "blockip": "Blocar usator",
        "blockip-legend": "Blocar usator",
        "blockiptext": "Usa le formulario infra pro blocar le accesso de scriptura\na partir de un adresse IP specific.\nIsto debe esser facite solmente pro impedir vandalismo, e de\naccordo con le [[{{MediaWiki:Policy-url}}|politica de {{SITENAME}}]].\nScribe un motivo specific infra (per exemplo, citante paginas\nspecific que ha essite vandalisate).",
-       "ipadressorusername": "Adresse IP o nomine de usator:",
+       "ipaddressorusername": "Adresse IP o nomine de usator:",
        "ipbexpiry": "Expiration:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Motivos frequente pro blocar\n** Insertion de informationes false\n** Elimination de contento de paginas\n** Ligamines ''spam'' verso sitos externe\n** Insertion de nonsenso/absurditates in paginas\n** Comportamento intimidatori/molestation\n** Abuso de contos multiple\n** Nomine de usator inacceptabile",
        "newimages-summary": "Iste pagina special detalia le recente files incargate.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nomine del file (o un parte de illo):",
-       "showhidebots": "($1 bots)",
        "noimages": "Nihil a vider.",
        "ilsubmit": "Cercar",
        "bydate": "per data",
index ba8a253..06614e1 100644 (file)
        "protectedpages-unknown-timestamp": "Tidak diketahui",
        "protectedpages-unknown-performer": "Pengguna yang tidak diketahui",
        "protectedtitles": "Judul yang dilindungi",
+       "protectedtitles-summary": "Halaman ini mendaftarkan judul-judul yang saat ini dilindungi dari pembuatan. Untuk daftar halaman yang sudah ada dan dilindungi, lihat [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Tidak ada judul yang dilindungi.",
        "listusers": "Daftar pengguna",
        "listusers-editsonly": "Tampilkan hanya pengguna yang memiliki kontribusi",
        "listgrouprights-namespaceprotection-namespace": "Ruang nama",
        "listgrouprights-namespaceprotection-restrictedto": "Hak yang mengizinkan pengguna untuk menyunting",
        "trackingcategories": "Kategori pelacak",
+       "trackingcategories-summary": "Halaman ini mendaftarkan kategori-kategori pelacak yang secara otomatis dibuat oleh perangkat lunak MediaWiki. Nama kategori ini dapat diubah dengan mengubah pesan sistem yang sesuai dalam ruang nama {{ns:8}}.",
        "trackingcategories-msg": "Kategori pelacak",
        "trackingcategories-name": "Nama pesan",
        "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.",
        "post-expand-template-inclusion-category-desc": "Setelah memperluas semua templat, ukuran halaman menjadi lebih besar dari <code>$wgMaxArticleSize</code>, sehingga beberapa templat tidak diperluas.",
        "broken-file-category-desc": "Kategori ditambahkan jika halaman tersebut berisi pranala rusak (pranala untuk menanamkan sebuah berkas ketika berkas tersebut tidak ada).",
        "trackingcategories-nodesc": "Deskripsi tidak tersedia.",
        "protect-locked-blocked": "Anda tak dapat mengganti tingkat pelindungan selagi diblokir. Berikut adalah konfigurasi saat ini untuk halaman '''$1''':",
        "protect-locked-dblock": "Tingkat pelindungan tak dapat diganti karena aktifnya penguncian basis data. Berikut adalah konfigurasi saat ini untuk halaman '''$1''':",
        "protect-locked-access": "Akun Anda tidak dapat memiliki hak untuk mengganti tingkat pelindungan halaman. Berikut adalah konfigurasi saat ini untuk halaman '''$1''':",
-       "protect-cascadeon": "Halaman ini sedang dilindungi karena disertakan dalam {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan pilihan pelindungan runtun diaktifkan. Anda dapat mengganti tingkat pelindungan untuk halaman ini, tapi hal tersebut tidak akan mempengaruhi pelindungan runtun.",
+       "protect-cascadeon": "Halaman ini sedang dilindungi karena disertakan dalam {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan pilihan pelindungan runtun diaktifkan.\nPenggantian tingkat pelindungan untuk halaman ini tidak akan mempengaruhi pelindungan runtun.",
        "protect-default": "Izinkan semua pengguna",
        "protect-fallback": "Hanya untuk pengguna dengan izin  \"$1\"",
        "protect-level-autoconfirmed": "Hanya untuk pengguna terdaftar otomatis",
        "blockip": "Blokir pengguna",
        "blockip-legend": "Blokir pengguna",
        "blockiptext": "Gunakan formulir di bawah untuk memblokir akses penulisan dari sebuah alamat IP atau pengguna tertentu.\nIni hanya boleh dilakukan untuk mencegah vandalisme, dan sejalan dengan [[{{MediaWiki:Policy-url}}|kebijakan]].\nMasukkan alasan Anda di bawah (contoh, menuliskan nama halaman yang telah divandalisasi).",
-       "ipadressorusername": "Alamat IP atau nama pengguna:",
+       "ipaddressorusername": "Alamat IP atau nama pengguna:",
        "ipbexpiry": "Kedaluwarsa:",
        "ipbreason": "Alasan:",
        "ipbreason-dropdown": "*Alasan umum\n** Vandalisme\n** Memberikan informasi palsu\n** Menghilangkan isi halaman\n** Spam pranala ke situs luar\n** Memasukkan omong kosong ke halaman\n** Perilaku intimidasi/pelecehan\n** Menyalahgunakan beberapa akun\n** Nama pengguna tak layak",
        "range_block_disabled": "Kemampuan pengurus dalam membuat blokir blok IP dimatikan.",
        "ipb_expiry_invalid": "Waktu kedaluwarsa tidak sah.",
        "ipb_expiry_temp": "Pemblokiran atas nama pengguna yang disembunyikan harus permanen.",
-       "ipb_hide_invalid": "Tak dapat menutup akun ini; mungkin akun tersebut memiliki terlalu banyak suntingan.",
+       "ipb_hide_invalid": "Tak dapat menutup akun ini; akun tersebut memiliki {{PLURAL:$1|satu suntingan|$1 suntingan}}.",
        "ipb_already_blocked": "\"$1\" telah diblokir",
        "ipb-needreblock": "$1 sudah diblokir. Apakah Anda ingin mengubah set pemblokiran yang bersangkutan?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Blok|Blok}} lain",
        "newimages-summary": "Halaman istimewa berikut menampilkan daftar berkas yang terakhir dimuat",
        "newimages-legend": "Penyaring",
        "newimages-label": "Nama berkas (atau sebagian dari nama berkas):",
-       "showhidebots": "($1 bot)",
        "noimages": "Tidak ada yang dilihat.",
        "ilsubmit": "Cari",
        "bydate": "berdasarkan tanggal",
        "htmlform-yes": "Ya",
        "htmlform-chosen-placeholder": "Pilih opsi",
        "htmlform-cloner-create": "Tambahkan lebih banyak",
+       "htmlform-cloner-delete": "Hapus",
        "htmlform-cloner-required": "Paling sedikit satu nilai diperlukan.",
        "sqlite-has-fts": "$1 dengan dukungan pencarian teks lengkap",
        "sqlite-no-fts": "$1 tanpa dukungan pencarian teks lengkap",
index 6fee47c..715a939 100644 (file)
        "blockip": "Serraan ti agar-aramat",
        "blockip-legend": "Serraan ti agar-aramat",
        "blockiptext": "Usaren ti kinabuklan dita baba tapno maserraan ti panagsurat manipud iti naisangayan nga IP a pagtaengan wenno nagan ti agar-aramat.\nUsaren laeng daytoy tapno pawilan ti bandalismo, ken panagtunos iti [[{{MediaWiki:Policy-url}}|annuroten]].\nIkkan ti naisangayan a rason dita baba (kas pagarigan, dakamaten ti maysa a panid a na-bandalismo) .",
-       "ipadressorusername": "IP a pagtaengan wenno nagan ti agar-aramat:",
+       "ipaddressorusername": "IP a pagtaengan wenno nagan ti agar-aramat:",
        "ipbexpiry": "Agpaso:",
        "ipbreason": "Rason:",
        "ipbreason-dropdown": "*Dagiti kadawyan a rason ti panagserra\n** Agikabil kadagiti  madi a pakaammo\n** Agikkat kadagiti linaon ti pampanid\n** Agikabil ti spam a silpo iti ruar\n** Agikabil ti minamaag/saan a maawatan a pampanid\n** Nabutbuteng a panagkukua /agriribok\n** Agab-abuso kadagiti sabsabali a pakabilangan\n** Saan a maawat a nagan ti agar-aramat",
        "newimages-summary": "Daytoy nga espesial a panid ket ipakitana ti kinaudi a pinag-ipan kadagiti papeles.",
        "newimages-legend": "Sagat",
        "newimages-label": "Nagan ti papeles (wenno paset na) :",
-       "showhidebots": "($1 dagiti bot)",
        "noimages": "Awan ti makita.",
        "ilsubmit": "Biruken",
        "bydate": "babaen ti petsa",
index 372c607..d7a1e69 100644 (file)
        "blockip": "Banna notanda",
        "blockip-legend": "Banna notanda",
        "blockiptext": "Notaðu eyðublaðið hér að neðan til þess að banna ákveðið vistfang eða notandanafn.\nÞetta ætti einungis að gera til þess að koma í veg fyrir skemmdarverk, og í samræmi við [[{{MediaWiki:Policy-url}}|samþykktir]].\nGefðu nákvæma skýringu að neðan (til dæmis, með því að vísa í þær síður sem skemmdar voru).",
-       "ipadressorusername": "Vistfang eða notandanafn:",
+       "ipaddressorusername": "Vistfang eða notandanafn:",
        "ipbexpiry": "Bannið rennur út:",
        "ipbreason": "Ástæða:",
        "ipbreason-dropdown": "* Algengar bannástæður\n** Setur inn rangar upplýsingar\n** Fjarlægir efni af síðum\n** Setur inn rusltengla á utanaðkomandi síður\n** Setur inn vitleysu/þvaður á síður\n** Yfirþyrmandi framkoma/áreitni\n** Misnotkun á fjölda notandanafna\n** Óásættanlegt notandanafn",
        "newimages-summary": "Þessi kerfissíða sýnir nýlega innhlaðnar skrár.",
        "newimages-legend": "Sía",
        "newimages-label": "Skráarnafn (eða hluti þess):",
-       "showhidebots": "($1 vélmenni)",
        "noimages": "Ekkert að sjá.",
        "ilsubmit": "Leita",
        "bydate": "eftir dagsetningu",
index 3ee6d15..7daf6f8 100644 (file)
        "action-createpage": "creare pagine",
        "action-createtalk": "creare pagine di discussione",
        "action-createaccount": "effettuare questa registrazione",
+       "action-history": "vedere la cronologia di questa pagina",
        "action-minoredit": "segnare questa modifica come minore",
        "action-move": "spostare questa pagina",
        "action-move-subpages": "spostare questa pagina e le relative sottopagine",
        "blockip": "Blocco utente",
        "blockip-legend": "Blocca l'utente",
        "blockiptext": "Usare il modulo sottostante per bloccare l'accesso in scrittura a uno specifico indirizzo IP o un utente registrato.\nIl blocco dev'essere operato per prevenire atti di vandalismo e in stretta osservanza della [[{{MediaWiki:Policy-url}}|policy di {{SITENAME}}]].\nIndicare il motivo specifico per il quale si procede al blocco (per esempio, citando i titoli di eventuali pagine oggetto di vandalismo).",
-       "ipadressorusername": "Indirizzo IP o nome utente:",
+       "ipaddressorusername": "Indirizzo IP o nome utente:",
        "ipbexpiry": "Scadenza del blocco:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Motivazioni più comuni per i blocchi\n** Inserimento di informazioni false\n** Rimozione di contenuti dalle pagine\n** Collegamenti promozionali a siti esterni\n** Inserimento di contenuti privi di senso\n** Comportamenti intimidatori o molestie\n** Uso indebito di utenze multiple\n** Nome utente non consono",
        "newimages-summary": "Questa pagina speciale mostra i file caricati più di recente.",
        "newimages-legend": "Filtra",
        "newimages-label": "Nome file (o una parte di esso):",
-       "showhidebots": "($1 i bot)",
+       "newimages-showbots": "Mostra caricamenti di bot",
        "noimages": "Non c'è nulla da vedere.",
        "ilsubmit": "Ricerca",
        "bydate": "per data",
        "compare-submit": "Confronta",
        "compare-invalid-title": "Il titolo che hai specificato non è valido.",
        "compare-title-not-exists": "Il titolo che hai specificato non esiste.",
-       "compare-revision-not-exists": "La revisione che hai specificato non esiste.",
+       "compare-revision-not-exists": "La versione che hai specificato non esiste.",
        "dberr-problems": "Questo sito sta avendo dei problemi tecnici.",
        "dberr-again": "Prova ad attendere qualche minuto e ricaricare.",
        "dberr-info": "(Impossibile contattare il server del database: $1)",
        "htmlform-no": "No",
        "htmlform-yes": "Sì",
        "htmlform-chosen-placeholder": "Seleziona un'opzione",
+       "htmlform-cloner-create": "Aggiungi altro",
+       "htmlform-cloner-delete": "Rimuovi",
+       "htmlform-cloner-required": "È necessario almeno un valore.",
        "sqlite-has-fts": "$1 con la possibilità di ricerca completa nel testo",
        "sqlite-no-fts": "$1 senza la possibilità di ricerca completa nel testo",
        "logentry-delete-delete": "$1 {{GENDER:$2|ha cancellato}} la pagina $3",
index 819efe8..4572762 100644 (file)
@@ -57,7 +57,8 @@
                        "欅",
                        "蝋燭α",
                        "青子守歌",
-                       "아라"
+                       "아라",
+                       "Rxy"
                ]
        },
        "tog-underline": "リンクの下線:",
        "jumptonavigation": "案内",
        "jumptosearch": "検索",
        "view-pool-error": "申し訳ありませんが、現在サーバーに過大な負荷がかかっています。\nこのページを閲覧しようとする利用者が多すぎます。\nしばらく時間を置いてから、もう一度このページにアクセスしてみてください。\n\n$1",
+       "generic-pool-error": "申し訳ありませんが、現在サーバーに過大な負荷がかかっています。\nこのページを閲覧しようとする利用者が多すぎます。\nしばらく時間を置いてから、もう一度このリソースにアクセスしてみてください。",
        "pool-timeout": "ロック待ちタイムアウト",
        "pool-queuefull": "プールキューがいっぱいです",
        "pool-errorunknown": "不明なエラー",
        "action-createpage": "ページの作成",
        "action-createtalk": "議論ページの作成",
        "action-createaccount": "この利用者アカウントの作成",
+       "action-history": "このページの履歴の閲覧",
        "action-minoredit": "細部の編集の印を付ける",
        "action-move": "このページの移動",
        "action-move-subpages": "このページとその下位ページの移動",
        "doubleredirects": "二重転送",
        "doubleredirectstext": "このページでは、転送ページへの転送ページを列挙します。\n最初の転送ページ、その転送先にある転送ページ、さらにその転送先にあるページ、それぞれへのリンクを各行に表示しています。多くの場合は最終的な転送先が「正しい」転送先であり、最初の転送ページの転送先は最終的な転送先に直接向けるべきです。\n<del>取り消し線</del>が入った項目は解決済みです。",
        "double-redirect-fixed-move": "[[$1]]を移動しました。\n今後は[[$2]]に転送されます。",
-       "double-redirect-fixed-maintenance": "[[$1]]から[[$2]]への二重転送を修正します。",
+       "double-redirect-fixed-maintenance": "メンテナンス作業の一環として[[$1]]から[[$2]]への二重転送を自動的に修正します。",
        "double-redirect-fixer": "転送修正係",
        "brokenredirects": "迷子のリダイレクト",
        "brokenredirectstext": "以下は、存在しないページへのリダイレクトの一覧です:",
        "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-summary": "このページでは、MediaWiki ソフトウェアが自動的に追加した追跡用カテゴリを列挙します。これらの名前は、{{ns:8}} 名前空間内の対応するシステム メッセージを修正することで変更できます。",
        "trackingcategories-msg": "追跡用カテゴリ",
        "trackingcategories-name": "メッセージ名",
+       "trackingcategories-desc": "カテゴリに入る基準",
        "post-expand-template-inclusion-category-desc": "テンプレートを展開したあとのページ サイズが <code>$wgMaxArticleSize</code> よりも大きいため、一部のテンプレートが展開されなかった",
        "post-expand-template-argument-category-desc": "テンプレート引数 (<code>{{{Foo}}}</code> のような三重中括弧部分) を展開したあとのページが <code>$wgMaxArticleSize</code> よりも大きい",
        "expensive-parserfunction-category-desc": "高負荷なパーサー関数 (<code>#ifexist</code> など) の呼び出し回数が多過ぎるページ。[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] を参照してください。",
        "broken-file-category-desc": "リンク切れしたファイルを含むページ (ファイルを埋め込むリンクがあり、そのファイルが存在しない) に追加されるカテゴリ",
        "hidden-category-category-desc": "<code><nowiki>__HIDDENCAT__</nowiki></code> を含むカテゴリ。このカテゴリは、既定ではページのカテゴリ リンク ボックス内に表示されません。",
        "trackingcategories-nodesc": "説明はありません。",
+       "trackingcategories-disabled": "このカテゴリは無効化されています",
        "mailnologin": "送信アドレスがありません",
        "mailnologintext": "他の利用者宛にメールを送信するためには、[[Special:UserLogin|ログイン]]し、[[Special:Preferences|個人設定]]で有効なメールアドレスを設定する必要があります。",
        "emailuser": "この利用者にメールを送信",
        "blockip": "利用者をブロック",
        "blockip-legend": "利用者をブロック",
        "blockiptext": "以下のフォームを使用して、指定したIPアドレスまたは利用者からの書き込みアクセスをブロックできます。\nこのような措置は、荒らしからの防御の目的のみに行われるべきで、また[[{{MediaWiki:Policy-url}}|方針]]に沿ったものであるべきです。\n以下にブロックの理由を具体的に書いてください (例えば、荒らされたページへの言及など)。",
-       "ipadressorusername": "IPアドレスまたは利用者名:",
+       "ipaddressorusername": "IPアドレスまたは利用者名:",
        "ipbexpiry": "有効期限:",
        "ipbreason": "理由:",
        "ipbreason-dropdown": "*よくあるブロック理由\n** 虚偽情報の挿入\n** ページから内容の除去\n** 外部サイトへのスパムリンク追加\n** ページへ無意味な/意味不明な内容の挿入\n** 威圧的な態度/嫌がらせ\n** 複数アカウントの不正利用\n** 不適切な利用者名",
        "expiringblock": "$1$2に解除",
        "anononlyblock": "匿名利用者のみ",
        "noautoblockblock": "自動ブロック無効",
-       "createaccountblock": "ã\82¢ã\82«ã\82¦ã\83³ã\83\88ä½\9cæ\88\90ã\81®禁止",
-       "emailblock": "ã\83¡ã\83¼ã\83«é\80\81ä¿¡ã\81®禁止",
+       "createaccountblock": "ã\82¢ã\82«ã\82¦ã\83³ã\83\88ä½\9cæ\88\90ã\82\82禁止",
+       "emailblock": "ã\83¡ã\83¼ã\83«é\80\81ä¿¡ã\82\82禁止",
        "blocklist-nousertalk": "自分のトークページも編集禁止",
        "ipblocklist-empty": "ブロック一覧は空です。",
        "ipblocklist-no-results": "指定されたIPアドレスまたは利用者名はブロックされていません。",
        "reblock-logentry": "が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細: $3",
        "blocklogtext": "このページは利用者のブロックと解除の記録です。\n自動的にブロックされたIPアドレスは表示されていません。\n現時点で有効なブロックは[[Special:BlockList|ブロックの一覧]]をご覧ください。",
        "unblocklogentry": "$1のブロックを解除しました",
-       "block-log-flags-anononly": "匿名利用者のみ",
-       "block-log-flags-nocreate": "アカウント作成禁止",
+       "block-log-flags-anononly": "対象ã\81¯å\8c¿å\90\8då\88©ç\94¨è\80\85ã\81®ã\81¿",
+       "block-log-flags-nocreate": "アカウント作成禁止",
        "block-log-flags-noautoblock": "自動ブロック無効",
        "block-log-flags-noemail": "メール送信禁止",
-       "block-log-flags-nousertalk": "è\87ªå\88\86ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81®編集禁止",
+       "block-log-flags-nousertalk": "è\87ªå\88\86ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\82編集禁止",
        "block-log-flags-angry-autoblock": "拡張自動ブロック有効",
        "block-log-flags-hiddenname": "利用者名の秘匿",
        "range_block_disabled": "範囲ブロックを作成する管理者機能は無効化されています。",
        "newimages-summary": "この特別ページでは、最近アップロードされたファイルを表示します。",
        "newimages-legend": "絞り込み",
        "newimages-label": "ファイル名 (またはその一部):",
-       "showhidebots": "(ボットを$1)",
+       "newimages-showbots": "ボットによるアップロードを表示",
        "noimages": "表示できるものがありません。",
        "ilsubmit": "検索",
        "bydate": "日付順",
index 9f97c70..dc61e25 100644 (file)
        "blockip": "Blokir panganggo",
        "blockip-legend": "Blokir panganggo",
        "blockiptext": "Enggonen formulir ing ngisor iki kanggo mblokir sawijining alamat IP utawa panganggo supaya ora bisa nyunting kaca.\nPrekara iki perlu dilakoni kanggo menggak vandalisme, lan miturut [[{{MediaWiki:Policy-url}}|kawicaksanan {{SITENAME}}]].\nLebokna alesan panjenengan ing ngisor iki (contoné njupuk conto kaca sing wis tau dirusak).",
-       "ipadressorusername": "Alamat IP utawa jeneng panganggo",
+       "ipaddressorusername": "Alamat IP utawa jeneng panganggo",
        "ipbexpiry": "Kadaluwarsa",
        "ipbreason": "Alesan:",
        "ipbreason-dropdown": "*Alesan umum mblokir panganggo\n** Mènèhi informasi palsu\n** Ngilangi isi kaca\n** Spam pranala menyang situs njaba\n** Nglebokaké tulisan ngawur ing kaca\n** Tumindak intimidasi/nglècèhaké\n** Nyalahgunakaké sawetara akun utawa rékening\n** Jeneng panganggo ora layak",
        "newimages-summary": "Kaca astaméwa utawa kusus iki nuduhaké daftar berkas anyar dhéwé sing diunggahaké.",
        "newimages-legend": "Filter",
        "newimages-label": "Jeneng berkas (utawa sapérangan seka jeneng berkas):",
-       "showhidebots": "($1 bot)",
        "noimages": "Ora ana sing dideleng.",
        "ilsubmit": "Golek",
        "bydate": "miturut tanggal",
index 4045ee3..4c8999e 100644 (file)
        "gotaccountlink": "შესვლა",
        "userlogin-resetlink": "ავტორიზაციის მონაცემები დაგავიწყდათ?",
        "userlogin-resetpassword-link": "დაგავიწყდათ პაროლი?",
+       "userlogin-helplink2": "დახმარება:შესვლა",
        "userlogin-createanother": "სხვა ანგარიშის შექმნა",
        "createacct-emailrequired": "ელ. ფოსტის მისამართი",
        "createacct-emailoptional": "ელ. ფოსტის მისამართი (არასავალდებულო)",
        "blockip": "მომხმარებლის ან IP მისამართის ბლოკირება",
        "blockip-legend": "მომხმარებლის დაბლოკვა",
        "blockiptext": "გამოიყენეთ ქვემოთ მოყვანილი ფორმა სპეციფიური IP მისამართის\nან მომხმარებლისთვის რედაქტირების ბლოკირებისთვის.\nამის გაკეთება შეიძლება მხოლოდ ვანდალიზმის ასარიდებლად,\nდა [[{{MediaWiki:Policy-url}}|პოლიტიკასთან]] თანხმობაში.\nჩაწერეთ სპეციფიური მიზეზი ქვემოთ (მაგ. მიუთითეთ გვერდები,\nრომლებზეც ვანდალიზმი განხორციელდა).",
-       "ipadressorusername": "IP მისამართი ან მომხმარებლის სახელი",
+       "ipaddressorusername": "IP მისამართი ან მომხმარებლის სახელი",
        "ipbexpiry": "ვადა",
        "ipbreason": "მიზეზი:",
        "ipbreason-dropdown": "* დაბლოკვის სტანდარტული მიზეზები\n** ცრუ ინფორმაციის ჩამატება\n** გვერდების შინაარსის წაშლა\n** სპამ ბმულები გარე საიტებზე\n** სულელური ტექსტის/ნაგვის ჩამატება\n** დაშინება, მომხმარებელთა დარბევა\n** რამდენიმე ანგარიშის ბოროტად გამოყენება\n** მომხმარებლის მიუღებელი სახელი",
        "newimages-summary": "ეს სპეცგვერდი აჩვენებს ბოლო დროს ატვირთულ ფაილებს.",
        "newimages-legend": "ფილტრი",
        "newimages-label": "ფაილის (ან მისი სახელის) ნაწილი",
-       "showhidebots": "(რობოტების $1)",
        "noimages": "გადასახედი არაფერია.",
        "ilsubmit": "ძიება",
        "bydate": "თარიღით",
index 1dafab6..7737c39 100644 (file)
        "blockip": "Ɛekkel aseqdac",
        "blockip-legend": "Ɛekkel aseqdac",
        "blockiptext": "Seqdec tiferkit ddaw-agi iwakken ad  sewḥeleḍ ineɛruḍen n ubeddel seg yiwet tansa IP tulmist neɣ n yiwen isem umseqdac.\nAsket am wagi, ur ilaq ad yetwexddem kan iwakken ad yeεeggen axeṣṣar dɣa ilaq ad yemtawi s [[{{MediaWiki:Policy-url}}|ilugan igensanen]].\nEfked ddaw-agi taɣẓint tusdidt (amedya : efked isebtar yetwaxeṣṣren).",
-       "ipadressorusername": "Tansa IP neɣ isem n wemseqdac",
+       "ipaddressorusername": "Tansa IP neɣ isem n wemseqdac",
        "ipbexpiry": "Tanzagt uqbel aneffeṛ :",
        "ipbreason": "Ayɣer",
        "ipbreason-dropdown": "* Tiɣẓinin n ukyaf id ttuɣalen aṭas tikwal\n** Taguri n tilɣa n ukellax\n** Tukksa war assefhem n ugbur n isebtar\n** Taguri s uɛiwed n izdayen uffiɣen ɣer idellilen (abluleɣ)\n** Taguri n ugbur war anamek d tursaḍ deg isebtar\n** Aneɛruḍ n umsiged neɣ ubbezbax\n** Tafuli n useqdac n aṭas imiḍanen\n** Isem n umseqdac ur nezmer ara an qbel, d-anergam neɣ d-abucemmat",
        "newimages-summary": "Asebtar agi uslig yebeqqeḍ ifuyla ineggura i kteren.",
        "newimages-legend": "Tastayt",
        "newimages-label": "Isem n ufaylu (naɣ aḥric ines) :",
-       "showhidebots": "($1 iṛubuten)",
        "noimages": "Tugna ulac-itt.",
        "ilsubmit": "Nadi",
        "bydate": "s uzemz",
index 919a5e6..f4b783c 100644 (file)
        "nmembers": "$1 {{PLURAL:$1|eza|ezay}}",
        "nrevisions": "$1 {{PLURAL:$1|çım-ra-viarnais|çım-ra-viarnaişi}}",
        "nviews": "$1 {{PLURAL:$1|vênais|vênaişi}}",
-       "uncategorizedpages": "Pelê kategorizenêkerdey",
+       "uncategorizedpages": "Pelê ke kategorize nêbiyê",
        "prefixindex": "Peli pêro be verbend",
        "shortpages": "Pelê kılmi",
        "longpages": "Pelê dergi",
        "removedwatchtext": "Na pele \"[[:$1]]\" [[Special:Watchlist|lista tuya şêrkerdişi]] ra esteriya.",
        "watch": "Şêr ke",
        "watchthispage": "Na pele de şêr ke",
-       "unwatch": "Endi şêr meke",
+       "unwatch": "Şêr meke",
        "watchlist-details": "Pelunê hurênaişi ra qêri {{PLURAL:$1|$1 pele lista şêrkerdişi dera|$1 peli lista şêrkerdişi derê}}.",
        "wlshowlast": "$1 saetunê $2 rozunê peyênu bıasne $3",
        "watchlist-options": "Alternatifê lista şêrkerdene",
index 09d44ea..8f5d536 100644 (file)
        "searchall": "барлық",
        "showingresults": "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
        "showingresultsnum": "Төменде нөмір '''$2''' орнынан бастап '''$3''' нәтиже көрсетіледі.",
-       "showingresultsheader": "«'''$4'''» үшін {{PLURAL:$5|тек '''$1''' нәтиже табылды|табылған '''$3''' нәтиженің '''$1—$2''' аралығы көрсетілген}}",
+       "showingresultsheader": "«<strong>$4</strong>» сұранысына {{PLURAL:$5|тек <strong>$1</strong> нәтиже табылды|табылған <strong>$3</strong> нәтиженің <strong>$1 - $2</strong> аралығы көрсетілген}}",
        "search-nonefound": "Сұрауға сәйкес нәтижелер табылмады.",
        "powersearch-legend": "Кеңейтілген іздеу",
        "powersearch-ns": "Атау кеңістіктері бойынша іздеу:",
        "booksources-go": "Өту",
        "booksources-text": "Төменде жаңа және қолданған кітаптар сататын тораптарының сілтемелері тізімделген. Бұл тораптарда ізделген кітаптар туралы былайғы ақпарат болуға мүмкін.",
        "specialloguserlabel": "Орындаушы:",
-       "speciallogtitlelabel": "Нысана (тақырып аты немесе қатысушы):",
+       "speciallogtitlelabel": "Нысана (атауы немесе қатысушы):",
        "log": "Журналдар",
        "all-logs-page": "Барлық журналдар",
        "alllogstext": "{{SITENAME}} жобасының барлық қатынаулы журналдарын біріктіріп көрсетуі.\nЖурнал түрін, қатысушы атын (үлкен кішілігін ескеріп), не тиісті бетін бөлектеп, тарылтып қарай аласыз (кейде үлкен кішілігін ескеріп).",
        "blockip": "Қатысушыны бұғаттау",
        "blockip-legend": "Қатысушыны бұғаттау",
        "blockiptext": "Төмендегі форманы жазу рұқсатын белгілі IP мекенжайынан не қатысушы есімінен бұғаттау үшін қолданыңыз.\nБұны тек бұзақылықты болдырмау үшін және де [[{{MediaWiki:Policy-url}}|ережелер]] бойынша атқаруыңыз кажет.\nТөменге тиісті себебін көрсетіңіз (мысалы дәлелге бұзақылықпен өзгертілген беттерді келтіріңіз).",
-       "ipadressorusername": "IP-мекенжайы немесе қатысушы аты:",
+       "ipaddressorusername": "IP-мекенжайы немесе қатысушы аты:",
        "ipbexpiry": "Мерзімі бітпек:",
        "ipbreason": "Себебі:",
        "ipbreason-dropdown": "* Бұғаттаудың жалпы себебтері\n** Жалған мәлімет енгізу\n** Беттердегі мағлұматты аластау\n** Сыртқы сайттар сілтемелерін жаудыру\n** Беттерге мағынасыздық/балдырлау кірістіру\n** Қоқандау/қуғындау мінезқұлық\n** Бірнеше рет тіркеліп қиянаттау\n** Өрескел қатысушы аты",
        "pageinfo-length": "Бет ұзындығы (байтпен)",
        "pageinfo-article-id": "Бет ID-і",
        "pageinfo-language": "Бет мәлімет тілі",
-       "pageinfo-content-model": "Бет мағұлымат қалпы",
+       "pageinfo-content-model": "Бет мағлұмат қалпы",
        "pageinfo-robot-policy": "Индекстеуді робот жүргізеді",
        "pageinfo-robot-index": "Рұқсат берілген",
        "pageinfo-robot-noindex": "Рұқсат етілмеген",
        "imagelisttext": "Төменде $2 сұрыпталған '''$1''' файл тізімі.",
        "newimages-summary": "Бұл арнайы бетте соңғы жүктелген файлдар көрсетіледі",
        "newimages-legend": "Сүзгі",
-       "showhidebots": "(боттарды $1)",
        "noimages": "Көретін ештеңе жоқ.",
        "ilsubmit": "Іздеу",
        "bydate": "күн-айымен",
        "logentry-delete-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін {{GENDER:$2|өзгертті}}: $4",
        "logentry-delete-revision": "$1 $3 бетіндегі {{PLURAL:$5|нұсқа|$5 нұсқа}} көрінісін {{GENDER:$2|өзгертті}}: $4",
        "logentry-suppress-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін құпия түрде {{GENDER:$2|өзгертті}}: $4",
-       "revdelete-content-hid": "мағұлымат жасырылған",
+       "revdelete-content-hid": "мағлұмат жасырылған",
        "revdelete-summary-hid": "өңдеу түйіндемесі жасырылған",
        "revdelete-uname-hid": "қатысушы есімі жасырылған",
        "revdelete-content-unhid": "мағлұматы жасырылмаған",
index 2d8ca6f..fa16fff 100644 (file)
        "blockip": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "blockip-legend": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "blockiptext": "សូម​ប្រើប្រាស់​សំណុំ​បែបបទ​ខាងក្រោម​ដើម្បី​ហាមឃាត់ការសរសេរ​ពី​អាសយដ្ឋាន IP ឬ​ឈ្មោះ​អ្នកប្រើប្រាស់ណាមួយ​។\nការ​ធ្វើ​បែបនេះ​គួរតែ​ធ្វើឡើង​ក្នុង​គោលបំណង​បង្ការ​ការប៉ុនប៉ង​បំផ្លាញ(vandalism)ដូច​ដែល​មាន​ចែង​ក្នុង[[{{MediaWiki:Policy-url}}|គោលការណ៍]]។\nសូមបំពេញមូលហេតុច្បាស់លាស់មួយខាងក្រោម (ឧទាហរណ៍៖ រាយឈ្មោះទំព័រនានាដែលត្រូវបានគេបំផ្លាញ)។",
-       "ipadressorusername": "អាសយដ្ឋានIP ឬអត្តនាម៖",
+       "ipaddressorusername": "អាសយដ្ឋានIP ឬអត្តនាម៖",
        "ipbexpiry": "រយៈពេលផុតកំណត់៖",
        "ipbreason": "មូលហេតុ៖",
        "ipbreason-dropdown": "*មូលហេតុហាមឃាត់ជាទូទៅ\n** ដាក់បញ្ចូលព័ត៌មានមិនពិត\n** ដកខ្លឹមទាំងស្រុងពីទំព័រនានា\n** ដាក់តំណភ្ជាប់ស្ប៉ាមតភ្ជាប់ទៅវិបសៃថ៍ខាងក្រៅ\n** បញ្ចូលខ្លឹមសារគ្មានន័យឬខ្លឹមសារមិនអាចយល់បានទៅក្នុងទំព័រនានា\n** អំពើគំរាមកំហែងឬរំលោភបំពានសិទ្ធិមនុស្ស\n** ប្រើប្រាស់គណនីច្រើនក្នុងគោលបំណងមិនល្អ\n** ប្រើប្រាស់ឈ្មោះដែលមិនអាចទទួលយកបាន",
        "newimages-summary": "ទំព័រពិសេសនេះបង្ហាញឯកសារដែលផ្ទុកឡើងចុងក្រោយគេ។",
        "newimages-legend": "តម្រងការពារ",
        "newimages-label": "ឈ្មោះរូបភាព៖",
-       "showhidebots": "($1រូបយន្ត)",
        "noimages": "គ្មានអ្វីសំរាប់មើលទេ។",
        "ilsubmit": "ស្វែងរក",
        "bydate": "តាមកាលបរិច្ឆេទ",
index 3806315..ecf9516 100644 (file)
@@ -80,9 +80,9 @@
        "tog-prefershttps": "로그인할 때 항상 보안 연결 사용",
        "underline-always": "항상",
        "underline-never": "항상 치지 않기",
-       "underline-default": "스킨 또는 브라우저 기본 값을 따르기",
+       "underline-default": "스킨 또는 브라우저 기본",
        "editfont-style": "편집 창의 글꼴:",
-       "editfont-default": "브라우저 기본 값을 따르기",
+       "editfont-default": "브라우저 기본",
        "editfont-monospace": "고정폭 글꼴",
        "editfont-sansserif": "산세리프 글꼴",
        "editfont-serif": "세리프 글꼴",
        "permissionserrors": "권한 오류",
        "permissionserrorstext": "해당 명령을 수행할 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해보세요:",
        "permissionserrorstext-withaction": "$2 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해주세요:",
-       "recreate-moveddeleted-warn": "'''경고: 삭제된 적이 있는 문서를 다시 만들고 있습니다.'''\n\n이 문서를 계속 편집하는 것이 적합한 것인지 확인해주세요.\n편의를 위해 삭제와 이동 기록을 다음과 같이 제공합니다:",
+       "recreate-moveddeleted-warn": "<strong>경고: 삭제된 문서를 다시 만들고 있습니다.</strong>\n\n이 문서를 계속 편집하는 것이 적합한 것인지 확인해주세요.\n편의를 위해 삭제와 옮기기 기록을 다음과 같이 제공합니다:",
        "moveddeleted-notice": "이 문서는 삭제되었습니다.\n이 문서의 삭제 및 이동 기록은 다음과 같습니다.",
        "log-fulllog": "전체 기록 보기",
        "edit-hook-aborted": "훅에 의해 편집이 중단되었습니다.\n아무런 설명도 주어지지 않았습니다.",
        "prefsnologintext2": "사용자 환경 설정을 설정하려면 $1하십시오.",
        "prefs-skin": "스킨",
        "skin-preview": "미리 보기",
-       "datedefault": "기본 값",
+       "datedefault": "설정하지 않음",
        "prefs-labs": "실험 중인 기능",
        "prefs-user-pages": "사용자 문서",
        "prefs-personal": "사용자 정보",
        "prefs-custom-css": "사용자 CSS",
        "prefs-custom-js": "사용자 자바스크립트",
        "prefs-common-css-js": "모든 스킨에 대한 공통 CSS/자바스크립트:",
-       "prefs-reset-intro": "이 사이트의 기본 값으로 환경 설정을 재설정할 수 있습니다.\n재설정한 환경 설정은 되돌릴 수 없습니다.",
+       "prefs-reset-intro": "이 페이지를 사용해 사이트 기본값으로 환경 설정을 재설정할 수 있습니다.\n이는 되돌릴 수 없습니다.",
        "prefs-emailconfirm-label": "이메일 인증:",
        "youremail": "이메일:",
        "username": "{{GENDER:$1|사용자 이름}}:",
        "uid": "{{GENDER:$1|사용자}} ID:",
        "prefs-memberingroups": "{{GENDER:$2|소속}} {{PLURAL:$1|그룹}}:",
-       "prefs-registration": "ë\93±ë¡\9d ì\9d¼ì\8b\9c:",
+       "prefs-registration": "ë\93±ë¡\9d ì\8b\9cê°\84:",
        "yourrealname": "실명:",
        "yourlanguage": "언어:",
        "yourvariant": "언어 변종:",
        "action-createpage": "문서 만들기",
        "action-createtalk": "토론 문서 만들기",
        "action-createaccount": "새 계정 만들기",
+       "action-history": "이 문서의 역사 보기",
        "action-minoredit": "이 편집을 사소한 편집으로 표시하기",
        "action-move": "이 문서 옮기기",
        "action-move-subpages": "이 문서와 하위 문서를 함께 옮기기",
        "upload_directory_missing": "파일 올리기용 디렉터리($1)가 없고 웹 서버가 만들지 못했습니다.",
        "upload_directory_read_only": "파일 저장 디렉터리($1)에 쓰기 권한이 없습니다.",
        "uploaderror": "올리기 오류",
-       "upload-recreate-warning": "'''경고: ì\9d´ í\8c\8cì\9d¼ë¡\9c ë\90\9c ì\9d´ë¦\84ì\9d´ ì\82­ì \9cë\90\98ì\97\88ê±°ë\82\98 ì\98®ê²¨ì¡\8cì\8aµë\8b\88ë\8b¤.'''\n\nì\9d´ ë¬¸ì\84\9cì\9d\98 ìµ\9cê·¼ ì\82­ì \9c ê¸°ë¡\9dê³¼ ì\9d´ë\8f\99 ê¸°ë¡\9dì\9d\84 ì°¸ê³ í\95\98ì\8b­ì\8b\9cì\98¤:",
+       "upload-recreate-warning": "<strong>경고: í\95´ë\8b¹ ì\9d´ë¦\84ì\9c¼ë¡\9c ë\90\9c í\8c\8cì\9d¼ì\9d´ ì\82­ì \9cë\90\98ì\97\88ê±°ë\82\98 ì\98®ê²¨ì¡\8cì\8aµë\8b\88ë\8b¤.</strong>\n\ní\8e¸ì\9d\98를 ì\9c\84í\95´ ì\9d´ ë¬¸ì\84\9cì\97\90 ë\8c\80í\95\9c ì\82­ì \9cì\99\80 ì\98®ê¸°ê¸° ê¸°ë¡\9dì\9d\84 ë\8b¤ì\9d\8cê³¼ ê°\99ì\9d´ ì \9cê³µí\95©ë\8b\88ë\8b¤:",
        "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|200픽셀|섬네일|왼쪽|설명]]</nowiki></code>''' 파일의 너비를 200픽셀로 하고 왼쪽 정렬하며 '설명' 이라는 주석을 파일 밑에 달 때\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' 파일을 직접 보여주지 않고 파일로 바로 링크할 때",
        "upload-permitted": "허용하는 파일 확장자: $1",
        "upload-preferred": "권장하는 파일 확장자: $1",
        "protectedpages-page": "문서",
        "protectedpages-expiry": "만료 기한",
        "protectedpages-performer": "사용자를 보호",
-       "protectedpages-params": "ë³´í\98¸ ë§¤ê°\9cë³\80ì\88\98",
+       "protectedpages-params": "보호 변수",
        "protectedpages-reason": "이유",
        "protectedpages-unknown-timestamp": "알 수 없음",
        "protectedpages-unknown-performer": "알 수 없는 사용자",
        "blockip": "사용자 차단",
        "blockip-legend": "사용자 차단",
        "blockiptext": "차단할 IP 주소나 사용자 이름을 아래에 적어 주세요.\n차단은 문서 훼손을 막기 위해, [[{{MediaWiki:Policy-url}}|정책]]에 의해서만 이루어져야 합니다.\n차단 이유를 같이 적어주세요(예: 특정 문서 훼손).",
-       "ipadressorusername": "IP 주소 또는 사용자 이름:",
+       "ipaddressorusername": "IP 주소 또는 사용자 이름:",
        "ipbexpiry": "기한:",
        "ipbreason": "이유:",
        "ipbreason-dropdown": "*일반적인 차단 이유\n** 거짓 정보를 넣음\n** 문서 내용을 지움\n** 바깥 사이트의 광고성 링크를 넣음\n** 문서에 장난성 내용을 넣음\n** 협박성 행동\n** 다중 계정 악용\n** 부적절한 사용자 이름",
        "newimages-summary": "이 특수 문서는 최근에 올라온 파일을 나열하고 있습니다.",
        "newimages-legend": "필터",
        "newimages-label": "파일 이름 (또는 그 일부분):",
-       "showhidebots": "(봇을 $1)",
+       "newimages-showbots": "봇이 올린 것 보기",
        "noimages": "그림이 없습니다.",
        "ilsubmit": "검색",
        "bydate": "날짜",
index 7286e94..039f4c9 100644 (file)
        "view": "Къарау",
        "view-foreign": "$1 сайтда къара",
        "edit": "Тюрлендир",
+       "edit-local": "Локал айгъакълауну тюрлендириу",
        "create": "Къура",
        "editthispage": "Бу бетни тюрлендир",
        "create-this-page": "Бу бетни къура",
        "resettokens-tokens": "Токенле:",
        "bold_sample": "Къалын джазыу",
        "bold_tip": "Къалын джазыу",
-       "italic_sample": "Ð\9aÑ\83Ñ\80Ñ\81ив джазыу",
-       "italic_tip": "Ð\9aÑ\83Ñ\80Ñ\81ив джазыу",
+       "italic_sample": "СÑ\91дегей джазыу",
+       "italic_tip": "СÑ\91дегей джазыу",
        "link_sample": "Джибериуню башлыгъы",
        "link_tip": "Ич джибериу",
        "extlink_sample": "http://www.example.com линкни ачыкълауу",
        "blockip": "Бу къошулуучуну блок эт",
        "blockip-legend": "Къошулуучуну блокга салыу",
        "blockiptext": "Тюбюндеги форманы хайырланыб белгили бир IP-ден неда регистрация этилген къошулуучуну тюрлениу этиуюню тыяллыкъсыз. Бу, джангыз вандализмни тыяр ючюн эм [[{{MediaWiki:Policy-url}}|джорукълагъа]] келишиулю этилирге керекди. Тюбюрек тыйыу бла байламлы ангылатыу джазыгъыз. (юлгю: -Бу- бетледе вандализм этилгенди).",
-       "ipadressorusername": "IP-адрес неда къошулуучу ат:",
+       "ipaddressorusername": "IP-адрес неда къошулуучу ат:",
        "ipbexpiry": "Бошаллыкъды (ётсе):",
        "ipbreason": "Чурум:",
        "ipbreason-dropdown": "* Тыйылыуну асламысында тюбеген чурумлары\n** Джалгъан билги къошуу\n** Бетлени ичиндегин кетериу\n** Тыш спам-сайтлагъа джибериу бериу\n** Бетлеге магъанасыз/ангыламсыз джазмала къошуу\n** Къошулуучуланы къоркъутургъа излеу\n** Талай тергеу джазыу къураб аманлыкъгъа хайырланыу\n** Джарамагъан къошулуучу ат",
        "newimages-summary": "Бу къуллукъ бет, кёб болмай джюкленнген файлланы кёргюзеди.",
        "newimages-legend": "Фильтр",
        "newimages-label": "Файлны аты (неда кесеги):",
-       "showhidebots": "($1 бот)",
        "noimages": "Кёрюр зат джокъду",
        "ilsubmit": "Таб",
        "bydate": "Хронологиягъа кёре",
index 180bf1d..504c102 100644 (file)
        "blockip": "Metmaacher sperre",
        "blockip-legend": "Metmaacher ov IP-Adresse Sperre",
        "blockiptext": "Hee kanns De bestemmte Metmaacher oder IP-Adresse sperre, su dat se hee em Wiki nit mieh schrieve und Sigge ändere künne.\nDat sollt nor jedon wääde om sujenannte Vandaale ze bremse. Un mer müsse uns dobei natörlich aan uns [[{{MediaWiki:Policy-url}}|Rejelle]] för esu en Fäll halde.\nDrag bei „Aanlass“ ene möchlichs jenaue Jrund en, wöröm dat Sperre passeet. Nenn un Link op de Sigge wo Einer kapott jemaat hät, zem Beispill.",
-       "ipadressorusername": "<i lang=\"en\">IP</i>-Adress oder Metmaacher Name:",
+       "ipaddressorusername": "<i lang=\"en\">IP</i>-Adress oder Metmaacher Name:",
        "ipbexpiry": "Duur, för wie lang",
        "ipbreason": "Aanlass:",
        "ipbreason-dropdown": "* Alljemein Jrönd för et Sperre\n** hät fekeehte Behouptunge udder Leeje en Atikele jeschrevve\n** hät Sigge fottjeschmesse udder leddig jemaat\n** hält sesch iewesch nit aan de Rejelle övver de Links op anger Websigge un jäje der Link-SPAM\n** hät Sigge met Shtuß udder Kauderwelsch drop aajelaat udder Keu en Sigge jedonn\n** deit Medmaacher bedrohe, beleijije, udder schlääsch maache\n** hät mieh wie eine Metmaachername un deit domet Schmuu maache\n* Op der Name betrocke Jrönd\n** esu ene Metmaacher-Name wolle mer nit\n* Op en IP-Adräß betrocke Jrönd\n** dat es en Proxy-ẞööver övver dänn de Lück zo vill Driß aanjestellt han",
        "newimages-summary": "Heh die Sigg zeig die zoletz huhjeladene Belder un Dateie aan.",
        "newimages-legend": "Ußwähle",
        "newimages-label": "Dä Dattei ier Name udder e Stöck dofun:",
-       "showhidebots": "(Bots $1)",
        "noimages": "Kein Dateie jefunge.",
        "ilsubmit": "Söhk",
        "bydate": "nohm Datum",
index bcfc299..b9b62ad 100644 (file)
        "blockip": "Bikarhêner asteng bike",
        "blockip-legend": "Bikarhêner asteng bike",
        "blockiptext": "Ji bo astengkirina nivîsandinê ya ji navnîşaneke IP'yê an jî ji bikarhênerekî/ê, vê formê bikarbîne.\nDivê ev tenê ji bo sekinandina vandalîzmê were bikaranîn, ku divê li gorî [[{{MediaWiki:Policy-url}}|rêgezê]] be.\n\nSedemekê binivîse!",
-       "ipadressorusername": "adresê IP'yekê ya navekî bikarhênerekî",
+       "ipaddressorusername": "adresê IP'yekê ya navekî bikarhênerekî",
        "ipbexpiry": "Dem:",
        "ipbreason": "Sedem",
        "ipbreason-dropdown": "*Sedemên astengkirinê\n** Vandalîzm\n** Agahiya şaş dikire gotarekê\n** Naveroka rûpelekê vala kir\n** Girêdanên xerab tevlî rûpelan dikir\n** Tiştên tewş tevlî gotaran dikir\n** Heqaretkirin\n** Pir hesab bikaranîn\n** Navekî ku nayê pejirandin",
        "imagelisttext": "Jêr lîsteyek ji $1 file'an heye, duxrekirin $2.",
        "newimages-summary": "Ev rûpela taybet dosyeyên ku herî dawî hatine barkirin, nîşan dide.",
        "newimages-legend": "Parzûn",
-       "showhidebots": "(Bot'an $1)",
        "noimages": "Ne tiştek tê dîtin.",
        "ilsubmit": "Lêgerîn",
        "bydate": "li gor dîrokê",
index 03a80c3..c48b946 100644 (file)
        "blockip": "Usorem obstruere",
        "blockip-legend": "Usorem vel locum IP obstruere",
        "blockiptext": "Forma infera utere ut quendam usorem vel locum IP obstruas ne plus scribere potest.\nHoc non nisi secundum [[{{MediaWiki:Policy-url}}|consilium]] fieri potest.\nRationem certam subscribe (exempli gratia titulos paginarum quas iste usor modo vandalorum recensuit).",
-       "ipadressorusername": "Locus IP aut nomen usoris:",
+       "ipaddressorusername": "Locus IP aut nomen usoris:",
        "ipbexpiry": "Exitus:",
        "ipbreason": "Causa:",
        "ipbreason-dropdown": "*Rationes crebriter adductae\n** Ob scripta falsa\n** Ob textum remotum\n** Ob nexus externos multiplicatos\n** Ob scripta sensu sive et Latinitate carentia\n** Ob scripta inurbana\n** Ob rationes perniciose multiplicatas\n** Ob nomen inurbanum sive inconveniens",
        "newimages-summary": "Haec pagina specialis monstrat fasciculos impositos ultimos.",
        "newimages-legend": "Filtrum",
        "newimages-label": "Nomen fasciculi (vel pars eius):",
-       "showhidebots": "($1 automata)",
        "noimages": "Nullum videndum.",
        "ilsubmit": "Quaerere",
        "bydate": "ex die",
index eb8fd5e..ba9ce95 100644 (file)
        "action-createpage": "Säiten unzelleeën",
        "action-createtalk": "Diskussiounssäiten unzeleeën",
        "action-createaccount": "dëse Benotzerkont unzeleeën",
+       "action-history": "d'Versioune vun dëser Säit weisen",
        "action-minoredit": "dës Ännerung als kleng Ännerung ze markéieren",
        "action-move": "dës Säit ze réckelen",
        "action-move-subpages": "dës Säit an déi Ënnersäiten déi dozou gehéieren ze réckelen",
        "blockip": "Benotzer spären",
        "blockip-legend": "Benotzer spären",
        "blockiptext": "Benotzt dëse Formulaire fir eng spezifesch IP-Adress oder e Benotzernumm ze spären. Dëst soll nëmmen am Fall vu Vandalismus gemaach ginn, en accordance mat den [[{{MediaWiki:Policy-url}}|interne Richlinen]]. Gitt e spezifesche Grond un (zum Beispill Säite wou Vandalismus virgefall ass).",
-       "ipadressorusername": "IP-Adress oder Benotzernumm:",
+       "ipaddressorusername": "IP-Adress oder Benotzernumm:",
        "ipbexpiry": "Gültegkeet:",
        "ipbreason": "Grond:",
        "ipbreason-dropdown": "*Heefeg Ursaache fir Benotzer ze spären:\n**Bewosst falsch Informatiounen an eng oder méi Säite gesat\n**Ouni Grond Inhalt vu Säite geläscht\n**Spam-Verknëppunge mat externe Säiten\n**Topereien an d'Säite gesat\n**Beleidegt oder bedréit aner Mataarbechter\n**Mëssbrauch vu verschiddene Benotzernimm\n**Net akzeptabele Benotzernumm",
        "newimages-summary": "Dës Spezialsäit weist eng Lëscht mat de Fichieren déi als lescht eropgeluede goufen.",
        "newimages-legend": "Filter",
        "newimages-label": "Numm vum Fichier (oder en Deel dovun):",
-       "showhidebots": "($1 Botten)",
        "noimages": "Keng Biller fonnt.",
        "ilsubmit": "Sichen",
        "bydate": "no Datum",
index c154aa6..743e9cf 100644 (file)
        "blockip": "Blokkeer dit IP-adres",
        "blockip-legend": "'ne Gebroeker of IP-adres blokkere",
        "blockiptext": "Gebroek 't óngerstjaondj formeleer óm sjrieftoegank van e zeker IP-adres te verbeje. Dit maag allein gedaon weure om vandalisme te veurkómme en in euvereinkóms mitte [[{{MediaWiki:Policy-url}}|beleid]]. Gaef hiejónger de raeje óp (bv. inkel vandaliseerdje paazjes).",
-       "ipadressorusername": "IP-adres of gebroekersnaam",
+       "ipaddressorusername": "IP-adres of gebroekersnaam",
        "ipbexpiry": "Verlöp (maak 'n keuze)",
        "ipbreason": "Reeje:",
        "ipbreason-dropdown": "*Väöl veurkommende rejer veur blokkaazjes\n** Foutieve informatie inveure\n** Verwiedere van informatie oet artikele\n** Spamlinks nao externe websites\n** Inveuge van nonsens in artikele\n** Intimiderend gedraag\n** Misbroek van meerdere gebroekers\n** Onacceptabele gebroekersnaam",
        "newimages-summary": "Op dees speciaal pazjena waere de meis recènt toegevoogde bestenj weergegaeve.",
        "newimages-legend": "Bestandjsnaam",
        "newimages-label": "Bestandjsnaam (of deel daarvan):",
-       "showhidebots": "($1 Bots)",
        "noimages": "Niks te zeen.",
        "ilsubmit": "Zeuk",
        "bydate": "op datum",
index 75a2f1f..a5dd37a 100644 (file)
        "blockip": "Bloca el dovrat",
        "blockip-legend": "Bloca 'l druvadur",
        "blockiptext": "Druvee 'l mòdul chì de suta per blucà l'acess cun dirit de scritüra a un indirizz IP specifegh o a un druvadur registraa.\nEl bloch gh'è de druvàl dumà per evità el vandalism e in acord cun i [[{{MediaWiki:Policy-url}}|regulament de {{SITENAME}}]].\nScrivee chì de suta 'l mutiv specifegh per el bloch (presempi, a pudii scriv i titul di paginn che i henn stat suget a vandalism).",
-       "ipadressorusername": "Indirizz IP o nom del druvdur:",
+       "ipaddressorusername": "Indirizz IP o nom del druvdur:",
        "ipbexpiry": "Fina al:",
        "ipbreason": "Reson:",
        "ipbreason-dropdown": "*Mutiv püssee cumün per i blòch\n** Avè caregaa di infurmazión fals\n** Avè töt via del cuntegnüü dai paginn\n** Avè giuntaa di ereclam a di sit da föra\n** Avè giuntaa de la ratatuja int i paginn\n** Cumpurtament intimidatori\n** Avè druvaa püssee dun cünt in manera abüsiva\n** El nom del druvàt l'è inacetabil",
index 7de45b4..8d9bae3 100644 (file)
        "blockip": "Blokuoti naudotoją",
        "blockip-legend": "Blokuoti naudotoją",
        "blockiptext": "Naudokite šią formą, kad uždraustumėte redagavimo prieigą pasirinktam IP adresui ar naudotojui. Tai turėtų būti atliekama tik tam, kad sustabdytumėte vandalizmą, ir neprieštarauti [[{{MediaWiki:Policy-url}}|projekte galiojančioms taisyklėms]].\nŽemiau pateikite tikslią priežastį (pavyzdžiui, nurodydami sugadintus puslapius).",
-       "ipadressorusername": "IP adresas arba naudotojo vardas",
+       "ipaddressorusername": "IP adresas arba naudotojo vardas",
        "ipbexpiry": "Galiojimo laikas",
        "ipbreason": "Priežastis:",
        "ipbreason-dropdown": "*Bendrosios blokavimo priežastys\n** Klaidingos informacijos įterpimas\n** Turinio šalinimas iš puslapių\n** Kitų svetainių reklamavimas\n** Nesusijusio arba beprasmio teksto įterpimas į puslapius\n** Gąsdinimai/įžeidinėjimai\n** Piktnaudžiavimas keliomis paskyromis\n** Nepriimtinas naudotojo vardas",
        "newimages-summary": "Šis specialus puslapis rodo paskiausiai įkeltus failus.",
        "newimages-legend": "Filtras",
        "newimages-label": "Failo vardas (ar jo dalis):",
-       "showhidebots": "($1 robotus)",
        "noimages": "Nėra ką parodyti.",
        "ilsubmit": "Ieškoti",
        "bydate": "pagal datą",
index 1bbebf7..781b149 100644 (file)
        "blockip": "Bloķēt lietotāju",
        "blockip-legend": "Bloķēt lietotāju",
        "blockiptext": "Šo veidni izmanto, lai bloķētu kādas IP adreses vai lietotājvārda piekļuvi wiki lapu saglabāšanai. Dari to tikai, lai novērstu vandālismu atbilstoši [[{{MediaWiki:Policy-url}}|noteikumiem]].\nNorādi konkrētu iemeslu (piemēram, linkus uz vandalizētajām lapām).",
-       "ipadressorusername": "IP adrese vai lietotājvārds",
+       "ipaddressorusername": "IP adrese vai lietotājvārds",
        "ipbexpiry": "Termiņš",
        "ipbreason": "Iemesls:",
        "ipbreason-dropdown": "*Biežākie bloķēšanas iemesli\n** Ievieto nepatiesu informāciju\n** Dzēš lapu saturu\n** Spamo ārējās saitēs\n** Ievieto nesakarīgus simbolus sakopojumus\n** Nepieņemama uzvedība un apvainojumi\n** Vairāku kontu ļaunprātīga izmantošana\n** Nepieņemams lietotājvārds",
        "newimages-summary": "Šeit var apskatīties pēdējos šeit augšuplādētos failus.",
        "newimages-legend": "Filtrs",
        "newimages-label": "Faila nosaukums (vai tā daļa):",
-       "showhidebots": "($1 botus)",
        "noimages": "Nav nekā ko redzēt.",
        "ilsubmit": "Meklēt",
        "bydate": "<b>pēc datuma</b>",
index 19eefa8..cab767d 100644 (file)
        "blockip": "禁簿",
        "blockip-legend": "禁簿",
        "blockiptext": "函下禁纂,簿、址明判;[[{{MediaWiki:Policy-url}}|秉據]]如斯,立法克亂。指罪證行,了冤無憾。",
-       "ipadressorusername": "IP或簿名",
+       "ipaddressorusername": "IP或簿名",
        "ipbexpiry": "限期",
        "ipbreason": "指證",
        "ipbreason-dropdown": "*如下道:\n** 造假報\n** 毀文貌\n** 廣賈告\n** 話胡鬧\n** 恐嚇擾\n** 污名號\n** 名瀆道",
        "newimages-summary": "此奇頁示最後呈上之檔也。",
        "newimages-legend": "濾",
        "newimages-label": "名(或其部):",
-       "showhidebots": "($1僕)",
        "noimages": "無可見。",
        "ilsubmit": "尋檔",
        "bydate": "時序",
index ccb4dbd..2baf3b1 100644 (file)
        "blockip": "प्रयोक्ताकेँ प्रतिबन्धित करू",
        "blockip-legend": "प्रयोक्ताकेँ प्रतिबन्धित करू",
        "blockiptext": "नीचाँक आवेदनक प्रयोग कोनो खास अनिकेत वा प्रयोक्तानामक लिखैक प्रवेशकेँ प्रतिबन्धित करबा लेल करू।\nई अतत्तः करैबलाक विरुद्ध प्रयुक्त हुअए, आ एकर अनुसार [[{{MediaWiki:Policy-url}}|policy]]।\nनीचाँ स्पष्ट कारण लिखू (जेना, खास पन्नाकेँ देखबैत जतए अतत्तः कएल गेल अछि)।",
-       "ipadressorusername": "अनिकेत संकेत वा प्रयोक्तानाम:",
+       "ipaddressorusername": "अनिकेत संकेत वा प्रयोक्तानाम:",
        "ipbexpiry": "खतम हएत:",
        "ipbreason": "कारण:",
        "ipbreason-dropdown": "*सामान्य प्रतिबन्ध कारण\n** गलत सूचना घुसेनाइ\n** पन्ना सभसँ पाठ हटेनाइ\n** बाहरी जालस्थलक अवांछित लागि\n** फालतू/ अवांछित सामिग्रिक पान्नामे घुसाएब\n** धमकीबला व्यवहार/ तंग करब\n** कएक खाताकेँ गरिआएब\n** अवांछित प्रयोक्तानाम",
        "newimages-summary": "ऐ विशेष पन्नामे उपारोपित संचिका सभ देखाएल गेल अछि।",
        "newimages-legend": "चलनी",
        "newimages-label": "संचिका नाम (वा ओकर अंश):",
-       "showhidebots": "($1 स्वचालक सभ)",
        "noimages": "किछु देखबा योग्य नै |",
        "ilsubmit": "ताकू",
        "bydate": "तारीख सं",
index 91cb2c5..5bc4044 100644 (file)
        "blockip": "Пякстамс тиить",
        "blockip-legend": "Кардамс тиить",
        "blockiptext": "Эряви нолдамс тевс форм ала башка IP адресста эли тиить лем вельде  сёрмадомань сувамать сёлгоманкса.\nТя эряви тиемс аньцек колендемада аралама туфталонкса ди [[{{MediaWiki:Policy-url}}|политик]]-ть коряс.\nПутт туфталть алу (кепотьксонди, лятфнек лопатне конатнень эса колендесть).",
-       "ipadressorusername": "IP адрес эли тиить лемоц:",
+       "ipaddressorusername": "IP адрес эли тиить лемоц:",
        "ipbexpiry": "Сирелгоды:",
        "ipbreason": "Туфтал:",
        "ipbreason-dropdown": "* Кърдань сёлгома туфталхт\n** Аф виде информациень путнема\n** Лопаста сёрматфть нардама\n** Аф виде ушеширень интернет сюлмафкснень макссема\n** Ёньфтома/смузьфтома информациень лопас путнема\n** Кальдяв прянь вятема/сялгодома\n** Лама сёрматфтоматнень покордама\n** Аф пара тиить лемоц",
        "newimages-summary": "Тя башка тевонь лопась няфнесыне мекольце тонкф файлхт.",
        "newimages-legend": "Педяма",
        "newimages-label": "Файллем (эли сонь пакшец):",
-       "showhidebots": "($1 робот програпт)",
        "noimages": "Мезеге аш.",
        "ilsubmit": "Вешендемс",
        "bydate": "ши коряс",
index 0b615fa..bc2ad0f 100644 (file)
        "blockip": "Sakano ny mpikambana",
        "blockip-legend": "Sakano ny mpikambana",
        "blockiptext": "Ampiasao ity formulaire ity hisakanana ny fahazoan-dàlana hanoratra\nananan'ny adiresy IP iray na solonanarana iray.\nTokony ho antony fisorohana ny fisomparana ihany, ary mifanaraka amin'ny [[{{MediaWiki:Policy-url}}|fepetra]]\nihany no hanaovana ny fisakanana.\nFenoy etsy ambany ny antony manokana (ohatra, mitanisà pejy nosomparana).",
-       "ipadressorusername": "Adiresy IP na solonanarana",
+       "ipaddressorusername": "Adiresy IP na solonanarana",
        "ipbexpiry": "Fahataperana",
        "ipbreason": "Antony :",
        "ipb-hardblock": "Hanakana ny mpikambana nisoratra anarana mampiasa ity adiresy IP ity",
        "imagelisttext": "{{PLURAL:}}Eto ambany ny lisitran'ny rakitra $1 milahatra araka ny $2.",
        "newimages-legend": "Anaran-drakitra",
        "newimages-label": "Anaran-drakitra (na singan'izy io) :",
-       "showhidebots": "(rôbô $1)",
        "noimages": "Tsy misy sary ato.",
        "ilsubmit": "Karohy",
        "bydate": "araka ny daty",
index ca35276..e6b13ed 100644 (file)
        "action-createpage": "создавање страници",
        "action-createtalk": "создавање страници за разговор",
        "action-createaccount": "создај ја оваа корисничка сметка",
+       "action-history": "преглед на историјата на оваа страница",
        "action-minoredit": "означување на ова уредување како ситно",
        "action-move": "преместување на оваа страница",
        "action-move-subpages": "преместување на оваа страница и нејзините потстраници",
        "blockip": "Блокирај корисник",
        "blockip-legend": "Блокирај корисник",
        "blockiptext": "Користете го долниот образец за да го забраните пристапот за пишување од одредена IP-адреса или корисничко име.\nОва единствено треба да се прави за да се спречи вандализам, во согласност со [[{{MediaWiki:Policy-url}}|правилата на Википедија]].\nИзберете конкретна причина подолу (на пр. наведувајќи ги страниците што биле вандализирани).",
-       "ipadressorusername": "IP-адреса или корисничко име:",
+       "ipaddressorusername": "IP-адреса или корисничко име:",
        "ipbexpiry": "Истек на рокот:",
        "ipbreason": "Причина:",
        "ipbreason-dropdown": "*Вообичаени причини за блокирање\n** Вметнување лажни информации\n** Бришење на содржини од страниците\n** Спам-врски кон надворешни мрежни места\n** Вметнување глупости во страниците\n** Непристојно однесување\n** Навредување на други корисници\n** Неприфатливо корисничко име",
        "newimages-summary": "Оваа специјална страница ги покажува скоро подигнатите податотеки.",
        "newimages-legend": "Филтрирај",
        "newimages-label": "Име на податотека (или дел од името):",
-       "showhidebots": "($1 ботови)",
+       "newimages-showbots": "Прикажувај подигања од ботови",
        "noimages": "Нема ништо.",
        "ilsubmit": "Барај",
        "bydate": "по датум",
        "exif-subsectime": "Дел од секундата во кој е сликано",
        "exif-subsectimeoriginal": "Дел од секундата во кој е фотографирано",
        "exif-subsectimedigitized": "Дел од секундата во кој е дигитализирано",
-       "exif-exposuretime": "Ð\95кÑ\81позиÑ\86иÑ\98а",
+       "exif-exposuretime": "Ð\92Ñ\80еме Ð½Ð° Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¾Ñ\81Ñ\82",
        "exif-exposuretime-format": "$1 сек ($2)",
        "exif-fnumber": "F-бр.",
        "exif-fnumber-format": "f/$1",
-       "exif-exposureprogram": "Режим Ð½Ð° ÐµÐºÑ\81позиÑ\86иÑ\98а",
+       "exif-exposureprogram": "Ð\9fÑ\80огÑ\80ам Ð½Ð° Ð¸Ð·Ð»Ð¾Ð¶Ñ\83ваÑ\9aе",
        "exif-spectralsensitivity": "Спектрална осетливост",
        "exif-isospeedratings": "Светлоосетливост по ISO",
        "exif-shutterspeedvalue": "APEX-брзина на затворачот",
        "exif-aperturevalue": "APEX-oтвор",
        "exif-brightnessvalue": "APEX-светлост",
-       "exif-exposurebiasvalue": "Ð\9dадомеÑ\81Ñ\82ок Ð½Ð° ÐµÐºÑ\81позиÑ\86иÑ\98аÑ\82а",
+       "exif-exposurebiasvalue": "Ð\9dадомеÑ\81Ñ\82ок Ð½Ð° Ð¸Ð·Ð»Ð¾Ð¶Ñ\83ваÑ\9aеÑ\82о",
        "exif-maxaperturevalue": "Макс. отвореност на блендата",
        "exif-subjectdistance": "Оддалеченост до објектот",
        "exif-meteringmode": "Режим на мерачот",
        "exif-focalplaneyresolution": "Разложеност на жаришната рамнина Y",
        "exif-focalplaneresolutionunit": "Единица за разложеност на жаришната рамнина",
        "exif-subjectlocation": "Положба на субјектот",
-       "exif-exposureindex": "Ð\98ндекÑ\81 Ð½Ð° ÐµÐºÑ\81позиÑ\86иÑ\98аÑ\82а",
+       "exif-exposureindex": "Ð\9fоказаÑ\82ел Ð½Ð° Ð¸Ð·Ð»Ð¾Ð¶Ñ\83ваÑ\9aеÑ\82о",
        "exif-sensingmethod": "Метод на сензорот",
        "exif-filesource": "Извор на податотеката",
        "exif-scenetype": "Тип на сцена",
        "exif-customrendered": "Дополнитела обработка на сликата",
-       "exif-exposuremode": "Режим Ð½Ð° ÐµÐºÑ\81позиÑ\86иÑ\98а",
+       "exif-exposuremode": "Режим Ð½Ð° Ð¸Ð·Ð»Ð¾Ð¶Ñ\83ваÑ\9aе",
        "exif-whitebalance": "Рамнотежа на бело",
        "exif-digitalzoomratio": "Сооднос на дигиталното приближување (зум)",
        "exif-focallengthin35mmfilm": "Жаришно растојание кај 35 мм филм",
        "exif-scenetype-1": "Директно фотографирана слика",
        "exif-customrendered-0": "Нормален процес",
        "exif-customrendered-1": "Нестандарден процес",
-       "exif-exposuremode-0": "Ð\90вÑ\82омаÑ\82Ñ\81ка ÐµÐºÑ\81позиÑ\86иÑ\98а",
-       "exif-exposuremode-1": "РаÑ\87на ÐµÐºÑ\81позиÑ\86иÑ\98а",
+       "exif-exposuremode-0": "Ð\90вÑ\82омаÑ\82Ñ\81ко Ð¸Ð·Ð»Ð¾Ð¶Ñ\83ваÑ\9aе",
+       "exif-exposuremode-1": "РаÑ\87но Ð¸Ð·Ð»Ð¾Ð¶Ñ\83ваÑ\9aе",
        "exif-exposuremode-2": "Автоматски со зададен распон",
        "exif-whitebalance-0": "Автоматска рамнотежа на бело",
        "exif-whitebalance-1": "Рачна рамнотежа на бело",
index 20236d3..059cdf5 100644 (file)
        "jumptonavigation": "വഴികാട്ടി",
        "jumptosearch": "തിരയൂ",
        "view-pool-error": "ക്ഷമിക്കണം, ഈ നിമിഷം സെർവറുകൾ അമിതഭാരം കൈകാര്യം ചെയ്യുകയാണ്.\nധാരാളം ഉപയോക്താക്കൾ ഈ താൾ കാണുവാൻ ശ്രമിച്ചുകൊണ്ടിരിക്കുകയാണ്.\nഇനിയും താൾ ലഭ്യമാക്കുവാൻ താങ്കൾ ശ്രമിക്കുന്നതിന് മുൻപ് ദയവായി അല്പസമയം കാത്തിരിക്കുക.\n\n$1",
+       "generic-pool-error": "ക്ഷമിക്കണം, ഈ നിമിഷം സെർവറുകൾ അമിതഭാരം കൈകാര്യം ചെയ്യുകയാണ്.\nധാരാളം ഉപയോക്താക്കൾ ഈ സ്രോതസ്സുകൾ കാണുവാൻ ശ്രമിച്ചുകൊണ്ടിരിക്കുകയാണ്.\nഇനിയും ഇത് ലഭ്യമാക്കുവാൻ താങ്കൾ ശ്രമിക്കുന്നതിന് മുൻപ് ദയവായി അല്പസമയം കാത്തിരിക്കുക.",
        "pool-timeout": "പൂട്ട് മാറാനുള്ള കാത്തിരിപ്പ് സമയം",
        "pool-queuefull": "പൂൾ ക്യൂ നിറഞ്ഞിരിക്കുന്നു",
        "pool-errorunknown": "അപരിചിതമായ പിഴവ്",
        "blockip": "ഉപയോക്താവിനെ തടയുക",
        "blockip-legend": "ഉപയോക്താവിനെ തടയുക",
        "blockiptext": "ഏതെങ്കിലും ഐ.പി. വിലാസത്തേയോ ഉപയോക്താവിനേയോ തടയുവാൻ താഴെയുള്ള ഫോം ഉപയോഗിക്കുക.\n[[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ച് നശീകരണപ്രവർത്തനം തടയാൻ മാത്രമേ ഇതു ചെയ്യാവൂ.\nതടയാനുള്ള വ്യക്തമായ കാരണം (ഏതു താളിലാണു നശീകരണപ്രവർത്തനം നടന്നത് എന്നതടക്കം) താഴെ രേഖപ്പെടുത്തിയിരിക്കണം.",
-       "ipadressorusername": "ഐ.പി. വിലാസം അല്ലെങ്കിൽ ഉപയോക്തൃനാമം:",
+       "ipaddressorusername": "ഐ.പി. വിലാസം അല്ലെങ്കിൽ ഉപയോക്തൃനാമം:",
        "ipbexpiry": "കാലാവധി:",
        "ipbreason": "കാരണം:",
        "ipbreason-dropdown": "*തടയലിനു യോഗ്യമായ കാരണങ്ങൾ\n** തെറ്റായ വിവരങ്ങൾ ചേർക്കുക\n** താളിൽ നിന്നു വിവരങ്ങൾ മായ്ക്കുക\n** പുറം വെബ്ബ്സൈറ്റിലേക്കുള്ള പാഴ് കണ്ണികൾ ചേർക്കൽ\n** അനാവശ്യം/അസംബന്ധം താളിലേക്കു ചേർക്കൽ\n** മാന്യമല്ലാത്ത പെരുമാറ്റം\n** ദുരുദ്ദേശത്തോടെ ഉപയോഗിക്കുന്ന നിരവധി അംഗത്വങ്ങൾ\n** വിക്കിക്കു ചേരാത്ത ഉപയോക്തൃനാമം",
        "newimages-summary": "ചുരുക്കം",
        "newimages-legend": "അരിപ്പ",
        "newimages-label": "പ്രമാണത്തിന്റെ പേര്‌ (അഥവാ പേരിന്റെ ഭാഗം)",
-       "showhidebots": "(യന്ത്രങ്ങളെ $1)",
        "noimages": "ഒന്നും കാണാനില്ല.",
        "ilsubmit": "തിരയൂ",
        "bydate": "ദിനക്രമത്തിൽ",
index 1a7c555..a184e82 100644 (file)
        "blockip": "Хэрэглэгчийг түгжих",
        "blockip-legend": "Хэрэглэгчийг түгжих",
        "blockiptext": "Доорх маягтыг ашиглан тодорхой IP хаяг эсвэл хэрэглэгчийн нэрийг засвар хийхээс түгжинэ үү.\nЭнэ нь зөвхөн вандализм үйлдэх явдлаас сэргийлэхийн тулд, [[{{MediaWiki:Policy-url}}|бодлого, баримтлалын]] дагуу хийгдэх ёстой.\nДоор тодорхой шалтгаанаа бичнэ үү.",
-       "ipadressorusername": "IP хаяг буюу хэрэглэгчийн нэр",
+       "ipaddressorusername": "IP хаяг буюу хэрэглэгчийн нэр",
        "ipbexpiry": "Түгжээ нь нээгдэх хугацаа",
        "ipbreason": "Шалтгаан:",
        "ipbreason-dropdown": "*Ерөнхий түгжих шалтгаанууд\n** Худал мэдээлэл оруулсан\n** Хуудаснуудаас агуулга устгасан\n** Гадны холбоосууд руу линк оруулж спам үйлдсэн\n** Утгагүй зүйл/бувтнал оруулсан\n** Сүрдүүлсэн/зовоосон ааш авиртай\n** Олон бүртгэлийг буруу хэргээр ашигласан\n** Зөвшөөршгүй хэрэглэгчийн нэртэй",
        "newimages-summary": "Энэ тусгай хуудсанд хамгийн сүүлд оруулагдсан файлуудыг үзүүлнэ.",
        "newimages-legend": "Шүүлтүүр",
        "newimages-label": "Файлын нэр (эсвэл түүний нэг хэсэг):",
-       "showhidebots": "(Роботуудыг $1)",
        "noimages": "Харах юмгүй.",
        "ilsubmit": "Хайлт",
        "bydate": "Огноогоор",
index d4d609e..418cbb6 100644 (file)
        "blockip": "हा अंकपत्ता अडवा",
        "blockip-legend": "सदस्यास प्रतिबंध करा",
        "blockiptext": "एखाद्या विशिष्ट अंकपत्त्याची किंवा सदस्याची लिहिण्याची क्षमता प्रतिबंधित  करण्याकरिता खालील सारणी वापरा.\nहे केवळ उच्छेद टाळण्याच्याच दृष्टीने आणि [[{{MediaWiki:Policy-url}}|निती]]स अनुसरून केले पाहिजे.\nखाली विशिष्ट कारण भरा(उदाहरणार्थ,ज्या पानांवर उच्छेद माजवला गेला त्यांची उद्धरणे देऊन).",
-       "ipadressorusername": "अंकपत्ता किंवा सदस्यनाम:",
+       "ipaddressorusername": "अंकपत्ता किंवा सदस्यनाम:",
        "ipbexpiry": "समाप्ति:",
        "ipbreason": "कारण:",
        "ipbreason-dropdown": "*प्रतिबंधनाची सामान्य कारणे\n** चुकीची माहिती भरणे\n** पानांवरील मजकूर काढणे\n** बाह्यसंकेतस्थळाचे चिखलणी(स्पॅमींग) दुवे देणे\n** पानात अटरफटर/वेडगळ भरणे\n** धमकावणारे/उपद्रवी वर्तन\n** असंख्य खात्यांचा गैरवापर\n** अस्वीकार्य सदस्यनाम",
        "newimages-summary": "हे विशेष पान शेवटी चढविलेल्या संचिका दर्शविते.",
        "newimages-legend": "गाळक",
        "newimages-label": "संचिकानाम (किंवा त्याचा भाग):",
-       "showhidebots": "(सांगकामे $1)",
        "noimages": "बघण्यासारखे येथे काही नाही.",
        "ilsubmit": "शोधा",
        "bydate": "तारखेनुसार",
index ced687d..8642cf4 100644 (file)
@@ -23,7 +23,7 @@
        },
        "tog-underline": "Garis bawah pautan:",
        "tog-hideminor": "Sembunyikan suntingan kecil dalam laman perubahan terkini",
-       "tog-hidepatrolled": "Sorokkan suntingan yang telah dironda daripada senarai perubahan terkini",
+       "tog-hidepatrolled": "Sorokkan suntingan yang telah dironda daripada laman perubahan terkini",
        "tog-newpageshidepatrolled": "Sorokkan laman yang telah dironda daripada senarai laman baru",
        "tog-extendwatchlist": "Kembangkan senarai pantau untuk memaparkan semua perubahan, bukan hanya yang terkini",
        "tog-usenewrc": "Perubahan kumpulan mengikut laman dalam perubahan terkini dan senarai pantau",
        "permalink": "Pautan kekal",
        "print": "Cetak",
        "view": "Paparkan",
+       "view-foreign": "Lihat di $1",
        "edit": "Sunting",
+       "edit-local": "Sunting huraian tempatan",
        "create": "Cipta",
+       "create-local": "Isikan huraian tempatan",
        "editthispage": "Sunting laman ini",
        "create-this-page": "Cipta laman ini",
        "delete": "Hapuskan",
        "jumptonavigation": "pandu arah",
        "jumptosearch": "cari",
        "view-pool-error": "Maaf, pelayan terlebih bebanan pada masa ini.\nTerlalu ramai pengguna cuba melihat laman ini.\nSila tunggu sebentar sebelum cuba mencapai laman ini lagi.\n\n$1",
+       "generic-pool-error": "Maaf, semua pelayan terlebih bebanan ketika ini.\n\nTerlalu ramai pengguna yang sedang cuba mengakses sumber ini.\n\nSila tunggu sebentar sebelum cuba mengakses sumber ini semula.",
        "pool-timeout": "Menunggu sebentar untuk dikunci",
        "pool-queuefull": "Giliran kolam telah penuh",
        "pool-errorunknown": "Ralat tak diketahui",
        "edit-gone-missing": "Laman tersebut telah dihapuskan dan tidak dapat dikemaskinikan.",
        "edit-conflict": "Percanggahan penyuntingan.",
        "edit-no-change": "Suntingan anda diabaikan kerana tiada perubahan dibuat pada teks tersebut.",
+       "postedit-confirmation-created": "Halaman telah diwujudkan.",
+       "postedit-confirmation-restored": "Halaman telah dipulihkan.",
        "postedit-confirmation-saved": "Suntingan anda telah disimpan.",
        "edit-already-exists": "Tidak dapat mencipta laman baru kerana ia telah wujud.",
        "defaultmessagetext": "Teks mesej asal",
        "expensive-parserfunction-warning": "Amaran: Laman ini mengandungi terlalu banyak panggilan fungsi penghurai yang intensif.\n\nHad panggilan ialah $2, sekarang terdapat $1 panggilan.",
        "expensive-parserfunction-category": "Laman yang mengandungi terlalu banyak panggilan fungsi penghurai yang intensif",
        "post-expand-template-inclusion-warning": "Amaran: Saiz penyertaan templat terlalu besar.\nSesetengah templat tidak akan disertakan.",
-       "post-expand-template-inclusion-category": "Laman-laman yang melebihi had saiz penyertaan templat",
+       "post-expand-template-inclusion-category": "Laman yang melebihi had saiz penyertaan templat",
        "post-expand-template-argument-warning": "Amaran: Laman ini mengandungi sekurang-kurangnya satu argumen templat yang mempunyai saiz pengembangan yang terlalu besar.\nArgumen-argumen ini telah ditinggalkan.",
        "post-expand-template-argument-category": "Laman yang mengandungi templat dengan argumen yang tidak lengkap",
        "parser-template-loop-warning": "Gelung templat dikesan: [[$1]]",
        "mergelog": "Log penggabungan",
        "pagemerge-logentry": "menggabungkan [[$1]] ke dalam [[$2]] (semakan sehingga $3)",
        "revertmerge": "Pisahkan",
-       "mergelogpagetext": "Yang berikut ialah senarai terkini bagi penggabungan sejarah sesebuah laman ke dalam lamana yang lain.",
+       "mergelogpagetext": "Yang berikut ialah senarai terkini bagi penggabungan sejarah sesebuah laman ke dalam laman yang lain.",
        "history-title": "Sejarah semakan bagi \"$1\"",
        "difference-title": "Perbezaan antara semakan-semakan \"$1\"",
        "difference-title-multipage": "Perbezaan antara laman \"$1\" dan \"$2\"",
        "action-createpage": "mencipta laman",
        "action-createtalk": "mencipta laman perbincangan",
        "action-createaccount": "mencipta akaun pengguna ini",
+       "action-history": "melihat sejarah halaman ini",
        "action-minoredit": "menanda suntingan ini sebagai suntingan kecil",
        "action-move": "memindahkan laman ini",
        "action-move-subpages": "memindahkan laman ini dan sublaman-sublamannya",
        "recentchanges-label-minor": "Ini ialah suntingan kecil",
        "recentchanges-label-bot": "Suntingan ini dilakukan oleh bot",
        "recentchanges-label-unpatrolled": "Suntingan ini belum dirondai",
-       "recentchanges-label-plusminus": "Saiz halaman telah berubah sebanyak jumlah bait ini",
+       "recentchanges-label-plusminus": "Saiz laman telah berubah sebanyak jumlah bait ini",
        "recentchanges-legend-heading": "'''Petunjuk:'''",
-       "recentchanges-legend-newpage": "(lihat juga [[Special:NewPages|senarai halaman baru]])",
+       "recentchanges-legend-newpage": "(lihat juga [[Special:NewPages|senarai laman baru]])",
        "rcnotefrom": "Yang berikut adalah semua suntingan sejak <b>$2</b> (yang dipaparkan sehingga <b>$1</b>).",
-       "rclistfrom": "Papar perubahan sejak $3 $2",
+       "rclistfrom": "Paparkan perubahan sejak $3 $2",
        "rcshowhideminor": "$1 suntingan kecil",
        "rcshowhideminor-show": "Paparkan",
        "rcshowhideminor-hide": "Sorokkan",
        "unusedtemplateswlh": "pautan-pautan lain",
        "randompage": "Laman rawak",
        "randompage-nopages": "Tiada laman dalam {{PLURAL:$2|ruang|ruang-ruang}} nama berikut: $1.",
-       "randomincategory": "Halaman pilihan rawak dalam kategori",
+       "randomincategory": "Laman rawak dalam kategori",
        "randomincategory-invalidcategory": "\"$1\" bukan nama kategori yang sah.",
        "randomincategory-nopages": "Tiada halaman di [[:Category:$1]].",
        "randomincategory-selectcategory": "Dapatkan halaman pilihan rawak dari kategori: $1 $2.",
        "statistics-users-active": "Pengguna aktif",
        "statistics-users-active-desc": "Pengguna yang aktif sejak {{PLURAL:$1|semalam|$1 hari lalu}}",
        "statistics-mostpopular": "Laman dilihat terbanyak",
-       "pageswithprop": "Halaman dengan sifat halaman",
-       "pageswithprop-legend": "Halaman dengan sifat halaman",
+       "pageswithprop": "Laman dengan sifat laman",
+       "pageswithprop-legend": "Laman dengan sifat laman",
        "pageswithprop-text": "Halaman ini menyenaraikan halaman-halaman yang menggunakan sifat halaman yang tertentu.",
        "pageswithprop-prop": "Nama sifat:",
        "pageswithprop-submit": "Pergi",
        "mostlinkedtemplates": "Templat dipaut terbanyak",
        "mostcategories": "Rencana dengan kategori terbanyak",
        "mostimages": "Imej dipaut terbanyak",
-       "mostinterwikis": "Halaman yang paling banyak pautan antara wiki",
+       "mostinterwikis": "Laman yang paling banyak pautan interwiki",
        "mostrevisions": "Rencana dengan semakan terbanyak",
        "prefixindex": "Indeks awalan",
        "prefixindex-namespace": "Semua laman dengan awalan (ruang nama $1)",
        "cachedspecial-viewing-cached-ts": "Anda sedang melihat versi dalam cache laman ini yang mungkin tidak lengkap sepenuhnya.",
        "cachedspecial-refresh-now": "Lihat yang terkini.",
        "categories": "Kategori",
-       "categoriespagetext": "{{PLURAL:$1|Kategori|Kategori-kategori}} berikut mengandungi laman-laman atau media.\n[[Special:UnusedCategories|Kategori yang tidak digunakan]] tidak dipaparkan di sini.\nLihat juga [[Special:WantedCategories|kategori yang dikehendaki]].",
+       "categoriespagetext": "{{PLURAL:$1|Kategori|Kategori-kategori}} berikut mengandungi laman atau media.\n[[Special:UnusedCategories|Kategori yang tidak digunakan]] tidak dipaparkan di sini.\nLihat juga [[Special:WantedCategories|kategori yang dikehendaki]].",
        "categoriesfrom": "Paparkan kategori bermula daripada:",
        "special-categories-sort-count": "susun mengikut tertib bilangan",
        "special-categories-sort-abc": "susun mengikut tertib abjad",
        "listgrouprights-removegroup-self": "Keluar daripada {{PLURAL:$2|kumpulan|kumpulan-kumpulan}}: $1",
        "listgrouprights-addgroup-self-all": "Menyertai semua kumpulan",
        "listgrouprights-removegroup-self-all": "Keluar daripada semua kumpulan",
+       "listgrouprights-namespaceprotection-header": "Sekatan ruang nama",
+       "listgrouprights-namespaceprotection-namespace": "Ruang nama",
+       "trackingcategories": "Kategori penjejak",
+       "trackingcategories-msg": "Kategori penjejak",
+       "trackingcategories-name": "Nama pesanan",
+       "trackingcategories-nodesc": "Tiada keterangan tersedia.",
        "mailnologin": "Tiada alamat e-mel",
        "mailnologintext": "Anda perlu [[Special:UserLogin|log masuk]]\nterlebih dahulu dan mempunyai alamat e-mel yang sah dalam\n[[Special:Preferences|laman keutamaan]] untuk mengirim e-mel kepada pengguna lain.",
        "emailuser": "Kirim e-mel kepada pengguna ini",
        "unwatchthispage": "Berhenti memantau",
        "notanarticle": "Bukan laman kandungan",
        "notvisiblerev": "Semakan ini telah dihapuskan",
-       "watchlist-details": "$1 laman dipantau (tidak termasuk laman perbincangan).",
+       "watchlist-details": "$1 laman dipantau ,tidak termasuk laman perbincangan.",
        "wlheader-enotif": "Pemberitahuan melalui e-mel dibolehkan.",
        "wlheader-showupdated": "Laman-laman yang telah diubah sejak kunjungan terakhir anda dipaparkan dalam '''teks tebal'''.",
        "wlnote2": "Yang berikut adalah perubahan dalam {{PLURAL:$1|sejam|<strong>$1</strong> jam}} yang lepas, setakat $2, $3.",
        "delete-edit-reasonlist": "Ubah sebab-sebab hapus",
        "delete-toobig": "Laman ini mempunyai sejarah yang besar, iaitu melebihi $1 jumlah semakan. Oleh itu, laman ini dilindungi daripada dihapuskan untuk mengelak kerosakan di {{SITENAME}} yang tidak disengajakan.",
        "delete-warning-toobig": "Laman ini mempunyai sejarah yang besar, iaitu melebihi $1 jumlah semakan. Menghapuskannya boleh mengganggu perjalanan pangkalan data {{SITENAME}}. Sila berhati-hati.",
-       "deleting-backlinks-warning": "'''Amaran:''' Terdapat halaman-halaman lain yang berpaut atau bertransklusi dengan halaman yang hendak anda hapus itu.",
+       "deleting-backlinks-warning": "'''Amaran:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Terdapat laman lain]] yang berpaut atau bertransklusi dengan laman yang hendak anda hapus ini.",
        "rollback": "Undurkan suntingan.",
        "rollback_short": "Undur",
        "rollbacklink": "undur",
        "protect-locked-blocked": "Anda telah disekat, justeru tidak boleh menukar peringkat perlindungan.\nIni adalah tetapan semasa bagi laman '''$1''':",
        "protect-locked-dblock": "Anda tidak boleh menukar peringkat perlindungan kerana pangkalan data sedang dikunci.\nIni adalah tetapan semasa bagi laman '''$1''':",
        "protect-locked-access": "Anda tidak mempunyai keizinan untuk menukar peringkat perlindungan.\nIni adalah tetapan semasa bagi laman '''$1''':",
-       "protect-cascadeon": "Laman ini dilindungi kerana ia terkandung dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi secara melata. Anda boleh menukar peringkat perlindunan laman ini, akan tetapi ia tidak akan menjejaskan perlindungan melata tersebut.",
+       "protect-cascadeon": "Laman ini dilindungi kerana ia terkandung dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi secara melata. Penukaran peringkat perlindungan laman ini tidak akan menjejaskan perlindungan melata tersebut.",
        "protect-default": "Benarkan semua pengguna",
        "protect-fallback": "Benarkan pengguna yang berizin \"$1\" sahaja",
        "protect-level-autoconfirmed": "Benarkan pengguna yang diautosahkan sahaja",
        "contributions-title": "Sumbangan oleh $1",
        "mycontris": "Sumbangan",
        "contribsub2": "Untuk {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Akaun pengguna \"$1\" tidak berdaftar.",
        "nocontribs": "Tiada sebarang perubahan yang sepadan dengan kriteria-kriteria ini.",
        "uctop": "(terkini)",
        "month": "Sebelum bulan:",
        "sp-contributions-newbies": "Tunjukkan sumbangan daripada akaun baru sahaja",
        "sp-contributions-newbies-sub": "Bagi akaun-akaun baru",
        "sp-contributions-newbies-title": "Sumbangan oleh pengguna baru",
-       "sp-contributions-blocklog": "Log sekatan",
+       "sp-contributions-blocklog": "log sekatan",
        "sp-contributions-deleted": "sumbangan dihapuskan",
        "sp-contributions-uploads": "muat naik",
        "sp-contributions-logs": "log",
        "sp-contributions-search": "Cari sumbangan",
        "sp-contributions-username": "Alamat IP atau nama pengguna:",
        "sp-contributions-toponly": "Hanya paparkan suntingan yang merupakan semakan terkini",
+       "sp-contributions-newonly": "Hanya paparkan suntingan yang merupakan ciptaan laman",
        "sp-contributions-submit": "Cari",
        "whatlinkshere": "Pautan ke laman ini",
        "whatlinkshere-title": "Laman yang mengandungi pautan ke \"$1\"",
        "blockip": "Sekat pengguna",
        "blockip-legend": "Sekat pengguna",
        "blockiptext": "Gunakan borang di bawah untuk menyekat\npenyuntingan daripada alamat IP atau pengguna tertentu.\nTindakan ini perlu dilakukan untuk menentang vandalisme sahaja dan selaras\ndengan [[{{MediaWiki:Policy-url}}|dasar {{SITENAME}}]].\nSila masukkan sebab sekatan di bawah (umpamannya, sebutkan laman yang telah\ndirosakkan).",
-       "ipadressorusername": "Alamat IP atau nama pengguna:",
+       "ipaddressorusername": "Alamat IP atau nama pengguna:",
        "ipbexpiry": "Tamat:",
        "ipbreason": "Sebab:",
        "ipbreason-dropdown": "*Sebab lazim\n** Memasukkan maklumat palsu\n** Membuang kandungan daripada laman\n** Memasukkan pautan spam ke tapak web luar\n** Memasukkan karut-marut ke dalam laman\n** Mengugut/mengganggu pengguna lain\n** Menyalahgunakan berbilang akaun\n** Nama pengguna yang tidak sesuai",
        "pageinfo-hidden-categories": "Kategori tersembunyi ($1)",
        "pageinfo-templates": "Templat tertransklusi ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|Halaman|Halaman-halaman}} yang tertransklusi pada ($1)",
-       "pageinfo-toolboxlink": "Maklumat halaman",
+       "pageinfo-toolboxlink": "Maklumat laman",
        "pageinfo-redirectsto": "Melencong ke",
        "pageinfo-redirectsto-info": "maklumat",
        "pageinfo-contentpage": "Dikira sebagai halaman kandungan",
        "newimages-summary": "Laman khas ini memaparkan senarai fail muat naik terakhir.",
        "newimages-legend": "Penapis",
        "newimages-label": "Nama fail (atau sebahagian daripadanya):",
-       "showhidebots": "($1 bot)",
        "noimages": "Tiada imej.",
        "ilsubmit": "Cari",
        "bydate": "mengikut tarikh",
        "htmlform-chosen-placeholder": "Pilih satu pilihan",
        "sqlite-has-fts": "$1 dengan sokongan carian teks penuh",
        "sqlite-no-fts": "$1 tanpa sokongan carian teks penuh",
-       "logentry-delete-delete": "$1 telah {{GENDER:$2|menghapuskan}} halaman $3",
-       "logentry-delete-restore": "$1 telah {{GENDER:$2|memulihkan}} halaman $3",
+       "logentry-delete-delete": "$1 telah {{GENDER:$2|menghapuskan}} laman $3",
+       "logentry-delete-restore": "$1 telah {{GENDER:$2|memulihkan}} laman $3",
        "logentry-delete-event": "$1 telah {{GENDER:$2|mengubah}} keterlihatan $5 peristiwa log di $3: $4",
        "logentry-delete-revision": "$1 telah {{GENDER:$2|mengubah}} keterlihatan $5 semakan di halaman $3: $4",
        "logentry-delete-event-legacy": "$1 telah {{GENDER:$2|mengubah}} keterlihatan peristiwa log di $3",
        "revdelete-uname-unhid": "nama pengguna terdedah",
        "revdelete-restricted": "mengenakan sekatan pada penyelia",
        "revdelete-unrestricted": "menarik sekatan daripada penyelia",
-       "logentry-move-move": "$1 telah {{GENDER:$2|memindahkan}} halaman $3 ke $4",
-       "logentry-move-move-noredirect": "$1 telah {{GENDER:$2|memindahkan}} halaman $3 ke $4 tanpa meninggalkan lencongan",
-       "logentry-move-move_redir": "$1 telah {{GENDER:$2|memindahkan}} halaman $3 ke $4 melalui lencongan",
-       "logentry-move-move_redir-noredirect": "$1 telah {{GENDER:$2|memindahkan}} halaman $3 ke $4 melalui lencongan tanpa meninggalkan lencongan",
+       "logentry-move-move": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4",
+       "logentry-move-move-noredirect": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 tanpa meninggalkan lencongan",
+       "logentry-move-move_redir": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 melalui lencongan",
+       "logentry-move-move_redir-noredirect": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 melalui lencongan tanpa meninggalkan lencongan",
        "logentry-patrol-patrol": "$1 telah {{GENDER:$2|menanda}} semakan $4 di halaman $3 sebagai dironda",
        "logentry-patrol-patrol-auto": "$1 telah {{GENDER:$2|menanda}} semakan $4 di halaman $3 sebagai dironda secara automatik",
        "logentry-newusers-newusers": "Akaun pengguna $1 telah {{GENDER:$2|dibuka}}",
index 67cb82a..19b30e3 100644 (file)
@@ -7,7 +7,8 @@
                        "Malafaya",
                        "Roderick Mallia",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "CharlieTheCabbie"
                ]
        },
        "tog-underline": "Ħoloq sottolinjati:",
@@ -34,7 +35,7 @@
        "tog-shownumberswatching": "Uri n-numru ta' utenti li qegħdin isegwu din il-paġna",
        "tog-oldsig": "Firma attwali:",
        "tog-fancysig": "Interpreta l-firma bħala test tal-wiki (mingħajr ħolqa awtomatika)",
-       "tog-uselivepreview": "Attiva l-funzjoni ''Live preview'' (bżonn tal-JavaScript; sperimentali)",
+       "tog-uselivepreview": "Attiva l-funzjoni ''Previżjoni jgħixu'' (bżonn tal-JavaScript; sperimentali)",
        "tog-forceeditsummary": "Nebbaħni meta ndaħħal taqsira tal-modifika vojta",
        "tog-watchlisthideown": "Aħbi l-modifiki tiegħi mil-lista ta' osservazzjoni",
        "tog-watchlisthidebots": "Aħbi l-modifiki tal-bots mil-lista ta' osservazzjoni",
@@ -50,7 +51,7 @@
        "tog-prefershttps": "Dejjem uża l-konnessjoni sigura meta tidħol fil-kont",
        "underline-always": "Dejjem",
        "underline-never": "Qatt",
-       "underline-default": "Żomm l-issettjar tal-browser",
+       "underline-default": "Jżommu tieghek l-issettjar għal tal-browser jew tas-ġilda",
        "editfont-style": "Stil tat-tipa tal-kaxxa tal-editjar:",
        "editfont-default": "Żomm l-issettjar tal-browser",
        "editfont-monospace": "Tipa monospazja",
        "newwindow": "(tinfetaħ f'tieqa ġdida)",
        "cancel": "Annulla",
        "moredotdotdot": "Aktar...",
-       "morenotlisted": "Oħrajn mhux imniżżla...",
+       "morenotlisted": "Oħrajn mhux imniżżla.",
        "mypage": "Paġna",
        "mytalk": "Diskussjoni",
        "anontalk": "Diskussjoni għal dan l-IP",
        "permalink": "Ħolqa permanenti",
        "print": "Ipprintja",
        "view": "Dehra",
+       "view-foreign": "Tara fuq $1",
        "edit": "Editja",
+       "edit-local": "Timmodifika deskrizzjoni lokali",
        "create": "Oħloq",
+       "create-local": "Żid deskrizzjoni lokali",
        "editthispage": "Immodifika din il-paġna",
        "create-this-page": "Oħloq din il-paġna",
        "delete": "Ħassar",
        "blockip": "Imblokka lil utent",
        "blockip-legend": "Imblokka 'l-utent",
        "blockiptext": "Uża l-formola t'hawn taħt sabiex biex tibblokkja l-aċċess tal-kitba lil IP speċifiku jew utent.\nIl-blokk irid ikun użat biss sabiex jitnaqqas iċ-ċans ta' vandaliżmu, u għandu josservja b'mod strett il-[[{{MediaWiki:Policy-url}}|politika ta' {{SITENAME}}]].\nIndika r-raġuni speċifika għalfejn tixtieq tipproċedi bil-blokk (per eżempju, billi turi l-paġni partikolari li ġew ivvandalizzati).",
-       "ipadressorusername": "Indirizz tal-IP jew isem tal-utent:",
+       "ipaddressorusername": "Indirizz tal-IP jew isem tal-utent:",
        "ipbexpiry": "Skadenza tal-imblokk:",
        "ipbreason": "Raġuni:",
        "ipbreason-dropdown": "*Raġunijiet komuni dwar blokki\n** Iddaħħal informazzjoni falza\n** Tneħħi kontenut mill-paġni\n** Links kummerċjali ma' siti esterni\n** Iddaħal kontenut bla sens\n** Komportament intimidanti jew molestiku\n** Abbuż minn aktar minn kont wieħed\n** isem ta' utent mhux aċċettabli",
        "newimages-summary": "Din il-paġna speċjali turi l-aħħar fajls li ġew mtella' riċentament.",
        "newimages-legend": "Filtru",
        "newimages-label": "Isem tal-fajl (jew parti minnu):",
-       "showhidebots": "($1 bots)",
        "noimages": "M'hawn xejn x'tara.",
        "ilsubmit": "Fittex",
        "bydate": "data",
index 83d33d9..e17ea9c 100644 (file)
        "whatlinkshere-hideimages": "$1 tlahcuilōltzonhuīliztli",
        "blockip": "Tiquitzacuilīz tlatequitiltilīlli",
        "blockip-legend": "Tiquitzacuilīz tlatequitiltilīlli",
-       "ipadressorusername": "IP nozo tlatequitiltilīlli ītōcā:",
+       "ipaddressorusername": "IP nozo tlatequitiltilīlli ītōcā:",
        "ipbexpiry": "Motlamia:",
        "ipbreason": "Īxtlamatiliztli:",
        "ipbsubmit": "Tiquitzacuilīz inīn tlatequitiltilīlli",
        "show-big-image": "Mochi cuallōtl",
        "newimages": "Yancuīc īxipcān",
        "imagelisttext": "Nicān {{PLURAL:$1|mopiya|mopiyah}} '''$1''' īxiptli $2 iuhcopa.",
-       "showhidebots": "($1 tepoztlācah)",
        "noimages": "Ahtlein ic tlatta.",
        "ilsubmit": "Tlatēmōz",
        "bydate": "tōnalcopa",
index 40c2325..ec11620 100644 (file)
        "action-createpage": "opprette sider",
        "action-createtalk": "opprette diskusjonssider",
        "action-createaccount": "opprette denne kontoen",
+       "action-history": "se historikken til denne siden",
        "action-minoredit": "merke denne redigeringen som mindre",
        "action-move": "flytte denne siden",
        "action-move-subpages": "flytte denne siden og dens undersider",
        "blockip": "Blokker bruker",
        "blockip-legend": "Blokker bruker",
        "blockiptext": "Bruk skjemaet under for å blokkere en IP-adresses tilgang til å redigere artikler. Dette må kun gjøres for å forhindre hærverk, og i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjene]]. Fyll ut en spesiell begrunnelse under.",
-       "ipadressorusername": "IP-adresse eller brukernavn",
+       "ipaddressorusername": "IP-adresse eller brukernavn",
        "ipbexpiry": "Varighet:",
        "ipbreason": "Årsak:",
        "ipbreason-dropdown": "*Vanlige blokkeringsgrunner\n** Legger inn feilinformasjon\n** Fjerner innhold fra sider\n** Lenkespam\n** Legger inn vås\n** Truende oppførsel\n** Misbruk av flere kontoer\n** Uakseptabelt brukernavn",
        "newimages-summary": "Denne spesialsiden viser de sist opplastede filene.",
        "newimages-legend": "Filnavn",
        "newimages-label": "Filnavn (helt eller delvis):",
-       "showhidebots": "($1 roboter)",
        "noimages": "Ingenting å se.",
        "ilsubmit": "Søk",
        "bydate": "etter dato",
        "htmlform-no": "Nei",
        "htmlform-yes": "Ja",
        "htmlform-chosen-placeholder": "Velg et alternativ",
+       "htmlform-cloner-create": "Legg til mer",
+       "htmlform-cloner-delete": "Fjern",
+       "htmlform-cloner-required": "Minst én verdi kreves.",
        "sqlite-has-fts": "$1 med støtte for fulltekstsøk",
        "sqlite-no-fts": "$1 uten støtte for fulltekstsøk",
        "logentry-delete-delete": "$1 {{GENDER:$2|slettet}} siden $3",
index 02b902c..be69979 100644 (file)
        "rcnotefrom": "Dit bin de wiezigingen sinds <strong>$2</strong> (maximum van <strong>$1</strong> wiezigingen).",
        "rclistfrom": "Bekiek wiezigingen vanaof $3 $2",
        "rcshowhideminor": "$1 kleine wiezigingen",
+       "rcshowhideminor-show": "Bekieken",
+       "rcshowhideminor-hide": "Verbargen",
        "rcshowhidebots": "$1 botgebrukers",
+       "rcshowhidebots-show": "Bekieken",
+       "rcshowhidebots-hide": "Verbargen",
        "rcshowhideliu": "$1 eregistreerden gebrukers",
+       "rcshowhideliu-show": "Bekieken",
+       "rcshowhideliu-hide": "Verbargen",
        "rcshowhideanons": "$1 anonieme gebrukers",
+       "rcshowhideanons-show": "Bekieken",
+       "rcshowhideanons-hide": "Verbargen",
        "rcshowhidepatr": "$1 nao-ekeken bewarkingen",
+       "rcshowhidepatr-show": "Bekieken",
+       "rcshowhidepatr-hide": "Verbargen",
        "rcshowhidemine": "$1 mien bewarkingen",
+       "rcshowhidemine-show": "Bekieken",
+       "rcshowhidemine-hide": "Verbargen",
        "rclinks": "Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen<br />$3",
        "diff": "wiezig",
        "hist": "gesch",
        "blockip": "Gebruker blokkeren",
        "blockip-legend": "n Gebruker of IP-adres blokkeren",
        "blockiptext": "Gebruuk dit formulier um n IP-adres of gebrukersnaam te blokkeren. \nt Is bedoeld um vandalisme te veurkoemen en mut akkederen mit t [[{{MediaWiki:Policy-url}}|beleid]]. \nGeef hieronder n reden op (bieveurbeeld op welke ziejen de vandalisme epleegd is).",
-       "ipadressorusername": "IP-adres of gebrukersnaam",
+       "ipaddressorusername": "IP-adres of gebrukersnaam",
        "ipbexpiry": "Verlöp nao",
        "ipbreason": "Reden:",
        "ipbreason-dropdown": "*Algemene redens veur t blokkeren\n** verkeerde informasie invoeren\n** ziejen leegmaken\n** ongewunste verwiezingen plaotsen\n** onzinteksten schrieven\n** targerieje of naor gedrag\n** misbruuk vanaof meerdere profielen\n** ongewunste gebrukersnaam",
        "newimages-summary": "Op disse spesiale zied staon de bestaanden die der as lest bie-ekeumen bin.",
        "newimages-legend": "Bestaandsnaam",
        "newimages-label": "Bestaandsnaam (of deel dervan):",
-       "showhidebots": "(Bots $1)",
        "noimages": "Niks te zien.",
        "ilsubmit": "Zeuk",
        "bydate": "op daotum",
index 108230a..477a9e0 100644 (file)
        "blockip": "प्रयोगकर्तालाइ निषेध गर्ने",
        "blockip-legend": "प्रयोगकर्ता रोक्नुहोस",
        "blockiptext": "विशेष IP ठेगाना अथवा प्रयोगकर्तालाई रोक लगाउन निम्न प्रपत्र (form) प्रयोग गर्नुहोस्।\nयसो गर्नुको कारण [[{{MediaWiki:Policy-url}}|नीति]] अनुरुप विकिमा गरिने बर्बरताका कार्य रोक्नु मात्र हो।\nविशेष कारण देखाउँदै तलको प्रपत्र भर्नुहोस्  (उदाहरण, बर्बरताको कार्य गरिएको पृष्ठ दर्शाउँदै)",
-       "ipadressorusername": " ip ठेगाना या प्रयोगकर्ता नाम :",
+       "ipaddressorusername": " ip ठेगाना या प्रयोगकर्ता नाम :",
        "ipbexpiry": "समाप्ति:",
        "ipbreason": "कारण:",
        "ipbreason-dropdown": "*रोक लगाउनुका समान्य कारणहरु\n** झूटो सूचना दिइएको\n** पृष्ठहरुबाट सामाग्रीहरु हटाइएको\n** बाहिरी जालक्षेत्र (sites)सित नचाहिंदो लिङ्क गराइएको \n** पृष्ठहरुमा बकवास/गाली-गलौच हालिएको\n** भय फैलाउने व्यवहार/उत्पीडन (सताउने कार्य)\n** धेरै गलत खाताहरु\n** प्रयोगकर्ता नाम अस्वीकार्य",
        "newimages-summary": "यस विशेष पृष्ठले अन्तिम उर्ध्वभरण गरिका फाइलहरु देखाउँछ ।",
        "newimages-legend": "फिल्टर",
        "newimages-label": "फाइल अथवा (यसको एउटा अंश)को नाम:",
-       "showhidebots": "($1 बोटहरु)",
        "noimages": "हेर्नको लागि केही छैन.",
        "ilsubmit": "खोज्नुहोस्",
        "bydate": "मिति अनुसार",
index 830d2be..8098a39 100644 (file)
        "blockip": "Gebruiker blokkeren",
        "blockip-legend": "Gebruiker blokkeren",
        "blockiptext": "Gebruik het onderstaande formulier om schrijftoegang voor een gebruiker of IP-adres in te trekken.\nDoe dit alleen als bescherming tegen vandalisme en in overeenstemming met het [[{{MediaWiki:Policy-url}}|beleid]].\nGeef hieronder een reden op (bijvoorbeeld welke pagina's gevandaliseerd zijn).",
-       "ipadressorusername": "IP-adres of gebruikersnaam:",
+       "ipaddressorusername": "IP-adres of gebruikersnaam:",
        "ipbexpiry": "Vervalt (maak een keuze):",
        "ipbreason": "Reden:",
        "ipbreason-dropdown": "*Veelvoorkomende redenen voor blokkades\n** Foutieve informatie invoeren\n** Verwijderen van informatie uit pagina's\n** Spamkoppeling naar externe websites\n** Invoegen van nonsens in pagina's\n** Intimiderend gedrag\n** Misbruik door meerdere gebruikers\n** Onaanvaardbare gebruikersnaam",
        "newimages-summary": "Op deze speciale pagina worden de meest recent toegevoegde bestanden weergegeven.",
        "newimages-legend": "Bestandsnaam",
        "newimages-label": "Bestandsnaam (of deel daarvan):",
-       "showhidebots": "(Bots $1)",
        "noimages": "Er is niets te zien.",
        "ilsubmit": "Zoeken",
        "bydate": "op datum",
index 5a0d083..73132c3 100644 (file)
        "blockip": "Blokker brukar",
        "blockip-legend": "Blokker brukar",
        "blockiptext": "Bruk skjemaet nedanfor for å blokkere skrivetilgangen frå ei spesifikk IP-adresse eller brukarnamn. Dette bør berre gjerast for å hindre hærverk, og i samsvar med [[{{MediaWiki:Policy-url}}|retningslinene]].",
-       "ipadressorusername": "IP-adresse eller brukarnamn",
+       "ipaddressorusername": "IP-adresse eller brukarnamn",
        "ipbexpiry": "Opphøyrstid:",
        "ipbreason": "Årsak:",
        "ipbreason-dropdown": "*Vanlege grunnar for blokkering\n** Legg inn usann tekst/tull\n** Fjernar innhald frå sider\n** Legg inn reklamelenkjer til eksterne nettstader\n** Sjikane/plaging av andre brukarar\n** Misbruk ved hjelp av fleire brukarkontoar\n** Uansvarleg brukarnamn",
        "newimages-summary": "Denne spesialsida syner dei sist opplasta filene.",
        "newimages-legend": "Filnamn",
        "newimages-label": "Filnamn (eller ein del av det):",
-       "showhidebots": "($1 robotar)",
        "noimages": "Her er ingen filer som kan visast.",
        "ilsubmit": "Søk",
        "bydate": "etter dato",
index 76a9c98..fb98376 100644 (file)
        "blockip": "Blocar en escritura",
        "blockip-legend": "Blocar en escritura",
        "blockiptext": "Utilizatz lo formulari çaijós per blocar l'accès a las modificacions a partir d'una adreça IP especifica o d'un nom d'utilizaire.\nUna tala mesura deu pas èsser presa pas que per empachar lo vandalisme e en acòrdi amb las [[{{MediaWiki:Policy-url}}|règlas intèrnas]].\nDonatz çaijós un motiu precís (per exemple en citant las paginas que son estadas vandalizadas).",
-       "ipadressorusername": "Adreça IP o nom d’utilizaire :",
+       "ipaddressorusername": "Adreça IP o nom d’utilizaire :",
        "ipbexpiry": "Durada del blocatge :",
        "ipbreason": "Motiu :",
        "ipbreason-dropdown": "* Motius de blocatge mai frequents\n** Vandalisme\n** Insercion d’informacions faussas\n** Supression de contengut sens justificacion\n** Insercion repetida de ligams extèrnes publicitaris (spam)\n** Insercion de contengut sens cap de sens\n** Temptativa d’intimidacion o agarriment\n** Abús d’utilizacion de comptes multiples\n** Nom d’utilizaire inacceptable, injuriós o difamant",
        "newimages-summary": "Aquesta pagina especiala aficha los darrièrs fichièrs importats.",
        "newimages-legend": "Filtre",
        "newimages-label": "Nom del fichièr (o una partida d'aqueste) :",
-       "showhidebots": "($1 bòts)",
        "noimages": "Cap d'imatge d'afichar pas.",
        "ilsubmit": "Cercar",
        "bydate": "per data",
index 667640b..46be876 100644 (file)
                ]
        },
        "tog-underline": "ତଳେ ଥିବା ଲିଙ୍କ:",
-       "tog-hideminor": "ଛୋଟ ଛୋଟ ନଗଦ ବଦଳ ସବୁକୁ ଲୁଚାଇବେ",
+       "tog-hideminor": "ଛୋଟମୋଟ ନଗଦ ବଦଳସବୁକୁ ଲୁଚାଇବେ",
        "tog-hidepatrolled": "ନଗଦ ବଦଳରେ ଥିବା ଜଗାହୋଇଥିବା ବଦଳ ସବୁକୁ ଲୁଚାଇବେ",
        "tog-newpageshidepatrolled": "ନୂଆ ପୃଷ୍ଠାତାଲିକାରୁ ଜଗାହୋଇଥିବା ବଦଳସବୁକୁ ଲୁଚାଇବେ",
-       "tog-extendwatchlist": "à¬\95à­\87ବଳ à¬¨à¬\97ଦ à¬¨à­\81ହà­\87à¬\81, à¬¸à¬¬à­\81ଯାà¬\95 à¬¬à¬¦à¬³à¬\95à­\81 à¬¦à­\87à¬\96ାà¬\87ବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାà¬\95à­\81 à¬¬à¬¢à¬¼ାଇବେ",
+       "tog-extendwatchlist": "à¬\95à­\87ବଳ à¬¨à¬\97ଦ à¬¹à¬¿à¬\81 à¬¨à­\81ହà­\87à¬\81, à¬¸à¬¬à­\81ଯାà¬\95 à¬¬à¬¦à¬³à¬\95à­\81 à¬¦à­\87à¬\96ାà¬\87ବା à¬ªà¬¾à¬\87à¬\81 à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାà¬\95à­\81 à¬ªà­\82ରା à¬¦à­\87à¬\96ାଇବେ",
        "tog-usenewrc": "ନଗଦ ବଦଳରେ ପୃଷ୍ଠା ଅନୁଯାୟୀ ଗୋଷ୍ଠୀ ବଦଳ ଏବଂ ଦେଖଣା",
        "tog-numberheadings": "ଆପେଆପେ-ସଂଖ୍ୟାର ନାମଗୁଡ଼ିକ",
        "tog-showtoolbar": "ସମ୍ପାଦନା ଟୁଲବାର ଦେଖାଇବେ",
@@ -41,7 +41,7 @@
        "tog-uselivepreview": "ସାଥେ ସାଥେ ଚାଲିଥିବା ଦେଖଣା ବ୍ୟବହାର କରିବେ (ପରୀକ୍ଷାରେ ଅଛି)",
        "tog-forceeditsummary": "ଖାଲି ସମ୍ପାଦନା ସାରକଥାକୁ ଯିବା ବେଳେ ମୋତେ ଜଣାଇବେ",
        "tog-watchlisthideown": "ମୋ ଦେଖଣା ତାଲିକାରେ ମୋ ନିଜର ସମ୍ପାଦନାଗୁଡ଼ିକ ଲୁଚାଇବେ",
-       "tog-watchlisthidebots": "ଦà­\87à¬\96ଣା à¬¤à¬¾à¬²à¬¿à¬\95ାରà­\87 à¬¬à¬\9f à¬¦à­\87à¬\87 à¬¬à¬¦à¬³ à¬\97à­\81ଡ଼ିà¬\95 ଲୁଚାଇବେ",
+       "tog-watchlisthidebots": "ଦà­\87à¬\96ଣା à¬¤à¬¾à¬²à¬¿à¬\95ାରà­\87 à¬¸à­\8dà­±à­\9fà¬\82à¬\9aାଳà¬\95 (Bot)ର à¬¸à¬®à­\8dପାଦନାମାନ ଲୁଚାଇବେ",
        "tog-watchlisthideminor": "ଦେଖଣା ତାଲିକାରେ ଛୋଟ ଛୋଟ ବଦଳ ଗୁଡ଼ିକ ଲୁଚାଇବେ",
        "tog-watchlisthideliu": "ଲଗ ଇନ କରିଥିବା ସଭ୍ୟମାନଙ୍କ ଦେଇ କରାହୋଇଥିବା ବଦଳଗୁଡ଼ିକ ଲୁଚାଇବେ",
        "tog-watchlisthideanons": "ଅଜଣା ସଭ୍ୟମାନଙ୍କ ଦେଇ କରାହୋଇଥିବା ବଦଳଗୁଡ଼ିକ ଲୁଚାଇବେ",
        "pool-errorunknown": "ଅଜଣା ଅସୁବିଧା",
        "aboutsite": "{{SITENAME}} ବାବଦରେ",
        "aboutpage": "Project:ବାବଦରେ",
-       "copyright": "à¬\85ଲà¬\97ା à¬­à¬¾à¬¬à­\87 à¬\89ଲà­\8dଲà­\87à¬\96 à¬¨ à¬\95ରାଯିବ à¬¯à¬¾à¬\8fà¬\81 à¬\8fହା $1 à¬°à­\87 à¬¸à¬°à­\8dବସà­\8dଵତà­\8dଵ à¬¸à¬\82ରà¬\95à­\8dଷିତ",
+       "copyright": "ଯଦି à¬\89ଲà­\8dଲà­\87à¬\96 à¬¹à­\8bà¬\87ନାହିà¬\81 à¬\8fହା $1 à¬\85ଧà­\80ନରà­\87 à¬¬à¬¿à¬¤à¬°à¬¿à¬¤ à¥¤",
        "copyrightpage": "{{ns:project}}:କପିରାଇଟ",
        "currentevents": "ଏବେକାର ଘଟଣା",
        "currentevents-url": "Project:ଏବେକାର ଘଟଣା",
        "toc": "ବିଷୟସୂଚୀ",
        "showtoc": "ଦେଖାଇବେ",
        "hidetoc": "ଲୁଚାନ୍ତୁ",
-       "collapsible-collapse": "à¬\9aାପିଦà­\87ବà­\87",
-       "collapsible-expand": "ବଢ଼ାଇବେ",
+       "collapsible-collapse": "ଲà­\81à¬\9aାà¬\87ବà­\87",
+       "collapsible-expand": "ଦà­\87à¬\96ାଇବେ",
        "thisisdeleted": "$1 କୁ ଦେଖିବେ ଅବା ପୁନସ୍ଥାପନ କରିବେ?",
        "viewdeleted": "ଦେଖିବା $1?",
        "restorelink": "{{PLURAL:$1|ଗୋଟିଏ ଲିଭାଯାଇଥିବା ବଦଳ|$1ଟି ଲିଭାଯାଇଥିବା ବଦଳ}}",
        "last": "ଆଗ",
        "page_first": "ପ୍ରଥମ",
        "page_last": "ଶେଷ",
-       "histlegend": "à¬\85ଲà¬\97ା à¬¬à¬\9bା:ସà¬\99à­\8dà¬\95ଳନ à¬¸à¬¬à­\81ର à¬°à­\87ଡ଼ିà¬\93 à¬¬à¬¾à¬\95à­\8dସà¬\95à­\81 à¬¬à¬¾à¬\9bି à¬¤à­\81ଳନା à¬\95ରନà­\8dତà­\81 à¬\93 à¬\8fଣà­\8dà¬\9fର à¬¦à¬¬à¬¾à¬¨à­\8dତà­\81 à¬¬à¬¾ à¬¤à¬³à­\87 à¬¥à¬¿à¬¬à¬¾ à¬¬à¬\9fନ à¬¦à¬¬à¬¾à¬¨à­\8dତà­\81 à¥¤<br />\nସାରà¬\95ଥା: '''({{int:cur}})''' = à¬¨à¬\97ଦ à¬¸à¬\99à­\8dà¬\95ଳନରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬¤à¬«à¬¾à¬¤, '''({{int:last}})''' = à¬\86à¬\97 à¬¸à¬\99à­\8dà¬\95ଳନ à¬­à¬¿à¬¤à¬°à­\87 à¬¤à¬«à¬¾à¬¤, '''{{int:minoreditletter}}''' = à¬\9fିà¬\95à­\87 à¬¬à¬¦à¬³ ।",
+       "histlegend": "ଭିନà­\8dନ à¬¬à¬\9bା: à¬¬à¬¾à¬\9bିବା à¬ªà¬¾à¬\87à¬\81 à¬\97à­\8bଲ à¬¬à¬¾à¬\9bିବା à¬\98ରà­\87 à¬\95à­\8dଲିà¬\95 à¬\95ରି à¬\8fଣà­\8dà¬\9fର à¬\85ଥବା à¬¤à¬³à­\87 à¬¥à¬¿à¬¬à¬¾ à¬¬à¬\9fନ à¬¦à¬¬à¬¾à¬¨à­\8dତà­\81 à¥¤<br />\nନିରà­\8dଦà­\8dଦà­\87ଶିà¬\95ା: <strong>({{int:cur}})</strong> = à¬\97ତ à¬¸à¬\82ସà­\8dମରଣମାନà¬\99à­\8dà¬\95 à¬®à¬§à­\8dà­\9fରà­\87 à¬¤à¬«à¬¾à¬¤, <strong>({{int:last}})</strong> = à¬\86à¬\97ର à¬¸à¬\82ସà­\8dମରଣମାନà¬\99à­\8dà¬\95 à¬®à¬§à­\8dà­\9fରà­\87 à¬¤à¬«à¬¾à¬¤, <strong>{{int:minoreditletter}}</strong> = à¬\9bà­\8bà¬\9fମà­\8bà¬\9f à¬¸à¬®à­\8dପାଦନା ।",
        "history-fieldset-title": "ଇତିହାସ ଖୋଜିବା",
        "history-show-deleted": "କେବଳ ଲିଭାଯାଇଥିବା",
        "histfirst": "ସବୁଠୁ ପୁରୁଣା",
        "recentchanges-legend": "ଏବେ କରାଯାଇଥିବା ଅଦଳବଦଳ",
        "recentchanges-summary": "ଏହି ପୃଷ୍ଠାରେ ଏହି ଉଇକିରେ ନଗଦ ବଦଳର ନିଘା ରଖିବେ",
        "recentchanges-feed-description": "ଏହି ଉଇକିରେ ଏହି ଫିଡ଼ଟିର ନଗଦ ବଦଳ ଦେଖାଇବେ ।",
-       "recentchanges-label-newpage": "à¬\8fହି à¬¬à¬¦à¬³ à¬¨à­\82à¬\86 à¬«à¬°à¬¦à¬\9fିà¬\8f à¬¤à¬¿à¬\86ରିà¬\95ଲା",
-       "recentchanges-label-minor": "à¬\8fହା à¬\97à­\8bà¬\9fିà¬\8f à¬\9bà­\8bà¬\9f à¬¬à¬¦à¬³",
+       "recentchanges-label-newpage": "à¬\8fହି à¬¸à¬®à­\8dପାଦନା à¬¯à­\8bà¬\97à­\81à¬\81 à¬¨à­\82à¬\86 à¬ªà­\83ଷà­\8dଠାà¬\9fିà¬\8f à¬¤à¬¿à¬\86ରି à¬¹à­\87ଲା",
+       "recentchanges-label-minor": "à¬\8fହା à¬\96à­\81ବ à¬¸à¬¾à¬®à¬¾à¬¨à­\8dà­\9f à¬¸à¬®à­\8dପାଦନାà¬\9fିà¬\8f",
        "recentchanges-label-bot": "ଏହି ବଦଳଟି ଜଣେ '''ବଟ'''ଙ୍କ ଦେଇ କରାଯାଇଥିଲା",
        "recentchanges-label-unpatrolled": "ଏହି ବଦଳଟିକୁ ଏ ଯାଏଁ ପରଖା ଯାଇନାହିଁ",
        "rcnotefrom": "'''$2''' ପରର ବଦଳସବୁ ତଳେ ଦିଆଗଲା ('''$1''' ଯାଏଁ ଦେଖାଯାଇଛି) ।",
        "rclistfrom": "$3 $2ରୁ ଆରମ୍ଭ କରି ନୂଆ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
-       "rcshowhideminor": "$1 ଟି ଛୋଟମୋଟ ବଦଳ",
+       "rcshowhideminor": "ଛୋଟମୋଟ ବଦଳ $1",
        "rcshowhideminor-show": "ଦେଖାଇବେ",
        "rcshowhideminor-hide": "ଲୁଚାଇବେ",
-       "rcshowhidebots": "$1 ଜଣ ବଟ",
+       "rcshowhidebots": "ସ୍ୱୟଂଚାଳକ&nbsp;(Bot)&nbsp;ଦ୍ୱାରା&nbsp;ସମ୍ପାଦନା $1",
        "rcshowhidebots-show": "ଦେଖାଇବେ",
        "rcshowhidebots-hide": "ଲୁଚାଇବେ",
-       "rcshowhideliu": "$1 ଜଣ ନାଆଁ ଲେଖାଇଥିବା ବ୍ୟବହାରକାରୀ",
+       "rcshowhideliu": "ପଞ୍ଜୀକୃତ ସଭ୍ୟ $1",
        "rcshowhideliu-show": "ଦେଖାଇବେ",
        "rcshowhideliu-hide": "ଲୁଚାଇବେ",
-       "rcshowhideanons": "$1 ଜଣ ବେନାମି ସଭ୍ୟ",
+       "rcshowhideanons": "ବେନାମି ସଭ୍ୟ $1",
        "rcshowhideanons-show": "ଦେଖାଇବେ",
        "rcshowhideanons-hide": "ଲୁଚାଇବେ",
-       "rcshowhidepatr": "$1ଟି ଜଗାହୋଇଥିବା ବଦଳ",
+       "rcshowhidepatr": "ପରିକ୍ଷୀତ ବଦଳ $1",
        "rcshowhidepatr-show": "ଦେଖାଇବେ",
        "rcshowhidepatr-hide": "ଲୁଚାଇବେ",
-       "rcshowhidemine": "$1 ମୁଁ କରିଥିବା ବଦଳ",
+       "rcshowhidemine": "ମୋର ସମ୍ପାଦନା $1",
        "rcshowhidemine-show": "ଦେଖାଇବେ",
        "rcshowhidemine-hide": "ଲୁଚାଇବେ",
        "rclinks": "ଗଲା $2 ଦିନର $1 ବଦଳଗୁଡ଼ିକୁ ଦେଖାଇବେ<br />$3",
        "rc-enhanced-hide": "ବେଶି କଥାସବୁ ଲୁଚାଇଦିଅ",
        "rc-old-title": "ପ୍ରକୃତରେ \"$1\" ଭାବେ ତିଆରି କରାଯାଇକଥିଲା",
        "recentchangeslinked": "ଏଇମାତ୍ର ବଦଳାଯାଇଥିବା ପୃଷ୍ଠାର ଲିଙ୍କ",
-       "recentchangeslinked-feed": "ଯà­\8bଡ଼ାଥିବା ବଦଳ",
-       "recentchangeslinked-toolbox": "ଯà­\8bଡ଼ାଥିବା ବଦଳ",
-       "recentchangeslinked-title": "\"$1\" à¬¸à¬¾à¬\81à¬\97ରà­\87 à¬\9cà­\8bଡ଼ାଥିବା ବଦଳ",
+       "recentchangeslinked-feed": "ସମà­\8dପରà­\8dà¬\95ିତ ବଦଳ",
+       "recentchangeslinked-toolbox": "ସମà­\8dପରà­\8dà¬\95ିତ ବଦଳ",
+       "recentchangeslinked-title": "\"$1\" à¬¸à¬¹ à¬¸à¬®à­\8dବନà­\8dଧିତ ବଦଳ",
        "recentchangeslinked-summary": "ଏଇଟି କିଛିସମୟ ଆଗରୁ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାରୁ ଲିଙ୍କ ହୋଇଥିବା ଆଉ ବଦଳାଯାଇଥିବା (ଅବା ଗୋଟିଏ ନିର୍ଦ୍ଦିଷ୍ଟ ଶ୍ରେଣୀର) ପୃଷ୍ଠାସବୁର ତାଲିକା ।  [[Special:Watchlist|ମୋର ଦେଖାତାଲିକା]]ର ପୃଷ୍ଠା ସବୁ '''ବୋଲଡ଼'''।",
        "recentchangeslinked-page": "ଫରଦର ନାଆଁ",
-       "recentchangeslinked-to": "ଦିà¬\86ଯାà¬\87ଥିବା à¬«à¬°à¬¦à¬°à­\87 à¬¯à­\8bଡ଼ା à¬¬à¬¾à¬\95ି à¬«à¬°à¬¦à¬®à¬¾à¬¨à¬\99à­\8dà¬\95ର à¬¬à¬¦à¬³ à¬¸à¬¬à­\81 à¬¦à­\87à¬\96ାନà­\8dତà­\81 à¥¤",
+       "recentchangeslinked-to": "à¬\8fହାର à¬¬à¬¦à¬³à¬°à­\87 à¬¦à¬¿à¬\86ଯାà¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା à¬¸à¬¹ à¬¯à­\8bଡ଼ା à¬¬à¬¾à¬\95ି à¬ªà­\83ଷà­\8dଠାମାନà¬\99à­\8dà¬\95ର à¬¬à¬¦à¬³à¬®à¬¾à¬¨ à¬¦à­\87à¬\96ାନà­\8dତà­\81",
        "upload": "ଫାଇଲ ଅପଲୋଡ଼ କରିବେ",
        "uploadbtn": "ଫାଇଲ ଅପଲୋଡ଼ କରିବେ",
        "reuploaddesc": "ଅପଲୋଡ଼କୁ ନାକଚ କରିବେ ଓ ଅପଲୋଡ଼ ଫର୍ମକୁ ଫେରିବେ",
        "listusers": "ବ୍ୟବହାରକାରୀଙ୍କ ତାଲିକା",
        "listusers-editsonly": "କେବଳ କିଛି ସମ୍ପାଦନା କରିଥିବା ସଭ୍ୟମାନଙ୍କୁ ଦେଖାଇବେ",
        "listusers-creationsort": "ତିଆରି ତାରିଖ ଅନୁସାରେ ସଜାଇବେ",
-       "usereditcount": "$1 à¬\9fି {{PLURAL:$1|ବଦଳ}}",
+       "usereditcount": "$1 à¬\97à­\8bà¬\9fି {{PLURAL:$1|ସମà­\8dପାଦନା|ସମà­\8dପାଦନା}}",
        "usercreated": "$1 ତାରିଖ ଦିନ $2 ବେଳେ {{GENDER:$3|ତିଆରି କରାଗଲା}}",
        "newpages": "ନୂଆ ପୃଷ୍ଠା",
        "newpages-username": "ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:",
        "blockip": "ସଭ୍ୟଙ୍କୁ ଅଟକାଇବେ",
        "blockip-legend": "ସଭ୍ୟଙ୍କୁ ବାସନ୍ଦ କରିବେ",
        "blockiptext": "ଏକ ନିର୍ଦିଷ୍ଟ IP ଠିକଣା ବା ବ୍ୟବହାରକାରୀଙ୍କ ଲେଖିବା ସୁବିଧାକୁ ବାରାଁ କରିବା ନିମନ୍ତେ ଏହି ତଳ ଫର୍ମଟି ବ୍ୟବହାର କରନ୍ତୁ ।\nଏହା କେବଳ ଅପବ୍ୟବହାରକୁ ରୋକିବା ନିମନ୍ତେ କରାଯାଇଥାଏ, ଏହା [[{{MediaWiki:Policy-url}}|ନୀତି]] ଅନୁସାରେ କରାଯାଇଥାଏ ।\nଏହା ତଳେ ଏକ ନିର୍ଦିଷ୍ଟ କାରଣ ଦିଅନ୍ତୁ (ଯଥା, ଯେଉଁସବୁ ପୃଷ୍ଠାରେ କିଛି ପ୍ରକାରର ଅପବ୍ୟବହାର କରାଯାଇଛି) ।",
-       "ipadressorusername": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
+       "ipaddressorusername": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
        "ipbexpiry": "ମିଆଦ:",
        "ipbreason": "କାରଣ:",
        "ipbreason-dropdown": "*ସାଧାରଣ ଅଟକ କାରଣ\n** ଭୁଲ ବିବରଣୀ ଦେବା\n** ପୃଷ୍ଠାରୁ ବିବରଣୀ କାଢିବା\n** ଅନନୁମୋଦିତ ବାହାର ସାଇଟର ଲିଙ୍କ ସ୍ପାମ କରିବା\n** ଅଯଥା କଥା ପୃଷ୍ଠାରେ ପୁରାଇବା\n** ଧମକାଣି/ଅପମାନ\n** ଏକାଧିକ ଖାତାରେ ଅସଦାଆଚରଣ\n** ଗ୍ରହଣ ଅଯୋଗ୍ୟ ଇଉଜର ନାମ",
        "tooltip-n-mainpage-description": "ପ୍ରଧାନ ପୃଷ୍ଠା",
        "tooltip-n-portal": "ଏହି ପ୍ରକଳ୍ପଟିରେ ଖୋଜା ଖୋଜି ପାଇଁ ଆପଣ କେମିତି ସାହାଯ୍ୟ କରିପାରିବେ",
        "tooltip-n-currentevents": "ନଗଦ କାମର ପଛପଟେ ଚାଲିଥିବା କାମର ତଥ୍ୟ",
-       "tooltip-n-recentchanges": "ୱିà¬\95ିରà­\87 à¬\8fହିମାତà­\8dର à¬\95ରାଯାà¬\87ଥିବା à¬\85ଦଳ à¬¬à¬¦à¬³",
+       "tooltip-n-recentchanges": "à¬\89à¬\87à¬\95ିରà­\87 à¬¹à­\8bà¬\87ଥିବା à¬¨à¬\97ଦ à¬¬à¬¦à¬³à¬° à¬¤à¬¾à¬²à¬¿à¬\95ା",
        "tooltip-n-randompage": "ଯାହିତାହି ପୃଷ୍ଠାଟିଏ ଖୋଲ",
        "tooltip-n-help": "ଖୋଜି ପାଇବା ଭଳି ଜାଗା",
        "tooltip-t-whatlinkshere": "ଏଠାରେ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠାସବୁର ତାଲିକା",
        "tooltip-ca-nstab-template": "ଟେମ୍ପଲେଟଟି ଦେଖିବା",
        "tooltip-ca-nstab-help": "ସହାଯୋଗ ପୃଷ୍ଠାଟି ଦେଖନ୍ତୁ",
        "tooltip-ca-nstab-category": "ଶ୍ରେଣୀ ପୃଷ୍ଠାଟିକୁ ଦେଖାଇବେ",
-       "tooltip-minoredit": "à¬\8fହାà¬\95à­\81 à¬\8fà¬\95 à¬\9bà­\8bà¬\9f à¬¬à¬¦à¬³ ଭାବେ ଗଣିବେ",
+       "tooltip-minoredit": "à¬\8fହାà¬\95à­\81 à¬\8fà¬\95 à¬¸à¬¾à¬®à¬¾à¬¨à­\8dà­\9f à¬¸à¬®à­\8dପାଦନା ଭାବେ ଗଣିବେ",
        "tooltip-save": "ବଦଳଗୁଡ଼ିକ ସାଇତିବେ",
-       "tooltip-preview": "ସାà¬\87ତିବା à¬\86à¬\97ରà­\81 à¬\95ରିଥିବା à¬¬à¬¦à¬³ ପରଖିନିଅନ୍ତୁ!",
+       "tooltip-preview": "ସାà¬\87ତିବା à¬\86à¬\97ରà­\81 à¬¨à¬¿à¬\9cର à¬¸à¬®à­\8dପାଦନା ପରଖିନିଅନ୍ତୁ!",
        "tooltip-diff": "ଏହି ଲେଖାରେ ଆପଣ କରିଥିବା ବଦଳଗୁଡିକୁ ଦେଖନ୍ତୁ ।",
        "tooltip-compareselectedversions": "ଏହି ଫରଦର ଦୁଇଟି ବଛାଯାଇଥିବା ସଁକଳନକୁ ତଉଲିବା",
        "tooltip-watch": "ଆପଣଙ୍କ ଦେଖାତାଲିକାରେ ଏଇ ପୃଷ୍ଠାଟି ମିଶାଇବେ",
        "tooltip-recreate": "ଏହି ପୃଷ୍ଠାଟି ଲିଭାଇଦିଆଯାଇଥିଲେ ବି ଆଉଥରେ ତିଆରି କରନ୍ତୁ",
        "tooltip-upload": "ଅପଲୋଡ଼ କରନ୍ତୁ",
        "tooltip-rollback": "\"ଫେରିବା\" ଏହି ଫରଦରେ ଶେଷ ଦାତାଙ୍କ ଦେଇ କରାଯାଇଥିବା ସବୁଯାକ ବଦଳକୁ  ଏକାଥରକରେ ପଛକୁ ଫେରାଇଦେବ",
-       "tooltip-undo": "\"à¬\95ରନାହିà¬\81\" à¬\86à¬\97ରà­\81 à¬\95ରାଯାà¬\87ଥିବା à¬¬à¬¦à¬³à¬\9fିà¬\95à­\81 à¬ªà¬\9bà¬\95à­\81 à¬²à­\87à¬\89à¬\9fାà¬\87ଦିà¬\8f à¬\86à¬\89 à¬¬à¬¦à¬³ à¬«à¬°à¬®à¬\9fିà¬\95à­\81 à¬¦à­\87à¬\96ଣା à¬­à¬¾à¬¬à¬°à­\87 à¬\96à­\8bଲà­\87 à¥¤ à¬\8fହା à¬\86ପଣà¬\99à­\8dà¬\95à­\81 à¬¸à¬¾à¬°à¬\95ଥାରà­\87 à¬\97à­\8bà¬\9fିà¬\8f à¬\95ାରଣ à¬²à­\87à¬\96ିବାà¬\95à­\81 à¬\85ନà­\81ମତି ଦିଏ ।",
+       "tooltip-undo": "\"à¬\95ରନାହିà¬\81\" à¬¦à¬¬à¬¾à¬\87ଲà­\87 à¬\86à¬\97ରà­\81 à¬¹à­\8bà¬\87ଥିବା à¬¸à¬®à­\8dପାଦନାà¬\9fିà¬\8f à¬ªà¬\9bà¬\95à­\81 à¬²à­\87à¬\89à¬\9fିଯାà¬\8f à¬\93 à¬¤à¬¾à¬¹à¬¾ à¬¸à¬®à­\8dପାଦନା à¬ªà­\83ଷà­\8dଠାà¬\9fିà¬\95à­\81 '''ଦà­\87à¬\96ଣା''' à¬­à¬¾à¬¬à­\87 à¬\96à­\8bଲà­\87 à¥¤ à¬\86ପଣà¬\99à­\8dà¬\95à­\81 à¬\8fହା à¬¸à¬¾à¬°à¬\95ଥାରà­\87 à¬\95ାରଣà¬\9fିà¬\8f à¬²à­\87à¬\96ିବାର à¬¸à­\81ଯà­\8bà¬\97 ଦିଏ ।",
        "tooltip-preferences-save": "ଆପଣା ପସନ୍ଦ ସାଇତିବେ",
        "tooltip-summary": "ଛୋଟ ସାରକଥାଟିଏ ଦିଅନ୍ତୁ",
        "anonymous": "{{SITENAME}}ର ଅଜଣା {{PLURAL:$1|ଜଣ ବ୍ୟବହାରକାରୀ |ଜଣ ବ୍ୟବହାରକାରୀଗଣ}}",
        "newimages-summary": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଶେଷ ଅପଲୋଡ଼ ହୋଇଥିବା ଫାଇଲମାନ ଦେଖାଇଥାଏ ।",
        "newimages-legend": "ଛାଣିବା",
        "newimages-label": "ଫାଇଲ ନାମ (କିମ୍ବା ତାହାର ଏକ ଭାଗ):",
-       "showhidebots": "($1 ଜଣ ବଟ)",
        "noimages": "ଦେଖିବାକୁ କିଛି ନାହିଁ ।",
        "ilsubmit": "ଖୋଜିବା",
        "bydate": "ତାରିଖ ଅନୁସାରେ",
index dcaf88f..3746ad8 100644 (file)
        "unblock": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਲੱਗੀ ਪਾਬੰਦੀ ਹਟਾਓ",
        "blockip": "ਵਰਤੋਂਕਾਰ ’ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
        "blockip-legend": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
-       "ipadressorusername": "IP ਐਡਰੈਸ ਜਾਂ ਯੂਜ਼ਰ ਨਾਂ:",
+       "ipaddressorusername": "IP ਐਡਰੈਸ ਜਾਂ ਯੂਜ਼ਰ ਨਾਂ:",
        "ipbexpiry": "ਮਿਆਦ:",
        "ipbreason": "ਕਾਰਨ:",
        "ipbcreateaccount": "ਖਾਤਾ ਬਣਾਉਣ 'ਤੇ ਰੋਕ ਲਾਓ",
index 5fe41dd..9b49369 100644 (file)
        "blockip": "Sabatan ya ing talagamit",
        "blockip-legend": "Sabatan ya ing talagamit",
        "blockiptext": "Gamitan me ing form king lalam ba yang sabatan king pamaglub\ning particular a IP address o lagyu ning talagamit (username).\nMalyari mung gawan iti bang milisya king pamanyira (vandalism),\nat agpang king [[{{MediaWiki:Policy-url}}|patakaran]].\nIsulat me ing particular a sangkan king lalam (alimbawa, sabyan\nmu nung sanu retang bulung a sinira da).",
-       "ipadressorusername": "IP Address o lagyungtalagamit (username):",
+       "ipaddressorusername": "IP Address o lagyungtalagamit (username):",
        "ipbexpiry": "Mayari:",
        "ipbreason": "Sangkan:",
        "ipbreason-dropdown": "*Keraklan a sangkan king pamaniabat\n** Mangibiling e tutung impormasiun\n** Maglakong laman kareng bulung\n** Maniuglung spam\n** Manyingit alang kabaldugan a sulat o e dapat misulat kareng bulung\n** Mamatakut o maniaul\n** Mamabusu kareng dakal a account\n** E katanggap-tanggap a lagyungtalagamit (username)",
        "newimages": "Pirinan kareng bayung simpan (new files)",
        "imagelisttext": "Ing makatuki tala yang '''$1''' {{PLURAL:$1|simpan|simpan}} a misamasan $2.",
        "newimages-summary": "Ining bulung a makabukud papakit no reng simpan (file) a tauling milulan.",
-       "showhidebots": "($1 bot)",
        "noimages": "Ala kang akit.",
        "ilsubmit": "Manintun",
        "bydate": "agpang keng aldo",
index 687ea97..2430843 100644 (file)
        "logdelete-selected": "Zaznaczone {{PLURAL:$1|zdarzenie|zdarzenia}} z rejestru:",
        "revdelete-text-text": "Usunięte wersje będą nadal widoczne w historii strony, ale niektóre fragmenty ich treści nie będą dostępne dla wszystkich.",
        "revdelete-text-file": "Usunięte wersje pliku będą nadal widoczne w historii pliku, ale niektóre fragmenty ich treści nie będą dostępne dla wszystkich.",
+       "logdelete-text": "Usunięte wpisy rejestru nadal będą widoczne w rejestrze, ale niektóre fragmenty ich treści nie będą dostępne dla wszystkich.",
+       "revdelete-text-others": "Pozostali administratorzy {{grammar:genitive|{{SITENAME}}}} nadal będą posiadali dostęp do ukrytej treści i będą w stanie odtworzyć ją ponownie za pomocą tego samego interfejsu, jeśli nie zostaną ustawione dodatkowe ograniczenia.",
        "revdelete-confirm": "Potwierdź, że chcesz to zrobić zgodnie z [[{{MediaWiki:Policy-url}}|zasadami]] i że rozumiesz konsekwencje.",
        "revdelete-suppress-text": "Ukrywanie powinno być używane '''wyłącznie''' w sytuacji:\n* Informacji, która może być zniesławieniem\n* Ujawnienie danych osobowych\n*: ''adres domowy, numer telefonu, numer PESEL itp''",
        "revdelete-legend": "Ustaw ograniczenia widoczności",
        "action-createpage": "tworzenia stron",
        "action-createtalk": "tworzenia stron dyskusji",
        "action-createaccount": "utworzenia tego konta użytkownika",
+       "action-history": "przeglądania historii tej strony",
        "action-minoredit": "do oznaczenia tej edycji jako drobna zmiana",
        "action-move": "przeniesienia tej strony",
        "action-move-subpages": "przeniesienia tej strony oraz jej podstron",
        "upload-disallowed-here": "Nie możesz nadpisać tego pliku.",
        "filerevert": "Przywracanie $1",
        "filerevert-legend": "Przywracanie poprzedniej wersji pliku",
-       "filerevert-intro": "Zamierzasz przywrócić '''[[Media:$1|$1]]''' do [wersji $4 z $3, $2].",
+       "filerevert-intro": "Zamierzasz przywrócić '''[[Media:$1|$1]]''' do [$4 wersji z $3, $2].",
        "filerevert-comment": "Powód",
        "filerevert-defaultcomment": "Przywrócono wersję z $2, $1",
        "filerevert-submit": "Przywróć",
-       "filerevert-success": "Plik '''[[Media:$1|$1]]''' został cofnięty do [wersji $4 z $3, $2].",
+       "filerevert-success": "Plik '''[[Media:$1|$1]]''' został cofnięty do [$4 wersji z $3, $2].",
        "filerevert-badversion": "Brak poprzedniej lokalnej wersji tego pliku z podaną datą.",
        "filedelete": "Usuwanie „$1”",
        "filedelete-legend": "Usuń plik",
        "pageswithprop-prophidden-binary": "binarna wartość własności ukryta ($1)",
        "doubleredirects": "Podwójne przekierowania",
        "doubleredirectstext": "Lista zawiera strony z przekierowaniami do stron, które przekierowują do innej strony.\nKażdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, do którego prowadzi drugie przekierowanie. Ostatni link prowadzi zazwyczaj do strony, do której powinna w rzeczywistości przekierowywać pierwsza strona.\n<del>Skreślenie</del> oznacza naprawienie przekierowania.",
-       "double-redirect-fixed-move": "Naprawa podwójnego przekierowania [[$1]] → [[$2]]",
+       "double-redirect-fixed-move": "Strona [[$1]] została przeniesiona. Przekierowanie wskazujące na stary tytuł zostało automatycznie zaktualizowane i przekierowuje teraz na stronę [[$2]].",
        "double-redirect-fixed-maintenance": "Automatyczna naprawa podwójnego przekierowania podczas prac konserwacyjnych z [[$1]] na [[$2]].",
        "double-redirect-fixer": "Naprawiacz przekierowań",
        "brokenredirects": "Zerwane przekierowania",
        "listgrouprights-namespaceprotection-namespace": "Przestrzeń nazw",
        "listgrouprights-namespaceprotection-restrictedto": "Uprawnienia pozwalające użytkownikom na edytowanie",
        "trackingcategories": "Śledzenie kategorii",
+       "trackingcategories-summary": "Ta strona zawiera listę kategorii monitorujących wypełnianych automatycznie przez oprogramowanie MediaWiki. Nazwy kategorii można zmienić edytując odpowiednie komunikaty systemowe znajdujące się w przestrzeni nazw {{ns:8}}.",
        "trackingcategories-msg": "Śledzenie kategorii",
        "trackingcategories-name": "Nazwa komunikatu",
        "trackingcategories-desc": "Kryteria włączenia kategorii",
        "noindex-category-desc": "Ta strona nie jest indeksowana przez roboty, ponieważ ma wpisane magiczne słowo <code><nowiki>__NOINDEX__</nowiki></code> i znajduje się w przestrzeni nazw, w której ta flaga jest dozwolona.",
        "post-expand-template-inclusion-category-desc": "Po rozwinięciu wszystkich szablonów, rozmiar strony jest większe niż <code>$wgMaxArticleSize</code>, więc niektóre szablony nie zostały rozwinięte.",
        "expensive-parserfunction-category-desc": "Na stronie używanych jest zbyt wiele wymagających funkcji parsera (takich jak <code>#ifexist</code>). Więcej informacji na stronie [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Kategoria dodawana do stron zawierających nieprawidłowe odwołania do plików (odwołania do nieistniejących plików).",
        "hidden-category-category-desc": "To jest kategoria z <code><nowiki>__HIDDENCAT__</nowiki></code>, co zapobiega wyświetlaniu jej w sekcji z kategoriami na stronie.",
        "trackingcategories-nodesc": "Opis nie jest dostępny.",
        "trackingcategories-disabled": "Kategoria jest wyłączona",
        "blockip": "Zablokuj użytkownika",
        "blockip-legend": "Zablokuj użytkownika",
        "blockiptext": "Użyj poniższego formularza do zablokowania możliwości edycji spod określonego adresu IP lub konkretnemu użytkownikowi.\nBlokować należy jedynie po to, by zapobiec wandalizmom, zgodnie z [[{{MediaWiki:Policy-url}}|przyjętymi zasadami]].\nPodaj powód (np. umieszczając nazwy stron, na których dopuszczono się wandalizmu).",
-       "ipadressorusername": "Adres IP lub nazwa użytkownika",
+       "ipaddressorusername": "Adres IP lub nazwa użytkownika",
        "ipbexpiry": "Upływa",
        "ipbreason": "Powód",
        "ipbreason-dropdown": "*Najczęstsze przyczyny blokad\n** Ataki na innych użytkowników\n** Naruszenie praw autorskich\n** Niedozwolona nazwa użytkownika\n** Open proxy lub Tor\n** Spamowanie\n** Usuwanie treści stron\n** Wprowadzanie fałszywych informacji\n** Wulgaryzmy\n** Wypisywanie bzdur na stronach",
        "newimages-summary": "Na tej stronie specjalnej prezentowane są ostatnio przesłane pliki.",
        "newimages-legend": "Filtruj",
        "newimages-label": "Nazwa pliku (lub jej fragment)",
-       "showhidebots": "($1 boty)",
        "noimages": "Brak plików do pokazania.",
        "ilsubmit": "Szukaj",
        "bydate": "według daty",
        "htmlform-no": "Nie",
        "htmlform-yes": "Tak",
        "htmlform-chosen-placeholder": "Wybierz opcję",
+       "htmlform-cloner-create": "Dodaj więcej",
+       "htmlform-cloner-delete": "Usuń",
+       "htmlform-cloner-required": "Wymagana jest co najmniej jedna wartość.",
        "sqlite-has-fts": "$1 z obsługą pełnotekstowego wyszukiwania",
        "sqlite-no-fts": "$1 bez obsługi pełnotekstowego wyszukiwania",
        "logentry-delete-delete": "$1 {{GENDER:$2|usunął|usunęła}} stronę $3",
index a007b7f..64e3008 100644 (file)
        "blockip": "Bloché l'utent",
        "blockip-legend": "Bloché l'utent",
        "blockiptext": "Che a deuvra ël mòdulo ëd domanda 'd blocagi ambelessì sota për bloché l'acess con drit dë scritura da chèich adrëssa IP o stranòm.<br />\nËs blocagi-sì as dev dovresse MACH për evité dij comportament vandàlich, ën strèita osservansa ëd tùit ij prinsipi dle [[{{MediaWiki:Policy-url}}|régole ëd {{SITENAME}}]].<br />\nËl blocagi a peul ën gnun-a manera esse dovrà për dle question d'ideologìa.\n\nChe a scriva codì che st'adrëssa IP o së stranòm a dev second chiel esse blocà (pr'esempi, che a buta ij tìtoj ëd pàgine che a l'abio già patì dj'at vandàlich da cost'adrëssa IP o së stranòm).",
-       "ipadressorusername": "Adrëssa IP ò stranòm",
+       "ipaddressorusername": "Adrëssa IP ò stranòm",
        "ipbexpiry": "Fin-a al",
        "ipbreason": "Rason:",
        "ipbreason-dropdown": "*Motiv sòlit për ij blocagi\n** Avej butà d'anformassion fàosse\n** Avej gavà dël contnù da 'nt le pàgine\n** Avèj butà dla rumenta porcherìa coma anliure d'areclam\n** Avèj butà test sensa sust ant le pàgine\n** Avèj un deuit da bërsach con la gent\n** Avèj dovrà vàire cont fòra dij deuit\n** Stranòm ch'as peul nen acetesse",
        "newimages-summary": "Sta pàgina special-sì a la smon j'ùltim archivi carià.",
        "newimages-legend": "Filtror",
        "newimages-label": "Nòm ëd l'archivi (o na soa part):",
-       "showhidebots": "($1 trigomiro)",
        "noimages": "Pa gnente da vëdde.",
        "ilsubmit": "Arserché",
        "bydate": "për data",
index a47a0e0..941ef81 100644 (file)
        "blockip": "اس ورتن والے نو روکو",
        "blockip-legend": "ورتن آلے نوں روکو",
        "blockiptext": "تھلے دتا گیا فارم ورتو کسے خاص آئی پی پتے یا ورتن ناں  نوں لکھن روک لئی۔ ایہ صرف ونڈالزم توں بچن لئی اے، تے [[{{MediaWiki:Policy-url}}|policy]] دے نال اے۔ \nتھلے خاص وجہاں دسو (ادھارن لئی خاص صفیاں دی دس دیو جیہڑے خراب کیتے گۓ۔)",
-       "ipadressorusername": "آئی پی پتہ یا ورتن آلے دا ناں:",
+       "ipaddressorusername": "آئی پی پتہ یا ورتن آلے دا ناں:",
        "ipbexpiry": "انت:",
        "ipbreason": "وجہ:",
        "ipbreason-dropdown": "*روکن دیاں عام وجہاں\n** غلط جانکاری دینا\n** صفیاں توں مواد مٹانا\n** بارلیاں ویب سائٹاں نال غلط جوڑ جوڑنا\n** خراب / احمفانہ مواد صفیاں چ پانا\n** دوجیاں نوں ڈرانا\n** کھاتیاں نوں خراب کرنا\n** ناں منیا جان والا ورتن ناں ورتنا",
        "newimages-summary": "اے خاص صفہ آخری چڑھائیاں فائلاں دسدا اے۔",
        "newimages-legend": "فلٹر",
        "newimages-label": "ففائل ناں (یا ایدا انگ)",
-       "showhidebots": "(بوٹ $1)",
        "noimages": "ویکھن آسطے کج نئیں۔",
        "ilsubmit": "کھوجو",
        "bydate": "تریخ نال",
index 1f37a33..29d8b44 100644 (file)
        "unblock": "کارن له بنديزه وېستل",
        "blockip": "په کارن بنديز لگول",
        "blockip-legend": "په کارن بنديز لگول",
-       "ipadressorusername": "IP پته يا کارن نوم",
+       "ipaddressorusername": "IP پته يا کارن نوم",
        "ipbexpiry": "د پای نېټه:",
        "ipbreason": "سبب:",
        "ipbreason-dropdown": "*د بنديز ټولگړي سببونه\n** د ناسمو مالوماتو خپرول\n** د مخونو د مېنځپانگې ړنگول\n** په مخونو کې د باندنيو وېبځايونو بېکاره سپام تړنې ځايول\n** په مخونو کې بې مانا/چټياټ ځايول\n** په مخونو کې ناندرۍ راپارېدنې/د تاوتريخوالي خپرېدو ته هڅول\n** د گڼ شمېر گڼونونو نه ناوړه گټه اخيستل\n** نه مننونکی کارن-نوم کارول",
        "newimages-summary": "همدا ځانگړی مخ، وروستنۍ پورته شوې دوتنې ښکاره کوي.",
        "newimages-legend": "چاڼگر",
        "newimages-label": "د دوتنې نوم (يا د دې برخه):",
-       "showhidebots": "($1 روباټ)",
        "noimages": "د کتلو لپاره څه نشته.",
        "ilsubmit": "پلټل",
        "bydate": "د نېټې له مخې",
index 924e1a6..044e8aa 100644 (file)
        "emailuser": "Enviar-lhe um e-mail",
        "emailuser-title-target": "Enviar e-mail para {{GENDER:$1|este usuário|esta usuária}}",
        "emailuser-title-notarget": "Enviar e-mail",
-       "emailpage": "Contactar usuário",
+       "emailpage": "Enviar e-mail ao usuário",
        "emailpagetext": "Você pode usar o formulário a seguir para enviar um e-mail para {{GENDER:$1|este usuário|esta usuária}}.\nO endereço de e-mail que você inseriu em [[Special:Preferences|suas preferências de usuário]] irá aparecer como o endereço do remetente da mensagem, com o destinatário podendo responder diretamente para você.",
        "defemailsubject": "E-mail do usuário \"$1\" da {{SITENAME}}",
        "usermaildisabled": "O e-mail do usuário foi desativado",
        "emailccsubject": "Cópia de sua mensagem para $1: $2",
        "emailsent": "E-mail enviado",
        "emailsenttext": "Sua mensagem foi enviada.",
-       "emailuserfooter": "Este e-mail foi enviado por $1 para $2 através da opção de \"contactar usuário\" da {{SITENAME}}.",
+       "emailuserfooter": "Este e-mail foi enviado por $1 para $2 através da opção de \"enviar e-mail ao usuário\" da {{SITENAME}}.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Mensagens de sistema",
        "watchlist": "Páginas vigiadas",
        "blockip": "Bloquear usuário",
        "blockip-legend": "Bloquear usuário",
        "blockiptext": "Utilize o formulário abaixo para bloquear o acesso à escrita de um endereço específico de IP ou nome de usuário.\nIsto só deve ser feito para prevenir vandalismo, e de acordo com a [[{{MediaWiki:Policy-url}}|política]]. Preencha com um motivo específico a seguir (por exemplo, citando páginas que sofreram vandalismo).",
-       "ipadressorusername": "Endereço de IP ou nome de usuário:",
+       "ipaddressorusername": "Endereço de IP ou nome de usuário:",
        "ipbexpiry": "Expiração:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Razões comuns para um bloqueio\n** Inserindo informações falsas\n** Removendo o conteúdo de páginas\n** Fazendo \"spam\" de sítios externos\n** Inserindo conteúdo sem sentido/incompreensível nas páginas\n** Comportamento intimidador/inoportuno\n** Uso abusivo de contas múltiplas\n** Nome de usuário inaceitável",
        "blockipsuccesssub": "Bloqueio bem sucedido",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] foi {{GENDER:$1|bloqueado|bloqueada}}.<br />\nConsulte a [[Special:BlockList|lista de bloqueios]].",
        "ipb-blockingself": "Você está prestes a bloquear-se a si próprio. Você tem a certeza de que pretende fazê-lo?",
-       "ipb-confirmhideuser": "Você está prestes a bloquear um utilizador com \"Ocultar nome de utilizador/IP\" ativado. Isto irá suprimir o nome do usuário de todas as listas e entradas dos registos. Tem a certeza de que pretende fazê-lo?",
+       "ipb-confirmhideuser": "Você está prestes a bloquear um usuário com \"Ocultar nome de usuário/IP\" ativado. Isto irá suprimir o nome do usuário de todas as listas e entradas dos registos. Tem a certeza de que pretende fazê-lo?",
        "ipb-confirmaction": "Se você tem certeza que realmente quer fazer isto, por favor verifique o campo \"{{int:ipb-confirm}}\" no final.",
        "ipb-edit-dropdown": "Editar motivos de bloqueio",
        "ipb-unblock-addr": "Desbloquear $1",
        "modern.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin Moderno */",
        "vector.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin Vector */",
        "anonymous": "{{PLURAL:$1|Usuário anônimo|Usuários anônimos}} da {{SITENAME}}",
-       "siteuser": "{{GENDER:$2|um utilizador|uma utilizadora|um utilizador}} da {{SITENAME}} ($1)",
+       "siteuser": "{{GENDER:$2|um usuário|uma usuária|um usuário}} da {{SITENAME}} ($1)",
        "anonuser": "usuário anônimo $1 da {{SITENAME}}",
        "lastmodifiedatby": "Esta página foi modificada pela última vez à(s) $2 de $1 por $3.",
        "othercontribs": "Baseado no trabalho de $1.",
        "newimages-summary": "Esta página especial mostra os arquivos mais recentemente enviados",
        "newimages-legend": "Filtrar",
        "newimages-label": "Nome de arquivo (ou parte dele):",
-       "showhidebots": "($1 robôs)",
        "noimages": "Nada para ver.",
        "ilsubmit": "Pesquisar",
        "bydate": "por data",
        "compare-revision-not-exists": "A revisão que você especificou não existe.",
        "dberr-problems": "Desculpe! Este sítio está passando por dificuldades técnicas.",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
-       "dberr-info": "(Não foi possível contactar o servidor de base de dados: $1)",
+       "dberr-info": "(Não foi possível contatar o servidor de base de dados: $1)",
        "dberr-info-hidden": "(Não foi possível contatar o banco de dados do servidor)",
        "dberr-usegoogle": "Você pode tentar pesquisar no Google entretanto.",
        "dberr-outofdate": "Note que os seus índices relativos ao nosso conteúdo podem estar desatualizados.",
index 9182149..259ed09 100644 (file)
        "navigation-heading": "Menu de navegação",
        "errorpagetitle": "Erro",
        "returnto": "Voltar para $1.",
-       "tagline": "Da {{SITENAME}}",
+       "tagline": "De {{SITENAME}}",
        "help": "Ajuda",
        "search": "Pesquisa",
        "searchbutton": "Pesquisar",
        "search-redirect": "(redirecionamento de $1)",
        "search-section": "(seção $1)",
        "search-file-match": "(coincide com o conteúdo do ficheiro)",
-       "search-suggest": "Será que queria dizer: $1",
+       "search-suggest": "Será que você quis dizer: $1",
        "search-interwiki-caption": "Projetos irmãos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(mais)",
        "action-createpage": "criar páginas",
        "action-createtalk": "criar páginas de discussão",
        "action-createaccount": "criar esta conta de utilizador",
+       "action-history": "ver histórico desta página",
        "action-minoredit": "marcar esta edição como uma edição menor",
        "action-move": "mover esta página",
        "action-move-subpages": "mover esta página e as respectivas subpáginas",
        "blockip": "Bloquear utilizador",
        "blockip-legend": "Bloquear utilizador",
        "blockiptext": "Utilize o formulário abaixo para bloquear o acesso de escrita a um endereço IP específico ou a um nome de utilizador.\nIsto só deve ser feito para prevenir vandalismo e de acordo com a [[{{MediaWiki:Policy-url}}|política]]. Indique a seguir um motivo de bloqueio específico (por exemplo, indicando as páginas que foram alvo de vandalismo).",
-       "ipadressorusername": "Endereço IP ou nome de utilizador:",
+       "ipaddressorusername": "Endereço IP ou nome de utilizador:",
        "ipbexpiry": "Expiração:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Razões comuns para um bloqueio\n** Inserção de informações falsas\n** Remoção de conteúdos de páginas\n** Inserção de \"spam\" para sites externos\n** Inserção de conteúdo sem sentido/incompreensível nas páginas\n** Comportamento intimidador/inoportuno\n** Uso abusivo de contas múltiplas\n** Nome de utilizador inaceitável",
        "block-log-flags-noemail": "correio eletrónico bloqueado",
        "block-log-flags-nousertalk": "impossibilitado de editar a própria página de discussão",
        "block-log-flags-angry-autoblock": "ativado o bloqueio automático melhorado",
-       "block-log-flags-hiddenname": "nome de utilizador ocultado",
+       "block-log-flags-hiddenname": "nome de usuário ocultado",
        "range_block_disabled": "A funcionalidade de administrador para o bloqueio de gamas de IPs está desativada.",
        "ipb_expiry_invalid": "Tempo de expiração inválido.",
        "ipb_expiry_temp": "Bloqueios com nome de utilizador ocultado devem ser permanentes.",
        "newimages-summary": "Esta página especial mostra os ficheiros mais recentemente enviados.",
        "newimages-legend": "Filtrar",
        "newimages-label": "Nome de ficheiro (ou parte dele):",
-       "showhidebots": "($1 robôs)",
        "noimages": "Nada para ver.",
        "ilsubmit": "Pesquisar",
        "bydate": "por data",
        "htmlform-no": "Não",
        "htmlform-yes": "Sim",
        "htmlform-chosen-placeholder": "Selecione uma opção",
+       "htmlform-cloner-create": "Adicionar mais",
+       "htmlform-cloner-delete": "Remover",
+       "htmlform-cloner-required": "Pelo menos um valor é necessário.",
        "sqlite-has-fts": "$1 com suporte de pesquisa de texto completo",
        "sqlite-no-fts": "$1 sem suporte de pesquisa de texto completo",
        "logentry-delete-delete": "$1 apagou a página $3",
index 03a52d2..7dc127b 100644 (file)
        "right-move": "{{doc-right|move}}\nThe right to move any page that is not protected from moving.\n{{Identical|Move page}}",
        "right-move-subpages": "{{doc-right|move-subpages}}",
        "right-move-rootuserpages": "{{doc-right|move-rootuserpages}}",
+       "right-move-categorypages": "{{doc-right|move-categorypages}}",
        "right-movefile": "{{doc-right|movefile}}",
        "right-suppressredirect": "{{doc-right|suppressredirect}}",
        "right-upload": "{{doc-right|upload}}\nThe right to [[Special:Upload|upload]] a file (this includes images, media, audio, ...).\n{{Identical|Upload file}}",
        "action-move": "{{Doc-action|move}}",
        "action-move-subpages": "{{Doc-action|move-subpages}}",
        "action-move-rootuserpages": "{{Doc-action|move-rootuserpages}}",
+       "action-move-categorypages": "{{Doc-action|move-categorypages}}",
        "action-movefile": "{{doc-action|movefile}}",
        "action-upload": "{{Doc-action|upload}}",
        "action-reupload": "{{Doc-action|reupload}}",
        "blockip": "Used as the text of a link in the sidebar toolbox. Clicking this link takes you to [[Special:Block]], with a relevant username or IP address (e.g. \"Username\" on [[User talk:Username]], [[Special:Contributions/Username]], etc.) already filled in.\n\n{{Identical|Block user}}",
        "blockip-legend": "Legend/Header for the fieldset around the input form of [[Special:Block]].\n\n{{Identical|Block user}}",
        "blockiptext": "Used in the {{msg-mw|Blockip}} form in [[Special:Block]].\n\nRefers to {{msg-mw|Policy-url}}.\n\nThis message may follow the message {{msg-mw|Ipb-otherblocks-header}} and other block messages.\n\nSee also:\n* {{msg-mw|Unblockiptext}}",
-       "ipadressorusername": "{{Identical|IP address or username}}",
+       "ipaddressorusername": "{{Identical|IP address or username}}",
        "ipbexpiry": "{{Identical|Expiry}}",
        "ipbreason": "Label of the block reason dropdown in [[Special:BlockIP]] and the unblock reason textfield in [{{fullurl:Special:IPBlockList|action=unblock}} Special:IPBlockList?action=unblock].\n\n{{Identical|Reason}}",
        "ipbreason-dropdown": "Used as item list for dropdown on [[Special:Block]].\n\nThe label for this dropdown is {{msg-mw|Ipbreason}}.",
        "movepagetalktext": "Text on the special 'Move page'. This text only appears if the talk page is not empty.",
        "movearticle": "The text before the name of the page that you are moving. Can be translated as \"Page that is going to be moved\". Used in [[Special:MovePage]].\n\nSee also:\n* {{msg-mw|move-page-legend|legend for the form}}\n* {{msg-mw|newtitle|label for new title}}\n* {{msg-mw|movereason|label for textarea}}\n* {{msg-mw|movetalk|label for checkbox}}\n* {{msg-mw|move-leave-redirect|label for checkbox}}\n* {{msg-mw|fix-double-redirects|label for checkbox}}\n* {{msg-mw|move-subpages|label for checkbox}}\n* {{msg-mw|move-talk-subpages|label for checkbox}}\n* {{msg-mw|move-watch|label for checkbox}}\n{{Identical|Move page}}",
        "moveuserpage-warning": "Used as warning in [[Special:MovePage]], when moving a user page.",
-       "movenologintext": "Text of message on special page 'Permissions Errors', which appears when somebody tries to move a page without being logged in.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}",
-       "movenotallowed": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenologintext}}",
-       "movenotallowedfile": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
-       "cant-move-user-page": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
-       "cant-move-to-user-page": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
+       "movecategorypage-warning": "Used as warning in [[Special:MovePage]], when moving a category page.",
+       "movenologintext": "Text of message on special page 'Permissions Errors', which appears when somebody tries to move a page without being logged in.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|cant-move-category-page}}\n* {{msg-mw|cant-move-to-category-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}",
+       "movenotallowed": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|cant-move-category-page}}\n* {{msg-mw|cant-move-to-category-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenologintext}}",
+       "movenotallowedfile": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|cant-move-category-page}}\n* {{msg-mw|cant-move-to-category-page}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
+       "cant-move-user-page": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|cant-move-category-page}}\n* {{msg-mw|cant-move-to-category-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
+       "cant-move-to-user-page": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-category-page}}\n* {{msg-mw|cant-move-to-category-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
+       "cant-move-category-page": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|cant-move-to-category-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
+       "cant-move-to-category-page": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|cant-move-category-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
        "newtitle": "Used in the special page \"[[Special:MovePage]]\". The text for the inputbox to give the new page title.\n\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\n* {{msg-mw|Movearticle|label for old title}}\n* {{msg-mw|Movereason|label for textarea}}\n* {{msg-mw|Movetalk|label for checkbox}}\n* {{msg-mw|Move-leave-redirect|label for checkbox}}\n* {{msg-mw|Fix-double-redirects|label for checkbox}}\n* {{msg-mw|Move-subpages|label for checkbox}}\n* {{msg-mw|Move-talk-subpages|label for checkbox}}\n* {{msg-mw|Move-watch|label for checkbox}}",
        "move-watch": "The text of the checkbox to watch the pages you are moving from and to. If checked, both the destination page and the original page will be added to the watchlist, even if you decide not to leave a redirect behind.\n\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\n* {{msg-mw|Movearticle|label for old title}}\n* {{msg-mw|Newtitle|label for new title}}\n* {{msg-mw|Movereason|label for textarea}}\n* {{msg-mw|Movetalk|label for checkbox}}\n* {{msg-mw|Move-leave-redirect|label for checkbox}}\n* {{msg-mw|Fix-double-redirects|label for checkbox}}\n* {{msg-mw|Move-subpages|label for checkbox}}\n* {{msg-mw|Move-talk-subpages|label for checkbox}}",
        "movepagebtn": "Button label on the special 'Move page'.\n\n{{Identical|Move page}}",
        "movenosubpage": "See also:\n* {{msg-mw|movesubpage|section header}}\n* {{msg-mw|movenosubpage|without subpage}}\n* {{msg-mw|movesubpagetext|with subpages}}",
        "movereason": "Used in [[Special:MovePage]]. The text for the inputbox to give a reason for the page move.\n\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\n* {{msg-mw|Movearticle|label for old title}}\n* {{msg-mw|Newtitle|label for new title}}\n* {{msg-mw|Movetalk|label for checkbox}}\n* {{msg-mw|Move-leave-redirect|label for checkbox}}\n* {{msg-mw|Fix-double-redirects|label for checkbox}}\n* {{msg-mw|Move-subpages|label for checkbox}}\n* {{msg-mw|Move-talk-subpages|label for checkbox}}\n* {{msg-mw|Move-watch|label for checkbox}}\n{{Identical|Reason}}",
        "move-redirect-text": "{{ignored}}The text that's added to a redirected page when that redirect is created.",
+       "category-move-redirect-override": "{{ignored}}The text that's added to a redirected category page when that redirect is created.",
        "revertmove": "{{Identical|Revert}}",
        "delete_and_move": "Button text on the move page when the target page already exists.",
        "delete_and_move_text": "Used when moving a page, but the destination page already exists and needs deletion.\n\nThis message is to confirm that you really want to delete the page.\n\nParameters:\n* $1 - the destination page title\n\nSee also:\n* {{msg-mw|Delete and move confirm}}",
        "newimages-summary": "This message is displayed at the top of [[Special:NewImages]] to explain what is shown on that special page.",
        "newimages-legend": "Caption of the fieldset for the filter on [[Special:NewImages]]\n\n{{Identical|Filter}}",
        "newimages-label": "Caption of the filter editbox on [[Special:NewImages]]",
-       "showhidebots": "This is shown on the special page [[Special:NewImages]]. The format is \"{{int:showhidebots|[[MediaWiki:Hide/{{SUBPAGENAME}}|{{int:hide}}]]}}\" or \"{{int:showhidebots|[[MediaWiki:Show/{{SUBPAGENAME}}|{{int:show}}]]}}\"\n\n{{Identical|$1 bots}}",
+       "newimages-showbots": "Used as label for a checkbox. When checked, [[Special:NewImages]] will also display uploads by users in the bots group.",
        "noimages": "This is shown on the special page [[Special:NewImages]], when there aren't any recently uploaded files.",
        "ilsubmit": "Used as label for input box in the MIMESearch form on [[Special:MIMESearch]].\n\nSee also:\n* {{msg-mw|Mimesearch|page title}}\n* {{msg-mw|Mimetype|label for input box}}\n{{Identical|Search}}",
        "bydate": "{{Identical|Date}}",
        "variantname-shi-tfng": "{{optional}}",
        "variantname-shi-latn": "{{optional}}",
        "variantname-shi": "{{optional}}",
+       "variantname-uz": "{{optional}}",
+       "variantname-uz-latn": "{{optional}}",
+       "variantname-uz-cyrl": "{{optional}}",
        "metadata": "The title of a section on an image description page, with information and data about the image. For example of message in use see [[commons:File:Titan-crystal_bar.JPG|Commons]].\n{{Identical|Metadata}}",
        "metadata-help": "This message is followed by a table with metadata.",
        "metadata-expand": "On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on this link, you can see more data and information. For the link to hide back the less important data, see {{msg-mw|Metadata-collapse}}.",
        "exif-gpsdifferential": "Label for EXIF information. Indicates whether differential correction is applied to the GPS receiver.",
        "exif-coordinate-format": "{{optional}}\nFor formatting GPS latitude coordinates. Parameters:\n* $1 - degrees\n* $2 - minutes\n* $3 - seconds (up to two decimal places)\n* $4 - direction (N, S, W, or E)\n* $5 - (Unused) coordinate as a single positive or negative real number",
        "exif-jpegfilecomment": "This is not a true exif tag, but the contents of the JPEG COM segment. This often contains a file source, but can potentially contain any comment about the file. This is similar to {{msg-mw|exif-usercomment}}, {{msg-mw|exif-pngfilecomment}}, and {{msg-mw|exif-giffilecomment}}.",
-       "exif-keywords": "List of keywords for the photograph (or other media).\n\nThis can come from IPTC-iim 2:25 keyword field, or XMP's dc:subject field.",
+       "exif-keywords": "List of keywords for the photograph (or other media).\n\nThis can come from IPTC-iim 2:25 keyword field, or XMP's dc:subject field.\n{{Identical|Keyword}}",
        "exif-worldregioncreated": "The world region (generally that means continent, but could also include 'World' as a whole) where the media was created.",
        "exif-countrycreated": "Country that the picture was taken in. Note this is where it was taken, not what country is depicted in the picture.",
        "exif-countrycodecreated": "ISO Code for the country that the picture was taken in. Note this is where it was taken, not what country is depicted in the picture.",
        "descending_abbrev": "Abbreviation of descending order.\nSee also:\n* {{msg-mw|Ascending abbrev}}\n* {{msg-mw|Descending abbrev}}",
        "table_pager_next": "Used as image button text of pager. See [[Support|example]] (the bottom of the page).\n{{Identical|Next page}}",
        "table_pager_prev": "Used as image button text of pager. See [[Support|example]] (the bottom of the page).\n{{Identical|Previous page}}",
-       "table_pager_first": "Used as image button text of pager. See [[Support|example]] (the bottom of the page).",
-       "table_pager_last": "Used as image button text of pager. See [[Support|example]] (the bottom of the page).",
+       "table_pager_first": "Used as image button text of pager. See [[Support|example]] (the bottom of the page).\n{{Identical|First page}}",
+       "table_pager_last": "Used as image button text of pager. See [[Support|example]] (the bottom of the page).\n{{Identical|Last page}}",
        "table_pager_limit": "Do not use PLURAL in this message, because ''$1'' is not the actual number. ''$1'' is a limit selector drop-down list.",
        "table_pager_limit_label": "Used as label for input field.",
        "table_pager_limit_submit": "{{Identical|Go}}",
        "watchlistedit-raw-done": "A message which appears after the raw watchlist has been updated using [[Special:Watchlist/raw]].",
        "watchlistedit-raw-added": "Message on [[Special:EditWatchlist/raw]].\n\nThe message appears after at least 1 message is added to the raw watchlist.\n\nFollowed by list of page titles which are added.\n\nParameters:\n* $1 - number of page titles which are added\nSee also:\n* {{msg-mw|Watchlistedit-normal-done}}\n* {{msg-mw|Watchlistedit-raw-removed}}",
        "watchlistedit-raw-removed": "Message on [[Special:EditWatchlist/raw]].\n\nThe message appears after at least 1 message is deleted from the raw watchlist.\n\nFollowed by list of page titles which are removed.\n\nParameters:\n* $1 - number of page titles which are removed\nSee also:\n* {{msg-mw|Watchlistedit-normal-done}}\n* {{msg-mw|Watchlistedit-raw-added}}",
+       "watchlistedit-clear-title": "Title of [[Special:Watchlist/clear|Special page]].\n\n{{Identical|Clear watchlist}}",
+       "watchlistedit-clear-legend": "Heading of dialogue box on [[Special:Watchlist/clear]].\n\n{{Identical|Edit clear watchlist}}",
+       "watchlistedit-clear-explain": "All of the titles will be removed from your watchlist",
+       "watchlistedit-clear-titles": "Text above edit box containing items being watched on [[Special:Watchlist/clear]].\n{{Identical|Title}}",
+       "watchlistedit-clear-submit": "Text of submit button on [[Special:Watchlist/clear]].\n\nSee also:\n* {{msg-mw|Watchlistedit-clear-submit}}\n* {{msg-mw|Tooltip-watchlistedit-clear-submit}}",
+       "watchlistedit-clear-done": "A message which appears after the watchlist has been cleared using [[Special:Watchlist/clear]].",
+       "watchlistedit-clear-removed": "Message on [[Special:EditWatchlist/clear]].\n\nThe message appears once the watchlist has been cleared.",
+       "watchlistedit-too-many": "Message on [[Special:EditWatchlist]] that is used when there are too many titles to display.",
+       "watchlisttools-clear": "[[Special:Watchlist]]: Navigation link under the title.\n\nSee also:\n* {{msg-mw|watchlisttools-clear}}\n* {{msg-mw|watchlisttools-clear}}",
        "watchlisttools-view": "[[Special:Watchlist]]: Navigation link under the title.\n\nSee also:\n* {{msg-mw|watchlisttools-edit}}\n* {{msg-mw|watchlisttools-raw}}",
        "watchlisttools-edit": "[[Special:Watchlist]]: Navigation link under the title.\n\nSee also:\n* {{msg-mw|Watchlisttools-view}}\n* {{msg-mw|Watchlisttools-raw}}",
        "watchlisttools-raw": "[[Special:Watchlist]]: Navigation link under the title.\n\nSee also:\n* {{msg-mw|watchlisttools-view}}\n* {{msg-mw|watchlisttools-edit}}\n{{Identical|Edit raw watchlist}}",
index 74f39af..22ea287 100644 (file)
@@ -8,7 +8,8 @@
                        "Reedy",
                        "The Evil IP address",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Fitoschido"
                ]
        },
        "tog-underline": "T'inkikunata uranpi sikwiy",
        "edit-gone-missing": "Manam atirqanichu p'anqata musuqchayta.\nQullusqachá.",
        "edit-conflict": "Tuylla llamk'apuymanta sasachakuy.",
        "edit-no-change": "Manapuni hukchaptiykim, llamk'apusqayki manam hallch'asqachu.",
+       "postedit-confirmation-created": "P'anqaqa kamarisqañam.",
+       "postedit-confirmation-restored": "P'anqaqa musuqmanta kamarisqañam.",
        "postedit-confirmation-saved": "Llamk'apusqaykiqa waqaychasqañam.",
        "edit-already-exists": "Manam atinichu musuq p'anqata kamariyta.\nKachkañam.",
        "defaultmessagetext": "Ñawpaq qillqa",
        "pagemerge-logentry": "[[$1]]-ta [[$2]]-man huñusqa (llamk'apusqakuna $3-kama)",
        "revertmerge": "Huñusqata kutichiy",
        "mergelogpagetext": "Kay qatiqpiqa aswan ñaqha huk p'anqa wiñay kawsaymanta huk p'anqa wiñay kawsayman huñusqakunatam rikunki.",
-       "history-title": "\"$1\" p'anqata hukchasqakunap wiñay kawsaynin",
+       "history-title": "«$1» p’anqata hukchasqakunap wiñay kawsaynin",
        "difference-title": "$1 nisqapaq musuqchasqapura wakin kaynin",
        "difference-title-multipage": "$1, $2 sutiyuq willañiqipura wakin kaynin",
        "difference-multipage": "(P'anqakunaqa manam kaqllachu)",
        "blockip": "Ruraqta hark'ay",
        "blockip-legend": "Ruraqta hark'ay",
        "blockiptext": "Kay qatiq hunt'ana p'anqata llamk'achiy huk sapaq IP huchhamanta icha ruraqpa rakiqunanmanta qillqay atiyta hark'anapaq.\nKayqa rurasqa kachun wandalismullatam hark'anapaq, [[{{MediaWiki:Policy-url}}|{{SITENAME}}pa kawpayninkamallam]].\nWillariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta willaspa).",
-       "ipadressorusername": "IP huchha icha ruraqpa sutin",
+       "ipaddressorusername": "IP huchha icha ruraqpa sutin",
        "ipbexpiry": "Hark'ay kaykama:",
        "ipbreason": "Kayrayku:",
        "ipbreason-dropdown": "*Hark'anapaq sapsi raykukuna\n** Llulla willayta qillqamuy\n** P'anqata samiqninmanta ch'usaqchay\n** ''Spam'' nisqa millay t'inkikunata yapay\n** Q'upata, mana ima chaniyuqtapas yapay\n** Huk ruraqkunata manchachiy icha k'amiy\n** Achka rakiqunakunawan millayta ruray\n** Mana chaskinalla ruraqpa sutin",
        "newimages-summary": "Kay sapaq p'anqapiqa ñaqha churkusqa willañiqikunatam rikunki.",
        "newimages-legend": "Ch'illchina",
        "newimages-label": "Willañiqip sutin (icha sutinpa rakin):",
-       "showhidebots": "($1 rurana antacha)",
        "noimages": "Manam ima rikunallapas kanchu.",
        "ilsubmit": "Maskay",
        "bydate": "p'unchawkama",
index e068ec9..b1b19df 100644 (file)
        "blockip": "Bloccar l'utilisader",
        "blockip-legend": "Bloccar l'utilisader",
        "blockiptext": "Utilisescha il formular sutvart per bloccar ina adressa IP u in utilisader uschia ch'el na po betg pli far midadas.\nTi duessas be far quai per impedir vandalissem e en ina moda confurma a las [[{{MediaWiki:Policy-url}}|directivas]].\nInditgescha sutvart in motiv (per exempel pos ti inditgar paginas ch'èn vegnidas destruidas).",
-       "ipadressorusername": "Adressa IP u num d'utilisader:",
+       "ipaddressorusername": "Adressa IP u num d'utilisader:",
        "ipbexpiry": "Bloccà enfin:",
        "ipbreason": "Motiv:",
        "ipbreason-dropdown": "*Motivs generals per bloccar\n** Inserir infurmaziuns faussas\n** Stizzar cuntegn da paginas\n** Inserir colliaziuns da spam a paginas externas\n** Inserir nonsens en paginas\n** Sedepurtar nunconvegnent u mulestant\n** Abus da plirs contos\n** Num d'utilisader nunacceptabel",
        "newimages-summary": "Questa pagina speziala mussa las davosas datotecas ch'èn vegnidas chargiadas si.",
        "newimages-legend": "Filter",
        "newimages-label": "Num da la datoteca (u ina part da quel):",
-       "showhidebots": "($1 bots)",
        "noimages": "Chattà naginas datotecas.",
        "ilsubmit": "Tschertgar",
        "bydate": "tenor data",
index 9557885..98c3b7f 100644 (file)
        "pool-timeout": "Timpul alocat așteptării pentru blocare a expirat",
        "pool-queuefull": "Coada de așteptare este plină",
        "pool-errorunknown": "Eroare necunoscută",
+       "pool-servererror": "Serviciul de contorizare a rezervei nu este disponibil ($1).",
        "aboutsite": "Despre {{SITENAME}}",
        "aboutpage": "Project:Despre",
        "copyright": "Conținutul este disponibil sub $1, exceptând cazurile în care se specifică altfel.",
        "search-result-size": "$1 ({{PLURAL:$2|1 cuvânt|$2 cuvinte}})",
        "search-result-category-size": "$1 {{PLURAL:$1|element|elemente}} ($2 {{PLURAL:$2|categorie|categorii}}, $3 {{PLURAL:$3|fișier|fișiere}})",
        "search-result-score": "Relevanță: $1%",
-       "search-redirect": "(redirecționare către $1)",
+       "search-redirect": "(redirecționare de la $1)",
        "search-section": "(secțiunea $1)",
        "search-file-match": "(se regăsește în conținutul fișierului)",
        "search-suggest": "V-ați referit la: $1",
        "prefs-watchlist": "Listă de urmărire",
        "prefs-watchlist-days": "Numărul de zile care apar în lista paginilor urmărite:",
        "prefs-watchlist-days-max": "Maxim $1 {{PLURAL:$1|zi|zile}}",
-       "prefs-watchlist-edits": "Numărul de editări care apar în lista extinsă a paginilor urmărite:",
+       "prefs-watchlist-edits": "Numărul de modificări care apar în lista extinsă a paginilor urmărite:",
        "prefs-watchlist-edits-max": "Număr maxim: 1000",
        "prefs-watchlist-token": "Jeton pentru lista de pagini urmărite:",
        "prefs-misc": "Parametri diverși",
        "action-createpage": "creați pagini",
        "action-createtalk": "creați pagini de discuție",
        "action-createaccount": "creați acest cont de utilizator",
+       "action-history": "vizualizați istoricul acestei pagini",
        "action-minoredit": "marcați această modificare ca minoră",
        "action-move": "redenumiți această pagină",
        "action-move-subpages": "redenumiți această pagină și subpaginile sale",
        "recentchanges-legend-newpage": "(vedeți și [[Special:NewPages|lista cu pagini noi]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Dedesubt sunt modificările începând cu <b>$2</b> (maximum <b>$1</b> afișate).",
-       "rclistfrom": "Se afișează modificările începând cu $3 $2",
+       "rclistfrom": "Se afișează modificările începând cu $3, $2",
        "rcshowhideminor": "$1 modificările minore",
        "rcshowhideminor-show": "Arată",
        "rcshowhideminor-hide": "Ascunde",
        "listgrouprights-namespaceprotection-namespace": "Spațiu de nume",
        "listgrouprights-namespaceprotection-restrictedto": "Drept(uri) care permit(e) utilizatorului modificări",
        "trackingcategories": "Categorii de urmărire",
-       "trackingcategories-summary": "Această pagină conține categorii de urmărire care sunt populate în mod automat de către software-ul MediaWiki. Numele acestora se pot schimba modificând mesajele de sistem relevante din spațiul de nume {{ns:8}}.",
+       "trackingcategories-summary": "Această pagină conține categorii de urmărire care sunt populate în mod automat de către software-ul MediaWiki. Numele acestora se poate schimba modificând mesajele de sistem relevante din spațiul de nume {{ns:8}}.",
        "trackingcategories-msg": "Categorie de urmărire",
        "trackingcategories-name": "Numele mesajului",
        "trackingcategories-desc": "Criteriile de includere în categorie",
        "noindex-category-desc": "Pagina conține cuvântul magic <code><nowiki>__NOINDEX__</nowiki></code> (aflându-se într-un spațiu de nume care permite acest marcaj) și, drept urmare, nu este indexată de roboți.",
        "index-category-desc": "Pagina conține cuvântul magic <code><nowiki>__INDEX__</nowiki></code> (aflându-se într-un spațiu de nume care permite acest marcaj) și, ca urmare, este indexată de roboți, deși în mod normal acest lucru nu s-ar fi întâmplat.",
        "post-expand-template-inclusion-category-desc": "După extinderea tuturor formatelor, dimensiunea paginii a depășit <code>$wgMaxArticleSize</code>, astfel că anumite formate nu au fost extinse.",
-       "post-expand-template-argument-category-desc": "După extinderea argumentului unui format (ceva plasat între acolade triple, precum <code>{{{Foo}}})</code>, pagina a depășit <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-argument-category-desc": "După extinderea argumentului unui format (ceva plasat între acolade triple, precum <code>{{{Foo}}}</code>), pagina a depășit <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Prea multe funcții costisitoare de analiză (precum <code>#ifexist</code>) incluse într-o pagină. Vedeți [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Categorie adăugată dacă pagina conține o legătură întreruptă către un fișier (o legătură folosită pentru încorporarea unui fișier atunci când fișierul nu există).",
        "hidden-category-category-desc": "Această categorie conține <code><nowiki>__HIDDENCAT__</nowiki></code>, ceea ce împiedică în mod implicit afișarea ei în zona cu legături către categorii din cadrul paginilor.",
        "trackingcategories-nodesc": "Nicio descriere disponibilă.",
        "blockip": "Blocare utilizator",
        "blockip-legend": "Blocare utilizator/adresă IP",
        "blockiptext": "Pentru a bloca un utilizator completați rubricile de mai jos.<br />\n'''Respectați [[{{MediaWiki:Policy-url}}|politica de blocare]].'''<br />\nPrecizați motivul blocării; de exemplu indicați paginile vandalizate de acest utilizator.",
-       "ipadressorusername": "Adresă IP sau nume de utilizator",
+       "ipaddressorusername": "Adresă IP sau nume de utilizator",
        "ipbexpiry": "Expiră",
        "ipbreason": "Motiv:",
        "ipbreason-dropdown": "*Motivele cele mai frecvente\n** Introducere de informații false\n** Ștergere conținut fără explicații\n** Introducere de legături externe de publicitate (spam)\n** Creare pagini fără sens\n** Tentative de intimidare\n** Abuz utilizare conturi multiple\n** Nume de utilizator inacceptabil",
        "newimages-summary": "Această pagină specială arată ultimele fișiere încărcate.",
        "newimages-legend": "Filtru",
        "newimages-label": "Numele fișierului (sau parte din el):",
-       "showhidebots": "($1 roboți)",
+       "newimages-showbots": "Arată încărcările roboților",
        "noimages": "Nimic de văzut.",
        "ilsubmit": "Caută",
        "bydate": "după dată",
index 2a72fef..dca8ad2 100644 (file)
        "blockip": "Blocche l'utende",
        "blockip-legend": "Bluecche l'utende",
        "blockiptext": "Ause 'a schermata de sotte pe bloccà l'accesse in scritture de 'nu specifiche indirizze IP o utende.\nQuiste avessa essere fatte sulamende pe prevenìe 'u vandalisme e in accorde cu [[{{MediaWiki:Policy-url}}|le reghele]].\nMitte pure 'nu mutive specifiche aqquà sotte (pe esembije, nnomene 'a pàgene addò è acchiate 'u vandalisme).",
-       "ipadressorusername": "Indirizze IP o nome de l'utende:",
+       "ipaddressorusername": "Indirizze IP o nome de l'utende:",
        "ipbexpiry": "More:",
        "ipbreason": "Mutive:",
        "ipbreason-dropdown": "*Mutive comune de blocche\n** Inzerimende de 'mbormaziune fause\n** Scangellamende de condenute da le vôsce\n** Collegaminde pubblecetarie a site fore de Uicchipèdie\n** Inzerimende de studecarie jndr'à le vôsce\n** Menacce e intimidaziune\n** Abbuse de cunde utende multiple\n** Nome de l'utende inaccettabbele",
        "newimages-summary": "Sta pàgena speciale face vedè l'urteme file carecate.",
        "newimages-legend": "Filtre",
        "newimages-label": "Nome d'u fail (o 'nu stuezze de jidde):",
-       "showhidebots": "($1 bot)",
        "noimages": "Non ge stè ninde da vedè.",
        "ilsubmit": "Cirche",
        "bydate": "pe date",
index d0279cf..f685a32 100644 (file)
        "blockip": "Заблокировать",
        "blockip-legend": "Блокировка участника",
        "blockiptext": "Используйте форму ниже, чтобы заблокировать возможность записи с определённого IP-адреса.\nЭто может быть сделано только для предотвращения вандализма и только в соответствии с [[{{MediaWiki:Policy-url}}|правилами]].\nНиже укажите конкретную причину (к примеру, процитируйте некоторые страницы с признаками вандализма).",
-       "ipadressorusername": "IP-адрес или имя участника:",
+       "ipaddressorusername": "IP-адрес или имя участника:",
        "ipbexpiry": "Закончится через:",
        "ipbreason": "Причина:",
        "ipbreason-dropdown": "* Стандартные причины блокировок\n** Вставка ложной информации\n** Удаление содержимого страниц\n** Спам-ссылки на внешние сайты\n** Добавление бессмысленного текста/мусора\n** Угрозы, преследование участников\n** Злоупотребление несколькими учётными записями\n** Неприемлемое имя участника",
        "newimages-summary": "На этой служебной странице показаны недавно загруженные файлы.",
        "newimages-legend": "Фильтр",
        "newimages-label": "Имя файла (или его часть):",
-       "showhidebots": "($1 ботов)",
+       "newimages-showbots": "Показать загрузки ботов",
        "noimages": "Изображения отсутствуют.",
        "ilsubmit": "Найти",
        "bydate": "по дате",
index cb26cef..4fdf3dc 100644 (file)
        "blockip": "Заблоковати хоснователя",
        "blockip-legend": "Блокованя хоснователя",
        "blockiptext": "Тот формуларь служыть про заблокованя едітованя з конкретной IP адресы або мена хоснователя.\nТото бы мало быти хосноване лем в згодї з [[{{MediaWiki:Policy-url}}|правилами]].\nЗадайте причіну ниже (наприклад вкажте, котры сторінкы были пошкоджены).",
-       "ipadressorusername": "IP-адреса або мено хоснователя:",
+       "ipaddressorusername": "IP-адреса або мено хоснователя:",
        "ipbexpiry": "Кінчіть:",
        "ipbreason": "Причіна:",
        "ipbreason-dropdown": "*Часты причіны блокованя\n** Вкладаня неправдивых інформацій\n** Одстранёваня обсягу сторінок\n** Вкладаня рекламных екстерных одказів\n** Вкладаня незмыслїв\n** Застрашованя або выгрожованя\n** Знеужываня веце конт\n** Невгодне мено хоснователя",
        "newimages-summary": "На тій шпеціалній сторінцї ся зображують остатнї наладованы файлы.",
        "newimages-legend": "Філтер",
        "newimages-label": "Назва файлу (або єй часть):",
-       "showhidebots": "($1 ботів)",
        "noimages": "Не є што зобразити.",
        "ilsubmit": "Глядати",
        "bydate": "за датумом",
index 4e7543d..c52f4df 100644 (file)
        "edit-gone-missing": "अस्मिन् पृष्ठे परिवर्तनं नाभूत् ।\nएतत् पृष्ठं पुरा एव केनापि अपाकृतम् इति भाति ।",
        "edit-conflict": "सम्पादनयोः अन्तर्विरोधः ।",
        "edit-no-change": "भवता/भवत्या कृतं सम्पादम् अवगणितम् । कारणं लेखे न किमपि परिवर्तनं जातमस्ति ।",
+       "postedit-confirmation-created": "नूतनपृष्ठस्य रचना अभवत् ।",
+       "postedit-confirmation-restored": "एतत् पृष्ठं पुनः सङ्ग्रहितम् ।",
        "postedit-confirmation-saved": "सम्पादनं रक्षितम् ।",
        "edit-already-exists": "नूतनपृष्ठस्य निर्माणं नाभूत् ।\nपूर्वस्मादेव एतत् पृष्ठं विद्यते ।",
        "defaultmessagetext": "मूलसन्देशः",
        "content-failed-to-parse": "$1 कृते $2 इत्यस्य विभाजनं विफलम् अभवत् । दोषः : $3",
        "invalid-content-data": "अयोग्यः लेखः",
-       "content-not-allowed-here": "[[$2]] à¤ªà¥\83षà¥\8dठà¥\87 \"$1\" à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤\85नà¥\81मता नास्ति",
+       "content-not-allowed-here": "[[$2]] à¤ªà¥\83षà¥\8dठà¥\87 \"$1\" à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤¸à¥\8dथापितà¥\81मà¥\8d à¤\85नà¥\81मतिà¤\83 नास्ति",
        "editwarning-warning": "एतत् पृष्ठं त्यक्तवा यदि गमिष्यति, तर्हि भवता/भवत्या कृतस्य सम्पादनस्य रक्षणं न भविष्यति ।\n\nभवता/भवत्या यदि प्रवेशः प्राप्तः अस्ति, तर्हि एषा सूचना अत्र \"{{int:prefs-editing}}\" निगूढितुं शक्यते ।",
        "editpage-notsupportedcontentformat-title": "लेखस्य प्रारूपम् अयोग्यम्",
        "editpage-notsupportedcontentformat-text": "लेखस्य सामग्र्याः $1 इति प्रारूपं $2 सामग्री-उदाहरणानुगुणं नास्ति ।",
        "difference-missing-revision": "{{PLURAL:$2|One revision|$2 पुनरावृत्तेः }} व्यत्यासः ($1) {{PLURAL:$2|was|were}} न दृष्टः ।\nकारणम् अत्र दृश्यते । [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "searchresults": "अन्वेषणपरिणामाः",
        "searchresults-title": "\"$1\" कृते अन्वेषणपरिणामाः",
-       "toomanymatches": "à¤\85तà¥\8dयधिà¤\95ाà¤\83 à¤®à¥\87लाà¤\83 à¤ªà¥\8dरतà¥\8dयाà¤\97ताà¤\83 à¥¤ à¤\85नà¥\8dयपà¥\8dरशà¥\8dनà¥\87न à¤¯à¤¤à¤¤à¤¾à¤®à¥\8d à¥¤",
-       "titlematches": "पà¥\81à¤\9fशà¥\80रà¥\8dषिà¤\95ामà¥\87लाà¤\83 à¥¤",
-       "textmatches": "पà¥\81à¤\9fपाठसà¥\8dय à¤®à¥\87लाà¤\83",
-       "notextmatches": "न à¤\95सà¥\8dयापि à¤ªà¥\83षà¥\8dठसà¥\8dय à¤ªà¤¾à¤ à¤\83 à¤\85सà¥\8dय à¤¸à¤®à¤®à¤¸à¥\8dति",
+       "toomanymatches": "बहवà¤\83 à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¾à¤\83 à¤ªà¥\8dरापà¥\8dताà¤\83, à¤\95à¥\83पया à¤¶à¤¬à¥\8dदà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dय à¤ªà¥\81नà¤\83 à¤\85नà¥\8dविषà¥\8dयतामà¥\8d",
+       "titlematches": "पà¥\83षà¥\8dठशà¥\80रà¥\8dषà¤\95à¤\82 à¤®à¥\87लà¤\83 (matches)",
+       "textmatches": "पà¥\83षà¥\8dठपाठà¤\83 à¤®à¥\87लà¤\83 (matches)",
+       "notextmatches": "à¤\8fषà¤\83 à¤¶à¤¬à¥\8dदà¤\83 à¤¨ à¤\95सà¥\8dमिà¤\82शà¥\8dà¤\9aिदपि à¤ªà¥\83षà¥\8dठà¥\87 à¤\85नà¥\8dतरà¥\8dभवति à¥¤",
        "prevn": "पूर्वतनम् {{PLURAL:$1|$1}}",
        "nextn": "अग्रिमम् {{PLURAL:$1|$1}}",
        "prevn-title": "पूर्वतन{{PLURAL:$1|परिणामः|परिणामाः}}",
        "nextn-title": "अग्रिम{{PLURAL:$1|परिणामः|परिणामाः}}",
-       "shown-title": "पà¥\8dरतà¥\8dयà¥\87à¤\95सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 $1 {{PLURAL:$1|फलितमà¥\8d|फलितानि}} à¤¦à¤°à¥\8dशà¥\8dयतामà¥\8d",
+       "shown-title": "पà¥\8dरतà¥\8dयà¥\87à¤\95सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 $1 {{PLURAL:$1|परिणामà¤\83 à¤¦à¥\83शà¥\8dयतामà¥\8d|परिणामाà¤\83 à¤¦à¥\83शà¥\8dयनà¥\8dतामà¥\8d}}",
        "viewprevnext": "दृश्यताम् ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "<strong>अस्मिन् विकि-जालस्थाने \"[[:$1]]\" नामकं पृष्ठं विद्यते ।</strong> {{PLURAL:$2|0=|अन्यपरिणामाः दृश्यन्ताम्}}",
-       "searchmenu-new": "<strong> अस्मिन् विकिजालस्थाने \"[[:$1]]\" इदं पृष्ठं सृज्यताम् ।\n</strong>\n{{PLURAL:$2|0=|तव अन्वेषणस्य परिणामोऽपि दृश्यताम् ।|तव अन्वेषणस्य परिणामाः अपि दृश्यन्ताम्}}",
+       "searchmenu-new": "<strong> अस्मिन् विकि-जालस्थाने \"[[:$1]]\" इदं पृष्ठं सृज्यताम् ।\n</strong>\n{{PLURAL:$2|0=|तव अन्वेषणस्य परिणामोऽपि दृश्यताम् ।|तव अन्वेषणस्य परिणामाः अपि दृश्यन्ताम्}}",
        "searchprofile-articles": "विषयसहितानि पृष्ठानि",
        "searchprofile-project": "साहाय्यं, प्रकल्पपृष्ठानि च",
        "searchprofile-images": "माध्यमसमुच्चयः",
        "searchprofile-advanced-tooltip": "नामाकाशेषु अन्विष्यताम्",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्दः|$2 शब्दाः}})",
        "search-result-category-size": "{{PLURAL:$1|1 योजकः|$1 योजकाः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपवर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})",
-       "search-result-score": "सम्बन्धः $1% ।",
+       "search-result-score": "सम्बन्धः : $1%",
        "search-redirect": "($1 तः अनुप्रेषितम्)",
        "search-section": "(विभागः $1)",
+       "search-file-match": "(सञ्चिकापाठेन सह मेलः अस्ति)",
        "search-suggest": "किं भवतः/भवत्याः आशयः एवमस्ति : $1",
        "search-interwiki-caption": "बन्धु-प्रकल्पाः",
-       "search-interwiki-default": "$1 परिणामाः :",
+       "search-interwiki-default": "$1 à¤¤à¤\83 à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¾à¤\83 :",
        "search-interwiki-more": "(अधिकानि)",
-       "search-relatedarticle": "सम्बद्धानि ।",
-       "searcheverything-enable": "सरà¥\8dवनामावà¤\95ाशà¥\87 à¤\85नà¥\8dविषतà¥\81 à¥¤",
+       "search-relatedarticle": "सम्बद्धानि",
+       "searcheverything-enable": "सरà¥\8dवसà¥\8dमिनà¥\8d à¤¨à¤¾à¤®à¤¾à¤\95ाशà¥\87 à¤\85नà¥\8dविषà¥\8dयतामà¥\8d",
        "searchrelated": "सम्बद्धानि",
        "searchall": "सर्वाणि",
-       "showingresults": "निम्नगतक्रमाङ्कस्य '''$2''' तः आरभ्य अधिकतमं परिणामः'''$1''' {{PLURAL:$1| दर्शितः}}।",
-       "showingresultsnum": "निम्नगतक्रमाङ्क'''$2'''तः आरभ्य अधिकतमः '''$3''' परिणामः {{PLURAL:$3|दर्शितः}}।",
+       "showingresults": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
+       "showingresultsinrange": "#'''$2''' क्रमाङ्कात् आरभ्य #'''$3''' क्रमाङ्कपर्यन्तं {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
+       "showingresultsnum": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$3|'''1''' परिणामः अधः प्रदर्शितः|'''$3''' परिणामाः अधः प्रदर्शिताः}}।",
        "showingresultsheader": "'''$4''' इत्येतस्मै {{PLURAL:$5|'''$1''' परिणामः '''$3''' इत्येषु|'''$1 - $2''' परिणामाः '''$3''' इत्येषु}}",
        "search-nonefound": "भवतः/भवत्याः अपेक्षानुगुणं परिणामः न विद्यते ।",
        "powersearch-legend": "प्रगतम् अन्वेषणम्",
-       "powersearch-ns": "नामाकाशेषु अन्विष्यताम्:",
-       "powersearch-togglelabel": "à¤\86यà¥\80à¤\95ा:",
+       "powersearch-ns": "नामाकाशेषु अन्विष्यताम् :",
+       "powersearch-togglelabel": "परà¥\80à¤\95à¥\8dषà¥\8dयतामà¥\8d :",
        "powersearch-toggleall": "सर्वम्",
-       "powersearch-togglenone": "नासà¥\8dति",
+       "powersearch-togglenone": "नà¥\88à¤\95मपि",
        "search-external": "बाह्यान्वेषणम्",
-       "searchdisabled": "{{SITENAME}} अन्वेषणं निष्क्रियम्\nअश्मिन् समये भवान् गूगल माध्यमेन अन्वेषणं कर्तुं शक्नोति\nस्मरयतु यत् {{SITENAME}} इति स्थलस्य क्रमाङ्का नैव अद्यातना  इति सोच्यते।",
+       "searchdisabled": "{{SITENAME}} इत्यत्र अन्वेषणं कर्तुं न शक्यते ।\nतावता गुगल-माध्यमेन अन्वेषणं कर्तुं शक्यते ।\n'''पूर्वसूचना'''गुगल-जालस्थाने {{SITENAME}} इत्यस्य पुरातना सूचना भवितुम् अर्हति ।",
+       "search-error": "$1 इति अन्वेषणकाले दोषः प्राप्तः :",
        "preferences": "इष्टतमानि",
        "mypreferences": "इष्टतमानि",
        "prefs-edits": "सम्पादनानां सख्याः",
+       "prefsnologintext2": "स्वस्य इष्टतमानि परिवर्तितुं कृपया $1 इत्येनं नुदतु ।",
        "prefs-skin": "त्वक्",
        "skin-preview": "प्राग्दृश्यम्",
-       "datedefault": "वरà¥\80याà¤\82सि à¤¨à¤¾à¤¸्ति",
-       "prefs-labs": "पà¥\8dरयà¥\8bà¤\97शालालà¤\95à¥\8dषणानि à¥¤",
-       "prefs-user-pages": "यà¥\8bà¤\9cà¤\95पà¥\81à¤\9fानि à¥¤",
-       "prefs-personal": "यà¥\8bà¤\9cà¤\95सà¥\8dय à¤°à¥\82परà¥\87à¤\96ा",
+       "datedefault": "à¤\87षà¥\8dà¤\9fतमानि à¤¨ à¤¸à¤¨्ति",
+       "prefs-labs": "पà¥\8dरयà¥\8bà¤\97शालावà¥\88शिषà¥\8dà¤\9fà¥\8dयमà¥\8d",
+       "prefs-user-pages": "यà¥\8bà¤\9cतपà¥\83षà¥\8dठानि",
+       "prefs-personal": "यà¥\8bà¤\9cà¤\95सà¥\8dय à¤µà¤¿à¤µà¤°à¤£à¤®à¥\8d",
        "prefs-rc": "सद्यो जातानि परिवर्तनानि",
-       "prefs-watchlist": "निरà¥\80à¤\95à¥\8dषासà¥\82à¤\9aà¥\80",
-       "prefs-watchlist-days": "दà¥\83षà¥\8dà¤\9fि à¤¸à¥\82à¤\9aà¥\80 à¤¦à¤°à¥\8dशनारà¥\8dथà¥\87  à¤¦à¤¿à¤µà¤¸à¤¾à¤¨à¤¿",
-       "prefs-watchlist-days-max": "अधिकतमानि $1 {{PLURAL:$1|दिनानि}}",
-       "prefs-watchlist-edits": "विसà¥\8dतà¥\83तावलà¥\8bà¤\95नावलà¥\8dयाà¤\82 à¤ªà¥\8dरदरà¥\8dशयितà¥\81मà¥\8d à¤\85तà¥\8dयधिà¤\95परिवरà¥\8dतनानि à¥¤",
-       "prefs-watchlist-edits-max": "अधिकतम संख्या: १०००",
-       "prefs-watchlist-token": "à¤\85वलà¥\8bà¤\95नावलà¥\8dयाà¤\83 à¤ªà¥\8dरतà¥\80à¤\95à¤\83 à¥¤",
-       "prefs-misc": "विविधà¤\83",
+       "prefs-watchlist": "à¤\85वà¥\87à¤\95à¥\8dषणावलिà¤\83",
+       "prefs-watchlist-days": "à¤\85नà¥\87à¤\95à¥\8dषणावलà¥\8dयाà¤\82 à¤¦à¤°à¥\8dशनियानि à¤¦à¤¿à¤¨à¤¾à¤¨à¤¿ :",
+       "prefs-watchlist-days-max": "$1 अधिकतम{{PLURAL:$1|दिनं|दिनानि}}",
+       "prefs-watchlist-edits": "à¤\85सà¥\8dयाà¤\82 à¤µà¤¿à¤¸à¥\8dतà¥\83त-à¤\85वà¥\87à¤\95à¥\8dषणावलà¥\8dयाà¤\82 à¤ªà¥\8dरदरà¥\8dशयितà¥\81à¤\82 à¤®à¤¹à¤¤à¥\8dतमपरिवरà¥\8dतनानाà¤\82 à¤¸à¤\99à¥\8dà¤\96à¥\8dया :",
+       "prefs-watchlist-edits-max": "अधिकतमसङ्ख्याः : १०००",
+       "prefs-watchlist-token": "à¤\85वà¥\87à¤\95à¥\8dषणावलà¥\8dयाà¤\83 à¤ªà¥\8dरतà¥\80à¤\95à¤\83",
+       "prefs-misc": "विविधमà¥\8d",
        "prefs-resetpass": "कूटशब्दः परिवर्त्यताम्",
-       "prefs-changeemail": "विदà¥\8dयà¥\81नà¥\8dमानपतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयतà¥\81 à¥¤",
-       "prefs-setemail": "विदà¥\8dयà¥\81नà¥\8dमानपतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तà¤\82 à¤¯à¥\8bà¤\9cयतà¥\81 à¥¤",
-       "prefs-email": "à¤\87मà¥\87ल à¤µà¥\88à¤\95लà¥\8dपिà¤\95ाः",
+       "prefs-changeemail": "à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dयतामà¥\8d",
+       "prefs-setemail": "à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तà¤\83 à¤²à¤¿à¤\96à¥\8dयतामà¥\8d",
+       "prefs-email": "à¤\88पतà¥\8dर-विà¤\95लà¥\8dपाः",
        "prefs-rendering": "स्वरूपम्",
-       "saveprefs": "सà¤\82रà¤\95à¥\8dषà¥\8dयतामà¥\8d",
-       "restoreprefs": "समà¤\97à¥\8dराà¤\83 à¤µà¥\8dयवसà¥\8dथादय à¤µà¥\8dयवसà¥\8dथानà¥\81सारà¤\82 à¤ªà¥\81नà¤\83 à¤¸à¤\82रà¤\95à¥\8dषà¥\8dयतामà¥\8d",
+       "saveprefs": "रक्ष्यताम्",
+       "restoreprefs": "मà¥\82लवà¥\8dयवसà¥\8dथापनानà¥\81à¤\97à¥\81णà¤\82 (default settings) à¤¸à¤°à¥\8dवà¥\87 à¤µà¤¿à¤\95लà¥\8dपाà¤\83 à¤­à¤µà¤¨à¥\8dतà¥\81 (सरà¥\8dवà¥\87षà¥\81 à¤µà¤¿à¤­à¤¾à¤\97à¥\87षà¥\81)",
        "prefs-editing": "सम्पादनम्",
-       "rows": "पà¤\82à¤\95à¥\8dति",
-       "columns": "à¤\85ध: à¤ªà¤\82à¤\95à¥\8dतà¥\8dयाà¤\83",
+       "rows": "पà¤\99à¥\8dà¤\95तयà¤\83 :",
+       "columns": "सà¥\8dतमà¥\8dभाà¤\83 :",
        "searchresultshead": "अन्वेषणम्",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">आधारानुबन्धानां </a>अधिकतमाकारः ।",
+       "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> इत्यस्य प्रारूपणस्य (formatting) कृते प्रारम्भिकसोपान formatting (bytes):",
        "stub-threshold-disabled": "निष्क्रियः",
-       "recentchangesdays": "दिवसानि पर्यन्तो सद्यावधि-परिवर्तनानि दृश्यतु:",
-       "recentchangesdays-max": "अधिकतम $1 {{PLURAL:$1|दिवसः|दिवसानि}}",
-       "recentchangescount": "सम्पादन संख्यकानि व्यवस्थानुसारेण दृश्यतु:",
-       "prefs-help-recentchangescount": "अत्र सद्यः परिवर्तनानि, पुटेतिहासाः, प्रवेशाः च अन्तर्गताः ।",
-       "savedprefs": "आद्यताः संरक्षिताः ।",
-       "timezonelegend": "समय मण्डल:",
-       "localtime": "स्थानीय समय:",
-       "timezoneuseserverdefault": "विकिनिश्चितं ($1) उपयुज्यताम् ।",
-       "timezoneuseoffset": "अन्ये (समयान्तरं निर्दिशतु )",
-       "servertime": "वितारकसमयः ।",
-       "guesstimezone": "जालदर्शिकातः पूरयतु ।",
-       "timezoneregion-africa": "कालद्वीप",
+       "recentchangesdays": "नूतनपरिवर्तनेषु प्रदर्शनीयानि दिनानि :",
+       "recentchangesdays-max": "$1 अधिकतम{{PLURAL:$1|दिनं|दिनानि}}",
+       "recentchangescount": "फलकेषु सामान्यतया यानि परिवर्तनानि अभवन्, तेषां सङ्ख्या :",
+       "prefs-help-recentchangescount": "अत्र नूतनपरिवर्तनानि, पृष्ठेतिहासः, संरक्षितावल्यश्च अन्तर्भवन्ति ।",
+       "prefs-help-watchlist-token2": "भवतः/भवत्याः अवेक्षणावल्याः वेब-करस्य (web feed) गुप्तकुञ्चिका अस्त्येषा । \nएषा कुञ्चिका यस्य पार्श्वे भविष्यति, सः तव अवेक्षणावलिं द्रष्टुं प्रभविष्यति । अतः एनां गुप्ततया स्थाप्यताम् ।\n[[Special:ResetTokens|गुप्तकुञ्चिकां परिवर्तयितुम् अत्र नुद्यताम् ।]]।",
+       "savedprefs": "भवतः/भवत्याः इष्टतमानि रक्षितानि ।",
+       "timezonelegend": "समयवलयः (time zone) :",
+       "localtime": "स्थानीयसमय:",
+       "timezoneuseserverdefault": "विकि-मूलविकल्पान् स्थापयन्तु ($1)",
+       "timezoneuseoffset": "अन्यम् (समयान्तरं निर्दिशतु )",
+       "servertime": "वितरकसमयः :",
+       "guesstimezone": "गवेक्षणे पूरयतु",
+       "timezoneregion-africa": "कालद्वीपः",
        "timezoneregion-america": "अमेरिका",
-       "timezoneregion-antarctica": "à¤\85à¤\82टार्कटिका",
+       "timezoneregion-antarctica": "à¤\85णà¥\8dटार्कटिका",
        "timezoneregion-arctic": "आर्कटिक",
-       "timezoneregion-asia": "जम्बुमहाद्वीप",
-       "timezoneregion-atlantic": "à¤\8fà¤\9fलाà¤\82à¤\9fिà¤\95 à¤®à¤¹à¤¾à¤¸à¤¾à¤\97र",
+       "timezoneregion-asia": "जम्बुमहाद्वीप",
+       "timezoneregion-atlantic": "à¤\8fà¤\9fलाणà¥\8dà¤\9fिà¤\95-महासाà¤\97रà¤\83",
        "timezoneregion-australia": "ऑस्ट्रेलिया",
        "timezoneregion-europe": "यूरोप",
-       "timezoneregion-indian": "हिà¤\82द à¤®à¤¹à¤¾à¤¸à¤¾à¤\97र",
-       "timezoneregion-pacific": "पà¥\8dरशाà¤\82त à¤®à¤¹à¤¾à¤¸à¤¾à¤\97र",
-       "allowemail": "à¤\85नà¥\8dयà¥\8bपयà¥\8bà¤\9cà¤\95ानाà¤\82 à¤µà¤¿à¤¦à¥\8dयà¥\81नà¥\8dमानसà¤\99à¥\8dà¤\95à¥\87तà¤\82 à¤¨à¤¿à¤·à¥\8dà¤\95ियà¤\82 à¤\95रà¥\8bतà¥\81 à¥¤",
-       "prefs-searchoptions": "à¤\85नà¥\8dवà¥\87षणविà¤\95लà¥\8dपाà¤\83",
-       "prefs-namespaces": "नामाà¤\95ाशà¤\83 :",
-       "defaultns": "अन्यथा एतेषु नामाकाशेषु अन्विषतु ",
-       "default": "यदभावà¥\87",
-       "prefs-files": "सञ्चिका",
-       "prefs-custom-css": "सि.à¤\8fसà¥\8d.à¤\8fसà¥\8d.रà¤\9aयतà¥\81 à¥¤",
-       "prefs-custom-js": "à¤\9cावालिपिà¤\82 à¤°à¤\9aयतà¥\81 à¥¤",
-       "prefs-common-css-js": "सरà¥\8dवावरणानाà¤\82 à¤\95à¥\83तà¥\87 à¤µà¤¿à¤­à¤\95à¥\8dत à¤¸à¤¿.à¤\8fसà¥\8d.à¤\8fसà¥\8d./ à¤\9cावालिपिà¤\83 à¥¤",
-       "prefs-reset-intro": "à¤\86दà¥\8dयतानाà¤\82 à¤ªà¥\81नरà¥\8dनिदà¥\87शारà¥\8dथमà¥\8d à¤\8fततà¥\8dपà¥\81à¤\9fमà¥\8d à¤\89पयà¥\8bà¤\95à¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8bति à¥¤ à¤\8fततà¥\8d à¤\85à¤\95à¥\83तà¤\82 à¤¨ à¤­à¤µति ।",
-       "prefs-emailconfirm-label": "विदà¥\8dयà¥\81नà¥\8dमानसà¤\99à¥\8dà¤\95à¥\87तसà¥\8dय à¤¦à¥\83ढà¥\80à¤\95रणमà¥\8d à¥¤",
-       "youremail": "ई-पत्रसङ्केतः",
-       "username": "योजकनामन्:",
-       "uid": "प्रयोक्तृ-क्रमांकः :",
-       "prefs-memberingroups": "{{PLURAL:$1|समूहस्य|समूहानां}}  सदस्यः:",
-       "prefs-registration": "पà¤\82à¤\9cà¥\80à¤\95रण à¤\95ालà¤\83:",
-       "yourrealname": "वास्तविकनाम:",
-       "yourlanguage": "भाषा:",
-       "yourvariant": "भाषासामà¤\97à¥\8dरà¥\80णाà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d à¥¤",
+       "timezoneregion-indian": "हिनà¥\8dद-महासाà¤\97रà¤\83",
+       "timezoneregion-pacific": "पà¥\8dरशानà¥\8dत-महासाà¤\97रà¤\83",
+       "allowemail": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\88à¤\83 à¤ªà¥\8dरà¥\87षितानि à¤\88-पतà¥\8dराणि à¤\85नà¥\81मतिà¤\82 à¤¦à¤¦à¤¾à¤¤à¥\81",
+       "prefs-searchoptions": "à¤\85नà¥\8dविषà¥\8dयतामà¥\8d",
+       "prefs-namespaces": "नामाà¤\95ाशाà¤\83",
+       "defaultns": "अन्यथा एतेषु नामाकाशेषु अन्विषतु :",
+       "default": "पà¥\82रà¥\8dवनिरà¥\8dदिषà¥\8dà¤\9fमà¥\8d",
+       "prefs-files": "सञ्चिका:",
+       "prefs-custom-css": "सà¥\8dवानà¥\81à¤\95à¥\81लसमà¥\8dपादितà¤\82 CSS",
+       "prefs-custom-js": "सà¥\8dवानà¥\81à¤\95à¥\81लसमà¥\8dपादितà¤\82 JavaScript",
+       "prefs-common-css-js": "सरà¥\8dवासाà¤\82 à¤¤à¥\8dवà¤\9aाà¤\82 (of skins) à¤\95à¥\83तà¥\87 CSS/JavaScript:",
+       "prefs-reset-intro": "भवानà¥\8d/भवतà¥\80 à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤¾à¤¹à¤¾à¤¯à¥\8dयà¥\87न à¤¸à¥\8dवसà¥\8dय à¤\87षà¥\8dà¤\9fतमविà¤\95लà¥\8dपानà¥\8d à¤®à¥\82लविà¤\95ि-विà¤\95लà¥\8dपसदà¥\83शà¤\82 à¤¸à¥\8dथापयितà¥\81à¤\82 (à¤\95रà¥\8dतà¥\81à¤\82) à¤¶à¤\95à¥\8dनà¥\8bति à¥¤\nपरनà¥\8dतà¥\81 à¤¤à¤¤à¤\83 à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤ªà¥\82रà¥\8dववतà¥\8d à¤¸à¥\8dथितिà¤\82 à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dषà¥\8dयति ।",
+       "prefs-emailconfirm-label": "à¤\88-पतà¥\8dरà¤\82 à¤¦à¥\83ढà¥\80à¤\95à¥\8dरियतामà¥\8d :",
+       "youremail": "ई-पत्रसङ्केतः :",
+       "username": "{{GENDER:$1|योजकनाम}} :",
+       "uid": "{{GENDER:$1|प्रयोकतृनाम}} :",
+       "prefs-memberingroups": "{{PLURAL:$1|समूहस्य|समूहानां}} {{GENDER:$2|सदस्यः/सदस्याः}} :",
+       "prefs-registration": "पà¤\9eà¥\8dà¤\9cà¥\80à¤\95रणसà¥\8dय à¤\95ालà¤\83 :",
+       "yourrealname": "वास्तविकनाम :",
+       "yourlanguage": "भाषा :",
+       "yourvariant": "भाषायाà¤\83 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80वà¥\88विधà¥\8dयमà¥\8d :",
        "prefs-help-variant": " विक्यां प्रदर्शितुं भवति ।",
-       "yournick": "नà¥\82तनाà¤\83 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषराà¤\83:",
-       "prefs-help-signature": "सà¤\82भाषणपà¥\83षà¥\8dठà¤\97ताà¤\83 à¤¸à¤\82वादाà¤\83 \"<nowiki>~~~~</nowiki>\" à¤\87ति à¤²à¤¿à¤\96ितà¥\8dवा à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरà¥\8bपà¥\87ताà¤\83 à¤\95रà¥\8dतà¥\8dतवà¥\8dयाà¤\83। à¤\8fतानि à¤\9aिहà¥\8dनानि à¤ªà¥\83षà¥\8dठरà¤\95à¥\8dषणपशà¥\8dà¤\9aातà¥\8d à¤­à¤µà¤¤à¤\83 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरानà¥\8d à¤¸à¤®à¤¯à¤®à¥\81दà¥\8dराà¤\82 à¤\9a à¤ªà¥\8dरदरà¥\8dशयिषà¥\8dयनà¥\8dति।",
-       "badsig": "à¤\85मानà¥\8dयाà¤\83 (तà¥\8dरà¥\81à¤\9fिपà¥\82रà¥\8dणाà¤\83) à¤¹à¤¿ à¤\8fतà¥\87 à¤\85पà¤\95à¥\8dवाà¤\83 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषराà¤\83।\nà¤\8fà¤\9aà¤\9fà¥\80à¤\8fमà¤\8fलà¥\8d-à¤\9fà¥\88à¤\97 à¤\87तà¥\8dयà¥\87तानि à¤ªà¥\81नरà¥\80à¤\95à¥\8dषितवà¥\8dयानि à¤­à¤µà¤¤à¤¾।",
-       "badsiglength": "भवतà¤\83 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषराà¤\83 à¤¤à¥\81 à¤\85तà¥\80व à¤¦à¥\80रà¥\8dà¤\98ाà¤\83।\nà¤\8fतà¥\87 $1 {{PLURAL:$1|à¤\85à¤\95à¥\8dषरातà¥\8d|à¤\85à¤\95à¥\8dषरà¥\87भà¥\8dयà¤\83}} à¤¦à¥\80रà¥\8dà¤\98ाà¤\83 à¤¨ à¤­à¤µà¤¿à¤¤à¤µà¥\8dयाà¤\83।",
-       "yourgender": "लिà¤\82à¤\97मà¥\8d (Gender):",
-       "gender-unknown": "à¤\85निरà¥\8dदिषà¥\8dà¤\9fमà¥\8d",
-       "gender-male": "पà¥\81रà¥\81ष",
-       "gender-female": "सà¥\8dतà¥\8dरà¥\80",
-       "prefs-help-gender": "वà¥\88à¤\95लà¥\8dपिà¤\95à¤\83 : à¤\85यà¤\82 à¤¤à¤¨à¥\8dतà¥\8dराà¤\82शà¤\83 à¤²à¤¿à¤\99à¥\8dà¤\97ानà¥\81सारसमà¥\8dबà¥\8bधनसà¥\8dय à¤\89पयà¥\8bà¤\9cà¤\95à¤\83 ।",
-       "email": "विदà¥\8dयà¥\81तà¥\8dपतà¥\8dरवà¥\8dयवसà¥\8dथा",
+       "yournick": "नà¥\82तनहसà¥\8dताà¤\95à¥\8dषरमà¥\8d :",
+       "prefs-help-signature": "समà¥\8dभाषणपà¥\83षà¥\8dठà¥\87षà¥\81 à¤\9fिपà¥\8dपणà¥\80à¤\82 à¤²à¤¿à¤\96ितà¥\8dवा à¤\85नà¥\8dतà¥\87 \"<nowiki>~~~~</nowiki>\" à¤²à¤¿à¤\96तà¥\81 à¥¤ à¤\85नà¥\87न à¤¸à¥\8dवसà¥\8dय à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरà¥\87ण à¤¸à¤¹ à¤\9fिपà¥\8dपणà¥\80लà¥\87à¤\96नà¤\95ालसà¥\8dयापि à¤\89लà¥\8dलà¥\87à¤\96à¤\83 à¤­à¤µà¤¿à¤·à¥\8dयति ।",
+       "badsig": "à¤\85यà¥\8bà¤\97à¥\8dयà¤\82 à¤ªà¥\8dरारà¥\82परहितà¤\82 (raw) à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरमà¥\8d à¥¤\nHTML à¤\9aिहà¥\8dनà¤\82 à¤ªà¤¶à¥\8dयतà¥\81 ।",
+       "badsiglength": "हसà¥\8dताà¤\95à¥\8dषरà¤\82 à¤¬à¤¹à¥\81लमà¥\8dबमानमà¥\8d à¤\85सà¥\8dति à¥¤\nहसà¥\8dताà¤\95à¥\8dषरà¤\82 $1 {{PLURAL:$1|à¤\85à¤\95à¥\8dषरातà¥\8d|à¤\85à¤\95à¥\8dषरà¥\87भà¥\8dयà¤\83}} à¤¦à¥\80रà¥\8dà¤\98à¤\82 à¤¨ à¤­à¤µà¥\87तà¥\8d ।",
+       "yourgender": "सà¥\8dवपरिà¤\9aयà¤\82 à¤\95थà¤\82 à¤¦à¤¾à¤¤à¥\81मà¥\8d à¤\87à¤\9aà¥\8dà¤\9bति ?",
+       "gender-unknown": "सà¥\8dवपरिà¤\9aयà¤\82 à¤¦à¤¾à¤¤à¥\81à¤\82 à¤¨à¥\87à¤\9aà¥\8dà¤\9bामि",
+       "gender-male": "सà¤\83 à¤µà¤¿à¤\95ि-पà¥\83षà¥\8dठानि à¤¸à¤®à¥\8dपादयति",
+       "gender-female": "सा à¤µà¤¿à¤\95ि-पà¥\83षà¥\8dठानि à¤¸à¤®à¥\8dपादयति",
+       "prefs-help-gender": "à¤\8fततà¥\8d à¤µà¤¿à¤µà¤°à¤£à¤®à¥\8d à¤\90à¤\9aà¥\8dà¤\9bिà¤\95मà¥\8d à¤\85सà¥\8dति à¥¤ à¤\8fतसà¥\8dमिनà¥\8d à¤¤à¤¨à¥\8dतà¥\8dराà¤\82शà¥\87\nलिà¤\99à¥\8dà¤\97ाधारà¥\87ण à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¸à¤®à¥\8dबà¥\8bधनारà¥\8dथमà¥\8d à¤\85सà¥\8dयà¥\8bपयà¥\8bà¤\97à¤\83 à¤­à¤µà¤¤à¤¿ à¥¤\nà¤\8fततà¥\8d à¤µà¤¿à¤µà¤°à¤£à¤\82 à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95à¤\82 à¤­à¤µà¤¿à¤·à¥\8dयति ।",
+       "email": "à¤\88पतà¥\8dरमà¥\8d",
        "prefs-help-realname": "निजनामधेयस्य उल्लेखः आवश्यकः नास्ति । \nयदि ददाति तर्हि अस्य प्रयोगः भवतः योगदानार्थं भवते श्रेयं दातुम् उपयुक्तः भवति ।",
        "prefs-help-email": "ई-पत्रसङ्केतः अनिवार्यः नास्ति । किन्तु कूटशब्दः विस्मर्यते चेत् तस्य परिवर्तनाय आवश्यकः भवति ।",
        "prefs-help-email-others": "योजकपृष्ठ-सम्भाषणपृष्ठयोः माध्यमेन,  ई-पत्रमाध्यमेन वा अन्ये योजकाः भवतः/भवत्याः सम्पर्कं कर्तुं शक्नुयुः ।\nसम्पर्केऽस्मिन् भवतः/भवत्याः ई-पत्रसङ्केतम् अन्ययोजकाः ज्ञातुं न प्रभवतन्ति ।",
        "blockip": "प्रयोक्तारं निरुध्नातु",
        "blockip-legend": "योजकम् अवरुणद्धु ।",
        "blockiptext": "विशिष्टं  IP सङ्केतम् अथवा योजकनाम लेखानाधिकारस्य प्राप्तये निम्नदत्तपत्रस्य उपयोगं करोतु ।\nकेवलं नाशकत्वम् अवरोद्धुं एतस्य उपयोगं करोतु । [[{{MediaWiki:Policy-url}}|नीतिः]] इत्यानुसारं करणीयम् ।\nअधः विशिष्टं कारणमपि लिखतु ।",
-       "ipadressorusername": "आइ.पी.सङ्केतः अथवा योजकनाम :",
+       "ipaddressorusername": "आइ.पी.सङ्केतः अथवा योजकनाम :",
        "ipbexpiry": "समाप्तिः :",
        "ipbreason": "कारणम् :",
        "ipbreason-dropdown": "* अवरोधस्य सामान्यानि कारणानि ।  \n** मिथ्या योजकनाम । \n** एकाधिकयोजकस्थानं निर्मीय तेषां दुरुपयोगः । \n** असत्यविषयानाम् उत्तारणम् । \n** पुटेषु अवकरपूरणम् । \n** पुटेभ्यः पदार्थान् अपनयनम् । \n** बाह्यजालस्थानाम् असम्बद्धानुबन्धानाम् संयोजनम् । \n** योजकानां पीडनम् ।",
        "newimages-summary": "एतत् विशेषपुटम् सद्यः उत्तारितसञ्चिकाः दर्शयति ।",
        "newimages-legend": "शोधनी ।",
        "newimages-label": "सञ्चिकानाम (अथवा अस्य भागः)",
-       "showhidebots": "(स्वयं चालकः $1)",
        "noimages": "शून्यदर्शनम् ।",
        "ilsubmit": "अन्वेषणम्",
        "bydate": "दिनाङ्कानुगुणम्",
index 7088a93..e7e9581 100644 (file)
                        "아라"
                ]
        },
-       "tog-underline": "ЫйÑ\8bннÑ\8cÑ\8bкÑ\82аÑ\80Ñ\8b аннынан тардыы:",
+       "tog-underline": "СигÑ\8dлÑ\8dÑ\80и аннынан тардыы:",
        "tog-hideminor": "Кыра көннөрүүлэри көрдөрбөккө",
        "tog-hidepatrolled": "Ботурууллааччы көрбүт көннөрүүтүн саҥа көннөрүүлэр тиһиктэригэр көрдөрүмэ",
        "tog-newpageshidepatrolled": "Ботуруулламмыт сирэйдэри саҥа сирэйдэр тиһиктэригэр көрдөрүмэ",
-       "tog-extendwatchlist": "Кэтээһин тупсарыллыбыт испииһэгэ. Бары уларытыылар көстөллөр (бүтэһиктэр эрэ буолбатах)",
+       "tog-extendwatchlist": "Кэтээһин тупсарыллыбыт тиһигэ. Бары уларытыылар көстөллөр (бүтэһиктэр эрэ буолбатах)",
        "tog-usenewrc": "Саҥа уларытыы уонна кэтэбил тиһиктэригэр уларыйыылары бөлөхтүүргэ",
-       "tog-numberheadings": "Ð\91аÑ\81 Ñ\82Ñ\8bллаÑ\80Ñ\8b нүөмэрдээ",
-       "tog-showtoolbar": "Көннөрүү үстүрүмүөннэрин көрдөр",
-       "tog-editondblclick": "ХоһÑ\83лаÑ\82ан Ð¸ÐºÐºÐ¸Ñ\82Ñ\8d Ð±Ð°Ñ\82Ñ\82аан Ñ\81иÑ\80Ñ\8dйи Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8b",
-       "tog-editsectiononrightclick": "СиÑ\8dкÑ\81ийÑ\8d Ð±Ð°Ò»Ñ\8bгаÑ\80 Ñ\83ҥа Ñ\82имÑ\8dÒ\95инÑ\8dн Ð±Ð°Ñ\82Ñ\82аан Ñ\81иÑ\8dкÑ\81ийÑ\8dни ÐºÓ©Ð½Ð½Ó©Ñ\80Ò¯Ò¯",
+       "tog-numberheadings": "ТүһүмÑ\8dÑ\85Ñ\82Ñ\8dÑ\80 Ð°Ð°Ñ\82Ñ\82аÑ\80Ñ\8bн нүөмэрдээ",
+       "tog-showtoolbar": "Көннөрүү хапталын көрдөр",
+       "tog-editondblclick": "Хоһулатан баттаан сирэйи уларытыы",
+       "tog-editsectiononrightclick": "ТүһүмÑ\8dÑ\85 Ð±Ð°Ò»Ñ\8bн Ñ\83ҥа Ñ\82имÑ\8dÒ\95инÑ\8dн Ð±Ð°Ñ\82Ñ\82аан Ñ\82үһүмÑ\8dÒ\95и Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8b",
        "tog-watchcreations": "Суруйбут ыстатыйаларбын уонна укпут билэлэрбин кэтээн көрүүгэ киллэрэн ис",
        "tog-watchdefault": "Уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
-       "tog-watchmoves": "Аатын уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү испииһэгэр киллэрэн ис",
+       "tog-watchmoves": "Аатын уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
        "tog-watchdeletion": "Соппут сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
        "tog-minordefault": "Уларытыылары атын этиллибэтэҕинэ кыра уларытыы курдук бэлиэтээ",
        "tog-previewontop": "Хайдах буоларын уларытар түннүк үрдүнэн (иннигэр) көрдөр",
        "tog-enotifminoredits": "Кыра да уларытыы киирдэҕинэ эл. почтанан биллэрээр",
        "tog-enotifrevealaddr": "Мин почтам аадырыһын биллэриилэргэ көрдөр",
        "tog-shownumberswatching": "Сирэйи кэтээн көрөр дьон ахсаанын көрдөр",
-       "tog-oldsig": "Ð\91ааÑ\80 илии баттааһын:",
-       "tog-fancysig": "Ð\91Ñ\8dйÑ\8d Ð¸Ð»Ð¸Ð¸ Ð±Ð°Ñ\82Ñ\82ааһÑ\8bна (Ñ\8bйÑ\8bннÑ\8cÑ\8bга суох)",
+       "tog-oldsig": "Ð\91илиҥҥи илии баттааһын:",
+       "tog-fancysig": "Ð\91Ñ\8dйÑ\8d Ð¸Ð»Ð¸Ð¸ Ð±Ð°Ñ\82Ñ\82ааһÑ\8bна (Ñ\81игÑ\8dÑ\82Ñ\8d суох)",
        "tog-uselivepreview": "Хайдах буолуохтааҕын тутатына эрдэ көрүү (тургутуу быһыытынан)",
        "tog-forceeditsummary": "Тугу уларыппытым туһунан суруйбатахпына сэрэт",
-       "tog-watchlisthideown": "Кэтээн көрүү испииһэгэр бэйэм уларытыыларбын көрдөрүмэ",
-       "tog-watchlisthidebots": "Кэтээн көрүү испииһэгэр робот уларытыытын көрдөрүмэ",
+       "tog-watchlisthideown": "Кэтээн көрүү тиһигэр бэйэм уларытыыларбын көрдөрүмэ",
+       "tog-watchlisthidebots": "Кэтээн көрүү тиһигэр робот уларытыытын көрдөрүмэ",
        "tog-watchlisthideminor": "Кыра уларытыылары кэтээмэ",
-       "tog-watchlisthideliu": "Бэлиэтэммит кыттааччылар уларытыыларын кэтиир испииһэккэ көрдөрүмэ",
+       "tog-watchlisthideliu": "Бэлиэтэммит кыттааччылар уларытыыларын кэтиир тиһиккэ көрдөрүмэ",
        "tog-watchlisthideanons": "Ааттарын эппэтэх кыттааччылар уларытыыларын кэтээһин испииһэгэр көрдөрүмэ",
        "tog-watchlisthidepatrolled": "Ботурууллааччы көрбүт көннөрүүтүн кэтээһин испииһэгэр көрдөрүмэ",
        "tog-ccmeonemails": "Атын кыттааччыларга суруйбут суруктарбын бэйэбэр эмиэ ыыт",
        "category-article-count": "{{PLURAL:$2|Бу категория манна эрэ көстүбүт субкатегориялаах.|$2 категорияттан {{PLURAL:$1|субкатегорията|$1 субкатегориялара}} көрдөрүлүннүлэр.}}",
        "category-article-count-limited": "Бу категорияҕа {{PLURAL:$1|1 эрэ сирэй|$1 сирэй}} баар.",
        "category-file-count": "{{PLURAL:$2|Бу категория манна эрэ көстүбүт билэлээх.|$2 категорияттан {{PLURAL:$1|билэтэ|$1 билэлэрэ}} көрдөрүлүннүлэр.}}",
-       "category-file-count-limited": "Бу категорияҕа  {{PLURAL:$1|биир билэ|$1 билэ}} баар.",
+       "category-file-count-limited": "Бу категорияҕа  {{PLURAL:$1|соҕотох билэ|$1 билэ}} баар.",
        "listingcontinuesabbrev": "(салгыыта)",
-       "index-category": "Индекстаммыт сирэйдэр",
+       "index-category": "Индекстэммит сирэйдэр",
        "noindex-category": "Индексктаммыт сирэйдэр суохтар",
        "broken-file-category": "Билэҕэ сигэлэрэ алҕастаах сирэйдэр",
        "about": "Бу туһунан",
        "talkpagelinktext": "Ырытыы",
        "specialpage": "Анал сирэй",
        "personaltools": "Тус бэйэ туттар туруоруулара",
-       "postcomment": "Саҥа Ñ\81алаа",
+       "postcomment": "Саҥа Ñ\82үһүмÑ\8dÑ\85",
        "articlepage": "Ыстатыйаны көр",
        "talk": "Ырытыы",
        "views": "Көрүүлэр",
        "jumptonavigation": "навигация",
        "jumptosearch": "көрдөөһүн",
        "view-pool-error": "Балаама, билигин бары сиэрбэрдэр туолан тураллар.\nБу сирэйи наһаа элбэх киһи көрүөн баҕарбыт.\nБука диэн, кэтэһэ түһэн баран өссө боруобалаар.\n\n$1",
+       "generic-pool-error": "Балаама, билигин бары сиэрбэрдэр туолан тураллар.\nБу сирэйи наһаа элбэх киһи көрө сатыыр.\nБука диэн, кэтэһэ түһэн баран өссө киирэн көрөөр.",
        "pool-timeout": "Хааччахтааһыны кэтэһии болдьоҕо ааста",
        "pool-queuefull": "Көрдөбүллэри хомуйуу туолбут",
        "pool-errorunknown": "Биллибэт алҕас",
        "badaccess": "Сатаан киирбэтэ",
        "badaccess-group0": "Эн бу дьайыыны оҥорор кыаҕыҥ суох.",
        "badaccess-groups": "Дьайыыны $1 {{PLURAL:$2|бөлөххө|бөлөхтөртөн биирдэстэригэр}} киирэр кыттааччыларылар эрэ оҥорор кыахтаахтар.",
-       "versionrequired": "MediaWiki $1 -Ñ\81 Ð±Ð¸Ñ\8dÑ\80Ñ\81ийÑ\8dÑ\82Ñ\8d Ð½Ð°Ð°Ð´Ð°",
+       "versionrequired": "MediaWiki $1 -Ñ\81 Ð±Ð°Ñ\80Ñ\8bла Ð¸Ñ\80дÑ\8dнÑ\8dÑ\80",
        "versionrequiredtext": "Бу сирэйи туттарга MediaWiki $1 -с барыла наада. [[Special:Version|Барыллар тустарынан сирэйи]] көр.",
        "ok": "Сөп",
        "retrievedfrom": "\"$1\" -н кэллэ",
        "edit-gone-missing": "Сирэйи саҥардар кыах суох.\nАрааһа сотуллубут быһыылаах.",
        "edit-conflict": "Көннөрүүлэр утарсыылара.",
        "edit-no-change": "Эн көннөрүүҥ киирбэтэ, тоҕо диэтэххэ тугу да уларыппатаххын.",
+       "postedit-confirmation-created": "Сирэй оҥоһулунна.",
+       "postedit-confirmation-restored": "Сирэй сөргүтүлүннэ.",
        "postedit-confirmation-saved": "Көннөрүүҥ бигэргэннэ.",
        "edit-already-exists": "Саҥа сирэйи оҥорор табыллыбат.\nМаннык сирэй баар эбит.",
        "defaultmessagetext": "Туспа этиллибэтэҕинэ суруллар тиэкис",
        "action-createpage": "сирэйдэри оҥоруу",
        "action-createtalk": "ырытыы сирэйдэрин оҥоруу",
        "action-createaccount": "кыттааччы бу бэлиэтэнэр аатын оҥоруу",
+       "action-history": "сирэй устуоруйатын көрүү",
        "action-minoredit": "бу уларытыыны суолтата суох курдук бэлиэтээ",
        "action-move": "бу сирэй аатын уларытыы",
        "action-move-subpages": "бу сирэй уонна кини аннынааҕы сирэйдэр ааттарын уларытыы",
        "pageswithprop-prophidden-binary": "бинаар суолта кистэммит ($1)",
        "doubleredirects": "Хос көһөрөөһүн",
        "doubleredirectstext": "Бу сирэйгэ атын сиргэ утаарар хос утаарыылар тиһиктэрэ көстөр.\nХас устуруока аайы бастакы уонна иккис утаарыга сигэ баар, ону таһынан иккис утаарыыга баар сирэй аадырыһа (аата) баар, ол аата бастакы утаарыы дьиҥинэн ханна утаарыахтааҕа көстөр.\n<del>Сотуллубут</del> суруктар көннөрүллүбүттэр.",
-       "double-redirect-fixed-move": "[[$1]] сирэй аата уларытыллыбыт, билигин манна утаарар [[$2]]",
+       "double-redirect-fixed-move": "[[$1]] сирэй аата уларытыллыбыт.\nАптамаатынан саҥардыллыбыт уонна бу сирэйгэ утаарар [[$2]].",
        "double-redirect-fixed-maintenance": "[[$1]] сирэйтэн [[$2]] сирэйгэ хос утаарыыны көннөрүү.",
        "double-redirect-fixer": "Утаарыылары көннөрөөччү",
        "brokenredirects": "Быстыбыт көһөрүүлэр",
        "blockip": "IP аадырыстан киириини бобуу",
        "blockip-legend": "Кыттааччыны хааччахтааһын",
        "blockiptext": "Ханнык эмит IP-ттан суруйары манна баар форманы туһанан боп.\nВандализмы утаран уонна [[{{MediaWiki:Policy-url}}]]\nбыраабылалрын тутуһан эрэ бобуохтааххын.\nХайаан да бобуу төрүөтүн кэпсээ (холобур, вандализм баар сирэйдэриттэн\nбыһа тардан манна көрдөр).",
-       "ipadressorusername": "IP аадырыһа эбэтэр кыттааччы аата:",
+       "ipaddressorusername": "IP аадырыһа эбэтэр кыттааччы аата:",
        "ipbexpiry": "Түмүктэниэ:",
        "ipbreason": "Төрүөтэ:",
        "ipbreason-dropdown": "* Бобуу сүрүн биричиинэлэрэ\n** Сымыйаны суруйуу\n** Сирэй иһинээҕитин суох оҥоруу\n** Тас саайтарга спам-ыйынньыктары олордуу\n** Туох да суолтата суох тиэкиһи суруйуу\n** Кыттааччыларга суоһурҕаныы, күөмчүлээһин\n** Хас да аатынан киирэн куһаҕаны оҥоруу\n** Бүрүкүтэ суох ааттаныы",
        "change-blocklink": "хааччахтааһыны уларытыы",
        "contribslink": "вклад",
        "emaillink": "суругу ыыт",
-       "autoblocker": "Эн IP-ҥ \"[[User:$1|$1]]\" кыттааччыны кытта биир буолан, эн эмиэ хааччахтаныыга түбэстиҥ. Кини хааччахтаммыт төрүөтэ: \"$2\"",
+       "autoblocker": "Эн IP-гын \"[[User:$1|$1]]\" кыттааччы туһаммыт буолан, эн эмиэ хааччахтаныыга түбэспиккин. \n$1 хааччахтаныытын төрүөтэ: \"$2\"",
        "blocklogpage": "Хааччахтааһын/бобуу сурунаала",
        "blocklog-showlog": "Бу кыттааччы бэлиэр хааччахтаммыт. Хааччах сурунаала аллара көстөр:",
        "blocklog-showsuppresslog": "Бу кыттааччы бэлиэр хааччахтаммыт уонна аата кистэммит. Аат кистээһин сурунаала аллара көстөр:",
        "spam_reverting": "Манна: $1 ыйынньыга суох бүтэһик торуму сөргүтүү (төннөрүү)",
        "spam_blanking": "Бары торумнар манна \"$1\" ыйынньыктаахтар, барытын суох оҥоруу",
        "spam_deleting": "Бары барыллар манна \"$1\" сигэнэллэр эит, сотуу бара турар",
-       "simpleantispam-label": "Анти-спам бэрэбиэркэтэ.\nМаны '''толорумаҥ'''!",
+       "simpleantispam-label": "Анти-спам бэрэбиэркэтэ.\nМаны <strong>толорума</strong>!",
        "pageinfo-title": "\"$1\" туһунан",
        "pageinfo-not-current": "Баалаама, эргэ барылларга манныгы көрдөрөр сатаммат эбит.",
        "pageinfo-header-basic": "Сүрүн сибидиэнньэлэр",
        "newimages-summary": "Бу анал сирэй киллэриллибит билэлэр испииһэктэрин көрдөрөр.",
        "newimages-legend": "Фильтр",
        "newimages-label": "Билэ аата (эбэтэр сорҕото):",
-       "showhidebots": "($1 робот)",
        "noimages": "Ойуу суох.",
        "ilsubmit": "Көрдөт",
        "bydate": "айыллыбыт кэминэн",
        "htmlform-no": "Суох",
        "htmlform-yes": "Сөп",
        "htmlform-chosen-placeholder": "Барылы тал",
+       "htmlform-cloner-create": "Өссө эп",
+       "htmlform-cloner-delete": "Сот",
+       "htmlform-cloner-required": "Саатар биирин толоруохтаах эбиккин.",
        "sqlite-has-fts": "$1 толору тиэкистээх көрдөөһүнү өйүүр",
        "sqlite-no-fts": "$1 толору тиэкистээх көрдөөһүнү өйөөбөт",
        "logentry-delete-delete": "$3 сирэйи $1 соппут",
index 4e3c799..3cbd84d 100644 (file)
        "blockip": "Blocca l'utenti",
        "blockip-legend": "Blocca l'utenti",
        "blockiptext": "Usa lu mòdulu cassutta pi bluccari la pussibbilità di scrìviri pi n'utenti o pi nu ndirizzu IP spicìficu. Chistu s'havi a fari sulu pi privèniri lu vannalismu e secunnu la [[{{MediaWiki:Policy-url}}|pulìtica di {{SITENAME}}]]. Scrivi na raggiùni valida ccà sutta (pi asempiu, cita li pàggini chi foru vannalizzati).",
-       "ipadressorusername": "Ndirizzu IP o nomu utenti:",
+       "ipaddressorusername": "Ndirizzu IP o nomu utenti:",
        "ipbexpiry": "Durata dû bloccu:",
        "ipbreason": "Mutivu:",
        "ipbreason-dropdown": "*Mutivi cchiù cumuni pî blocchi\n** Nzerimentu di nformazziuni falsi\n** Cancillazzioni di cuntinuti dê pàggini\n** Liami prumozziunalu a siti sterni\n** Nzserimentu di cuntinuti privi di sensu\n** Cumportamenti ntimidatori o molestie\n** Usu ndebitu di cchiù cunti\n** Nomu utenti nun accittabbili",
        "newimages-summary": "Sta pàggina spiciali ammustra li file caricati di cchiù picca tempu.",
        "newimages-legend": "Nomu file",
        "newimages-label": "Nomu file (o nu pezzu d'iddu):",
-       "showhidebots": "($1 li bot)",
        "noimages": "Nenti a vìdiri.",
        "ilsubmit": "Va' cerca",
        "bydate": "pi data",
index e02ec51..d8450a7 100644 (file)
        "blockip": "Block uiser",
        "blockip-legend": "Block uiser",
        "blockiptext": "Uise the form ablo tae block write access fae ae speceefic IP address or uisername. This shid be dun juist tae hinder vandaleesm, n in accord wi [[{{MediaWiki:Policy-url}}|policie]]. Fil in ae speceefic raison ablo (fer exemplar, citin parteecular pages that were vandalised).",
-       "ipadressorusername": "IP address or uisername:",
+       "ipaddressorusername": "IP address or uisername:",
        "ipbexpiry": "Expirie:",
        "ipbreason": "Raison:",
        "ipbreason-dropdown": "*Commyn block raisons\n** Insertin false information\n** Remuivin content fae pages\n** Spammin airtins til ootby steids\n** Insertin nonsense/gibberish intil pages\n** Inteemidatin behavier/harassment\n** Abuisin multiple accoonts\n** Onacceptable uisername",
index 0a41379..67d9eab 100644 (file)
        "whatlinkshere-hideimages": "$1 liadduri a file",
        "whatlinkshere-filters": "Filthri",
        "blockip": "Brocca utenti",
-       "ipadressorusername": "Indirizzu IP o innòmu utenti:",
+       "ipaddressorusername": "Indirizzu IP o innòmu utenti:",
        "ipbexpiry": "Ischadènzia di lu broccu:",
        "ipbreason": "Mutibu di lu broccu:",
        "ipbcreateaccount": "Impidisci la criazioni d'althri registhrazioni",
        "show-big-image": "File d'orìgini",
        "newimages": "Galleria di li file nobi",
        "imagelisttext": "Inogghi una listha di '''$1''' {{PLURAL:$1|file|file}} ordhinaddi pa $2.",
-       "showhidebots": "($1 li bot)",
        "noimages": "Nò v'è nudda da vidé.",
        "ilsubmit": "Zercha",
        "bydate": "data",
index 3429490..c091cc0 100644 (file)
        "protectedpagetext": "Šėts poslapis īr ožrakints, saugont anū nū redagavėma.",
        "viewsourcetext": "Tomsta galėt veizietė ėr kopėjoutė poslapė kuoda:",
        "protectedinterface": "Šėtom poslapi īr pruogramėnės ironguos sasajuos teksts katros īr apsauguots, kū neprietelē anū nasogadėntu.",
-       "editinginterface": "'''Diemesė:''' Tamsta keitat poslapi, katros īr nauduojams programėnės irongas sōsajės tekstė. Pakeitėmā tamė poslapū tēpuogi pakeis nauduotuojė sōsajės ėšruoda ė kėtėims nauduotujams. Jēgo nuorėt pargoldītė, siūluom pasėnauduotė [//translatewiki.net/wiki/Main_Page?setlang=bat-smg „translatewiki.net“], „MediaWiki“ lokalėzacėjės pruojėktu.",
+       "editinginterface": "<strong>Diemesė:</strong> Tamsta keitat poslapi, katros īr nauduojams programėnės irongas sōsajės tekstė. Pakeitėmā tamė poslapū tēpuogi pakeis nauduotuojė sōsajės ėšruoda ė kėtėims nauduotujams. Jēgo nuorėt pargoldītė, siūluom pasėnauduotė [//translatewiki.net „translatewiki.net“], „MediaWiki“ lokalėzacėjės pruojėktu.",
        "namespaceprotected": "Tamsta netorėt teisiu keistė poslapiu '''$1''' srėtī.",
        "ns-specialprotected": "Specēlė̅ jė poslapē negal būtė keitamė.",
        "logouttext": "'''Daba Tamsta esat atsėjongės.'''\n\nGalat ė tuoliau nauduotė {{SITENAME}} anuonimėškā aba <span class='plainlinks'>[$1 prisėjonkat]</span> ėš naujė šėtuo patiu a kėto nauduotuojė vardu.\nPastebiejims: katruos nekatruos poslapiuos ė tuoliau gal ruodītė būktā būtomiet prisėjongės lėgė tuol, kumet ėšvalīsėt sava naršīklės dietovė (''cache'').",
        "recreate-moveddeleted-warn": "'''Parspiejėms: Tamsta ikeliat faila, katros onkstiau bova ėštrėnts.'''\n\nTamsta torietomiet nusprēstė, a īr naudėnga tuoliau ikeldinietė ta faila.\nTuo faila pašalinėma istuorėjė īr pateikta dielē patuogoma:",
        "moveddeleted-notice": "Tas poslapis bova ėštrėnts.\nĖštrėnta poslapė versėju sārašos īr pateikts paveiziejėmō žemiau.",
        "edit-conflict": "Redagavėma kuonflėktos",
-       "postedit-confirmation": "Tamstas padėrbts pakeitėms ėšsauguots īr.",
+       "postedit-confirmation-saved": "Tamstas padėrbts pakeitėms ėšsauguots īr.",
        "post-expand-template-inclusion-warning": "Perspiejėms: Šabluonu īterpėma dėdoms īr par dėdelis.\nKāp katrėi šabluonā nebus ītrauktė.",
        "post-expand-template-inclusion-category": "Poslapē, kur šabluonu īterpėma dėdoms viršėjams",
        "post-expand-template-argument-warning": "Perspiejėms: Tas poslapis tor nuors vėina šabluona argomenta, katros tor per dėdli ėšplietėma dėdoma.\nTė argomentā bova praleistė.",
        "blockip": "Ožblokoutė nauduotuoja",
        "blockip-legend": "Blokoutė nauduotuoja",
        "blockiptext": "Nauduokėt šėta fuorma noriedamė oždraustė redagavėma teises nuruodīto IP adreso a nauduotuojo. Tas torietu būt atlėikama tam, kū sostabdītomiet vandalėzma, ė vagol [[{{ns:project}}:Puolitėka|puolitėka]].\nŽemiau nuruodīkėt tėkslē prižastė.",
-       "ipadressorusername": "IP adresos a nauduotuojė vards",
+       "ipaddressorusername": "IP adresos a nauduotuojė vards",
        "ipbexpiry": "Galiuojėma čiesos",
        "ipbreason": "Prīžastis:",
        "ipbreason-dropdown": "*Dažniausės bluokavėma prižastīs\n** Melagėngas infuormacėjės rašīms\n** Torėnė trīnims ėš poslapiu\n** Spaminims\n** Zaunu/bikuo rašīms i poslapios\n** Gondinėmā/Pėktžuodiavėmā\n** Pėktnaudžiavėms paskėruomis\n** Netėnkams nauduotuojė vards",
        "newimages": "Naujausiu abruozdieliu galerėjė",
        "imagelisttext": "Žemiau īr '''$1''' failu sārašos, sorūšiouts $2.",
        "newimages-label": "Faila vards (ar anuo dalis):",
-       "showhidebots": "($1 robotos)",
        "ilsubmit": "Ėiškoutė",
        "bydate": "palē data",
        "sp-newimages-showfrom": "Ruodītė naujus abruozdielius pradedant nū $2, $1",
index 6ced5ea..118f7cf 100644 (file)
        "blockip": "Blokiraj korisnika",
        "blockip-legend": "Blokiranje korisnika",
        "blockiptext": "Upotrebite donji upitnik da biste uklonili prava pisanja sa određene IP adrese ili korisničkog imena.  \nOvo bi trebalo da bude urađeno samo da bi se spriječio vandalizam, i u skladu sa [[{{MediaWiki:Policy-url}}|smjernicama]]. \nUnesite konkretan razlog ispod (na primjer, navodeći koje konkretne stranice su vandalizovane).",
-       "ipadressorusername": "IP adresa ili korisničko ime:",
+       "ipaddressorusername": "IP adresa ili korisničko ime:",
        "ipbexpiry": "Ističe:",
        "ipbreason": "Razlog:",
        "ipbreason-dropdown": "*Najčešći razlozi blokiranja\n**Unošenje netačnih informacija\n**Uklanjanje sadržaja stranica\n**Postavljanje spam vanjskih linkova\n**Ubacivanje gluposti/grafita\n**Osobni napadi (ili napadačko ponašanje)\n**Čarapare (zloupotreba više korisničkih računa)\n**Neprihvatljivo korisničko ime",
        "newimages-summary": "Ova posebna stranica prikazuje posljednje postavljene datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Ime datoteke (ili dio imena):",
-       "showhidebots": "($1 botove)",
        "noimages": "Ništa za prikazati.",
        "ilsubmit": "Traži / Тражи",
        "bydate": "po datumu",
index 57f079e..8c05695 100644 (file)
        "blockip": "පරිශීලකයා වාරණය කරන්න",
        "blockip-legend": "වාරණයකල පරිශීලක",
        "blockiptext": "විශේෂිත අන්තර්ජාල ලිපිනයකින් හෝ ප්‍රතිශීලක නාමයකින් ලිවීම් ප්‍රවේශය වාරණය කෙරුමට පහත ආකෘති පත්‍රය භාවිතා කරන්න.\nවන්ධල්‍යය වැලැක්වීමේ හුදු  අභිලාෂයෙන් හා, [[{{MediaWiki:Policy-url}}|ප්‍රතිපත්ති]] ප්‍රකාරව මෙය සිදුකල යුත්තේය.\nවිශේෂිත  හේතුවක් මෙහි පහත ඇතුලත් කරන්න (නිදසුනක් ලෙස, වන්ධල්‍ය්‍යට ලක්වුනු විශේෂිත පිටු හඳුන්වමින්).",
-       "ipadressorusername": "පරිශීලක නාමය හෝ IP ලිපිනය:",
+       "ipaddressorusername": "පරිශීලක නාමය හෝ IP ලිපිනය:",
        "ipbexpiry": "කල් ඉකුත්වීම:",
        "ipbreason": "හේතුව:",
        "ipbreason-dropdown": "*සාමාන්‍ය වාරණ හේතූන්\n** සාවද්‍ය තොරතුරු බහාලීම\n** පිටුවලින් අන්තර්ගතය ඉවත්කිරීම\n** බාහිර අඩවි වෙත අයාචිත-තැපැල් සබැඳියන්\n** විප්‍රලාප /පල්හෑලි පිටු තුලට බහාලීම\n** තැතිගන්වනසුළු  හැසිරීම/හිරිහැරකිරීම\n** බහුගණ ගිනුම් අපයෙදුම\n** නොපිළිගතහැකි පරිශීලකනාමය",
        "newimages-summary": "මෙම විශේෂ පිටුව, අවසානයට උඩුගත කෙරුණු ගොනු පෙන්වයි.",
        "newimages-legend": "පෙරහන",
        "newimages-label": "ගොනු නාමය (හෝ එයින් කොටසක්):",
-       "showhidebots": "(රොබෝ $1 දෙනෙක්)",
        "noimages": "පෙනෙන්නට කිසිවක් නොමැත.",
        "ilsubmit": "ගවේෂණය",
        "bydate": "දිනය මගිනි",
index 6151b45..e278a4f 100644 (file)
        "blockip": "Zablokovať používateľa",
        "blockip-legend": "Zablokovať používateľa",
        "blockiptext": "Použite tento formulár na zablokovanie možnosti zápisov uskutočnených z konkrétnej IP adresy alebo od používateľa.\nMali by ste to urobiť len v prípade bránenia vandalizmu a v súlade so [[{{MediaWiki:Policy-url}}|zásadami a smernicami {{GRAMMAR:genitív|{{SITENAME}}}}]].\nNižšie uveďte konkrétny dôvod (napríklad uveďte konkrétne stránky, ktoré padli za obeť vandalizmu).",
-       "ipadressorusername": "IP adresa/meno používateľa:",
+       "ipaddressorusername": "IP adresa/meno používateľa:",
        "ipbexpiry": "Ukončenie:",
        "ipbreason": "Dôvod:",
        "ipbreason-dropdown": "* Bežné dôvody blokovania\n** Zámerné vkladanie chybných informácií\n** Mazanie obsahu stránok\n** Spam odkazy na externé stránky\n** Vkladanie nezmyslov do stránok\n** Zastrašujúce správanie/obťažovanie\n** Zneužívanie viacerých účtov\n** Neprípustné používateľské meno",
        "newimages-summary": "Táto špeciálna stránka zobrazuje posledné nahrané súbory.",
        "newimages-legend": "Filter",
        "newimages-label": "Názov súboru (alebo jeho časť):",
-       "showhidebots": "($1 botov)",
        "noimages": "Niet čo zobraziť.",
        "ilsubmit": "Hľadať",
        "bydate": "podľa dátumu",
index 2ce537c..8c4d412 100644 (file)
        "recentchangescount": "Privzeto število prikazanih urejanj:",
        "prefs-help-recentchangescount": "Vključuje zadnje spremembe, zgodovine strani in dnevniške zapise.",
        "prefs-help-watchlist-token2": "To je skrivni ključ do spletnega vira vašega spiska nadzorov. Kdor ve zanj, lahko bere vaš spisek nadzorov, zato ključa ne delite. [[Special:ResetTokens|Kliknite tukaj, če ga želite ponastaviti]].",
-       "savedprefs": "Spremembe so bile uspešno shranjene.",
+       "savedprefs": "Spremembe so uspešno shranjene.",
        "timezonelegend": "Časovni pas",
        "localtime": "Krajevni čas:",
        "timezoneuseserverdefault": "Uporabi privzeti wiki čas ($1)",
        "action-createpage": "ustvarjenje strani",
        "action-createtalk": "ustvarjanje pogovornih strani",
        "action-createaccount": "registracija tega uporabniškega računa",
+       "action-history": "ogled zgodovine strani",
        "action-minoredit": "označevanje tega urejanja kot manjšega",
        "action-move": "premik te strani",
        "action-move-subpages": "premik te strani in njenih podstrani",
        "blockip": "Blokiranje IP-naslova ali uporabniškega imena",
        "blockip-legend": "Blokiraj uporabnika",
        "blockiptext": "Naslednji obrazec vam omogoča, da določenemu IP-naslovu ali uporabniškemu imenu preprečite urejanje.\nTo storimo le zaradi zaščite pred nepotrebnim uničevanjem in po [[{{MediaWiki:Policy-url}}|pravilih]].\nVnesite tudi razlog (''na primer'' seznam strani, ki jih je uporabnik po nepotrebnem kvaril).",
-       "ipadressorusername": "IP-naslov ali uporabniško ime",
+       "ipaddressorusername": "IP-naslov ali uporabniško ime",
        "ipbexpiry": "Pretek",
        "ipbreason": "Razlog:",
        "ipbreason-dropdown": "*Razlogi za blokado\n** vandalizem\n** dodajanje napačnih/lažnih podatkov\n** brisanje strani\n** dodajanje nepotrebnih zunanjih povezav\n** dodajanje neumnosti v besedilo\n** nadlegovanje/osebni napadi\n** neprimerno uporabniško ime",
        "newimages-summary": "Ta posebna stran prikazuje najnovejše naložene datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Ime datoteke (ali njen del):",
-       "showhidebots": "($1 bote)",
+       "newimages-showbots": "Prikaži nalaganja botov",
        "noimages": "Nič ni videti.",
        "ilsubmit": "Išči",
        "bydate": "po datumu",
index fd4d645..cf37864 100644 (file)
        "blockip": "IP-Atresse/Benutzer sperra",
        "blockip-legend": "IP-Atresse/Benutzer sperra",
        "blockiptext": "Mit diesem Formular sperrst du anne IP-Atresse oder an'n Nutzernoama, su doaß vu dort kenne Änderunga meh vorgenumma waan kinna.\nDies sullte ock erfolga, im Vandalismus zu verhindern und ei Iebereinstimmung miet dann [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte gib dann Grund fier de Sperre oa.",
-       "ipadressorusername": "IP-Atresse oder Benutzernoame:",
+       "ipaddressorusername": "IP-Atresse oder Benutzernoame:",
        "ipbreason": "Begriendung:",
        "ipbreason-dropdown": "* Allgemeene Sperrgrinde\n** Eenfiega foalscher Informationen\n** Laara vu Seita\n** Fiegt massenweise externe Links a\n** Einstalla unsinniger Inhalte ei Seita \n** bedrohliches Verhaala/Belästigung\n** Missbrauch durch mehrere Nutzerkonten\n** Ungeeigneter Nutzernoame",
        "ipbcreateaccount": "Erstellung vu Nutzerkonten verhindern",
index aca2189..b6d76c1 100644 (file)
        "grouppage-sysop": "{{ns:project}}:Maamulada",
        "right-read": "Akhri maqaalada",
        "right-edit": "Wax ka bedel bogyaalo",
+       "right-createpage": "Samaynta bogag (taasoo aan lahayn bogag wadahadal)",
+       "right-createtalk": "Samaynta bogagga wadahadalka",
+       "right-createaccount": "Samaynta akoon isticmaale cusub",
        "right-move": "Wareeji maqaalada",
        "right-upload": "Soo geli fayl",
+       "right-writeapi": "Adeegsiga API ee qorista",
        "right-delete": "Tirtir maqaalada",
        "right-bigdelete": "Tirtir maqaalada taariikhda dheer leh",
        "right-browsearchive": "Raadi maqaalada la tirtiray",
        "right-undelete": "Ha tirtirin bog",
+       "right-editmyusercss": "Bedel galalka CSS ee isticmaalaha laftiisa",
+       "right-editmyuserjs": "Bedel galalka JavaScript ee isticmaalaha laftiisa",
+       "right-editmywatchlist": "Bedel liiska waardiyaha. Eeg qaybo ka mid ah dhaqdhaqaaqa in aan weli lagu kordhin haddi uusan jirin xitaa xaqaan.",
+       "right-editmyprivateinfo": "Bedel macluumaadka gaarka ah (sida. ciwaanka e-mail-ka , iyo magaca saxda ah)",
+       "right-editmyoptions": "Bedelka dooqyada",
        "newuserlogpage": "Gudagalaha Isticmaale sameeyay",
        "action-read": "akhri boggaan",
        "action-edit": "wax ka bedel boggaan",
        "action-createpage": "sameey bogyaalo",
+       "action-createtalk": "Samaynta bogagga wadahadalka",
        "action-upload": "soo geli file'kaan",
        "action-delete": "tirtir boggaan",
        "action-browsearchive": "Raadi maqaalada la tirtiray",
        "listusers-submit": "I'tus",
        "listusers-noresult": "Lama helin isticmaale.",
        "listusers-blocked": "(waa la mamnuucay)",
+       "listgrouprights": "Xuquuqaha koox isticmaalada",
+       "listgrouprights-summary": "Kani waa liiska koox isticmaale yaal ah ee la aqoonsaday wikigaan, in ay leeyihiin xuquuqdaan.\nWaxaa laga yaabaa in ay halkaan ku jiraan [[{{MediaWiki:Listgrouprights-helppage}}|macluumaad dheeraad ah]] ee ku saabsan xuquuqaha kala gadisan.",
+       "listgrouprights-key": "Ciwaanka:\n* <span class=\"listgrouprights-granted\">Xuquuq la siiyey</span>\n* <span class=\"listgrouprights-revoked\">Xuquuq laga qaaday</span>",
+       "listgrouprights-group": "Kooxda",
+       "listgrouprights-rights": "Xuquuqaha",
        "listgrouprights-members": "(Inta ka mid ah liiskooda)",
        "mailnologin": "Ma'jiro cinwaan wax lagu diro",
        "mailnologintext": "Waa in aad [[Special:UserLogin|gudaha ku jirtaa]]\nkuna haysatid E-boosto sax ah [[Special:Preferences|dooqyadaada]],\nsi aad ugu dirto E-boosto isticmaalayaasha kale.",
        "metadata-help": "Faylkaan wuxuu leeyahay  faah faahin dheeraad ah,waxaa laga yaabaa in lagu  isticmaalay digital kaamiro ama skanner oo lagu sameeyo sawir ama lagu digitilays gareeyay.\nHadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in ee  faah faahinta faylkaan eesan dhameestirneen.",
        "metadata-fields": "Sawirka qeybihiisa metadata oo ku tixan fariintaan waxaa lagu dari doonaa bogga sawirka meesha laga arko markii miiska metadata la qariyo.Kuwa kale waxaa loo qarinaa sida default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-iimcategory": "Qeybta",
+       "exif-dc-rights": "Xuquuqaha",
        "watchlistall2": "dhamaan",
        "namespacesall": "dhamaan",
        "monthsall": "Dhamaan",
        "fileduplicatesearch-legend": "Raadi mid tusaale ah",
        "fileduplicatesearch-submit": "Raadi",
        "specialpages": "bogagga khaaska ah",
+       "specialpages-note-top": "Furaha",
        "specialpages-group-pages": "liiska maqaalada",
        "blankpage": "Bog masaxan",
        "tag-filter": "[[Special:Tags|Filtaraha]] tag:",
index ca2cefa..ae8507d 100644 (file)
        "blockip": "Blloko përdorues",
        "blockip-legend": "Blloko përdoruesin",
        "blockiptext": "Përdorni formularin e mëposhtëm për të hequr lejen e shkrimit për një përdorues ose IP specifike.\nKjo duhet bërë vetëm në raste vandalizmi, dhe në përputhje me [[{{MediaWiki:Policy-url}}|rregullat e {{SITENAME}}-s]].\nPlotësoni arsyen specifike më poshtë (p.sh., tregoni faqet specifike që u vandalizuan).",
-       "ipadressorusername": "Adresë IP ose emër përdoruesi",
+       "ipaddressorusername": "Adresë IP ose emër përdoruesi",
        "ipbexpiry": "Afati",
        "ipbreason": "Arsyeja:",
        "ipbreason-dropdown": "*Arsyet më të shpeshta të bllokimit\n** Postimi i informacioneve të rreme\n** Largimi i përmbajtjes së faqes\n** Futja e lidhjeve \"spam\"\n** Futja e informatave pa kuptim në faqe\n** Sjellje arrogante/perverze\n** Përdorimi i më shumë llogarive të përdoruesve\n** Nofkë të papranueshme",
        "newimages-summary": "Kjo faqe speciale tregon skedat e ngarkuara së fundmi.",
        "newimages-legend": "Filtrues",
        "newimages-label": "Emri i skedës (ose një pjesë e tij):",
-       "showhidebots": "($1 robotët)",
        "noimages": "S'ka gjë për të parë.",
        "ilsubmit": "Kërko",
        "bydate": "datës",
index d4c62a2..bca9286 100644 (file)
        "retypenew": "Потврда лозинке:",
        "resetpass_submit": "Постави лозинку и пријави ме",
        "changepassword-success": "Ваша лозинка је успешно промењена!",
+       "changepassword-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "resetpass_forbidden": "Лозинка не може бити промењена",
        "resetpass-no-info": "Морате бити пријављени да бисте приступили овој страници.",
        "resetpass-submit-loggedin": "Промени лозинку",
        "changeemail-password": "Ваша лозинка:",
        "changeemail-submit": "Промени",
        "changeemail-cancel": "Откажи",
+       "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
+       "resettokens": "Ресетује токене",
+       "resettokens-no-tokens": "Нема токена за ресетовање.",
+       "resettokens-legend": "Ресетује токене",
        "resettokens-tokens": "Токени:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
+       "resettokens-watchlist-token": "Токен за веб довод (Atom/RSS) вашег [[Special:Watchlist|списка надгледања]]",
+       "resettokens-done": "Токени су ресетовани",
+       "resettokens-resetbutton": "Ресетуј изабране токене",
        "bold_sample": "Подебљан текст",
        "bold_tip": "Подебљан текст",
        "italic_sample": "Искошени текст",
        "edit-gone-missing": "Не могу да ажурирам страницу.\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": "Ако напустите ову страницу, изгубићете све измене које сте направили.\nАко сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
+       "editpage-notsupportedcontentformat-title": "Формат садржаја није подржан",
        "content-model-wikitext": "викитекст",
        "content-model-text": "чист текст",
        "content-model-javascript": "јаваскрипт",
        "undo-success": "Измена се може вратити.\nПроверите разлике испод, па сачувајте измене.",
        "undo-failure": "Ова измена се не може поништити због конфликта измена.",
        "undo-norev": "Не могу да вратим измену јер не постоји или је обрисана.",
+       "undo-nochange": "Изгледа да је измена већ поништена.",
        "undo-summary": "Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])",
        "undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
        "cantcreateaccounttitle": "Не могу да отворим налог",
        "revertmerge": "растави",
        "mergelogpagetext": "Испод је списак најскоријих спајања историја двеју страница.",
        "history-title": "Историја измена странице „$1“",
-       "difference-title": "Разлика између измена на страници „$1“",
+       "difference-title": "$1 — разлика између измена",
        "difference-title-multipage": "Разлика између страница „$1“ и „$2“",
        "difference-multipage": "(разлике између страница)",
        "lineno": "Ред $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-project": "Странице помоћи и пројеката",
        "searchprofile-images": "Датотеке",
        "recentchangesdays-max": "(највише $1 {{PLURAL:$1|дан|дана|дана}})",
        "recentchangescount": "Број измена за приказ:",
        "prefs-help-recentchangescount": "Подразумева скорашње измене, историје страница и дневнике.",
-       "prefs-help-watchlist-token2": "Ово је тајни кључ за RSS довод вашег списка надгледања.\nСвако ко зна овај кључ биће у могућности да види ваша надгледања стога немојте га одавати никоме.\nАко је потребно можете га [[Special:ResetTokens|ресетовати]].",
+       "prefs-help-watchlist-token2": "Ово је тајни кључ за веб довод вашег списка надгледања.\nСвако ко зна овај кључ биће у могућности да види ваша надгледања стога немојте га одавати никоме.\nАко је потребно можете га [[Special:ResetTokens|ресетовати]].",
        "savedprefs": "Ваша подешавања су сачувана.",
        "timezonelegend": "Временска зона:",
        "localtime": "Локално време:",
        "userrights-changeable-col": "Групе које можете да промените",
        "userrights-unchangeable-col": "Групе које не можете да промените",
        "userrights-irreversible-marker": "$1*",
+       "userrights-removed-self": "Успешно сте себи скинули права. Због тога није вам дозвољен приступ овој страници.",
        "group": "Група:",
        "group-user": "Корисници",
        "group-autoconfirmed": "Аутоматски потврђени корисници",
        "right-edituserjs": "уређивање туђих JavaScript датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
+       "right-viewmywatchlist": "Види списак надгледања",
        "right-viewmyprivateinfo": "видите своје личне податке (нпр. адресу е-поште, право име)",
        "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. адресу е-поште, право име)",
        "right-editmyoptions": "уредите своја подешавања",
        "action-createpage": "прављење страница",
        "action-createtalk": "прављење страница за разговор",
        "action-createaccount": "отварање овог корисничког налога",
+       "action-history": "гледање историје ове странице",
        "action-minoredit": "означавање ове измене као мање",
        "action-move": "премести ову страницу",
        "action-move-subpages": "премештање ове странице и њених подстраница",
        "action-siteadmin": "закључавање или откључавање базе података",
        "action-sendemail": "слање е-порука",
        "action-editmywatchlist": "измени свој списак надгледања",
+       "action-viewmywatchlist": "види списак надгледања",
+       "action-viewmyprivateinfo": "прегледање ваших личних података",
+       "action-editmyprivateinfo": "уређивање ваших личних података",
        "nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|измена од ваше последње посете}}",
        "enhancedrc-history": "историја",
        "listredirects": "Списак преусмерења",
        "listduplicatedfiles": "Списак дупликата датотека",
        "listduplicatedfiles-summary": "Ово је списак датотека које су дупликат неких других датотека. Само локалне датотеке су приказане.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|један дупликат|$2 дупликата}}]].",
        "unusedtemplates": "Некоришћени шаблони",
        "unusedtemplatestext": "Ова страница наводи све странице у именском простору {{ns:template}} које нису укључене ни на једној другој страници.\nПре брисања проверите да ли друге странице воде до тих шаблона.",
        "unusedtemplateswlh": "остале везе",
        "randompage": "Случајна страница",
        "randompage-nopages": "Нема страница у {{PLURAL:$2|следећем именском простору|следећим именским просторима}}: $1.",
        "randomincategory": "Случајна страница у категорији",
+       "randomincategory-invalidcategory": "„$1“ није ваљано име категорије",
+       "randomincategory-nopages": "Нема страница у категорији [[:Category:$1|$1]].",
        "randomincategory-selectcategory-submit": "Иди",
        "randomredirect": "Случајно преусмерење",
        "randomredirect-nopages": "Нема преусмерења у именском простору „$1”.",
        "pageswithprop-submit": "Иди",
        "doubleredirects": "Двострука преусмерења",
        "doubleredirectstext": "Ова страница приказује странице које преусмеравају на друга преусмерења.\nСваки ред садржи везе према првом и другом преусмерењу, као и одредишну страницу другог преусмерења која је обично „прави“ чланак на кога прво преусмерење треба да упућује.\n<del>Прецртани</del> уноси су већ решени.",
-       "double-redirect-fixed-move": "[[$1]] Ñ\98е Ð¿Ñ\80емеÑ\88Ñ\82ен.\nСада Ñ\98е Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aе на [[$2]].",
-       "double-redirect-fixed-maintenance": "Ð\98Ñ\81пÑ\80авÑ\99аÑ\9aе Ð´Ð²Ð¾Ñ\81Ñ\82Ñ\80Ñ\83киÑ\85 Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа Ð¸Ð· [[$1]] Ñ\83 [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] Ñ\98е Ð¿Ñ\80емеÑ\88Ñ\82ен.\nÐ\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ñ\98е Ð°Ð¶Ñ\83Ñ\80иÑ\80ано Ð¸ Ñ\81ада Ð¿Ñ\80еÑ\83Ñ\81меÑ\80ава на [[$2]].",
+       "double-redirect-fixed-maintenance": "Ð\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¸Ñ\81пÑ\80авÑ\99а Ð´Ð²Ð¾Ñ\81Ñ\82Ñ\80Ñ\83ка Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа Ð¸Ð· [[$1]] Ñ\83 [[$2]]. Ð\9aао Ð´ÐµÐ¾ Ð¾Ð´Ñ\80жаваÑ\9aа.",
        "double-redirect-fixer": "Исправљач преусмерења",
        "brokenredirects": "Покварена преусмерења",
        "brokenredirectstext": "Следећа преусмерења упућују на непостојеће странице:",
        "listusers-blocked": "({{GENDER:$1|блокиран|блокирана|блокиран}})",
        "activeusers": "Списак активних корисника",
        "activeusers-intro": "Ово је списак корисника који су били активни {{PLURAL:$1|претходни дан|у последња $1 дана|у последњих $1 дана}}.",
-       "activeusers-count": "$1 {{PLURAL:$1|измена|измене|измена}} {{PLURAL:$3|претходни дан|у последња $3 дана|у последњих $3 дана}}",
+       "activeusers-count": "$1 {{PLURAL:$1|радња|радње|радњи}} {{PLURAL:$3|претходни дан|у последња $3 дана|у последњих $3 дана}}",
        "activeusers-from": "Прикажи кориснике почев од:",
        "activeusers-hidebots": "Сакриј ботове",
        "activeusers-hidesysops": "Сакриј администраторе",
        "watchlistanontext": "Морате бити $1 да бисте гледали и уређивали ставке на вашем списку надгледања.",
        "watchnologin": "Нисте пријављени",
        "addwatch": "Додај на списак надгледања",
-       "addedwatchtext": "Страница „[[:$1]]“ је додата на ваш [[Special:Watchlist|списак надгледања]].\nБудуће измене ове странице и њене странице за разговор биће наведене овде.",
+       "addedwatchtext": "Страница „[[:$1]]“ је додата на ваш [[Special:Watchlist|списак надгледања]].\nБудуће измене ове странице и њене странице за разговор биће наведене тамо.",
        "removewatch": "Уклони са списка надгледања",
        "removedwatchtext": "Страница „[[:$1]]“ је уклоњена с вашег [[Special:Watchlist|списка надгледања]].",
        "watch": "Надгледај",
        "contributions-title": "Доприноси {{GENDER:$1|корисника|кориснице}} $1",
        "mycontris": "Доприноси",
        "contribsub2": "За {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Кориснички налог „$1“ није регистрован.",
        "nocontribs": "Нема измена које одговарају наведеним критеријумима.",
        "uctop": "(последња)",
        "month": "од месеца (и раније):",
        "blockip": "Блокирај корисника",
        "blockip-legend": "Блокирај корисника",
        "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене ИП адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване).",
-       "ipadressorusername": "ИП адреса или корисничко име:",
+       "ipaddressorusername": "ИП адреса или корисничко име:",
        "ipbexpiry": "Истиче:",
        "ipbreason": "Разлог:",
        "ipbreason-dropdown": "*Најчешћи разлози за блокирање\n** Уношење лажних информација\n** Уклањање садржаја са страница\n** Постављање веза до спољашњих сајтова\n** Уношење бесмислица у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
        "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|Друга блокада|Друге блокаде}}",
        "importuploaderrortemp": "Не могу да пошаљем датотеку за увоз.\nНедостаје привремена фасцикла.",
        "import-parse-failure": "Погрешно рашчлањивање XML-а.",
        "import-noarticle": "Нема странице за увоз!",
-       "import-nonewrevisions": "Све Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\81Ñ\83 Ð¿Ñ\80еÑ\82Ñ\85одно Ñ\83везене.",
+       "import-nonewrevisions": "Ð\98змене Ð½Ð¸Ñ\81Ñ\83 Ñ\83везене (Ñ\81ве Ñ\81Ñ\83 Ð²ÐµÑ\9b Ð±Ð¸Ð»Ðµ Ð¸Ð»Ð¸ Ð¿Ñ\80иÑ\81Ñ\83Ñ\82не Ð¸Ð»Ð¸ Ð¿Ñ\80еÑ\81коÑ\87ене Ð·Ð±Ð¾Ð³ Ð³Ñ\80еÑ\88ки).",
        "xml-error-string": "$1 у реду $2, колона $3 (бајт $4): $5",
        "import-upload": "Отпремање XML података",
        "import-token-mismatch": "Губитак података о сесији.\nПокушајте поново.",
        "spam_reverting": "Враћам на последњу измену која не садржи везе до $1",
        "spam_blanking": "Све измене садрже везе до $1. Чистим",
        "spam_deleting": "Све измене садрже везе до $1. Бришем",
-       "simpleantispam-label": "Ð\9fÑ\80овеÑ\80а Ñ\81пама. '''Ð\9dÐ\95''' попуњавај ово унутра!",
+       "simpleantispam-label": "Ð\90нÑ\82и-Ñ\81пам Ð¿Ñ\80овеÑ\80а. \n<strong>Ð\9dÐ\95</strong> попуњавај ово унутра!",
        "pageinfo-title": "Подаци о „$1“",
        "pageinfo-not-current": "Нажалост, немогуће је прибавити ове податке за старије измене.",
        "pageinfo-header-basic": "Основни подаци",
        "newimages-summary": "Ова посебна страница приказује последње послате датотеке.",
        "newimages-legend": "Филтер",
        "newimages-label": "Назив датотеке (или њен део):",
-       "showhidebots": "($1 ботове)",
        "noimages": "Нема ништа.",
        "ilsubmit": "Претражи",
        "bydate": "по датуму",
        "htmlform-float-invalid": "Наведена вредност није број.",
        "htmlform-int-toolow": "Наведена вредност је испод минимума од $1",
        "htmlform-int-toohigh": "Наведена вредност је изнад максимума од $1",
-       "htmlform-required": "Ова вредност је обавезна",
+       "htmlform-required": "Ова вредност је обавезна.",
        "htmlform-submit": "Пошаљи",
        "htmlform-reset": "Врати измене",
        "htmlform-selectorother-other": "Друго",
        "htmlform-no": "Не",
        "htmlform-yes": "Да",
        "htmlform-chosen-placeholder": "Изаберите опцију",
+       "htmlform-cloner-create": "Додај још",
+       "htmlform-cloner-delete": "Уклони",
+       "htmlform-cloner-required": "Бар једна вредност је потребна.",
        "sqlite-has-fts": "$1 с подршком претраге целог текста",
        "sqlite-no-fts": "$1 без подршке претраге целог текста",
        "logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} страницу $3",
index c42f2de..98fd6e9 100644 (file)
        "revertmerge": "rastavi",
        "mergelogpagetext": "Ispod je spisak najskorijih spajanja istorija dveju stranica.",
        "history-title": "Istorija izmena stranice „$1“",
-       "difference-title": "Razlika između izmena na stranici „$1“",
+       "difference-title": "$1 — razlika između izmena",
        "difference-title-multipage": "Razlika između stranica „$1“ i „$2“",
        "difference-multipage": "(razlike između stranica)",
        "lineno": "Red $1:",
        "watchlistanontext": "Morate biti $1 da biste gledali i uređivali stavke na vašem spisku nadgledanja.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisak nadgledanja",
-       "addedwatchtext": "Stranica „[[:$1]]“ je dodata na vaš [[Special:Watchlist|spisak nadgledanja]].\nBuduće izmene ove stranice i njene stranice za razgovor biće navedene ovde.",
+       "addedwatchtext": "Stranica „[[:$1]]“ je dodata na vaš [[Special:Watchlist|spisak nadgledanja]].\nBuduće izmene ove stranice i njene stranice za razgovor biće navedene tamo.",
        "removewatch": "Ukloni sa spiska nadgledanja",
        "removedwatchtext": "Stranica „[[:$1]]“ je uklonjena s vašeg [[Special:Watchlist|spiska nadgledanja]].",
        "watch": "Nadgledaj",
        "blockip": "Blokiraj korisnika",
        "blockip-legend": "Blokiraj korisnika",
        "blockiptext": "Koristite donji obrazac da biste zabranili pristup za pisanje s određene IP adrese ili korisničkog imena.\nOvo bi trebalo da vršite samo radi sprečavanja vandalizma, u skladu sa [[{{MediaWiki:Policy-url}}|smernicama]].\nIzaberite konkretan razlog ispod (primer: navođenje konkretnih stranica koje su vandalizovane).",
-       "ipadressorusername": "IP adresa ili korisničko ime:",
+       "ipaddressorusername": "IP adresa ili korisničko ime:",
        "ipbexpiry": "Ističe:",
        "ipbreason": "Razlog:",
        "ipbreason-dropdown": "*Najčešći razlozi za blokiranje\n** Unošenje lažnih informacija\n** Uklanjanje sadržaja sa stranica\n** Postavljanje veza do spoljašnjih sajtova\n** Unošenje besmislica u stranice\n** Nepristojno ponašanje\n** Upotreba više naloga\n** Neprihvatljivo korisničko ime",
        "newimages-summary": "Ova posebna stranica prikazuje poslednje poslate datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Naziv datoteke (ili njen deo):",
-       "showhidebots": "($1 botove)",
        "noimages": "Nema ništa.",
        "ilsubmit": "Pretraži",
        "bydate": "po datumu",
        "htmlform-float-invalid": "Navedena vrednost nije broj.",
        "htmlform-int-toolow": "Navedena vrednost je ispod minimuma od $1",
        "htmlform-int-toohigh": "Navedena vrednost je iznad maksimuma od $1",
-       "htmlform-required": "Ova vrednost je obavezna",
+       "htmlform-required": "Ova vrednost je obavezna.",
        "htmlform-submit": "Pošalji",
        "htmlform-reset": "Vrati izmene",
        "htmlform-selectorother-other": "Drugo",
        "htmlform-no": "Ne",
        "htmlform-yes": "Da",
        "htmlform-chosen-placeholder": "Izaberite opciju",
+       "htmlform-cloner-create": "Dodaj još",
+       "htmlform-cloner-delete": "Ukloni",
+       "htmlform-cloner-required": "Bar jedna vrednost je potrebna.",
        "sqlite-has-fts": "$1 s podrškom pretrage celog teksta",
        "sqlite-no-fts": "$1 bez podrške pretrage celog teksta",
        "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
index 6469a7a..cedcb88 100644 (file)
        "blockip": "Blokkierje Benutser",
        "blockip-legend": "IP-Adresse/Benutser speere",
        "blockiptext": "Mäd dit Formular speerst du ne IP-Adresse of n Benutsernoome, so dät fon deer neen Annerengen moor foarnuumen wäide konnen.\nDit skuul bloot geböäre, uum Vandalismus tou ferhinnerjen un in Uureenstimmenge mäd do [[{{MediaWiki:Policy-url}}|Gjuchtlienjen]].\nReek dän Gruund foar ju Speere oun.",
-       "ipadressorusername": "IP-Adresse of Benutsernoome:",
+       "ipaddressorusername": "IP-Adresse of Benutsernoome:",
        "ipbexpiry": "Oulooptied (Speerduur):",
        "ipbreason": "Begruundenge:",
        "ipbreason-dropdown": "* Algemeene Speergruunde\n** Ienföigjen fon falske Information\n** Loosmoakjen fon Sieden\n** Föiget massenhaft externe Links ien\n** Ienstaalen fon uunsinnige Seeken in Sieden\n** betruujend Ferhoolden/Belästigenge\n** Misbruuk truch moorere Benutserkonten\n** Uungoadelge Benutsernoome",
        "newimages-summary": "Disse Spezioalsiede wiest do toulääst hoochleedene Doatäie an.",
        "newimages-legend": "Filter",
        "newimages-label": "Doatäinoome (of n Paat deerfon):",
-       "showhidebots": "(Bots $1)",
        "noimages": "neen Bielden fuunen.",
        "ilsubmit": "Säik",
        "bydate": "ätter Doatum",
index 4427207..be38bf4 100644 (file)
        "blockip": "Peungpeuk pamaké",
        "blockip-legend": "Peungpeuk pamaké",
        "blockiptext": "Paké formulir di handap pikeun meungpeuk aksés nulis ti alamat IP atawa ngaran pamaké husus. Ieu sakuduna ditujukeun pikeun nyegah vandalisme, sarta saluyu jeung [[{{MediaWiki:Policy-url}}|kawijakan]]. Eusi alesan nu jéntré (misal, ngarujuk kaca tinangtu nu geus diruksak).",
-       "ipadressorusername": "Alamat IP atawa ngaran pamaké",
+       "ipaddressorusername": "Alamat IP atawa ngaran pamaké",
        "ipbexpiry": "Kadaluarsa",
        "ipbreason": "Alesan:",
        "ipbcreateaccount": "Tong bisa nyieun rekening",
        "imagelisttext": "Di handap ieu daptar '''$1''' {{PLURAL:$1|gambar|gambar}} nu disusun $2.",
        "newimages-summary": "Ieu kaca husus ngabéréndélkeun koropak nu alanyar dimuat.",
        "newimages-label": "Ngaran berkas (atawa sawaréh tina ngaranna):",
-       "showhidebots": "($1 bot)",
        "noimages": "Taya nanaon.",
        "ilsubmit": "Sungsi",
        "bydate": "dumasar titimangsa",
index 2d4b0c2..5360a0f 100644 (file)
        "previewnote": "'''Kom ihåg att detta bara är en förhandsvisning.'''\nDina ändringar har ännu inte sparats!",
        "continue-editing": "Fortsätt redigera",
        "previewconflict": "Den här förhandsvisningen är resultatet av den\nredigerbara texten ovanför,\nså som det kommer att se ut om du väljer att spara.",
-       "session_fail_preview": "'''Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.\nVar god försök igen.\nOm det fortfarande inte fungerar, pröva att [[Special:UserLogout|logga ut]] och logga in igen.'''",
+       "session_fail_preview": "'''Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.\nVar god försök igen.\nOm det fortfarande inte fungerar, prova att [[Special:UserLogout|logga ut]] och logga in igen.'''",
        "session_fail_preview_html": "'''Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.'''\n\n''Eftersom {{SITENAME}} har aktiverat rå HTML, så döljs förhandsvisningen som en förebyggande säkerhetsåtgärd mot JavaScript-attacker.''\n\n'''Om detta är ett försök att göra en rättmätig redigering, så försök igen.\nOm det fortfarande inte fungerar, pröva att [[Special:UserLogout|logga ut]] och logga in igen.'''",
        "token_suffix_mismatch": "'''Din redigering har stoppats eftersom din klient har ändrat tecknen\ni redigeringens \"edit token\". Redigeringen stoppades för att förhindra att sidtexten skadas.\nDetta händer ibland om du använder buggiga webbaserade anonyma proxytjänster.'''",
        "edit_form_incomplete": "'''Vissa delar av redigeringen kunde inte nå servern, dubbelkolla att dina ändringar är intakta och försök igen.'''",
        "action-createpage": "skapa sidor",
        "action-createtalk": "skapa diskussionssidor",
        "action-createaccount": "skapa detta användarkonto",
+       "action-history": "visa historiken för denna sida",
        "action-minoredit": "markera denna redigering som mindre",
        "action-move": "flytta denna sida",
        "action-move-subpages": "flytta denna sida, och dess undersidor",
        "blockip": "Blockera användare",
        "blockip-legend": "Blockera användare",
        "blockiptext": "Använd formuläret nedan för att blockera möjligheten att redigera sidor från en specifik IP-adress eller ett användarnamn.\nDetta bör endast göras för att förhindra vandalisering, och i överensstämmelse med gällande [[{{MediaWiki:Policy-url}}|policy]].\nAnge orsak nedan (exempelvis genom att nämna sidor som blivit vandaliserade).",
-       "ipadressorusername": "IP-adress eller användarnamn:",
+       "ipaddressorusername": "IP-adress eller användarnamn:",
        "ipbexpiry": "Varaktighet:",
        "ipbreason": "Anledning:",
        "ipbreason-dropdown": "*Vanliga motiv till blockering\n** Infogar falsk information\n** Tar bort sidinnehåll\n** Länkspam till externa sajter\n** Lägger till nonsens på sidor\n** Hotfullt beteende/trakasserier\n** Missbruk av flera användarkonton\n** Oacceptabelt användarnamn",
        "newimages-summary": "Den här specialsidan visar de senast uppladdade filerna.",
        "newimages-legend": "Filter",
        "newimages-label": "Filnamn (eller en del av det):",
-       "showhidebots": "($1 robotar)",
        "noimages": "Ingenting att se.",
        "ilsubmit": "Sök",
        "bydate": "efter datum",
index f98241d..bfcea2b 100644 (file)
@@ -17,7 +17,7 @@
                ]
        },
        "tog-underline": "Wekea mstari viungo:",
-       "tog-hideminor": "Ficha mabadilisho madogo ya hivi karibuni",
+       "tog-hideminor": "Ficha maharirio madogo katika mabadiliko ya hivi karibuni",
        "tog-hidepatrolled": "Ficha kurasa zilizofanyiwa doria kwenye mabadiliko ya karibuni",
        "tog-newpageshidepatrolled": "Ficha kurasa zilizofanyiwa doria kwenye orodha ya kurasa mpya",
        "tog-extendwatchlist": "Tanua orodha ya maangalizi ili kuonyesha mabadiliko yote yaliyofanyika, si hilo la mwisho tu.",
        "blockip": "Zuia mtumiaji",
        "blockip-legend": "Kumzuia mtumiaji",
        "blockiptext": "Tumia fomu iliyopo chini kumzuia mtu asihariri kwa kupitia anwani fulani wa IP au kwa kutumia jina fulani la mtumiaji.\nNia ya kumzuia mtu inatakiwa kuwa kuzuia uharibifu tu, na ifanikiwe kutokana na masharti ya [[{{MediaWiki:Policy-url}}|sera]].\nAndika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizoharibiwa).",
-       "ipadressorusername": "Anwani ya IP au jina la mtumiaji:",
+       "ipaddressorusername": "Anwani ya IP au jina la mtumiaji:",
        "ipbexpiry": "Itakwisha:",
        "ipbreason": "Sababu:",
        "ipbreason-dropdown": "*Sababu za kawaida za kuzuia\n** Kuingiza habari za uongo\n** Kuondosha yaliyomo katika kurasa\n** Viungo vya nje visivyotakiwa\n** Kuingiza upuuzi/ujinga sioeleweka kwenye makala\n** Adabu mbaya/kero\n** Kusumbua akaunti nyinginyingi\n** Jina la mutumiaji lisilokubalika",
        "newimages-summary": "Ukurasa maalum huu unaonyesha mafaili yaliyopakiwa hivi karibuni.",
        "newimages-legend": "Chuja",
        "newimages-label": "Jina la faili (au sehemu yake):",
-       "showhidebots": "(roboti $1)",
        "noimages": "Hakuna picha.",
        "ilsubmit": "Tafuta",
        "bydate": "kwa tarehe",
index cc34559..64158b3 100644 (file)
        "blockip": "Zawrzij sprowjorza",
        "blockip-legend": "Zawrzij sprowjorza",
        "blockiptext": "Tyn formularz służy do zawjerańo sprowjyń spod uokreślůnygo adresu IP abo kůnkretnymu użytkowńikowi.\nZawjerać noleży jydyńy po to, by zapobjec wandalizmům, zgodńy ze [[{{MediaWiki:Policy-url}}|przijyntymi reglůma]].\nPodej powůd (np. umjeszczajůnc mjana zajtůw, na kerych dopuszczůno śe wandalizmu).",
-       "ipadressorusername": "Adres IP abo mjano użytkowńika",
+       "ipaddressorusername": "Adres IP abo mjano użytkowńika",
        "ipbexpiry": "Wygaso:",
        "ipbreason": "Čymu:",
        "ipbreason-dropdown": "*Nojczynstsze powody zawjerańo uod sprawjyń\n** Ataki na inkszych użytkowńikůw\n** Naruszyńy praw autorskych\n** Ńydozwolůne mjano użytkowńika\n** Open proxy/Tor\n** Spamowańy\n** Ůsuwańy treśći zajtůw\n** Wprowadzańy fołszywych informacyji\n** Wulgaryzmy\n** Wypisywańy gůpot na zajtach",
        "newimages-summary": "Na tyj ekstra zajće prezyntowane sům uostatńo wćepńynte pliki.",
        "newimages-legend": "Filtruj",
        "newimages-label": "Mjano plika (abo jygo tajla):",
-       "showhidebots": "($1 boty)",
        "noimages": "Brak plikůw do pokozańo.",
        "ilsubmit": "Šnupej",
        "bydate": "wedle daty",
index 036c834..7117def 100644 (file)
        "blockip": "பயனரைத் தடு",
        "blockip-legend": "பயனரைத் தடு",
        "blockiptext": "ஒரு குறிப்பிட்ட ஐபி முகவரி அல்லது பயனரிடமிருந்து எழுத்து அணுக்கத்தைத் தடுப்பதற்குக் கீழேயுள்ள படிவத்தை உபயோகிக்கவும். இது விசமத்தனத்தைத் தடுப்பதற்கும் [[{{MediaWiki:Policy-url}}|{{SITENAME}} கொள்கை]]க்கு எற்புடைய வகையிலும் மட்டுமே பயன்படுத்தப்பட வேண்டும்.\nகுறிப்பிட்ட காரணமொன்றைக் கீழே நிரப்புக (எடுத்துக்காட்டாக, விசமத்தனம் செய்யப்பட்ட பக்கங்களை எடுத்துக் காட்டவும்).",
-       "ipadressorusername": "ஐ.பி. அல்லது பயனர் பெயர்:",
+       "ipaddressorusername": "ஐ.பி. அல்லது பயனர் பெயர்:",
        "ipbexpiry": "காலாவதி:",
        "ipbreason": "காரணம்:",
        "ipbreason-dropdown": "*பொதுவான தடைக் காரணங்கள்\n** பொய்யான தகவல்களை இடல்\n** பக்கங்களிலிருந்து உள்ளடக்கங்களை நீக்கல்\n** எரித இணைப்புகளை வெளியிணைப்பாக கொடுத்தல்\n** பக்கங்களுக்கு அர்த்தமற்ற உள்ளடக்கங்களை இணைத்தல்\n** பொறுப்பற்ற நடிவடிக்கைகள்\n** ஒரு பயனர் பல கணக்குகளைப் பேணல்\n** ஏற்றுக்கொள்ளப்படமுடியாத பயனர் பெயர்",
        "newimages-summary": "இச்சிறப்புப் பக்கம் கடைசியாக பதிவேற்றப்பட்ட பக்கங்களைப் பட்டியலிடுகிறது.",
        "newimages-legend": "வடிகட்டி",
        "newimages-label": "கோப்பின் பெயர் (அல்லது அதன் பகுதி):",
-       "showhidebots": "(தானியங்கிகளை $1)",
        "noimages": "பார்வைக்கு ஓன்றுமில்லை.",
        "ilsubmit": "தேடுக",
        "bydate": "நாள் வழி",
index c902c3d..3bce197 100644 (file)
        "action-createpage": "పేజీలను సృష్టించే",
        "action-createtalk": "చర్చాపేజీలను సృష్టించే",
        "action-createaccount": "ఈ వాడుకరి ఖాతాని సృష్టించే",
+       "action-history": "ఈ పేజీ యొక్క చరిత్రని చూడండి",
        "action-minoredit": "ఈ మార్పుని చిన్నదిగా గుర్తించే",
        "action-move": "ఈ పేజీని తరలించే",
        "action-move-subpages": "ఈ పేజీని, దీని ఉపపేజీలనూ తరలించే",
        "contributions-title": "$1 యొక్క మార్పులు-చేర్పులు",
        "mycontris": "మార్పుచేర్పులు",
        "contribsub2": "{{GENDER:$3|$1}} ($2) కొరకు",
+       "contributions-userdoesnotexist": "వాడుకరి ఖాతా \"$1\" నమోదుకాలేదు.",
        "nocontribs": "ఈ విధమైన మార్పులేమీ దొరకలేదు.",
        "uctop": "(ప్రస్తుత)",
        "month": "ఈ నెల నుండి (అంతకు ముందువి):",
        "blockip": "వాడుకరి నిరోధం",
        "blockip-legend": "వాడుకరి నిరోధం",
        "blockiptext": "ఏదైనా ప్రత్యేక ఐపీ చిరునామానో లేదా వాడుకరిపేరునో రచనలు చెయ్యకుండా నిరోధించాలంటే కింది ఫారాన్ని వాడండి.\nకేవలం దుశ్చర్యల నివారణ కోసం మాత్రమే దీన్ని వాడాలి, అదికూడా [[{{MediaWiki:Policy-url}}|విధానాన్ని]] అనుసరించి మాత్రమే.\nస్పష్టమైన కారణాన్ని కింద రాయండి (ఉదాహరణకు, దుశ్చర్యలకు పాల్పడిన పేజీలను ఉదహరించండి).",
-       "ipadressorusername": "ఐపీ చిరునామా లేదా వాడుకరిపేరు:",
+       "ipaddressorusername": "ఐపీ చిరునామా లేదా వాడుకరిపేరు:",
        "ipbexpiry": "అంతమయ్యే గడువు",
        "ipbreason": "కారణం:",
        "ipbreason-dropdown": "*సాధారణ నిరోధ కారణాలు\n** తప్పు సమాచారాన్ని చొప్పించడం\n** పేజీల్లోని సమాచారాన్ని తీసెయ్యడం\n** బయటి సైట్లకు లంకెలతో స్పాము చెయ్యడం\n** పేజీల్లోకి చెత్తను ఎక్కించడం\n** బెదిరింపు ప్రవర్తన/వేధింపులు\n** అనేక ఖాతాలను సృష్టించి దుశ్చర్యకు పాల్పడడం\n** అనుచితమైన వాడుకరి పేరు\n** అదుపు తప్పిన బాటు",
        "newimages-summary": "ఇటీవలే ఎగుమతైన ఫైళ్ళను ఈ ప్రత్యేక పేజీ చూపిస్తుంది.",
        "newimages-legend": "పడపోత",
        "newimages-label": "ఫైలుపేరు (లేదా దానిలోని భాగం):",
-       "showhidebots": "($1 బాట్లు)",
        "noimages": "చూసేందుకు ఏమీ లేదు.",
        "ilsubmit": "వెతుకు",
        "bydate": "తేదీ వారీగ",
        "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 పేజీని {{GENDER:$2|తొలగించారు}}",
index b18f41a..1d84b32 100644 (file)
        "blockip": "Бастани корбар",
        "blockip-legend": "Бастани корбар",
        "blockiptext": "Барои бастани дастрасии вироиши нишонаи IP ё номи корбарӣ мушаххас аз форми зерин истифода кунед.\nИн кор фақат бояд барои ҷилавгирӣ аз харобкори ва мувофиқи бо [[{{MediaWiki:Policy-url}}|сиёсати қатъи дастрасӣ]] анҷом шавад.\nДалели мушаххас барои ин корро дар зер зикр кунед (барои мисол, зикри саҳифаҳое, ки харобкорӣ шудаанд).",
-       "ipadressorusername": "IP нишона ё номи корбар:",
+       "ipaddressorusername": "IP нишона ё номи корбар:",
        "ipbexpiry": "Хотима:",
        "ipbreason": "Сабаб:",
        "ipbreason-dropdown": "*Сабабҳои умумии бастан\n** Ворид кардани иттилооти нодуруст\n** Пок кардани иттилооти муфид аз саҳифаҳо\n** Истифода бурдани пайвандҳои спам ба сомонаҳои беруна\n** Ворид кардани навиштаҳои беманънӣ ба саҳифаҳо\n** Рафтори баъд/масхаракунии дигар корбарон\n** Сӯиистифода аз чанд ҳисоби корбарӣ\n** Номи корбарии номуносиб",
        "imagelisttext": "Дар зер феҳристи '''$1''' {{PLURAL:$1|парвандаи|парвандаҳои}} ба тартиб оварда шуда, омадааст $2.",
        "newimages-summary": "Ин саҳифаи вижа охирин парвандаҳои боршударо намоиш медиҳад.",
        "newimages-legend": "Филтр",
-       "showhidebots": "($1 ботҳо)",
        "noimages": "Чизе барои дидан нест.",
        "ilsubmit": "Ҷустуҷӯи",
        "bydate": "аз рӯи сана",
index 9e9242b..d32cf1b 100644 (file)
        "action-createpage": "สร้างหน้า",
        "action-createtalk": "สร้างหน้าอภิปราย",
        "action-createaccount": "สร้างบัญชีผู้ใช้นี้",
+       "action-history": "ดูประวัติของหน้านี้",
        "action-minoredit": "ทำเครื่องหมายการแก้ไขนี้เป็นการแก้ไขเล็กน้อย",
        "action-move": "ย้ายหน้านี้",
        "action-move-subpages": "ย้ายหน้านี้ รวมทั้งหน้าย่อย",
        "blockip": "บล็อกผู้ใช้",
        "blockip-legend": "บล็อกผู้ใช้",
        "blockiptext": "ใช้แบบด้านล่างเพื่อบล็อกสิทธิเข้าถึงการเขียนของเลขที่อยู่ไอพีหรือชื่อผู้ใช้โดยเจาะจง การบล็อกนี้ควรดำเนินการเพื่อป้องกันการก่อกวนเท่านั้น และให้สอดคล้องกับ[[{{MediaWiki:Policy-url}}|นโยบาย]]\nกรอกเหตุผลโดยเจาะจงด้านล่าง (เช่น อ้างถึงหน้าที่ถูกก่อกวน)",
-       "ipadressorusername": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้",
+       "ipaddressorusername": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้",
        "ipbexpiry": "หมดอายุ",
        "ipbreason": "เหตุผล:",
        "ipbreason-dropdown": "*สาเหตุการบล็อกทั่วไป\n** ใส่ข้อมูลเท็จ\n** ลบเนื้อหาในหน้าออก\n** ใส่ลิงก์สแปม\n** ใส่ข้อความไร้สาระ/ขยะเข้ามา\n** พฤติกรรมข่มขู่/รังควาน\n** ใช้หลายบัญชีในทางที่ผิด\n** ชื่อผู้ใช้ที่ไม่อาจยอมรับได้",
        "spam_reverting": "ย้อนกลับไปรุ่นก่อนหน้าที่ไม่มีลิงก์ไปยังเว็บ $1",
        "spam_blanking": "รุ่นการปรับปรุงทุกรุ่นประกอบไปด้วยลิงก์ไปยังเว็บ $1 (ทำหน้าว่าง)",
        "spam_deleting": "ทุกรุ่นที่มีลิงก์ไปยัง $1 กำลังลบ",
+       "simpleantispam-label": "การตรวจสอบสแปม\n<strong>อย่า</strong>กรอกช่องนี้!",
        "pageinfo-title": "ข้อมูลสำหรับ \"$1\"",
        "pageinfo-not-current": "ขออภัย ไม่สามารถให้ข้อมูลนี้สำหรับรุ่นเก่าได้",
        "pageinfo-header-basic": "ข้อมูลเบื้องต้น",
        "newimages-summary": "หน้าพิเศษนี้แสดงไฟล์ที่ถูกอัปโหลดล่าสุด",
        "newimages-legend": "ตัวกรอง",
        "newimages-label": "ชื่อไฟล์ (หรือส่วนหนึ่งของชื่อ):",
-       "showhidebots": "($1 บอต)",
+       "newimages-showbots": "แสดงไฟล์ที่บอตอัปโหลด",
        "noimages": "ไม่มีให้ดู",
        "ilsubmit": "สืบค้น",
        "bydate": "ตามวันที่",
index d1ac296..9a27692 100644 (file)
        "blockip": "Ulanyjyny blokirle",
        "blockip-legend": "Ulanyjyny blokirle",
        "blockiptext": "Aşakdaky formdan peýdalanyp, belli bir IP-niň ýa-da ulanyjy adynyň ýazmak hukugyny blokirläp bilersiňiz.\nBu diňe wandalizmiň öňüni almak üçin hem-de [[{{MediaWiki:Policy-url}}|kadalara]] laýyklykda edilmelidir.\nAşakda blokirlemäniň takyk sebäbini ýazyň (meselem: wandalizm eden sahypalaryny görkeziň).",
-       "ipadressorusername": "IP adresi ýa-da ulanyjy ady:",
+       "ipaddressorusername": "IP adresi ýa-da ulanyjy ady:",
        "ipbexpiry": "Gutarýan wagty:",
        "ipbreason": "Sebäp:",
        "ipbreason-dropdown": "*Adaty blokirleme sebäpleri\n** Ýalan maglumat girizmek\n** Sahypalaryň mazmunyny aýyrmak\n** Daşarky saýtlara spam çykgydy goýmak\n** Sahypalara manysyz/düşnüksiz sözler girizmek\n** Haýbat atyjy hereket/Yrsaramak\n** Birden köp hasaby betniýetli ulanmak\n** Kabul edip bolmajak ulanyjy ady",
        "newimages-summary": "Bu ýörite sahypa iň soňky ýüklenen faýllary görkezýär.",
        "newimages-legend": "Filtr",
        "newimages-label": "Faýlyň ady (ýa-da bir bölegi):",
-       "showhidebots": "(botlary $1)",
        "noimages": "Görmäge zat ýok.",
        "ilsubmit": "Gözle",
        "bydate": "sene boýunça",
index 5f549f0..fce92b4 100644 (file)
        "blockip": "Harangin/hadlangan ang tagagamit",
        "blockip-legend": "Iharang ang tagagamit",
        "blockiptext": "Gamitin ang mga lahok sa ibaba upang maharang ang akses sa pagsulat mula sa isang espesipikong IP address o bansag.\nGawin lamang ito para maiwasan ang bandalismo, at napapaloob sa [[{{MediaWiki:Policy-url}}|patakaran]].\nPunan ang espesipikong dahilan sa ibaba (halimbawa, magbanggit ng partikular na mga pahina na nagkaroon ng bandalismo).",
-       "ipadressorusername": "Direksyong IP o bansag:",
+       "ipaddressorusername": "Direksyong IP o bansag:",
        "ipbexpiry": "Pagkawalang-bisa:",
        "ipbreason": "Dahilan:",
        "ipbreason-dropdown": "*Mga karaniwang dahilan sa paghaharang\n** Pagpasok ng hindi totoong impormasyon\n** Pag-alis ng nilalaman mula sa mga pahina\n** Paglalagay ng mga panlabas na link  na spam\n** Pagpasok ng impormasyong walang kabuluhan o hindi maintindihan sa mga pahina\n** Ugaling nananakot/pagligalig\n** Pagmamalabis ng maramihang account\n** Hindi kanais-nais na pangalan",
        "newimages-summary": "Nagpapakita ang natatanging pahinang ito ng huling naikargang mga talaksan.",
        "newimages-legend": "Pansala",
        "newimages-label": "Pangalan ng talaksan (o bahagi nito):",
-       "showhidebots": "($1 mga ''bot'')",
        "noimages": "Walang makikita dito.",
        "ilsubmit": "Hanapin",
        "bydate": "ayon sa petsa",
index ad597f9..4bfb2d8 100644 (file)
        "blockip": "Kullanıcıyı engelle",
        "blockip-legend": "Kullanıcıyı engelle",
        "blockiptext": "Aşağıdaki formu kullanarak belli bir IP'nin veya kayıtlı kullanıcının değişiklik yapmasını engelleyebilirsiniz. Bu sadece vandalizmi engellemek için ve [[{{MediaWiki:Policy-url}}|kurallara]] uygun olarak yapılmalı. Aşağıya mutlaka engelleme ile ilgili bir açıklama yazınız. (örnek: -Şu- sayfalarda vandalizm yapmıştır).",
-       "ipadressorusername": "IP adresi veya kullanıcı adı",
+       "ipaddressorusername": "IP adresi veya kullanıcı adı",
        "ipbexpiry": "Bitiş süresi",
        "ipbreason": "Neden:",
        "ipbreason-dropdown": "*Genel engelleme nedenleri\n** Yanlış bilgi eklemek\n** Sayfalardan içeriği çıkarmak\n** Dış sitelere spam bağlantı vermek\n** Sayfalara mantıksız/anlaşılmaz sözler eklemek\n** Tehditvari davranış/Taciz\n** Birden fazla hesabı kötüye kullanmak\n** Kabul edilemez kullanıcı adı",
        "newimages-summary": "Bu özel sayfa, en son yüklenen dosyaları göstermektedir.",
        "newimages-legend": "Filtre",
        "newimages-label": "Dosya adı (ya da bir parçası):",
-       "showhidebots": "(botları $1)",
        "noimages": "Görecek bir şey yok.",
        "ilsubmit": "Ara",
        "bydate": "kronolojik sırayla",
index 67adf7b..3812afb 100644 (file)
        "whatlinkshere-filters": "Фильтрлар",
        "blockip": "Кулланучыны тыю",
        "blockip-legend": "Кулланучыны тыю",
-       "ipadressorusername": "IP адресы яки кулланучы исеме:",
+       "ipaddressorusername": "IP адресы яки кулланучы исеме:",
        "ipbexpiry": "Бетә:",
        "ipbreason": "Сәбәп:",
        "ipbreason-dropdown": "* Кысуның гадәттәге сәбәпләре\n** Ялган мәгълүмат кертү\n** Битләрнең эчтәлеген сөртү\n** Тышкы сайтларга спам-сылтамалар\n** Мәгънәсез текст/чүп өстәү\n** Кулланучыларны эзәрлекләү/янаулар\n** Берничә хисап язмасы белән исәпләшмәү\n** Кулланучы исеменең яраксыз булуы",
        "show-big-image": "Тулы ачыклык",
        "newimages": "Яңа сүрәтләр җыелмасы",
        "newimages-legend": "Фильтр",
-       "showhidebots": "($1 бот)",
        "ilsubmit": "Эзләү",
        "bad_image_list": "Киләчәк рәвеш кирәк:\n\nИсемлек кисәкләре генә (* символыннан башланучы юллар) саналырлар.\nЮлның беренче сылтамасы куйма өчен тыелган рәсемгә сылтама булырга тиеш.\nШул ук юлның киләчәк сылтамалары чыгармалар, рәсемгә тыелмаган битләре, саналырлар.",
        "metadata": "Мета мәгълүматлар",
index 27996c6..206af30 100644 (file)
        "whatlinkshere-filters": "Filtrlar",
        "blockip": "Qullanuçını tıyu",
        "blockip-legend": "Qullanuçını tıyu",
-       "ipadressorusername": "IP adresı yäki qullanuçı iseme:",
+       "ipaddressorusername": "IP adresı yäki qullanuçı iseme:",
        "ipbexpiry": "Betä:",
        "ipbreason": "Säbäp:",
        "ipbreason-dropdown": "* Qısunıñ ğädättäge säbäpläre\n** Yalğan mäğlümat kertü\n** Bitlärneñ eçtälegen sörtü\n** Tışqı saytlarğa spam-sıltamalar\n** Mäğnäsez tekst/çüp östäw\n** Qullanuçılarnı ezärlekläw/yanawlar\n** Berniçä xisap yazması belän isäpläşmäw\n** Qullanuçı isemeneñ yaraqsız buluı",
        "show-big-image": "Tulı açıqlıq",
        "newimages": "Yaña sürätlär cıyılması",
        "newimages-legend": "Filtr",
-       "showhidebots": "($1 bot)",
        "ilsubmit": "Ezläw",
        "bydate": "waqıt buyınça",
        "bad_image_list": "Kiläçäk räweş kiräk:\n\nİsemlek kisäkläre genä (* simvolınnan başlanuçı yullar) sanalırlar.\nYulnıñ berençe sıltaması quyma öçen tıyılğan räsemgä sıltama bulırğa tieş.\nŞul uq yulnıñ kiläçäk sıltamaları çığarmalar, räsemgä tıyılmağan bitläre, sanalırlar.",
index e1c1b6c..2e329dc 100644 (file)
        "blockip": "چەكلەنگەن ئىشلەتكۈچى",
        "blockip-legend": "چەكلەنگەن ئىشلەتكۈچى",
        "blockiptext": "تۆۋەندىكى جەدۋەلنى ئىشلىتىپ بەلگىلىك IP ئادرېس ياكى ئىشلەتكۈچى ئاتىدىن كەلگەن يېزىش زىيارىتىنى چەكلەشكە بولىدۇ.\nپەقەت بۇزغۇنچىلىكنىڭ ئالدىنى ئېلىش ھەمدە [[{{MediaWiki:Policy-url}}|تاكتىكا]].\nسىغا ئۇيغۇن بولغان ئەھۋالدا ئاندىن بۇ مەشغۇلاتنى ئېلىپ بېرىشقا بولىدۇ. تۆۋەندە ئەمەلىي سەۋەب (مەسىلەن، بۇزۇۋېتىلگەن بەتتىن بىرنى نەقىل ئېلىش)تىن بىرنى كىرگۈزۈڭ.",
-       "ipadressorusername": "IP ئادرېس ياكى ئىشلەتكۈچى ئاتى:",
+       "ipaddressorusername": "IP ئادرېس ياكى ئىشلەتكۈچى ئاتى:",
        "ipbexpiry": "مۇددىتى:",
        "ipbreason": "سەۋەب:",
        "ipbreason-dropdown": "*ئادەتتىكى چەكلەش سەۋەبى\n** ساختا ئۇچۇر قوشۇش\n** بەت مەزمۇنىنى چىقىرىۋېتىش\n** سىرتقى ئەخلەت ئۇلانما قوشۇش\n** بەتكە تۇترۇقسىز گەپ قوشۇش\n**  باشقىلارغا ھەيۋە قىلىش/مەجبۇرلاش\n** كۆپ ھېساباتنى قالايمىغان ئىشلىتىش\n** قوبۇل قىلغىلى بولمايدىغان ئىشلەتكۈچى ئاتى",
        "newimages-summary": "بۇ ئالاھىدە بەتتە ئەڭ ئاخىرىدا يۈكلەنگەن ھۆججەت كۆرسىتىلىدۇ.",
        "newimages-legend": "سۈزگۈچ",
        "newimages-label": "ھۆججەت ئاتى (ياكى ئۇنىڭ پارچىسى):",
-       "showhidebots": "($1 ماشىنا ئادەم)",
        "noimages": "كۆرۈدىغان ھېچنېمە يوق.",
        "ilsubmit": "ئىزدەش",
        "bydate": "چېسلا بويىچە",
index 6038591..10b7901 100644 (file)
        "blockip": "Блокування",
        "blockip-legend": "Блокування користувача",
        "blockiptext": "Використовуйте форму нижче, щоб заблокувати можливість редагування зазначеній IP-адресі або користувачу.\nЦе слід робити лише для запобігання порушенням і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].\nОбов'язково заповніть причину нижче, бажано дати інформативну вичерпну інформацію (наприклад, послатися на конкретні правила, дати посилання на редагування користувача, які призвели до блокування). Можна конкретизувати причину блокування на сторінці обговорення користувача.\n* Якщо ви блокуєте обліковий запис бота, переконайтеся, що ви вимкнули автоблокування (для запобігання автоматичного блокування облікових записів власника бота або інших ботів).\n* Зверніть увагу, що IP-адреси у більшості випадків не варто блокувати на більший за декілька днів термін, щоб під блокування не підпали інші користувачі з таким самим IP. Винятки — частий довготривалий вандалізм.",
-       "ipadressorusername": "IP-адреса або ім'я користувача:",
+       "ipaddressorusername": "IP-адреса або ім'я користувача:",
        "ipbexpiry": "Термін:",
        "ipbreason": "Причина:",
        "ipbreason-dropdown": "* Типові причини блокування\n** Вставка неправильної інформації\n** Видалення змісту сторінок\n** Спам, рекламні посилання\n** Вставка нісенітниці/лайки в текст\n** Залякуюча поведінка/переслідування\n** Зловживання кількома обліковими записами\n** Неприйнятне ім'я користувача",
        "newimages-summary": "Ця спеціальна сторінка показує останні завантажені файли.",
        "newimages-legend": "Фільтр",
        "newimages-label": "Назва файлу (або її частина):",
-       "showhidebots": "($1 ботів)",
        "noimages": "Файли відсутні.",
        "ilsubmit": "Шукати",
        "bydate": "за датою",
index 13e5f2b..6ae2b30 100644 (file)
        "unblock": "Foydalanuvchiga yo'l ochish",
        "blockip": "Foydalanuvchini chetlashtir",
        "blockip-legend": "Foydalanuvchini muhosara qilish",
-       "ipadressorusername": "IP-manzil yoki foydalanuvchi nomi:",
+       "ipaddressorusername": "IP-manzil yoki foydalanuvchi nomi:",
        "ipbexpiry": "Tugaydi:",
        "ipbreason": "Sabab:",
        "ipbreason-dropdown": "* Chetlashtirishning odatiy sabablari\n** Yolgʻon maʼlumot kiritish\n** Sahifa matnini toʻliq oʻchirish\n** Tashqi saytlarga spam-havolalar\n** Maʼnosiz matn/axlat qoʻshish\n** Foydalanuvchilarga tahdid qilish, ularni taʼqib qilish\n** Bir nechta hisob yozuvlaridan oʻz manfaatlarida foydalanish\n** Nomaqbul foydalanuvchi nomi",
        "show-big-image": "Toʻliq hajmdagi tasvir",
        "noimages": "Tasvir mavjud emas.",
        "ilsubmit": "Qidirish",
+       "variantname-uz-latn": "lotincha",
+       "variantname-uz-cyrl": "кириллча",
        "metadata": "Metama’lumot",
        "metadata-expand": "Batafsil axborotni koʻrsatish",
        "metadata-collapse": "Batafsil axborotni yashirish",
index b9a0b1e..23d8abd 100644 (file)
        "blockip": "Bloco utente",
        "blockip-legend": "Bloca l'utente",
        "blockiptext": "Dòpara el moduło qua soto par blocar l'accesso in scritura a un speçifico utente o indirizo IP. El bloco el gà de èssar operà par prevegner ati de vandalismo e in streta osservansa de ła [[{{MediaWiki:Policy-url}}|policy de {{SITENAME}}]]. Speçifica in detałio el motivo del bloco nel canpo seguente (ad es. indicando i titołi de łe pàxene ogeto de vandalismo).",
-       "ipadressorusername": "Indirizo IP o nome utente",
+       "ipaddressorusername": "Indirizo IP o nome utente",
        "ipbexpiry": "Scadensa",
        "ipbreason": "Motivassion:",
        "ipbreason-dropdown": "*Motivazion piassè comuni par i blocchi\n** Inserimento de informazion false\n** Rimozion de contenuti da le pagine\n** Colegamenti promozionali a siti foresti\n** Inserimento de contenuti privi de senso\n** Conportamenti intimidatori o molestie\n** Uso indebito de più account\n** Nome utente non cònsono",
        "newimages-summary": "Sta pagina speciale la mostra i file cargà piassè reçentemente.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nome del file (o na parte de élo):",
-       "showhidebots": "($1 i bot)",
        "noimages": "No ghè gnente da vardare.",
        "ilsubmit": "Serca",
        "bydate": "data",
index e1e8706..dcb3994 100644 (file)
        "blockip": "Blokiruida kävutajad",
        "blockip-legend": "Blokiruida kävutajad",
        "blockiptext": "Kävutagat alemba anttud form, miše blokiruida kirjutandan voimuz märitud IP-adresaspäi.\nNece sab tehta vaiše sen täht, miše borcuidas vandalizmanke, kut om kirjutadud [[{{MediaWiki:Policy-url}}|ohjandimiš]].\nKirjutagat sü alemba (ozutesikš, citiruigat vandaliziruidud lehtpoled).",
-       "ipadressorusername": "IP-adres vai kävutajan nimi:",
+       "ipaddressorusername": "IP-adres vai kävutajan nimi:",
        "ipbexpiry": "Lopindan strok:",
        "ipbreason": "Sü:",
        "ipbreason-dropdown": "*Blokiruindan päsüd\n** Väran informacijan andand\n** Lehtpoliden südäimišton čudand\n** Spamkosketused irdsaitoihe\n** Hamatoman tekstan da rujon kirjutamine lehtpolile\n** Toižiden kävutajiden pöl'gästoitand\n** Erazvuiččiden registracijoiden kävutand ühtel ristitul\n** Paha kävutajan nimi",
        "newimages-summary": "Necil specialižel lehtpolel ozutadas tantoi jügutoittud failoid.",
        "newimages-legend": "Fil'tr",
        "newimages-label": "Failan nimi (vai sen pala):",
-       "showhidebots": "($1 botad)",
        "noimages": "Ei ole uzid kuvid.",
        "ilsubmit": "Ectä",
        "bydate": "datan mödhe",
index 43d21f8..f793264 100644 (file)
        "jumptonavigation": "chuyển hướng",
        "jumptosearch": "tìm kiếm",
        "view-pool-error": "Xin lỗi, máy chủ hiện đang bị quá tải.\nCó quá nhiều thành viên đang cố gắng xem trang này.\nXin hãy đợi một lát rồi thử truy cập lại vào trang.\n\n$1",
+       "generic-pool-error": "Xin lỗi, các máy chủ hiện đang bị quá tải.\nCó quá nhiều người dùng đang cố gắng xem tài nguyên này.\nXin hãy đợi một lát rồi thử truy cập lại vào tài nguyên.",
        "pool-timeout": "Hết thời gian chờ đợi khóa",
        "pool-queuefull": "Đầy hàng đợi khối ứng dụng (pool queue)",
        "pool-errorunknown": "Lỗi lạ",
        "edit-gone-missing": "Không thể cập nhật trang.\nDường như trang này đã bị xóa.",
        "edit-conflict": "Sửa đổi mâu thuẫn.",
        "edit-no-change": "Sửa đổi của bạn không được tính đến, vì nó không làm thay đổi nội dung.",
+       "postedit-confirmation-created": "Trang đã được tạo ra.",
+       "postedit-confirmation-restored": "Trang đã được phục hồi.",
        "postedit-confirmation-saved": "Sửa đổi của bạn đã được lưu.",
        "edit-already-exists": "Không thể tạo trang mới.\nNó đã tồn tại.",
        "defaultmessagetext": "Nội dung mặc định",
        "action-createpage": "tạo trang",
        "action-createtalk": "tạo trang thảo luận",
        "action-createaccount": "mở tài khoản này",
+       "action-history": "xem lịch sử của trang này",
        "action-minoredit": "đánh dấu đây là sửa đổi nhỏ",
        "action-move": "di chuyển trang này",
        "action-move-subpages": "di chuyển trang này và các trang con",
        "protectedpages-cascade": "Chỉ hiển thị khóa theo tầng",
        "protectedpages-noredirect": "Ẩn trang đổi hướng",
        "protectedpagesempty": "Hiện không có trang nào bị khóa với các thông số này.",
-       "protectedpages-timestamp": "Dấu thời gian",
+       "protectedpages-timestamp": "Thời gian",
        "protectedpages-page": "Trang",
        "protectedpages-expiry": "Hết hạn",
        "protectedpages-performer": "Người dùng khóa",
        "blockip": "Cấm người dùng",
        "blockip-legend": "Cấm người dùng",
        "blockiptext": "Dùng mẫu dưới để cấm một địa chỉ IP hoặc thành viên không được viết trang.\nĐiều này chỉ nên làm để tránh phá hoại, và phải theo [[{{MediaWiki:Policy-url}}|quy định]].\nĐiền vào lý do cụ thể ở dưới (ví dụ, chỉ ra trang nào bị phá hoại).",
-       "ipadressorusername": "Địa chỉ IP hay tên thành viên:",
+       "ipaddressorusername": "Địa chỉ IP hay tên thành viên:",
        "ipbexpiry": "Thời hạn:",
        "ipbreason": "Lý do:",
        "ipbreason-dropdown": "*Một số lý do cấm thường gặp\n** Phá hoại\n** Thêm thông tin sai lệch\n** Xóa nội dung trang\n** Đăng liên kết thư rác dẫn đến trang Web bên ngoài\n** Cho thông tin rác vào trang\n** Có thái độ dọa dẫm/quấy rối\n** Lạm dụng nhiều tài khoản\n** Tên thành viên không thể chấp nhận",
        "newimages-summary": "Trang đặc biệt này hiển thị các tập tin được tải lên gần đây nhất.",
        "newimages-legend": "Bộ lọc",
        "newimages-label": "Tên tập tin (hoặc một phần tên):",
-       "showhidebots": "($1 robot)",
        "noimages": "Chưa có hình.",
        "ilsubmit": "Tìm kiếm",
        "bydate": "theo ngày",
        "htmlform-no": "Không",
        "htmlform-yes": "Có",
        "htmlform-chosen-placeholder": "Chọn một tùy chọn",
+       "htmlform-cloner-create": "Tiếp tục thêm",
+       "htmlform-cloner-delete": "Loại bỏ",
+       "htmlform-cloner-required": "Cần ít nhất một giá trị.",
        "sqlite-has-fts": "$1 với sự hỗ trợ tìm kiếm toàn văn",
        "sqlite-no-fts": "$1 không có hỗ trợ tìm kiếm toàn văn",
        "logentry-delete-delete": "$1 {{GENDER:$2}}đã xóa trang “$3”",
index f31bdb4..ecc53f1 100644 (file)
        "blockip": "Blokön gebani",
        "blockip-legend": "Blokön gebani",
        "blockiptext": "Gebolös padi at ad blokön redakamagitäti gebananema u ladeta-IP semikas. Atos söton padunön teiko ad vitön vandalimi, e bai [[{{MediaWiki:Policy-url}}|dunalesets {{SITENAME}}]]. Penolös dono kodi patik pro blokam (a. s., mäniotolös padis pedobüköl).",
-       "ipadressorusername": "Ladet-IP u gebananem",
+       "ipaddressorusername": "Ladet-IP u gebananem",
        "ipbexpiry": "Dü",
        "ipbreason": "Kod:",
        "ipbreason-dropdown": "*Blokamakods suvik:\n** Läükam nünas neverätik\n** Moükam ninäda se pads\n** Läükam yümas plödik tu mödikis (el „spam“)\n** Penam vödas/vödemas nesiämik su pads\n** Kondöt tu komipälik u dredüköl\n** Geb dobik kalas mödik\n** Gebananem no zepabik",
        "newimages-summary": "Pad patik at lisedon ragivis pelöpüköl lätik.",
        "newimages-legend": "Sul",
        "newimages-label": "Ragivanem (u dil ona):",
-       "showhidebots": "($1 mäikamenis)",
        "noimages": "Nos ad logön.",
        "ilsubmit": "Sukolöd",
        "bydate": "ma dät",
index a5ac915..19909f8 100644 (file)
        "whatlinkshere-filters": "Sõglaq",
        "blockip": "Piäq puutri võrgoaadrõs kinniq",
        "blockiptext": "Taa vorm om kimmä puutri võrgoaadrõsi päält tettüisi kirotuisi kinniqpidämises. '''Taad tohis tetäq õnnõ lehti ts'urkmisõ vasta ni [[{{MediaWiki:Policy-url}}|{{SITENAME}} sisekõrra perrä]]'''. Kimmähe tulõ täütäq ka rida \"põhjus\". Sinnäq võinuq pandaq nt lingiq noilõ lehile, midä rikuti.",
-       "ipadressorusername": "Puutri võrgoaadrõs vai pruukjanimi",
+       "ipaddressorusername": "Puutri võrgoaadrõs vai pruukjanimi",
        "ipbexpiry": "Tähtaig",
        "ipbreason": "Põhjus:",
        "ipbreason-dropdown": "*Hariliguq kinniqpidämise põhjusõq\n** Võlss teedüse kirotaminõ\n** Lehti sisu ärqkistutaminõ\n** Reklaamilinkõ pandminõ\n** Mõttõlda jutu vai prahi pandminõ\n** Segämine ja ts'urkminõ\n** Mitmõ pruukjanime võlsspruukminõ\n** Sündümäldäq pruukjanimi",
        "show-big-image": "Algteedüstü",
        "newimages": "Vahtsõq pildiq",
        "imagelisttext": "Pilte nimekirän $1 (sordiduq $2).",
-       "showhidebots": "($1 robodiq)",
        "noimages": "Olõ-i vahtsit pilte.",
        "ilsubmit": "Otsminõ",
        "bydate": "kuupäävä perrä",
index 273e010..13ea5e4 100644 (file)
        "autoblockid": "Blocaedje otomatike #$1",
        "blockip": "Bloker èn uzeu",
        "blockiptext": "Rimplixhoz les tchamps chal pa dzo po bloker\nl' accès e scrijhaedje d' èn uzeu dné ou a pårt d' ene\nadresse IP dnêye. Çouci èn doet esse fwait ki po-z arester les\nvandales, et çoula doet esse fwait tot shuvant les\n[[{{MediaWiki:Policy-url}}|rîles]].\nDinez ene råjhon do blocaedje (eg: dijhoz les pådjes k' ont\nstî vandalijheyes).",
-       "ipadressorusername": "Adresse IP ou no d' uzeu",
+       "ipaddressorusername": "Adresse IP ou no d' uzeu",
        "ipbexpiry": "Tins do blocaedje",
        "ipbreason": "Råjhon:",
        "ipbsubmit": "Bloker cist uzeu",
        "show-big-image": "Imådje a si grandeur d' oridjinne",
        "newimages": "Galreye des nouvès imådjes",
        "imagelisttext": "Chal pa dzo c' est ene djivêye di '''$1''' {{PLURAL:$1|imådje relîte|imådjes relîtes}} $2.",
-       "showhidebots": "($1 robots)",
        "noimages": "I n' a rén a vey.",
        "ilsubmit": "Cweri",
        "bydate": "pazès dates",
index d334bd7..0cd9595 100644 (file)
        "whatlinkshere-hidelinks": "заалһудиг $1",
        "whatlinkshere-filters": "Шүрс",
        "blockip": "Демнчиг бүслх",
-       "ipadressorusername": "IP хайг аль демнчна нернь:",
+       "ipaddressorusername": "IP хайг аль демнчна нернь:",
        "ipbreason": "Учр:",
        "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",
        "ipblocklist": "Бүслсн болн демнчнр",
index f7548c5..d33aa0d 100644 (file)
        "edit-conflict": "רעדאקטירן קאנפֿליקט.",
        "edit-no-change": "מ'האט איגנארירט אײַער רעדאַקטירונג, ווײַל קיין שום ענדערונג איז נישט געמאַכט צום טעקסט.",
        "postedit-confirmation-created": "דער בלאט איז געווארן געשאפן.",
+       "postedit-confirmation-restored": "דער בלאט איז געווארן צוריקגעשטעלט.",
        "postedit-confirmation-saved": "אייער רעדאקטירונג איז געווארן אויפגעהיטן.",
        "edit-already-exists": "נישט מעגליך צו שאַפֿן נייעם בלאט.\nער עקזיסטירט שוין.",
        "defaultmessagetext": "גרונטלעכער מעלדונג טעקסט",
        "action-createpage": "שאַפֿן בלעטער",
        "action-createtalk": "שאַפֿן שמועס בלעטער",
        "action-createaccount": "שאַפֿן די באַניצער קאנטע",
+       "action-history": "באקוקן רעדאקטירן היסטאריע פון דעם בלאט.",
        "action-minoredit": "באַצייכענען די רעדאַקטירונג ווי מינערדיק",
        "action-move": "באַוועגן דעם בלאַט",
        "action-move-subpages": "באַוועגן דעם בלאַט מיט זײַנע אונטערבלעטער",
        "blockip": "בלאקירן באַניצער",
        "blockip-legend": "בלאקירן באַניצער",
        "blockiptext": "באניצט די פארעם דא אונטן כדי צו בלאקירן שרײַבן רעכטן פֿון איינגעשריבענע באניצער אדער סתם ספעציפישע איי פי אדרעסן.\n\nאזאלכע בלאקירונגען מוזן דורכגעפירט ווערן בלויז צו פֿאַרמײַדן וואַנדאַליזם, און לויט די [[{{MediaWiki:Policy-url}}|פארשריפטן און פאליסיס]].\n\nביטע שרײַבט ארויס קלאָר די ספעציפֿישע סיבה (למשל, ציטירן וועלכע בלעטער מ'האט וואַנדאַליזירט).",
-       "ipadressorusername": "IP אדרעס אדער באַניצער נאמען:",
+       "ipaddressorusername": "IP אדרעס אדער באַניצער נאמען:",
        "ipbexpiry": "אויסגיין:",
        "ipbreason": "אורזאַך:",
        "ipbreason-dropdown": "* פֿארשפרייטע בלאקירן סיבות\n** ארײַנלייגן פֿאלשע אינפֿארמאציע\n** אויסמעקן אינהאַלט פֿון בלעטער\n** פֿארפֿלייצן לינקען צו דרויסנדיקע ערטער\n** ארײַנלייגן שטותים/טאָטעריש אין בלעטער\n** סטראשעט און שטערט\n** קרומבאניצן מערערע קאנטעס\n** באַניצער נאָמען פראבלעמאַטיש",
        "newimages-summary": "דער באַזונדערער בלאַט ווײַזט די לעצטע ארויפֿגעלאָדענע טעקעס.",
        "newimages-legend": "פֿילטער",
        "newimages-label": "טעקע נאָמען (אדער אַ טײל דערפֿון):",
-       "showhidebots": "($1 ראָבאָטן)",
        "noimages": "נישטא קיין בילדער.",
        "ilsubmit": "זוכן",
        "bydate": "לויטן דאטום",
index 254f2e0..5be55de 100644 (file)
        "blockip": "Dínà oníṣe",
        "blockip-legend": "Ìdínà oníṣẹ",
        "blockiptext": "Ẹ lo fọ́ọ̀mù ìsàlẹ̀ láti dínà ìle kọ láti ọ̀dọ̀ àdírẹ́ẹ̀sì IP pàtó kan tàbí orúkọ oníṣe.\nẸyí gbọ́dọ̀ jẹ́ síṣe láti dínà ìṣèbàjẹ́ nìkan, àtí gẹ́gẹ́bí [[{{MediaWiki:Policy-url}}|ètò ìsiṣẹ́]].\nẸ sọ ìdí pàtó nísàlẹ̀ (fún àpẹrẹ, ìtọ́kasí àwọn ojúewé pàtó tí wọ́n jẹ́ bíbàjẹ́).",
-       "ipadressorusername": "Àdírẹ́ẹ̀sì IP tàbí orúkọ oníṣe:",
+       "ipaddressorusername": "Àdírẹ́ẹ̀sì IP tàbí orúkọ oníṣe:",
        "ipbexpiry": "Ìwásópin:",
        "ipbreason": "Ìdíẹ̀:",
        "ipbreason-dropdown": "*Àwọn ìdí fún ìdínà\n** Àròyé tí kò jẹ́ òtítọ́\n** Yíyọ àkóónú kúrò nínú ojúewé\n** Kíkọ àjápọ̀ sí àwọn ibi tí kò ní ìbámu mọ́ ojúewé\n** Ìkọkúkọ sínú ojúewé\n** Iwùwà ìpayà sí ẹlòmíràn\n** Ìlòkulò ọ̀pọ̀lọpọ̀ àpamọ́\n** Lílo orúkọ oníṣe tí kò tọ́",
        "newimages-summary": "Ojúewé pàtàkì yìí ṣe àfihàn àwọn fáìlì ìrùsókè gbẹ̀yìn.",
        "newimages-legend": "Ajọ̀",
        "newimages-label": "Orúkọ faili (tàbí apá kan rẹ̀):",
-       "showhidebots": "(àwọn bot $1)",
        "noimages": "Kò sí àwòrán.",
        "ilsubmit": "Ṣàwárí",
        "bydate": "bíi ọjọ́ọdún",
index c326085..4c37bd6 100644 (file)
        "blockip": "封鎖用戶",
        "blockip-legend": "封鎖用戶",
        "blockiptext": "使用以下嘅表格嚟去阻止指定嘅IP地址或用戶名嘅寫權限。\n僅當僅當為咗避免有版畀人惡意破壞嘅時候先可以使用,而且唔可以違反[[{{MediaWiki:Policy-url}}|政策]]。\n喺下面填寫阻止嘅確切原因(比如:引用咗某啲已經破壞咗嘅頁面)。",
-       "ipadressorusername": "IP地址或用戶名:",
+       "ipaddressorusername": "IP地址或用戶名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*共用封鎖原因\n** 插入錯嘅資料\n** 響頁面度拎走\n** 亂加入外部連結\n** 響頁度加入冇意義嘅嘢\n** 嚇人/騷擾\n** 濫用多個戶口\n** 唔能夠接受嘅用戶名",
        "newimages-summary": "呢個特別頁顯示最後上載咗嘅檔案。",
        "newimages-legend": "過濾",
        "newimages-label": "檔名(或佢嘅一部份):",
-       "showhidebots": "($1 機械人)",
        "noimages": "冇嘢去睇。",
        "ilsubmit": "搵嘢",
        "bydate": "以時間",
index f8140bd..ddbdbb6 100644 (file)
        "action-createpage": "创建页面",
        "action-createtalk": "创建讨论页面",
        "action-createaccount": "创建该用户账户",
+       "action-history": "查看此页历史",
        "action-minoredit": "标记该编辑为小编辑",
        "action-move": "移动本页",
        "action-move-subpages": "移动本页及其子页面",
        "uploadscriptednamespace": "此SVG文件包含非法名字空间“$1”",
        "uploadinvalidxml": "上传文件中的XML无法解析。",
        "uploadvirus": "该文件包含病毒!\n详情:$1",
-       "uploadjava": "该文件是 ZIP 文件,其中包含 Java 的.class 文件。\n不允许上传的 Java 文件,因为他们可能会跳过的安全限制。",
+       "uploadjava": "该文件是 ZIP 文件,其中包含 Java 的.class 文件。上传Java文件不被允许,因为它们可能绕过限制,从而引起安全问题。",
        "upload-source": "来源文件",
        "sourcefilename": "源文件名:",
        "sourceurl": "来源网址:",
        "blockip": "封禁用户",
        "blockip-legend": "封禁用户",
        "blockiptext": "使用下方的表单来禁止来自特定IP地址或用户名的写访问。\n只有在为了防止破坏,并符合[[{{MediaWiki:Policy-url}}|方针]]的情况下才可采取此行动。\n请在下面输入一个具体的理由(例如引述一个被破坏的页面)。",
-       "ipadressorusername": "IP地址或用户名:",
+       "ipaddressorusername": "IP地址或用户名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*常见封禁原因\n** 插入虚假信息\n** 删除页面内容\n** 添加垃圾外部链接\n** 插入无意义文字\n** 恐吓行为/骚扰\n** 滥用多个账户\n** 不能接受的用户名",
        "newimages-summary": "本特殊页面展示最后上传的文件。",
        "newimages-legend": "过滤",
        "newimages-label": "文件名(或它的一部份):",
-       "showhidebots": "($1机器人)",
+       "newimages-showbots": "显示机器人上传",
        "noimages": "无可查看文件。",
        "ilsubmit": "搜索",
        "bydate": "按日期",
index 2144898..62f58b2 100644 (file)
        "toc": "目錄",
        "showtoc": "顯示",
        "hidetoc": "隱藏",
-       "collapsible-collapse": "摺",
+       "collapsible-collapse": "摺",
        "collapsible-expand": "展開",
        "thisisdeleted": "檢視或還原 $1 ?",
        "viewdeleted": "檢視 $1?",
        "parser-unstrip-loop-warning": "檢測到迴圈",
        "parser-unstrip-recursion-limit": "遞歸超過限制 ($1)",
        "converter-manual-rule-error": "手動語言轉換規則中檢測到錯誤",
-       "undo-success": "該編輯可以被撤銷。請檢查以下對比以核實這正是您想做的,然後儲存以下更改以完成撤銷編輯。",
-       "undo-failure": "由於中途的編輯不一致,此編輯不能撤銷。",
+       "undo-success": "此編輯可以被還原。\n請檢查以下比較表,確認您是否要還原,然後儲存以下變更以完成編輯還原。",
+       "undo-failure": "由於編輯的修訂間有衝突,此編輯不能還原。",
        "undo-norev": "由於其修訂版本不存在或已刪除,此編輯不能撤銷。",
-       "undo-nochange": "æ\98¯æ¬¡ç·¨è¼¯ä¼¼ä¹\8eå·²ç¶\93被æ\92¤é\8a·。",
+       "undo-nochange": "此編輯å\8f¯è\83½å·²è¢«é\82\84å\8e\9f。",
        "undo-summary": "取消由 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 所作出的修訂 $1",
        "undo-summary-username-hidden": "還原隱藏使用者的修訂 $1",
        "cantcreateaccounttitle": "無法建立帳號",
        "lineno": "行 $1:",
        "compareselectedversions": "比較已選擇的修訂",
        "showhideselectedversions": "顯示/隱藏已選擇的修訂",
-       "editundo": "原",
+       "editundo": "原",
        "diff-empty": "(無差異)",
        "diff-multi-sameuser": "(未顯示相同使用者於中間所作的 $1 次修訂)",
        "diff-multi-otherusers": "(未顯示由 $2 位使用者於中間所作的 $1 次修訂)",
        "titlematches": "頁面標題相符",
        "textmatches": "頁面內容相符",
        "notextmatches": "沒有頁面內容匹配",
-       "prevn": "前 $1 ",
-       "nextn": "後 {{PLURAL:$1|$1}} ",
-       "prevn-title": "前 $1 結果",
-       "nextn-title": "後 $1 結果",
+       "prevn": "前 $1 ",
+       "nextn": "後 {{PLURAL:$1|$1}} ",
+       "prevn-title": "前 $1 結果",
+       "nextn-title": "後 $1 結果",
        "shown-title": "每頁顯示 $1 項結果",
        "viewprevnext": "檢視 ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''在這個 wiki 上已有一頁面叫做「[[:$1]]」。'''",
        "search-relatedarticle": "相關",
        "searcheverything-enable": "搜尋所有命名空間",
        "searchrelated": "相關",
-       "searchall": "所有",
+       "searchall": "全部",
        "showingresults": "下面顯示從第 <b>$2</b> 條開始的 <b>$1</b> 條結果:",
-       "showingresultsinrange": "以下顯示於#<strong>$2</strong>至#<strong>$3</strong>之<strong>$1</strong>個搜尋結果。",
+       "showingresultsinrange": "以下顯示第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆,共 <strong>$1</strong> 筆搜尋結果。",
        "showingresultsnum": "下面顯示從第 '''$2''' 條開始的 '''{{PLURAL:$3|1|$3}}''' 條結果。",
        "showingresultsheader": "對'''$4'''的{{PLURAL:$5|第 '''$1''' 至第 '''$3''' 項結果|第 '''$1 - $2''' 項,共 '''$3''' 項結果}}",
        "search-nonefound": "在查詢中無結果相符。",
        "powersearch-legend": "進階搜尋",
        "powersearch-ns": "搜尋以下命名空間:",
-       "powersearch-togglelabel": "核取:",
-       "powersearch-toggleall": "所有",
+       "powersearch-togglelabel": "勾選:",
+       "powersearch-toggleall": "全部",
        "powersearch-togglenone": "無",
        "search-external": "外部搜尋",
        "searchdisabled": "{{SITENAME}}由於性能方面的原因,全文搜索已被暫時停用。您可以暫時透過Google搜索。請留意他們的索引可能會過時。",
        "prefs-rc": "最近變更",
        "prefs-watchlist": "監視列表",
        "prefs-watchlist-days": "監視列表中顯示的天數:",
-       "prefs-watchlist-days-max": "最多$1{{PLURAL:$1|天}}",
-       "prefs-watchlist-edits": "擴充監視列表中顯示變更次數的上限:",
+       "prefs-watchlist-days-max": "最多 $1 {{PLURAL:$1|天}}",
+       "prefs-watchlist-edits": "展開的監視列表中顯示變更次數上限:",
        "prefs-watchlist-edits-max": "最大數量:1000",
        "prefs-watchlist-token": "監視列表密鑰:",
        "prefs-misc": "雜項",
        "stub-threshold": "<a href=\"#\" class=\"stub\">短頁面連結</a>格式門檻值 (位元組):",
        "stub-threshold-disabled": "已停用",
        "recentchangesdays": "最近變更的顯示日數:",
-       "recentchangesdays-max": "最多$1{{PLURAL:$1|天}}",
+       "recentchangesdays-max": "最多 $1 {{PLURAL:$1|天}}",
        "recentchangescount": "預設顯示的編輯數:",
        "prefs-help-recentchangescount": "這包含最近變更、頁面歷史以及日誌。",
        "prefs-help-watchlist-token2": "這是一個秘密的密鑰,用於訂源您的監視列表。\n知道它的人將能夠讀取您的監視列表,所以您不應該分享它。[[Special:ResetTokens|如有需要重設此密鑰,請點擊這裡]]。",
        "editinguser": "變更使用者 '''[[User:$1|$1]]''' 的使用者權限 $2",
        "userrights-editusergroup": "編輯使用者群組",
        "saveusergroups": "儲存使用者群組",
-       "userrights-groupsmember": "屬於:",
-       "userrights-groupsmember-auto": "固有屬於:",
-       "userrights-groups-help": "您可以更改此使用者所屬的群組:\n* 已勾選的核選方塊代表該使用者屬於該群組。\n* 勾選的核選方塊代表該使用者不屬於該群組。\n* 有 * 號標示代表一旦加入該群組後便不能移除,反之亦然。",
+       "userrights-groupsmember": "所屬群組:",
+       "userrights-groupsmember-auto": "所屬隱含群組:",
+       "userrights-groups-help": "您可以更改此使用者所屬的群組:\n* 已勾選的核選方塊代表該使用者屬於該群組。\n* 勾選的核選方塊代表該使用者不屬於該群組。\n* 有 * 號標示代表一旦加入該群組後便不能移除,反之亦然。",
        "userrights-reason": "原因:",
        "userrights-no-interwiki": "您沒有權限去編輯其它使用者在 Wiki 上的權限。",
        "userrights-nodatabase": "資料庫$1不存在或並非為本地的。",
        "userrights-nologin": "您必須 [[Special:UserLogin|登入]] 管理員帳號以指定使用者權限。",
        "userrights-notallowed": "你無權加入或刪除使用者權限。",
-       "userrights-changeable-col": "您可以更改的群組",
-       "userrights-unchangeable-col": "您不可以更改的群組",
+       "userrights-changeable-col": "您可變更的群組",
+       "userrights-unchangeable-col": "您不可變更的群組",
        "userrights-conflict": "使用者權限更改發生衝突!請重新檢視並確認你的更改。",
        "userrights-removed-self": "您已成功移除自己的權限,故此您沒法再次訪問此頁。",
        "group": "群組:",
        "right-createpage": "建立頁面 (不含討論頁面)",
        "right-createtalk": "建立討論頁面",
        "right-createaccount": "建立新的使用者帳號",
-       "right-minoredit": "標示編輯為小修訂",
+       "right-minoredit": "標示編輯為小修訂",
        "right-move": "移動頁面",
        "right-move-subpages": "移動頁面與其子頁面",
        "right-move-rootuserpages": "移動根使用者頁面",
        "right-reupload-own": "覆蓋由同一位上載的檔案",
        "right-reupload-shared": "於本地無視共用媒體檔案庫上的檔案",
        "right-upload_by_url": "由一個URL上載檔案",
-       "right-purge": "不需要確認之下清除網站快取",
-       "right-autoconfirmed": "不受基於IP的頻率限制",
+       "right-purge": "不確認清除網站快取",
+       "right-autoconfirmed": "不受以 IP 為基礎的註冊頻率限制",
        "right-bot": "視為一個自動程序",
        "right-nominornewtalk": "若討論頁面為小修訂,則不顯示新訊息提示",
-       "right-apihighlimits": "在API查詢中使用更高的上限",
-       "right-writeapi": "使用API編寫",
+       "right-apihighlimits": "API 查詢中可使用較高上限值",
+       "right-writeapi": "使用寫入 API",
        "right-delete": "刪除頁面",
        "right-bigdelete": "刪除大量歷史之頁面",
        "right-deletelogentry": "刪除及恢復特定的日誌項目",
        "right-protect": "更改保護等級以及編輯被連鎖保護的頁面",
        "right-editprotected": "編輯保護層級為「{{int:protect-level-sysop}}」的頁面",
        "right-editsemiprotected": "編輯保護層級為「{{int:protect-level-autoconfirmed}}」的頁面",
-       "right-editinterface": "編輯使用者面",
+       "right-editinterface": "編輯使用者面",
        "right-editusercssjs": "編輯其他使用者的 CSS 和 JavaScript 檔案",
        "right-editusercss": "編輯其他使用者的 CSS 檔案",
        "right-edituserjs": "編輯其他使用者的 JavaScript 檔案",
        "action-createpage": "建立這個頁面",
        "action-createtalk": "建立討論頁面",
        "action-createaccount": "建立這個使用者帳號",
+       "action-history": "查閱此頁面歷史",
        "action-minoredit": "標示此編輯為小修訂",
        "action-move": "移動這個頁面",
        "action-move-subpages": "移動這個頁面跟它的子頁面",
        "enhancedrc-history": "歷史",
        "recentchanges": "最近變更",
        "recentchanges-legend": "最近變更選項",
-       "recentchanges-summary": "追蹤該 Wiki 在此頁面的最近變更。",
+       "recentchanges-summary": "追蹤 Wiki 中此頁面的最近變更。",
        "recentchanges-noresult": "在所選擇的時間裡沒有任何更改與所給條件吻合。",
        "recentchanges-feed-description": "追蹤該 Wiki 在此頁面的最近變更。",
-       "recentchanges-label-newpage": "這次編輯建立了一個新頁面",
-       "recentchanges-label-minor": "是一個小修訂",
-       "recentchanges-label-bot": "這次編輯是由機器人進行",
+       "recentchanges-label-newpage": "該次編輯建立了新頁面",
+       "recentchanges-label-minor": "該次編輯是一個小修訂",
+       "recentchanges-label-bot": "該次編輯為機器人所執行",
        "recentchanges-label-unpatrolled": "這次編輯尚未巡查過",
-       "recentchanges-label-plusminus": "更改前後頁面位元組大小的變化",
+       "recentchanges-label-plusminus": "頁面更改的位元組大小",
        "recentchanges-legend-heading": "'''說明:'''",
-       "recentchanges-legend-newpage": "(è¦\8b[[Special:NewPages|æ\96°é \81é\9d¢å\88\97表]])",
+       "recentchanges-legend-newpage": "(è«\8bå\8f\83è\80\83 [[Special:NewPages|æ\9c\80æ\96°é \81é\9d¢]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "ä¸\8bé\9d¢æ\98¯è\87ª<strong>$2</strong>èµ·ä¹\8bæ\9b´æ\94¹ï¼\88è\87³å¤\9a顯示<strong>$1</strong>å\80\8bï¼\89。",
-       "rclistfrom": "顯示è\87ª $3 $2 ä»¥ä¾\86ç\9a\84æ\96°變更",
-       "rcshowhideminor": "$1 小修訂",
+       "rcnotefrom": "以ä¸\8bç\82ºè\87ª <strong>$2</strong> èµ·ç\9a\84æ\9b´æ\94¹ (æ\9c\80å¤\9a顯示<strong>$1</strong> ç­\86)。",
+       "rclistfrom": "顯示è\87ª $3 $2 ä»¥ä¾\86ç\9a\84æ\9c\80è¿\91變更",
+       "rcshowhideminor": "$1 小修訂",
        "rcshowhideminor-show": "顯示",
        "rcshowhideminor-hide": "隱藏",
-       "rcshowhidebots": "$1機器人的編輯",
+       "rcshowhidebots": "$1 機器人的編輯",
        "rcshowhidebots-show": "顯示",
        "rcshowhidebots-hide": "隱藏",
-       "rcshowhideliu": "$1 已註冊的使用者",
+       "rcshowhideliu": "$1 已註冊的使用者",
        "rcshowhideliu-show": "顯示",
        "rcshowhideliu-hide": "隱藏",
-       "rcshowhideanons": "$1 匿名的使用者",
+       "rcshowhideanons": "$1 匿名的使用者",
        "rcshowhideanons-show": "顯示",
        "rcshowhideanons-hide": "隱藏",
-       "rcshowhidepatr": "$1巡查過的編輯",
+       "rcshowhidepatr": "$1 巡查過的編輯",
        "rcshowhidepatr-show": "顯示",
        "rcshowhidepatr-hide": "隱藏",
-       "rcshowhidemine": "$1我的編輯",
+       "rcshowhidemine": "$1 我的編輯",
        "rcshowhidemine-show": "顯示",
        "rcshowhidemine-hide": "隱藏",
-       "rclinks": "顯示最近$2天內最新的$1次改動。<br />$3",
+       "rclinks": "顯示最近 $2 天內的 $1 次更改。<br />$3",
        "diff": "差異",
        "hist": "歷史",
        "hide": "隱藏",
        "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}}<nowiki>:File.jpg]]</nowiki></code>'''使用檔案的完整版本\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替換文字]]</nowiki></code>'''使用放置於左側的一個框內的 200 像素寬的圖片,同時使用「替換文字」作為描述\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''直接連結到檔案而不顯示檔案",
-       "upload-permitted": "å\87\86許的檔案類型:$1。",
+       "uploadtext": "使用下面的表單來上傳檔案。\n要檢視或搜尋以前上傳的檔案,可至 [[Special:FileList|檔案上傳清單]],(重新)上傳會在 [[Special:Log/upload|上傳日誌]] 中記錄,而刪除則會在 [[Special:Log/delete|刪除日誌]] 中記錄。\n\n要在頁面中引用檔案,可使用以下其中一種方式連結:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> 顯示完整尺吋的圖片\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> 會在左方放置一張 200 像素寬的圖片於框中,並顯示 \"alt text\" 作為描述\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 直接連結到圖片而不顯示預覽",
+       "upload-permitted": "å\85\81許的檔案類型:$1。",
        "upload-preferred": "建議的檔案類型:$1。",
        "upload-prohibited": "禁止的檔案類型:$1。",
        "uploadlogpage": "上傳日誌",
-       "uploadlogpagetext": "以ä¸\8bæ\98¯æ\9c\80è¿\91ä¸\8aè¼\89ç\9a\84æª\94æ¡\88ç\9a\84ä¸\80覽表ã\80\82\n檢è¦\96[[Special:NewFiles|æ\96°æª\94æ¡\88ç\95«å»\8a]]å\8e»ç\9c\8bæ\9b´å¯\8cå\9c\96ç\89\87ç\9a\84總覽。",
+       "uploadlogpagetext": "以ä¸\8bæ¸\85å\96®ç\82ºæ\9c\80è¿\91ä¸\8aå\82³ç\9a\84æª\94æ¡\88ã\80\82\nè«\8b檢è¦\96 [[Special:NewFiles|æ\9c\80æ\96°æª\94æ¡\88å\9c\96庫]] ä»¥è¦\96覺å\8c\96ç\9a\84æ\96¹å¼\8f檢è¦\96。",
        "filename": "檔案名稱",
        "filedesc": "檔案摘要",
        "fileuploadsummary": "檔案摘要:",
        "uploadvirus": "該檔案包含有病毒!\n詳情:$1",
        "uploadjava": "該檔案是 ZIP 檔案,其中包含 Java 的.class 檔案。\n不允許上傳 Java 檔案,是因為他們可能會跳過安全限制。",
        "upload-source": "來源檔案",
-       "sourcefilename": "來源檔案名:",
+       "sourcefilename": "來源檔案名:",
        "sourceurl": "來源網址:",
-       "destfilename": "目標檔案名:",
-       "upload-maxfilesize": "檔案最大限制大小:$1",
+       "destfilename": "目標檔案名:",
+       "upload-maxfilesize": "檔案大小限制:$1",
        "upload-description": "檔案描述",
-       "upload-options": "上選項",
+       "upload-options": "上選項",
        "watchthisupload": "監視這個檔案",
        "filewasdeleted": "之前已經有一個同名檔案被上傳後又被刪除了。在上傳此檔案之前您需要檢查$1。",
        "filename-bad-prefix": "您上傳的檔案名稱是以'''「$1」'''作為開頭,通常這種沒有含意的檔案名稱是由數碼相機中自動編排。請在您的檔案中重新選擇一個更加有意義的檔案名稱。",
        "backend-fail-notsame": "「$1」已存在不同的檔案。",
        "backend-fail-invalidpath": "「$1」不是有效的存儲路徑。",
        "backend-fail-delete": "無法刪除「$1」檔案。",
-       "backend-fail-describe": "無法修改檔案 \"$1\" 的 metadata。",
+       "backend-fail-describe": "無法修改檔案 \"$1\" 的資料定義。",
        "backend-fail-alreadyexists": "檔案「$1」已存在。",
        "backend-fail-store": "無法在$2存儲文件$1。",
        "backend-fail-copy": "無法複製文件$1到$2。",
        "listfiles-latestversion-no": "否",
        "file-anchor-link": "檔案",
        "filehist": "檔案歷史",
-       "filehist-help": "點擊日期/時間以檢視當時出現過的檔案。",
+       "filehist-help": "點選日期/時間以檢視該時間的檔案版本。",
        "filehist-deleteall": "刪除全部",
        "filehist-deleteone": "刪除",
-       "filehist-revert": "恢復",
+       "filehist-revert": "還原",
        "filehist-current": "目前",
-       "filehist-datetime": "日期時間",
+       "filehist-datetime": "日期/時間",
        "filehist-thumb": "縮圖",
        "filehist-thumbtext": "於$1的縮圖版本",
        "filehist-nothumb": "沒有縮圖",
        "filehist-user": "使用者",
-       "filehist-dimensions": "維度",
+       "filehist-dimensions": "尺寸",
        "filehist-filesize": "檔案大小",
        "filehist-comment": "註解",
-       "imagelinks": "檔案使用情況",
-       "linkstoimage": "以ä¸\8bç\9a\84$1å\80\8bé \81é\9d¢é\80£æ\8e¥å\88°æ\9c¬æª\94æ¡\88:",
+       "imagelinks": "檔案使用",
+       "linkstoimage": "ä¸\8bå\88\97 $1 å\80\8bé \81é\9d¢é\80£çµ\90å\88°æ­¤æª\94æ¡\88ï¼\9a",
        "linkstoimage-more": "超過$1個頁面連接到這個檔案。\n此處只列出首$1個連接到此檔案的頁面。\n您也可以查看[[Special:WhatLinksHere/$2|完整的清單]]。",
        "nolinkstoimage": "沒有頁面連接到本檔案。",
        "morelinkstoimage": "檢視連接到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
        "sharedupload-desc-create": "此檔案來自 $1 且可能被其他專案所使用。\n若您想要編輯內容描述可至 [$2 檔案描述頁面]。",
        "filepage-nofile": "不存在此名稱的檔案。",
        "filepage-nofile-link": "不存在此名稱的檔案,但您可以[$1 上傳它]。",
-       "uploadnewversion-linktext": "上傳檔案的新版本",
+       "uploadnewversion-linktext": "上傳檔案的新版本",
        "shared-repo-from": "來自 $1",
        "shared-repo": "一個共用檔案庫",
        "shared-repo-name-wikimediacommons": "維基共享資源",
        "upload-disallowed-here": "您不可以覆蓋此檔案。",
-       "filerevert": "恢復$1",
+       "filerevert": "還原 $1",
        "filerevert-legend": "恢復檔案",
-       "filerevert-intro": "您現正在恢復檔案'''[[Media:$1|$1]]'''到[$4 於$2 $3的版本]。",
+       "filerevert-intro": "您現正在還原檔案 <strong>[[Media:$1|$1]]</strong> 至 [$4 於 $2 $3 的版本]。",
        "filerevert-comment": "理由:",
-       "filerevert-defaultcomment": "已經恢復到於$1 $2的版本",
+       "filerevert-defaultcomment": "已還原到於 $1 $2 的版本",
        "filerevert-submit": "恢復",
-       "filerevert-success": "'''[[Media:$1|$1]]'''已經恢復到[$4 於$2 $3的版本]。",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> 已經還原到 [$4 於 $2 $3 的版本]。",
        "filerevert-badversion": "這個檔案所提供的時間截記並無先前的本地版本。",
        "filedelete": "刪除$1",
        "filedelete-legend": "刪除檔案",
        "mimetype": "MIME 類型:",
        "download": "下載",
        "unwatchedpages": "未被監視的頁面",
-       "listredirects": "重新導向清單",
+       "listredirects": "重新導向頁面清單",
        "listduplicatedfiles": "重複檔案列表",
        "listduplicatedfiles-summary": "以下列表中某檔案之最新版本與其他檔案之最新版本重複。進包含本地檔案",
        "listduplicatedfiles-entry": "檔案[[:File:$1|$1]]與[[$3|其他$2個重複]]。",
        "unusedtemplates": "未使用的樣版",
-       "unusedtemplatestext": "此頁列出所有於 {{ns:template}} 命名空間下未被其他頁面引用的頁面。\n請在刪除這些樣版前檢查其他使用該樣版的頁面。",
+       "unusedtemplatestext": "此頁面列出所有於 {{ns:template}} 命名空間下未被其他頁面引用的樣版。\n在刪除前,仍需檢查是否有連結這些樣版的其他頁面。",
        "unusedtemplateswlh": "其他連結",
        "randompage": "隨機頁面",
        "randompage-nopages": "在{{PLURAL:$2|命名空間}}中沒有任何頁面:$1。",
        "statistics-views-total-desc": "不存在頁面和特殊頁面的查看數未計入",
        "statistics-views-peredit": "每次編輯檢視數",
        "statistics-users": "已註冊的 [[Special:ListUsers|使用者]]",
-       "statistics-users-active": "活使用者",
+       "statistics-users-active": "活使用者",
        "statistics-users-active-desc": "在最近 $1 天操作過的使用者",
        "statistics-mostpopular": "被查閱次數最多的頁面",
-       "pageswithprop": "æ\9c\89é \81é\9d¢屬性的頁面",
+       "pageswithprop": "æ\93\81æ\9c\89屬性的頁面",
        "pageswithprop-legend": "有頁面屬性的頁面",
        "pageswithprop-text": "此頁列出所有頁面使用了特定的頁面屬性。",
        "pageswithprop-prop": "屬性名稱:",
        "double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重新導向至 [[$2]]。",
        "double-redirect-fixed-maintenance": "作為維護工作自動修復於[[$1]]至[[$2]]之雙重重定向。",
        "double-redirect-fixer": "重新導向修正器",
-       "brokenredirects": "中斷的重新導向頁面",
+       "brokenredirects": "損壞的重新導向頁面",
        "brokenredirectstext": "以下的重新導向頁面連結到不存在的頁面:",
        "brokenredirects-edit": "編輯",
        "brokenredirects-delete": "刪除",
        "withoutinterwiki": "未有語言連結的頁面",
-       "withoutinterwiki-summary": "以ä¸\8bç\9a\84é \81é\9d¢æ\98¯æ\9cªæ\9c\89èª\9eè¨\80é\80£çµ\90å\88°å\85¶å®\83èª\9eè¨\80ç\89\88æ\9c¬。",
-       "withoutinterwiki-legend": "å\89\8d綴",
+       "withoutinterwiki-summary": "ä¸\8bå\88\97æ\98¯æ²\92æ\9c\89é\80£çµ\90å\88°å\85¶å®\83èª\9eè¨\80ç\89\88æ\9c¬ç\9a\84é \81é\9d¢。",
+       "withoutinterwiki-legend": "å­\97é¦\96",
        "withoutinterwiki-submit": "顯示",
        "fewestrevisions": "最少修訂的頁面",
        "nbytes": "$1 個位元組",
        "ncategories": "$1 個分類",
        "ninterwikis": "$1 個跨維基",
-       "nlinks": "$1個連結",
+       "nlinks": "$1 個連結",
        "nmembers": "$1個成員",
        "nmemberschanged": "$1 → $2個成員",
        "nrevisions": "$1個修訂",
        "ntransclusions": "用於$1個頁面中",
        "specialpage-empty": "這個報告的結果為空。",
        "lonelypages": "孤立頁面",
-       "lonelypagestext": "以ä¸\8bé \81é\9d¢å°\9aæ\9cªè¢«{{SITENAME}}中ç\9a\84å\85¶å®\83é \81é\9d¢é\80£çµ\90æ\88\96被ä¹\8bå\8c\85å\90«。",
+       "lonelypagestext": "ä¸\8bå\88\97é \81é\9d¢å°\9aæ\9cªè¢« {{SITENAME}} ä¸­ç\9a\84å\85¶å®\83é \81é\9d¢é\80£çµ\90æ\88\96å¼\95ç\94¨。",
        "uncategorizedpages": "待分類頁面",
        "uncategorizedcategories": "待分類類別",
        "uncategorizedimages": "待分類檔案",
        "uncategorizedtemplates": "待分類樣版",
        "unusedcategories": "未使用的分類",
-       "unusedimages": "未使用圖片",
+       "unusedimages": "未使用的檔案",
        "popularpages": "熱點頁面",
        "wantedcategories": "需要的分類",
-       "wantedpages": "待撰頁面",
+       "wantedpages": "需要的頁面",
        "wantedpages-badtitle": "在結果組上的無效標題: $1",
        "wantedfiles": "需要的檔案",
        "wantedfiletext-cat": "以下檔案被使用,但不存在。外部儲存庫的文件儘管現有,但可能會在此列出,任何此類的誤報將被<del>剔除</del>。此外,內嵌了不存在的檔案的網頁將在[[:$1]]列出。",
        "mostimages": "最多連結檔案",
        "mostinterwikis": "最多跨維基頁面",
        "mostrevisions": "最多修訂頁面",
-       "prefixindex": "所有有前綴的頁面",
+       "prefixindex": "所有頁面與字首",
        "prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)",
-       "prefixindex-strip": "於列表中省略前綴",
-       "shortpages": "頁面",
-       "longpages": "é\95·頁面",
-       "deadendpages": "斷連頁面",
-       "deadendpagestext": "以下頁面沒有連結到{{SITENAME}}中的其它頁面。",
+       "prefixindex-strip": "於清單中省略字首",
+       "shortpages": "過短的頁面",
+       "longpages": "é\81\8eé\95·ç\9a\84頁面",
+       "deadendpages": "無連結頁面",
+       "deadendpagestext": "以下在 {{SITENAME}} 中的頁面未連結到其他頁面。",
        "protectedpages": "受保護頁面",
-       "protectedpages-indef": "只有無期之保護頁面",
-       "protectedpages-summary": "æ­¤é \81é\9d¢å\88\97å\87ºç\95¶å\89\8då\8f\97ä¿\9dè­·ä¹\8bé \81é\9d¢ã\80\82欲訪å\95\8få\8f\97ç\99½ç´\99ä¿\9dè­·ä¹\8bæ¨\99é¡\8cå\88\97表ï¼\8cè«\8bå\8f\83è¦\8b[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。",
-       "protectedpages-cascade": "只有連鎖之保護頁面",
+       "protectedpages-indef": "只顯示無限期的保護頁面",
+       "protectedpages-summary": "æ­¤é \81é\9d¢å\88\97å\87ºç\9b®å\89\8då\8f\97ä¿\9dè­·ç\9a\84é \81é\9d¢ã\80\82 æ¬²æ\9f¥è©¢å\8f\97ä¿\9dè­·æ¨\99é¡\8cæ¸\85å\96®ï¼\8cè«\8bå\8f\83è\80\83 [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。",
+       "protectedpages-cascade": "只顯示連鎖的保護頁面",
        "protectedpages-noredirect": "隱藏重新導向頁面",
        "protectedpagesempty": "在這些參數下沒有頁面正在保護。",
-       "protectedpages-timestamp": "æ\99\82é\96\93æ\88³",
+       "protectedpages-timestamp": "æ\97¥æ\9c\9fæ\99\82é\96\93",
        "protectedpages-page": "頁面",
        "protectedpages-expiry": "期限",
        "protectedpages-performer": "保護使用者",
        "protectedpages-unknown-timestamp": "未知",
        "protectedpages-unknown-performer": "不明的使用者",
        "protectedtitles": "受保護標題",
-       "protectedtitles-summary": "æ­¤é \81é\9d¢å\88\97å\87ºç\95¶å\89\8då\8f\97ç\99½ç´\99ä¿\9dè­·ä¹\8bæ¨\99é¡\8cã\80\82欲訪å\95\8få\8f\97ä¿\9dè­·é \81é\9d¢ä¹\8bå\88\97表ï¼\8cè«\8bå\8f\83è¦\8b[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。",
+       "protectedtitles-summary": "æ­¤é \81é\9d¢å\88\97å\87ºç\9b®å\89\8då\8f\97ä¿\9dè­·ç\9a\84æ¨\99é¡\8cã\80\82 æ¬²æ\9f¥è©¢å\8f\97ä¿\9dè­·é \81é\9d¢æ¸\85å\96®ï¼\8cè«\8bå\8f\83è\80\83 [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。",
        "protectedtitlesempty": "在這些參數之下並無標題正在保護。",
        "listusers": "使用者清單",
        "listusers-editsonly": "只顯示有編輯的使用者",
-       "listusers-creationsort": "建立日期排序",
+       "listusers-creationsort": "建立日期排序",
        "listusers-desc": "使用降冪排序",
        "usereditcount": "$1 次{{PLURAL:$1|編輯}}",
        "usercreated": "於 $1 $2 {{GENDER:$3|建立}}",
        "ancientpages": "最舊頁面",
        "move": "移動",
        "movethispage": "移動本頁",
-       "unusedimagestext": "下列檔案未有嵌入任何頁面但它仍然存在。\n請注意其它網站可能直接透過 URL 連結此檔案,所以這裡列出的圖片有可能依然被使用。",
-       "unusedcategoriestext": "é\9b\96ç\84¶æ²\92æ\9c\89被å\85¶å®\83é \81é\9d¢æ\88\96è\80\85å\88\86é¡\9eæ\89\80æ\8e¡ç\94¨ï¼\8cä½\86å\88\97表中ç\9a\84å\88\86é¡\9eé \81ä¾\9dç\84¶å­\98å\9c¨ã\80\82",
+       "unusedimagestext": "下列為未被任何頁面使用的檔案。\n請注意,其它網站可能直接透過 URL 連結至檔案,所以這裡列出的檔案仍有可能被使用。",
+       "unusedcategoriestext": "ä¸\8bå\88\97å\88\86é¡\9eæ²\92æ\9c\89被å\85¶å®\83é \81é\9d¢æ\88\96è\80\85å\88\86é¡\9eæ\89\80使ç\94¨ã\80\82",
        "notargettitle": "無目標",
        "notargettext": "您尚未指定目標頁面或使用者以進行此項操作。",
        "nopagetitle": "無目標頁面",
        "pager-older-n": "較舊 $1 筆",
        "suppress": "監督",
        "querypage-disabled": "此特殊頁面基於效能的原因已經被停用。",
-       "booksources": "網路書源",
-       "booksources-search-legend": "尋找網路書源",
+       "booksources": "圖書資源",
+       "booksources-search-legend": "尋找圖書資源",
        "booksources-isbn": "國際標準書號:",
        "booksources-go": "送出",
        "booksources-text": "以下是一份銷售新書或二手書的列表,並可能有{{GENDER:|你|妳|你}}正尋找的書的進一步訊息:",
        "allarticles": "所有頁面",
        "allinnamespace": "所有頁面 ($1 命名空間)",
        "allpagessubmit": "提交",
-       "allpagesprefix": "顯示有此前綴的頁面:",
-       "allpagesbadtitle": "給定的頁面標題是非法的,或者具有一個內部語言或內部 wiki 的前綴。它可能包含一個或更多的不能用於標題的字元。",
+       "allpagesprefix": "顯示以此為字首頁面:",
+       "allpagesbadtitle": "指定的頁面標題無效、包含內部語言或內部 Wiki 的字首。\n它可能包含一個或多個的不能用於標題的字元。",
        "allpages-bad-ns": "{{SITENAME}} 沒有 \"$1\" 命名空間。",
        "allpages-hide-redirects": "隱藏重新導向頁面",
        "cachedspecial-viewing-cached-ttl": "你正在瀏覽本頁的緩存版本,至多可能存在$1的延遲。",
        "cachedspecial-viewing-cached-ts": "您正在閱讀此頁的緩存版本,這可能不是完整的版本。",
        "cachedspecial-refresh-now": "查看最新。",
        "categories": "頁面分類",
-       "categoriespagetext": "以ä¸\8bç\9a\84{{PLURAL:$1|å\88\86é¡\9e}}中å\8c\85å\90«äº\86é \81é\9d¢æ\88\96åª\92é«\94ã\80\82\n[[Special:UnusedCategories|æ\9cªç\94¨å\88\86é¡\9e]]ä¸\8dæ\9c\83å\9c¨é\80\99è£\8få\88\97示ã\80\82\nè«\8bå\90\8cæ\99\82å\8f\83é\96±[[Special:WantedCategories|需要的分類]]。",
+       "categoriespagetext": "ä¸\8bå\88\97ç\82ºå\8c\85å\90«é \81é\9d¢æ\88\96åª\92é«\94ç\9a\84{{PLURAL:$1|å\88\86é¡\9e}}ã\80\82\n[[Special:UnusedCategories|æ\9cªä½¿ç\94¨ç\9a\84å\88\86é¡\9e]] ä¸\8dæ\9c\83å\9c¨æ­¤é¡¯ç¤ºã\80\82\nè«\8bå\8f\83è\80\83 [[Special:WantedCategories|需要的分類]]。",
        "categoriesfrom": "顯示由此項起之分類:",
        "special-categories-sort-count": "按數量排列",
        "special-categories-sort-abc": "按字母排列",
        "listusers-submit": "顯示",
        "listusers-noresult": "查無使用者。",
        "listusers-blocked": "(已封鎖)",
-       "activeusers": "æ\9c\89æ´»å\8b\95ç\9a\84使ç\94¨è\80\85æ¸\85å\96®",
+       "activeusers": "活動的使用者清單",
        "activeusers-intro": "此清單為最近 $1 天有活動的使用者。",
-       "activeusers-count": "最近$3天內有$1次編輯",
+       "activeusers-count": "最近 $3 天內有 $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:群組權限",
        "trackingcategories": "跟蹤分類",
        "trackingcategories-summary": "此頁面列出由 MediaWiki 系統自動產生用來追蹤頁面的分類,這些分類的名稱可由命名空間 {{ns:8}} 中的相關系統訊息中修改。",
        "trackingcategories-msg": "跟蹤分類",
-       "trackingcategories-name": "è³\87è¨\8aå\90\8d",
+       "trackingcategories-name": "è¨\8aæ\81¯å\90\8d稱",
        "trackingcategories-desc": "分類收錄準則",
        "noindex-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__NOINDEX__</nowiki></code> 未被機器人列入索引的頁面。",
        "index-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__INDEX__</nowiki></code> 被機器人列入索引的頁面。",
        "dellogpage": "刪除紀錄",
        "dellogpagetext": "以下是最近的刪除的列表。",
        "deletionlog": "刪除紀錄",
-       "reverted": "恢復到早期版本",
+       "reverted": "還原到較早的版本",
        "deletecomment": "理由:",
        "deleteotherreason": "其它/附加的理由:",
        "deletereasonotherlist": "其它理由",
        "rollbacklinkcount": "還原 $1 次編輯",
        "rollbacklinkcount-morethan": "回退多過 $1 次{{PLURAL:$1|編輯}}",
        "rollbackfailed": "還原失敗",
-       "cantrollback": "無法恢復編輯;最後的貢獻者是本篇的唯一作者。",
+       "cantrollback": "無法還原編輯;\n此頁面的最後貢獻者是唯一的作者。",
        "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]] 所修訂的版本",
        "protect-otherreason-op": "其它理由",
        "protect-dropdown": "*通用保護理由\n** 過量的破壞\n** 過量的灌水\n** 反生產性編輯戰\n** 高流量頁面",
        "protect-edit-reasonlist": "編輯保護理由",
-       "protect-expiry-options": "1小時:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,不限期:infinite",
-       "restriction-type": "權限:",
-       "restriction-level": "限制級別:",
-       "minimum-size": "最小大小",
-       "maximum-size": "最大大小:",
+       "protect-expiry-options": "1 小時:1 hour,1 天:1 day,1 週:1 week,2 週:2 weeks,1 個月:1 month,3 個月:3 months,6 個月:6 months,1 年:1 year,不限期:infinite",
+       "restriction-type": "權限",
+       "restriction-level": "限制級別",
+       "minimum-size": "大小下限",
+       "maximum-size": "大小上限:",
        "pagesize": "(位元組)",
        "restriction-edit": "編輯",
        "restriction-move": "移動",
        "isredirect": "重新導向頁面",
        "istemplate": "包含",
        "isimage": "檔案連結",
-       "whatlinkshere-prev": "前$1個",
-       "whatlinkshere-next": "後$1個",
+       "whatlinkshere-prev": "前 $1 筆",
+       "whatlinkshere-next": "後 $1 筆",
        "whatlinkshere-links": "← 連入",
-       "whatlinkshere-hideredirs": "重新導向 $1 次",
+       "whatlinkshere-hideredirs": "$1 重新導向頁面",
        "whatlinkshere-hidetrans": "$1嵌入",
        "whatlinkshere-hidelinks": "$1連結",
        "whatlinkshere-hideimages": "$1檔案連結",
        "blockip": "封鎖使用者",
        "blockip-legend": "封鎖使用者",
        "blockiptext": "填寫以下單據可封鎖特定 IP 位置或使用者名稱的存取權限。\n這個動作應用來避免破壞行為,可根據 [[{{MediaWiki:Policy-url}}|管理政策]]。\n請在下方填寫一個具體的原因 (例如:引述一段破壞頁面的事實)。",
-       "ipadressorusername": "IP 位址或使用者名稱:",
+       "ipaddressorusername": "IP 位址或使用者名稱:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*常見的封鎖原因\n** 填寫不實資訊\n** 刪除頁面內容\n** 散佈外部廣告連結\n** 在頁面填寫無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 使用不受歡迎的使用者名稱",
        "blocklist-tempblocks": "隱藏暫時封鎖",
        "blocklist-addressblocks": "隱藏單一 IP 封鎖",
        "blocklist-rangeblocks": "隱藏 IP 範圍封鎖",
-       "blocklist-timestamp": "時間",
+       "blocklist-timestamp": "æ\97¥æ\9c\9fæ\99\82é\96\93",
        "blocklist-target": "目標",
        "blocklist-expiry": "期限",
        "blocklist-by": "封鎖的管理員",
        "unblocklink": "解除封鎖",
        "change-blocklink": "變更封鎖",
        "contribslink": "貢獻",
-       "emaillink": "傳送電郵",
+       "emaillink": "發送電子郵件",
        "autoblocker": "您的 IP 位址因最近被 [[User:$1|$1]] 使用過而被自動封鎖。\n封鎖 $1 的原因為 \"$2\"",
        "blocklogpage": "查封日誌",
        "blocklog-showlog": "此使用者先前被封鎖過。\n以下為封鎖紀錄以供參考:",
        "lockedbyandtime": "在$2的$3由$1",
        "move-page": "移動$1",
        "move-page-legend": "移動頁面",
-       "movepagetext": "使用以下表單來重新命名一個頁面的名稱,並將所有頁面的歷史記錄一併移至新的頁面,\n舊標題的頁面將會變成重新導向頁面,導向至使用新標題的頁面。\n您可以選擇自動更新將所有導向至舊頁面的重新導向頁面改導向到新的頁面,\n若您選擇不使用自動更新,請記得檢查 [[Special:DoubleRedirects|雙重導向頁面]] 或 [[Special:BrokenRedirects|中斷的導向頁面]],\n您有責任讓連結維持有效並且能夠繼續連結到正確的新頁面。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>被移動,除非新名稱存在的是重新導向頁面且沒有任何的編修記錄。\n這個意思指的是,您可將因失誤而移動至其他名稱的頁面復原為舊的名稱,並且您不可以覆蓋任何已存在的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面可能是一個重大與唐突的更改;\n請在行動前確認您已了解可能帶來後果。",
+       "movepagetext": "使用以下表單來重新命名一個頁面的名稱,並將所有頁面的歷史記錄一併移至新的頁面,\n舊標題的頁面將會變成重新導向頁面,導向至使用新標題的頁面。\n您可以選擇自動更新將所有導向至舊頁面的重新導向頁面改導向到新的頁面,\n若您選擇不使用自動更新,請記得檢查 [[Special:DoubleRedirects|雙重的重新導向頁面]] 或 [[Special:BrokenRedirects|損壞的重新導向頁面]],\n您有責任讓連結維持有效並且能夠繼續連結到正確的新頁面。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>被移動,除非新名稱存在的是重新導向頁面且沒有任何的編修記錄。\n這個意思指的是,您可將因失誤而移動至其他名稱的頁面復原為舊的名稱,並且您不可以覆蓋任何已存在的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面可能是一個重大與唐突的更改;\n請在行動前確認您已了解可能帶來後果。",
        "movepagetext-noredirectfixer": "使用以下表單來重新命名一個頁面的名稱,並將所有頁面的歷史記錄一併移至新的頁面,\n舊標題的頁面將會變成重新導向頁面,導向至使用新標題的頁面。\n請記得檢查 [[Special:DoubleRedirects|雙重導向頁面]] 或 [[Special:BrokenRedirects|中斷的導向頁面]],\n您有責任讓連結維持有效並且能夠繼續連結到正確的新頁面。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>被移動,除非新名稱存在的是重新導向頁面且沒有任何的編修記錄。\n這個意思指的是,您可將因失誤而移動至其他名稱的頁面復原為舊的名稱,並且您不可以覆蓋任何已存在的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面可能是一個重大與唐突的更改;\n請在行動前確認您已了解可能帶來後果。",
        "movepagetalktext": "相關的的對話頁面 (如果有的話) 會自動與該頁面一起移動,<strong>除非:</strong>\n*新的名稱已有一個存在的對話頁面,或\n*您未勾選此核選方塊。\n\n在上述情況下,若有必要您必須手動移動或合併已存在的頁面。",
        "movearticle": "移動頁面:",
        "movesubpagetext": "這個頁面有$1個子頁面列示如下。",
        "movenosubpage": "這個頁面沒有子頁面。",
        "movereason": "原因",
-       "revertmove": "恢復該移動",
+       "revertmove": "還原",
        "delete_and_move": "刪除並移動",
        "delete_and_move_text": "==需要刪除==\n\n目標頁面\"[[:$1]]\"已經存在。{{GENDER:|你|妳|你}}確認需要刪除原頁面並以進行移動嗎?",
        "delete_and_move_confirm": "是的,刪除此頁面",
        "allmessages-filter-legend": "搜尋",
        "allmessages-filter": "以自定狀況過濾:",
        "allmessages-filter-unmodified": "未修改",
-       "allmessages-filter-all": "所有",
+       "allmessages-filter-all": "全部",
        "allmessages-filter-modified": "曾修改",
-       "allmessages-prefix": "以å\89\8d綴é\81\8e濾:",
+       "allmessages-prefix": "以å­\97é¦\96æ\90\9cå°\8b:",
        "allmessages-language": "語言:",
        "allmessages-filter-submit": "往",
        "allmessages-filter-translate": "翻譯",
        "tooltip-recreate": "重建該頁面,無論是否被刪除。",
        "tooltip-upload": "開始上傳",
        "tooltip-rollback": "點選 \"還原\" 還原至上位貢獻者對此頁面的編輯",
-       "tooltip-undo": "「復原」可以在編輯模式上開啟編輯表格以便恢復。它容許在摘要中加入原因。",
+       "tooltip-undo": "\"還原\" 可還原此編輯並以預覽模式開啟編輯表單,讓您可在摘要中加入原因。",
        "tooltip-preferences-save": "儲存偏好設定",
        "tooltip-summary": "輸入一個簡短的摘要",
        "interlanguage-link-title": "$1 – $2",
        "spamprotectiontext": "您欲儲存的文字內容已被垃圾過濾器封鎖,\n可能因您的內容包含了已封鎖的外部連結。",
        "spamprotectionmatch": "觸發了我們的垃圾過濾器的文本如下:$1",
        "spambot_username": "MediaWiki 廣告清除",
-       "spam_reverting": "恢復到不包含連結至$1的最近修訂版本",
+       "spam_reverting": "還原到未包含連結至 $1 的最新修訂",
        "spam_blanking": "所有包含連結至$1的修訂,清空",
        "spam_deleting": "所有包含連結至$1的修訂,刪除中",
        "simpleantispam-label": "反濫發電郵檢查。\n'''不要'''加入這個!",
        "filedelete-old-unregistered": "所指定的檔案修訂「$1」在資料庫中不存在。",
        "filedelete-current-unregistered": "所指定的檔案「$1」在資料庫中不存在。",
        "filedelete-archive-read-only": "存檔目錄「$1」在網頁伺服器中不可寫。",
-       "previousdiff": "←上一版本",
-       "nextdiff": "下一版本→",
-       "mediawarning": "'''警告''': 該檔案類型可能包含惡意代碼。\n執行它可能對您的系統帶來危險。",
-       "imagemaxsize": "å½±å\83\8f大å°\8fé\99\90å\88¶ï¼\9a<br />''ï¼\88ç\94¨å\9c¨æª\94æ¡\88æ\8f\8fè¿°é \81é\9d¢ä¸­ï¼\89''",
-       "thumbsize": "縮圖大小:",
-       "widthheightpage": "$1 × $2, $3頁",
-       "file-info": "檔案大小: $1, MIME 類型: $2",
-       "file-info-size": "$1 × $2 像素,檔案大小:$3,MIME類型:$4",
-       "file-info-size-pages": "$1 × $2像素,檔案大小: $3,檔案類型: $4, $5 {{PLURAL:$5|頁}}",
+       "previousdiff": "← 較舊編輯",
+       "nextdiff": "較新編輯 →",
+       "mediawarning": "<strong>警告</strong>:此檔案類型可能包含惡意代碼。\n若執行可能對您的系統造成損害。",
+       "imagemaxsize": "å\9c\96ç\89\87大å°\8fé\99\90å\88¶ï¼\9a<br /><em>(ç\94¨æ\96¼æª\94æ¡\88æ\8f\8fè¿°é \81é\9d¢)</em>",
+       "thumbsize": "縮圖大小:",
+       "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 類型:$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",
+       "svg-long-error": "無效的 SVG 檔案:$1",
        "show-big-image": "原始檔案",
-       "show-big-image-preview": "此預覽的大小:$1.",
+       "show-big-image-preview": "預覽大小:$1。",
        "show-big-image-other": "其他{{PLURAL:$2||}}解析度:$1。",
        "show-big-image-size": "$1 × $2 像素",
        "file-info-gif-looped": "循環",
-       "file-info-gif-frames": "$1",
+       "file-info-gif-frames": "$1 畫格",
        "file-info-png-looped": "循環",
-       "file-info-png-repeat": "已播放$1次",
-       "file-info-png-frames": "$1",
-       "file-no-thumb-animation": "'''注意: 由於技術限制,不能播放此檔案縮圖的動畫。'''",
-       "file-no-thumb-animation-gif": "'''注意: 由於技術限制,不能播放此高解析度GIF圖像縮圖的動畫。'''",
-       "newimages": "æ\96°å»ºå\9c\96ç\89\87ç\95«å»\8a",
+       "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": "æ\9c\80æ\96°æª\94æ¡\88å\9c\96庫",
        "imagelisttext": "以下是按$2排列的'''$1'''個檔案列表。",
-       "newimages-summary": "這個特殊頁面中顯示最後已上傳的檔案。",
+       "newimages-summary": "此特殊頁面中顯示最新上傳的檔案。",
        "newimages-legend": "搜尋",
-       "newimages-label": "檔案名稱(或它的一部份):",
-       "showhidebots": "(機器人$1)",
+       "newimages-label": "檔案名稱 (或部份):",
+       "newimages-showbots": "顯示機械人上載",
        "noimages": "無可檢視圖片。",
        "ilsubmit": "搜尋",
        "bydate": "按日期",
        "sp-newimages-showfrom": "從$1 $2開始顯示新檔案",
-       "seconds": "$1秒",
-       "minutes": "$1分鍾",
-       "hours": "$1小時",
-       "days": "$1天",
-       "weeks": "{{PLURAL:$1|$1}}",
-       "months": "{{PLURAL:$1|$1個月}}",
-       "years": "{{PLURAL:$1|$1年}}",
-       "ago": "$1前",
+       "seconds": "$1 秒",
+       "minutes": "$1 分鍾",
+       "hours": "$1 小時",
+       "days": "$1 天",
+       "weeks": "{{PLURAL:$1|$1 週}}",
+       "months": "{{PLURAL:$1|$1 個月}}",
+       "years": "{{PLURAL:$1|$1 年}}",
+       "ago": "$1 前",
        "just-now": "剛才",
-       "hours-ago": "$1小時前",
-       "minutes-ago": "$1分鐘前",
-       "seconds-ago": "$1秒前",
-       "monday-at": "於星期一$1",
-       "tuesday-at": "於星期二$1",
-       "wednesday-at": "於星期三$1",
-       "thursday-at": "於星期四$1",
-       "friday-at": "於星期五$1",
-       "saturday-at": "於星期六$1",
-       "sunday-at": "於星期日$1",
-       "yesterday-at": "昨天$1",
+       "hours-ago": "$1 小時前",
+       "minutes-ago": "$1 分鐘前",
+       "seconds-ago": "$1 秒前",
+       "monday-at": "於星期一 $1",
+       "tuesday-at": "於星期二 $1",
+       "wednesday-at": "於星期三 $1",
+       "thursday-at": "於星期四 $1",
+       "friday-at": "於星期五 $1",
+       "saturday-at": "於星期六 $1",
+       "sunday-at": "於星期日 $1",
+       "yesterday-at": "昨天 $1",
        "bad_image_list": "請按照下列格式編寫:\n\n只有(以 * 開頭)列出的項目會被考慮。\n每一行的第一個連結必須是損毀檔案的連結。\n然後同一行後方的連結會被視為例外,即是該檔案可以在哪些頁面內被顯示。",
        "variantname-zh-hans": "‪中文(简体)",
        "variantname-zh-hant": "‪繁體中文",
        "variantname-zh": "不轉換",
        "variantname-gan-hans": "‪中文(简体)",
        "variantname-gan-hant": "‪中文(繁體)",
-       "metadata": "元數據",
+       "metadata": "資料定義",
        "metadata-help": "此檔案包含額外的資訊,可能由數位相機或掃描機所建立的。\n若修改此檔案,部份資訊將無法保留。",
        "metadata-expand": "顯示詳細資料",
        "metadata-collapse": "隱藏詳細資料",
        "exif-serialnumber": "相機的序號",
        "exif-cameraownername": "相機持有人",
        "exif-label": "標籤",
-       "exif-datetimemetadata": "元數據最後修改日期",
+       "exif-datetimemetadata": "資料定義最後修改日期",
        "exif-nickname": "非正式圖片名",
        "exif-rating": "評分(最高5分)",
        "exif-rightscertificate": "權利管理證書",
        "comma-separator": "、",
        "colon-separator": ":",
        "word-separator": "",
-       "parentheses": "($1)",
+       "parentheses": " ($1)",
        "quotation-marks": "「$1」",
        "imgmultipageprev": "← 上一頁",
        "imgmultipagenext": "下一頁 →",
        "table_pager_first": "第一頁",
        "table_pager_last": "最末頁",
        "table_pager_limit": "每頁顯示 $1 筆記錄",
-       "table_pager_limit_label": "每頁項目數︰",
+       "table_pager_limit_label": "每頁數︰",
        "table_pager_limit_submit": "送出",
        "table_pager_empty": "沒有結果",
        "autosumm-blank": "清空頁面",
        "unknown_extension_tag": "不明的擴展標籤「$1」",
        "duplicate-defaultsort": "警告: 預設的排序鍵「$2」覆蓋先前的預設排序鍵「$1」。",
        "version": "版本",
-       "version-extensions": "已經安裝的擴展",
+       "version-extensions": "已安裝的擴充套件",
        "version-specialpages": "特殊頁面",
-       "version-parserhooks": "èª\9eæ³\95é\88\8e",
+       "version-parserhooks": "èª\9eæ³\95é\80£çµ\90(Hook)",
        "version-variables": "變數",
-       "version-antispam": "垃圾防止",
+       "version-antispam": "垃圾訊息防止",
        "version-skins": "外觀",
        "version-other": "其他",
        "version-mediahandlers": "媒體處理器",
-       "version-hooks": "é\88\8e",
-       "version-parser-extensiontags": "èª\9eæ³\95æ\93´å±\95標籤",
-       "version-parser-function-hooks": "èª\9eæ³\95å\87½æ\95¸é\88\8e",
-       "version-hook-name": "é\88\8eå\90\8d",
-       "version-hook-subscribedby": "利用於",
+       "version-hooks": "é\80£çµ\90(Hooks)",
+       "version-parser-extensiontags": "èª\9eæ³\95æ\93´å\85\85標籤",
+       "version-parser-function-hooks": "èª\9eæ³\95å\87½æ\95¸é\80£çµ\90",
+       "version-hook-name": "é\80£çµ\90å\90\8d稱",
+       "version-hook-subscribedby": "署名",
        "version-version": "(版本 $1)",
-       "version-license": "MediaWiki許可證",
-       "version-ext-license": "授權",
-       "version-ext-colheader-name": "æ\93´å±\95",
+       "version-license": "MediaWiki 授權條款",
+       "version-ext-license": "授權條款",
+       "version-ext-colheader-name": "æ\93´å\85\85å¥\97件",
        "version-ext-colheader-version": "版本",
-       "version-ext-colheader-license": "許可證",
+       "version-ext-colheader-license": "授權條款",
        "version-ext-colheader-description": "說明",
        "version-ext-colheader-credits": "作者",
-       "version-license-title": "用於$1之許可證",
-       "version-license-not-found": "並無與此拓展相關之許可證資訊。",
-       "version-credits-title": "用於$1之信用",
-       "version-credits-not-found": "並無與此拓展相關之信用資訊。",
-       "version-poweredby-credits": "此維基由'''[https://www.mediawiki.org/ MediaWiki]'''驅動,版權所有 © 2001-$1 $2。",
+       "version-license-title": "$1 的授權條款",
+       "version-license-not-found": "查無此擴充套件的詳細授權條款資訊。",
+       "version-credits-title": "$1 的製作群",
+       "version-credits-not-found": "查無此擴充套件的詳細製作群資訊。",
+       "version-poweredby-credits": "此 Wiki 由 <strong>[https://www.mediawiki.org/ MediaWiki]</strong> 開發,版權所有 © 2001-$1 $2。",
        "version-poweredby-others": "其他",
-       "version-poweredby-translators": "translatewiki.net 上的翻譯者",
-       "version-credits-summary": "我們感謝以下人士為[[Special:Version|MediaWiki]]作出的貢獻。",
-       "version-license-info": "MediaWiki為自由軟件;您可依據自由軟件基金會所發表的GNU通用公共授權條款規定,就本程式再為發佈與/或修改;無論您依據的是本授權的第二版或(您自行選擇的)任一日後發行的版本。\n\nMediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任;亦無對適售性或特定目的適用性所為的默示性擔保。詳情請參照GNU通用公共授權。\n\n您應已收到附隨於本程式的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU通用公共授權的副本];如果沒有,請寫信至自由軟件基金會:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 線上閱讀]。",
-       "version-software": "已經安裝的軟",
+       "version-poweredby-translators": " translatewiki.net 翻譯人員",
+       "version-credits-summary": "我們感謝以下人士為 [[Special:Version|MediaWiki]] 作出的貢獻。",
+       "version-license-info": "MediaWiki 為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但不負任何擔保責任;亦無隱含對適售性或 特定用途的適用性的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 通用公共授權條款的副本];如果沒有,請信件通知自由軟體基金會,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": "入口URL",
-       "version-entrypoints-header-entrypoint": "入口",
+       "version-entrypoints": "入口 URL",
+       "version-entrypoints-header-entrypoint": "入口",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 條目路徑]",
        "redirect": "依檔案、使用者、頁面或修訂 ID 重新導向",
        "redirect-lookup": "尋找:",
        "redirect-value": "值:",
        "redirect-user": "使用者 ID",
-       "redirect-page": "頁面ID",
-       "redirect-revision": "頁面修訂ID",
+       "redirect-page": "頁面 ID",
+       "redirect-revision": "頁面修訂 ID",
        "redirect-file": "檔案名稱",
        "redirect-not-exists": "找不到",
-       "fileduplicatesearch": "選擇重覆檔案",
-       "fileduplicatesearch-summary": "用重覆檔案的切細值去找出檔案是否重覆。",
-       "fileduplicatesearch-legend": "æ\89¾重覆",
+       "fileduplicatesearch": "搜尋重覆檔案",
+       "fileduplicatesearch-summary": "依據雜湊值(Hash)來搜尋重複的檔案。",
+       "fileduplicatesearch-legend": "æ\90\9cå°\8b重覆",
        "fileduplicatesearch-filename": "檔案名稱:",
        "fileduplicatesearch-submit": "搜尋",
        "fileduplicatesearch-info": "$1 × $2 像素<br />檔案大小:$3<br />MIME 類型:$4",
-       "fileduplicatesearch-result-1": "檔案「$1」無完全相同的重覆。",
-       "fileduplicatesearch-result-n": "檔案「$1」有$2項完全相同的重覆。",
-       "fileduplicatesearch-noresults": "æ²\92æ\9c\89ç\99¼ç\8f¾å\90\8dç\82ºã\80\8c$1ã\80\8dç\9a\84æ\96\87件。",
+       "fileduplicatesearch-result-1": "檔案 $1 無重覆的檔案。",
+       "fileduplicatesearch-result-n": "檔案 $1 有 $2 筆重覆的檔案。",
+       "fileduplicatesearch-noresults": "æ\9f¥ç\84¡å\90\8d稱ç\82º \"$1\" ç\9a\84æª\94æ¡\88。",
        "specialpages": "特殊頁面",
-       "specialpages-note-top": "圖例",
-       "specialpages-note": "* 標準特殊頁面。\n* <span class=\"mw-specialpagerestricted\">用於重新整理的特殊頁面(可能過時)。</span>",
-       "specialpages-group-maintenance": "維護報",
+       "specialpages-note-top": "說明",
+       "specialpages-note": "* 一般特殊頁面。\n* <span class=\"mw-specialpagerestricted\">受限制的特殊頁面。</span>",
+       "specialpages-group-maintenance": "維護報",
        "specialpages-group-other": "其它特殊頁面",
        "specialpages-group-login": "登入/建立新帳號",
        "specialpages-group-changes": "最近變更與日誌",
-       "specialpages-group-media": "媒體報告和上傳",
+       "specialpages-group-media": "媒體上傳與報表",
        "specialpages-group-users": "使用者與權限",
        "specialpages-group-highuse": "常用頁面",
        "specialpages-group-pages": "頁面清單",
        "specialpages-group-pagetools": "頁面工具",
        "specialpages-group-wiki": "資料和工具",
-       "specialpages-group-redirects": "重新導向特殊頁面",
-       "specialpages-group-spam": "反垃圾工具",
+       "specialpages-group-redirects": "重新導向相關特殊頁面",
+       "specialpages-group-spam": "反垃圾訊息工具",
        "blankpage": "空白頁面",
-       "intentionallyblankpage": "這個頁面是為空白",
+       "intentionallyblankpage": "此頁面被故意設為空白。",
        "external_image_whitelist": " #留下這行一樣的文字<pre>\n#在下面(//之中間部份)輸入正規表達式\n#這些將會跟外部(已超連結的)圖片配合\n#那些配合到出來的會顯示成圖片,否則就只會顯示成連結\n#有 # 開頭的行會當成註解\n#大小寫並無區分\n\n#在這行上面輸入所有的regex。留下這行一樣的文字</pre>",
-       "tags": "有效標籤",
-       "tag-filter": "[[Special:Tags|標籤]]過濾器:",
+       "tags": "有效變更標籤",
+       "tag-filter": "[[Special:Tags|標籤]]搜尋:",
        "tag-filter-submit": "搜尋",
        "tag-list-wrapper": "([[Special:Tags|標籤]]:$2)",
        "tags-title": "標籤",
        "tags-intro": "這個頁面列示出在軟件中已標示的編輯,以及它們的解釋。",
        "tags-tag": "標籤名稱",
        "tags-display-header": "在更改清單中的出現方式",
-       "tags-description-header": "解釋完整描述",
+       "tags-description-header": "完整含意說明",
        "tags-active-header": "存檔?",
        "tags-hitcount-header": "已加上標籤的更改",
        "tags-active-yes": "是",
        "tags-active-no": "否",
        "tags-edit": "編輯",
-       "tags-hitcount": "$1次更改",
+       "tags-hitcount": "$1 次變更",
        "comparepages": "比較頁面",
-       "compare-page1": "第1頁",
-       "compare-page2": "第2頁",
-       "compare-rev1": "修訂版本1",
-       "compare-rev2": "修訂版本2",
+       "compare-page1": "第 1 頁",
+       "compare-page2": "第 2 頁",
+       "compare-rev1": "修訂 1",
+       "compare-rev2": "修訂 2",
        "compare-submit": "比較",
        "compare-invalid-title": "所指定標題無效。",
        "compare-title-not-exists": "所指定的話題不存在。",
        "htmlform-int-toohigh": "您所指定的值高於最大值$1",
        "htmlform-required": "此值是必填項",
        "htmlform-submit": "提交",
-       "htmlform-reset": "撤銷更改",
+       "htmlform-reset": "還原更改",
        "htmlform-selectorother-other": "其他",
        "htmlform-no": "否",
        "htmlform-yes": "是",
        "api-error-unknownerror": "未知錯誤:$1。",
        "api-error-uploaddisabled": "本wiki的上傳檔案功能已停用。",
        "api-error-verification-error": "本檔案可能已損壞,或副檔名錯誤。",
-       "duration-seconds": "$1秒",
-       "duration-minutes": "$1",
-       "duration-hours": "$1小時",
-       "duration-days": "$1天",
-       "duration-weeks": "$1週",
-       "duration-years": "$1年",
-       "duration-decades": "$1十年",
-       "duration-centuries": "$1世紀",
-       "duration-millennia": "$1千年",
+       "duration-seconds": "$1 秒",
+       "duration-minutes": "$1 分鐘",
+       "duration-hours": "$1 小時",
+       "duration-days": "$1 天",
+       "duration-weeks": "$1 週",
+       "duration-years": "$1 年",
+       "duration-decades": "$1{{PLURAL:$1|0 年|0 年}}",
+       "duration-centuries": "$1 世紀",
+       "duration-millennia": "$1 千年",
        "rotate-comment": "順時針旋轉圖像$1{{PLURAL:$1|度}}",
        "limitreport-title": "分析器分析資料:",
-       "limitreport-cputime": "CPU使用時間",
-       "limitreport-cputime-value": "$1秒",
+       "limitreport-cputime": "CPU 使用時間",
+       "limitreport-cputime-value": "$1 秒",
        "limitreport-walltime": "實際使用時間",
-       "limitreport-walltime-value": "$1秒",
-       "limitreport-ppvisitednodes": "預處理器訪問節點數",
-       "limitreport-ppgeneratednodes": "é \90è\99\95ç\90\86å\99¨ç\94\9fæ\88\90ç¯\80é»\9eè¨\88數",
-       "limitreport-postexpandincludesize": "展開後大小",
+       "limitreport-walltime-value": "$1 秒",
+       "limitreport-ppvisitednodes": "預處理器訪問節點數",
+       "limitreport-ppgeneratednodes": "é \90è\99\95ç\90\86å\99¨ç\94¢ç\94\9fç¯\80é»\9e次數",
+       "limitreport-postexpandincludesize": "展開後的引用大小",
        "limitreport-postexpandincludesize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
        "limitreport-templateargumentsize": "樣版參數大小",
        "limitreport-templateargumentsize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
        "limitreport-expansiondepth": "最高展開深度",
-       "limitreport-expensivefunctioncount": "高開銷分析函數數位",
+       "limitreport-expensivefunctioncount": "高分析函數次數",
        "expandtemplates": "展開樣版",
        "expand_templates_intro": "本特殊頁面會將文字中的樣版展開,可以包含支援的分析程式語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <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_xml_output": "XML 輸出",
+       "expand_templates_html_output": "原始 HTML 輸出",
        "expand_templates_ok": "確定",
        "expand_templates_remove_comments": "移除評論",
        "expand_templates_remove_nowiki": "在結果中禁止顯示 <nowiki> 標籤",
-       "expand_templates_generate_xml": "顯示XML語法樹",
-       "expand_templates_generate_rawhtml": "顯示原始HTML",
+       "expand_templates_generate_xml": "顯示 XML 解析樹",
+       "expand_templates_generate_rawhtml": "顯示原始 HTML",
        "expand_templates_preview": "預覽"
 }
index f06b278..55ed354 100644 (file)
@@ -98,7 +98,6 @@ $defaultDateFormat = 'dmy';
 
 $bookstoreList = array(
        "AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
-       "PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
        "Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
        "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1",
        "Amazon.co.uk" => "http://www.amazon.co.uk/exec/obidos/ISBN=$1"
index 265e683..39036d7 100644 (file)
@@ -189,7 +189,6 @@ $dateFormats = array(
  */
 $bookstoreList = array(
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
-       'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
        'Amazon.com' => 'http://www.amazon.com/gp/search/?field-isbn=$1'
 );
index f6fda25..49c2cbc 100644 (file)
@@ -143,7 +143,6 @@ $bookstoreList = array(
        'minu Raamat' => 'http://www.raamat.ee/advanced_search_result.php?keywords=$1',
        'Raamatukoi' => 'http://www.raamatukoi.ee/cgi-bin/index?valik=otsing&paring=$1',
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
-       'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
        'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
 );
index 773d3a2..48507d4 100644 (file)
@@ -48,7 +48,6 @@ $bookstoreList = array(
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
        'Bhinneka.com bookstore' => 'http://www.bhinneka.com/Buku/Engine/search.asp?fisbn=$1',
        'Gramedia Cyberstore (via Google)' => 'http://www.google.com/search?q=%22ISBN+:+$1%22+%22product_detail%22+site:www.gramediacyberstore.com+OR+site:www.gramediaonline.com+OR+site:www.kompas.com&hl=id',
-       'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
 );
 
 $magicWords = array(
index a13055b..de694e4 100644 (file)
@@ -101,7 +101,6 @@ $bookstoreList = array(
        'Яндекс.Маркет' => 'http://market.yandex.ru/search.xml?text=$1',
        'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
-       'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
        'Barnes & Noble' => 'http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1'
 );
 
index c4394d2..96f640c 100644 (file)
@@ -193,7 +193,6 @@ $specialPageAliases = array(
 
 $bookstoreList = array(
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
-       'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
        '亞馬遜' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
        '博客來書店' => 'http://www.books.com.tw/exep/prod/booksfile.php?item=$1',
index 7f02fe7..b6606f6 100644 (file)
@@ -373,7 +373,6 @@ $dateFormats = array(
 
 $bookstoreList = array(
        'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
-       'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
        'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
        '亚马逊' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
        '卓越亚马逊' => 'http://www.amazon.cn/mn/advancedSearchApp?isbn=$1',
index 7fe3bd9..83e731a 100644 (file)
@@ -36,17 +36,76 @@ class GenerateJsonI18n extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Build JSON messages files from a PHP messages file";
-               $this->addArg( 'phpfile', 'PHP file defining a $messages array', true );
-               $this->addArg( 'jsondir', 'Directory to write JSON files to. ' .
-                       'Required unless <phpfile> exists and --shim-only is specified', false );
+
+               $this->addArg( 'phpfile', 'PHP file defining a $messages array', false );
+               $this->addArg( 'jsondir', 'Directory to write JSON files to', false );
                $this->addOption( 'langcode', 'Language code; only needed for converting core i18n files',
                        false, true );
+               $this->addOption( 'extension', 'Perform default conversion on an extension',
+                       false, true );
                $this->addOption( 'shim-only', 'Only create or update the backward-compatibility shim' );
+               $this->addOption( 'supplementary', 'Find supplementary i18n files in subdirs and convert those',
+                       false, false );
        }
 
        public function execute() {
+               global $IP;
+
                $phpfile = $this->getArg( 0 );
                $jsondir = $this->getArg( 1 );
+               $extension = $this->getOption( 'extension' );
+               $convertSupplementaryI18nFiles = $this->hasOption( 'supplementary' );
+
+               if ( $extension ) {
+                       if ( $phpfile ) {
+                               $this->error( "The phpfile is already specified, conflicts with --extension.\n", 1 );
+                       }
+                       $phpfile = "$IP/extensions/$extension/$extension.i18n.php";
+               }
+
+               if ( !$phpfile ) {
+                       $this->error( "I'm here for an argument!\n" );
+                       $this->maybeHelp( true );
+                       // dies.
+               }
+
+               if ( $convertSupplementaryI18nFiles ) {
+                       if ( is_readable( $phpfile ) ) {
+                               $this->transformI18nFile( $phpfile, $jsondir );
+                       } else {
+                               // This is non-fatal because we might want to continue searching for
+                               // i18n files in subdirs even if the extension does not include a
+                               // primary i18n.php.
+                               $this->error( "Warning: no primary i18n file was found." );
+                       }
+                       $this->output( "Searching for supplementary i18n files...\n" );
+                       $dir_iterator = new RecursiveDirectoryIterator( dirname( $phpfile ) );
+                       $iterator = new RecursiveIteratorIterator( $dir_iterator, RecursiveIteratorIterator::LEAVES_ONLY );
+                       foreach ( $iterator as $path => $fileObject ) {
+                               if ( fnmatch( "*.i18n.php", $fileObject->getFilename() ) ) {
+                                       $this->output( "Converting $path.\n" );
+                                       $this->transformI18nFile( $path );
+                               }
+                       }
+               } else {
+                       // Just convert the primary i18n file.
+                       $this->transformI18nFile( $phpfile, $jsondir );
+               }
+       }
+
+       public function transformI18nFile( $phpfile, $jsondir = null ) {
+               if ( !$jsondir ) {
+                       // Assume the json directory should be in the same directory as the
+                       // .i18n.php file.
+                       $jsondir = dirname( $phpfile ) . "/i18n";
+               }
+               if ( !is_dir( $jsondir ) ) {
+                       $this->output( "Creating directory $jsondir.\n" );
+                       $success = mkdir( $jsondir );
+                       if ( !$success ) {
+                               $this->error( "Could not create directory $jsondir\n", 1 );
+                       }
+               }
 
                if ( $this->hasOption( 'shim-only' ) ) {
                        $this->shimOnly( $phpfile, $jsondir );
index 9f73c80..10a3745 100644 (file)
@@ -271,6 +271,7 @@ $wgIgnoredMessages = array(
        'helplogin-url',
        'autocomment-prefix',
        'move-redirect-text',
+       'category-move-redirect-override',
        'interlanguage-link-title-langonly',
        'createaccount-hook-abort',
 );
index 62d1fa6..b53130b 100644 (file)
@@ -1201,6 +1201,7 @@ $wgMessageStructure = array(
                'right-move',
                'right-move-subpages',
                'right-move-rootuserpages',
+               'right-move-categorypages',
                'right-movefile',
                'right-suppressredirect',
                'right-upload',
@@ -1279,6 +1280,7 @@ $wgMessageStructure = array(
                'action-move',
                'action-move-subpages',
                'action-move-rootuserpages',
+               'action-move-categorypages',
                'action-movefile',
                'action-upload',
                'action-reupload',
@@ -2432,11 +2434,14 @@ $wgMessageStructure = array(
                'movepagetalktext',
                'movearticle',
                'moveuserpage-warning',
+               'movecategorypage-warning',
                'movenologintext',
                'movenotallowed',
                'movenotallowedfile',
                'cant-move-user-page',
                'cant-move-to-user-page',
+               'cant-move-category-page',
+               'cant-move-to-category-page',
                'newtitle',
                'move-watch',
                'movepagebtn',
@@ -2460,6 +2465,7 @@ $wgMessageStructure = array(
                'movenosubpage',
                'movereason',
                'move-redirect-text',
+               'category-move-redirect-override',
                'revertmove',
                'delete_and_move',
                'delete_and_move_text',
diff --git a/maintenance/oracle/archives/patch-page_links_updated.sql b/maintenance/oracle/archives/patch-page_links_updated.sql
new file mode 100644 (file)
index 0000000..5360329
--- /dev/null
@@ -0,0 +1,4 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.page ADD page_links_updated TIMESTAMP(6) WITH TIME ZONE;
+
diff --git a/maintenance/oracle/archives/patch-rc_source.sql b/maintenance/oracle/archives/patch-rc_source.sql
new file mode 100644 (file)
index 0000000..0c80afa
--- /dev/null
@@ -0,0 +1,3 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.recentchanges ADD rc_source VARCHAR2(16);
index 8e752da..824cc82 100644 (file)
@@ -1,3 +1,3 @@
 define mw_prefix='{$wgDBprefix}';
 
-ALTER TABLE &mw_prefix.mwuser ADD user_password_expires TIMESTAMP(6) WITH TIME ZONE NULL DEFAULT NULL;
+ALTER TABLE &mw_prefix.mwuser ADD user_password_expires TIMESTAMP(6) WITH TIME ZONE;
index f05c0cc..ff84858 100644 (file)
@@ -19,7 +19,7 @@ CREATE TABLE &mw_prefix.mwuser ( -- replace reserved word 'user'
   user_touched              TIMESTAMP(6) WITH TIME ZONE,
   user_registration         TIMESTAMP(6) WITH TIME ZONE,
   user_editcount            NUMBER,
-  user_password_expires     TIMESTAMP(6) WITH TIME ZONE NULL DEFAULT NULL
+  user_password_expires     TIMESTAMP(6) WITH TIME ZONE
 );
 ALTER TABLE &mw_prefix.mwuser ADD CONSTRAINT &mw_prefix.mwuser_pk PRIMARY KEY (user_id);
 CREATE UNIQUE INDEX &mw_prefix.mwuser_u01 ON &mw_prefix.mwuser (user_name);
@@ -28,7 +28,8 @@ CREATE INDEX &mw_prefix.mwuser_i02 ON &mw_prefix.mwuser (user_email, user_name);
 
 -- Create a dummy user to satisfy fk contraints especially with revisions
 INSERT INTO &mw_prefix.mwuser
-  VALUES (0,'Anonymous',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, '', current_timestamp, current_timestamp, 0);
+  (user_id, user_name, user_options, user_touched, user_registration, user_editcount)
+  VALUES (0,'Anonymous','', current_timestamp, current_timestamp,0);
 
 CREATE TABLE &mw_prefix.user_groups (
   ug_user   NUMBER      DEFAULT 0 NOT NULL,
@@ -73,6 +74,7 @@ CREATE TABLE &mw_prefix.page (
   page_is_new        CHAR(1)           DEFAULT '0' NOT NULL,
   page_random        NUMBER(15,14) NOT NULL,
   page_touched       TIMESTAMP(6) WITH TIME ZONE,
+  page_links_updated TIMESTAMP(6) WITH TIME ZONE,
   page_latest        NUMBER        DEFAULT 0 NOT NULL, -- FK?
   page_len           NUMBER        DEFAULT 0 NOT NULL,
   page_content_model VARCHAR2(32)
@@ -85,7 +87,7 @@ CREATE INDEX &mw_prefix.page_i03 ON &mw_prefix.page (page_is_redirect, page_name
 
 -- Create a dummy page to satisfy fk contraints especially with revisions
 INSERT INTO &mw_prefix.page
-  VALUES (0, 0, ' ', NULL, 0, 0, 0, 0, current_timestamp, 0, 0, NULL);
+  VALUES (0, 0, ' ', NULL, 0, 0, 0, 0, current_timestamp, NULL, 0, 0, NULL);
 
 /*$mw$*/
 CREATE TRIGGER &mw_prefix.page_set_random BEFORE INSERT ON &mw_prefix.page
@@ -403,7 +405,7 @@ CREATE SEQUENCE recentchanges_rc_id_seq;
 CREATE TABLE &mw_prefix.recentchanges (
   rc_id              NUMBER      NOT NULL,
   rc_timestamp       TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  rc_cur_time        TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
+  rc_cur_time        TIMESTAMP(6) WITH TIME ZONE,
   rc_user            NUMBER          DEFAULT 0 NOT NULL,
   rc_user_text       VARCHAR2(255)         NOT NULL,
   rc_namespace       NUMBER     DEFAULT 0 NOT NULL,
@@ -416,6 +418,7 @@ CREATE TABLE &mw_prefix.recentchanges (
   rc_this_oldid      NUMBER      DEFAULT 0 NOT NULL,
   rc_last_oldid      NUMBER      DEFAULT 0 NOT NULL,
   rc_type            CHAR(1)         DEFAULT '0' NOT NULL,
+  rc_source                                     VARCHAR2(16),
   rc_patrolled       CHAR(1)         DEFAULT '0' NOT NULL,
   rc_ip              VARCHAR2(15),
   rc_old_len         NUMBER,
diff --git a/maintenance/pageExists.php b/maintenance/pageExists.php
new file mode 100644 (file)
index 0000000..c4b208a
--- /dev/null
@@ -0,0 +1,54 @@
+<?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 Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * @ingroup Maintenance
+ */
+class PageExists extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Report whether a specific page exists";
+               $this->addArg( 'title', 'Page title to check whether it exists' );
+       }
+
+       public function execute() {
+               $titleArg = $this->getArg();
+               $title = Title::newFromText( $titleArg );
+               $pageExists = $title && $title->exists();
+
+               $text = '';
+               $code = 0;
+               if ( $pageExists ) {
+                       $text = "{$title} exists.";
+               } else {
+                       $text = "{$title} doesn't exist.";
+                       $code = 1;
+               }
+               $this->output( $text );
+               $this->error( '', $code );
+       }
+}
+
+$maintClass = "PageExists";
+require_once RUN_MAINTENANCE_IF_MAIN;
+
index a3fb042..abbfd3a 100644 (file)
@@ -159,11 +159,13 @@ ALTER TABLE page_restrictions ADD CONSTRAINT page_restrictions_pk PRIMARY KEY (p
 CREATE TABLE page_props (
   pp_page      INTEGER  NOT NULL  REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
   pp_propname  TEXT     NOT NULL,
-  pp_value     TEXT     NOT NULL
+  pp_value     TEXT     NOT NULL,
+  pp_sortkey   FLOAT
 );
 ALTER TABLE page_props ADD CONSTRAINT page_props_pk PRIMARY KEY (pp_page,pp_propname);
 CREATE INDEX page_props_propname ON page_props (pp_propname);
 CREATE UNIQUE INDEX pp_propname_page ON page_props (pp_propname,pp_page);
+CREATE INDEX pp_propname_sortkey_page ON page_props (pp_propname, pp_sortkey, pp_page) WHERE (pp_sortkey IS NOT NULL);
 
 CREATE SEQUENCE archive_ar_id_seq;
 CREATE TABLE archive (
@@ -676,7 +678,7 @@ CREATE INDEX user_properties_property ON user_properties (up_property);
 CREATE TABLE l10n_cache (
   lc_lang   TEXT  NOT NULL,
   lc_key    TEXT  NOT NULL,
-  lc_value  TEXT  NOT NULL
+  lc_value  BYTEA NOT NULL
 );
 CREATE INDEX l10n_cache_lc_lang_key ON l10n_cache (lc_lang, lc_key);
 
index 6057b39..3a6f5e3 100644 (file)
@@ -191,6 +191,7 @@ return array(
 
        'jquery' => array(
                'scripts' => 'resources/lib/jquery/jquery.js',
+               'debugScripts' => 'resources/lib/jquery/jquery.migrate.js',
                'debugRaw' => false,
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1136,10 +1137,10 @@ return array(
        'mediawiki.page.watch.ajax' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.watch.ajax.js',
                'dependencies' => array(
-                       'mediawiki.page.startup',
                        'mediawiki.api.watch',
-                       'mediawiki.util',
                        'mediawiki.notify',
+                       'mediawiki.util',
+                       'jquery.accessKeyLabel',
                        'jquery.mwExtension',
                ),
                'messages' => array(
diff --git a/resources/lib/jquery/jquery.migrate.js b/resources/lib/jquery/jquery.migrate.js
new file mode 100644 (file)
index 0000000..25b6c81
--- /dev/null
@@ -0,0 +1,521 @@
+/*!
+ * jQuery Migrate - v1.2.1 - 2013-05-08
+ * https://github.com/jquery/jquery-migrate
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
+ */
+(function( jQuery, window, undefined ) {
+// See http://bugs.jquery.com/ticket/13335
+// "use strict";
+
+
+var warnedAbout = {};
+
+// List of warnings already given; public read only
+jQuery.migrateWarnings = [];
+
+// Set to true to prevent console output; migrateWarnings still maintained
+// jQuery.migrateMute = false;
+
+// Show a message on the console so devs know we're active
+if ( !jQuery.migrateMute && window.console && window.console.log ) {
+       window.console.log("JQMIGRATE: Logging is active");
+}
+
+// Set to false to disable traces that appear with warnings
+if ( jQuery.migrateTrace === undefined ) {
+       jQuery.migrateTrace = true;
+}
+
+// Forget any warnings we've already given; public
+jQuery.migrateReset = function() {
+       warnedAbout = {};
+       jQuery.migrateWarnings.length = 0;
+};
+
+function migrateWarn( msg) {
+       var console = window.console;
+       if ( !warnedAbout[ msg ] ) {
+               warnedAbout[ msg ] = true;
+               jQuery.migrateWarnings.push( msg );
+               if ( console && console.warn && !jQuery.migrateMute ) {
+                       console.warn( "JQMIGRATE: " + msg );
+                       if ( jQuery.migrateTrace && console.trace ) {
+                               console.trace();
+                       }
+               }
+       }
+}
+
+function migrateWarnProp( obj, prop, value, msg ) {
+       if ( Object.defineProperty ) {
+               // On ES5 browsers (non-oldIE), warn if the code tries to get prop;
+               // allow property to be overwritten in case some other plugin wants it
+               try {
+                       Object.defineProperty( obj, prop, {
+                               configurable: true,
+                               enumerable: true,
+                               get: function() {
+                                       migrateWarn( msg );
+                                       return value;
+                               },
+                               set: function( newValue ) {
+                                       migrateWarn( msg );
+                                       value = newValue;
+                               }
+                       });
+                       return;
+               } catch( err ) {
+                       // IE8 is a dope about Object.defineProperty, can't warn there
+               }
+       }
+
+       // Non-ES5 (or broken) browser; just set the property
+       jQuery._definePropertyBroken = true;
+       obj[ prop ] = value;
+}
+
+if ( document.compatMode === "BackCompat" ) {
+       // jQuery has never supported or tested Quirks Mode
+       migrateWarn( "jQuery is not compatible with Quirks Mode" );
+}
+
+
+var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
+       oldAttr = jQuery.attr,
+       valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
+               function() { return null; },
+       valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
+               function() { return undefined; },
+       rnoType = /^(?:input|button)$/i,
+       rnoAttrNodeType = /^[238]$/,
+       rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+       ruseDefault = /^(?:checked|selected)$/i;
+
+// jQuery.attrFn
+migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
+
+jQuery.attr = function( elem, name, value, pass ) {
+       var lowerName = name.toLowerCase(),
+               nType = elem && elem.nodeType;
+
+       if ( pass ) {
+               // Since pass is used internally, we only warn for new jQuery
+               // versions where there isn't a pass arg in the formal params
+               if ( oldAttr.length < 4 ) {
+                       migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
+               }
+               if ( elem && !rnoAttrNodeType.test( nType ) &&
+                       (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
+                       return jQuery( elem )[ name ]( value );
+               }
+       }
+
+       // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
+       // for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
+       if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
+               migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
+       }
+
+       // Restore boolHook for boolean property/attribute synchronization
+       if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {
+               jQuery.attrHooks[ lowerName ] = {
+                       get: function( elem, name ) {
+                               // Align boolean attributes with corresponding properties
+                               // Fall back to attribute presence where some booleans are not supported
+                               var attrNode,
+                                       property = jQuery.prop( elem, name );
+                               return property === true || typeof property !== "boolean" &&
+                                       ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+
+                                       name.toLowerCase() :
+                                       undefined;
+                       },
+                       set: function( elem, value, name ) {
+                               var propName;
+                               if ( value === false ) {
+                                       // Remove boolean attributes when set to false
+                                       jQuery.removeAttr( elem, name );
+                               } else {
+                                       // value is true since we know at this point it's type boolean and not false
+                                       // Set boolean attributes to the same name and set the DOM property
+                                       propName = jQuery.propFix[ name ] || name;
+                                       if ( propName in elem ) {
+                                               // Only set the IDL specifically if it already exists on the element
+                                               elem[ propName ] = true;
+                                       }
+
+                                       elem.setAttribute( name, name.toLowerCase() );
+                               }
+                               return name;
+                       }
+               };
+
+               // Warn only for attributes that can remain distinct from their properties post-1.9
+               if ( ruseDefault.test( lowerName ) ) {
+                       migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute" );
+               }
+       }
+
+       return oldAttr.call( jQuery, elem, name, value );
+};
+
+// attrHooks: value
+jQuery.attrHooks.value = {
+       get: function( elem, name ) {
+               var nodeName = ( elem.nodeName || "" ).toLowerCase();
+               if ( nodeName === "button" ) {
+                       return valueAttrGet.apply( this, arguments );
+               }
+               if ( nodeName !== "input" && nodeName !== "option" ) {
+                       migrateWarn("jQuery.fn.attr('value') no longer gets properties");
+               }
+               return name in elem ?
+                       elem.value :
+                       null;
+       },
+       set: function( elem, value ) {
+               var nodeName = ( elem.nodeName || "" ).toLowerCase();
+               if ( nodeName === "button" ) {
+                       return valueAttrSet.apply( this, arguments );
+               }
+               if ( nodeName !== "input" && nodeName !== "option" ) {
+                       migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
+               }
+               // Does not return so that setAttribute is also used
+               elem.value = value;
+       }
+};
+
+
+var matched, browser,
+       oldInit = jQuery.fn.init,
+       oldParseJSON = jQuery.parseJSON,
+       // Note: XSS check is done below after string is trimmed
+       rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
+
+// $(html) "looks like html" rule change
+jQuery.fn.init = function( selector, context, rootjQuery ) {
+       var match;
+
+       if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) &&
+                       (match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
+               // This is an HTML string according to the "old" rules; is it still?
+               if ( selector.charAt( 0 ) !== "<" ) {
+                       migrateWarn("$(html) HTML strings must start with '<' character");
+               }
+               if ( match[ 3 ] ) {
+                       migrateWarn("$(html) HTML text after last tag is ignored");
+               }
+               // Consistently reject any HTML-like string starting with a hash (#9521)
+               // Note that this may break jQuery 1.6.x code that otherwise would work.
+               if ( match[ 0 ].charAt( 0 ) === "#" ) {
+                       migrateWarn("HTML string cannot start with a '#' character");
+                       jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
+               }
+               // Now process using loose rules; let pre-1.8 play too
+               if ( context && context.context ) {
+                       // jQuery object as context; parseHTML expects a DOM object
+                       context = context.context;
+               }
+               if ( jQuery.parseHTML ) {
+                       return oldInit.call( this, jQuery.parseHTML( match[ 2 ], context, true ),
+                                       context, rootjQuery );
+               }
+       }
+       return oldInit.apply( this, arguments );
+};
+jQuery.fn.init.prototype = jQuery.fn;
+
+// Let $.parseJSON(falsy_value) return null
+jQuery.parseJSON = function( json ) {
+       if ( !json && json !== null ) {
+               migrateWarn("jQuery.parseJSON requires a valid JSON string");
+               return null;
+       }
+       return oldParseJSON.apply( this, arguments );
+};
+
+jQuery.uaMatch = function( ua ) {
+       ua = ua.toLowerCase();
+
+       var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+               /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+               /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+               /(msie) ([\w.]+)/.exec( ua ) ||
+               ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+               [];
+
+       return {
+               browser: match[ 1 ] || "",
+               version: match[ 2 ] || "0"
+       };
+};
+
+// Don't clobber any existing jQuery.browser in case it's different
+if ( !jQuery.browser ) {
+       matched = jQuery.uaMatch( navigator.userAgent );
+       browser = {};
+
+       if ( matched.browser ) {
+               browser[ matched.browser ] = true;
+               browser.version = matched.version;
+       }
+
+       // Chrome is Webkit, but Webkit is also Safari.
+       if ( browser.chrome ) {
+               browser.webkit = true;
+       } else if ( browser.webkit ) {
+               browser.safari = true;
+       }
+
+       jQuery.browser = browser;
+}
+
+// Warn if the code tries to get jQuery.browser
+migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
+
+jQuery.sub = function() {
+       function jQuerySub( selector, context ) {
+               return new jQuerySub.fn.init( selector, context );
+       }
+       jQuery.extend( true, jQuerySub, this );
+       jQuerySub.superclass = this;
+       jQuerySub.fn = jQuerySub.prototype = this();
+       jQuerySub.fn.constructor = jQuerySub;
+       jQuerySub.sub = this.sub;
+       jQuerySub.fn.init = function init( selector, context ) {
+               if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+                       context = jQuerySub( context );
+               }
+
+               return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+       };
+       jQuerySub.fn.init.prototype = jQuerySub.fn;
+       var rootjQuerySub = jQuerySub(document);
+       migrateWarn( "jQuery.sub() is deprecated" );
+       return jQuerySub;
+};
+
+
+// Ensure that $.ajax gets the new parseJSON defined in core.js
+jQuery.ajaxSetup({
+       converters: {
+               "text json": jQuery.parseJSON
+       }
+});
+
+
+var oldFnData = jQuery.fn.data;
+
+jQuery.fn.data = function( name ) {
+       var ret, evt,
+               elem = this[0];
+
+       // Handles 1.7 which has this behavior and 1.8 which doesn't
+       if ( elem && name === "events" && arguments.length === 1 ) {
+               ret = jQuery.data( elem, name );
+               evt = jQuery._data( elem, name );
+               if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
+                       migrateWarn("Use of jQuery.fn.data('events') is deprecated");
+                       return evt;
+               }
+       }
+       return oldFnData.apply( this, arguments );
+};
+
+
+var rscriptType = /\/(java|ecma)script/i,
+       oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
+
+jQuery.fn.andSelf = function() {
+       migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
+       return oldSelf.apply( this, arguments );
+};
+
+// Since jQuery.clean is used internally on older versions, we only shim if it's missing
+if ( !jQuery.clean ) {
+       jQuery.clean = function( elems, context, fragment, scripts ) {
+               // Set context per 1.8 logic
+               context = context || document;
+               context = !context.nodeType && context[0] || context;
+               context = context.ownerDocument || context;
+
+               migrateWarn("jQuery.clean() is deprecated");
+
+               var i, elem, handleScript, jsTags,
+                       ret = [];
+
+               jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );
+
+               // Complex logic lifted directly from jQuery 1.8
+               if ( fragment ) {
+                       // Special handling of each script element
+                       handleScript = function( elem ) {
+                               // Check if we consider it executable
+                               if ( !elem.type || rscriptType.test( elem.type ) ) {
+                                       // Detach the script and store it in the scripts array (if provided) or the fragment
+                                       // Return truthy to indicate that it has been handled
+                                       return scripts ?
+                                               scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+                                               fragment.appendChild( elem );
+                               }
+                       };
+
+                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
+                               // Check if we're done after handling an executable script
+                               if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+                                       // Append to fragment and handle embedded scripts
+                                       fragment.appendChild( elem );
+                                       if ( typeof elem.getElementsByTagName !== "undefined" ) {
+                                               // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+                                               jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
+
+                                               // Splice the scripts into ret after their former ancestor and advance our index beyond them
+                                               ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+                                               i += jsTags.length;
+                                       }
+                               }
+                       }
+               }
+
+               return ret;
+       };
+}
+
+var eventAdd = jQuery.event.add,
+       eventRemove = jQuery.event.remove,
+       eventTrigger = jQuery.event.trigger,
+       oldToggle = jQuery.fn.toggle,
+       oldLive = jQuery.fn.live,
+       oldDie = jQuery.fn.die,
+       ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
+       rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
+       rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+       hoverHack = function( events ) {
+               if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
+                       return events;
+               }
+               if ( rhoverHack.test( events ) ) {
+                       migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
+               }
+               return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+       };
+
+// Event props removed in 1.9, put them back if needed; no practical way to warn them
+if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
+       jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );
+}
+
+// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
+if ( jQuery.event.dispatch ) {
+       migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
+}
+
+// Support for 'hover' pseudo-event and ajax event warnings
+jQuery.event.add = function( elem, types, handler, data, selector ){
+       if ( elem !== document && rajaxEvent.test( types ) ) {
+               migrateWarn( "AJAX events should be attached to document: " + types );
+       }
+       eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
+};
+jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
+       eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );
+};
+
+jQuery.fn.error = function() {
+       var args = Array.prototype.slice.call( arguments, 0);
+       migrateWarn("jQuery.fn.error() is deprecated");
+       args.splice( 0, 0, "error" );
+       if ( arguments.length ) {
+               return this.bind.apply( this, args );
+       }
+       // error event should not bubble to window, although it does pre-1.7
+       this.triggerHandler.apply( this, args );
+       return this;
+};
+
+jQuery.fn.toggle = function( fn, fn2 ) {
+
+       // Don't mess with animation or css toggles
+       if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
+               return oldToggle.apply( this, arguments );
+       }
+       migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
+
+       // Save reference to arguments for access in closure
+       var args = arguments,
+               guid = fn.guid || jQuery.guid++,
+               i = 0,
+               toggler = function( event ) {
+                       // Figure out which function to execute
+                       var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+                       jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+                       // Make sure that clicks stop
+                       event.preventDefault();
+
+                       // and execute the function
+                       return args[ lastToggle ].apply( this, arguments ) || false;
+               };
+
+       // link all the functions, so any of them can unbind this click handler
+       toggler.guid = guid;
+       while ( i < args.length ) {
+               args[ i++ ].guid = guid;
+       }
+
+       return this.click( toggler );
+};
+
+jQuery.fn.live = function( types, data, fn ) {
+       migrateWarn("jQuery.fn.live() is deprecated");
+       if ( oldLive ) {
+               return oldLive.apply( this, arguments );
+       }
+       jQuery( this.context ).on( types, this.selector, data, fn );
+       return this;
+};
+
+jQuery.fn.die = function( types, fn ) {
+       migrateWarn("jQuery.fn.die() is deprecated");
+       if ( oldDie ) {
+               return oldDie.apply( this, arguments );
+       }
+       jQuery( this.context ).off( types, this.selector || "**", fn );
+       return this;
+};
+
+// Turn global events into document-triggered events
+jQuery.event.trigger = function( event, data, elem, onlyHandlers  ){
+       if ( !elem && !rajaxEvent.test( event ) ) {
+               migrateWarn( "Global events are undocumented and deprecated" );
+       }
+       return eventTrigger.call( this,  event, data, elem || document, onlyHandlers  );
+};
+jQuery.each( ajaxEvents.split("|"),
+       function( _, name ) {
+               jQuery.event.special[ name ] = {
+                       setup: function() {
+                               var elem = this;
+
+                               // The document needs no shimming; must be !== for oldIE
+                               if ( elem !== document ) {
+                                       jQuery.event.add( document, name + "." + jQuery.guid, function() {
+                                               jQuery.event.trigger( name, null, elem, true );
+                                       });
+                                       jQuery._data( this, name, jQuery.guid++ );
+                               }
+                               return false;
+                       },
+                       teardown: function() {
+                               if ( this !== document ) {
+                                       jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );
+                               }
+                               return false;
+                       }
+               };
+       }
+);
+
+
+})( jQuery, window );
index dfb3d22..18c66e9 100644 (file)
@@ -6,5 +6,7 @@
        },
        "ooui-dialog-action-close": "Джаб",
        "ooui-outline-control-move-down": "Элементни тюбюне кёчюр",
-       "ooui-outline-control-move-up": "Элементни башына кёчюр"
+       "ooui-outline-control-move-up": "Элементни башына кёчюр",
+       "ooui-outline-control-remove": "Пунктну кетер",
+       "ooui-toolbar-more": "Энтда"
 }
index 6b7c78a..f7bbff4 100644 (file)
@@ -4,5 +4,10 @@
                        "RajeshPandey",
                        "सरोज कुमार ढकाल"
                ]
-       }
+       },
+       "ooui-dialog-action-close": "बन्द गर्ने",
+       "ooui-outline-control-move-down": "वस्तुलाई तल सार्ने",
+       "ooui-outline-control-move-up": "वस्तुलाई माथि सार्ने",
+       "ooui-outline-control-remove": "वस्तुलाई हटाउने",
+       "ooui-toolbar-more": "थप"
 }
index 952e05e..63a66fb 100644 (file)
   bottom: 4.8em;
 }
 
+.oo-ui-dialog-content-footless .oo-ui-window-body {
+  bottom: 0;
+}
+
 .oo-ui-dialog > .oo-ui-window-frame {
   top: 1em;
   bottom: 1em;
index 6ba7ac8..495056f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (9a6c625f5f)
+ * OOjs UI v0.1.0-pre (7b3672591f)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Fri May 02 2014 12:04:40 GMT-0700 (PDT)
+ * Date: Fri May 09 2014 13:27:04 GMT+0200 (CEST)
  */
 ( function ( OO ) {
 
@@ -1946,7 +1946,7 @@ OO.ui.ButtonedElement = function OoUiButtonedElement( $button, config ) {
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.ButtonedElement.prototype.onMouseDown = function ( e ) {
-       if ( this.disabled || e.which !== 1 ) {
+       if ( this.isDisabled() || e.which !== 1 ) {
                return false;
        }
        // tabIndex should generally be interacted with via the property,
@@ -1967,7 +1967,7 @@ OO.ui.ButtonedElement.prototype.onMouseDown = function ( e ) {
  * @param {jQuery.Event} e Mouse up event
  */
 OO.ui.ButtonedElement.prototype.onMouseUp = function ( e ) {
-       if ( this.disabled || e.which !== 1 ) {
+       if ( this.isDisabled() || e.which !== 1 ) {
                return false;
        }
        // Restore the tab-index after the button is up to restore the button's accesssibility
@@ -3545,7 +3545,7 @@ OO.ui.ToolGroup.prototype.updateDisabled = function () {
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.ToolGroup.prototype.onMouseDown = function ( e ) {
-       if ( !this.disabled && e.which === 1 ) {
+       if ( !this.isDisabled() && e.which === 1 ) {
                this.pressed = this.getTargetTool( e );
                if ( this.pressed ) {
                        this.pressed.setActive( true );
@@ -3577,7 +3577,7 @@ OO.ui.ToolGroup.prototype.onCapturedMouseUp = function ( e ) {
 OO.ui.ToolGroup.prototype.onMouseUp = function ( e ) {
        var tool = this.getTargetTool( e );
 
-       if ( !this.disabled && e.which === 1 && this.pressed && this.pressed === tool ) {
+       if ( !this.isDisabled() && e.which === 1 && this.pressed && this.pressed === tool ) {
                this.pressed.onSelect();
        }
 
@@ -4096,7 +4096,7 @@ OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {boolean} [continuous=false] Show all pages, one after another
- * @cfg {boolean} [autoFocus=false] Focus on the first focusable element when changing to a page
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when changing to a page
  * @cfg {boolean} [outlined=false] Show an outline
  * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
  * @cfg {Object[]} [adders] List of adders for controls, each with name, icon and title properties
@@ -4113,7 +4113,7 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        this.pages = {};
        this.ignoreFocus = false;
        this.stackLayout = new OO.ui.StackLayout( { '$': this.$, 'continuous': !!config.continuous } );
-       this.autoFocus = !!config.autoFocus;
+       this.autoFocus = config.autoFocus === undefined ? true : !!config.autoFocus;
        this.outlineVisible = false;
        this.outlined = !!config.outlined;
        if ( this.outlined ) {
@@ -4898,7 +4898,7 @@ OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
  * @inheritdoc
  */
 OO.ui.PopupToolGroup.prototype.onMouseUp = function ( e ) {
-       if ( !this.disabled && e.which === 1 ) {
+       if ( !this.isDisabled() && e.which === 1 ) {
                this.setActive( false );
        }
        return OO.ui.ToolGroup.prototype.onMouseUp.call( this, e );
@@ -4919,7 +4919,7 @@ OO.ui.PopupToolGroup.prototype.onHandleMouseUp = function () {
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.PopupToolGroup.prototype.onHandleMouseDown = function ( e ) {
-       if ( !this.disabled && e.which === 1 ) {
+       if ( !this.isDisabled() && e.which === 1 ) {
                this.setActive( !this.active );
        }
        return false;
@@ -5066,7 +5066,7 @@ OO.mixinClass( OO.ui.PopupTool, OO.ui.PopuppableElement );
  * @inheritdoc
  */
 OO.ui.PopupTool.prototype.onSelect = function () {
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                if ( this.popup.isVisible() ) {
                        this.hidePopup();
                } else {
@@ -5357,7 +5357,7 @@ OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggableElement );
  * @fires click
  */
 OO.ui.ButtonWidget.prototype.onClick = function () {
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                this.emit( 'click' );
                if ( this.isHyperlink ) {
                        return true;
@@ -5373,7 +5373,7 @@ OO.ui.ButtonWidget.prototype.onClick = function () {
  * @fires click
  */
 OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
-       if ( !this.disabled && e.which === OO.ui.Keys.SPACE ) {
+       if ( !this.isDisabled() && e.which === OO.ui.Keys.SPACE ) {
                if ( this.isHyperlink ) {
                        this.onClick();
                        return true;
@@ -5414,7 +5414,7 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
        // Initialization
        this.$input
                .attr( 'name', config.name )
-               .prop( 'disabled', this.disabled );
+               .prop( 'disabled', this.isDisabled() );
        this.setReadOnly( config.readOnly );
        this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input );
        this.setValue( config.value );
@@ -5449,7 +5449,7 @@ OO.ui.InputWidget.prototype.getInputElement = function () {
  * @param {jQuery.Event} e Key down, mouse up, cut, paste, change, input, or select event
  */
 OO.ui.InputWidget.prototype.onEdit = function () {
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                // Allow the stack to clear so the value will be updated
                setTimeout( OO.ui.bind( function () {
                        this.setValue( this.$input.val() );
@@ -5562,7 +5562,7 @@ OO.ui.InputWidget.prototype.setReadOnly = function ( state ) {
 OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
        OO.ui.Widget.prototype.setDisabled.call( this, state );
        if ( this.$input ) {
-               this.$input.prop( 'disabled', this.disabled );
+               this.$input.prop( 'disabled', this.isDisabled() );
        }
        return this;
 };
@@ -5635,7 +5635,7 @@ OO.ui.CheckboxInputWidget.prototype.setValue = function ( value ) {
  * @inheritdoc
  */
 OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                // Allow the stack to clear so the value will be updated
                setTimeout( OO.ui.bind( function () {
                        this.setValue( this.$input.prop( 'checked' ) );
@@ -6005,7 +6005,7 @@ OO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;
  * @return {boolean} Item is selectable
  */
 OO.ui.OptionWidget.prototype.isSelectable = function () {
-       return this.constructor.static.selectable && !this.disabled;
+       return this.constructor.static.selectable && !this.isDisabled();
 };
 
 /**
@@ -6014,7 +6014,7 @@ OO.ui.OptionWidget.prototype.isSelectable = function () {
  * @return {boolean} Item is highlightable
  */
 OO.ui.OptionWidget.prototype.isHighlightable = function () {
-       return this.constructor.static.highlightable && !this.disabled;
+       return this.constructor.static.highlightable && !this.isDisabled();
 };
 
 /**
@@ -6023,7 +6023,7 @@ OO.ui.OptionWidget.prototype.isHighlightable = function () {
  * @return {boolean} Item is pressable
  */
 OO.ui.OptionWidget.prototype.isPressable = function () {
-       return this.constructor.static.pressable && !this.disabled;
+       return this.constructor.static.pressable && !this.isDisabled();
 };
 
 /**
@@ -6060,7 +6060,7 @@ OO.ui.OptionWidget.prototype.isPressed = function () {
  * @chainable
  */
 OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
-       if ( !this.disabled && this.constructor.static.selectable ) {
+       if ( !this.isDisabled() && this.constructor.static.selectable ) {
                this.selected = !!state;
                if ( this.selected ) {
                        this.$element.addClass( 'oo-ui-optionWidget-selected' );
@@ -6081,7 +6081,7 @@ OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
  * @chainable
  */
 OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
-       if ( !this.disabled && this.constructor.static.highlightable ) {
+       if ( !this.isDisabled() && this.constructor.static.highlightable ) {
                this.highlighted = !!state;
                if ( this.highlighted ) {
                        this.$element.addClass( 'oo-ui-optionWidget-highlighted' );
@@ -6099,7 +6099,7 @@ OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
  * @chainable
  */
 OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
-       if ( !this.disabled && this.constructor.static.pressable ) {
+       if ( !this.isDisabled() && this.constructor.static.pressable ) {
                this.pressed = !!state;
                if ( this.pressed ) {
                        this.$element.addClass( 'oo-ui-optionWidget-pressed' );
@@ -6121,7 +6121,7 @@ OO.ui.OptionWidget.prototype.flash = function () {
        var $this = this.$element,
                deferred = $.Deferred();
 
-       if ( !this.disabled && this.constructor.static.pressable ) {
+       if ( !this.isDisabled() && this.constructor.static.pressable ) {
                $this.removeClass( 'oo-ui-optionWidget-highlighted oo-ui-optionWidget-pressed' );
                setTimeout( OO.ui.bind( function () {
                        // Restore original classes
@@ -6246,7 +6246,7 @@ OO.ui.SelectWidget.static.tagName = 'ul';
 OO.ui.SelectWidget.prototype.onMouseDown = function ( e ) {
        var item;
 
-       if ( !this.disabled && e.which === 1 ) {
+       if ( !this.isDisabled() && e.which === 1 ) {
                this.togglePressed( true );
                item = this.getTargetItem( e );
                if ( item && item.isSelectable() ) {
@@ -6274,7 +6274,7 @@ OO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {
                        this.selecting = item;
                }
        }
-       if ( !this.disabled && e.which === 1 && this.selecting ) {
+       if ( !this.isDisabled() && e.which === 1 && this.selecting ) {
                this.pressItem( null );
                this.chooseItem( this.selecting );
                this.selecting = null;
@@ -6292,7 +6292,7 @@ OO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {
 OO.ui.SelectWidget.prototype.onMouseMove = function ( e ) {
        var item;
 
-       if ( !this.disabled && this.pressed ) {
+       if ( !this.isDisabled() && this.pressed ) {
                item = this.getTargetItem( e );
                if ( item && item !== this.selecting && item.isSelectable() ) {
                        this.pressItem( item );
@@ -6311,7 +6311,7 @@ OO.ui.SelectWidget.prototype.onMouseMove = function ( e ) {
 OO.ui.SelectWidget.prototype.onMouseOver = function ( e ) {
        var item;
 
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                item = this.getTargetItem( e );
                this.highlightItem( item && item.isHighlightable() ? item : null );
        }
@@ -6325,7 +6325,7 @@ OO.ui.SelectWidget.prototype.onMouseOver = function ( e ) {
  * @param {jQuery.Event} e Mouse over event
  */
 OO.ui.SelectWidget.prototype.onMouseLeave = function () {
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                this.highlightItem( null );
        }
        return false;
@@ -6720,7 +6720,7 @@ OO.ui.MenuWidget.prototype.onKeyDown = function ( e ) {
                handled = false,
                highlightItem = this.getHighlightedItem();
 
-       if ( !this.disabled && this.visible ) {
+       if ( !this.isDisabled() && this.visible ) {
                if ( !highlightItem ) {
                        highlightItem = this.getSelectedItem();
                }
@@ -6997,7 +6997,7 @@ OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
                return;
        }
 
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                if ( this.menu.isVisible() ) {
                        this.menu.hide();
                } else {
@@ -7653,7 +7653,7 @@ OO.ui.PopupButtonWidget.prototype.onClick = function ( e ) {
                return;
        }
 
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                if ( this.popup.isVisible() ) {
                        this.hidePopup();
                } else {
@@ -8223,7 +8223,7 @@ OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
  * @inheritdoc
  */
 OO.ui.ToggleButtonWidget.prototype.onClick = function () {
-       if ( !this.disabled ) {
+       if ( !this.isDisabled() ) {
                this.setValue( !this.value );
        }
 
@@ -8295,7 +8295,7 @@ OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
-       if ( !this.disabled && e.which === 1 ) {
+       if ( !this.isDisabled() && e.which === 1 ) {
                this.setValue( !this.value );
        }
 };
index 955b71a..68d73d9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (9a6c625f5f)
+ * OOjs UI v0.1.0-pre (7b3672591f)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Fri May 02 2014 12:04:40 GMT-0700 (PDT)
+ * Date: Fri May 09 2014 13:27:04 GMT+0200 (CEST)
  */
 
 /* Textures */
   float: right;
 }
 
-.oo-ui-dialog-content-footless .oo-ui-window-body {
-  bottom: 0;
-}
-
 .oo-ui-dialog-content-footless .oo-ui-window-foot {
   display: none;
 }
 
 .oo-ui-indicator-up {
   background-image: /* @embed */ url(images/indicators/up.svg);
-}
+}
\ No newline at end of file
index f8448e6..dcd2b0b 100644 (file)
@@ -2,16 +2,20 @@
  * Javascript for module editWarning
  */
 ( function ( mw, $ ) {
+       'use strict';
+
        $( function () {
+               var savedWindowOnBeforeUnload,
+                       $wpTextbox1 = $( '#wpTextbox1' ),
+                       $wpSummary = $( '#wpSummary' );
                // Check if EditWarning is enabled and if we need it
-               if ( $( '#wpTextbox1' ).length === 0 ) {
+               if ( $wpTextbox1.length === 0 ) {
                        return true;
                }
                // Get the original values of some form elements
-               $( '#wpTextbox1, #wpSummary' ).each( function () {
+               $wpTextbox1.add( $wpSummary ).each( function () {
                        $( this ).data( 'origtext', $( this ).val() );
                } );
-               var savedWindowOnBeforeUnload;
                $( window )
                        .on( 'beforeunload.editwarning', function () {
                                var retval;
@@ -20,8 +24,8 @@
                                // the original values
                                if (
                                        mw.config.get( 'wgAction' ) === 'submit' ||
-                                               $( '#wpTextbox1' ).data( 'origtext' ) !== $( '#wpTextbox1' ).val() ||
-                                               $( '#wpSummary' ).data( 'origtext' ) !== $( '#wpSummary' ).val()
+                                               $wpTextbox1.data( 'origtext' ) !== $wpTextbox1.val() ||
+                                               $wpSummary.data( 'origtext' ) !== $wpSummary.val()
                                ) {
                                        // Return our message
                                        retval = mw.msg( 'editwarning-warning' );
index b37e2a6..6444d93 100644 (file)
 
                        // Return the Promise
                        return apiDeferred.promise( { abort: xhr.abort } ).fail( function ( code, details ) {
-                               mw.log( 'mw.Api error: ', code, details );
+                               if ( code !== 'abort' ) {
+                                       mw.log( 'mw.Api error: ', code, details );
+                               }
                        } );
                },
 
                                        function ( code ) {
                                                if ( code === 'badtoken' ) {
                                                        // Clear from cache
-                                                       deferreds[ this.defaults.ajax.url ][ tokenType + 'Token' ] =
+                                                       deferreds[ api.defaults.ajax.url ][ tokenType + 'Token' ] =
                                                                params.token = undefined;
 
                                                        // Try again, once
index aa33d86..af2dee1 100644 (file)
        function doWatchInternal( pages, ok, err, addParams ) {
                // XXX: Parameter addParams is undocumented because we inherit this
                // documentation in the public method...
-               var apiPromise = this.post(
+               var apiPromise = this.postWithToken( 'watch',
                        $.extend(
                                {
                                        action: 'watch',
                                        titles: $.isArray( pages ) ? pages.join( '|' ) : String( pages ),
-                                       token: mw.user.tokens.get( 'watchToken' ),
                                        uselang: mw.config.get( 'wgUserLanguage' )
                                },
                                addParams
index 36f1bd4..6556af9 100644 (file)
@@ -64,3 +64,9 @@
        -webkit-transition: @string;
        transition: @string;
 }
+
+.box-sizing(@value) {
+       -moz-box-sizing: @value;
+       -webkit-box-sizing: @value;
+       box-sizing: @value;
+}
index c75e59f..4aae606 100644 (file)
@@ -9,10 +9,6 @@
                .removeClass( 'client-nojs' );
 
        $( function () {
-               // Initialize utilities as soon as the document is ready (mw.util.$content).
-               // In the domready here instead of in mediawiki.page.ready to ensure that it gets enqueued
-               // before other modules hook into domready, so that mw.util.$content (defined by
-               // mw.util.init), is defined for them.
                mw.util.init();
 
                /**
index 850177f..3b0aeee 100644 (file)
@@ -17,7 +17,7 @@
         * @param {string} [state="idle"] 'idle' or 'loading'. Default is 'idle'
         */
        function updateWatchLink( $link, action, state ) {
-               var accesskeyTip, msgKey, $li, otherAction;
+               var msgKey, $li, otherAction;
 
                // A valid but empty jQuery object shouldn't throw a TypeError
                if ( !$link.length ) {
@@ -32,7 +32,6 @@
                // message keys 'watch', 'watching', 'unwatch' or 'unwatching'.
                msgKey = state === 'loading' ? action + 'ing' : action;
                otherAction = action === 'watch' ? 'unwatch' : 'watch';
-               accesskeyTip = $link.attr( 'title' ).match( mw.util.tooltipAccessKeyRegexp );
                $li = $link.closest( 'li' );
 
                // Trigger a 'watchpage' event for this List item.
@@ -45,9 +44,8 @@
 
                $link
                        .text( mw.msg( msgKey ) )
-                       .attr( 'title', mw.msg( 'tooltip-ca-' + action ) +
-                               ( accesskeyTip ? ' ' + accesskeyTip[0] : '' )
-                       )
+                       .attr( 'title', mw.msg( 'tooltip-ca-' + action ) )
+                       .updateTooltipAccessKeys()
                        .attr( 'href', mw.util.wikiScript() + '?' + $.param( {
                                        title: title,
                                        action: action
index 6157fa2..2b9b3cb 100644 (file)
@@ -1,5 +1,6 @@
 // Form elements and layouts
 
+@import "mediawiki.mixins";
 @import "../../mixins/utilities";
 @import "../../mixins/forms";
 
index a201a4e..3d7b732 100644 (file)
@@ -1,9 +1,3 @@
-.box-sizing(@value) {
-       -moz-box-sizing: @value;
-       -webkit-box-sizing: @value;
-       box-sizing: @value;
-}
-
 .agora-flush-left() {
        float: left;
        margin-left: 0;
index 47b0063..fc4635a 100644 (file)
                         *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
                        function addScript( src, callback, async ) {
-                               /*jshint evil:true */
-                               var script, head, done;
-
-                               // Using isReady directly instead of storing it locally from
-                               // a $.fn.ready callback (bug 31895).
+                               // Using isReady directly instead of storing it locally from a $().ready callback (bug 31895)
                                if ( $.isReady || async ) {
-                                       // Can't use jQuery.getScript because that only uses <script> for cross-domain,
-                                       // it uses XHR and eval for same-domain scripts, which we don't want because it
-                                       // messes up line numbers.
-                                       // The below is based on jQuery ([jquery@1.9.1]/src/ajax/script.js)
-
-                                       // IE-safe way of getting an append target. In old IE document.head isn't supported
-                                       // and its getElementsByTagName can't find <head> until </head> is parsed.
-                                       done = false;
-                                       head = document.head || document.getElementsByTagName( 'head' )[0] || document.documentElement;
-
-                                       script = document.createElement( 'script' );
-                                       script.async = true;
-                                       script.src = src;
-                                       if ( $.isFunction( callback ) ) {
-                                               script.onload = script.onreadystatechange = function () {
-                                                       if (
-                                                               !done
-                                                               && (
-                                                                       !script.readyState
-                                                                       || /loaded|complete/.test( script.readyState )
-                                                               )
-                                                       ) {
-                                                               done = true;
-
-                                                               // Handle memory leak in IE
-                                                               script.onload = script.onreadystatechange = null;
-
-                                                               // Detach the element from the document
-                                                               if ( script.parentNode ) {
-                                                                       script.parentNode.removeChild( script );
-                                                               }
-
-                                                               // Dereference the element from javascript
-                                                               script = undefined;
-
-                                                               callback();
-                                                       }
-                                               };
-                                       }
-
-                                       if ( window.opera ) {
-                                               // Appending to the <head> blocks rendering completely in Opera,
-                                               // so append to the <body> after document ready. This means the
-                                               // scripts only start loading after the document has been rendered,
-                                               // but so be it. Opera users don't deserve faster web pages if their
-                                               // browser makes it impossible.
-                                               $( function () {
-                                                       document.body.appendChild( script );
-                                               } );
-                                       } else {
-                                               // Circumvent IE6 bugs with base elements (jqbug.com/2709, jqbug.com/4378)
-                                               // by prepending instead of appending.
-                                               head.insertBefore( script, head.firstChild );
-                                       }
+                                       $.ajax( {
+                                               url: src,
+                                               dataType: 'script',
+                                               // Force jQuery behaviour to be for crossDomain. Otherwise jQuery would use
+                                               // XHR for a same domain request instead of <script>, which changes the request
+                                               // headers (potentially missing a cache hit), and reduces caching in general
+                                               // since browsers cache XHR much less (if at all). And XHR means we retreive
+                                               // text, so we'd need to $.globalEval, which then messes up line numbers.
+                                               crossDomain: true,
+                                               cache: true,
+                                               async: true
+                                       } ).always( function () {
+                                               if ( callback  ) {
+                                                       callback();
+                                               }
+                                       } );
                                } else {
+                                       /*jshint evil:true */
                                        document.write( mw.html.element( 'script', { 'src': src }, '' ) );
-                                       if ( $.isFunction( callback ) ) {
-                                               // Document.write is synchronous, so this is called when it's done
-                                               // FIXME: that's a lie. doc.write isn't actually synchronous
+                                       if ( callback ) {
+                                               // Document.write is synchronous, so this is called when it's done.
+                                               // FIXME: That's a lie. doc.write isn't actually synchronous.
                                                callback();
                                        }
                                }
index 6eb8552..e8dd473 100644 (file)
@@ -1,57 +1,47 @@
-/**
- * @private
- * @singleton
- * @class mw.toc
- */
 ( function ( mw, $ ) {
        'use strict';
 
        // Table of contents toggle
        mw.hook( 'wikipage.content' ).add( function ( $content ) {
+               var $toc, $tocTitle, $tocToggleLink, $tocList, hideToc;
+               $toc = $content.find( '#toc' );
+               $tocTitle = $content.find( '#toctitle' );
+               $tocToggleLink = $content.find( '#togglelink' );
+               $tocList = $toc.find( 'ul' ).eq( 0 );
 
-               /**
-                * Hide/show the table of contents element
-                *
-                * @param {jQuery} $toggleLink A jQuery object of the toggle link.
-                */
-               function toggleToc( $toggleLink ) {
-                       var $tocList = $content.find( '#toc ul:first' );
-
-                       // This function shouldn't be called if there's no TOC,
-                       // but just in case...
-                       if ( $tocList.length ) {
-                               if ( $tocList.is( ':hidden' ) ) {
-                                       $tocList.slideDown( 'fast' );
-                                       $toggleLink.text( mw.msg( 'hidetoc' ) );
-                                       $content.find( '#toc' ).removeClass( 'tochidden' );
-                                       $.cookie( 'mw_hidetoc', null, {
-                                               expires: 30,
-                                               path: '/'
-                                       } );
-                               } else {
-                                       $tocList.slideUp( 'fast' );
-                                       $toggleLink.text( mw.msg( 'showtoc' ) );
-                                       $content.find( '#toc' ).addClass( 'tochidden' );
-                                       $.cookie( 'mw_hidetoc', '1', {
-                                               expires: 30,
-                                               path: '/'
-                                       } );
-                               }
+               // Hide/show the table of contents element
+               function toggleToc() {
+                       if ( $tocList.is( ':hidden' ) ) {
+                               $tocList.slideDown( 'fast' );
+                               $tocToggleLink.text( mw.msg( 'hidetoc' ) );
+                               $toc.removeClass( 'tochidden' );
+                               $.cookie( 'mw_hidetoc', null, {
+                                       expires: 30,
+                                       path: '/'
+                               } );
+                       } else {
+                               $tocList.slideUp( 'fast' );
+                               $tocToggleLink.text( mw.msg( 'showtoc' ) );
+                               $toc.addClass( 'tochidden' );
+                               $.cookie( 'mw_hidetoc', '1', {
+                                       expires: 30,
+                                       path: '/'
+                               } );
                        }
                }
 
-               var $tocTitle, $tocToggleLink, hideTocCookie;
-               $tocTitle = $content.find( '#toctitle' );
-               $tocToggleLink = $content.find( '#togglelink' );
-               // Only add it if there is a TOC and there is no toggle added already
-               if ( $content.find( '#toc' ).length && $tocTitle.length && !$tocToggleLink.length ) {
-                       hideTocCookie = $.cookie( 'mw_hidetoc' );
+               // Only add it if there is a complete TOC and it doesn't
+               // have a toggle added already
+               if ( $toc.length && $tocTitle.length && $tocList.length && !$tocToggleLink.length ) {
+                       hideToc = $.cookie( 'mw_hidetoc' ) === '1';
+
                        $tocToggleLink = $( '<a href="#" class="internal" id="togglelink"></a>' )
-                               .text( mw.msg( 'hidetoc' ) )
+                               .text( hideToc ? mw.msg( 'showtoc' ) : mw.msg( 'hidetoc' ) )
                                .click( function ( e ) {
                                        e.preventDefault();
-                                       toggleToc( $( this ) );
+                                       toggleToc();
                                } );
+
                        $tocTitle.append(
                                $tocToggleLink
                                        .wrap( '<span class="toctoggle"></span>' )
@@ -60,8 +50,9 @@
                                                .append( ']&nbsp;' )
                        );
 
-                       if ( hideTocCookie === '1' ) {
-                               toggleToc( $tocToggleLink );
+                       if ( hideToc ) {
+                               $tocList.hide();
+                               $toc.addClass( 'tochidden' );
                        }
                }
        } );
index 5fc7371..298415c 100644 (file)
                 * (don't call before document ready)
                 */
                init: function () {
-                       /* Fill $content var */
                        util.$content = ( function () {
-                               var i, l, $content, selectors;
+                               var i, l, $node, selectors;
+
                                selectors = [
-                                       // The preferred standard for setting $content (class="mw-body")
-                                       // You may also use (class="mw-body mw-body-primary") if you use
-                                       // mw-body in multiple locations.
-                                       // Or class="mw-body-primary" if you want $content to be deeper
-                                       // in the dom than mw-body
+                                       // The preferred standard is class "mw-body".
+                                       // You may also use class "mw-body mw-body-primary" if you use
+                                       // mw-body in multiple locations. Or class "mw-body-primary" if
+                                       // you use mw-body deeper in the DOM.
                                        '.mw-body-primary',
                                        '.mw-body',
 
-                                       /* Legacy fallbacks for setting the content */
-                                       // Vector, Monobook, Chick, etc... based skins
-                                       '#bodyContent',
-
-                                       // Modern based skins
-                                       '#mw_contentholder',
-
-                                       // Standard, CologneBlue
-                                       '#article',
-
-                                       // #content is present on almost all if not all skins. Most skins (the above cases)
-                                       // have #content too, but as an outer wrapper instead of the article text container.
-                                       // The skins that don't have an outer wrapper do have #content for everything
-                                       // so it's a good fallback
-                                       '#content',
-
-                                       // If nothing better is found fall back to our bodytext div that is guaranteed to be here
+                                       // If the skin has no such class, fall back to the parser output
                                        '#mw-content-text',
 
-                                       // Should never happen... well, it could if someone is not finished writing a skin and has
-                                       // not inserted bodytext yet. But in any case <body> should always exist
+                                       // Should never happen... well, it could if someone is not finished writing a
+                                       // skin and has not yet inserted bodytext yet.
                                        'body'
                                ];
+
                                for ( i = 0, l = selectors.length; i < l; i++ ) {
-                                       $content = $( selectors[i] ).first();
-                                       if ( $content.length ) {
-                                               return $content;
+                                       $node = $( selectors[i] );
+                                       if ( $node.length ) {
+                                               return $node.first();
                                        }
                                }
 
-                               // Make sure we don't unset util.$content if it was preset and we don't find anything
+                               // Preserve existing customized value in case it was preset
                                return util.$content;
                        }() );
                },
                        $nodes.updateTooltipAccessKeys();
                },
 
-               /*
+               /**
+                * The content wrapper of the skin (e.g. `.mw-body`).
+                *
+                * Populated on document ready by #init. To use this property,
+                * wait for `$.ready` and be sure to have a module depedendency on
+                * `mediawiki.util` and `mediawiki.page.startup` which will ensure
+                * your document ready handler fires after #init.
+                *
+                * Because of the lazy-initialised nature of this property,
+                * you're discouraged from using it.
+                *
+                * If you need just the wikipage content (not any of the
+                * extra elements output by the skin), use `$( '#mw-content-text' )`
+                * instead. Or listen to mw.hook#wikipage_content which will
+                * allow your code to re-run when the page changes (e.g. live preview
+                * or re-render after ajax save).
+                *
                 * @property {jQuery}
-                * A jQuery object that refers to the content area element.
-                * Populated by #init.
                 */
                $content: null,
 
         *
         * Should match:
         *
-        * - "ctrl-option-"
-        * - "alt-shift-"
-        * - "ctrl-alt-"
-        * - "ctrl-"
+        * - "[ctrl-option-x]"
+        * - "[alt-shift-x]"
+        * - "[ctrl-alt-x]"
+        * - "[ctrl-x]"
         *
         * The accesskey is matched in group $6.
         *
index b64ceb0..a6d3b55 100644 (file)
@@ -104,16 +104,6 @@ img.thumbborder {
        border: 1px solid #dddddd;
 }
 
-/* table standards */
-table.rimage {
-       float: right;
-       width: 1pt;
-       position: relative;
-       margin-left: 1em;
-       margin-bottom: 1em;
-       text-align: center;
-}
-
 body {
        background: white;
        color: black;
@@ -277,7 +267,6 @@ span.texhtml {
 /* Galleries (see shared.css for more info) */
 li.gallerybox {
        vertical-align: top;
-       display: -moz-inline-box;
        display: inline-block;
 }
 
index d30f554..fdfca0a 100644 (file)
@@ -157,11 +157,12 @@ mw.log.deprecate( win, 'jsMsg', function ( message ) {
  * @deprecated since 1.17 Use mediawiki.util instead
  */
 msg = 'Use mediawiki.util instead.';
-mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
-mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
 mw.log.deprecate( win, 'updateTooltipAccessKeys', mw.util.updateTooltipAccessKeys, msg );
 mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
 mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
+msg = 'Use jquery.accessKeyLabel instead.';
+mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
+mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
 
 /**
  * Wikipage import methods
index b76a825..2c38516 100644 (file)
@@ -5,7 +5,6 @@
 #ca-watch.icon a {
        margin: 0;
        padding: 0;
-       outline: none;
        display: block;
        width: 26px;
        /* This hides the text but shows the background image */
index b4e903d..1875ac5 100644 (file)
@@ -763,6 +763,7 @@ class ParserTest {
 
                $settings = array(
                        'wgServer' => 'http://example.org',
+                       'wgServerName' => 'example.org',
                        'wgScript' => '/index.php',
                        'wgScriptPath' => '/',
                        'wgArticlePath' => '/wiki/$1',
index 7241f0a..fa863fc 100644 (file)
@@ -39,17 +39,6 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
 
        public static function main( $exit = true ) {
                $command = new self;
-
-               # Makes MediaWiki PHPUnit directory includable so the PHPUnit will
-               # be able to resolve relative files inclusion such as suites/*
-               # PHPUnit uses stream_resolve_include_path() internally
-               # See bug 32022
-               set_include_path(
-                       __DIR__
-                               . PATH_SEPARATOR
-                               . get_include_path()
-               );
-
                $command->run( $_SERVER['argv'], $exit );
        }
 
@@ -63,26 +52,6 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                }
        }
 
-       public function run( array $argv, $exit = true ) {
-               wfProfileIn( __METHOD__ );
-
-               $ret = parent::run( $argv, false );
-
-               wfProfileOut( __METHOD__ );
-
-               // Return to real wiki db, so profiling data is preserved
-               MediaWikiTestCase::teardownTestDB();
-
-               // Log profiling data, e.g. in the database or UDP
-               wfLogProfilingData();
-
-               if ( $exit ) {
-                       exit( $ret );
-               } else {
-                       return $ret;
-               }
-       }
-
        public function showHelp() {
                parent::showHelp();
 
index d929b79..121aade 100644 (file)
@@ -13,3 +13,24 @@ Running phpunit.php instead is recommended.
 EOF;
        require_once __DIR__ . "/phpunit.php";
 }
+
+class MediaWikiPHPUnitBootstrap {
+
+       public function __construct() {
+               wfProfileIn( __CLASS__ );
+       }
+
+       public function __destruct() {
+               wfProfileOut( __CLASS__ );
+
+               // Return to real wiki db, so profiling data is preserved
+               MediaWikiTestCase::teardownTestDB();
+
+               // Log profiling data, e.g. in the database or UDP
+               wfLogProfilingData();
+       }
+
+}
+
+// This will be destructed after all tests have been run
+$mediawikiPHPUnitBootstrap = new MediaWikiPHPUnitBootstrap();
diff --git a/tests/phpunit/data/gitinfo/info-testValidJsonData.json b/tests/phpunit/data/gitinfo/info-testValidJsonData.json
new file mode 100644 (file)
index 0000000..e955a2b
--- /dev/null
@@ -0,0 +1 @@
+{\r    "head": "refs/heads/master",\r    "headSHA1": "0123456789abcdef0123456789abcdef01234567",\r    "headCommitDate": "1070884800",\r    "branch": "master",\r    "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/core"\r}\r
\ No newline at end of file
diff --git a/tests/phpunit/includes/GitInfoTest.php b/tests/phpunit/includes/GitInfoTest.php
new file mode 100644 (file)
index 0000000..7c684d5
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ * @covers GitInfo
+ */
+class GitInfoTest extends MediaWikiTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+               $this->setMwGlobals( 'wgCacheDirectory', __DIR__ . '/../data' );
+       }
+
+       public function testValidJsonData() {
+               $dir = $GLOBALS['IP'] . '/testValidJsonData';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertTrue( $fixture->cacheIsComplete() );
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( '0123456789abcdef0123456789abcdef01234567',
+                       $fixture->getHeadSHA1() );
+               $this->assertEquals( '1070884800', $fixture->getHeadCommitDate() );
+               $this->assertEquals( 'master', $fixture->getCurrentBranch() );
+               $this->assertContains( '0123456789abcdef0123456789abcdef01234567',
+                       $fixture->getHeadViewUrl() );
+       }
+
+       public function testMissingJsonData() {
+               $dir = $GLOBALS['IP'] . '/testMissingJsonData';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertFalse( $fixture->cacheIsComplete() );
+
+               $this->assertEquals( false, $fixture->getHead() );
+               $this->assertEquals( false, $fixture->getHeadSHA1() );
+               $this->assertEquals( false, $fixture->getHeadCommitDate() );
+               $this->assertEquals( false, $fixture->getCurrentBranch() );
+               $this->assertEquals( false, $fixture->getHeadViewUrl() );
+
+               // After calling all the outputs, the cache should be complete
+               $this->assertTrue( $fixture->cacheIsComplete() );
+       }
+
+}
index 49fdd48..350e83f 100644 (file)
@@ -36,7 +36,7 @@ class MWNamespaceTest extends MediaWikiTestCase {
         * @covers MWNamespace::isMovable
         */
        public function testIsMovable() {
-               $this->assertFalse( MWNamespace::isMovable( NS_CATEGORY ) );
+               $this->assertFalse( MWNamespace::isMovable( NS_SPECIAL ) );
                # @todo FIXME: Write more tests!!
        }
 
index ecfcfa3..2add9f2 100644 (file)
@@ -491,4 +491,18 @@ class DummyContentForTesting extends AbstractContent {
        ) {
                return new ParserOutput( $this->getNativeData() );
        }
+
+       /**
+        * @see AbstractContent::fillParserOutput()
+        *
+        * @param Title $title Context title for parsing
+        * @param int|null $revId Revision ID (for {{REVISIONID}})
+        * @param ParserOptions|null $options Parser options
+        * @param bool $generateHtml Whether or not to generate HTML
+        * @param ParserOutput &$output The output object to fill (reference).
+        */
+       protected function fillParserOutput( Title $title, $revId,
+                       ParserOptions $options, $generateHtml, ParserOutput &$output ) {
+               $output = new ParserOutput( $this->getNativeData() );
+       }
 }
index bd6d41f..40484d3 100644 (file)
@@ -5,7 +5,7 @@
  * @group Database
  *        ^--- needed, because we do need the database to test link updates
  */
-class CssContentTest extends MediaWikiTestCase {
+class CssContentTest extends JavaScriptContentTest {
 
        protected function setUp() {
                parent::setUp();
index 253a035..03cbbc0 100644 (file)
@@ -7,14 +7,21 @@
  */
 class TextContentTest extends MediaWikiLangTestCase {
        protected $context;
+       protected $savedContentGetParserOutput;
 
        protected function setUp() {
+               global $wgHooks;
+
                parent::setUp();
 
                // Anon user
                $user = new User();
                $user->setName( '127.0.0.1' );
 
+               $this->context = new RequestContext( new FauxRequest() );
+               $this->context->setTitle( Title::newFromText( 'Test' ) );
+               $this->context->setUser( $user );
+
                $this->setMwGlobals( array(
                        'wgUser' => $user,
                        'wgTextModelsToParse' => array(
@@ -26,9 +33,22 @@ class TextContentTest extends MediaWikiLangTestCase {
                        'wgAlwaysUseTidy' => false,
                ) );
 
-               $this->context = new RequestContext( new FauxRequest() );
-               $this->context->setTitle( Title::newFromText( 'Test' ) );
-               $this->context->setUser( $user );
+               // bypass hooks that force custom rendering
+               if ( isset( $wgHooks['ContentGetParserOutput'] )  ) {
+                       $this->savedContentGetParserOutput = $wgHooks['ContentGetParserOutput'];
+                       unset( $wgHooks['ContentGetParserOutput'] );
+               }
+       }
+
+       public function teardown() {
+               global $wgHooks;
+
+               // restore hooks that force custom rendering
+               if ( $this->savedContentGetParserOutput !== null ) {
+                       $wgHooks['ContentGetParserOutput'] = $this->savedContentGetParserOutput;
+               }
+
+               parent::teardown();
        }
 
        public function newContent( $text ) {
index 66ed020..14bcac0 100644 (file)
@@ -65,6 +65,7 @@ class NewParserTest extends MediaWikiTestCase {
                $tmpGlobals['wgContLang'] = Language::factory( 'en' );
                $tmpGlobals['wgSitename'] = 'MediaWiki';
                $tmpGlobals['wgServer'] = 'http://example.org';
+               $tmpGlobals['wgServerName'] = 'example.org';
                $tmpGlobals['wgScript'] = '/index.php';
                $tmpGlobals['wgScriptPath'] = '/';
                $tmpGlobals['wgArticlePath'] = '/wiki/$1';
index 229eeb4..4ea8fc6 100644 (file)
@@ -29,6 +29,26 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                $this->assertEquals( $expected, $text );
        }
 
+       /**
+        * @expectedException MWException
+        * @expectedExceptionMessage Parser state cleared while parsing. Did you call Parser::parse recursively?
+        * @covers Parser::lock
+        */
+       public function testRecursiveParse() {
+               global $wgParser;
+               $title = Title::newFromText( 'foo' );
+               $po = new ParserOptions;
+               $wgParser->setHook( 'recursivecallparser', array( $this, 'helperParserFunc' ) );
+               $wgParser->parse( '<recursivecallparser>baz</recursivecallparser>', $title, $po );
+       }
+
+       public function helperParserFunc( $input, $args, $parser) {
+               $title = Title::newFromText( 'foo' );
+               $po = new ParserOptions;
+               $parser->parse( $input, $title, $po );
+               return 'bar';
+       }
+
        /**
         * @covers Parser::callParserFunction
         */
index 1f60293..022f998 100755 (executable)
@@ -20,7 +20,8 @@ else if ( has_binary pear ); then
     pear channel-discover components.ez.no
     pear channel-discover pear.symfony.com
     pear update-channels
-    pear install --alldeps phpunit/PHPUnit
+    #Temporary fix for 64597
+    pear install --alldeps phpunit/PHPUnit-3.7.35
 else if ( has_binary apt-get ); then
     echo Installing phpunit with apt-get
     apt-get install phpunit
index a0d23f5..c67bf38 100755 (executable)
@@ -107,6 +107,20 @@ class PHPUnitMaintClass extends Maintenance {
                                array_splice( $_SERVER['argv'], 1, 0, '--colors' );
                        }
                }
+
+               # Makes MediaWiki PHPUnit directory includable so the PHPUnit will
+               # be able to resolve relative files inclusion such as suites/*
+               # PHPUnit uses stream_resolve_include_path() internally
+               # See bug 32022
+               $key = array_search( '--include-path', $_SERVER['argv'] );
+               if( $key === false ) {
+                       array_splice( $_SERVER['argv'], 1, 0,
+                               __DIR__
+                               . PATH_SEPARATOR
+                               . get_include_path()
+                       );
+                       array_splice( $_SERVER['argv'], 1, 0, '--include-path' );
+               }
        }
 
        public function getDbType() {
index a93f572..05eb6b9 100644 (file)
                } );
        } );
 
+       QUnit.test( 'postWithToken()', function ( assert ) {
+               QUnit.expect( 1 );
+
+               var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
+
+               // - Requests token
+               // - Performs action=example
+               api.postWithToken( 'testsimpletoken', { action: 'example', key: 'foo' } )
+                       .done( function ( data ) {
+                               assert.deepEqual( data, { example: { foo: 'quux' } } );
+                       } );
+
+               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testsimpletokentoken": "a-bad-token" } }'
+               );
+
+               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "example": { "foo": "quux" } }'
+               );
+       } );
+
+       QUnit.test( 'postWithToken() - badtoken', function ( assert ) {
+               QUnit.expect( 1 );
+
+               var api = new mw.Api();
+
+               // - Request: token
+               // - Request: action=example -> badtoken error
+               // - Request: new token
+               // - Request: action=example
+               api.postWithToken( 'testbadtoken', { action: 'example', key: 'foo' } )
+                       .done( function ( data ) {
+                               assert.deepEqual( data, { example: { foo: 'quux' } } );
+                       } );
+
+               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testbadtokentoken": "a-bad-token" } }'
+               );
+
+               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "error": { "code": "badtoken" } }'
+               );
+
+               this.server.requests[2].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testbadtokentoken": "a-good-token" } }'
+               );
+
+               this.server.requests[3].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "example": { "foo": "quux" } }'
+               );
+
+       } );
+
+       QUnit.test( 'postWithToken() - badtoken-cached', function ( assert ) {
+               QUnit.expect( 2 );
+
+               var api = new mw.Api();
+
+               // - Request: token
+               // - Request: action=example
+               api.postWithToken( 'testbadtokencache', { action: 'example', key: 'foo' } )
+                       .done( function ( data ) {
+                               assert.deepEqual( data, { example: { foo: 'quux' } } );
+                       } );
+
+               // - Cache: Try previously cached token
+               // - Request: action=example -> badtoken error
+               // - Request: new token
+               // - Request: action=example
+               api.postWithToken( 'testbadtokencache', { action: 'example', key: 'bar' } )
+                       .done( function ( data ) {
+                               assert.deepEqual( data, { example: { bar: 'quux' } } );
+                       } );
+
+               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testbadtokencachetoken": "a-good-token-once" } }'
+               );
+
+               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "example": { "foo": "quux" } }'
+               );
+
+               this.server.requests[2].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "error": { "code": "badtoken" } }'
+               );
+
+               this.server.requests[3].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testbadtokencachetoken": "a-good-new-token" } }'
+               );
+
+               this.server.requests[4].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "example": { "bar": "quux" } }'
+               );
+
+       } );
+
 }( mediaWiki ) );
index f422bc1..e6c2b5c 100644 (file)
@@ -6,14 +6,8 @@
        } );
 
        QUnit.test( 'user status', 11, function ( assert ) {
-               /**
-                * Tests can be run under three different conditions:
-                *   1) From tests/qunit/index.html, user will be anonymous.
-                *   2) Logged in on [[Special:JavaScriptTest/qunit]]
-                *   3) Anonymously at the same special page.
-                */
 
-               // Forge an anonymous user:
+               // Forge an anonymous user
                mw.config.set( 'wgUserName', null );
                delete mw.config.values.wgUserId;