Merge "Use WebRequest instead of $_SERVER in ApiMain."
authorReedy <reedy@wikimedia.org>
Fri, 3 Aug 2012 20:59:04 +0000 (20:59 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 3 Aug 2012 20:59:04 +0000 (20:59 +0000)
319 files changed:
.jshintrc
CREDITS
RELEASE-NOTES-1.20
docs/hooks.txt
includes/AjaxDispatcher.php
includes/Article.php
includes/AutoLoader.php
includes/DefaultSettings.php
includes/Defines.php
includes/Exception.php
includes/HTMLForm.php
includes/HttpFunctions.php
includes/ImagePage.php
includes/Linker.php
includes/Message.php
includes/OutputPage.php
includes/Pager.php
includes/QueryPage.php
includes/RecentChange.php
includes/Setup.php
includes/SkinLegacy.php
includes/SpecialPage.php
includes/User.php
includes/WebRequest.php
includes/Wiki.php
includes/WikiMap.php
includes/WikiPage.php
includes/ZhConversion.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiMain.php
includes/api/ApiOptions.php
includes/api/ApiParse.php
includes/api/ApiProtect.php
includes/api/ApiQuery.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryUsers.php
includes/api/ApiSetNotificationTimestamp.php [new file with mode: 0644]
includes/api/ApiUpload.php
includes/db/IORMRow.php
includes/db/IORMTable.php
includes/db/ORMResult.php
includes/db/ORMRow.php
includes/db/ORMTable.php
includes/diff/DifferenceEngine.php
includes/filerepo/FileRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/backend/SwiftFileBackend.php
includes/filerepo/file/File.php
includes/installer/OracleUpdater.php
includes/job/Job.php
includes/media/Generic.php [deleted file]
includes/media/ImageHandler.php [new file with mode: 0644]
includes/media/MediaHandler.php [new file with mode: 0644]
includes/objectcache/MemcachedClient.php
includes/parser/CoreParserFunctions.php
includes/parser/DateFormatter.php
includes/parser/Parser.php
includes/specials/SpecialBlock.php
includes/specials/SpecialCategories.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialDisambiguations.php
includes/specials/SpecialListusers.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWithoutinterwiki.php
includes/upload/UploadFromUrl.php
includes/zhtable/toCN.manual
includes/zhtable/tradphrases.manual
languages/Language.php
languages/LanguageConverter.php
languages/Names.php
languages/classes/LanguageUz.php [new file with mode: 0644]
languages/messages/MessagesAeb.php
languages/messages/MessagesAr.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAz.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHil.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_cn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_arab.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLi.php
languages/messages/MessagesLt.php
languages/messages/MessagesMg.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPam.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesSe.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSi.php
languages/messages/MessagesSl.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTru.php [new file with mode: 0644]
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVot.php
languages/messages/MessagesXmf.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/Doxyfile
maintenance/backupTextPass.inc
maintenance/copyFileBackend.php
maintenance/deleteBatch.php
maintenance/edit.php
maintenance/fixSlaveDesync.php
maintenance/generateSitemap.php
maintenance/getLagTimes.php
maintenance/getSlaveServer.php
maintenance/getText.php
maintenance/importDump.php
maintenance/importImages.inc
maintenance/importImages.php
maintenance/importSiteScripts.php
maintenance/importTextFile.php
maintenance/initStats.php
maintenance/install.php
maintenance/jsparse.php
maintenance/lag.php
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/migrateUserGroup.php
maintenance/minify.php
maintenance/moveBatch.php
maintenance/mwdoc-filter.php [new file with mode: 0644]
maintenance/mwdocgen.php
maintenance/namespaceDupes.php
maintenance/nextJobDB.php
maintenance/nukeNS.php
maintenance/nukePage.php
maintenance/oracle/archives/patch-ipblocks_i05_index.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-page_restrictions_pkuk_fix.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-revision_i05_index.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-ufg_group-length-increase.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-ug_group-length-increase.sql
maintenance/oracle/tables.sql
maintenance/orphans.php
maintenance/parse.php
maintenance/patchSql.php
maintenance/populateCategory.php
maintenance/populateImageSha1.php
maintenance/populateLogSearch.php
maintenance/populateLogUsertext.php
maintenance/populateParentId.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/preprocessDump.php
maintenance/runJobs.php
maintenance/syncFileBackend.php
resources/Resources.php
resources/jquery.effects/jquery.effects.blind.js
resources/jquery.effects/jquery.effects.bounce.js
resources/jquery.effects/jquery.effects.clip.js
resources/jquery.effects/jquery.effects.core.js
resources/jquery.effects/jquery.effects.drop.js
resources/jquery.effects/jquery.effects.explode.js
resources/jquery.effects/jquery.effects.fade.js
resources/jquery.effects/jquery.effects.fold.js
resources/jquery.effects/jquery.effects.highlight.js
resources/jquery.effects/jquery.effects.pulsate.js
resources/jquery.effects/jquery.effects.scale.js
resources/jquery.effects/jquery.effects.shake.js
resources/jquery.effects/jquery.effects.slide.js
resources/jquery.effects/jquery.effects.transfer.js
resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js [deleted file]
resources/jquery.ui/jquery.ui.accordion.js
resources/jquery.ui/jquery.ui.autocomplete.js
resources/jquery.ui/jquery.ui.button.js
resources/jquery.ui/jquery.ui.core.js
resources/jquery.ui/jquery.ui.datepicker.js
resources/jquery.ui/jquery.ui.dialog.js
resources/jquery.ui/jquery.ui.draggable.js
resources/jquery.ui/jquery.ui.droppable.js
resources/jquery.ui/jquery.ui.mouse.js
resources/jquery.ui/jquery.ui.position.js
resources/jquery.ui/jquery.ui.progressbar.js
resources/jquery.ui/jquery.ui.resizable.js
resources/jquery.ui/jquery.ui.selectable.js
resources/jquery.ui/jquery.ui.slider.js
resources/jquery.ui/jquery.ui.sortable.js
resources/jquery.ui/jquery.ui.tabs.js
resources/jquery.ui/jquery.ui.widget.js
resources/jquery.ui/themes/default/jquery.ui.accordion.css
resources/jquery.ui/themes/default/jquery.ui.autocomplete.css
resources/jquery.ui/themes/default/jquery.ui.button.css
resources/jquery.ui/themes/default/jquery.ui.core.css
resources/jquery.ui/themes/default/jquery.ui.datepicker.css
resources/jquery.ui/themes/default/jquery.ui.dialog.css
resources/jquery.ui/themes/default/jquery.ui.progressbar.css
resources/jquery.ui/themes/default/jquery.ui.resizable.css
resources/jquery.ui/themes/default/jquery.ui.selectable.css
resources/jquery.ui/themes/default/jquery.ui.slider.css
resources/jquery.ui/themes/default/jquery.ui.tabs.css
resources/jquery.ui/themes/default/jquery.ui.theme.css
resources/jquery.ui/themes/vector/jquery.ui.button.css
resources/jquery/jquery.badge.css [new file with mode: 0644]
resources/jquery/jquery.badge.js [new file with mode: 0644]
resources/jquery/jquery.localize.js
resources/jquery/jquery.qunit.css
resources/jquery/jquery.qunit.js
resources/jquery/jquery.tablesorter.js
resources/mediawiki.action/mediawiki.action.edit.js
resources/mediawiki/mediawiki.Uri.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.user.js
skins/Modern.php
skins/MonoBook.php
skins/Vector.php
skins/common/commonElements.css
skins/common/shared.css
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/libs/CSSJanusTest.php [new file with mode: 0644]
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageUzTest.php [new file with mode: 0644]
tests/qunit/data/qunitOkCall.js
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js
tests/qunit/suites/resources/jquery/jquery.byteLength.test.js
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/qunit/suites/resources/jquery/jquery.client.test.js
tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js
tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js
tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js
tests/qunit/suites/resources/jquery/jquery.highlightText.test.js
tests/qunit/suites/resources/jquery/jquery.localize.test.js
tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js
tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/jquery/jquery.textSelection.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
thumb.php

index 3c801c2..5fb1173 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -1,7 +1,7 @@
 {
        "predef": [
                "mediaWiki",
-               "jQuery",
+               "mw",
                "QUnit"
        ],
 
@@ -17,6 +17,8 @@
 
        "laxbreak": true,
        "smarttabs": true,
+       "multistr": true,
 
-       "browser": true
+       "browser": true,
+       "jquery": true
 }
diff --git a/CREDITS b/CREDITS
index fd86da8..aa55af9 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -118,6 +118,7 @@ following names for their contribution to the product.
 * Grunny
 * Harry Burt
 * Ireas
+* Jacob Block
 * Jaska Zedlik
 * Jeremy Baron
 * Jidanni
index 2f463a7..3a14f55 100644 (file)
@@ -32,6 +32,8 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   certain namespace can be moved.
 * Added SpecialPageBeforeExecute hook which gets called before SpecialPage::execute.
 * Added SpecialPageAfterExecute hook which gets called after SpecialPage::execute.
+* Added ORMTable, ORMRow and ORMResult classes for additional abstraction of
+  database interaction.
 * (bug 32341) Add upload by URL domain limitation.
 * &useskin=default will now always display the default skin. Useful for users with a
   preference for the non-default skin to look at something using the default skin.
@@ -61,7 +63,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   Special:Version
 * Edit notices can now be translated.
 * (bug 35680) jQuery upgraded to 1.7.2.
-* jQuery UI upgraded to 1.8.21.
+* jQuery UI upgraded to 1.8.22.
 * (bug 35705) QUnit upgraded from v1.2.0 to v1.8.0.
 * (bug 37604) jquery.cookie upgraded to 2011 version.
 * (bug 22887) Add warning and tracking category for preprocessor errors
@@ -99,6 +101,16 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   instead of the site content language
 * (bug 37926) Deleterevision will no longer allow users to delete log entries,
   the new deletelogentry permission is required for this.
+* (bug 14237) Allow PAGESINCATEGORY to distinguish between 'all', 'pages', 'files'
+  and 'subcats'
+* (bug 38362) Make Special:Listuser includeable on wiki pages.
+* Added support in jquery.localize for placeholder attributes.
+* (bug 38151) Implemented mw.user.getRights for getting and caching the current
+  user's user rights.
+* Implemented mw.user.getGroups for getting and caching user groups.
+* (bug 37830) Added $wgRequirePasswordforEmailChange to control whether password
+  confirmation is required for changing an email address or not.
+* HTMLForm mutators can now be chained (they return $this)
 
 === Bug fixes in 1.20 ===
 * (bug 30245) Use the correct way to construct a log page title.
@@ -150,7 +162,6 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   who don't have access to /tmp can specify an alternative.
 * (bug 27283) SqlBagOStuff breaks PostgreSQL transactions.
 * (bug 35727) mw.Api ajax() should put token parameter last.
-* (bug 260) Handle <pre> overflow automatically with a scroll bar.
 * (bug 37708) mw.Uri.clone() should make a deep copy.
 * (bug 38024) ResourceLoader should not create empty stylesheets for modules
   that don't have stylesheets.
@@ -169,6 +180,15 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   values are used instead of just the fixed values from when the tablesorter
   was initialized.
 * (bug 38093) Gender of changed user groups missing in Special:Log/rights
+* (bug 35893) Special:Block needs to load mediawiki.special.block.js.
+* (bug 37331) ResourceLoader modules sometimes execute twice in Firefox
+* (bug 31644) GlobalUsage, CentralAuth and AbuseLog extensions should not use
+  insecure links to foreign wikis in the WikiMap.
+* (bug 36073) Avoid duplicate element IDs on File pages
+* (bug 25095) Special:Categories should also include the first relevant item
+  when "from" is filled.
+* (bug 35526) jquery.tablesorter now uses a stable sort.
+* (bug 38953) --memory-limit switch not working for runJobs.php.
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
@@ -198,6 +218,11 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 36987) API avoids mangling fields in continuation parameters
 * (bug 30836) siteinfo prop=specialpagealiases will no longer return nonexistent special pages
 * (bug 38190) Add "required" flag to some token params for hint in api docs.
+* (bug 27567) Add file repo support to prop=duplicatefiles.
+* (bug 27610) Add archivename for non-latest image version to list=filearchive
+* (bug 38231) Add xml parse tree to action=parse.
+* Watchlist notification timestamp may be queried by page and may be updated via the API.
+* (bug 38904) prop=revisions&rvstart=... no longer blows up when continuing.
 
 === Languages updated in 1.20 ===
 
@@ -213,6 +238,8 @@ changes to languages because of Bugzilla reports.
 * (bug 35541) Namespace gender aliases for Croatian (hr).
 * (bug 36012) Space in $separatorTransformTable should be non-breaking in
   Portuguese, Esperanto and Udmurt.
+* Turoyo (tru) added.
+* Cyrillic-Latin language converter added for Uzbek (uz).
 
 === Other changes in 1.20 ===
 * The user_token field is now left empty until a user attempts to login and
@@ -225,6 +252,8 @@ changes to languages because of Bugzilla reports.
   and only applies to MyISAM or similar DBs. Those should only be used
   for archived sites anyway. We can't get edit conflicts on such sites,
   so the WikiPage code wasn't useful there either.
+* Deprecated mw.user.name in favour of mw.user.getName.
+* Deprecated mw.user.anonymous in favour of mw.user.isAnon.
 
 == Compatibility ==
 
index e844e89..eefb46c 100644 (file)
@@ -1051,9 +1051,9 @@ $result: User permissions error to add. If none, return true.
 &$title: Title object of the image
 &$file: File object, or false if it doesn't exist
 &$frameParams: Various parameters with special meanings; see documentation in
-       includes/Linker.php for Linker::makeImageLink2
+       includes/Linker.php for Linker::makeImageLink
 &$handlerParams: Various parameters with special meanings; see documentation in
-       includes/Linker.php for Linker::makeImageLink2
+       includes/Linker.php for Linker::makeImageLink
 &$time: Timestamp of file in 'YYYYMMDDHHIISS' string form, or false for current
 &$res: Final HTML output, used if you return false
 
index e3df520..b00cf30 100644 (file)
@@ -97,7 +97,7 @@ class AjaxDispatcher {
         * request.
         */
        function performAction() {
-               global $wgAjaxExportList, $wgOut, $wgUser;
+               global $wgAjaxExportList, $wgUser;
 
                if ( empty( $this->mode ) ) {
                        return;
@@ -113,7 +113,7 @@ class AjaxDispatcher {
                                'Bad Request',
                                "unknown function " . (string) $this->func_name
                        );
-               } elseif ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) 
+               } elseif ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true )
                        && !$wgUser->isAllowed( 'read' ) )
                {
                        wfHttpError(
@@ -123,14 +123,8 @@ class AjaxDispatcher {
                } else {
                        wfDebug( __METHOD__ . ' dispatching ' . $this->func_name . "\n" );
 
-                       if ( strpos( $this->func_name, '::' ) !== false ) {
-                               $func = explode( '::', $this->func_name, 2 );
-                       } else {
-                               $func = $this->func_name;
-                       }
-
                        try {
-                               $result = call_user_func_array( $func, $this->args );
+                               $result = call_user_func_array( $this->func_name, $this->args );
 
                                if ( $result === false || $result === null ) {
                                        wfDebug( __METHOD__ . ' ERROR while dispatching '
@@ -163,7 +157,6 @@ class AjaxDispatcher {
                        }
                }
 
-               $wgOut = null;
                wfProfileOut( __METHOD__ );
        }
 }
index 3b259e2..6fc0acd 100644 (file)
@@ -967,7 +967,7 @@ class Article extends Page {
                        "<div class='patrollink'>" .
                                wfMsgHtml(
                                        'markaspatrolledlink',
-                                       Linker::link(
+                                       Linker::linkKnown(
                                                $this->getTitle(),
                                                wfMsgHtml( 'markaspatrolledtext' ),
                                                array(),
@@ -975,8 +975,7 @@ class Article extends Page {
                                                        'action' => 'markpatrolled',
                                                        'rcid' => $rcid,
                                                        'token' => $token,
-                                               ),
-                                               array( 'known', 'noclasses' )
+                                               )
                                        )
                                ) .
                        '</div>'
@@ -1075,8 +1074,9 @@ class Article extends Page {
                }
 
                $outputPage = $this->getContext()->getOutput();
+               $user = $this->getContext()->getUser();
                // If the user is not allowed to see it...
-               if ( !$this->mRevision->userCan( Revision::DELETED_TEXT ) ) {
+               if ( !$this->mRevision->userCan( Revision::DELETED_TEXT, $user ) ) {
                        $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
                                'rev-deleted-text-permission' );
 
@@ -1153,73 +1153,67 @@ class Article extends Page {
 
                $lnk = $current
                        ? wfMsgHtml( 'currentrevisionlink' )
-                       : Linker::link(
+                       : Linker::linkKnown(
                                $this->getTitle(),
                                wfMsgHtml( 'currentrevisionlink' ),
                                array(),
-                               $extraParams,
-                               array( 'known', 'noclasses' )
+                               $extraParams
                        );
                $curdiff = $current
                        ? wfMsgHtml( 'diff' )
-                       : Linker::link(
+                       : Linker::linkKnown(
                                $this->getTitle(),
                                wfMsgHtml( 'diff' ),
                                array(),
                                array(
                                        'diff' => 'cur',
                                        'oldid' => $oldid
-                               ) + $extraParams,
-                               array( 'known', 'noclasses' )
+                               ) + $extraParams
                        );
                $prev = $this->getTitle()->getPreviousRevisionID( $oldid ) ;
                $prevlink = $prev
-                       ? Linker::link(
+                       ? Linker::linkKnown(
                                $this->getTitle(),
                                wfMsgHtml( 'previousrevision' ),
                                array(),
                                array(
                                        'direction' => 'prev',
                                        'oldid' => $oldid
-                               ) + $extraParams,
-                               array( 'known', 'noclasses' )
+                               ) + $extraParams
                        )
                        : wfMsgHtml( 'previousrevision' );
                $prevdiff = $prev
-                       ? Linker::link(
+                       ? Linker::linkKnown(
                                $this->getTitle(),
                                wfMsgHtml( 'diff' ),
                                array(),
                                array(
                                        'diff' => 'prev',
                                        'oldid' => $oldid
-                               ) + $extraParams,
-                               array( 'known', 'noclasses' )
+                               ) + $extraParams
                        )
                        : wfMsgHtml( 'diff' );
                $nextlink = $current
                        ? wfMsgHtml( 'nextrevision' )
-                       : Linker::link(
+                       : Linker::linkKnown(
                                $this->getTitle(),
                                wfMsgHtml( 'nextrevision' ),
                                array(),
                                array(
                                        'direction' => 'next',
                                        'oldid' => $oldid
-                               ) + $extraParams,
-                               array( 'known', 'noclasses' )
+                               ) + $extraParams
                        );
                $nextdiff = $current
                        ? wfMsgHtml( 'diff' )
-                       : Linker::link(
+                       : Linker::linkKnown(
                                $this->getTitle(),
                                wfMsgHtml( 'diff' ),
                                array(),
                                array(
                                        'diff' => 'next',
                                        'oldid' => $oldid
-                               ) + $extraParams,
-                               array( 'known', 'noclasses' )
+                               ) + $extraParams
                        );
 
                $cdel = Linker::getRevDeleteLink( $user, $revision, $this->getTitle() );
@@ -1329,10 +1323,8 @@ class Article extends Page {
                }
 
                # Better double-check that it hasn't been deleted yet!
-               $dbw = wfGetDB( DB_MASTER );
-               $conds = $title->pageCond();
-               $latest = $dbw->selectField( 'page', 'page_latest', $conds, __METHOD__ );
-               if ( $latest === false ) {
+               $this->mPage->loadPageData( 'fromdbmaster' );
+               if ( !$this->mPage->exists() ) {
                        $outputPage = $this->getContext()->getOutput();
                        $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $title->getPrefixedText() ) );
                        $outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
@@ -1392,7 +1384,7 @@ class Article extends Page {
                        // @todo FIXME: i18n issue/patchwork message
                        $this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
                                wfMsgExt( 'historywarning', array( 'parseinline' ), $this->getContext()->getLanguage()->formatNum( $revisions ) ) .
-                               wfMsgHtml( 'word-separator' ) . Linker::link( $title,
+                               wfMsgHtml( 'word-separator' ) . Linker::linkKnown( $title,
                                        wfMsgHtml( 'history' ),
                                        array( 'rel' => 'archives' ),
                                        array( 'action' => 'history' ) ) .
index 6c37d1a..bdd6316 100644 (file)
@@ -256,6 +256,7 @@ $wgAutoloadLocalClasses = array(
        'UserArray' => 'includes/UserArray.php',
        'UserArrayFromResult' => 'includes/UserArray.php',
        'UserBlockedError' => 'includes/Exception.php',
+       'UserNotLoggedIn' => 'includes/Exception.php',
        'UserMailer' => 'includes/UserMailer.php',
        'UserRightsProxy' => 'includes/UserRightsProxy.php',
        'ViewCountUpdate' => 'includes/ViewCountUpdate.php',
@@ -396,6 +397,7 @@ $wgAutoloadLocalClasses = array(
        'ApiResult' => 'includes/api/ApiResult.php',
        'ApiRollback' => 'includes/api/ApiRollback.php',
        'ApiRsd' => 'includes/api/ApiRsd.php',
+       'ApiSetNotificationTimestamp' => 'includes/api/ApiSetNotificationTimestamp.php',
        'ApiTokens' => 'includes/api/ApiTokens.php',
        'ApiUnblock' => 'includes/api/ApiUnblock.php',
        'ApiUndelete' => 'includes/api/ApiUndelete.php',
@@ -689,11 +691,11 @@ $wgAutoloadLocalClasses = array(
        'FormatMetadata' => 'includes/media/FormatMetadata.php',
        'GIFHandler' => 'includes/media/GIF.php',
        'GIFMetadataExtractor' => 'includes/media/GIFMetadataExtractor.php',
-       'ImageHandler' => 'includes/media/Generic.php',
+       'ImageHandler' => 'includes/media/ImageHandler.php',
        'IPTC' => 'includes/media/IPTC.php',
        'JpegHandler' => 'includes/media/Jpeg.php',
        'JpegMetadataExtractor' => 'includes/media/JpegMetadataExtractor.php',
-       'MediaHandler' => 'includes/media/Generic.php',
+       'MediaHandler' => 'includes/media/MediaHandler.php',
        'MediaTransformError' => 'includes/media/MediaTransformOutput.php',
        'MediaTransformOutput' => 'includes/media/MediaTransformOutput.php',
        'PNGHandler' => 'includes/media/PNG.php',
index 3311fb1..69b632c 100644 (file)
@@ -358,9 +358,11 @@ $wgImgAuthPublicTest = true;
  *
  * For most core repos:
  *   - zones            Associative array of zone names that each map to an array with:
- *                          container : backend container name the zone is in
- *                          directory : root path within container for the zone
- *                          url       : base URL to the root of the zone
+ *                          container  : backend container name the zone is in
+ *                          directory  : root path within container for the zone
+ *                          url        : base URL to the root of the zone
+ *                          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.
@@ -1584,17 +1586,10 @@ $wgUseDumbLinkUpdate = false;
 
 /**
  * Anti-lock flags - bitfield
- *   - ALF_PRELOAD_LINKS:
- *       Preload links during link update for save
- *   - ALF_PRELOAD_EXISTENCE:
- *       Preload cur_id during replaceLinkHolders
  *   - ALF_NO_LINK_LOCK:
  *       Don't use locking reads when updating the link table. This is
  *       necessary for wikis with a high edit rate for performance
  *       reasons, but may cause link table inconsistency
- *   - ALF_NO_BLOCK_LOCK:
- *       As for ALF_LINK_LOCK, this flag is a necessity for high-traffic
- *       wikis.
  */
 $wgAntiLockFlags = 0;
 
@@ -2690,6 +2685,14 @@ $wgBetterDirectionality = true;
  */
 $wgSend404Code = true;
 
+
+/**
+ * The $wgShowRollbackEditCount variable is used to show how many edits will be
+ * rollback. The numeric value of the varible are the limit up to are counted.
+ * If the value is false or 0, the edits are not counted.
+ */
+$wgShowRollbackEditCount = 10;
+
 /** @} */ # End of output format settings }
 
 /*************************************************************************//**
@@ -5510,10 +5513,12 @@ $wgLogActions = array(
  * @see LogFormatter
  */
 $wgLogActionsHandlers = array(
-       // move, move_redir
-       'move/*'            => 'MoveLogFormatter',
-       // delete, restore, revision, event
-       'delete/*'          => 'DeleteLogFormatter',
+       'move/move'         => 'MoveLogFormatter',
+       'move/move_redir'  => 'MoveLogFormatter',
+       'delete/delete'     => 'DeleteLogFormatter',
+       'delete/restore'    => 'DeleteLogFormatter',
+       'delete/revision'   => 'DeleteLogFormatter',
+       'delete/event'      => 'DeleteLogFormatter',
        'suppress/revision' => 'DeleteLogFormatter',
        'suppress/event'    => 'DeleteLogFormatter',
        'suppress/delete'   => 'DeleteLogFormatter',
@@ -6140,6 +6145,11 @@ $wgSeleniumConfigFile = null;
 $wgDBtestuser = ''; //db user that has permission to create and drop the test databases only
 $wgDBtestpassword = '';
 
+/**
+ * Whether the user must enter their password to change their e-mail address
+ */
+$wgRequirePasswordforEmailChange = true;
+
 /**
  * For really cool vim folding this needs to be at the end:
  * vim: foldmarker=@{,@} foldmethod=marker
index f7b41b8..56218d6 100644 (file)
@@ -144,8 +144,8 @@ define( 'AV_SCAN_FAILED', false );  #scan failed (scanner not found or error in
  * Anti-lock flags
  * See DefaultSettings.php for a description
  */
-define( 'ALF_PRELOAD_LINKS', 1 );
-define( 'ALF_PRELOAD_EXISTENCE', 2 );
+define( 'ALF_PRELOAD_LINKS', 1 ); // unused
+define( 'ALF_PRELOAD_EXISTENCE', 2 ); // unused
 define( 'ALF_NO_LINK_LOCK', 4 );
 define( 'ALF_NO_BLOCK_LOCK', 8 );
 /**@}*/
index 0fc5cd7..7d4c551 100644 (file)
@@ -289,6 +289,7 @@ class MWException extends Exception {
  * Exception class which takes an HTML error message, and does not
  * produce a backtrace. Replacement for OutputPage::fatalError().
  *
+ * @since 1.7
  * @ingroup Exception
  */
 class FatalError extends MWException {
@@ -311,6 +312,7 @@ class FatalError extends MWException {
 /**
  * An error page which can definitely be safely rendered using the OutputPage.
  *
+ * @since 1.7
  * @ingroup Exception
  */
 class ErrorPageError extends MWException {
@@ -350,6 +352,7 @@ class ErrorPageError extends MWException {
  * Similar to ErrorPage, but emit a 400 HTTP error code to let mobile
  * browser it is not really a valid content.
  *
+ * @since 1.19
  * @ingroup Exception
  */
 class BadTitleError extends ErrorPageError {
@@ -381,6 +384,7 @@ class BadTitleError extends ErrorPageError {
  * Show an error when a user tries to do something they do not have the necessary
  * permissions for.
  *
+ * @since 1.18
  * @ingroup Exception
  */
 class PermissionsError extends ErrorPageError {
@@ -419,6 +423,7 @@ class PermissionsError extends ErrorPageError {
  * Show an error when the wiki is locked/read-only and the user tries to do
  * something that requires write access.
  *
+ * @since 1.18
  * @ingroup Exception
  */
 class ReadOnlyError extends ErrorPageError {
@@ -434,6 +439,7 @@ class ReadOnlyError extends ErrorPageError {
 /**
  * Show an error when the user hits a rate limit.
  *
+ * @since 1.18
  * @ingroup Exception
  */
 class ThrottledError extends ErrorPageError {
@@ -454,6 +460,7 @@ class ThrottledError extends ErrorPageError {
 /**
  * Show an error when the user tries to do something whilst blocked.
  *
+ * @since 1.18
  * @ingroup Exception
  */
 class UserBlockedError extends ErrorPageError {
@@ -500,6 +507,7 @@ class UserBlockedError extends ErrorPageError {
  * This is essentially an ErrorPageError exception which by default use the
  * 'exception-nologin' as a title and 'exception-nologin-text' for the message.
  * @see bug 37627
+ * @since 1.20
  *
  * @par Example:
  * @code
@@ -544,6 +552,7 @@ class UserNotLoggedIn extends ErrorPageError {
  * Show an error that looks like an HTTP server error.
  * Replacement for wfHttpError().
  *
+ * @since 1.19
  * @ingroup Exception
  */
 class HttpError extends MWException {
index 38b15b9..ce9c377 100644 (file)
  * object, and typically implement at least getInputHTML, which generates
  * the HTML for the input field to be placed in the table.
  *
+ * You can find extensive documentation on the www.mediawiki.org wiki:
+ *  - http://www.mediawiki.org/wiki/HTMLForm
+ *  - http://www.mediawiki.org/wiki/HTMLForm/tutorial
+ *
  * The constructor input is an associative array of $fieldname => $info,
  * where $info is an Associative Array with any of the following:
  *
  *                              (eg one without the "wp" prefix), specify it here and
  *                              it will be used without modification.
  *
+ * Since 1.20, you can chain mutators to ease the form generation:
+ * @par Example:
+ * @code
+ * $form = new HTMLForm( $someFields );
+ * $form->setMethod( 'get' )
+ *      ->setWrapperLegendMsg( 'message-key' )
+ *      ->suppressReset()
+ *      ->prepareForm()
+ *      ->displayForm();
+ * @endcode
+ * Note that you will have prepareForm and displayForm at the end. Other
+ * methods call done after that would simply not be part of the form :(
+ *
  * TODO: Document 'section' / 'subsection' stuff
  */
 class HTMLForm extends ContextSource {
@@ -232,12 +249,14 @@ class HTMLForm extends ContextSource {
         * @param $format String the name of the format to use, must be one of
         *        $this->availableDisplayFormats
         * @since 1.20
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function setDisplayFormat( $format ) {
                if ( !in_array( $format, $this->availableDisplayFormats ) ) {
                        throw new MWException ( 'Display format must be one of ' . print_r( $this->availableDisplayFormats, true ) );
                }
                $this->displayFormat = $format;
+               return $this;
        }
 
        /**
@@ -288,7 +307,12 @@ class HTMLForm extends ContextSource {
        }
 
        /**
-        * Prepare form for submission
+        * Prepare form for submission.
+        *
+        * @attention When doing method chaining, that should be the very last
+        * method call before displayForm().
+        *
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function prepareForm() {
                # Check if we have the info we need
@@ -298,6 +322,7 @@ class HTMLForm extends ContextSource {
 
                # Load data from the request.
                $this->loadData();
+               return $this;
        }
 
        /**
@@ -390,45 +415,60 @@ class HTMLForm extends ContextSource {
         *       the output from HTMLForm::filterDataForSubmit, and must
         *       return Bool true on success, Bool false if no submission
         *       was attempted, or String HTML output to display on error.
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setSubmitCallback( $cb ) {
                $this->mSubmitCallback = $cb;
+               return $this;
        }
 
        /**
         * Set a message to display on a validation error.
         * @param $msg Mixed String or Array of valid inputs to wfMsgExt()
         *       (so each entry can be either a String or Array)
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setValidationErrorMessage( $msg ) {
                $this->mValidationErrorMessage = $msg;
+               return $this;
        }
 
        /**
         * Set the introductory message, overwriting any existing message.
         * @param $msg String complete text of message to display
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setIntro( $msg ) {
                $this->setPreText( $msg );
+               return $this;
        }
 
        /**
         * Set the introductory message, overwriting any existing message.
         * @since 1.19
         * @param $msg String complete text of message to display
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
-       function setPreText( $msg ) { $this->mPre = $msg; }
+       function setPreText( $msg ) {
+               $this->mPre = $msg;
+               return $this;
+       }
 
        /**
         * Add introductory text.
         * @param $msg String complete text of message to display
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
-       function addPreText( $msg ) { $this->mPre .= $msg; }
+       function addPreText( $msg ) {
+               $this->mPre .= $msg;
+               return $this;
+       }
 
        /**
         * Add header text, inside the form.
         * @param $msg String complete text of message to display
         * @param $section string The section to add the header to
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function addHeaderText( $msg, $section = null ) {
                if ( is_null( $section ) ) {
@@ -439,6 +479,7 @@ class HTMLForm extends ContextSource {
                        }
                        $this->mSectionHeaders[$section] .= $msg;
                }
+               return $this;
        }
 
        /**
@@ -446,6 +487,7 @@ class HTMLForm extends ContextSource {
         * @since 1.19
         * @param $msg String complete text of message to display
         * @param $section The section to add the header to
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setHeaderText( $msg, $section = null ) {
                if ( is_null( $section ) ) {
@@ -453,12 +495,14 @@ class HTMLForm extends ContextSource {
                } else {
                        $this->mSectionHeaders[$section] = $msg;
                }
+               return $this;
        }
 
        /**
         * Add footer text, inside the form.
         * @param $msg String complete text of message to display
         * @param $section string The section to add the footer text to
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function addFooterText( $msg, $section = null ) {
                if ( is_null( $section ) ) {
@@ -469,6 +513,7 @@ class HTMLForm extends ContextSource {
                        }
                        $this->mSectionFooters[$section] .= $msg;
                }
+               return $this;
        }
 
        /**
@@ -476,6 +521,7 @@ class HTMLForm extends ContextSource {
         * @since 1.19
         * @param $msg String complete text of message to display
         * @param $section string The section to add the footer text to
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setFooterText( $msg, $section = null ) {
                if ( is_null( $section ) ) {
@@ -483,39 +529,65 @@ class HTMLForm extends ContextSource {
                } else {
                        $this->mSectionFooters[$section] = $msg;
                }
+               return $this;
        }
 
        /**
         * Add text to the end of the display.
         * @param $msg String complete text of message to display
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
-       function addPostText( $msg ) { $this->mPost .= $msg; }
+       function addPostText( $msg ) {
+               $this->mPost .= $msg;
+               return $this;
+       }
 
        /**
         * Set text at the end of the display.
         * @param $msg String complete text of message to display
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
-       function setPostText( $msg ) { $this->mPost = $msg; }
+       function setPostText( $msg ) {
+               $this->mPost = $msg;
+               return $this;
+       }
 
        /**
         * Add a hidden field to the output
         * @param $name String field name.  This will be used exactly as entered
         * @param $value String field value
         * @param $attribs Array
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function addHiddenField( $name, $value, $attribs = array() ) {
                $attribs += array( 'name' => $name );
                $this->mHiddenFields[] = array( $value, $attribs );
+               return $this;
        }
 
+       /**
+        * Add a button to the form
+        * @param $name String field name.
+        * @param $value String field value
+        * @param $id String DOM id for the button (default: null)
+        * @param $attribs Array
+        * @return HTMLForm $this for chaining calls (since 1.20)
+        */
        public function addButton( $name, $value, $id = null, $attribs = null ) {
                $this->mButtons[] = compact( 'name', 'value', 'id', 'attribs' );
+               return $this;
        }
 
        /**
         * Display the form (sending to $wgOut), with an appropriate error
         * message or stack of messages, and any validation errors, etc.
+        *
+        * @attention You should call prepareForm() before calling this function.
+        * Moreover, when doing method chaining this should be the very last method
+        * call just after prepareForm().
+        *
         * @param $submitResult Mixed output from HTMLForm::trySubmit()
+        * @return Nothing, should be last call
         */
        function displayForm( $submitResult ) {
                $this->getOutput()->addHTML( $this->getHTML( $submitResult ) );
@@ -716,18 +788,22 @@ class HTMLForm extends ContextSource {
        /**
         * Set the text for the submit button
         * @param $t String plaintext.
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setSubmitText( $t ) {
                $this->mSubmitText = $t;
+               return $this;
        }
 
        /**
         * Set the text for the submit button to a message
         * @since 1.19
         * @param $msg String message key
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function setSubmitTextMsg( $msg ) {
                $this->setSubmitText( $this->msg( $msg )->text() );
+               return $this;
        }
 
        /**
@@ -740,42 +816,65 @@ class HTMLForm extends ContextSource {
                        : wfMsg( 'htmlform-submit' );
        }
 
+       /**
+        * @param $name String Submit button name
+        * @return HTMLForm $this for chaining calls (since 1.20)
+        */
        public function setSubmitName( $name ) {
                $this->mSubmitName = $name;
+               return $this;
        }
 
+       /**
+        * @param $name String Tooltip for the submit button
+        * @return HTMLForm $this for chaining calls (since 1.20)
+        */
        public function setSubmitTooltip( $name ) {
                $this->mSubmitTooltip = $name;
+               return $this;
        }
 
        /**
         * Set the id for the submit button.
         * @param $t String.
         * @todo FIXME: Integrity of $t is *not* validated
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setSubmitID( $t ) {
                $this->mSubmitID = $t;
+               return $this;
        }
 
+       /**
+        * @param $id String DOM id for the form
+        * @return HTMLForm $this for chaining calls (since 1.20)
+        */
        public function setId( $id ) {
                $this->mId = $id;
+               return $this;
        }
        /**
         * Prompt the whole form to be wrapped in a "<fieldset>", with
         * this text as its "<legend>" element.
         * @param $legend String HTML to go inside the "<legend>" element.
         *       Will be escaped
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
-       public function setWrapperLegend( $legend ) { $this->mWrapperLegend = $legend; }
+       public function setWrapperLegend( $legend ) {
+               $this->mWrapperLegend = $legend;
+               return $this;
+       }
 
        /**
         * Prompt the whole form to be wrapped in a "<fieldset>", with
         * this message as its "<legend>" element.
         * @since 1.19
         * @param $msg String message key
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function setWrapperLegendMsg( $msg ) {
                $this->setWrapperLegend( $this->msg( $msg )->escaped() );
+               return $this;
        }
 
        /**
@@ -783,17 +882,21 @@ class HTMLForm extends ContextSource {
         * @todo currently only used for the "<fieldset>" legend on forms
         * with multiple sections; should be used elsewhre?
         * @param $p String
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setMessagePrefix( $p ) {
                $this->mMessagePrefix = $p;
+               return $this;
        }
 
        /**
         * Set the title for form submission
         * @param $t Title of page the form is on/should be posted to
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function setTitle( $t ) {
                $this->mTitle = $t;
+               return $this;
        }
 
        /**
@@ -809,9 +912,11 @@ class HTMLForm extends ContextSource {
        /**
         * Set the method used to submit the form
         * @param $method String
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function setMethod( $method = 'post' ) {
                $this->mMethod = $method;
+               return $this;
        }
 
        public function getMethod() {
@@ -921,9 +1026,11 @@ class HTMLForm extends ContextSource {
         * Stop a reset button being shown for this form
         * @param $suppressReset Bool set to false to re-enable the
         *       button again
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function suppressReset( $suppressReset = true ) {
                $this->mShowReset = !$suppressReset;
+               return $this;
        }
 
        /**
@@ -954,9 +1061,11 @@ class HTMLForm extends ContextSource {
         * @since 1.19
         *
         * @param string|bool $action
+        * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function setAction( $action ) {
                $this->mAction = $action;
+               return $this;
        }
 
 }
index 66b6e72..8453e62 100644 (file)
@@ -212,7 +212,7 @@ class MWHttpRequest {
         * @param $url String: url to use. If protocol-relative, will be expanded to an http:// URL
         * @param $options Array: (optional) extra params to pass (see Http::request())
         */
-       function __construct( $url, $options = array() ) {
+       protected function __construct( $url, $options = array() ) {
                global $wgHTTPTimeout;
 
                $this->url = wfExpandUrl( $url, PROTO_HTTP );
index fead0f5..ab3e2e3 100644 (file)
@@ -778,7 +778,7 @@ EOT
                                        $link2 = Linker::linkKnown( Title::makeTitle( $row->page_namespace, $row->page_title ) );
                                        $ul .= Html::rawElement(
                                                'li',
-                                               array( 'id' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
+                                               array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
                                                $link2
                                                ) . "\n";
                                }
@@ -788,7 +788,7 @@ EOT
                        }
                        $out->addHTML( Html::rawElement(
                                        'li',
-                                       array( 'id' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
+                                       array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
                                        $liContents
                                ) . "\n"
                        );
@@ -944,18 +944,18 @@ class ImageHistoryList extends ContextSource {
         * @return string
         */
        public function beginImageHistoryList( $navLinks = '' ) {
-               return Xml::element( 'h2', array( 'id' => 'filehistory' ), wfMsg( 'filehist' ) ) . "\n"
+               return Xml::element( 'h2', array( 'id' => 'filehistory' ), $this->msg( 'filehist' )->text() ) . "\n"
                        . "<div id=\"mw-imagepage-section-filehistory\">\n"
-                       . $this->getOutput()->parse( wfMsgNoTrans( 'filehist-help' ) )
+                       . $this->msg( 'filehist-help' )->parseAsBlock()
                        . $navLinks . "\n"
                        . Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
                        . '<tr><td></td>'
                        . ( $this->current->isLocal() && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<td></td>' : '' )
-                       . '<th>' . wfMsgHtml( 'filehist-datetime' ) . '</th>'
-                       . ( $this->showThumb ? '<th>' . wfMsgHtml( 'filehist-thumb' ) . '</th>' : '' )
-                       . '<th>' . wfMsgHtml( 'filehist-dimensions' ) . '</th>'
-                       . '<th>' . wfMsgHtml( 'filehist-user' ) . '</th>'
-                       . '<th>' . wfMsgHtml( 'filehist-comment' ) . '</th>'
+                       . '<th>' . $this->msg( 'filehist-datetime' )->escaped() . '</th>'
+                       . ( $this->showThumb ? '<th>' . $this->msg( 'filehist-thumb' )->escaped() . '</th>' : '' )
+                       . '<th>' . $this->msg( 'filehist-dimensions' )->escaped() . '</th>'
+                       . '<th>' . $this->msg( 'filehist-user' )->escaped() . '</th>'
+                       . '<th>' . $this->msg( 'filehist-comment' )->escaped() . '</th>'
                        . "</tr>\n";
        }
 
@@ -997,7 +997,7 @@ class ImageHistoryList extends ContextSource {
                                }
                                $row .= Linker::linkKnown(
                                        $this->title,
-                                       wfMsgHtml( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' ),
+                                       $this->msg( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' )->escaped(),
                                        array(), $q
                                );
                        }
@@ -1008,7 +1008,7 @@ class ImageHistoryList extends ContextSource {
                                        $row .= '<br />';
                                }
                                // If file is top revision or locked from this user, don't link
-                               if ( $iscur || !$file->userCan( File::DELETED_RESTRICTED ) ) {
+                               if ( $iscur || !$file->userCan( File::DELETED_RESTRICTED, $user ) ) {
                                        $del = Linker::revDeleteLinkDisabled( $canHide );
                                } else {
                                        list( $ts, ) = explode( '!', $img, 2 );
@@ -1028,16 +1028,16 @@ class ImageHistoryList extends ContextSource {
                // Reversion link/current indicator
                $row .= '<td>';
                if ( $iscur ) {
-                       $row .= wfMsgHtml( 'filehist-current' );
-               } elseif ( $local && $this->title->quickUserCan( 'edit' )
-                       && $this->title->quickUserCan( 'upload' )
+                       $row .= $this->msg( 'filehist-current' )->escaped();
+               } elseif ( $local && $this->title->quickUserCan( 'edit', $user )
+                       && $this->title->quickUserCan( 'upload', $user )
                ) {
                        if ( $file->isDeleted( File::DELETED_FILE ) ) {
-                               $row .= wfMsgHtml( 'filehist-revert' );
+                               $row .= $this->msg( 'filehist-revert' )->escaped();
                        } else {
                                $row .= Linker::linkKnown(
                                        $this->title,
-                                       wfMsgHtml( 'filehist-revert' ),
+                                       $this->msg( 'filehist-revert' )->escaped(),
                                        array(),
                                        array(
                                                'action' => 'revert',
@@ -1054,9 +1054,9 @@ class ImageHistoryList extends ContextSource {
                        $selected = "class='filehistory-selected'";
                }
                $row .= "<td $selected style='white-space: nowrap;'>";
-               if ( !$file->userCan( File::DELETED_FILE ) ) {
+               if ( !$file->userCan( File::DELETED_FILE, $user ) ) {
                        # Don't link to unviewable files
-                       $row .= '<span class="history-deleted">' . $lang->timeanddate( $timestamp, true ) . '</span>';
+                       $row .= '<span class="history-deleted">' . $lang->userTimeAndDate( $timestamp, $user ) . '</span>';
                } elseif ( $file->isDeleted( File::DELETED_FILE ) ) {
                        if ( $local ) {
                                $this->preventClickjacking();
@@ -1064,7 +1064,7 @@ class ImageHistoryList extends ContextSource {
                                # Make a link to review the image
                                $url = Linker::linkKnown(
                                        $revdel,
-                                       $lang->timeanddate( $timestamp, true ),
+                                       $lang->userTimeAndDate( $timestamp, $user ),
                                        array(),
                                        array(
                                                'target' => $this->title->getPrefixedText(),
@@ -1073,12 +1073,12 @@ class ImageHistoryList extends ContextSource {
                                        )
                                );
                        } else {
-                               $url = $lang->timeanddate( $timestamp, true );
+                               $url = $lang->userTimeAndDate( $timestamp, $user );
                        }
                        $row .= '<span class="history-deleted">' . $url . '</span>';
                } else {
                        $url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img );
-                       $row .= Xml::element( 'a', array( 'href' => $url ), $lang->timeanddate( $timestamp, true ) );
+                       $row .= Xml::element( 'a', array( 'href' => $url ), $lang->userTimeAndDate( $timestamp, $user ) );
                }
                $row .= "</td>";
 
@@ -1090,9 +1090,9 @@ class ImageHistoryList extends ContextSource {
                // Image dimensions + size
                $row .= '<td>';
                $row .= htmlspecialchars( $file->getDimensionsString() );
-               $row .= $this->getContext()->msg( 'word-separator' )->plain();
+               $row .= $this->msg( 'word-separator' )->plain();
                $row .= '<span style="white-space: nowrap;">';
-               $row .= $this->getContext()->msg( 'parentheses' )->rawParams( Linker::formatSize( $file->getSize() ) )->plain();
+               $row .= $this->msg( 'parentheses' )->rawParams( Linker::formatSize( $file->getSize() ) )->plain();
                $row .= '</span>';
                $row .= '</td>';
 
@@ -1100,11 +1100,11 @@ class ImageHistoryList extends ContextSource {
                $row .= '<td>';
                // Hide deleted usernames
                if ( $file->isDeleted( File::DELETED_USER ) ) {
-                       $row .= '<span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
+                       $row .= '<span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
                } else {
                        if ( $local ) {
                                $row .= Linker::userLink( $userId, $userText );
-                               $row .= $this->getContext()->msg( 'word-separator' )->plain();
+                               $row .= $this->msg( 'word-separator' )->plain();
                                $row .= '<span style="white-space: nowrap;">';
                                $row .= Linker::userToolLinks( $userId, $userText );
                                $row .= '</span>';
@@ -1116,7 +1116,7 @@ class ImageHistoryList extends ContextSource {
 
                // Don't show deleted descriptions
                if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
-                       $row .= '<td><span class="history-deleted">' . wfMsgHtml( 'rev-deleted-comment' ) . '</span></td>';
+                       $row .= '<td><span class="history-deleted">' . $this->msg( 'rev-deleted-comment' )->escaped() . '</span></td>';
                } else {
                        $row .= '<td dir="' . $wgContLang->getDir() . '">' . Linker::formatComment( $description, $this->title ) . '</td>';
                }
@@ -1134,7 +1134,10 @@ class ImageHistoryList extends ContextSource {
         */
        protected function getThumbForLine( $file ) {
                $lang = $this->getLanguage();
-               if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE ) && !$file->isDeleted( File::DELETED_FILE ) ) {
+               $user = $this->getUser();
+               if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE,$user )
+                       && !$file->isDeleted( File::DELETED_FILE ) )
+               {
                        $params = array(
                                'width' => '120',
                                'height' => '120',
@@ -1143,20 +1146,20 @@ class ImageHistoryList extends ContextSource {
 
                        $thumbnail = $file->transform( $params );
                        $options = array(
-                               'alt' => wfMsg( 'filehist-thumbtext',
-                                       $lang->timeanddate( $timestamp, true ),
-                                       $lang->date( $timestamp, true ),
-                                       $lang->time( $timestamp, true ) ),
+                               'alt' => $this->msg( 'filehist-thumbtext',
+                                       $lang->userTimeAndDate( $timestamp, $user ),
+                                       $lang->userDate( $timestamp, $user ),
+                                       $lang->userTime( $timestamp, $user ) )->text(),
                                'file-link' => true,
                        );
 
                        if ( !$thumbnail ) {
-                               return wfMsgHtml( 'filehist-nothumb' );
+                               return $this->msg( 'filehist-nothumb' )->escaped();
                        }
 
                        return $thumbnail->toHtml( $options );
                } else {
-                       return wfMsgHtml( 'filehist-nothumb' );
+                       return $this->msg( 'filehist-nothumb' )->escaped();
                }
        }
 
index 5355140..db144f7 100644 (file)
@@ -139,9 +139,9 @@ class Linker {
                if ( $t->isRedirect() ) {
                        # Page is a redirect
                        $colour = 'mw-redirect';
-               } elseif ( $threshold > 0 &&
-                          $t->exists() && $t->getLength() < $threshold &&
-                          $t->isContentPage() ) {
+               } elseif ( $threshold > 0 && $t->isContentPage() &&
+                       $t->exists() && $t->getLength() < $threshold
+               ) {
                        # Page is a stub
                        $colour = 'stub';
                }
@@ -513,7 +513,8 @@ class Linker {
         * Given parameters derived from [[Image:Foo|options...]], generate the
         * HTML that that syntax inserts in the page.
         *
-        * @param $title Title object
+        * @param $parser Parser object
+        * @param $title Title object of the file (not the currently viewed page)
         * @param $file File object, or false if it doesn't exist
         * @param $frameParams Array: associative array of parameters external to the media handler.
         *     Boolean parameters are indicated by presence or absence, the value is arbitrary and
@@ -540,9 +541,10 @@ class Linker {
         * @param $time String: timestamp of the file, set as false for current
         * @param $query String: query params for desc url
         * @param $widthOption: Used by the parser to remember the user preference thumbnailsize
+        * @since 1.20
         * @return String: HTML for an image, with links, wrappers, etc.
         */
-       public static function makeImageLink2( Title $title, $file, $frameParams = array(),
+       public static function makeImageLink( /*Parser*/ $parser, Title $title, $file, $frameParams = array(),
                $handlerParams = array(), $time = false, $query = "", $widthOption = null )
        {
                $res = null;
@@ -615,16 +617,20 @@ class Linker {
                }
 
                if ( isset( $fp['thumbnail'] ) || isset( $fp['manualthumb'] ) || isset( $fp['framed'] ) ) {
-                       global $wgContLang;
-                       # Create a thumbnail. Alignment depends on language
-                       # writing direction, # right aligned for left-to-right-
-                       # languages ("Western languages"), left-aligned
-                       # for right-to-left-languages ("Semitic languages")
+                       # Create a thumbnail. Alignment depends on the writing direction of
+                       # the page content language (right-aligned for LTR languages,
+                       # left-aligned for RTL languages)
                        #
-                       # If  thumbnail width has not been provided, it is set
+                       # If a thumbnail width has not been provided, it is set
                        # to the default user option as specified in Language*.php
                        if ( $fp['align'] == '' ) {
-                               $fp['align'] = $wgContLang->alignEnd();
+                               if( $parser instanceof Parser ) {
+                                       $fp['align'] = $parser->getTargetLanguage()->alignEnd();
+                               } else {
+                                       # backwards compatibility, remove with makeImageLink2()
+                                       global $wgContLang;
+                                       $fp['align'] = $wgContLang->alignEnd();
+                               }
                        }
                        return $prefix . self::makeThumbLink2( $title, $file, $fp, $hp, $time, $query ) . $postfix;
                }
@@ -663,6 +669,17 @@ class Linker {
                return str_replace( "\n", ' ', $prefix . $s . $postfix );
        }
 
+       /**
+        * See makeImageLink()
+        * When this function is removed, remove if( $parser instanceof Parser ) check there too
+        * @deprecated since 1.20
+        */
+       public static function makeImageLink2( Title $title, $file, $frameParams = array(),
+               $handlerParams = array(), $time = false, $query = "", $widthOption = null ) {
+               return self::makeImageLink( null, $title, $file, $frameParams,
+                       $handlerParams, $time, $query, $widthOption );
+       }
+
        /**
         * Get the link parameters for MediaTransformOutput::toHtml() from given
         * frame parameters supplied by the Parser.
@@ -1673,6 +1690,11 @@ class Linker {
         * @return String: HTML fragment
         */
        public static function buildRollbackLink( $rev, IContextSource $context = null ) {
+               global $wgShowRollbackEditCount, $wgMiserMode;
+               
+               // To config which pages are effected by miser mode
+               $disableRollbackEditCountSpecialPage = array( 'Recentchanges', 'Watchlist' );
+
                if ( $context === null ) {
                        $context = RequestContext::getMain();
                }
@@ -1687,13 +1709,61 @@ class Linker {
                        $query['bot'] = '1';
                        $query['hidediff'] = '1'; // bug 15999
                }
-               return self::link(
-                       $title,
-                       $context->msg( 'rollbacklink' )->escaped(),
-                       array( 'title' => $context->msg( 'tooltip-rollback' )->text() ),
-                       $query,
-                       array( 'known', 'noclasses' )
-               );
+
+               $disableRollbackEditCount = false;
+               if( $wgMiserMode ) {
+                       foreach( $disableRollbackEditCountSpecialPage as $specialPage ) {
+                               if( $context->getTitle()->isSpecial( $specialPage ) ) {
+                                       $disableRollbackEditCount = true;
+                                       break;
+                               }
+                       }
+               }
+
+               if( !$disableRollbackEditCount && is_int( $wgShowRollbackEditCount ) && $wgShowRollbackEditCount > 0 ) {
+                       $dbr = wfGetDB( DB_SLAVE );
+
+                       // Up to the value of $wgShowRollbackEditCount revisions are counted
+                       $res = $dbr->select( 'revision',
+                               array( 'rev_id', 'rev_user_text' ),
+                               // $rev->getPage() returns null sometimes
+                               array( 'rev_page' => $rev->getTitle()->getArticleID() ),
+                               __METHOD__,
+                               array(  'USE INDEX' => 'page_timestamp',
+                                       'ORDER BY' => 'rev_timestamp DESC',
+                                       'LIMIT' => $wgShowRollbackEditCount + 1 )
+                       );
+
+                       $editCount = 0;
+                       while( $row = $dbr->fetchObject( $res ) ) {
+                               if( $rev->getUserText() != $row->rev_user_text ) {
+                                       break;
+                               }
+                               $editCount++;
+                       }
+
+                       if( $editCount > $wgShowRollbackEditCount ) {
+                               $editCount_output = $context->msg( 'rollbacklinkcount-morethan' )->numParams( $wgShowRollbackEditCount )->parse();
+                       } else {
+                               $editCount_output = $context->msg( 'rollbacklinkcount' )->numParams( $editCount )->parse();
+                       }
+
+                       return self::link(
+                               $title,
+                               $editCount_output,
+                               array( 'title' => $context->msg( 'tooltip-rollback' )->text() ),
+                               $query,
+                               array( 'known', 'noclasses' )
+                       );
+               } else {
+                       return self::link(
+                               $title,
+                               $context->msg( 'rollbacklink' )->escaped(),
+                               array( 'title' => $context->msg( 'tooltip-rollback' )->text() ),
+                               $query,
+                               array( 'known', 'noclasses' )
+                       );
+               }
        }
 
        /**
index 3a87a00..78b9ec2 100644 (file)
@@ -28,7 +28,7 @@
  *
  * First implemented with MediaWiki 1.17, the Message class is intented to
  * replace the old wfMsg* functions that over time grew unusable.
- * @see https://www.mediawiki.org/wiki/New_messages_API for equivalences
+ * @see https://www.mediawiki.org/wiki/Manual:Messages_API for equivalences
  * between old and new functions.
  *
  * You should use the wfMessage() global function which acts as a wrapper for
index 1b4bc49..bf70467 100644 (file)
@@ -647,24 +647,16 @@ class OutputPage extends ContextSource {
                $maxModified = max( $modifiedTimes );
                $this->mLastModified = wfTimestamp( TS_RFC2822, $maxModified );
 
-               if( empty( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
+               $clientHeader = $this->getRequest()->getHeader( 'If-Modified-Since' );
+               if ( $clientHeader === false ) {
                        wfDebug( __METHOD__ . ": client did not send If-Modified-Since header\n", false );
                        return false;
                }
 
-               # Make debug info
-               $info = '';
-               foreach ( $modifiedTimes as $name => $value ) {
-                       if ( $info !== '' ) {
-                               $info .= ', ';
-                       }
-                       $info .= "$name=" . wfTimestamp( TS_ISO_8601, $value );
-               }
-
                # IE sends sizes after the date like this:
                # Wed, 20 Aug 2003 06:51:19 GMT; length=5202
                # this breaks strtotime().
-               $clientHeader = preg_replace( '/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"] );
+               $clientHeader = preg_replace( '/;.*$/', '', $clientHeader );
 
                wfSuppressWarnings(); // E_STRICT system time bitching
                $clientHeaderTime = strtotime( $clientHeader );
@@ -675,6 +667,15 @@ class OutputPage extends ContextSource {
                }
                $clientHeaderTime = wfTimestamp( TS_MW, $clientHeaderTime );
 
+               # Make debug info
+               $info = '';
+               foreach ( $modifiedTimes as $name => $value ) {
+                       if ( $info !== '' ) {
+                               $info .= ', ';
+                       }
+                       $info .= "$name=" . wfTimestamp( TS_ISO_8601, $value );
+               }
+
                wfDebug( __METHOD__ . ": client sent If-Modified-Since: " .
                        wfTimestamp( TS_ISO_8601, $clientHeaderTime ) . "\n", false );
                wfDebug( __METHOD__ . ": effective Last-Modified: " .
index d82f957..be43eda 100644 (file)
@@ -118,6 +118,11 @@ abstract class IndexPager extends ContextSource implements Pager {
 
        protected $mLastShown, $mFirstShown, $mPastTheEndIndex, $mDefaultQuery, $mNavigationBar;
 
+       /**
+        * Whether to include the offset in the query
+        */
+       protected $mIncludeOffset = false;
+
        /**
         * Result object for the query. Warning: seek before use.
         *
@@ -237,6 +242,17 @@ abstract class IndexPager extends ContextSource implements Pager {
                $this->mLimit = $limit;
        }
 
+       /**
+        * Set whether a row matching exactly the offset should be also included
+        * in the result or not. By default this is not the case, but when the
+        * offset is user-supplied this might be wanted.
+        *
+        * @param $include bool
+        */
+       public function setIncludeOffset( $include ) {
+               $this->mIncludeOffset = $include;
+       }
+
        /**
         * Extract some useful data from the result object for use by
         * the navigation bar, put it into $this
@@ -337,14 +353,14 @@ abstract class IndexPager extends ContextSource implements Pager {
                $sortColumns = array_merge( array( $this->mIndexField ), $this->mExtraSortFields );
                if ( $descending ) {
                        $options['ORDER BY'] = $sortColumns;
-                       $operator = '>';
+                       $operator = $this->mIncludeOffset ? '>=' : '>';
                } else {
                        $orderBy = array();
                        foreach ( $sortColumns as $col ) {
                                $orderBy[] = $col . ' DESC';
                        }
                        $options['ORDER BY'] = $orderBy;
-                       $operator = '<';
+                       $operator = $this->mIncludeOffset ? '<=' : '<';
                }
                if ( $offset != '' ) {
                        $conds[] = $this->mIndexField . $operator . $this->mDb->addQuotes( $offset );
index 4440aac..501fd2f 100644 (file)
@@ -483,10 +483,11 @@ abstract class QueryPage extends SpecialPage {
 
                // TODO: Use doQuery()
                if ( !$this->isCached() ) {
-                       $res = $this->reallyDoQuery( $this->limit, $this->offset );
+                       # select one extra row for navigation
+                       $res = $this->reallyDoQuery( $this->limit + 1, $this->offset );
                } else {
-                       # Get the cached result
-                       $res = $this->fetchFromCache( $this->limit, $this->offset );
+                       # Get the cached result, select one extra row for navigation
+                       $res = $this->fetchFromCache( $this->limit + 1, $this->offset );
                        if ( !$this->listoutput ) {
 
                                # Fetch the timestamp of this update
@@ -528,7 +529,7 @@ abstract class QueryPage extends SpecialPage {
                                        $this->numRows, $this->offset + 1 )->parseAsBlock() );
                                # Disable the "next" link when we reach the end
                                $paging = $this->getLanguage()->viewPrevNext( $this->getTitle( $par ), $this->offset,
-                                       $this->limit, $this->linkParameters(), ( $this->numRows < $this->limit ) );
+                                       $this->limit, $this->linkParameters(), ( $this->numRows <= $this->limit ) );
                                $out->addHTML( '<p>' . $paging . '</p>' );
                        } else {
                                # No results to show, so don't bother with "showing X of Y" etc.
@@ -546,7 +547,7 @@ abstract class QueryPage extends SpecialPage {
                        $this->getSkin(),
                        $dbr, # Should use a ResultWrapper for this
                        $res,
-                       $this->numRows,
+                       min( $this->numRows, $this->limit ), # do not format the one extra row, if exist
                        $this->offset );
 
                # Repeat the paging links at the bottom
index 20e7909..4a7bafd 100644 (file)
@@ -70,6 +70,11 @@ class RecentChange {
         */
        var $mTitle = false;
 
+       /**
+        * @var User
+        */
+       private $mPerformer = false;
+
        /**
         * @var Title
         */
@@ -168,12 +173,28 @@ class RecentChange {
                return $this->mMovedToTitle;
        }
 
+       /**
+        * Get the User object of the person who performed this change.
+        *
+        * @return User
+        */
+       public function getPerformer() {
+               if ( $this->mPerformer === false ) {
+                       if ( $this->mAttribs['rc_user'] ) {
+                               $this->mPerformer = User::newFromID( $this->mAttribs['rc_user'] );
+                       } else {
+                               $this->mPerformer = User::newFromName( $this->mAttribs['rc_user_text'], false );
+                       }
+               }
+               return $this->mPerformer;
+       }
+
        /**
         * Writes the data in this object to the database
         * @param $noudp bool
         */
        public function save( $noudp = false ) {
-               global $wgLocalInterwiki, $wgPutIPinRC, $wgContLang;
+               global $wgLocalInterwiki, $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker, $wgContLang;
 
                $dbw = wfGetDB( DB_MASTER );
                if( !is_array($this->mExtra) ) {
@@ -218,18 +239,9 @@ class RecentChange {
                }
 
                # E-mail notifications
-               global $wgUseEnotif, $wgShowUpdatedMarker, $wgUser;
                if( $wgUseEnotif || $wgShowUpdatedMarker ) {
-                       // Users
-                       if( $this->mAttribs['rc_user'] ) {
-                               $editor = ($wgUser->getId() == $this->mAttribs['rc_user']) ?
-                                       $wgUser : User::newFromID( $this->mAttribs['rc_user'] );
-                       // Anons
-                       } else {
-                               $editor = ($wgUser->getName() == $this->mAttribs['rc_user_text']) ?
-                                       $wgUser : User::newFromName( $this->mAttribs['rc_user_text'], false );
-                       }
-                       $title = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
+                       $editor = $this->getPerformer();
+                       $title = $this->getTitle();
 
                        if ( wfRunHooks( 'AbortEmailNotification', array($editor, $title) ) ) {
                                # @todo FIXME: This would be better as an extension hook
@@ -393,6 +405,8 @@ class RecentChange {
        public static function notifyEdit( $timestamp, &$title, $minor, &$user, $comment, $oldId,
                $lastTimestamp, $bot, $ip='', $oldSize=0, $newSize=0, $newId=0, $patrol=0 ) {
                $rc = new RecentChange;
+               $rc->mTitle = $title;
+               $rc->mPerformer = $user;
                $rc->mAttribs = array(
                        'rc_timestamp'  => $timestamp,
                        'rc_cur_time'   => $timestamp,
@@ -451,6 +465,8 @@ class RecentChange {
        public static function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot,
                $ip='', $size=0, $newId=0, $patrol=0 ) {
                $rc = new RecentChange;
+               $rc->mTitle = $title;
+               $rc->mPerformer = $user;
                $rc->mAttribs = array(
                        'rc_timestamp'      => $timestamp,
                        'rc_cur_time'       => $timestamp,
@@ -538,6 +554,8 @@ class RecentChange {
                global $wgRequest;
 
                $rc = new RecentChange;
+               $rc->mTitle = $target;
+               $rc->mPerformer = $user;
                $rc->mAttribs = array(
                        'rc_timestamp'  => $timestamp,
                        'rc_cur_time'   => $timestamp,
index 18a880e..dedfca9 100644 (file)
@@ -365,8 +365,10 @@ if ( $wgNewUserLog ) {
        $wgLogTypes[]                        = 'newusers';
        $wgLogNames['newusers']              = 'newuserlogpage';
        $wgLogHeaders['newusers']            = 'newuserlogpagetext';
-       # newusers, create, create2, autocreate
-       $wgLogActionsHandlers['newusers/*']  = 'NewUsersLogFormatter';
+       $wgLogActionsHandlers['newusers/newusers'] = 'NewUsersLogFormatter';
+       $wgLogActionsHandlers['newusers/create'] = 'NewUsersLogFormatter';
+       $wgLogActionsHandlers['newusers/create2'] = 'NewUsersLogFormatter';
+       $wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
 }
 
 if ( $wgCookieSecure === 'detect' ) {
index 6385250..4a1c699 100644 (file)
@@ -446,13 +446,13 @@ class LegacyTemplate extends BaseTemplate {
 
                if ( $wgOut->isArticleRelated() ) {
                        if ( $title->getNamespace() == NS_FILE ) {
-                               $name = $title->getDBkey();
                                $image = wfFindFile( $title );
 
                                if ( $image ) {
-                                       $link = htmlspecialchars( $image->getURL() );
-                                       $style = Linker::getInternalLinkAttributes( $link, $name );
-                                       $s[] = "<a href=\"{$link}\"{$style}>{$name}</a>";
+                                       $href = $image->getURL();
+                                       $s[] = Html::element( 'a', array( 'href' => $href,
+                                               'title' => $href ), $title->getText() );
+
                                }
                        }
                }
index 629e06d..e2932e1 100644 (file)
@@ -605,7 +605,7 @@ class SpecialPage {
                 * @param $special SpecialPage
                 * @param $subPage string|null
                 */
-               wfRunHooks( 'SpecialPageBeforeExecute', array( &$this, $subPage ) );
+               wfRunHooks( 'SpecialPageBeforeExecute', array( $this, $subPage ) );
 
                $this->beforeExecute( $subPage );
                $this->execute( $subPage );
@@ -619,7 +619,7 @@ class SpecialPage {
                 * @param $special SpecialPage
                 * @param $subPage string|null
                 */
-               wfRunHooks( 'SpecialPageAfterExecute', array( &$this, $subPage ) );
+               wfRunHooks( 'SpecialPageAfterExecute', array( $this, $subPage ) );
        }
 
        /**
index ca8ce8f..aef49fc 100644 (file)
@@ -1388,11 +1388,11 @@ class User {
                                $ipList = gethostbynamel( $host );
 
                                if( $ipList ) {
-                                       wfDebug( "Hostname $host is {$ipList[0]}, it's a proxy says $base!\n" );
+                                       wfDebugLog( 'dnsblacklist', "Hostname $host is {$ipList[0]}, it's a proxy says $base!\n" );
                                        $found = true;
                                        break;
                                } else {
-                                       wfDebug( "Requested $host, not found in $base.\n" );
+                                       wfDebugLog( 'dnsblacklist', "Requested $host, not found in $base.\n" );
                                }
                        }
                }
@@ -2715,8 +2715,7 @@ class User {
                        $force = 'force';
                }
 
-               $wi = WatchedItem::fromUserTitle( $this, $title );
-               $wi->resetNotificationTimestamp( $force );
+               $this->getWatchedItem( $title )->resetNotificationTimestamp( $force );
        }
 
        /**
index 766db46..91bd923 100644 (file)
@@ -88,7 +88,9 @@ class WebRequest {
                        if ( !preg_match( '!^https?://!', $url ) ) {
                                $url = 'http://unused' . $url;
                        }
+                       wfSuppressWarnings();
                        $a = parse_url( $url );
+                       wfRestoreWarnings();
                        if( $a ) {
                                $path = isset( $a['path'] ) ? $a['path'] : '';
 
index 5f593e7..a4a8903 100644 (file)
@@ -62,7 +62,6 @@ class MediaWiki {
                }
 
                $this->context = $context;
-               $this->context->setTitle( $this->parseTitle() );
        }
 
        /**
@@ -133,6 +132,34 @@ class MediaWiki {
                return $this->context->getTitle();
        }
 
+       /**
+        * Returns the name of the action that will be executed.
+        *
+        * @return string: action
+        */
+       public function getAction() {
+               static $action = null;
+
+               if ( $action === null ) {
+                       $action = Action::getActionName( $this->context );
+               }
+
+               return $action;
+       }
+
+       /**
+        * Create an Article object of the appropriate class for the given page.
+        *
+        * @deprecated in 1.18; use Article::newFromTitle() instead
+        * @param $title Title
+        * @param $context IContextSource
+        * @return Article object
+        */
+       public static function articleFromTitle( $title, IContextSource $context ) {
+               wfDeprecated( __METHOD__, '1.18' );
+               return Article::newFromTitle( $title, $context );
+       }
+
        /**
         * Performs the request.
         * - bad titles
@@ -291,34 +318,6 @@ class MediaWiki {
                wfProfileOut( __METHOD__ );
        }
 
-       /**
-        * Create an Article object of the appropriate class for the given page.
-        *
-        * @deprecated in 1.18; use Article::newFromTitle() instead
-        * @param $title Title
-        * @param $context IContextSource
-        * @return Article object
-        */
-       public static function articleFromTitle( $title, IContextSource $context ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               return Article::newFromTitle( $title, $context );
-       }
-
-       /**
-        * Returns the name of the action that will be executed.
-        *
-        * @return string: action
-        */
-       public function getAction() {
-               static $action = null;
-               
-               if ( $action === null ) {
-                       $action = Action::getActionName( $this->context );
-               }
-
-               return $action;
-       }
-
        /**
         * Initialize the main Article object for "standard" actions (view, etc)
         * Create an Article object for the page, following redirects if needed.
@@ -392,64 +391,6 @@ class MediaWiki {
                return $article;
        }
 
-       /**
-        * Do a job from the job queue
-        */
-       private function doJobs() {
-               global $wgJobRunRate;
-
-               if ( $wgJobRunRate <= 0 || wfReadOnly() ) {
-                       return;
-               }
-               if ( $wgJobRunRate < 1 ) {
-                       $max = mt_getrandmax();
-                       if ( mt_rand( 0, $max ) > $max * $wgJobRunRate ) {
-                               return;
-                       }
-                       $n = 1;
-               } else {
-                       $n = intval( $wgJobRunRate );
-               }
-
-               while ( $n-- && false != ( $job = Job::pop() ) ) {
-                       $output = $job->toString() . "\n";
-                       $t = - microtime( true );
-                       $success = $job->run();
-                       $t += microtime( true );
-                       $t = round( $t * 1000 );
-                       if ( !$success ) {
-                               $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
-                       } else {
-                               $output .= "Success, Time: $t ms\n";
-                       }
-                       wfDebugLog( 'jobqueue', $output );
-               }
-       }
-
-       /**
-        * Ends this task peacefully
-        */
-       public function restInPeace() {
-               // Do any deferred jobs
-               DeferredUpdates::doUpdates( 'commit' );
-
-               // Execute a job from the queue
-               $this->doJobs();
-
-               // Log message usage, if $wgAdaptiveMessageCache is set to true
-               MessageCache::logMessages();
-
-               // Log profiling data, e.g. in the database or UDP
-               wfLogProfilingData();
-
-               // Commit and close up!
-               $factory = wfGetLBFactory();
-               $factory->commitMasterChanges();
-               $factory->shutdown();
-
-               wfDebug( "Request ended normally\n" );
-       }
-
        /**
         * Perform one of the "standard" actions
         *
@@ -603,4 +544,62 @@ class MediaWiki {
 
                wfProfileOut( __METHOD__ );
        }
+
+       /**
+        * Ends this task peacefully
+        */
+       public function restInPeace() {
+               // Do any deferred jobs
+               DeferredUpdates::doUpdates( 'commit' );
+
+               // Execute a job from the queue
+               $this->doJobs();
+
+               // Log message usage, if $wgAdaptiveMessageCache is set to true
+               MessageCache::logMessages();
+
+               // Log profiling data, e.g. in the database or UDP
+               wfLogProfilingData();
+
+               // Commit and close up!
+               $factory = wfGetLBFactory();
+               $factory->commitMasterChanges();
+               $factory->shutdown();
+
+               wfDebug( "Request ended normally\n" );
+       }
+
+       /**
+        * Do a job from the job queue
+        */
+       private function doJobs() {
+               global $wgJobRunRate;
+
+               if ( $wgJobRunRate <= 0 || wfReadOnly() ) {
+                       return;
+               }
+               if ( $wgJobRunRate < 1 ) {
+                       $max = mt_getrandmax();
+                       if ( mt_rand( 0, $max ) > $max * $wgJobRunRate ) {
+                               return;
+                       }
+                       $n = 1;
+               } else {
+                       $n = intval( $wgJobRunRate );
+               }
+
+               while ( $n-- && false != ( $job = Job::pop() ) ) {
+                       $output = $job->toString() . "\n";
+                       $t = - microtime( true );
+                       $success = $job->run();
+                       $t += microtime( true );
+                       $t = round( $t * 1000 );
+                       if ( !$success ) {
+                               $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
+                       } else {
+                               $output .= "Success, Time: $t ms\n";
+                       }
+                       wfDebugLog( 'jobqueue', $output );
+               }
+       }
 }
index 7dd85b6..4a5e2bc 100644 (file)
@@ -109,7 +109,7 @@ class WikiMap {
                $wiki = WikiMap::getWiki( $wikiID );
 
                if ( $wiki ) {
-                       return $wiki->getUrl( $page );
+                       return $wiki->getFullUrl( $page );
                }
 
                return false;
index 2de1626..1378ce1 100644 (file)
@@ -1428,7 +1428,7 @@ class WikiPage extends Page {
         *  Compatibility note: this function previously returned a boolean value indicating success/failure
         */
        public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
-               global $wgUser, $wgUseAutomaticEditSummaries;
+               global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
 
                # Low-level sanity check
                if ( $this->mTitle->getText() === '' ) {
@@ -1530,45 +1530,40 @@ class WikiPage extends Page {
                                $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
 
                                if ( !$ok ) {
-                                       /* Belated edit conflict! Run away!! */
+                                       # Belated edit conflict! Run away!!
                                        $status->fatal( 'edit-conflict' );
 
-                                       $revisionId = 0;
                                        $dbw->rollback( __METHOD__ );
-                               } else {
-                                       global $wgUseRCPatrol;
-                                       wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
-                                       # Update recentchanges
-                                       if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                                               # Mark as patrolled if the user can do so
-                                               $patrolled = $wgUseRCPatrol && !count(
-                                                       $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-                                               # Add RC row to the DB
-                                               $rc = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $user, $summary,
-                                                       $oldid, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
-                                                       $revisionId, $patrolled
-                                               );
-
-                                               # Log auto-patrolled edits
-                                               if ( $patrolled ) {
-                                                       PatrolLog::record( $rc, true, $user );
-                                               }
+
+                                       wfProfileOut( __METHOD__ );
+                                       return $status;
+                               }
+
+                               wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
+                               # Update recentchanges
+                               if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
+                                       # Mark as patrolled if the user can do so
+                                       $patrolled = $wgUseRCPatrol && !count(
+                                               $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
+                                       # Add RC row to the DB
+                                       $rc = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $user, $summary,
+                                               $oldid, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
+                                               $revisionId, $patrolled
+                                       );
+
+                                       # Log auto-patrolled edits
+                                       if ( $patrolled ) {
+                                               PatrolLog::record( $rc, true, $user );
                                        }
-                                       $user->incEditCount();
-                                       $dbw->commit( __METHOD__ );
                                }
+                               $user->incEditCount();
+                               $dbw->commit( __METHOD__ );
                        } else {
                                // Bug 32948: revision ID must be set to page {{REVISIONID}} and
                                // related variables correctly
                                $revision->setId( $this->getLatest() );
                        }
 
-                       // Now that ignore_user_abort is restored, we can respond to fatal errors
-                       if ( !$status->isOK() ) {
-                               wfProfileOut( __METHOD__ );
-                               return $status;
-                       }
-
                        # Update links tables, site stats, etc.
                        $this->doEditUpdates( $revision, $user, array( 'changed' => $changed,
                                'oldcountable' => $oldcountable ) );
@@ -1620,8 +1615,6 @@ class WikiPage extends Page {
 
                        # Update recentchanges
                        if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                               global $wgUseRCPatrol, $wgUseNPPatrol;
-
                                # Mark as patrolled if the user can do so
                                $patrolled = ( $wgUseRCPatrol || $wgUseNPPatrol ) && !count(
                                        $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
index 0595923..b98f521 100644 (file)
@@ -7061,6 +7061,7 @@ $zh2Hant = array(
 '皇庄' => '皇莊',
 '皓发' => '皓髮',
 '皮制服' => '皮制服',
+'皮肤' => '皮膚',
 '皮里春秋' => '皮裡春秋',
 '皮里阳秋' => '皮裡陽秋',
 '皮制' => '皮製',
@@ -8409,6 +8410,7 @@ $zh2Hant = array(
 '跌扑' => '跌扑',
 '跌荡' => '跌蕩',
 '路签' => '路籤',
+'路面' => '路面',
 '跳梁小丑' => '跳樑小丑',
 '跳荡' => '跳蕩',
 '跳表' => '跳錶',
@@ -18192,7 +18194,6 @@ $zh2CN = array(
 '攜帶型' => '便携式',
 '資訊理論' => '信息论',
 '母音' => '元音',
-'游標' => '光标',
 '光碟' => '光盘',
 '光碟機' => '光驱',
 '柯林頓' => '克林顿',
@@ -18455,4 +18456,4 @@ $zh2SG = array(
 '笨豬跳' => '绑紧跳',
 '蹦极跳' => '绑紧跳',
 '笑星' => '谐星',
-);
\ No newline at end of file
+);
index 89e2cfe..f4813a4 100644 (file)
@@ -50,53 +50,59 @@ class InfoAction extends FormlessAction {
 
                $title = $this->getTitle()->getSubjectPage();
 
-               $pageInfo = self::pageCountInfo( $title );
-               $talkInfo = self::pageCountInfo( $title->getTalkPage() );
+               $userCanViewUnwatchedPages = $this->getUser()->isAllowed( 'unwatchedpages' );
 
-               return Html::rawElement( 'table', array( 'class' => 'wikitable mw-page-info' ),
+               $pageInfo = self::pageCountInfo( $title, $userCanViewUnwatchedPages, $wgDisableCounters );
+               $talkInfo = self::pageCountInfo( $title->getTalkPage(), $userCanViewUnwatchedPages, $wgDisableCounters );
+
+               $lang = $this->getLanguage();
+
+               $content =
                        Html::rawElement( 'tr', array(),
                                Html::element( 'th', array(), '' ) .
-                               Html::element( 'th', array(), $this->msg( 'pageinfo-subjectpage' )->text() ) .
-                               Html::element( 'th', array(), $this->msg( 'pageinfo-talkpage' )->text() )
+                                       Html::element( 'th', array(), $this->msg( 'pageinfo-subjectpage' )->text() ) .
+                                       Html::element( 'th', array(), $this->msg( 'pageinfo-talkpage' )->text() )
                        ) .
                        Html::rawElement( 'tr', array(),
                                Html::element( 'th', array( 'colspan' => 3 ), $this->msg( 'pageinfo-header-edits' )->text() )
                        ) .
                        Html::rawElement( 'tr', array(),
                                Html::element( 'td', array(), $this->msg( 'pageinfo-edits' )->text() ) .
-                               Html::element( 'td', array(), $this->getLanguage()->formatNum( $pageInfo['edits'] ) ) .
-                               Html::element( 'td', array(), $this->getLanguage()->formatNum( $talkInfo['edits'] ) )
+                                       Html::element( 'td', array(), $lang->formatNum( $pageInfo['edits'] ) ) .
+                                       Html::element( 'td', array(), $lang->formatNum( $talkInfo['edits'] ) )
                        ) .
                        Html::rawElement( 'tr', array(),
                                Html::element( 'td', array(), $this->msg( 'pageinfo-authors' )->text() ) .
-                               Html::element( 'td', array(), $this->getLanguage()->formatNum( $pageInfo['authors'] ) ) .
-                               Html::element( 'td', array(), $this->getLanguage()->formatNum( $talkInfo['authors'] ) )
+                                       Html::element( 'td', array(), $lang->formatNum( $pageInfo['authors'] ) ) .
+                                       Html::element( 'td', array(), $lang->formatNum( $talkInfo['authors'] ) )
+                       );
+
+               if ( $userCanViewUnwatchedPages ) {
+                       $content .= Html::rawElement( 'tr', array(),
+                               Html::element( 'th', array( 'colspan' => 3 ), $this->msg( 'pageinfo-header-watchlist' )->text() )
                        ) .
-                       ( !$this->getUser()->isAllowed( 'unwatchedpages' ) ? '' :
-                               Html::rawElement( 'tr', array(),
-                                       Html::element( 'th', array( 'colspan' => 3 ), $this->msg( 'pageinfo-header-watchlist' )->text() )
-                               ) .
                                Html::rawElement( 'tr', array(),
                                        Html::element( 'td', array(), $this->msg( 'pageinfo-watchers' )->text() ) .
-                                       Html::element( 'td', array( 'colspan' => 2 ), $this->getLanguage()->formatNum( $pageInfo['watchers'] ) )
-                               )
-                       ).
-                       ( $wgDisableCounters ? '' :
-                               Html::rawElement( 'tr', array(),
-                                       Html::element( 'th', array( 'colspan' => 3 ), $this->msg( 'pageinfo-header-views' )->text() )
-                               ) .
+                                               Html::element( 'td', array( 'colspan' => 2 ), $lang->formatNum( $pageInfo['watchers'] ) )
+                               );
+               }
+
+               if ( !$wgDisableCounters ) {
+                       $content .= Html::rawElement( 'tr', array(),
+                               Html::element( 'th', array( 'colspan' => 3 ), $this->msg( 'pageinfo-header-views' )->text() )
+                       ) .
                                Html::rawElement( 'tr', array(),
                                        Html::element( 'td', array(), $this->msg( 'pageinfo-views' )->text() ) .
-                                       Html::element( 'td', array(), $this->getLanguage()->formatNum( $pageInfo['views'] ) ) .
-                                       Html::element( 'td', array(), $this->getLanguage()->formatNum( $talkInfo['views'] ) )
+                                               Html::element( 'td', array(), $lang->formatNum( $pageInfo['views'] ) ) .
+                                               Html::element( 'td', array(), $lang->formatNum( $talkInfo['views'] ) )
                                ) .
                                Html::rawElement( 'tr', array(),
                                        Html::element( 'td', array(), $this->msg( 'pageinfo-viewsperedit' )->text() ) .
-                                       Html::element( 'td', array(), $this->getLanguage()->formatNum( sprintf( '%.2f', $pageInfo['edits'] ? $pageInfo['views'] / $pageInfo['edits'] : 0 ) ) ) .
-                                       Html::element( 'td', array(), $this->getLanguage()->formatNum( sprintf( '%.2f', $talkInfo['edits'] ? $talkInfo['views'] / $talkInfo['edits'] : 0 ) ) )
-                               )
-                       )
-               );
+                                               Html::element( 'td', array(), $lang->formatNum( sprintf( '%.2f', $pageInfo['edits'] ? $pageInfo['views'] / $pageInfo['edits'] : 0 ) ) ) .
+                                               Html::element( 'td', array(), $lang->formatNum( sprintf( '%.2f', $talkInfo['edits'] ? $talkInfo['views'] / $talkInfo['edits'] : 0 ) ) )
+                               );
+               }
+               return Html::rawElement( 'table', array( 'class' => 'wikitable mw-page-info' ), $content );
        }
 
        /**
@@ -104,22 +110,28 @@ class InfoAction extends FormlessAction {
         * on a given page. If page does not exist, returns false.
         *
         * @param $title Title object
-        * @return mixed array or boolean false
+        * @param $canViewUnwatched bool
+        * @param $disableCounter bool
+        * @return array
         */
-       public static function pageCountInfo( $title ) {
+       public static function pageCountInfo( $title, $canViewUnwatched, $disableCounter ) {
                wfProfileIn( __METHOD__ );
                $id = $title->getArticleID();
                $dbr = wfGetDB( DB_SLAVE );
 
-               $watchers = (int)$dbr->selectField(
-                       'watchlist',
-                       'COUNT(*)',
-                       array(
-                               'wl_namespace' => $title->getNamespace(),
-                               'wl_title'     => $title->getDBkey(),
-                       ),
-                       __METHOD__
-               );
+               $result = array();
+               if ( $canViewUnwatched ) {
+                       $watchers = (int)$dbr->selectField(
+                               'watchlist',
+                               'COUNT(*)',
+                               array(
+                                       'wl_namespace' => $title->getNamespace(),
+                                       'wl_title'     => $title->getDBkey(),
+                               ),
+                               __METHOD__
+                       );
+                       $result['watchers'] = $watchers;
+               }
 
                $edits = (int)$dbr->selectField(
                        'revision',
@@ -127,6 +139,7 @@ class InfoAction extends FormlessAction {
                        array( 'rev_page' => $id ),
                        __METHOD__
                );
+               $result['edits'] = $edits;
 
                $authors = (int)$dbr->selectField(
                        'revision',
@@ -134,11 +147,9 @@ class InfoAction extends FormlessAction {
                        array( 'rev_page' => $id ),
                        __METHOD__
                );
-               $result = array( 'watchers' => $watchers, 'edits' => $edits,
-                       'authors' => $authors );
+               $result['authors'] = $authors;
 
-               global $wgDisableCounters;
-               if ( !$wgDisableCounters ) {
+               if ( !$disableCounter ) {
                        $views = (int)$dbr->selectField(
                                'page',
                                'page_counter',
index bc94ee4..77e1356 100644 (file)
@@ -401,7 +401,9 @@ abstract class ApiBase extends ContextSource {
 
                                $type = isset( $paramSettings[self::PARAM_TYPE] ) ? $paramSettings[self::PARAM_TYPE] : null;
                                if ( isset( $type ) ) {
-                                       if ( isset( $paramSettings[self::PARAM_ISMULTI] ) && $paramSettings[self::PARAM_ISMULTI] ) {
+                                       $hintPipeSeparated = true;
+                                       $multi = isset( $paramSettings[self::PARAM_ISMULTI] ) ? $paramSettings[self::PARAM_ISMULTI] : false;
+                                       if ( $multi ) {
                                                $prompt = 'Values (separate with \'|\'): ';
                                        } else {
                                                $prompt = 'One value: ';
@@ -409,7 +411,7 @@ abstract class ApiBase extends ContextSource {
 
                                        if ( is_array( $type ) ) {
                                                $choices = array();
-                                               $nothingPrompt = false;
+                                               $nothingPrompt = '';
                                                foreach ( $type as $t ) {
                                                        if ( $t === '' ) {
                                                                $nothingPrompt = 'Can be empty, or ';
@@ -420,6 +422,7 @@ abstract class ApiBase extends ContextSource {
                                                $desc .= $paramPrefix . $nothingPrompt . $prompt;
                                                $choicesstring = implode( ', ', $choices );
                                                $desc .= wordwrap( $choicesstring, 100, $descWordwrap );
+                                               $hintPipeSeparated = false;
                                        } else {
                                                switch ( $type ) {
                                                        case 'namespace':
@@ -427,6 +430,7 @@ abstract class ApiBase extends ContextSource {
                                                                $desc .= $paramPrefix . $prompt;
                                                                $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ),
                                                                        100, $descWordwrap );
+                                                               $hintPipeSeparated = false;
                                                                break;
                                                        case 'limit':
                                                                $desc .= $paramPrefix . "No more than {$paramSettings[self :: PARAM_MAX]}";
@@ -436,15 +440,16 @@ abstract class ApiBase extends ContextSource {
                                                                $desc .= ' allowed';
                                                                break;
                                                        case 'integer':
+                                                               $s = $multi ? 's' : '';
                                                                $hasMin = isset( $paramSettings[self::PARAM_MIN] );
                                                                $hasMax = isset( $paramSettings[self::PARAM_MAX] );
                                                                if ( $hasMin || $hasMax ) {
                                                                        if ( !$hasMax ) {
-                                                                               $intRangeStr = "The value must be no less than {$paramSettings[self::PARAM_MIN]}";
+                                                                               $intRangeStr = "The value$s must be no less than {$paramSettings[self::PARAM_MIN]}";
                                                                        } elseif ( !$hasMin ) {
-                                                                               $intRangeStr = "The value must be no more than {$paramSettings[self::PARAM_MAX]}";
+                                                                               $intRangeStr = "The value$s must be no more than {$paramSettings[self::PARAM_MAX]}";
                                                                        } else {
-                                                                               $intRangeStr = "The value must be between {$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
+                                                                               $intRangeStr = "The value$s must be between {$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
                                                                        }
 
                                                                        $desc .= $paramPrefix . $intRangeStr;
@@ -453,9 +458,12 @@ abstract class ApiBase extends ContextSource {
                                                }
                                        }
 
-                                       if ( isset( $paramSettings[self::PARAM_ISMULTI] ) && $paramSettings[self::PARAM_ISMULTI] ) {
-                                               $isArray = is_array( $type );
+                                       if ( $multi ) {
+                                               if ( $hintPipeSeparated ) {
+                                                       $desc .= $paramPrefix . "Separate values with '|'";
+                                               }
 
+                                               $isArray = is_array( $type );
                                                if ( !$isArray
                                                                || $isArray && count( $type ) > self::LIMIT_SML1 ) {
                                                        $desc .= $paramPrefix . "Maximum number of values " .
@@ -1440,7 +1448,9 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
-        * Returns whether this module requires a Token to execute
+        * Returns whether this module requires a token to execute
+        * It is used to show possible errors in action=paraminfo
+        * see bug 25248
         * @return bool
         */
        public function needsToken() {
@@ -1448,8 +1458,12 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
-        * Returns the token salt if there is one, '' if the module doesn't require a salt, else false if the module doesn't need a token
-        * @return bool|string
+        * Returns the token salt if there is one,
+        * '' if the module doesn't require a salt,
+        * else false if the module doesn't need a token
+        * You have also to override needsToken()
+        * Value is passed to User::getEditToken
+        * @return bool|string|array
         */
        public function getTokenSalt() {
                return false;
index 341df24..5e97293 100644 (file)
@@ -65,6 +65,7 @@ class ApiMain extends ApiBase {
 
                // Write modules
                'purge' => 'ApiPurge',
+               'setnotificationtimestamp' => 'ApiSetNotificationTimestamp',
                'rollback' => 'ApiRollback',
                'delete' => 'ApiDelete',
                'undelete' => 'ApiUndelete',
index 2b3d5e3..d3847a0 100644 (file)
@@ -123,7 +123,7 @@ class ApiOptions extends ApiBase {
                return array(
                        'token' => 'An options token previously obtained through the action=tokens',
                        'reset' => 'Resets all preferences to the site defaults',
-                       'change' => 'Pipe-separated list of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters',
+                       'change' => 'List of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters',
                        'optionname' => 'A name of a option which should have an optionvalue set',
                        'optionvalue' => 'A value of the option specified by the optionname, can contain pipe characters',
                );
index 875684e..f64b3e5 100644 (file)
@@ -289,6 +289,18 @@ class ApiParse extends ApiBase {
                        $result_array['properties'] = $this->formatProperties( $p_result->getProperties() );
                }
 
+               if ( $params['generatexml'] ) {
+                       $wgParser->startExternalParse( $titleObj, $popts, OT_PREPROCESS );
+                       $dom = $wgParser->preprocessToDom( $this->text );
+                       if ( is_callable( array( $dom, 'saveXML' ) ) ) {
+                               $xml = $dom->saveXML();
+                       } else {
+                               $xml = $dom->__toString();
+                       }
+                       $result_array['parsetree'] = array();
+                       $result->setContent( $result_array['parsetree'], $xml );
+               }
+
                $result_mapping = array(
                        'redirects' => 'r',
                        'langlinks' => 'll',
@@ -541,6 +553,7 @@ class ApiParse extends ApiBase {
                        'uselang' => null,
                        'section' => null,
                        'disablepp' => false,
+                       'generatexml' => false,
                );
        }
 
@@ -585,6 +598,7 @@ class ApiParse extends ApiBase {
                        'uselang' => 'Which language to parse the request in',
                        'section' => 'Only retrieve the content of this section number',
                        'disablepp' => 'Disable the PP Report from the parser output',
+                       'generatexml' => 'Generate XML parse tree',
                );
        }
 
index d516504..b3ca67e 100644 (file)
@@ -176,7 +176,7 @@ class ApiProtect extends ApiBase {
                        'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
                        'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
                        'token' => 'A protect token previously retrieved through prop=info',
-                       'protections' => 'Pipe-separated list of protection levels, formatted action=group (e.g. edit=sysop)',
+                       'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
                        'expiry' => array( 'Expiry timestamps. If only one timestamp is set, it\'ll be used for all protections.',
                                        'Use \'infinite\', \'indefinite\' or \'never\', for a neverexpiring protection.' ),
                        'reason' => 'Reason for (un)protecting',
index 99e22d5..d7c341d 100644 (file)
@@ -690,7 +690,7 @@ class ApiQuery extends ApiBase {
                                        'NOTE: generator parameter names must be prefixed with a \'g\', see examples' ),
                        'redirects' => 'Automatically resolve redirects',
                        'converttitles' => array( "Convert titles to other variants if necessary. Only works if the wiki's content language supports variant conversion.",
-                                       'Languages that support variant conversion include gan, iu, kk, ku, shi, sr, tg, zh' ),
+                                       'Languages that support variant conversion include ' . implode( ', ', LanguageConverter::$languagesWithVariants ) ),
                        'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
                        'export' => 'Export the current revisions of all given or generated pages',
                        'exportnowrap' => 'Return the export XML without wrapping it in an XML result (same format as Special:Export). Can only be used with export',
index 097487e..d88e4da 100644 (file)
@@ -299,8 +299,8 @@ class ApiQueryBlocks extends ApiQueryBase {
                        'start' => 'The timestamp to start enumerating from',
                        'end' => 'The timestamp to stop enumerating at',
                        'dir' => $this->getDirectionDescription( $p ),
-                       'ids' => 'Pipe-separated list of block IDs to list (optional)',
-                       'users' => 'Pipe-separated list of users to search for (optional)',
+                       'ids' => 'List of block IDs to list (optional)',
+                       'users' => 'List of users to search for (optional)',
                        'ip' => array(  'Get all blocks applying to this IP or CIDR range, including range blocks.',
                                        'Cannot be used together with bkusers. CIDR ranges broader than /16 are not accepted' ),
                        'limit' => 'The maximum amount of blocks to list',
index e05ffb6..a4efc4c 100644 (file)
@@ -59,73 +59,96 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                }
                $images = $namespaces[NS_FILE];
 
-               $this->addTables( 'image', 'i1' );
-               $this->addTables( 'image', 'i2' );
-               $this->addFields( array(
-                       'i1.img_name AS orig_name',
-                       'i2.img_name AS dup_name',
-                       'i2.img_user_text AS dup_user_text',
-                       'i2.img_timestamp AS dup_timestamp'
-               ) );
-
-               $this->addWhere( array(
-                       'i1.img_name' => array_keys( $images ),
-                       'i1.img_sha1 = i2.img_sha1',
-                       'i1.img_name != i2.img_name',
-               ) );
+               if( $params['dir'] == 'descending' ) {
+                       $images = array_reverse( $images );
+               }
 
+               $skipUntilThisDup = false;
                if ( isset( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
                        if ( count( $cont ) != 2 ) {
                                $this->dieUsage( 'Invalid continue param. You should pass the ' .
                                        'original value returned by the previous query', '_badcontinue' );
                        }
-                       $op = $params['dir'] == 'descending' ? '<' : '>';
-                       $db = $this->getDB();
-                       $orig = $db->addQuotes( $cont[0] );
-                       $dup = $db->addQuotes( $cont[1] );
-                       $this->addWhere(
-                               "i1.img_name $op $orig OR " .
-                               "(i1.img_name = $orig AND " .
-                               "i2.img_name $op= $dup)"
-                       );
+                       $fromImage = $cont[0];
+                       $skipUntilThisDup = $cont[1];
+                       // Filter out any images before $fromImage
+                       foreach ( $images as $image => $pageId ) {
+                               if ( $image < $fromImage ) {
+                                       unset( $images[$image] );
+                               } else {
+                                       break;
+                               }
+                       }
                }
 
-               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
-               // Don't order by i1.img_name if it's constant in the WHERE clause
-               if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
-                       $this->addOption( 'ORDER BY', 'i2.img_name' . $sort );
+               $filesToFind = array_keys( $images );
+               if( $params['localonly'] ) {
+                       $files = RepoGroup::singleton()->getLocalRepo()->findFiles( $filesToFind );
                } else {
-                       $this->addOption( 'ORDER BY', array(
-                                       'i1.img_name' . $sort,
-                                       'i2.img_name' . $sort
-                       ));
+                       $files = RepoGroup::singleton()->findFiles( $filesToFind );
                }
-               $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
-               $res = $this->select( __METHOD__ );
+               $fit = true;
                $count = 0;
                $titles = array();
-               foreach ( $res as $row ) {
-                       if ( ++$count > $params['limit'] ) {
-                               // We've reached the one extra which shows that
-                               // there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'continue', $row->orig_name . '|' . $row->dup_name );
-                               break;
+
+               $sha1s = array();
+               foreach ( $files as $file ) {
+                       $sha1s[$file->getName()] = $file->getSha1();
+               }
+
+               // find all files with the hashes, result format is: array( hash => array( dup1, dup2 ), hash1 => ... )
+               $filesToFindBySha1s = array_unique( array_values( $sha1s ) );
+               if( $params['localonly'] ) {
+                       $filesBySha1s = RepoGroup::singleton()->getLocalRepo()->findBySha1s( $filesToFindBySha1s );
+               } else {
+                       $filesBySha1s = RepoGroup::singleton()->findBySha1s( $filesToFindBySha1s );
+               }
+
+               // iterate over $images to handle continue param correct
+               foreach( $images as $image => $pageId ) {
+                       if( !isset( $sha1s[$image] ) ) {
+                               continue; //file does not exist
+                       }
+                       $sha1 = $sha1s[$image];
+                       $dupFiles = $filesBySha1s[$sha1];
+                       if( $params['dir'] == 'descending' ) {
+                               $dupFiles = array_reverse( $dupFiles );
                        }
-                       if ( !is_null( $resultPageSet ) ) {
-                               $titles[] = Title::makeTitle( NS_FILE, $row->dup_name );
-                       } else {
-                               $r = array(
-                                       'name' => $row->dup_name,
-                                       'user' => $row->dup_user_text,
-                                       'timestamp' => wfTimestamp( TS_ISO_8601, $row->dup_timestamp )
-                               );
-                               $fit = $this->addPageSubItem( $images[$row->orig_name], $r );
-                               if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'continue', $row->orig_name . '|' . $row->dup_name );
+                       foreach ( $dupFiles as $dupFile ) {
+                               $dupName = $dupFile->getName();
+                               if( $image == $dupName ) {
+                                       continue; //ignore the file itself
+                               }
+                               if( $skipUntilThisDup !== false && $dupName < $skipUntilThisDup ) {
+                                       continue; //skip to pos after the image from continue param
+                               }
+                               $skipUntilThisDup = false;
+                               if ( ++$count > $params['limit'] ) {
+                                       $fit = false; //break outer loop
+                                       // We're one over limit which shows that
+                                       // there are additional images to be had. Stop here...
+                                       $this->setContinueEnumParameter( 'continue', $image . '|' . $dupName );
                                        break;
                                }
+                               if ( !is_null( $resultPageSet ) ) {
+                                       $titles[] = $file->getTitle();
+                               } else {
+                                       $r = array(
+                                               'name' => $dupName,
+                                               'user' => $dupFile->getUser( 'text' ),
+                                               'timestamp' => wfTimestamp( TS_ISO_8601, $dupFile->getTimestamp() )
+                                       );
+                                       $fit = $this->addPageSubItem( $pageId, $r );
+                                       if ( !$fit ) {
+                                               $this->setContinueEnumParameter( 'continue', $image . '|' . $dupName );
+                                               break;
+                                       }
+                               }
+                       }
+                       if( !$fit ) {
+                               break;
                        }
                }
                if ( !is_null( $resultPageSet ) ) {
@@ -150,14 +173,16 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                                        'descending'
                                )
                        ),
+                       'localonly' => false,
                );
        }
 
        public function getParamDescription() {
                return array(
-                       'limit' => 'How many files to return',
+                       'limit' => 'How many duplicate files to return',
                        'continue' => 'When more results are available, use this to continue',
                        'dir' => 'The direction in which to list',
+                       'localonly' => 'Look only for files in the local repository',
                );
        }
 
@@ -172,7 +197,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'List all files that are duplicates of the given file(s)';
+               return 'List all files that are duplicates of the given file(s) based on hash values';
        }
 
        public function getPossibleErrors() {
index eed9d7c..a5486ef 100644 (file)
@@ -59,6 +59,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $fld_mediatype = isset( $prop['mediatype'] );
                $fld_metadata = isset( $prop['metadata'] );
                $fld_bitdepth = isset( $prop['bitdepth'] );
+               $fld_archivename = isset( $prop['archivename'] );
 
                $this->addTables( 'filearchive' );
 
@@ -72,6 +73,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $this->addFieldsIf( 'fa_media_type', $fld_mediatype );
                $this->addFieldsIf( 'fa_metadata', $fld_metadata );
                $this->addFieldsIf( 'fa_bits', $fld_bitdepth );
+               $this->addFieldsIf( 'fa_archive_name', $fld_archivename );
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
@@ -194,6 +196,9 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        if ( $fld_mime ) {
                                $file['mime'] = "$row->fa_major_mime/$row->fa_minor_mime";
                        }
+                       if ( $fld_archivename && !is_null( $row->fa_archive_name ) ) {
+                               $file['archivename'] = $row->fa_archive_name;
+                       }
 
                        if ( $row->fa_deleted & File::DELETED_FILE ) {
                                $file['filehidden'] = '';
@@ -256,7 +261,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                        'mime',
                                        'mediatype',
                                        'metadata',
-                                       'bitdepth'
+                                       'bitdepth',
+                                       'archivename',
                                ),
                        ),
                );
@@ -285,6 +291,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                ' mediatype         - Adds the media type of the image',
                                ' metadata          - Lists EXIF metadata for the version of the image',
                                ' bitdepth          - Adds the bit depth of the version',
+                               ' archivename       - Adds the file name of the archive version for non-latest versions'
                        ),
                );
        }
@@ -346,7 +353,10 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        ),
                        'mediatype' => array(
                                'mediatype' => 'string'
-                       )
+                       ),
+                       'archivename' => array(
+                               'archivename' => 'string'
+                       ),
                );
        }
 
index 7184c88..d822eed 100644 (file)
@@ -73,7 +73,12 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        }
 
                        $result = $this->getResult();
-                       $images = RepoGroup::singleton()->findFiles( $titles );
+                       //search only inside the local repo
+                       if( $params['localonly'] ) {
+                               $images = RepoGroup::singleton()->getLocalRepo()->findFiles( $titles );
+                       } else {
+                               $images = RepoGroup::singleton()->findFiles( $titles );
+                       }
                        foreach ( $images as $img ) {
                                // Skip redirects
                                if ( $img->getOriginalTitle()->isRedirect() ) {
@@ -471,6 +476,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => 'string',
                        ),
                        'continue' => null,
+                       'localonly' => false,
                );
        }
 
@@ -543,7 +549,8 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        'end' => 'Timestamp to stop listing at',
                        'metadataversion' => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
                                                "Defaults to '1' for backwards compatibility" ),
-                       'continue' => 'If the query response includes a continue value, use it here to get another page of results'
+                       'continue' => 'If the query response includes a continue value, use it here to get another page of results',
+                       'localonly' => 'Look only for files in the local repository',
                );
        }
 
index 95c6bda..5d4f034 100644 (file)
@@ -33,7 +33,7 @@ class ApiQueryInfo extends ApiQueryBase {
 
        private $fld_protection = false, $fld_talkid = false,
                $fld_subjectid = false, $fld_url = false,
-               $fld_readable = false, $fld_watched = false,
+               $fld_readable = false, $fld_watched = false, $fld_notificationtimestamp = false,
                $fld_preload = false, $fld_displaytitle = false;
 
        private $params, $titles, $missing, $everything, $pageCounter;
@@ -41,7 +41,7 @@ class ApiQueryInfo extends ApiQueryBase {
        private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
                $pageLatest, $pageLength;
 
-       private $protections, $watched, $talkids, $subjectids, $displaytitles;
+       private $protections, $watched, $notificationtimestamps, $talkids, $subjectids, $displaytitles;
 
        private $tokenFunctions;
 
@@ -248,6 +248,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $prop = array_flip( $this->params['prop'] );
                        $this->fld_protection = isset( $prop['protection'] );
                        $this->fld_watched = isset( $prop['watched'] );
+                       $this->fld_notificationtimestamp = isset( $prop['notificationtimestamp'] );
                        $this->fld_talkid = isset( $prop['talkid'] );
                        $this->fld_subjectid = isset( $prop['subjectid'] );
                        $this->fld_url = isset( $prop['url'] );
@@ -303,7 +304,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->getProtectionInfo();
                }
 
-               if ( $this->fld_watched ) {
+               if ( $this->fld_watched || $this->fld_notificationtimestamp ) {
                        $this->getWatchedInfo();
                }
 
@@ -386,6 +387,13 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['watched'] = '';
                }
 
+               if ( $this->fld_notificationtimestamp ) {
+                       $pageInfo['notificationtimestamp'] = '';
+                       if ( isset( $this->notificationtimestamps[$ns][$dbkey] ) ) {
+                               $pageInfo['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $this->notificationtimestamps[$ns][$dbkey] );
+                       }
+               }
+
                if ( $this->fld_talkid && isset( $this->talkids[$ns][$dbkey] ) )        {
                        $pageInfo['talkid'] = $this->talkids[$ns][$dbkey];
                }
@@ -435,15 +443,14 @@ class ApiQueryInfo extends ApiQueryBase {
                // Get normal protections for existing titles
                if ( count( $this->titles ) ) {
                        $this->resetQueryParams();
-                       $this->addTables( array( 'page_restrictions', 'page' ) );
-                       $this->addWhere( 'page_id=pr_page' );
+                       $this->addTables( 'page_restrictions' );
                        $this->addFields( array( 'pr_page', 'pr_type', 'pr_level',
-                                       'pr_expiry', 'pr_cascade', 'page_namespace',
-                                       'page_title' ) );
+                                       'pr_expiry', 'pr_cascade' ) );
                        $this->addWhereFld( 'pr_page', array_keys( $this->titles ) );
 
                        $res = $this->select( __METHOD__ );
                        foreach ( $res as $row ) {
+                               $title = $this->titles[$row->pr_page];
                                $a = array(
                                        'type' => $row->pr_type,
                                        'level' => $row->pr_level,
@@ -452,11 +459,14 @@ class ApiQueryInfo extends ApiQueryBase {
                                if ( $row->pr_cascade ) {
                                        $a['cascade'] = '';
                                }
-                               $this->protections[$row->page_namespace][$row->page_title][] = $a;
-
-                               // Also check old restrictions
-                               if ( $this->pageRestrictions[$row->pr_page] ) {
-                                       $restrictions = explode( ':', trim( $this->pageRestrictions[$row->pr_page] ) );
+                               $this->protections[$title->getNamespace()][$title->getDBkey()][] = $a;
+                       }
+                       // Also check old restrictions
+                       foreach( $this->titles as $pageId => $title ) {
+                               if ( $this->pageRestrictions[$pageId] ) {
+                                       $namespace = $title->getNamespace();
+                                       $dbKey = $title->getDBkey();
+                                       $restrictions = explode( ':', trim( $this->pageRestrictions[$pageId] ) );
                                        foreach ( $restrictions as $restrict ) {
                                                $temp = explode( '=', trim( $restrict ) );
                                                if ( count( $temp ) == 1 ) {
@@ -466,12 +476,12 @@ class ApiQueryInfo extends ApiQueryBase {
                                                        if ( $restriction == '' ) {
                                                                continue;
                                                        }
-                                                       $this->protections[$row->page_namespace][$row->page_title][] = array(
+                                                       $this->protections[$namespace][$dbKey][] = array(
                                                                'type' => 'edit',
                                                                'level' => $restriction,
                                                                'expiry' => 'infinity',
                                                        );
-                                                       $this->protections[$row->page_namespace][$row->page_title][] = array(
+                                                       $this->protections[$namespace][$dbKey][] = array(
                                                                'type' => 'move',
                                                                'level' => $restriction,
                                                                'expiry' => 'infinity',
@@ -481,7 +491,7 @@ class ApiQueryInfo extends ApiQueryBase {
                                                        if ( $restriction == '' ) {
                                                                continue;
                                                        }
-                                                       $this->protections[$row->page_namespace][$row->page_title][] = array(
+                                                       $this->protections[$namespace][$dbKey][] = array(
                                                                'type' => $temp[0],
                                                                'level' => $restriction,
                                                                'expiry' => 'infinity',
@@ -632,6 +642,7 @@ class ApiQueryInfo extends ApiQueryBase {
 
        /**
         * Get information about watched status and put it in $this->watched
+        * and $this->notificationtimestamps
         */
        private function getWatchedInfo() {
                $user = $this->getUser();
@@ -641,6 +652,7 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                $this->watched = array();
+               $this->notificationtimestamps = array();
                $db = $this->getDB();
 
                $lb = new LinkBatch( $this->everything );
@@ -648,6 +660,7 @@ class ApiQueryInfo extends ApiQueryBase {
                $this->resetQueryParams();
                $this->addTables( array( 'watchlist' ) );
                $this->addFields( array( 'wl_title', 'wl_namespace' ) );
+               $this->addFieldsIf( 'wl_notificationtimestamp', $this->fld_notificationtimestamp );
                $this->addWhere( array(
                        $lb->constructSet( 'wl', $db ),
                        'wl_user' => $user->getID()
@@ -656,7 +669,12 @@ class ApiQueryInfo extends ApiQueryBase {
                $res = $this->select( __METHOD__ );
 
                foreach ( $res as $row ) {
-                       $this->watched[$row->wl_namespace][$row->wl_title] = true;
+                       if ( $this->fld_watched ) {
+                               $this->watched[$row->wl_namespace][$row->wl_title] = true;
+                       }
+                       if ( $this->fld_notificationtimestamp ) {
+                               $this->notificationtimestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
+                       }
                }
        }
 
@@ -691,6 +709,7 @@ class ApiQueryInfo extends ApiQueryBase {
                                        'protection',
                                        'talkid',
                                        'watched', # private
+                                       'notificationtimestamp', # private
                                        'subjectid',
                                        'url',
                                        'readable', # private
@@ -712,14 +731,15 @@ class ApiQueryInfo extends ApiQueryBase {
                return array(
                        'prop' => array(
                                'Which additional properties to get:',
-                               ' protection   - List the protection level of each page',
-                               ' talkid       - The page ID of the talk page for each non-talk page',
-                               ' watched      - List the watched status of each page',
-                               ' subjectid    - The page ID of the parent page for each talk page',
-                               ' url          - Gives a full URL to the page, and also an edit URL',
-                               ' readable     - Whether the user can read this page',
-                               ' preload      - Gives the text returned by EditFormPreloadText',
-                               ' displaytitle - Gives the way the page title is actually displayed',
+                               ' protection            - List the protection level of each page',
+                               ' talkid                - The page ID of the talk page for each non-talk page',
+                               ' watched               - List the watched status of each page',
+                               ' notificationtimestamp - The watchlist notification timestamp of each page',
+                               ' subjectid             - The page ID of the parent page for each talk page',
+                               ' url                   - Gives a full URL to the page, and also an edit URL',
+                               ' readable              - Whether the user can read this page',
+                               ' preload               - Gives the text returned by EditFormPreloadText',
+                               ' displaytitle          - Gives the way the page title is actually displayed',
                        ),
                        'token' => 'Request a token to perform a data-modifying action on a page',
                        'continue' => 'When more results are available, use this to continue',
@@ -747,6 +767,12 @@ class ApiQueryInfo extends ApiQueryBase {
                        'watched' => array(
                                'watched' => 'boolean'
                        ),
+                       'notificationtimestamp' => array(
+                               'notificationtimestamp' => array(
+                                       ApiBase::PROP_TYPE => 'timestamp',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       ),
                        'talkid' => array(
                                'talkid' => array(
                                        ApiBase::PROP_TYPE => 'integer',
index 2f11570..bc514b3 100644 (file)
@@ -367,7 +367,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
-               global $wgLogTypes, $wgLogActions;
+               global $wgLogTypes, $wgLogActions, $wgLogActionsHandlers;
                return array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -389,7 +389,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => $wgLogTypes
                        ),
                        'action' => array(
-                               ApiBase::PARAM_TYPE => array_keys( $wgLogActions )
+                               ApiBase::PARAM_TYPE => array_keys( array_merge( $wgLogActions, $wgLogActionsHandlers ) )
                        ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
index 7ef90fb..18a6cd4 100644 (file)
@@ -248,6 +248,16 @@ class ApiQueryRevisions extends ApiQueryBase {
                                $this->dieUsage( 'user and excludeuser cannot be used together', 'badparams' );
                        }
 
+                       // Continuing effectively uses startid. But we can't use rvstartid
+                       // directly, because there is no way to tell the client to ''not''
+                       // send rvstart if it sent it in the original query. So instead we
+                       // send the continuation startid as rvcontinue, and ignore both
+                       // rvstart and rvstartid when that is supplied.
+                       if ( !is_null( $params['continue'] ) ) {
+                               $params['startid'] = $params['continue'];
+                               unset( $params['start'] );
+                       }
+
                        // This code makes an assumption that sorting by rev_id and rev_timestamp produces
                        // the same result. This way users may request revisions starting at a given time,
                        // but to page through results use the rev_id returned after each page.
@@ -357,14 +367,14 @@ class ApiQueryRevisions extends ApiQueryBase {
                                if ( !$enumRevMode ) {
                                        ApiBase::dieDebug( __METHOD__, 'Got more rows then expected' ); // bug report
                                }
-                               $this->setContinueEnumParameter( 'startid', intval( $row->rev_id ) );
+                               $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
                                break;
                        }
 
                        $fit = $this->addPageSubItem( $row->rev_page, $this->extractRowInfo( $row ), 'rev' );
                        if ( !$fit ) {
                                if ( $enumRevMode ) {
-                                       $this->setContinueEnumParameter( 'startid', intval( $row->rev_id ) );
+                                       $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
                                } elseif ( $revCount > 0 ) {
                                        $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
                                } else {
index acc846b..855e270 100644 (file)
@@ -253,14 +253,16 @@ class ApiQueryUsers extends ApiQueryBase {
        * @return array
        */
        public static function getAutoGroups( $user ) {
+               // FIXME this logic is duplicated from User::getEffectiveGroups(), centralize this
                $groups = array();
                $groups[] = '*';
 
                if ( !$user->isAnon() ) {
                        $groups[] = 'user';
+                       $groups = array_merge( $groups, Autopromote::getAutopromoteGroups( $user ) );
                }
 
-               return array_merge( $groups, Autopromote::getAutopromoteGroups( $user ) );
+               return $groups;
        }
 
        public function getCacheMode( $params ) {
diff --git a/includes/api/ApiSetNotificationTimestamp.php b/includes/api/ApiSetNotificationTimestamp.php
new file mode 100644 (file)
index 0000000..f9ecfec
--- /dev/null
@@ -0,0 +1,287 @@
+<?php
+
+/**
+ * API for MediaWiki 1.14+
+ *
+ * Created on Jun 18, 2012
+ *
+ * Copyright © 2012 Brad Jorsch
+ *
+ * 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
+ */
+
+/**
+ * API interface for setting the wl_notificationtimestamp field
+ * @ingroup API
+ */
+class ApiSetNotificationTimestamp extends ApiBase {
+
+       public function __construct( $main, $action ) {
+               parent::__construct( $main, $action );
+       }
+
+       public function execute() {
+               $user = $this->getUser();
+
+               if ( $user->isAnon() ) {
+                       $this->dieUsage( 'Anonymous users cannot use watchlist change notifications', 'notloggedin' );
+               }
+
+               $params = $this->extractRequestParams();
+               $this->requireMaxOneParameter( $params, 'timestamp', 'torevid', 'newerthanrevid' );
+
+               $pageSet = new ApiPageSet( $this );
+               $args = array_merge( array( $params, 'entirewatchlist' ), array_keys( $pageSet->getAllowedParams() ) );
+               call_user_func_array( array( $this, 'requireOnlyOneParameter' ), $args );
+
+               $db = $this->getDB();
+               $dbw = $this->getDB( DB_MASTER );
+
+               $timestamp = null;
+               if ( isset( $params['timestamp'] ) ) {
+                       $timestamp = $dbw->timestamp( $params['timestamp'] );
+               }
+
+               if ( !$params['entirewatchlist'] ) {
+                       $pageSet->execute();
+               }
+
+               if ( isset( $params['torevid'] ) ) {
+                       if ( $params['entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) {
+                               $this->dieUsage( 'torevid may only be used with a single page', 'multpages' );
+                       }
+                       $title = reset( $pageSet->getGoodTitles() );
+                       $timestamp = Revision::getTimestampFromId( $title, $params['torevid'] );
+                       if ( $timestamp ) {
+                               $timestamp = $dbw->timestamp( $timestamp );
+                       } else {
+                               $timestamp = null;
+                       }
+               } elseif ( isset( $params['newerthanrevid'] ) ) {
+                       if ( $params['entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) {
+                               $this->dieUsage( 'newerthanrevid may only be used with a single page', 'multpages' );
+                       }
+                       $title = reset( $pageSet->getGoodTitles() );
+                       $revid = $title->getNextRevisionID( $params['newerthanrevid'] );
+                       if ( $revid ) {
+                               $timestamp = $dbw->timestamp( Revision::getTimestampFromId( $title, $revid ) );
+                       } else {
+                               $timestamp = null;
+                       }
+               }
+
+               $apiResult = $this->getResult();
+               $result = array();
+               if ( $params['entirewatchlist'] ) {
+                       // Entire watchlist mode: Just update the thing and return a success indicator
+                       $dbw->update( 'watchlist', array( 'wl_notificationtimestamp' => $timestamp ),
+                               array( 'wl_user' => $user->getID() ),
+                               __METHOD__
+                       );
+
+                       $result['notificationtimestamp'] = ( is_null( $timestamp ) ? '' : wfTimestamp( TS_ISO_8601, $timestamp ) );
+               } else {
+                       // First, log the invalid titles
+                       foreach( $pageSet->getInvalidTitles() as $title ) {
+                               $r = array();
+                               $r['title'] = $title;
+                               $r['invalid'] = '';
+                               $result[] = $r;
+                       }
+                       foreach( $pageSet->getMissingPageIDs() as $p ) {
+                               $page = array();
+                               $page['pageid'] = $p;
+                               $page['missing'] = '';
+                               $page['notwatched'] = '';
+                               $result[] = $page;
+                       }
+                       foreach( $pageSet->getMissingRevisionIDs() as $r ) {
+                               $rev = array();
+                               $rev['revid'] = $r;
+                               $rev['missing'] = '';
+                               $rev['notwatched'] = '';
+                               $result[] = $rev;
+                       }
+
+                       // Now process the valid titles
+                       $lb = new LinkBatch( $pageSet->getTitles() );
+                       $dbw->update( 'watchlist', array( 'wl_notificationtimestamp' => $timestamp ),
+                               array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
+                               __METHOD__
+                       );
+
+                       // Query the results of our update
+                       $timestamps = array();
+                       $res = $dbw->select( 'watchlist', array( 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ),
+                               array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
+                               __METHOD__
+                       );
+                       foreach ( $res as $row ) {
+                               $timestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
+                       }
+
+                       // Now, put the valid titles into the result
+                       $pages = array();
+                       foreach ( $pageSet->getTitles() as $title ) {
+                               $ns = $title->getNamespace();
+                               $dbkey = $title->getDBkey();
+                               $r = array(
+                                       'ns' => intval( $ns ),
+                                       'title' => $title->getPrefixedText(),
+                               );
+                               if ( !$title->exists() ) {
+                                       $r['missing'] = '';
+                               }
+                               if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) {
+                                       $r['notificationtimestamp'] = '';
+                                       if ( $timestamps[$ns][$dbkey] !== null ) {
+                                               $r['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $timestamps[$ns][$dbkey] );
+                                       }
+                               } else {
+                                       $r['notwatched'] = '';
+                               }
+                               $result[] = $r;
+                       }
+
+                       $apiResult->setIndexedTagName( $result, 'page' );
+               }
+               $apiResult->addValue( null, $this->getModuleName(), $result );
+       }
+
+       public function mustBePosted() {
+               return true;
+       }
+
+       public function isWriteMode() {
+               return true;
+       }
+
+       public function needsToken() {
+               return true;
+       }
+
+       public function getTokenSalt() {
+               return '';
+       }
+
+       public function getAllowedParams() {
+               $psModule = new ApiPageSet( $this );
+               return $psModule->getAllowedParams() + array(
+                       'entirewatchlist' => array(
+                               ApiBase::PARAM_TYPE => 'boolean'
+                       ),
+                       'token' => null,
+                       'timestamp' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp'
+                       ),
+                       'torevid' => array(
+                               ApiBase::PARAM_TYPE => 'integer'
+                       ),
+                       'newerthanrevid' => array(
+                               ApiBase::PARAM_TYPE => 'integer'
+                       ),
+               );
+       }
+
+       public function getParamDescription() {
+               $psModule = new ApiPageSet( $this );
+               return $psModule->getParamDescription() + array(
+                       'entirewatchlist' => 'Work on all watched pages',
+                       'timestamp' => 'Timestamp to which to set the notification timestamp',
+                       'torevid' => 'Revision to set the notification timestamp to (one page only)',
+                       'newerthanrevid' => 'Revision to set the notification timestamp newer than (one page only)',
+                       'token' => 'A token previously acquired via prop=info',
+               );
+       }
+
+       public function getResultProperties() {
+               return array(
+                       ApiBase::PROP_LIST => true,
+                       ApiBase::PROP_ROOT => array(
+                               'notificationtimestamp' => array(
+                                       ApiBase::PROP_TYPE => 'timestamp',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       ),
+                       '' => array(
+                               'ns' => array(
+                                       ApiBase::PROP_TYPE => 'namespace',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'title' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'pageid' => array(
+                                       ApiBase::PROP_TYPE => 'integer',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'revid' => array(
+                                       ApiBase::PROP_TYPE => 'integer',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'invalid' => 'boolean',
+                               'missing' => 'boolean',
+                               'notwatched' => 'boolean',
+                               'notificationtimestamp' => array(
+                                       ApiBase::PROP_TYPE => 'timestamp',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       )
+               );
+       }
+
+       public function getDescription() {
+               return array( 'Update the notification timestamp for watched pages.',
+                       'This affects the highlighting of changed pages in the watchlist and history,',
+                       'and the sending of email when the "E-mail me when a page on my watchlist is',
+                       'changed" preference is enabled.'
+               );
+       }
+
+       public function getPossibleErrors() {
+               $psModule = new ApiPageSet( $this );
+               return array_merge(
+                       parent::getPossibleErrors(),
+                       $psModule->getPossibleErrors(),
+                       $this->getRequireMaxOneParameterErrorMessages( array( 'timestamp', 'torevid', 'newerthanrevid' ) ),
+                       $this->getRequireOnlyOneParameterErrorMessages( array_merge( array( 'entirewatchlist' ), array_keys( $psModule->getAllowedParams() ) ) ),
+                       array(
+                               array( 'code' => 'notloggedin', 'info' => 'Anonymous users cannot use watchlist change notifications' ),
+                               array( 'code' => 'multpages', 'info' => 'torevid may only be used with a single page' ),
+                               array( 'code' => 'multpages', 'info' => 'newerthanrevid may only be used with a single page' ),
+                       )
+               );
+       }
+
+       public function getExamples() {
+               return array(
+                       'api.php?action=setnotificationtimestamp&entirewatchlist=&token=ABC123' => 'Reset the notification status for the entire watchlist',
+                       'api.php?action=setnotificationtimestamp&titles=Main_page&token=ABC123' => 'Reset the notification status for "Main page"',
+                       'api.php?action=setnotificationtimestamp&titles=Main_page&timestamp=2012-01-01T00:00:00Z&token=ABC123' => 'Set the notification timestamp for "Main page" so all edits since 1 January 2012 are unviewed',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:SetNotificationTimestamp';
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}
index 31b4351..b3ec54b 100644 (file)
@@ -117,25 +117,26 @@ class ApiUpload extends ApiBase {
         */
        private function getContextResult(){
                $warnings = $this->getApiWarnings();
-               if ( $warnings ) {
+               if ( $warnings && !$this->mParams['ignorewarnings'] ) {
                        // Get warnings formated in result array format
                        return $this->getWarningsResult( $warnings );
                } elseif ( $this->mParams['chunk'] ) {
                        // Add chunk, and get result
-                       return $this->getChunkResult();
+                       return $this->getChunkResult( $warnings );
                } elseif ( $this->mParams['stash'] ) {
                        // Stash the file and get stash result
-                       return $this->getStashResult();
+                       return $this->getStashResult( $warnings );
                }
                // This is the most common case -- a normal upload with no warnings
                // performUpload will return a formatted properly for the API with status
-               return $this->performUpload();
+               return $this->performUpload( $warnings );
        }
        /**
         * Get Stash Result, throws an expetion if the file could not be stashed.
+        * @param $warnings array Array of Api upload warnings
         * @return array
         */
-       private function getStashResult(){
+       private function getStashResult( $warnings ){
                $result = array ();
                // Some uploads can request they be stashed, so as not to publish them immediately.
                // In this case, a failure to stash ought to be fatal
@@ -143,6 +144,9 @@ class ApiUpload extends ApiBase {
                        $result['result'] = 'Success';
                        $result['filekey'] = $this->performStash();
                        $result['sessionkey'] = $result['filekey']; // backwards compatibility
+                       if ( $warnings && count( $warnings ) > 0 ) {
+                               $result['warnings'] = $warnings;
+                       }
                } catch ( MWException $e ) {
                        $this->dieUsage( $e->getMessage(), 'stashfailed' );
                }
@@ -150,7 +154,7 @@ class ApiUpload extends ApiBase {
        }
        /**
         * Get Warnings Result
-        * @param $warnings Array of Api upload warnings
+        * @param $warnings array Array of Api upload warnings
         * @return array
         */
        private function getWarningsResult( $warnings ){
@@ -169,12 +173,16 @@ class ApiUpload extends ApiBase {
        }
        /**
         * Get the result of a chunk upload.
+        * @param $warnings array Array of Api upload warnings
         * @return array
         */
-       private function getChunkResult(){
+       private function getChunkResult( $warnings ){
                $result = array();
 
                $result['result'] = 'Continue';
+               if ( $warnings && count( $warnings ) > 0 ) {
+                       $result['warnings'] = $warnings;
+               }
                $request = $this->getMain()->getRequest();
                $chunkPath = $request->getFileTempname( 'chunk' );
                $chunkSize = $request->getUpload( 'chunk' )->getSize();
@@ -444,7 +452,7 @@ class ApiUpload extends ApiBase {
 
 
        /**
-        * Check warnings if ignorewarnings is not set.
+        * Check warnings.
         * Returns a suitable array for inclusion into API results if there were warnings
         * Returns the empty array if there were no warnings
         *
@@ -453,9 +461,8 @@ class ApiUpload extends ApiBase {
        protected function getApiWarnings() {
                $warnings = array();
 
-               if ( !$this->mParams['ignorewarnings'] ) {
-                       $warnings = $this->mUpload->checkWarnings();
-               }
+               $warnings = $this->mUpload->checkWarnings();
+
                return $this->transformWarnings( $warnings );
        }
 
@@ -488,9 +495,10 @@ class ApiUpload extends ApiBase {
         * Perform the actual upload. Returns a suitable result array on success;
         * dies on failure.
         *
+        * @param $warnings array Array of Api upload warnings
         * @return array
         */
-       protected function performUpload() {
+       protected function performUpload( $warnings ) {
                // Use comment as initial page text by default
                if ( is_null( $this->mParams['text'] ) ) {
                        $this->mParams['text'] = $this->mParams['comment'];
@@ -529,6 +537,9 @@ class ApiUpload extends ApiBase {
 
                $result['result'] = 'Success';
                $result['filename'] = $file->getName();
+               if ( $warnings && count( $warnings ) > 0 ) {
+                       $result['warnings'] = $warnings;
+               }
 
                return $result;
        }
index a530620..e99ba6c 100644 (file)
@@ -5,6 +5,8 @@
  * aims to be both simple and very flexible. It is centered around an associative
  * array of fields and various methods to do common interaction with the database.
  *
+ * Documentation inline and at https://www.mediawiki.org/wiki/Manual:ORMTable
+ *
  * 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
index 684f4b4..99413f9 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
  * Interface for objects representing a single database table.
+ * Documentation inline and at https://www.mediawiki.org/wiki/Manual:ORMTable
  *
  * 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
index 3f2d803..2a5837a 100644 (file)
@@ -3,6 +3,8 @@
  * ORMIterator that takes a ResultWrapper object returned from
  * a select operation returning IORMRow objects (ie IORMTable::select).
  *
+ * Documentation inline and at https://www.mediawiki.org/wiki/Manual:ORMTable
+ *
  * 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
index 6f19fe1..303f3a2 100644 (file)
@@ -5,6 +5,8 @@
  * aims to be both simple and very flexible. It is centered around an associative
  * array of fields and various methods to do common interaction with the database.
  *
+ * Documentation inline and at https://www.mediawiki.org/wiki/Manual:ORMTable
+ *
  * 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
index 130fdf9..bd6bf0b 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
  * Abstract base class for representing a single database table.
+ * Documentation inline and at https://www.mediawiki.org/wiki/Manual:ORMTable
  *
  * 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
@@ -328,7 +329,7 @@ abstract class ORMTable implements IORMTable {
        public function delete( array $conditions, $functionName = null ) {
                return wfGetDB( DB_MASTER )->delete(
                        $this->getName(),
-                       $this->getPrefixedValues( $conditions ),
+                       $conditions === array() ? '*' : $this->getPrefixedValues( $conditions ),
                        $functionName
                ) !== false; // DatabaseBase::delete does not always return true for success as documented...
        }
@@ -451,7 +452,10 @@ abstract class ORMTable implements IORMTable {
        public function updateSummaryFields( $summaryFields = null, array $conditions = array() ) {
                $this->setReadDb( DB_MASTER );
 
-               foreach ( $this->select( null, $conditions ) as /* IORMRow */ $item ) {
+               /**
+                * @var IORMRow $item
+                */
+               foreach ( $this->select( null, $conditions ) as $item ) {
                        $item->loadSummaryFields( $summaryFields );
                        $item->setSummaryMode( true );
                        $item->save();
@@ -559,7 +563,7 @@ abstract class ORMTable implements IORMTable {
         * @return IORMTable
         */
        public static function singleton() {
-               $class = function_exists( 'get_called_class' ) ? get_called_class() : self::get_called_class();
+               $class = get_called_class();
 
                if ( !array_key_exists( $class, self::$instanceCache ) ) {
                        self::$instanceCache[$class] = new $class;
@@ -568,36 +572,6 @@ abstract class ORMTable implements IORMTable {
                return self::$instanceCache[$class];
        }
 
-       /**
-        * Compatibility fallback function so the singleton method works on PHP < 5.3.
-        * Code borrowed from http://www.php.net/manual/en/function.get-called-class.php#107445
-        *
-        * @since 1.20
-        *
-        * @return string
-        */
-       protected static function get_called_class() {
-               $bt = debug_backtrace();
-               $l = count($bt) - 1;
-               $matches = array();
-               while(empty($matches) && $l > -1){
-                       $lines = file($bt[$l]['file']);
-                       $callerLine = $lines[$bt[$l]['line']-1];
-                       preg_match('/([a-zA-Z0-9\_]+)::'.$bt[$l--]['function'].'/',
-                               $callerLine,
-                               $matches);
-               }
-               if (!isset($matches[1])) $matches[1]=NULL; //for notices
-               if ($matches[1] == 'self') {
-                       $line = $bt[$l]['line']-1;
-                       while ($line > 0 && strpos($lines[$line], 'class') === false) {
-                               $line--;
-                       }
-                       preg_match('/class[\s]+(.+?)[\s]+/si', $lines[$line], $matches);
-               }
-               return $matches[1];
-       }
-
        /**
         * Get an array with fields from a database result,
         * that can be fed directly to the constructor or
@@ -620,7 +594,7 @@ abstract class ORMTable implements IORMTable {
        /**
         * @see ORMTable::newRowFromFromDBResult
         *
-        * @deprecated use newRowFromFromDBResult instead
+        * @deprecated use newRowFromDBResult instead
         * @since 1.20
         *
         * @param stdClass $result
index 08154c7..db3c37c 100644 (file)
@@ -882,7 +882,8 @@ class DifferenceEngine extends ContextSource {
                        }
 
                        $msg = $this->msg( $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold' )->escaped();
-                       $header .= ' (' . Linker::linkKnown( $title, $msg, array(), $editQuery ) . ')';
+                       $header .= ' ' . $this->msg( 'parentheses' )->rawParams(
+                               Linker::linkKnown( $title, $msg, array(), $editQuery ) )->plain();
                        if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
                                $header = Html::rawElement( 'span', array( 'class' => 'history-deleted' ), $header );
                        }
index 3d2ccf4..32ef5a9 100644 (file)
@@ -216,6 +216,28 @@ 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 $zone String: one of: public, deleted, temp, thumb
+        * @return String or false
+        */
+       public function getZoneHandlerUrl( $zone ) {
+               if ( isset( $this->zones[$zone]['handlerUrl'] )
+                       && in_array( $zone, array( 'public', 'temp', 'thumb' ) ) )
+               {
+                       return $this->zones[$zone]['handlerUrl'];
+               }
+               return false;
+       }
+
        /**
         * Get the backend storage path corresponding to a virtual URL.
         * Use this function wisely.
@@ -439,6 +461,24 @@ class FileRepo {
                return array();
        }
 
+       /**
+        * Get an array of arrays or iterators of file objects for files that
+        * have the given SHA-1 content hashes.
+        *
+        * @param $hashes array An array of hashes
+        * @return array An Array of arrays or iterators of file objects and the hash as key
+        */
+       public function findBySha1s( array $hashes ) {
+               $result = array();
+               foreach ( $hashes as $hash ) {
+                       $files = $this->findBySha1( $hash );
+                       if ( count( $files ) ) {
+                               $result[$hash] = $files;
+                       }
+               }
+               return $result;
+       }
+
        /**
         * Get the public root URL of the repository
         *
index dd0c947..0954422 100644 (file)
@@ -248,6 +248,39 @@ class LocalRepo extends FileRepo {
                return $result;
        }
 
+       /**
+        * Get an array of arrays or iterators of file objects for files that
+        * have the given SHA-1 content hashes.
+        *
+        * Overrides generic implementation in FileRepo for performance reason
+        *
+        * @param $hashes array An array of hashes
+        * @return array An Array of arrays or iterators of file objects and the hash as key
+        */
+       function findBySha1s( array $hashes ) {
+               if( !count( $hashes ) ) {
+                       return array(); //empty parameter
+               }
+
+               $dbr = $this->getSlaveDB();
+               $res = $dbr->select(
+                       'image',
+                       LocalFile::selectFields(),
+                       array( 'img_sha1' => $hashes ),
+                       __METHOD__,
+                       array( 'ORDER BY' => 'img_name' )
+               );
+
+               $result = array();
+               foreach ( $res as $row ) {
+                       $file = $this->newFileFromRow( $row );
+                       $result[$file->getSha1()][] = $file;
+               }
+               $res->free();
+
+               return $result;
+       }
+
        /**
         * Get a connection to the slave DB
         * @return DatabaseBase
index 6b31b7e..f9e5759 100644 (file)
@@ -263,6 +263,28 @@ class RepoGroup {
                return $result;
        }
 
+       /**
+        * Find all instances of files with this keys
+        *
+        * @param $hashes Array base 36 SHA-1 hashes
+        * @return Array of array of File objects
+        */
+       function findBySha1s( array $hashes ) {
+               if ( !$this->reposInitialised ) {
+                       $this->initialiseRepos();
+               }
+
+               $result = $this->localRepo->findBySha1s( $hashes );
+               foreach ( $this->foreignRepos as $repo ) {
+                       $result = array_merge_recursive( $result, $repo->findBySha1s( $hashes ) );
+               }
+               //sort the merged (and presorted) sublist of each hash
+               foreach( $result as $hash => $files ) {
+                       usort( $result[$hash], 'File::compare' );
+               }
+               return $result;
+       }
+
        /**
         * Get the repo instance with a given key.
         * @param $index string|int
index 94ddb44..3063440 100644 (file)
@@ -188,6 +188,9 @@ class SwiftFileBackend extends FileBackendStore {
                        $obj->set_etag( md5( $params['content'] ) );
                        // Use the same content type as StreamFile for security
                        $obj->content_type = StreamFile::contentTypeFromPath( $params['dst'] );
+                       if ( !strlen( $obj->content_type ) ) { // special case
+                               $obj->content_type = 'unknown/unknown';
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $handle = $obj->write_async( $params['content'] );
                                $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $handle );
@@ -267,6 +270,9 @@ class SwiftFileBackend extends FileBackendStore {
                        $obj->set_etag( md5_file( $params['src'] ) );
                        // Use the same content type as StreamFile for security
                        $obj->content_type = StreamFile::contentTypeFromPath( $params['dst'] );
+                       if ( !strlen( $obj->content_type ) ) { // special case
+                               $obj->content_type = 'unknown/unknown';
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                wfSuppressWarnings();
                                $fp = fopen( $params['src'], 'rb' );
@@ -1058,7 +1064,7 @@ class SwiftFileBackend extends FileBackendStore {
         *                          Setting this to '*' effectively makes a container public.
         *   - .rlistings:<regex> : Grants access if the request is from a referrer host that
         *                          matches the expression and the request for a listing.
-        * 
+        *
         * $writeGrps is a list of the possible criteria for a request to have
         * access to write to a container. Each item is of the following format:
         *   - account:user       : Grants access if the request is by the given user
@@ -1296,7 +1302,7 @@ abstract class SwiftFileBackendList implements Iterator {
        protected $dir; // string; storage directory
        protected $suffixStart; // integer
 
-       const PAGE_SIZE = 5000; // file listing buffer size
+       const PAGE_SIZE = 9000; // file listing buffer size
 
        /**
         * @param $backend SwiftFileBackend
index 3fa8166..7489862 100644 (file)
@@ -246,15 +246,15 @@ abstract class File {
        }
 
        /**
-        * Callback for usort() to do file sorts by title
+        * Callback for usort() to do file sorts by name
         *
         * @param $a File
         * @param $b File
         *
-        * @return Integer: result of title comparison
+        * @return Integer: result of name comparison
         */
        public static function compare( File $a, File $b ) {
-               return Title::compare( $a->getTitle(), $b->getTitle() );
+               return strcmp( $a->getName(), $b->getName() );
        }
 
        /**
index aa3c334..8a93b45 100644 (file)
@@ -55,20 +55,21 @@ class OracleUpdater extends DatabaseUpdater {
 
                        //1.19
                        array( 'addIndex', 'logging',       'i05',      'patch-logging_type_action_index.sql'),
-                       array( 'addTable', 'globaltemplatelinks', 'patch-globaltemplatelinks.sql' ),
-                       array( 'addTable', 'globalnamespaces', 'patch-globalnamespaces.sql' ),
-                       array( 'addTable', 'globalinterwiki', 'patch-globalinterwiki.sql' ),
                        array( 'addField', 'revision', 'rev_sha1', 'patch-rev_sha1_field.sql' ),
                        array( 'addField', 'archive', 'ar_sha1', 'patch-ar_sha1_field.sql' ),
                        array( 'doRemoveNotNullEmptyDefaults2' ),
                        array( 'addIndex', 'page', 'i03', 'patch-page_redirect_namespace_len.sql' ),
-                       array( 'modifyField', 'user', 'ug_group', 'patch-ug_group-length-increase.sql' ),
+                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase.sql' ),
                        array( 'addField', 'uploadstash', 'us_chunk_inx', 'patch-us_chunk_inx_field.sql' ),
                        array( 'addField', 'job', 'job_timestamp', 'patch-job_timestamp_field.sql' ),
                        array( 'addIndex', 'job', 'i02', 'patch-job_timestamp_index.sql' ),
+                       array( 'doPageRestrictionsPKUKFix' ),
+                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase.sql' ),
 
                        //1.20
                        array( 'addTable', 'config', 'patch-config.sql' ),
+                       array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
+                       array( 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ),
 
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
@@ -197,6 +198,23 @@ class OracleUpdater extends DatabaseUpdater {
                $this->output( "ok\n" );
        }
 
+       /**
+        * Fixed wrong PK, UK definition
+        */
+       protected function doPageRestrictionsPKUKFix() {
+               $this->output( "Altering PAGE_RESTRICTIONS keys ... " );
+
+               $meta = $this->db->query( 'SELECT column_name FROM all_cons_columns WHERE owner = \''.strtoupper($this->db->getDBname()).'\' AND constraint_name = \'MW_PAGE_RESTRICTIONS_PK\' AND rownum = 1' );
+               $row = $meta->fetchRow();
+               if ( $row['column_name'] == 'PR_ID' ) {
+                       $this->output( "seems to be up to date.\n" );
+                       return;
+               }
+
+               $this->applyPatch( 'patch-page_restrictions_pkuk_fix.sql', false );
+               $this->output( "ok\n" );
+       }
+
        /**
         * rebuilding of the function that duplicates tables for tests
         */
index 7b7ec0c..fcf5ca8 100644 (file)
@@ -213,8 +213,9 @@ abstract class Job {
         *
         * @param $command String: Job command
         * @param $title Title: Associated title
-        * @param $params Array: Job parameters
+        * @param $params Array|bool: Job parameters
         * @param $id Int: Job identifier
+        * @throws MWException
         * @return Job
         */
        static function factory( $command, Title $title, $params = false, $id = 0 ) {
@@ -343,8 +344,8 @@ abstract class Job {
        /**
         * @param $command
         * @param $title
-        * @param $params array
-        * @param int $id
+        * @param $params array|bool
+        * @param $id int
         */
        function __construct( $command, $title, $params = false, $id = 0 ) {
                $this->command = $command;
diff --git a/includes/media/Generic.php b/includes/media/Generic.php
deleted file mode 100644 (file)
index bd4d865..0000000
+++ /dev/null
@@ -1,780 +0,0 @@
-<?php
-/**
- * Media-handling base classes and generic functionality.
- *
- * 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 Media
- */
-
-/**
- * Base media handler class
- *
- * @ingroup Media
- */
-abstract class MediaHandler {
-       const TRANSFORM_LATER = 1;
-       const METADATA_GOOD = true;
-       const METADATA_BAD = false;
-       const METADATA_COMPATIBLE = 2; // for old but backwards compatible.
-       /**
-        * Instance cache
-        */
-       static $handlers = array();
-
-       /**
-        * Get a MediaHandler for a given MIME type from the instance cache
-        *
-        * @param $type string
-        *
-        * @return MediaHandler
-        */
-       static function getHandler( $type ) {
-               global $wgMediaHandlers;
-               if ( !isset( $wgMediaHandlers[$type] ) ) {
-                       wfDebug( __METHOD__ . ": no handler found for $type.\n");
-                       return false;
-               }
-               $class = $wgMediaHandlers[$type];
-               if ( !isset( self::$handlers[$class] ) ) {
-                       self::$handlers[$class] = new $class;
-                       if ( !self::$handlers[$class]->isEnabled() ) {
-                               self::$handlers[$class] = false;
-                       }
-               }
-               return self::$handlers[$class];
-       }
-
-       /**
-        * Get an associative array mapping magic word IDs to parameter names.
-        * Will be used by the parser to identify parameters.
-        */
-       abstract function getParamMap();
-
-       /**
-        * Validate a thumbnail parameter at parse time.
-        * Return true to accept the parameter, and false to reject it.
-        * If you return false, the parser will do something quiet and forgiving.
-        *
-        * @param $name
-        * @param $value
-        */
-       abstract function validateParam( $name, $value );
-
-       /**
-        * Merge a parameter array into a string appropriate for inclusion in filenames
-        *
-        * @param $params array
-        */
-       abstract function makeParamString( $params );
-
-       /**
-        * Parse a param string made with makeParamString back into an array
-        *
-        * @param $str string
-        */
-       abstract function parseParamString( $str );
-
-       /**
-        * Changes the parameter array as necessary, ready for transformation.
-        * Should be idempotent.
-        * Returns false if the parameters are unacceptable and the transform should fail
-        * @param $image
-        * @param $params
-        */
-       abstract function normaliseParams( $image, &$params );
-
-       /**
-        * Get an image size array like that returned by getimagesize(), or false if it
-        * can't be determined.
-        *
-        * @param $image File: the image object, or false if there isn't one
-        * @param $path String: the filename
-        * @return Array Follow the format of PHP getimagesize() internal function. See http://www.php.net/getimagesize
-        */
-       abstract function getImageSize( $image, $path );
-
-       /**
-        * Get handler-specific metadata which will be saved in the img_metadata field.
-        *
-        * @param $image File: the image object, or false if there isn't one.
-        *   Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
-        * @param $path String: the filename
-        * @return String
-        */
-       function getMetadata( $image, $path ) { return ''; }
-
-       /**
-       * Get metadata version.
-       *
-       * This is not used for validating metadata, this is used for the api when returning
-       * metadata, since api content formats should stay the same over time, and so things
-       * using ForiegnApiRepo can keep backwards compatibility
-       *
-       * All core media handlers share a common version number, and extensions can
-       * use the GetMetadataVersion hook to append to the array (they should append a unique
-       * string so not to get confusing). If there was a media handler named 'foo' with metadata
-       * version 3 it might add to the end of the array the element 'foo=3'. if the core metadata
-       * version is 2, the end version string would look like '2;foo=3'.
-       *
-       * @return string version string
-       */
-       static function getMetadataVersion () {
-               $version = Array( '2' ); // core metadata version
-               wfRunHooks('GetMetadataVersion', Array(&$version));
-               return implode( ';', $version);
-        }
-
-       /**
-       * Convert metadata version.
-       *
-       * By default just returns $metadata, but can be used to allow
-       * media handlers to convert between metadata versions.
-       *
-       * @param $metadata Mixed String or Array metadata array (serialized if string)
-       * @param $version Integer target version
-       * @return Array serialized metadata in specified version, or $metadata on fail.
-       */
-       function convertMetadataVersion( $metadata, $version = 1 ) {
-               if ( !is_array( $metadata ) ) {
-
-                       //unserialize to keep return parameter consistent.
-                       wfSuppressWarnings();
-                       $ret = unserialize( $metadata );
-                       wfRestoreWarnings();
-                       return $ret;
-               }
-               return $metadata;
-       }
-
-       /**
-        * Get a string describing the type of metadata, for display purposes.
-        *
-        * @return string
-        */
-       function getMetadataType( $image ) { return false; }
-
-       /**
-        * Check if the metadata string is valid for this handler.
-        * If it returns MediaHandler::METADATA_BAD (or false), Image
-        * will reload the metadata from the file and update the database.
-        * MediaHandler::METADATA_GOOD for if the metadata is a-ok,
-        * MediaHanlder::METADATA_COMPATIBLE if metadata is old but backwards
-        * compatible (which may or may not trigger a metadata reload).
-        * @return bool
-        */
-       function isMetadataValid( $image, $metadata ) {
-               return self::METADATA_GOOD;
-       }
-
-
-       /**
-        * Get a MediaTransformOutput object representing an alternate of the transformed
-        * output which will call an intermediary thumbnail assist script.
-        *
-        * Used when the repository has a thumbnailScriptUrl option configured.
-        *
-        * Return false to fall back to the regular getTransform().
-        * @return bool
-        */
-       function getScriptedTransform( $image, $script, $params ) {
-               return false;
-       }
-
-       /**
-        * Get a MediaTransformOutput object representing the transformed output. Does not
-        * actually do the transform.
-        *
-        * @param $image File: the image object
-        * @param $dstPath String: filesystem destination path
-        * @param $dstUrl String: Destination URL to use in output HTML
-        * @param $params Array: Arbitrary set of parameters validated by $this->validateParam()
-        * @return MediaTransformOutput
-        */
-       final function getTransform( $image, $dstPath, $dstUrl, $params ) {
-               return $this->doTransform( $image, $dstPath, $dstUrl, $params, self::TRANSFORM_LATER );
-       }
-
-       /**
-        * Get a MediaTransformOutput object representing the transformed output. Does the
-        * transform unless $flags contains self::TRANSFORM_LATER.
-        *
-        * @param $image File: the image object
-        * @param $dstPath String: filesystem destination path
-        * @param $dstUrl String: destination URL to use in output HTML
-        * @param $params Array: arbitrary set of parameters validated by $this->validateParam()
-        * @param $flags Integer: a bitfield, may contain self::TRANSFORM_LATER
-        *
-        * @return MediaTransformOutput
-        */
-       abstract function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 );
-
-       /**
-        * Get the thumbnail extension and MIME type for a given source MIME type
-        * @return array thumbnail extension and MIME type
-        */
-       function getThumbType( $ext, $mime, $params = null ) {
-               $magic = MimeMagic::singleton();
-               if ( !$ext || $magic->isMatchingExtension( $ext, $mime ) === false ) {
-                       // The extension is not valid for this mime type and we do
-                       // recognize the mime type
-                       $extensions = $magic->getExtensionsForType( $mime );
-                       if ( $extensions ) {
-                               return array( strtok( $extensions, ' ' ), $mime );
-                       }
-               }
-
-               // The extension is correct (true) or the mime type is unknown to
-               // MediaWiki (null)
-               return array( $ext, $mime );
-       }
-
-       /**
-        * True if the handled types can be transformed
-        * @return bool
-        */
-       function canRender( $file ) { return true; }
-       /**
-        * True if handled types cannot be displayed directly in a browser
-        * but can be rendered
-        * @return bool
-        */
-       function mustRender( $file ) { return false; }
-       /**
-        * True if the type has multi-page capabilities
-        * @return bool
-        */
-       function isMultiPage( $file ) { return false; }
-       /**
-        * Page count for a multi-page document, false if unsupported or unknown
-        * @return bool
-        */
-       function pageCount( $file ) { return false; }
-       /**
-        * The material is vectorized and thus scaling is lossless
-        * @return bool
-        */
-       function isVectorized( $file ) { return false; }
-       /**
-        * False if the handler is disabled for all files
-        * @return bool
-        */
-       function isEnabled() { return true; }
-
-       /**
-        * Get an associative array of page dimensions
-        * Currently "width" and "height" are understood, but this might be
-        * expanded in the future.
-        * Returns false if unknown or if the document is not multi-page.
-        *
-        * @param $image File
-        * @param $page Unused, left for backcompatibility?
-        * @return array
-        */
-       function getPageDimensions( $image, $page ) {
-               $gis = $this->getImageSize( $image, $image->getLocalRefPath() );
-               return array(
-                       'width' => $gis[0],
-                       'height' => $gis[1]
-               );
-       }
-
-       /**
-        * Generic getter for text layer.
-        * Currently overloaded by PDF and DjVu handlers
-        * @return bool
-        */
-       function getPageText( $image, $page ) {
-               return false;
-       }
-
-       /**
-        * Get an array structure that looks like this:
-        *
-        * array(
-        *    'visible' => array(
-        *       'Human-readable name' => 'Human readable value',
-        *       ...
-        *    ),
-        *    'collapsed' => array(
-        *       'Human-readable name' => 'Human readable value',
-        *       ...
-        *    )
-        * )
-        * The UI will format this into a table where the visible fields are always
-        * visible, and the collapsed fields are optionally visible.
-        *
-        * The function should return false if there is no metadata to display.
-        */
-
-       /**
-        * @todo FIXME: I don't really like this interface, it's not very flexible
-        * I think the media handler should generate HTML instead. It can do
-        * all the formatting according to some standard. That makes it possible
-        * to do things like visual indication of grouped and chained streams
-        * in ogg container files.
-        * @return bool
-        */
-       function formatMetadata( $image ) {
-               return false;
-       }
-
-       /** sorts the visible/invisible field.
-        * Split off from ImageHandler::formatMetadata, as used by more than
-        * one type of handler.
-        *
-        * This is used by the media handlers that use the FormatMetadata class
-        *
-        * @param $metadataArray Array metadata array
-        * @return array for use displaying metadata.
-        */
-       function formatMetadataHelper( $metadataArray ) {
-                $result = array(
-                       'visible' => array(),
-                       'collapsed' => array()
-               );
-
-               $formatted = FormatMetadata::getFormattedData( $metadataArray );
-               // Sort fields into visible and collapsed
-               $visibleFields = $this->visibleMetadataFields();
-               foreach ( $formatted as $name => $value ) {
-                       $tag = strtolower( $name );
-                       self::addMeta( $result,
-                               in_array( $tag, $visibleFields ) ? 'visible' : 'collapsed',
-                               'exif',
-                               $tag,
-                               $value
-                       );
-               }
-               return $result;
-       }
-
-       /**
-        * Get a list of metadata items which should be displayed when
-        * the metadata table is collapsed.
-        *
-        * @return array of strings
-        * @access protected
-        */
-       function visibleMetadataFields() {
-               $fields = array();
-               $lines = explode( "\n", wfMsgForContent( 'metadata-fields' ) );
-               foreach( $lines as $line ) {
-                       $matches = array();
-                       if( preg_match( '/^\\*\s*(.*?)\s*$/', $line, $matches ) ) {
-                               $fields[] = $matches[1];
-                       }
-               }
-               $fields = array_map( 'strtolower', $fields );
-               return $fields;
-       }
-
-
-       /**
-        * This is used to generate an array element for each metadata value
-        * That array is then used to generate the table of metadata values
-        * on the image page
-        *
-        * @param &$array Array An array containing elements for each type of visibility
-        * and each of those elements being an array of metadata items. This function adds
-        * a value to that array.
-        * @param $visibility string ('visible' or 'collapsed') if this value is hidden
-        * by default.
-        * @param $type String type of metadata tag (currently always 'exif')
-        * @param $id String the name of the metadata tag (like 'artist' for example).
-        * its name in the table displayed is the message "$type-$id" (Ex exif-artist ).
-        * @param $value String thingy goes into a wikitext table; it used to be escaped but
-        * that was incompatible with previous practise of customized display
-        * with wikitext formatting via messages such as 'exif-model-value'.
-        * So the escaping is taken back out, but generally this seems a confusing
-        * interface.
-        * @param $param String value to pass to the message for the name of the field
-        * as $1. Currently this parameter doesn't seem to ever be used.
-        *
-        * Note, everything here is passed through the parser later on (!)
-        */
-       protected static function addMeta( &$array, $visibility, $type, $id, $value, $param = false ) {
-               $msg = wfMessage( "$type-$id", $param );
-               if ( $msg->exists() ) {
-                       $name = $msg->text();
-               } else {
-                       // This is for future compatibility when using instant commons.
-                       // So as to not display as ugly a name if a new metadata
-                       // property is defined that we don't know about
-                       // (not a major issue since such a property would be collapsed
-                       // by default).
-                       wfDebug( __METHOD__ . ' Unknown metadata name: ' . $id . "\n" );
-                       $name = wfEscapeWikiText( $id );
-               }
-               $array[$visibility][] = array(
-                       'id' => "$type-$id",
-                       'name' => $name,
-                       'value' => $value
-               );
-       }
-
-       /**
-        * @param $file File
-        * @return string
-        */
-       function getShortDesc( $file ) {
-               global $wgLang;
-               return htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
-       }
-
-       /**
-        * @param $file File
-        * @return string
-        */
-       function getLongDesc( $file ) {
-               global $wgLang;
-               return wfMessage( 'file-info', htmlspecialchars( $wgLang->formatSize( $file->getSize() ) ),
-                       $file->getMimeType() )->parse();
-       }
-
-       /**
-        * @param $file File
-        * @return string
-        */
-       static function getGeneralShortDesc( $file ) {
-               global $wgLang;
-               return $wgLang->formatSize( $file->getSize() );
-       }
-
-       /**
-        * @param $file File
-        * @return string
-        */
-       static function getGeneralLongDesc( $file ) {
-               global $wgLang;
-               return wfMessage( 'file-info', $wgLang->formatSize( $file->getSize() ),
-                       $file->getMimeType() )->parse();
-       }
-
-       /**
-        * Calculate the largest thumbnail width for a given original file size
-        * such that the thumbnail's height is at most $maxHeight.
-        * @param $boxWidth Integer Width of the thumbnail box.
-        * @param $boxHeight Integer Height of the thumbnail box.
-        * @param $maxHeight Integer Maximum height expected for the thumbnail.
-        * @return Integer.
-        */
-       public static function fitBoxWidth( $boxWidth, $boxHeight, $maxHeight ) {
-               $idealWidth = $boxWidth * $maxHeight / $boxHeight;
-               $roundedUp = ceil( $idealWidth );
-               if( round( $roundedUp * $boxHeight / $boxWidth ) > $maxHeight ) {
-                       return floor( $idealWidth );
-               } else {
-                       return $roundedUp;
-               }
-       }
-
-       function getDimensionsString( $file ) {
-               return '';
-       }
-
-       /**
-        * Modify the parser object post-transform
-        */
-       function parserTransformHook( $parser, $file ) {}
-
-       /**
-        * File validation hook called on upload.
-        *
-        * If the file at the given local path is not valid, or its MIME type does not
-        * match the handler class, a Status object should be returned containing
-        * relevant errors.
-        *
-        * @param $fileName string The local path to the file.
-        * @return Status object
-        */
-       function verifyUpload( $fileName ) {
-               return Status::newGood();
-       }
-
-       /**
-        * Check for zero-sized thumbnails. These can be generated when
-        * no disk space is available or some other error occurs
-        *
-        * @param $dstPath string The location of the suspect file
-        * @param $retval int Return value of some shell process, file will be deleted if this is non-zero
-        * @return bool True if removed, false otherwise
-        */
-       function removeBadFile( $dstPath, $retval = 0 ) {
-               if( file_exists( $dstPath ) ) {
-                       $thumbstat = stat( $dstPath );
-                       if( $thumbstat['size'] == 0 || $retval != 0 ) {
-                               $result = unlink( $dstPath );
-
-                               if ( $result ) {
-                                       wfDebugLog( 'thumbnail',
-                                               sprintf( 'Removing bad %d-byte thumbnail "%s". unlink() succeeded',
-                                                       $thumbstat['size'], $dstPath ) );
-                               } else {
-                                       wfDebugLog( 'thumbnail',
-                                               sprintf( 'Removing bad %d-byte thumbnail "%s". unlink() failed',
-                                                       $thumbstat['size'], $dstPath ) );
-                               }
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * Remove files from the purge list
-        *
-        * @param array $files
-        * @param array $options
-        */
-       public function filterThumbnailPurgeList( &$files, $options ) {
-               // Do nothing
-       }
-}
-
-/**
- * Media handler abstract base class for images
- *
- * @ingroup Media
- */
-abstract class ImageHandler extends MediaHandler {
-
-       /**
-        * @param $file File
-        * @return bool
-        */
-       function canRender( $file ) {
-               return ( $file->getWidth() && $file->getHeight() );
-       }
-
-       function getParamMap() {
-               return array( 'img_width' => 'width' );
-       }
-
-       function validateParam( $name, $value ) {
-               if ( in_array( $name, array( 'width', 'height' ) ) ) {
-                       if ( $value <= 0 ) {
-                               return false;
-                       } else {
-                               return true;
-                       }
-               } else {
-                       return false;
-               }
-       }
-
-       function makeParamString( $params ) {
-               if ( isset( $params['physicalWidth'] ) ) {
-                       $width = $params['physicalWidth'];
-               } elseif ( isset( $params['width'] ) ) {
-                       $width = $params['width'];
-               } else {
-                       throw new MWException( 'No width specified to '.__METHOD__ );
-               }
-               # Removed for ProofreadPage
-               #$width = intval( $width );
-               return "{$width}px";
-       }
-
-       function parseParamString( $str ) {
-               $m = false;
-               if ( preg_match( '/^(\d+)px$/', $str, $m ) ) {
-                       return array( 'width' => $m[1] );
-               } else {
-                       return false;
-               }
-       }
-
-       function getScriptParams( $params ) {
-               return array( 'width' => $params['width'] );
-       }
-
-       /**
-        * @param $image File
-        * @param  $params
-        * @return bool
-        */
-       function normaliseParams( $image, &$params ) {
-               $mimeType = $image->getMimeType();
-
-               if ( !isset( $params['width'] ) ) {
-                       return false;
-               }
-
-               if ( !isset( $params['page'] ) ) {
-                       $params['page'] = 1;
-               } else  {
-                       if ( $params['page'] > $image->pageCount() ) {
-                               $params['page'] = $image->pageCount();
-                       }
-
-                       if ( $params['page'] < 1 ) {
-                               $params['page'] = 1;
-                       }
-               }
-
-               $srcWidth = $image->getWidth( $params['page'] );
-               $srcHeight = $image->getHeight( $params['page'] );
-
-               if ( isset( $params['height'] ) && $params['height'] != -1 ) {
-                       # Height & width were both set
-                       if ( $params['width'] * $srcHeight > $params['height'] * $srcWidth ) {
-                               # Height is the relative smaller dimension, so scale width accordingly
-                               $params['width'] = self::fitBoxWidth( $srcWidth, $srcHeight, $params['height'] );
-
-                               if ( $params['width'] == 0 ) {
-                                       # Very small image, so we need to rely on client side scaling :(
-                                       $params['width'] = 1;
-                               }
-
-                               $params['physicalWidth'] = $params['width'];
-                       } else {
-                               # Height was crap, unset it so that it will be calculated later
-                               unset( $params['height'] );
-                       }
-               }
-
-               if ( !isset( $params['physicalWidth'] ) ) {
-                       # Passed all validations, so set the physicalWidth
-                       $params['physicalWidth'] = $params['width'];
-               }
-
-               # Because thumbs are only referred to by width, the height always needs
-               # to be scaled by the width to keep the thumbnail sizes consistent,
-               # even if it was set inside the if block above
-               $params['physicalHeight'] = File::scaleHeight( $srcWidth, $srcHeight,
-                       $params['physicalWidth'] );
-
-               # Set the height if it was not validated in the if block higher up
-               if ( !isset( $params['height'] ) || $params['height'] == -1 ) {
-                       $params['height'] = $params['physicalHeight'];
-               }
-
-
-               if ( !$this->validateThumbParams( $params['physicalWidth'],
-                               $params['physicalHeight'], $srcWidth, $srcHeight, $mimeType ) ) {
-                       return false;
-               }
-               return true;
-       }
-
-       /**
-        * Validate thumbnail parameters and fill in the correct height
-        *
-        * @param $width Integer: specified width (input/output)
-        * @param $height Integer: height (output only)
-        * @param $srcWidth Integer: width of the source image
-        * @param $srcHeight Integer: height of the source image
-        * @param $mimeType
-        * @return bool False to indicate that an error should be returned to the user.
-        */
-       function validateThumbParams( &$width, &$height, $srcWidth, $srcHeight, $mimeType ) {
-               $width = intval( $width );
-
-               # Sanity check $width
-               if( $width <= 0) {
-                       wfDebug( __METHOD__.": Invalid destination width: $width\n" );
-                       return false;
-               }
-               if ( $srcWidth <= 0 ) {
-                       wfDebug( __METHOD__.": Invalid source width: $srcWidth\n" );
-                       return false;
-               }
-
-               $height = File::scaleHeight( $srcWidth, $srcHeight, $width );
-               if ( $height == 0 ) {
-                       # Force height to be at least 1 pixel
-                       $height = 1;
-               }
-               return true;
-       }
-
-       /**
-        * @param $image File
-        * @param  $script
-        * @param  $params
-        * @return bool|ThumbnailImage
-        */
-       function getScriptedTransform( $image, $script, $params ) {
-               if ( !$this->normaliseParams( $image, $params ) ) {
-                       return false;
-               }
-               $url = $script . '&' . wfArrayToCGI( $this->getScriptParams( $params ) );
-               $page = isset( $params['page'] ) ? $params['page'] : false;
-
-               if( $image->mustRender() || $params['width'] < $image->getWidth() ) {
-                       return new ThumbnailImage( $image,
-                               $url, $params['width'], $params['height'], false, $page );
-               }
-       }
-
-       function getImageSize( $image, $path ) {
-               wfSuppressWarnings();
-               $gis = getimagesize( $path );
-               wfRestoreWarnings();
-               return $gis;
-       }
-
-       function isAnimatedImage( $image ) {
-               return false;
-       }
-
-       /**
-        * @param $file File
-        * @return string
-        */
-       function getShortDesc( $file ) {
-               global $wgLang;
-               $nbytes = htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
-               $widthheight = wfMessage( 'widthheight' )->numParams( $file->getWidth(), $file->getHeight() )->escaped();
-
-               return "$widthheight ($nbytes)";
-       }
-
-       /**
-        * @param $file File
-        * @return string
-        */
-       function getLongDesc( $file ) {
-               global $wgLang;
-               $pages = $file->pageCount();
-               $size = htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
-               if ( $pages === false || $pages <= 1 ) {
-                       $msg = wfMessage( 'file-info-size' )->numParams( $file->getWidth(),
-                               $file->getHeight() )->params( $size,
-                               $file->getMimeType() )->parse();
-               } else {
-                       $msg = wfMessage( 'file-info-size-pages' )->numParams( $file->getWidth(),
-                               $file->getHeight() )->params( $size,
-                               $file->getMimeType() )->numParams( $pages )->parse();
-               }
-               return $msg;
-       }
-
-       /**
-        * @param $file File
-        * @return string
-        */
-       function getDimensionsString( $file ) {
-               $pages = $file->pageCount();
-               if ( $pages > 1 ) {
-                       return wfMessage( 'widthheightpage' )->numParams( $file->getWidth(), $file->getHeight(), $pages )->text();
-               } else {
-                       return wfMessage( 'widthheight' )->numParams( $file->getWidth(), $file->getHeight() )->text();
-               }
-       }
-}
diff --git a/includes/media/ImageHandler.php b/includes/media/ImageHandler.php
new file mode 100644 (file)
index 0000000..69f51be
--- /dev/null
@@ -0,0 +1,255 @@
+<?php
+/**
+ * Media-handling base classes and generic functionality.
+ *
+ * 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 Media
+ */
+
+/**
+ * Media handler abstract base class for images
+ *
+ * @ingroup Media
+ */
+abstract class ImageHandler extends MediaHandler {
+
+       /**
+        * @param $file File
+        * @return bool
+        */
+       function canRender( $file ) {
+               return ( $file->getWidth() && $file->getHeight() );
+       }
+
+       function getParamMap() {
+               return array( 'img_width' => 'width' );
+       }
+
+       function validateParam( $name, $value ) {
+               if ( in_array( $name, array( 'width', 'height' ) ) ) {
+                       if ( $value <= 0 ) {
+                               return false;
+                       } else {
+                               return true;
+                       }
+               } else {
+                       return false;
+               }
+       }
+
+       function makeParamString( $params ) {
+               if ( isset( $params['physicalWidth'] ) ) {
+                       $width = $params['physicalWidth'];
+               } elseif ( isset( $params['width'] ) ) {
+                       $width = $params['width'];
+               } else {
+                       throw new MWException( 'No width specified to '.__METHOD__ );
+               }
+               # Removed for ProofreadPage
+               #$width = intval( $width );
+               return "{$width}px";
+       }
+
+       function parseParamString( $str ) {
+               $m = false;
+               if ( preg_match( '/^(\d+)px$/', $str, $m ) ) {
+                       return array( 'width' => $m[1] );
+               } else {
+                       return false;
+               }
+       }
+
+       function getScriptParams( $params ) {
+               return array( 'width' => $params['width'] );
+       }
+
+       /**
+        * @param $image File
+        * @param  $params
+        * @return bool
+        */
+       function normaliseParams( $image, &$params ) {
+               $mimeType = $image->getMimeType();
+
+               if ( !isset( $params['width'] ) ) {
+                       return false;
+               }
+
+               if ( !isset( $params['page'] ) ) {
+                       $params['page'] = 1;
+               } else  {
+                       if ( $params['page'] > $image->pageCount() ) {
+                               $params['page'] = $image->pageCount();
+                       }
+
+                       if ( $params['page'] < 1 ) {
+                               $params['page'] = 1;
+                       }
+               }
+
+               $srcWidth = $image->getWidth( $params['page'] );
+               $srcHeight = $image->getHeight( $params['page'] );
+
+               if ( isset( $params['height'] ) && $params['height'] != -1 ) {
+                       # Height & width were both set
+                       if ( $params['width'] * $srcHeight > $params['height'] * $srcWidth ) {
+                               # Height is the relative smaller dimension, so scale width accordingly
+                               $params['width'] = self::fitBoxWidth( $srcWidth, $srcHeight, $params['height'] );
+
+                               if ( $params['width'] == 0 ) {
+                                       # Very small image, so we need to rely on client side scaling :(
+                                       $params['width'] = 1;
+                               }
+
+                               $params['physicalWidth'] = $params['width'];
+                       } else {
+                               # Height was crap, unset it so that it will be calculated later
+                               unset( $params['height'] );
+                       }
+               }
+
+               if ( !isset( $params['physicalWidth'] ) ) {
+                       # Passed all validations, so set the physicalWidth
+                       $params['physicalWidth'] = $params['width'];
+               }
+
+               # Because thumbs are only referred to by width, the height always needs
+               # to be scaled by the width to keep the thumbnail sizes consistent,
+               # even if it was set inside the if block above
+               $params['physicalHeight'] = File::scaleHeight( $srcWidth, $srcHeight,
+                       $params['physicalWidth'] );
+
+               # Set the height if it was not validated in the if block higher up
+               if ( !isset( $params['height'] ) || $params['height'] == -1 ) {
+                       $params['height'] = $params['physicalHeight'];
+               }
+
+
+               if ( !$this->validateThumbParams( $params['physicalWidth'],
+                               $params['physicalHeight'], $srcWidth, $srcHeight, $mimeType ) ) {
+                       return false;
+               }
+               return true;
+       }
+
+       /**
+        * Validate thumbnail parameters and fill in the correct height
+        *
+        * @param $width Integer: specified width (input/output)
+        * @param $height Integer: height (output only)
+        * @param $srcWidth Integer: width of the source image
+        * @param $srcHeight Integer: height of the source image
+        * @param $mimeType
+        * @return bool False to indicate that an error should be returned to the user.
+        */
+       function validateThumbParams( &$width, &$height, $srcWidth, $srcHeight, $mimeType ) {
+               $width = intval( $width );
+
+               # Sanity check $width
+               if( $width <= 0) {
+                       wfDebug( __METHOD__.": Invalid destination width: $width\n" );
+                       return false;
+               }
+               if ( $srcWidth <= 0 ) {
+                       wfDebug( __METHOD__.": Invalid source width: $srcWidth\n" );
+                       return false;
+               }
+
+               $height = File::scaleHeight( $srcWidth, $srcHeight, $width );
+               if ( $height == 0 ) {
+                       # Force height to be at least 1 pixel
+                       $height = 1;
+               }
+               return true;
+       }
+
+       /**
+        * @param $image File
+        * @param  $script
+        * @param  $params
+        * @return bool|ThumbnailImage
+        */
+       function getScriptedTransform( $image, $script, $params ) {
+               if ( !$this->normaliseParams( $image, $params ) ) {
+                       return false;
+               }
+               $url = $script . '&' . wfArrayToCGI( $this->getScriptParams( $params ) );
+               $page = isset( $params['page'] ) ? $params['page'] : false;
+
+               if( $image->mustRender() || $params['width'] < $image->getWidth() ) {
+                       return new ThumbnailImage( $image,
+                               $url, $params['width'], $params['height'], false, $page );
+               }
+       }
+
+       function getImageSize( $image, $path ) {
+               wfSuppressWarnings();
+               $gis = getimagesize( $path );
+               wfRestoreWarnings();
+               return $gis;
+       }
+
+       function isAnimatedImage( $image ) {
+               return false;
+       }
+
+       /**
+        * @param $file File
+        * @return string
+        */
+       function getShortDesc( $file ) {
+               global $wgLang;
+               $nbytes = htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
+               $widthheight = wfMessage( 'widthheight' )->numParams( $file->getWidth(), $file->getHeight() )->escaped();
+
+               return "$widthheight ($nbytes)";
+       }
+
+       /**
+        * @param $file File
+        * @return string
+        */
+       function getLongDesc( $file ) {
+               global $wgLang;
+               $pages = $file->pageCount();
+               $size = htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
+               if ( $pages === false || $pages <= 1 ) {
+                       $msg = wfMessage( 'file-info-size' )->numParams( $file->getWidth(),
+                               $file->getHeight() )->params( $size,
+                               $file->getMimeType() )->parse();
+               } else {
+                       $msg = wfMessage( 'file-info-size-pages' )->numParams( $file->getWidth(),
+                               $file->getHeight() )->params( $size,
+                               $file->getMimeType() )->numParams( $pages )->parse();
+               }
+               return $msg;
+       }
+
+       /**
+        * @param $file File
+        * @return string
+        */
+       function getDimensionsString( $file ) {
+               $pages = $file->pageCount();
+               if ( $pages > 1 ) {
+                       return wfMessage( 'widthheightpage' )->numParams( $file->getWidth(), $file->getHeight(), $pages )->text();
+               } else {
+                       return wfMessage( 'widthheight' )->numParams( $file->getWidth(), $file->getHeight() )->text();
+               }
+       }
+}
diff --git a/includes/media/MediaHandler.php b/includes/media/MediaHandler.php
new file mode 100644 (file)
index 0000000..e883b7f
--- /dev/null
@@ -0,0 +1,547 @@
+<?php
+/**
+ * Media-handling base classes and generic functionality.
+ *
+ * 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 Media
+ */
+
+/**
+ * Base media handler class
+ *
+ * @ingroup Media
+ */
+abstract class MediaHandler {
+       const TRANSFORM_LATER = 1;
+       const METADATA_GOOD = true;
+       const METADATA_BAD = false;
+       const METADATA_COMPATIBLE = 2; // for old but backwards compatible.
+       /**
+        * Instance cache
+        */
+       static $handlers = array();
+
+       /**
+        * Get a MediaHandler for a given MIME type from the instance cache
+        *
+        * @param $type string
+        *
+        * @return MediaHandler
+        */
+       static function getHandler( $type ) {
+               global $wgMediaHandlers;
+               if ( !isset( $wgMediaHandlers[$type] ) ) {
+                       wfDebug( __METHOD__ . ": no handler found for $type.\n");
+                       return false;
+               }
+               $class = $wgMediaHandlers[$type];
+               if ( !isset( self::$handlers[$class] ) ) {
+                       self::$handlers[$class] = new $class;
+                       if ( !self::$handlers[$class]->isEnabled() ) {
+                               self::$handlers[$class] = false;
+                       }
+               }
+               return self::$handlers[$class];
+       }
+
+       /**
+        * Get an associative array mapping magic word IDs to parameter names.
+        * Will be used by the parser to identify parameters.
+        */
+       abstract function getParamMap();
+
+       /**
+        * Validate a thumbnail parameter at parse time.
+        * Return true to accept the parameter, and false to reject it.
+        * If you return false, the parser will do something quiet and forgiving.
+        *
+        * @param $name
+        * @param $value
+        */
+       abstract function validateParam( $name, $value );
+
+       /**
+        * Merge a parameter array into a string appropriate for inclusion in filenames
+        *
+        * @param $params array
+        */
+       abstract function makeParamString( $params );
+
+       /**
+        * Parse a param string made with makeParamString back into an array
+        *
+        * @param $str string
+        */
+       abstract function parseParamString( $str );
+
+       /**
+        * Changes the parameter array as necessary, ready for transformation.
+        * Should be idempotent.
+        * Returns false if the parameters are unacceptable and the transform should fail
+        * @param $image
+        * @param $params
+        */
+       abstract function normaliseParams( $image, &$params );
+
+       /**
+        * Get an image size array like that returned by getimagesize(), or false if it
+        * can't be determined.
+        *
+        * @param $image File: the image object, or false if there isn't one
+        * @param $path String: the filename
+        * @return Array Follow the format of PHP getimagesize() internal function. See http://www.php.net/getimagesize
+        */
+       abstract function getImageSize( $image, $path );
+
+       /**
+        * Get handler-specific metadata which will be saved in the img_metadata field.
+        *
+        * @param $image File: the image object, or false if there isn't one.
+        *   Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
+        * @param $path String: the filename
+        * @return String
+        */
+       function getMetadata( $image, $path ) { return ''; }
+
+       /**
+       * Get metadata version.
+       *
+       * This is not used for validating metadata, this is used for the api when returning
+       * metadata, since api content formats should stay the same over time, and so things
+       * using ForiegnApiRepo can keep backwards compatibility
+       *
+       * All core media handlers share a common version number, and extensions can
+       * use the GetMetadataVersion hook to append to the array (they should append a unique
+       * string so not to get confusing). If there was a media handler named 'foo' with metadata
+       * version 3 it might add to the end of the array the element 'foo=3'. if the core metadata
+       * version is 2, the end version string would look like '2;foo=3'.
+       *
+       * @return string version string
+       */
+       static function getMetadataVersion () {
+               $version = Array( '2' ); // core metadata version
+               wfRunHooks('GetMetadataVersion', Array(&$version));
+               return implode( ';', $version);
+        }
+
+       /**
+       * Convert metadata version.
+       *
+       * By default just returns $metadata, but can be used to allow
+       * media handlers to convert between metadata versions.
+       *
+       * @param $metadata Mixed String or Array metadata array (serialized if string)
+       * @param $version Integer target version
+       * @return Array serialized metadata in specified version, or $metadata on fail.
+       */
+       function convertMetadataVersion( $metadata, $version = 1 ) {
+               if ( !is_array( $metadata ) ) {
+
+                       //unserialize to keep return parameter consistent.
+                       wfSuppressWarnings();
+                       $ret = unserialize( $metadata );
+                       wfRestoreWarnings();
+                       return $ret;
+               }
+               return $metadata;
+       }
+
+       /**
+        * Get a string describing the type of metadata, for display purposes.
+        *
+        * @return string
+        */
+       function getMetadataType( $image ) { return false; }
+
+       /**
+        * Check if the metadata string is valid for this handler.
+        * If it returns MediaHandler::METADATA_BAD (or false), Image
+        * will reload the metadata from the file and update the database.
+        * MediaHandler::METADATA_GOOD for if the metadata is a-ok,
+        * MediaHanlder::METADATA_COMPATIBLE if metadata is old but backwards
+        * compatible (which may or may not trigger a metadata reload).
+        * @return bool
+        */
+       function isMetadataValid( $image, $metadata ) {
+               return self::METADATA_GOOD;
+       }
+
+
+       /**
+        * Get a MediaTransformOutput object representing an alternate of the transformed
+        * output which will call an intermediary thumbnail assist script.
+        *
+        * Used when the repository has a thumbnailScriptUrl option configured.
+        *
+        * Return false to fall back to the regular getTransform().
+        * @return bool
+        */
+       function getScriptedTransform( $image, $script, $params ) {
+               return false;
+       }
+
+       /**
+        * Get a MediaTransformOutput object representing the transformed output. Does not
+        * actually do the transform.
+        *
+        * @param $image File: the image object
+        * @param $dstPath String: filesystem destination path
+        * @param $dstUrl String: Destination URL to use in output HTML
+        * @param $params Array: Arbitrary set of parameters validated by $this->validateParam()
+        * @return MediaTransformOutput
+        */
+       final function getTransform( $image, $dstPath, $dstUrl, $params ) {
+               return $this->doTransform( $image, $dstPath, $dstUrl, $params, self::TRANSFORM_LATER );
+       }
+
+       /**
+        * Get a MediaTransformOutput object representing the transformed output. Does the
+        * transform unless $flags contains self::TRANSFORM_LATER.
+        *
+        * @param $image File: the image object
+        * @param $dstPath String: filesystem destination path
+        * @param $dstUrl String: destination URL to use in output HTML
+        * @param $params Array: arbitrary set of parameters validated by $this->validateParam()
+        * @param $flags Integer: a bitfield, may contain self::TRANSFORM_LATER
+        *
+        * @return MediaTransformOutput
+        */
+       abstract function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 );
+
+       /**
+        * Get the thumbnail extension and MIME type for a given source MIME type
+        * @return array thumbnail extension and MIME type
+        */
+       function getThumbType( $ext, $mime, $params = null ) {
+               $magic = MimeMagic::singleton();
+               if ( !$ext || $magic->isMatchingExtension( $ext, $mime ) === false ) {
+                       // The extension is not valid for this mime type and we do
+                       // recognize the mime type
+                       $extensions = $magic->getExtensionsForType( $mime );
+                       if ( $extensions ) {
+                               return array( strtok( $extensions, ' ' ), $mime );
+                       }
+               }
+
+               // The extension is correct (true) or the mime type is unknown to
+               // MediaWiki (null)
+               return array( $ext, $mime );
+       }
+
+       /**
+        * True if the handled types can be transformed
+        * @return bool
+        */
+       function canRender( $file ) { return true; }
+       /**
+        * True if handled types cannot be displayed directly in a browser
+        * but can be rendered
+        * @return bool
+        */
+       function mustRender( $file ) { return false; }
+       /**
+        * True if the type has multi-page capabilities
+        * @return bool
+        */
+       function isMultiPage( $file ) { return false; }
+       /**
+        * Page count for a multi-page document, false if unsupported or unknown
+        * @return bool
+        */
+       function pageCount( $file ) { return false; }
+       /**
+        * The material is vectorized and thus scaling is lossless
+        * @return bool
+        */
+       function isVectorized( $file ) { return false; }
+       /**
+        * False if the handler is disabled for all files
+        * @return bool
+        */
+       function isEnabled() { return true; }
+
+       /**
+        * Get an associative array of page dimensions
+        * Currently "width" and "height" are understood, but this might be
+        * expanded in the future.
+        * Returns false if unknown or if the document is not multi-page.
+        *
+        * @param $image File
+        * @param $page Unused, left for backcompatibility?
+        * @return array
+        */
+       function getPageDimensions( $image, $page ) {
+               $gis = $this->getImageSize( $image, $image->getLocalRefPath() );
+               return array(
+                       'width' => $gis[0],
+                       'height' => $gis[1]
+               );
+       }
+
+       /**
+        * Generic getter for text layer.
+        * Currently overloaded by PDF and DjVu handlers
+        * @return bool
+        */
+       function getPageText( $image, $page ) {
+               return false;
+       }
+
+       /**
+        * Get an array structure that looks like this:
+        *
+        * array(
+        *    'visible' => array(
+        *       'Human-readable name' => 'Human readable value',
+        *       ...
+        *    ),
+        *    'collapsed' => array(
+        *       'Human-readable name' => 'Human readable value',
+        *       ...
+        *    )
+        * )
+        * The UI will format this into a table where the visible fields are always
+        * visible, and the collapsed fields are optionally visible.
+        *
+        * The function should return false if there is no metadata to display.
+        */
+
+       /**
+        * @todo FIXME: I don't really like this interface, it's not very flexible
+        * I think the media handler should generate HTML instead. It can do
+        * all the formatting according to some standard. That makes it possible
+        * to do things like visual indication of grouped and chained streams
+        * in ogg container files.
+        * @return bool
+        */
+       function formatMetadata( $image ) {
+               return false;
+       }
+
+       /** sorts the visible/invisible field.
+        * Split off from ImageHandler::formatMetadata, as used by more than
+        * one type of handler.
+        *
+        * This is used by the media handlers that use the FormatMetadata class
+        *
+        * @param $metadataArray Array metadata array
+        * @return array for use displaying metadata.
+        */
+       function formatMetadataHelper( $metadataArray ) {
+                $result = array(
+                       'visible' => array(),
+                       'collapsed' => array()
+               );
+
+               $formatted = FormatMetadata::getFormattedData( $metadataArray );
+               // Sort fields into visible and collapsed
+               $visibleFields = $this->visibleMetadataFields();
+               foreach ( $formatted as $name => $value ) {
+                       $tag = strtolower( $name );
+                       self::addMeta( $result,
+                               in_array( $tag, $visibleFields ) ? 'visible' : 'collapsed',
+                               'exif',
+                               $tag,
+                               $value
+                       );
+               }
+               return $result;
+       }
+
+       /**
+        * Get a list of metadata items which should be displayed when
+        * the metadata table is collapsed.
+        *
+        * @return array of strings
+        * @access protected
+        */
+       function visibleMetadataFields() {
+               $fields = array();
+               $lines = explode( "\n", wfMsgForContent( 'metadata-fields' ) );
+               foreach( $lines as $line ) {
+                       $matches = array();
+                       if( preg_match( '/^\\*\s*(.*?)\s*$/', $line, $matches ) ) {
+                               $fields[] = $matches[1];
+                       }
+               }
+               $fields = array_map( 'strtolower', $fields );
+               return $fields;
+       }
+
+
+       /**
+        * This is used to generate an array element for each metadata value
+        * That array is then used to generate the table of metadata values
+        * on the image page
+        *
+        * @param &$array Array An array containing elements for each type of visibility
+        * and each of those elements being an array of metadata items. This function adds
+        * a value to that array.
+        * @param $visibility string ('visible' or 'collapsed') if this value is hidden
+        * by default.
+        * @param $type String type of metadata tag (currently always 'exif')
+        * @param $id String the name of the metadata tag (like 'artist' for example).
+        * its name in the table displayed is the message "$type-$id" (Ex exif-artist ).
+        * @param $value String thingy goes into a wikitext table; it used to be escaped but
+        * that was incompatible with previous practise of customized display
+        * with wikitext formatting via messages such as 'exif-model-value'.
+        * So the escaping is taken back out, but generally this seems a confusing
+        * interface.
+        * @param $param String value to pass to the message for the name of the field
+        * as $1. Currently this parameter doesn't seem to ever be used.
+        *
+        * Note, everything here is passed through the parser later on (!)
+        */
+       protected static function addMeta( &$array, $visibility, $type, $id, $value, $param = false ) {
+               $msg = wfMessage( "$type-$id", $param );
+               if ( $msg->exists() ) {
+                       $name = $msg->text();
+               } else {
+                       // This is for future compatibility when using instant commons.
+                       // So as to not display as ugly a name if a new metadata
+                       // property is defined that we don't know about
+                       // (not a major issue since such a property would be collapsed
+                       // by default).
+                       wfDebug( __METHOD__ . ' Unknown metadata name: ' . $id . "\n" );
+                       $name = wfEscapeWikiText( $id );
+               }
+               $array[$visibility][] = array(
+                       'id' => "$type-$id",
+                       'name' => $name,
+                       'value' => $value
+               );
+       }
+
+       /**
+        * @param $file File
+        * @return string
+        */
+       function getShortDesc( $file ) {
+               global $wgLang;
+               return htmlspecialchars( $wgLang->formatSize( $file->getSize() ) );
+       }
+
+       /**
+        * @param $file File
+        * @return string
+        */
+       function getLongDesc( $file ) {
+               global $wgLang;
+               return wfMessage( 'file-info', htmlspecialchars( $wgLang->formatSize( $file->getSize() ) ),
+                       $file->getMimeType() )->parse();
+       }
+
+       /**
+        * @param $file File
+        * @return string
+        */
+       static function getGeneralShortDesc( $file ) {
+               global $wgLang;
+               return $wgLang->formatSize( $file->getSize() );
+       }
+
+       /**
+        * @param $file File
+        * @return string
+        */
+       static function getGeneralLongDesc( $file ) {
+               global $wgLang;
+               return wfMessage( 'file-info', $wgLang->formatSize( $file->getSize() ),
+                       $file->getMimeType() )->parse();
+       }
+
+       /**
+        * Calculate the largest thumbnail width for a given original file size
+        * such that the thumbnail's height is at most $maxHeight.
+        * @param $boxWidth Integer Width of the thumbnail box.
+        * @param $boxHeight Integer Height of the thumbnail box.
+        * @param $maxHeight Integer Maximum height expected for the thumbnail.
+        * @return Integer.
+        */
+       public static function fitBoxWidth( $boxWidth, $boxHeight, $maxHeight ) {
+               $idealWidth = $boxWidth * $maxHeight / $boxHeight;
+               $roundedUp = ceil( $idealWidth );
+               if( round( $roundedUp * $boxHeight / $boxWidth ) > $maxHeight ) {
+                       return floor( $idealWidth );
+               } else {
+                       return $roundedUp;
+               }
+       }
+
+       function getDimensionsString( $file ) {
+               return '';
+       }
+
+       /**
+        * Modify the parser object post-transform
+        */
+       function parserTransformHook( $parser, $file ) {}
+
+       /**
+        * File validation hook called on upload.
+        *
+        * If the file at the given local path is not valid, or its MIME type does not
+        * match the handler class, a Status object should be returned containing
+        * relevant errors.
+        *
+        * @param $fileName string The local path to the file.
+        * @return Status object
+        */
+       function verifyUpload( $fileName ) {
+               return Status::newGood();
+       }
+
+       /**
+        * Check for zero-sized thumbnails. These can be generated when
+        * no disk space is available or some other error occurs
+        *
+        * @param $dstPath string The location of the suspect file
+        * @param $retval int Return value of some shell process, file will be deleted if this is non-zero
+        * @return bool True if removed, false otherwise
+        */
+       function removeBadFile( $dstPath, $retval = 0 ) {
+               if( file_exists( $dstPath ) ) {
+                       $thumbstat = stat( $dstPath );
+                       if( $thumbstat['size'] == 0 || $retval != 0 ) {
+                               $result = unlink( $dstPath );
+
+                               if ( $result ) {
+                                       wfDebugLog( 'thumbnail',
+                                               sprintf( 'Removing bad %d-byte thumbnail "%s". unlink() succeeded',
+                                                       $thumbstat['size'], $dstPath ) );
+                               } else {
+                                       wfDebugLog( 'thumbnail',
+                                               sprintf( 'Removing bad %d-byte thumbnail "%s". unlink() failed',
+                                                       $thumbstat['size'], $dstPath ) );
+                               }
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Remove files from the purge list
+        *
+        * @param array $files
+        * @param array $options
+        */
+       public function filterThumbnailPurgeList( &$files, $options ) {
+               // Do nothing
+       }
+}
index eda57c0..63778b7 100644 (file)
@@ -942,12 +942,8 @@ class MWMemcached {
                                }
 
                        } else {
-                               $peer = $peerAddress = $peerPort = '';
-                               $gotPeer = socket_getpeername( $sock, $peerAddress, $peerPort );
-                               if( $gotPeer ) {
-                                       $peer = " from [$peerAddress:$peerPort";
-                               }
-                               $this->_debugprint( "Error parsing memcached response{$peer}\n" );
+                               $peer = stream_socket_get_name( $sock, true /** remote **/ );
+                               $this->_debugprint( "Error parsing memcached response from [{$peer}]\n" );
                                return 0;
                        }
                }
index 912de41..3a6edd2 100644 (file)
@@ -129,7 +129,8 @@ class CoreParserFunctions {
         * @return mixed|string
         */
        static function formatDate( $parser, $date, $defaultPref = null ) {
-               $df = DateFormatter::getInstance();
+               $lang = $parser->getFunctionLang();
+               $df = DateFormatter::getInstance( $lang );
 
                $date = trim( $date );
 
@@ -565,29 +566,64 @@ class CoreParserFunctions {
        }
 
        /**
-        * Return the number of pages in the given category, or 0 if it's nonexis-
-        * tent.  This is an expensive parser function and can't be called too many
-        * times per page.
+        * Return the number of pages, files or subcats in the given category,
+        * or 0 if it's nonexistent. This is an expensive parser function and
+        * can't be called too many times per page.
         * @return string
         */
-       static function pagesincategory( $parser, $name = '', $raw = null ) {
+       static function pagesincategory( $parser, $name = '', $arg1 = null, $arg2 = null ) {
+               static $magicWords = null;
+               if ( is_null( $magicWords ) ) {
+                       $magicWords = new MagicWordArray( array(
+                               'pagesincategory_all',
+                               'pagesincategory_pages',
+                               'pagesincategory_subcats',
+                               'pagesincategory_files'
+                       ) );
+               }
                static $cache = array();
-               $category = Category::newFromName( $name );
 
-               if( !is_object( $category ) ) {
-                       $cache[$name] = 0;
+               // split the given option to its variable
+               if( self::isRaw( $arg1 ) ) {
+                       //{{pagesincategory:|raw[|type]}}
+                       $raw = $arg1;
+                       $type = $magicWords->matchStartToEnd( $arg2 );
+               } else {
+                       //{{pagesincategory:[|type[|raw]]}}
+                       $type = $magicWords->matchStartToEnd( $arg1 );
+                       $raw = $arg2;
+               }
+               if( !$type ) { //backward compatibility
+                       $type = 'pagesincategory_all';
+               }
+
+               $title = Title::makeTitleSafe( NS_CATEGORY, $name );
+               if( !$title ) { # invalid title
                        return self::formatRaw( 0, $raw );
                }
 
-               # Normalize name for cache
-               $name = $category->getName();
+               // Normalize name for cache
+               $name = $title->getDBkey();
 
-               $count = 0;
-               if( isset( $cache[$name] ) ) {
-                       $count = $cache[$name];
-               } elseif( $parser->incrementExpensiveFunctionCount() ) {
-                       $count = $cache[$name] = (int)$category->getPageCount();
+               if( !isset( $cache[$name] ) ) {
+                       $category = Category::newFromTitle( $title );
+
+                       $allCount = $subcatCount = $fileCount = $pagesCount = 0;
+                       if( $parser->incrementExpensiveFunctionCount() ) {
+                               // $allCount is the total number of cat members,
+                               // not the count of how many members are normal pages.
+                               $allCount = (int)$category->getPageCount();
+                               $subcatCount = (int)$category->getSubcatCount();
+                               $fileCount = (int)$category->getFileCount();
+                               $pagesCount = $allCount - $subcatCount - $fileCount;
+                       }
+                       $cache[$name]['pagesincategory_all'] = $allCount;
+                       $cache[$name]['pagesincategory_pages'] = $pagesCount;
+                       $cache[$name]['pagesincategory_subcats'] = $subcatCount;
+                       $cache[$name]['pagesincategory_files'] = $fileCount;
                }
+
+               $count = $cache[$name][$type];
                return self::formatRaw( $count, $raw );
        }
 
@@ -754,40 +790,34 @@ class CoreParserFunctions {
        }
 
        // Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}} or {{filepath|300|nowiki}}
+       // or {{filepath|300px}}, {{filepath|200x300px}}, {{filepath|nowiki|200x300px}}, {{filepath|200x300px|nowiki}}
        public static function filepath( $parser, $name='', $argA='', $argB='' ) {
                $file = wfFindFile( $name );
-               $size = '';
-               $argA_int = intval( $argA );
-               $argB_int = intval( $argB );
-
-               if ( $argB_int > 0 ) {
-                       // {{filepath: | option | size }}
-                       $size = $argB_int;
-                       $option = $argA;
-
-               } elseif ( $argA_int > 0 ) {
-                       // {{filepath: | size [|option] }}
-                       $size = $argA_int;
-                       $option = $argB;
+               $isNowiki = false;
 
+               if( $argA == 'nowiki' ) {
+                       // {{filepath: | option [| size] }}
+                       $isNowiki = true;
+                       $parsedWidthParam = $parser->parseWidthParam( $argB );
                } else {
-                       // {{filepath: [|option] }}
-                       $option = $argA;
+                       // {{filepath: [| size [|option]] }}
+                       $parsedWidthParam = $parser->parseWidthParam( $argA );
+                       $isNowiki = ($argB == 'nowiki');
                }
 
                if ( $file ) {
                        $url = $file->getFullUrl();
 
                        // If a size is requested...
-                       if ( is_integer( $size ) ) {
-                               $mto = $file->transform( array( 'width' => $size ) );
+                       if ( count( $parsedWidthParam ) ) {
+                               $mto = $file->transform( $parsedWidthParam );
                                // ... and we can
                                if ( $mto && !$mto->isError() ) {
                                        // ... change the URL to point to a thumbnail.
                                        $url = wfExpandUrl( $mto->getUrl(), PROTO_RELATIVE );
                                }
                        }
-                       if ( $option == 'nowiki' ) {
+                       if ( $isNowiki ) {
                                return array( $url, 'nowiki' => true );
                        }
                        return $url;
index 1638fb0..2917b4a 100644 (file)
  * @todo preferences, OutputPage
  * @ingroup Parser
  */
-class DateFormatter
-{
+class DateFormatter {
        var $mSource, $mTarget;
        var $monthNames = '', $rxDM, $rxMD, $rxDMY, $rxYDM, $rxMDY, $rxYMD;
 
        var $regexes, $pDays, $pMonths, $pYears;
        var $rules, $xMonths, $preferences;
 
+       protected $lang;
+
        const ALL = -1;
        const NONE = 0;
        const MDY = 1;
@@ -48,15 +49,15 @@ class DateFormatter
        const LAST = 8;
 
        /**
-        * @todo document
+        * @param $lang Language In which language to format the date
         */
-       function __construct() {
-               global $wgContLang;
+       function __construct( Language $lang ) {
+               $this->lang = $lang;
 
                $this->monthNames = $this->getMonthRegex();
                for ( $i=1; $i<=12; $i++ ) {
-                       $this->xMonths[$wgContLang->lc( $wgContLang->getMonthName( $i ) )] = $i;
-                       $this->xMonths[$wgContLang->lc( $wgContLang->getMonthAbbreviation( $i ) )] = $i;
+                       $this->xMonths[$this->lang->lc( $this->lang->getMonthName( $i ) )] = $i;
+                       $this->xMonths[$this->lang->lc( $this->lang->getMonthAbbreviation( $i ) )] = $i;
                }
 
                $this->regexTrail = '(?![a-z])/iu';
@@ -119,16 +120,20 @@ class DateFormatter
        /**
         * Get a DateFormatter object
         *
+        * @param $lang Language|string|null In which language to format the date
+        *              Defaults to the site content language
         * @return DateFormatter object
         */
-       public static function &getInstance() {
-               global $wgMemc;
+       public static function &getInstance( $lang = null ) {
+               global $wgMemc, $wgContLang;
                static $dateFormatter = false;
+               $lang = $lang ? wfGetLangObj( $lang ) : $wgContLang;
+               $key = wfMemcKey( 'dateformatter', $lang->getCode() );
                if ( !$dateFormatter ) {
-                       $dateFormatter = $wgMemc->get( wfMemcKey( 'dateformatter' ) );
+                       $dateFormatter = $wgMemc->get( $key );
                        if ( !$dateFormatter ) {
-                               $dateFormatter = new DateFormatter;
-                               $wgMemc->set( wfMemcKey( 'dateformatter' ), $dateFormatter, 3600 );
+                               $dateFormatter = new DateFormatter( $lang );
+                               $wgMemc->set( $key, $dateFormatter, 3600 );
                        }
                }
                return $dateFormatter;
@@ -141,10 +146,9 @@ class DateFormatter
         * @return mixed|String
         */
        function reformat( $preference, $text, $options = array('linked') ) {
-       
                $linked = in_array( 'linked', $options );
                $match_whole = in_array( 'match-whole', $options );
-               
+
                if ( isset( $this->preferences[$preference] ) ) {
                        $preference = $this->preferences[$preference];
                } else {
@@ -166,19 +170,19 @@ class DateFormatter
                                $this->mTarget = $i;
                        }
                        $regex = $this->regexes[$i];
-                       
+
                        // Horrible hack
                        if (!$linked) {
                                $regex = str_replace( array( '\[\[', '\]\]' ), '', $regex );
                        }
-                       
+
                        if ($match_whole) {
                                // Let's hope this works
                                $regex = preg_replace( '!^/!', '/^', $regex );
                                $regex = str_replace( $this->regexTrail,
                                        '$'.$this->regexTrail, $regex );
                        }
-                       
+
                        // Another horrible hack
                        $this->mLinked = $linked;
                        $text = preg_replace_callback( $regex, array( &$this, 'replace' ), $text );
@@ -204,10 +208,15 @@ class DateFormatter
                                $bits[$key[$p]] = $matches[$p+1];
                        }
                }
-               
+
                return $this->formatDate( $bits, $linked );
        }
-       
+
+       /**
+        * @param $bits array
+        * @param $link bool
+        * @return string
+        */
        function formatDate( $bits, $link = true ) {
                $format = $this->targets[$this->mTarget];
                
@@ -221,13 +230,13 @@ class DateFormatter
                # Construct new date
                $text = '';
                $fail = false;
-               
+
                // Pre-generate y/Y stuff because we need the year for the <span> title.
                if ( !isset( $bits['y'] ) && isset( $bits['Y'] ) )
                        $bits['y'] = $this->makeIsoYear( $bits['Y'] );
                if ( !isset( $bits['Y'] ) && isset( $bits['y'] ) )
                        $bits['Y'] = $this->makeNormalYear( $bits['y'] );
-                       
+
                if ( !isset( $bits['m'] ) ) {
                        $m = $this->makeIsoMonth( $bits['F'] );
                        if ( !$m || $m == '00' ) {
@@ -236,7 +245,7 @@ class DateFormatter
                                $bits['m'] = $m;
                        }
                }
-               
+
                if ( !isset($bits['d']) ) {
                        $bits['d'] = sprintf( '%02d', $bits['j'] );
                }
@@ -266,8 +275,7 @@ class DateFormatter
                                                if ( $m > 12 || $m < 1 ) {
                                                        $fail = true;
                                                } else {
-                                                       global $wgContLang;
-                                                       $text .= $wgContLang->getMonthName( $m );
+                                                       $text .= $this->lang->getMonthName( $m );
                                                }
                                        } else {
                                                $text .= ucfirst( $bits['F'] );
@@ -283,18 +291,18 @@ class DateFormatter
                if ( $fail ) {
                        $text = $matches[0];
                }
-               
+
                $isoBits = array();
                if ( isset($bits['y']) )
                        $isoBits[] = $bits['y'];
                $isoBits[] = $bits['m'];
                $isoBits[] = $bits['d'];
                $isoDate = implode( '-', $isoBits );
-               
+
                // Output is not strictly HTML (it's wikitext), but <span> is whitelisted.
                $text = Html::rawElement( 'span',
                                        array( 'class' => 'mw-formatted-date', 'title' => $isoDate ), $text );
-               
+
                return $text;
        }
 
@@ -303,11 +311,10 @@ class DateFormatter
         * @return string
         */
        function getMonthRegex() {
-               global $wgContLang;
                $names = array();
                for( $i = 1; $i <= 12; $i++ ) {
-                       $names[] = $wgContLang->getMonthName( $i );
-                       $names[] = $wgContLang->getMonthAbbreviation( $i );
+                       $names[] = $this->lang->getMonthName( $i );
+                       $names[] = $this->lang->getMonthAbbreviation( $i );
                }
                return implode( '|', $names );
        }
@@ -318,9 +325,7 @@ class DateFormatter
         * @return string ISO month name
         */
        function makeIsoMonth( $monthName ) {
-               global $wgContLang;
-
-               $n = $this->xMonths[$wgContLang->lc( $monthName )];
+               $n = $this->xMonths[$this->lang->lc( $monthName )];
                return sprintf( '%02d', $n );
        }
 
index 94af6a8..16f9cb2 100644 (file)
@@ -5042,27 +5042,22 @@ class Parser {
 
                                # Special case; width and height come in one variable together
                                if ( $type === 'handler' && $paramName === 'width' ) {
-                                       $m = array();
-                                       # (bug 13500) In both cases (width/height and width only),
-                                       # permit trailing "px" for backward compatibility.
-                                       if ( preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
-                                               $width = intval( $m[1] );
-                                               $height = intval( $m[2] );
+                                       $parsedWidthParam = $this->parseWidthParam( $value );
+                                       if( isset( $parsedWidthParam['width'] ) ) {
+                                               $width = $parsedWidthParam['width'];
                                                if ( $handler->validateParam( 'width', $width ) ) {
                                                        $params[$type]['width'] = $width;
                                                        $validated = true;
                                                }
+                                       }
+                                       if( isset( $parsedWidthParam['height'] ) ) {
+                                               $height = $parsedWidthParam['height'];
                                                if ( $handler->validateParam( 'height', $height ) ) {
                                                        $params[$type]['height'] = $height;
                                                        $validated = true;
                                                }
-                                       } elseif ( preg_match( '/^[0-9]*\s*(?:px)?\s*$/', $value ) ) {
-                                               $width = intval( $value );
-                                               if ( $handler->validateParam( 'width', $width ) ) {
-                                                       $params[$type]['width'] = $width;
-                                                       $validated = true;
-                                               }
-                                       } # else no validation -- bug 13436
+                                       }
+                                       # else no validation -- bug 13436
                                } else {
                                        if ( $type === 'handler' ) {
                                                # Validate handler parameter
@@ -5179,7 +5174,7 @@ class Parser {
 
                # Linker does the rest
                $time = isset( $options['time'] ) ? $options['time'] : false;
-               $ret = Linker::makeImageLink2( $title, $file, $params['frame'], $params['handler'],
+               $ret = Linker::makeImageLink( $this, $title, $file, $params['frame'], $params['handler'],
                        $time, $descQuery, $this->mOptions->getThumbSize() );
 
                # Give the handler a chance to modify the parser object
@@ -5781,4 +5776,32 @@ class Parser {
        function isValidHalfParsedText( $data ) {
                return isset( $data['version'] ) && $data['version'] == self::HALF_PARSED_VERSION;
        }
+
+       /**
+        * Parsed a width param of imagelink like 300px or 200x300px
+        *
+        * @param $value String
+        *
+        * @return array
+        * @since 1.20
+        */
+       public function parseWidthParam( $value ) {
+               $parsedWidthParam = array();
+               if( $value === '' ) {
+                       return $parsedWidthParam;
+               }
+               $m = array();
+               # (bug 13500) In both cases (width/height and width only),
+               # permit trailing "px" for backward compatibility.
+               if ( preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
+                       $width = intval( $m[1] );
+                       $height = intval( $m[2] );
+                       $parsedWidthParam['width'] = $width;
+                       $parsedWidthParam['height'] = $height;
+               } elseif ( preg_match( '/^[0-9]*\s*(?:px)?\s*$/', $value ) ) {
+                       $width = intval( $value );
+                       $parsedWidthParam['width'] = $width;
+               }
+               return $parsedWidthParam;
+       }
 }
index 3c43ed1..b6484ce 100644 (file)
@@ -144,6 +144,7 @@ class SpecialBlock extends FormSpecialPage {
                                'tabindex' => '2',
                                'options' => self::getSuggestedDurations(),
                                'other' => $this->msg( 'ipbother' )->text(),
+                               'default' => $this->msg( 'ipb-default-expiry' )->inContentLanguage()->text(),
                        ),
                        'Reason' => array(
                                'type' => 'selectandother',
@@ -271,7 +272,7 @@ class SpecialBlock extends FormSpecialPage {
                        }
 
                        if( $block->mExpiry == 'infinity' ) {
-                               $fields['Expiry']['default'] = 'indefinite';
+                               $fields['Expiry']['default'] = 'infinite';
                        } else {
                                $fields['Expiry']['default'] = wfTimestamp( TS_RFC2822, $block->mExpiry );
                        }
@@ -300,6 +301,8 @@ class SpecialBlock extends FormSpecialPage {
         * @return String
         */
        protected function preText(){
+               $this->getOutput()->addModules( 'mediawiki.special.block' );
+
                $text = $this->msg( 'blockiptext' )->parse();
 
                $otherBlockMessages = array();
index 6d2831c..1232e3f 100644 (file)
@@ -64,7 +64,8 @@ class CategoryPager extends AlphabeticPager {
                $from = str_replace( ' ', '_', $from );
                if( $from !== '' ) {
                        $from = Title::capitalize( $from, NS_CATEGORY );
-                       $this->mOffset = $from;
+                       $this->setOffset( $from );
+                       $this->setIncludeOffset( true );
                }
        }
 
index a1c6fd2..fc72610 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialChangeEmail extends UnlistedSpecialPage {
+
+       /**
+        * Users password
+        * @var string
+        */
+       protected $mPassword;
+
+       /**
+        * Users new email address
+        * @var string
+        */
+       protected $mNewEmail;
+
        public function __construct() {
                parent::__construct( 'ChangeEmail' );
        }
 
+       /**
+        * @return Bool
+        */
        function isListed() {
                global $wgAuth;
                return $wgAuth->allowPropChange( 'emailaddress' );
@@ -42,11 +58,13 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
        function execute( $par ) {
                global $wgAuth;
 
-               $this->checkReadOnly();
-
                $this->setHeaders();
                $this->outputHeader();
 
+               $out = $this->getOutput();
+               $out->disallowUserJs();
+               $out->addModules( 'mediawiki.special.changeemail' );
+
                if ( !$wgAuth->allowPropChange( 'emailaddress' ) ) {
                        $this->error( 'cannotchangeemail' );
                        return;
@@ -65,9 +83,7 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                        return;
                }
 
-               $out = $this->getOutput();
-               $out->disallowUserJs();
-               $out->addModules( 'mediawiki.special.changeemail' );
+               $this->checkReadOnly();
 
                $this->mPassword = $request->getVal( 'wpPassword' );
                $this->mNewEmail = $request->getVal( 'wpNewEmail' );
@@ -90,6 +106,9 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                $this->showForm();
        }
 
+       /**
+        * @param $type string
+        */
        protected function doReturnTo( $type = 'hard' ) {
                $titleObj = Title::newFromText( $this->getRequest()->getVal( 'returnto' ) );
                if ( !$titleObj instanceof Title ) {
@@ -102,11 +121,15 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                }
        }
 
+       /**
+        * @param $msg string
+        */
        protected function error( $msg ) {
                $this->getOutput()->wrapWikiMsg( "<p class='error'>\n$1\n</p>", $msg );
        }
 
        protected function showForm() {
+               global $wgRequirePasswordforEmailChange;
                $user = $this->getUser();
 
                $oldEmailText = $user->getEmail()
@@ -123,13 +146,20 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                        Html::hidden( 'token', $user->getEditToken() ) . "\n" .
                        Html::hidden( 'returnto', $this->getRequest()->getVal( 'returnto' ) ) . "\n" .
                        $this->msg( 'changeemail-text' )->parseAsBlock() . "\n" .
-                       Xml::openElement( 'table', array( 'id' => 'mw-changeemail-table' ) ) . "\n" .
-                       $this->pretty( array(
-                               array( 'wpName', 'username', 'text', $user->getName() ),
-                               array( 'wpOldEmail', 'changeemail-oldemail', 'text', $oldEmailText ),
-                               array( 'wpNewEmail', 'changeemail-newemail', 'input', $this->mNewEmail ),
-                               array( 'wpPassword', 'yourpassword', 'password', $this->mPassword ),
-                       ) ) . "\n" .
+                       Xml::openElement( 'table', array( 'id' => 'mw-changeemail-table' ) ) . "\n"
+               );
+               $items = array(
+                       array( 'wpName', 'username', 'text', $user->getName() ),
+                       array( 'wpOldEmail', 'changeemail-oldemail', 'text', $oldEmailText ),
+                       array( 'wpNewEmail', 'changeemail-newemail', 'input', $this->mNewEmail ),
+               );
+               if ( $wgRequirePasswordforEmailChange ) {
+                       $items[] = array( 'wpPassword', 'yourpassword', 'password', $this->mPassword );
+               }
+
+               $this->getOutput()->addHTML(
+                       $this->pretty( $items ) .
+                       "\n" .
                        "<tr>\n" .
                                "<td></td>\n" .
                                '<td class="mw-input">' .
@@ -143,6 +173,10 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                );
        }
 
+       /**
+        * @param $fields array
+        * @return string
+        */
        protected function pretty( $fields ) {
                $out = '';
                foreach ( $fields as $list ) {
@@ -173,6 +207,9 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
        }
 
        /**
+        * @param $user User
+        * @param $pass string
+        * @param $newaddr string
         * @return bool|string true or string on success, false on failure
         */
        protected function attemptChange( User $user, $pass, $newaddr ) {
@@ -187,7 +224,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                        return false;
                }
 
-               if ( !$user->checkTemporaryPassword( $pass ) && !$user->checkPassword( $pass ) ) {
+               global $wgRequirePasswordforEmailChange;
+               if ( $wgRequirePasswordforEmailChange && !$user->checkTemporaryPassword( $pass ) && !$user->checkPassword( $pass ) ) {
                        $this->error( 'wrongpassword' );
                        return false;
                }
index b30605b..41b3b25 100644 (file)
@@ -37,7 +37,9 @@ class SpecialChangePassword extends UnlistedSpecialPage {
        function execute( $par ) {
                global $wgAuth;
 
-               $this->checkReadOnly();
+               $this->setHeaders();
+               $this->outputHeader();
+               $this->getOutput()->disallowUserJs();
 
                $request = $this->getRequest();
                $this->mUserName = trim( $request->getVal( 'wpName' ) );
@@ -46,10 +48,6 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                $this->mRetype = $request->getVal( 'wpRetype' );
                $this->mDomain = $request->getVal( 'wpDomain' );
 
-               $this->setHeaders();
-               $this->outputHeader();
-               $this->getOutput()->disallowUserJs();
-
                $user = $this->getUser();
                if( !$request->wasPosted() && !$user->isLoggedIn() ) {
                        $this->error( $this->msg( 'resetpass-no-info' )->text() );
@@ -61,6 +59,8 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        return;
                }
 
+               $this->checkReadOnly();
+
                if( $request->wasPosted() && $user->matchEditToken( $request->getVal( 'token' ) ) ) {
                        try {
                                $this->mDomain = $wgAuth->getDomain();
index a5ab3e6..e7606c6 100644 (file)
@@ -32,21 +32,29 @@ class DisambiguationsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getPageHeader() {
                return $this->msg( 'disambiguations-text' )->parseAsBlock();
        }
 
-       function getQueryInfo() {
+       /**
+        * @return string|bool False on failure
+        */
+       function getQueryFromLinkBatch() {
                $dbr = wfGetDB( DB_SLAVE );
                $dMsgText = $this->msg( 'disambiguationspage' )->inContentLanguage()->text();
                $linkBatch = new LinkBatch;
 
                # If the text can be treated as a title, use it verbatim.
                # Otherwise, pull the titles from the links table
-               $dp = Title::newFromText($dMsgText);
+               $dp = Title::newFromText( $dMsgText );
                if( $dp ) {
                        if( $dp->getNamespace() != NS_TEMPLATE ) {
                                # @todo FIXME: We assume the disambiguation message is a template but
@@ -71,25 +79,38 @@ class DisambiguationsPage extends QueryPage {
                                }
                }
                $set = $linkBatch->constructSet( 'tl', $dbr );
+
                if( $set === false ) {
                        # We must always return a valid SQL query, but this way
                        # the DB will always quickly return an empty result
                        $set = 'FALSE';
-                       wfDebug("Mediawiki:disambiguationspage message does not link to any templates!\n");
+                       wfDebug( "Mediawiki:disambiguationspage message does not link to any templates!\n" );
                }
+               return $set;
+       }
 
+       function getQueryInfo() {
                // @todo FIXME: What are pagelinks and p2 doing here?
                return array (
-                       'tables' => array( 'templatelinks', 'p1' => 'page', 'pagelinks', 'p2' => 'page' ),
-                       'fields' => array( 'p1.page_namespace AS namespace',
-                                       'p1.page_title AS title',
-                                       'pl_from AS value' ),
-                       'conds' => array( $set,
-                                       'p1.page_id = tl_from',
-                                       'pl_namespace = p1.page_namespace',
-                                       'pl_title = p1.page_title',
-                                       'p2.page_id = pl_from',
-                                       'p2.page_namespace' => MWNamespace::getContentNamespaces() )
+                       'tables' => array(
+                               'templatelinks',
+                               'p1' => 'page',
+                               'pagelinks',
+                               'p2' => 'page'
+                       ),
+                       'fields' => array(
+                               'p1.page_namespace AS namespace',
+                               'p1.page_title AS title',
+                               'pl_from AS value'
+                       ),
+                       'conds' => array(
+                               $this->getQueryFromLinkBatch(),
+                               'p1.page_id = tl_from',
+                               'pl_namespace = p1.page_namespace',
+                               'pl_title = p1.page_title',
+                               'p2.page_id = pl_from',
+                               'p2.page_namespace' => MWNamespace::getContentNamespaces()
+                       )
                );
        }
 
@@ -126,10 +147,14 @@ class DisambiguationsPage extends QueryPage {
                $dp = Title::makeTitle( $result->namespace, $result->title );
 
                $from = Linker::link( $title );
-               $edit = Linker::link( $title, $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(),
-                       array(), array( 'redirect' => 'no', 'action' => 'edit' ) );
-               $arr  = $this->getLanguage()->getArrow();
-               $to   = Linker::link( $dp );
+               $edit = Linker::link(
+                       $title,
+                       $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(),
+                       array(),
+                       array( 'redirect' => 'no', 'action' => 'edit' )
+               );
+               $arr = $this->getLanguage()->getArrow();
+               $to = Linker::link( $dp );
 
                return "$from $edit $arr $to";
        }
index ebcca73..923a18d 100644 (file)
@@ -38,7 +38,7 @@ class UsersPager extends AlphabeticPager {
         * @param $context IContextSource
         * @param $par null|array
         */
-       function __construct( IContextSource $context = null, $par = null ) {
+       function __construct( IContextSource $context = null, $par = null, $including = null ) {
                if ( $context ) {
                        $this->setContext( $context );
                }
@@ -62,6 +62,7 @@ class UsersPager extends AlphabeticPager {
                }
                $this->editsOnly = $request->getBool( 'editsOnly' );
                $this->creationSort = $request->getBool( 'creationSort' );
+               $this->including = $including;
 
                $this->requestedUser = '';
                if ( $un != '' ) {
@@ -151,14 +152,13 @@ class UsersPager extends AlphabeticPager {
 
                $lang = $this->getLanguage();
 
+               $groups = '';
                $groups_list = self::getGroups( $row->user_id );
-               if( count( $groups_list ) > 0 ) {
+               if( !$this->including && count( $groups_list ) > 0 ) {
                        $list = array();
                        foreach( $groups_list as $group )
                                $list[] = self::buildGroupLink( $group, $userName );
                        $groups = $lang->commaList( $list );
-               } else {
-                       $groups = '';
                }
 
                $item = $lang->specialList( $ulinks, $groups );
@@ -166,16 +166,15 @@ class UsersPager extends AlphabeticPager {
                        $item = "<span class=\"deleted\">$item</span>";
                }
 
+               $edits = '';
                global $wgEdititis;
-               if ( $wgEdititis ) {
+               if ( !$this->including && $wgEdititis ) {
                        $edits = ' [' . $this->msg( 'usereditcount' )->numParams( $row->edits )->escaped() . ']';
-               } else {
-                       $edits = '';
                }
 
                $created = '';
                # Some rows may be NULL
-               if( $row->creation ) {
+               if( !$this->including && $row->creation ) {
                        $user = $this->getUser();
                        $d = $lang->userDate( $row->creation, $user );
                        $t = $lang->userTime( $row->creation, $user );
@@ -302,6 +301,7 @@ class SpecialListUsers extends SpecialPage {
         */
        public function __construct() {
                parent::__construct( 'Listusers' );
+               $this->mIncludable = true;
        }
 
        /**
@@ -313,12 +313,16 @@ class SpecialListUsers extends SpecialPage {
                $this->setHeaders();
                $this->outputHeader();
 
-               $up = new UsersPager( $this->getContext(), $par );
+               $up = new UsersPager( $this->getContext(), $par, $this->including() );
 
                # getBody() first to check, if empty
                $usersbody = $up->getBody();
 
-               $s = $up->getPageHeader();
+               $s = '';
+               if ( !$this->including() ) {
+                       $s = $up->getPageHeader();
+               }
+
                if( $usersbody ) {
                        $s .= $up->getNavigationBar();
                        $s .= Html::rawElement( 'ul', array(), $usersbody );
index 613e3b9..adda68c 100644 (file)
@@ -331,6 +331,12 @@ class LoginForm extends SpecialPage {
                        return false;
                }
 
+               # Include checks that will include GlobalBlocking (Bug 38333)
+               $permErrors = $this->getTitle()->getUserPermissionsErrors( 'createaccount', $currentUser, true );
+               if ( count( $permErrors ) ) {
+                               throw new PermissionsError( 'createaccount', $permErrors );
+               }
+
                $ip = $this->getRequest()->getIP();
                if ( $currentUser->isDnsBlacklisted( $ip, true /* check $wgProxyWhitelist */ ) ) {
                        $this->mainLoginForm( $this->msg( 'sorbs_create_account_reason' )->text() . ' ' . $this->msg( 'parentheses', $ip )->escaped() );
index 51c2d0f..a1cda0d 100644 (file)
@@ -166,6 +166,9 @@ class SpecialVersion extends SpecialPage {
                $svnInfo = self::getSvnInfo( $IP );
                if ( !$svnInfo && !$gitInfo ) {
                        $version = $wgVersion;
+               } elseif ( $gitInfo && $flags === 'nodb' ) {
+                       $shortSha1 = substr( $gitInfo, 0, 7 );
+                       $version = "$wgVersion ($shortSha1)";
                } elseif ( $gitInfo ) {
                        $shortSha1 = substr( $gitInfo, 0, 7 );
                        $shortSha1 = wfMessage( 'parentheses' )->params( $shortSha1 )->escaped();
index accef8c..74eedc3 100644 (file)
@@ -41,10 +41,10 @@ class WithoutInterwikiPage extends PageQueryPage {
        }
 
        function getPageHeader() {
-               global $wgScript, $wgMiserMode;
+               global $wgScript;
 
-               # Do not show useless input form if wiki is running in misermode
-               if( $wgMiserMode ) {
+               # Do not show useless input form if special page is cached
+               if( $this->isCached() ) {
                        return '';
                }
 
index c7e482e..a9e4519 100644 (file)
@@ -36,11 +36,12 @@ class UploadFromUrl extends UploadBase {
 
        /**
         * Checks if the user is allowed to use the upload-by-URL feature. If the
-        * user is allowed, pass on permissions checking to the parent.
+        * user is not allowed, return the name of the user right as a string. If
+        * the user is allowed, have the parent do further permissions checking.
         *
         * @param $user User
         *
-        * @return bool
+        * @return true|string
         */
        public static function isAllowed( $user ) {
                if ( !$user->isAllowed( 'upload_by_url' ) ) {
index 41680d1..243f61b 100644 (file)
@@ -9,7 +9,6 @@
 乙太網      以太网
 點陣圖      位图
 常式 例程
-游標 光标
 光碟 光盘
 光碟機      光驱
 全形 全角
index 922b7de..9a9534f 100644 (file)
 細如髮
 繫於一髮
 膚髮
+皮膚
 生華髮
 蒼髮
 被髮佯狂
 棺材裡
 注釋
 月面
+路面
 修杰楷
 修杰麟
 學裡
index 8389281..320cdf2 100644 (file)
@@ -2706,6 +2706,7 @@ class Language {
         *
         * @param $opposite Boolean Get the direction mark opposite to your language
         * @return string
+        * @since 1.20
         */
        function getDirMarkEntity( $opposite = false ) {
                if ( $opposite ) { return $this->isRTL() ? '&lrm;' : '&rlm;'; }
@@ -2996,6 +2997,7 @@ class Language {
         * Take a list of strings and build a locale-friendly comma-separated
         * list, using the local comma-separator message.
         * The last two strings are chained with an "and".
+        * NOTE: This function will only work with standard numeric array keys (0, 1, 2…)
         *
         * @param $l Array
         * @return string
@@ -3003,7 +3005,10 @@ class Language {
        function listToText( array $l ) {
                $s = '';
                $m = count( $l ) - 1;
-               if ( $m == 1 ) {
+               
+               if ( $m === 0 ) {
+                       return $l[0];
+               } elseif ( $m === 1 ) {
                        return $l[0] . $this->getMessageFromDB( 'and' ) . $this->getMessageFromDB( 'word-separator' ) . $l[1];
                } else {
                        for ( $i = $m; $i >= 0; $i-- ) {
@@ -3917,6 +3922,7 @@ class Language {
         * @param $format Bool|Int true to process using language functions, or TS_ constant
         *     to return the expiry in a given timestamp
         * @return String
+        * @since 1.18
         */
        public function formatExpiry( $expiry, $format = true ) {
                static $infinity, $infinityMsg;
index 18d1dbc..286a536 100644 (file)
  * @maintainers fdcn <fdcn64@gmail.com>, shinjiman <shinjiman@gmail.com>, PhiLiP <philip.npc@gmail.com>
  */
 class LanguageConverter {
+
+       /**
+        * languages supporting variants
+        * @since 1.20
+        * @var array
+        */
+       static public $languagesWithVariants = array(
+               'gan',
+               'iu',
+               'kk',
+               'ku',
+               'shi',
+               'sr',
+               'tg',
+               'uz',
+               'zh',
+       );
+
        var $mMainLanguageCode;
        var $mVariants, $mVariantFallbacks, $mVariantNames;
        var $mTablesLoaded = false;
index bc1809f..8f158a4 100644 (file)
        'tokipona' => 'Toki Pona',      # Toki Pona
        'tpi' => 'Tok Pisin',   # Tok Pisin
        'tr' => 'Türkçe',     # Turkish
+       'tru' => 'Ṫuroyo', # Turoyo
        'ts' => 'Xitsonga',             # Tsonga
        'tt' => 'татарча/tatarça',      # Tatar (multiple scripts - defaults to Cyrillic)
        'tt-cyrl' => 'татарча',  # Tatar (Cyrillic script) (default)
diff --git a/languages/classes/LanguageUz.php b/languages/classes/LanguageUz.php
new file mode 100644 (file)
index 0000000..6c0f1f6
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+/**
+ * Uzbek specific code.
+ *
+ * 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 Language
+ */
+
+require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+
+/**
+ * @ingroup Language
+ */
+class UzConverter extends LanguageConverter {
+       var $toLatin = array(
+               'а' => 'a', 'А' => 'A',
+               'б' => 'b', 'Б' => 'B',
+               'д' => 'd', 'Д' => 'D',
+               'е' => 'e', 'Е' => 'E',
+               'э' => 'e', 'Э' => 'E',
+               'в' => 'v', 'В' => 'V',
+               'х' => 'x', 'Х' => 'X',
+               'ғ' => 'gʻ', 'Ғ' => 'Gʻ',
+               'г' => 'g', 'Г' => 'G',
+               'ҳ' => 'h', 'Ҳ' => 'H',
+               'ж' => 'j', 'Ж' => 'J',
+               'з' => 'z', 'З' => 'Z',
+               'и' => 'i', 'И' => 'I',
+               'к' => 'k', 'К' => 'K',
+               'л' => 'l', 'Л' => 'L',
+               'м' => 'm', 'М' => 'M',
+               'н' => 'n', 'Н' => 'N',
+               'о' => 'o', 'О' => 'O',
+               'п' => 'p', 'П' => 'P',
+               'р' => 'r', 'Р' => 'R',
+               'с' => 's', 'С' => 'S',
+               'т' => 't', 'Т' => 'T',
+               'у' => 'u', 'У' => 'U',
+               'ф' => 'f', 'Ф' => 'F',
+               'ц' => 'c', 'Ц' => 'C',
+               'ў' => 'oʻ', 'Ў' => 'Oʻ',
+               'ц' => 'ts', 'Ц' => 'Ts', // note: at the beginning of a word and right after a consonant, only "s" is used
+               'қ' => 'q', 'Қ' => 'Q',
+               'ё' => 'yo', 'Ё' => 'Yo',
+               'ю' => 'yu', 'Ю' => 'Yu',
+               'ч' => 'ch', 'Ч' => 'Ch',
+               'ш' => 'sh', 'Ш' => 'Sh',
+               'й' => 'y', 'Й' => 'Y',
+               'я' => 'ya', 'Я' => 'Ya',
+               'ъ' => 'ʼ',
+       );
+
+       var $toCyrillic = array(
+               'a' => 'а', 'A' => 'А',
+               'b' => 'б', 'B' => 'Б',
+               'd' => 'д', 'D' => 'Д',
+               'e' => 'е', 'E' => 'Е',
+               ' e' => ' э', ' E' => ' Э', // "э" is used at the beginning of a word instead of "e"
+               'ye' => 'е', 'Ye' => 'Е',
+               'f' => 'ф', 'F' => 'Ф',
+               'g' => 'г', 'G' => 'Г',
+               'g‘' => 'ғ', 'G‘' => 'Ғ', 'gʻ' => 'ғ', 'Gʻ' => 'Ғ',
+               'h'  => 'ҳ', 'H' => 'Ҳ',
+               'i' => 'и', 'I' => 'И',
+               'k'  => 'к', 'K' => 'К',
+               'l' => 'л', 'L' => 'Л',
+               'm' => 'м', 'M' => 'М',
+               'n' => 'н', 'N' => 'Н',
+               'o' => 'о', 'O' => 'О',
+               'p' => 'п', 'P' => 'П',
+               'r' => 'р', 'R' => 'Р',
+               's' => 'с', 'S' => 'С',
+               't' => 'т', 'T' => 'Т',
+               'u' => 'у', 'U' => 'У',
+               'v' => 'в', 'V' => 'В',
+               'x' => 'х', 'X' => 'Х',
+               'z' => 'з', 'Z' => 'З',
+               'j' => 'ж', 'J' => 'Ж',
+               'o‘' => 'ў', 'O‘' => 'Ў', 'oʻ' => 'ў', 'Oʻ' => 'Ў',
+               'ts' => 'ц', 'Ts' => 'Ц',
+               'q' => 'қ', 'Q' => 'Қ',
+               'yo' => 'ё', 'Yo' => 'Ё',
+               'yu' => 'ю', 'Yu' => 'Ю',
+               'ch' => 'ч', 'Ch' => 'Ч',
+               'sh' => 'ш', 'Sh' => 'Ш',
+               'y' => 'й', 'Y' => 'Й',
+               'ya' => 'я', 'Ya' => 'Я',
+               'ʼ' => 'ъ',
+       );
+
+       function loadDefaultTables() {
+               $this->mTables = array(
+                       'uz-cyrl' => new ReplacementArray( $this->toCyrillic ),
+                       'uz-latn' => new ReplacementArray( $this->toLatin ),
+                       'uz'      => new ReplacementArray()
+               );
+       }
+
+}
+
+/**
+ * Uzbek
+ *
+ * @ingroup Language
+ */
+class LanguageUz extends Language {
+       function __construct() {
+               global $wgHooks;
+               parent::__construct();
+
+               $variants = array( 'uz', 'uz-latn', 'uz-cyrl' );
+               $variantfallbacks = array(
+                       'uz'    => 'uz-latn',
+                       'uz-cyrl' => 'uz',
+                       'uz-latn' => 'uz',
+               );
+
+               $this->mConverter = new UzConverter( $this, 'uz', $variants, $variantfallbacks );
+               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+       }
+}
index f3413ab..a532aa2 100644 (file)
@@ -19,7 +19,7 @@ $messages = array(
 'tog-hidepatrolled' => 'أخف التعديلات المراجعة في أحدث التغييرات',
 'tog-newpageshidepatrolled' => 'أخف الصفحات المراجعة من قائمة الصفحات الجديدة',
 'tog-extendwatchlist' => 'مدد قائمة المراقبة لعرض كل التغييرات، وليس الأحدث فقط',
-'tog-usenewrc' => 'استخدم أحدث التغييرات المحسنة (يتطلب جافاسكربت)',
+'tog-usenewrc' => ')جمّع التعديلات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت',
 'tog-numberheadings' => 'رقم العناوين تلقائيا',
 'tog-showtoolbar' => 'أظهر شريط التحرير (يتطلب جافاسكربت)',
 'tog-editondblclick' => 'عدل الصفحات عند الضغط المزدوج (جافاسكربت)',
@@ -27,17 +27,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)',
 'tog-showtoc' => 'اعرض فهرس المحتويات (للصفحات التي تحتوي على أكثر من 3 عناوين)',
 'tog-rememberpassword' => 'تذكر دخولي على هذا المتصفح (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)',
-'tog-watchcreations' => 'أضف الصفحات التي أنشئها إلى قائمة مراقبتي',
-'tog-watchdefault' => 'أضف الصفحات التي أعدلها إلى قائمة مراقبتي',
-'tog-watchmoves' => 'أضف الصفحات التي أنقلها إلى قائمة مراقبتي',
-'tog-watchdeletion' => 'أضف الصفحات التي أحذفها إلى قائمة مراقبتي',
+'tog-watchcreations' => 'أضف الصفحات التي أنشئها والملفات التي أرفعها إلى قائمة مراقبتي.',
+'tog-watchdefault' => 'أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي',
+'tog-watchmoves' => 'أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي',
+'tog-watchdeletion' => 'أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي',
 'tog-minordefault' => 'علم كل التعديلات طفيفة افتراضيا',
 'tog-previewontop' => 'أظهر العرض المسبق قبل صندوق التحرير',
 'tog-previewonfirst' => 'أظهر معاينة مع أول تعديل',
 'tog-nocache' => 'عطّل تخزين المتصفح للصفحة',
-'tog-enotifwatchlistpages' => 'أرسل لي رسالة إلكترونية عندما يتم تغيير صفحة في قائمة مراقبتي',
+'tog-enotifwatchlistpages' => 'أرسل لي رسالة إلكترونية عندما تُغيّر صفحة أو ملف في قائمة مراقبتي',
 'tog-enotifusertalkpages' => 'أرسل لي رسالة إلكترونية عندما تعدل صفحة نقاشي',
-'tog-enotifminoredits' => 'أرسل لي رسالة إلكترونية عن التعديلات الطفيفة للصفحات أيضا',
+'tog-enotifminoredits' => 'أرسل لي رسالة إلكترونية عن التعديلات الطفيفة للصفحات والملفات أيضا',
 'tog-enotifrevealaddr' => 'أظهر عنوان بريدي الإلكتروني في رسائل الإخطار',
 'tog-shownumberswatching' => 'اعرض عدد المستخدمين المراقبين',
 'tog-oldsig' => 'التوقيع الحالي:',
@@ -295,19 +295,54 @@ $1',
 'feed-unavailable' => 'التلقيمات غير متوفرة',
 'site-rss-feed' => '$1 تلقيم أر إس إس',
 'site-atom-feed' => '$1 تلقيم أتوم',
+'page-rss-feed' => '"$1" تلقيم أر إس إس',
 'page-atom-feed' => '$1 تلقيم أتوم',
 'red-link-title' => '$1 (الصفحة غير موجودة)',
+'sort-descending' => 'ترتيب تنازلي',
+'sort-ascending' => 'ترتيب تصاعدي',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => "ss'af7a",
 'nstab-user' => 'صفحة مستخدم',
+'nstab-media' => 'صفحة وسيط',
 'nstab-special' => 'صفحة خاصة',
 'nstab-project' => 'صفحة مشروع',
 'nstab-image' => 'milaf (Fichier)',
+'nstab-mediawiki' => 'رسالة',
 'nstab-template' => 'قالب',
+'nstab-help' => 'صفحة مساعدة',
 'nstab-category' => 'تصنيف',
 
+# Main script and global functions
+'nosuchaction' => 'لا يوجد فعل كهذا',
+'nosuchactiontext' => 'الفعل المحدد بواسطة المسار غير صحيح.
+ربما تكون قد كتبت المسار بطريقة غير صحيحة، أو اتبعت وصلة غير صحيحة.
+هذا ربما يشير أيضا إلى علة في {{SITENAME}}.',
+'nosuchspecialpage' => 'لا توجد صفحة خاصة بهذا الاسم',
+'nospecialpagetext' => '<strong>لقد طلبت صفحة خاصة غير صحيحة.</strong>
+
+قائمة بالصفحات الخاصة الصحيحة يمكن إيجادها في [[Special:SpecialPages|{{int:specialpages}}]].',
+
 # General errors
+'error' => 'ghalath',
+'databaseerror' => 'خطأ في قاعدة البيانات',
+'dberrortext' => 'حدث خطأ في صيغة استعلام قاعدة البيانات.
+ربما يكون هذا عيب بالبرنامج.
+آخر استعلام طلب من قاعدة البيانات كان:
+<blockquote><tt>$1</tt></blockquote>
+من داخل الدالة "<tt>$2</tt>".
+أرجعت قاعدة البيانات الخطأ "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'حدث خطأ في صيغة استعلام قاعدة البيانات.
+آخر استعلام طلب من قاعدة البيانات كان:
+"$1"
+من داخل الدالة "$2".
+أرجعت قاعدة البيانات الخطأ "$3: $4"',
+'laggedslavemode' => "'''تحذير:''' الصفحة قد لا تحتوي على أحدث التحديثات.",
+'readonly' => 'قاعدة البيانات مغلقة',
+'enterlockreason' => 'أدخل سببا للغلق، متضمنا تقديرا لوقت رفع الغلق',
+'readonlytext' => 'قاعدة البيانات مغلقة حاليا أمام المدخلات الجديدة والتعديلات الأخرى، السبب غالبا ما يكون الصيانة، وستعود قاعدة البيانات للوضع الطبيعي قريبا.
+
+الإداري الذي أغلق قاعدة البيانات أعطى التفسير التالي: $1',
 'missing-article' => 'لم تجد قاعدة البيانات النص الخاص بصفحة كان يجب أن تجدها، واسمها "$1" $2.
 
 عادة ما يحدث هذا عند اتباع فرق قديم أو وصلة تاريخ تؤدي إلى صفحة حذفت.
@@ -315,29 +350,239 @@ $1',
 إذا لم تكن هذه هي الحالة، فالمحتمل أنك وجدت خللا في البرنامج.
 من فضلك أبلغ أحد [[Special:ListUsers/sysop|الإداريين]]، وأعطه وصلة إلى مسار هذه الصفحة.',
 'missingarticle-rev' => '(رقم المراجعة: $1)',
+'missingarticle-diff' => '(فرق: $1، $2)',
+'readonly_lag' => 'تم إغلاق قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي',
+'internalerror' => 'خطأ داخلي',
+'internalerror_info' => 'خطأ داخلي: $1',
+'fileappenderrorread' => 'تعذرت قراءة "$1" أثناء الإضافة.',
+'fileappenderror' => 'تعذرت إضافة "$1" إلى "$2".',
+'filecopyerror' => 'لم يمكن نسخ الملف "$1" إلى "$2".',
+'filerenameerror' => 'لم يمكن إعادة تسمية الملف "$1" إلى "$2".',
+'filedeleteerror' => 'لم يمكن حذف الملف "$1".',
+'directorycreateerror' => 'لم يمكن إنشاء المجلد "$1".',
+'filenotfound' => 'لم يمكن إيجاد الملف "$1".',
+'fileexistserror' => 'غير قادر على الكتابة للملف "$1": الملف موجود',
+'unexpected' => 'قيمة غير متوقعة: "$1"="$2".',
+'formerror' => 'خطأ: لم يمكن تنفيذ الاستمارة',
+'badarticleerror' => 'لا يمكن إجراء هذا الفعل على هذه الصفحة.',
+'cannotdelete' => 'تعذر حذف الصفحة أو الملف "$1".
+ربما حذفها شحص آخر.',
+'cannotdelete-title' => 'لا يمكن حذف الصفحة "$1"',
+'delete-hook-aborted' => 'faskhan wa9fou flash.
+mahouwech mobarrar',
 'badtitle' => 'عنوان سيء',
 'badtitletext' => 'عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الوصلة بين اللغات أو بين المشاريع خاطئة.
 ومن الممكن وجود رموز لا تصلح للاستخدام في العناوين.',
+'perfcached' => 'البيانات التالية مختزنة وقد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مختزنة|مختزنتان|مختزنة}}.',
+'perfcachedts' => 'البيانات التالية مختزنة وكان آخر تحديث لها في $1. {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}} على الأكثر {{PLURAL:$4||مختزنة|مختزنتان|مختزنة}}.',
+'querypage-no-updates' => 'التحديثات لهذه الصفحة معطلة حاليا.
+البيانات هنا لن يتم تحديثها حاليا.',
+'wrong_wfQuery_params' => 'محددات خاطئة في wfQuery()<br />
+الدالة: $1<br />
+الاستعلام: $2',
 'viewsource' => 'اعرض المصدر',
+'viewsource-title' => 'إظهار مصدر $1',
+'actionthrottled' => 'لا يمكن عمل المزيد من هذا الفعل',
+'actionthrottledtext' => 'كإجراء ضد السبام، أنت ممنوع من إجراء هذا الفعل عدد كبير من المرات في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.
+من فضلك حاول مرة ثانية خلال عدة دقائق.',
+'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل.',
+'viewsourcetext' => 'يمكنك رؤية ونسخ مصدر هذه الصفحة:',
+'viewyourtext' => "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
+'protectedinterface' => 'هذه الصفحة توفر نص الواجهة للبرنامج، وهي مقفلة لمنع التخريب.',
+'editinginterface' => "'''تحذير:''' أنت تقوم بتحرير صفحة تستخدم في الواجهة النصية للبرنامج.
+سوف تؤثر التغييرات على هذه الصفحة على مظهر واجهة المستخدم للمستخدمين الآخرين.
+للترجمات، من فضلك استخدم مشروع ترجمة ميدياويكي [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
+'sqlhidden' => '(استعلام SQL مخفي)',
+'cascadeprotected' => 'تمت حماية هذه الصفحة من التعديل لأنها مدمجة في {{PLURAL:$1||الصفحة التالية، والتي|الصفحتين التاليتين، واللتين|الصفحات التالية، والتي}} تم استعمال خاصية "حماية الصفحات المدمجة" {{PLURAL:$1||بها|بهما|بها}}:
+$2',
+'namespaceprotected' => "لا تمتلك الصلاحية لتعديل الصفحات في نطاق '''$1'''.",
+'customcssprotected' => 'أنت لا تمتلك السماح لتعديل صفحة الCSS هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.',
+'customjsprotected' => 'أنت لا تمتلك السماح لتعديل صفحة الجافاسكريبت هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.',
+'ns-specialprotected' => 'الصفحات الخاصة لا يمكن تعديلها.',
+'titleprotected' => "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.
+السبب المعطى هو ''$2''.",
+'filereadonlyerror' => 'تعذر تعديل الملف "$1" لأن مستودع الملف "$2" في وضع القراءة فقط. 
+
+المدير الذي قام بغلقه قدم التفسير التالي: "$3".',
+'invalidtitle-knownnamespace' => 'عنوان غير صالح في النطاق «$2» مع نص «$3»',
+'invalidtitle-unknownnamespace' => 'عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»',
+'exception-nologin' => 'غير مسجل الدخول',
+'exception-nologin-text' => "hedhi ess'af7a wa 2ella el action te7tej mennek bech etloginni il hedha el wiki",
+
+# Virus scanner
+'virus-badscanner' => "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
+'virus-scanfailed' => 'فشل المسح (كود $1)',
+'virus-unknownscanner' => 'مضاد فيروسات غير معروف:',
 
 # Login and logout pages
+'logouttext' => "'''أنت الآن غير مسجل الدخول.'''
+
+تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو [[Special:UserLogin|الدخول مرة أخرى]] بنفس الاسم أو باسم آخر.
+من الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
+'welcomecreation' => '== مرحبا، $1! ==
+تم إنشاء حسابك.
+لا تنس أن تغير [[Special:Preferences|تفضيلاتك في {{SITENAME}}]].',
 'yourname' => 'اسم المستخدم:',
 'yourpassword' => 'كلمة السر:',
 'yourpasswordagain' => 'أعد كتابة كلمة السر:',
 'remembermypassword' => 'تذكر دخولي على هذا الحاسوب (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)',
+'securelogin-stick-https' => 'ابقَ في اتصال HTTPS بعد الدخول.',
+'yourdomainname' => 'نطاقك:',
+'externaldberror' => 'هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.',
 'login' => 'ادخل',
 'nav-login-createaccount' => 'ادخل / أنشئ حسابا',
 'loginprompt' => 'يجب أن تكون الكوكيز لديك مفعلة لتسجل الدخول إلى {{SITENAME}}.',
 'userlogin' => 'ادخل / أنشئ حسابا',
+'userloginnocreate' => 'دخول',
+'logout' => 'اخرج',
 'userlogout' => 'خروج',
+'notloggedin' => 'غير مسجل الدخول',
 'nologin' => "ألا تمتلك حسابا؟ '''$1'''.",
 'nologinlink' => 'أنشئ حسابا',
 'createaccount' => 'أنشئ حسابا',
 'gotaccount' => "تمتلك حسابا بالفعل؟ '''$1'''.",
 'gotaccountlink' => 'ادخل',
 'userlogin-resetlink' => 'أنسيت بيانات الولوج؟',
+'createaccountmail' => 'بواسطة البريد الإلكتروني',
+'createaccountreason' => 'السبب:',
+'badretype' => 'كلمات السر التي أدخلتها لا تتطابق.',
+'userexists' => 'اسم المستخدم الذي تم إدخاله مستعمل بالفعل.
+الرجاء اختيار اسم مختلف.',
+'loginerror' => 'خطأ في الدخول',
+'createaccounterror' => 'تعذر إنشاء حساب المستخدم: $1',
+'nocookiesnew' => 'تم إنشاء حساب المستخدم، ولكنك لست مسجل الدخول بعد.
+يستخدم {{SITENAME}} كوكيز لتسجيل الدخول.
+لديك الكوكيز معطلة.
+من فضلك فعلها، ثم سجل الدخول باسم المستخدم وكلمة السر الجديدين.',
+'nocookieslogin' => 'يستخدم {{SITENAME}} الكوكيز لتسجيل الدخول.
+الكوكيز معطلة لديك.
+من فضلك فعلها ثم حاول مرة أخرى.',
+'nocookiesfornew' => 'لم يتم إنشاء حساب المستخدم، لأننا لم نستطع تأكيد مصدره. 
+تأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.',
+'noname' => 'لم تحدد اسم مستخدم صحيح.',
+'loginsuccesstitle' => 'تم الدخول بشكل صحيح',
+'loginsuccess' => "'''لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم \"\$1\".'''",
+'nosuchuser' => 'لا يوجد مستخدم بالاسم "$1".
+أسماء المستخدمين حساسة لحالة الحروف.
+تأكد من إملاء الاسم، أو [[Special:UserLogin/signup|قم بإنشاء حساب جديد]].',
+'nosuchusershort' => 'لا يوجد مستخدم باسم $1".
+تأكد من إملاء الاسم.',
+'nouserspecified' => 'يجب عليك تحديد اسم مستخدم.',
+'login-userblocked' => 'هذا المستخدم ممنوع. لا يسمح بالولوج.',
+'wrongpassword' => 'كلمة السر التي أدخلتها غير صحيحة.
+من فضلك حاول مرة أخرى.',
+'wrongpasswordempty' => 'كلمة السر المدخلة كانت فارغة.
+من فضلك حاول مرة أخرى.',
+'passwordtooshort' => 'يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.',
+'password-name-match' => 'يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.',
+'password-login-forbidden' => 'تم منع استخدام اسم المستخدم هذا وكلمة السر.',
 'mailmypassword' => 'أرسل لي كلمة سر جديدة',
+'passwordremindertitle' => 'كلمة سر مؤقتة جديدة ل{{SITENAME}}',
+'passwordremindertext' => 'لقد طلب شخص ما (غالبا أنت، من عنوان الآيبي $1) كلمة سر جديدة ل{{SITENAME}} ($4).
+أنشئت كلمة سر مؤقتة للمستخدم "$2" وجعلت "$3".
+لو أن هذا ما تريده، فعليك أن تقوم بتسجيل الدخول واختيار كلمة سر جديدة الآن.
+سوف تنتهي مدة صلاحية كلمة سرك المؤقتة في غضون {{PLURAL:$5|أقل من يوم واحد|يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}.
+
+إذا كان الذي قام بهذا الطلب شخص آخر أو إذا تذكرت كلمة سرك ولا ترغب  في تغييرها، فبإمكانك أن تتجاهل هذه الرسالة وأن تستمر في استخدام كلمة سرك القديمة.',
+'noemail' => 'لا يوجد عنوان بريد إلكتروني مسجل للمستخدم "$1".',
+'noemailcreate' => 'عليك تقديم عنوان بريد إلكتروني صالح',
+'passwordsent' => 'تم إرسال كلمة سر جديدة إلى عنوان البريد الإلكتروني المسجل للمستخدم "$1".
+من فضلك حاول تسجيل الدخول مرة ثانية بعد استلامها.',
+'blocked-mailpassword' => 'تم منع عنوان الأيبي الخاص بك من التحرير، ولمنع التخريب لا يمكنك أن تستخدم خاصية استرجاع كلمة السر.',
+'eauthentsent' => 'تم إرسال رسالة تأكيد إلكترونية إلى العنوان المسمى.
+حتى ترسل أي رسالة أخرى لذلك الحساب عليك أن تتبع التعليمات الواردة في الرسالة لتأكيد أن هذا الحساب هو لك بالفعل.',
+'throttled-mailpassword' => 'تم بالفعل إرسال تذكير بكلمة السر، في ال{{PLURAL:$1||ساعة الماضية|ساعتين الماضيتين|$1 ساعات الماضية|$1 ساعة الماضية}}.
+لمنع التخريب، سيتم إرسال تذكير واحد كل {{PLURAL:$1||ساعة|ساعتين|$1 ساعات|$1 ساعة}}.',
+'mailerror' => 'خطأ أثناء إرسال البريد: $1',
+'acct_creation_throttle_hit' => 'أنشأ زوار هذه الويكي باستخدام عنوان آيبيك {{PLURAL:$1||حسابا واحدا|حسابين|$1 حسابات|$1 حسابا|$1 حساب}} في اليوم الماضي، وهو الحد الأقصى المسموح به في هذه الفترة الزمنية.
+وكنتيجة لذلك، لن يتمكن الزوار الذين يستخدمون عنوان الأيبي هذا من إنشاء أي حسابات أخرى حاليا.',
+'emailauthenticated' => 'تم تأكيد بريدك الإلكتروني في $2 الساعة $3.',
+'emailnotauthenticated' => 'لم يتم التحقق من بريدك الإلكتروني.
+لن يتم إرسال رسائل لأي من الميزات التالية.',
+'noemailprefs' => 'حدد عنوان بريد إلكتروني في تفضيلاتك لهذه الخصائص لتعمل.',
+'emailconfirmlink' => 'أكد عنوان بريدك الإلكتروني',
+'invalidemailaddress' => 'لا يمكن قبول عنوان البريد الإلكتروني حيث تبدو صيغته خاطئة.
+ضع عنوانا مضبوطا أو أفرغ هذا الحقل.',
+'cannotchangeemail' => 'تغيير عنوان البريد الإلكتروني لهذا الحساب غير ممكن على هذا الويكي',
+'emaildisabled' => 'لا يمكن إرسال رسائل البريد الإلكتروني من هذا الموقع.',
+'accountcreated' => 'تم إنشاء الحساب',
+'accountcreatedtext' => 'تم إنشاء الحساب الخاص ب$1.',
+'createaccount-title' => 'إنشاء حساب في {{SITENAME}}',
+'createaccount-text' => 'شخص ما أنشأ حسابا لعنوان بريدك الإلكتروني في {{SITENAME}} ($4) بالاسم "$2"، كلمة السر "$3".
+ينبغي عليك تسجيل الدخول وتغيير كلمة السر الخاصة بك الآن.
+
+يمكنك تجاهل هذه الرسالة، لو تم إنشاء هذا الحساب بالخطأ.',
+'usernamehasherror' => 'لا يمكن أن يحتوي اسم المستخدم على محارف هاش',
+'login-throttled' => 'لقد قمت بمحاولات دخول كثيرة جدا مؤخرا.
+من فضلك انتظر قبل المحاولة مرة أخرى.',
+'login-abort-generic' => 'لم ينجح ولوجك - إجهاض',
 'loginlanguagelabel' => 'اللغة: $1',
+'suspicious-userlogout' => 'رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.',
+
+# E-mail sending
+'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
+'user-mail-no-addy' => 'لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.',
+
+# Change password dialog
+'resetpass' => 'تغيير كلمة السر',
+'resetpass_announce' => 'تم تسجيل دخولك بكلمة سر مؤقتة.
+للدخول بشكل نهائي، يجب عليك ضبط كلمة سر جديدة هنا:',
+'resetpass_header' => 'غير كلمة سر الحساب',
+'oldpassword' => 'كلمة السر القديمة:',
+'newpassword' => 'كلمة السر الجديدة:',
+'retypenew' => 'أعد كتابة كلمة السر الجديدة:',
+'resetpass_submit' => 'ضبط كلمة السر والدخول',
+'resetpass_success' => 'تم تغيير كلمة السر الخاصة بك بنجاح! يتم تسجيل دخولك الآن...',
+'resetpass_forbidden' => 'كلمات السر لا يمكن تغييرها',
+'resetpass-no-info' => 'يجب أن تكون مسجل الدخول للوصول إلى هذه الصفحة مباشرة.',
+'resetpass-submit-loggedin' => 'تغيير كلمة السر',
+'resetpass-submit-cancel' => 'ifsa5',
+'resetpass-wrong-oldpass' => 'كلمة سر حالية أو مؤقتة غير صحيحة.
+ربما تكون غيرت كلمة السر الخاصة بك بنجاح أو طلبت كلمة سر مؤقتة جديدة.',
+'resetpass-temp-password' => 'كلمة سر مؤقتة:',
+
+# Special:PasswordReset
+'passwordreset' => 'إعادة ضبط كلمة السر',
+'passwordreset-text' => 'أكمل هذا النموذج لتتلقى بريدا إلكترونيا يذكر بتفاصيل حسابك.',
+'passwordreset-legend' => 'إعادة تعيين كلمة السر',
+'passwordreset-disabled' => 'عُطّلت إعادة تعيين كلمة السر على هذه الويكي.',
+'passwordreset-pretext' => '{{PLURAL:$1||أدخل أحد أجزاء البيانات أدناه}}',
+'passwordreset-username' => 'اسم المستخدم:',
+'passwordreset-domain' => 'النطاق:',
+'passwordreset-capture' => 'أأعرض البريد الإلكتروني الناتج؟',
+'passwordreset-capture-help' => 'إذا علّمت هذا الصندوق فسيعرض لك البريد الإلكتروني (الذي يحتوي كلمة سر مؤقتة) وسيرسل أيضا للمستخدم.',
+'passwordreset-email' => 'عنوان البريد الإلكتروني:',
+'passwordreset-emailtitle' => 'تفاصيل حساب {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'احد ما (قد يكون انت$1)طلب مذكرة تفاصيل الحساب ل{{SITENAME}} ($4).المستخدم الاتي {{PLURAL:$3|الحساب هو|الحسابات هي}} قد قرن بهذا العنوان :
+
+$2
+
+{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}
+من الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .
+إذا قام شخص آخر بهذا الطلب، أو إذا  تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام  كلمة المرورالقديمة.',
+'passwordreset-emailtext-user' => 'احد ما (قد يكون انت$1)طلب مذكرة تفاصيل الحساب ل{{SITENAME}} ($4).المستخدم الاتي {{PLURAL:$3|الحساب هو|الحسابات هي}} قد قرن بهذا العنوان :
+
+$2
+
+{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}
+من الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .
+إذا قام شخص آخر بهذا الطلب، أو إذا  تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام  كلمة المرورالقديمة.',
+'passwordreset-emailelement' => 'اسم المستخدم: $1
+كلمة السر المؤقتة: $2',
+'passwordreset-emailsent' => 'أرسل بريد إلكتروني تذكيري',
+'passwordreset-emailsent-capture' => 'أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.',
+'passwordreset-emailerror-capture' => 'ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1',
+
+# Special:ChangeEmail
+'changeemail' => 'تغيير عنوان البريد الإلكتروني',
+'changeemail-header' => 'تغيير عنوان البريد الإلكتروني للحساب',
+'changeemail-text' => 'أكمل هذا النموذج لتغيير عنوان البريد الإلكتروني. سوف تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.',
+'changeemail-no-info' => 'يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.',
+'changeemail-oldemail' => 'عنوان البريد الإلكتروني الحالي:',
+'changeemail-newemail' => 'عنوان البريد الإلكتروني الجديد:',
+'changeemail-none' => '(لا شيء)',
+'changeemail-submit' => 'غيّر البريد الإلكتروني',
+'changeemail-cancel' => 'ifsa5',
 
 # Edit page toolbar
 'bold_sample' => 'نص غليظ',
@@ -359,31 +604,174 @@ $1',
 
 # Edit pages
 'summary' => 'ملخص:',
+'subject' => 'موضوع/عنوان:',
 'minoredit' => 'هذا تعديل طفيف',
 'watchthis' => 'راقب هذه الصفحة',
 'savearticle' => 'احفظ الصفحة',
 'preview' => 'معاينة',
 'showpreview' => 'أظهر معاينة',
+'showlivepreview' => 'عرض مباشر',
 'showdiff' => 'أظهر التغييرات',
 'anoneditwarning' => "'''تحذير:''' لم تقم بالدخول.
 سيسجل عنوان الآيبي خاصتك في تاريخ هذه الصفحة.",
+'anonpreviewwarning' => "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
+'missingsummary' => "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل.
+إذا قمت بضغط حفظ الصفحة مرة أخرى، فيتم حفظ تعديلك بدون ملخص.",
+'missingcommenttext' => 'من فضلك أدخل تعليقا في الأسفل.',
+'missingcommentheader' => "'''تنبيه:''' لم تقم بوضع موضوع/عنوان لهذا التعليق.
+إذا قمت بالضغط على \"{{int:savearticle}}\" مجددا، سيتم حفظ تعليقك بدون عنوان.",
+'summary-preview' => 'معاينة الملخص:',
+'subject-preview' => 'معاينة للموضوع/العنوان:',
+'blockedtitle' => 'المستخدم ممنوع',
+'blockedtext' => "'''اسم المستخدم أو عنوان الأيبي الخاص بك تم منعه.'''
+
+قام بالمنع $1.
+سبب المنع هو: ''$2''.
+
+* بداية المنع: $8
+* انتهاء المنع: $6
+* الممنوع المقصود: $7
+
+يمكنك الاتصال ب$1 أو مع أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] للنقاش حول المنع.
+لا يمكنك استخدام خاصية 'مراسلة هذا المستخدم' إلا إذا كنت قد وضعت عنوان بريدي صحيح في [[Special:Preferences|تفضيلات حسابك]] ولم يتم منعك من استخدامها.
+عنوان الأيبي الخاص بك حاليا هو $3، ورقم المنع هو #$5.
+من فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
+'autoblockedtext' => 'تم منع عنوان آيبيك تلقائيا لأن مستخدما آخرا ممنوعا بواسطة $1 استخدمه.
+السبب الممنوح هو التالي:
+
+:\'\'$2\'\'
+
+* بداية المنع: $8
+* انتهاء المنع: $6
+* الممنوع المقصود: $7
+
+يمكنك أن تتصل ب $1 أو أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] الآخرين لمناقشة المنع.
+
+لاحظ أنه لا يمكنك استخدام خاصية "إرسال رسالة لهذا المستخدم" إلا لو كان لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]] ولم يتم منعك من استخدامه.
+
+عنوان آيبيك الحالي $3، ورقم المنع #$5.
+من فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.',
+'blockednoreason' => 'لا سبب معطى',
+'whitelistedittext' => 'يجب عليك $1 لتتمكن من تعديل الصفحات.',
+'confirmedittext' => 'يجب عليك تأكيد بريدك الإلكتروني قبل تعديل الصفحات.
+من فضلك اكتب وأكد بريدك الإلكتروني من خلال [[Special:Preferences|تفضيلاتك]].',
+'nosuchsectiontitle' => 'تعذر إيجاد القسم',
+'nosuchsectiontext' => 'لقد حاولت تحرير قسم غير موجود.
+ربما يكون قد تم نقله أو حذفه أثناء مشاهدتك للصفحة.',
+'loginreqtitle' => 'تسجيل الدخول مطلوب',
+'loginreqlink' => 'الولوج',
+'loginreqpagetext' => 'يجب عليك $1 لتشاهد صفحات أخرى.',
+'accmailtitle' => 'تم إرسال كلمة السر.',
+'accmailtext' => "كلمة سر مولدة عشوائيا ل [[User talk:$1|$1]] تم إرسالها إلى $2.
+
+كلمة السر لهذا الحساب الجديد يمكن تغييرها في صفحة ''[[Special:ChangePassword|تغيير كلمة السر]]'' عند تسجيل الدخول.",
 'newarticle' => '(جديد)',
 'newarticletext' => "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.
 لإنشاء هذه الصفحة ابدأ الكتابة في الصندوق بالأسفل (انظر في [[{{MediaWiki:Helppage}}|صفحة المساعدة]] للمزيد من المعلومات).
 إذا كانت زيارتك لهذه الصفحة بالخطأ، اضغط على زر ''رجوع'' في متصفح الإنترنت لديك.",
+'anontalkpagetext' => "----''هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب.
+لذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.
+مثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.
+لو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:UserLogin/signup|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.''",
 'noarticletext' => 'لا يوجد حاليا أي نص في هذه الصفحة.
 يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى،
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات المتعلقة]،
 أو [{{fullurl:{{FULLPAGENAME}}|action=edit}} تعديل هذه الصفحة]</span>.',
 'noarticletext-nopermission' => 'لا يوجد حاليا أي نص في هذه الصفحة.يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى,أو <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} بحث السجلات المتصلة]</span>.',
-'previewnote' => "'''تذكر أن هذه مجرد معاينة للصفحة؛''''
-لم تحفظ تغييراتك إلى الآن",
+'userpage-userdoesnotexist' => 'حساب المستخدم "<nowiki>$1</nowiki>" غير مسجل.
+من فضلك تأكد أنك تريد إنشاء/تعديل هذه الصفحة.',
+'userpage-userdoesnotexist-view' => 'حساب المستخدم "$1" غير مسجل.',
+'blocked-notice-logextract' => 'هذا المستخدم ممنوع حاليا.
+آخر مدخلة في سجل المنع موفرة بالأسفل كمرجع:',
+'clearyourcache' => "'''ملاحظة:''' بعد الحفظ, أنت ربما تحتاج إلى إفراغ كاش متصفحك لرؤية التغييرات.
+* '''فيرفكس / سفاري:''' اضغط ''Shift'' أثناء ضغط ''Reload'', أو اضغط أيا من ''Ctrl-F5'' أو ''Ctrl-R'' (''⌘-R'' على ماك)
+* '''جوجل كروم:''' اضغط ''Ctrl-Shift-R'' (''⌘-Shift-R'' على ماك)
+* '''إنترنت إكسبلورر:''' اضغط ''Ctrl'' أثناء ضغط ''Refresh''، أو اضغط ''Ctrl-F5''
+* '''كنكرر:''' اضغط ''Reload'' أو اضغط ''F5''
+* '''أوبرا:''' أفرغ الكاش في ''Tools → Preferences''",
+'usercssyoucanpreview' => "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة CSS الجديد قبل حفظ الصفحة.",
+'userjsyoucanpreview' => "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة جافاسكربت الجديدة قبل حفظ الصفحة.",
+'usercsspreview' => "'''تذكر أنك تقوم بعرض الأنماط المتراصة (CSS) الخاصة بك فقط
+لم يتم حفظها بعد!'''",
+'userjspreview' => "'''تذكر أنك فقط تجرب/تعاين جافاسكربت.'''
+'''لم يتم الحفظ بعد!'''",
+'sitecsspreview' => "''' تذكر أنك فقط في وضع المعاينة لهذا CSS ''' 
+''' ولم يتم حفظ الصفحة بعد! '''",
+'sitejspreview' => "''' تذكر أنك فقط في وضع المعاينة لكود JavaScript هذا''' 
+''' ولم يتم حفظه بعد! '''",
+'userinvalidcssjstitle' => "'''تحذير:''' لا توجد واجهة  \"\$1\".
+تذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان ، كمثال {{ns:user}}:Foo/vector.css و ليس {{ns:user}}:Foo/Vector.css.",
+'updated' => '(محدثة)',
+'note' => "'''ملاحظة:'''",
+'previewnote' => "'''تذكر أن هذه مجرد معاينة أولية.'''
+لم تحفظ تغييراتك إلى الآن!",
+'continue-editing' => 'أكمل التحرير',
+'previewconflict' => 'هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.',
+'session_fail_preview' => "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.
+من فضلك حاول مرة أخرى.
+في حال استمرار المشكلة حاول أن تقوم [[Special:UserLogout|بالخروج]] ومن ثم الولوج مرة أخرى.'''",
+'session_fail_preview_html' => "'''عذرا! لم نستطع معالجة تعديلك بسبب فقدان بيانات الجلسة.'''
+
+''لأن {{SITENAME}} بها HTML الخام مفعلة، العرض المسبق مخفي كاحتياط ضد هجمات الجافا سكريبت.''
+
+'''إذا كانت هذه محاولة تعديل صادقة، من فضلك حاول مرة أخرى.
+إذا كانت مازالت لا تعمل، حاول [[Special:UserLogout|تسجيل الخروج]] ثم تسجيل الدخول مجددا.'''",
+'token_suffix_mismatch' => "'''تعديلك تم رفضه لأن عميلك أخطأ في علامات الترقيم
+في نص التعديل. تم رفض التعديل لمنع فساد نص المقالة.
+هذا يحدث أحيانا عندما تستخدم خدمة بروكسي مجهول معيبة مبنية على الوب.'''",
+'edit_form_incomplete' => "'''بعض أجزاء من نموذج التعديل لم تصل إلى الخادم؛ تأكد من أن تعديلاتك لم تمس وحاول مجددا.'''",
 'editing' => 'تحرير $1',
+'creating' => 'إنشاء «$1»',
 'editingsection' => 'تحرير $1 (قسم)',
+'editingcomment' => 'تعديل $1 (قسم جديد)',
+'editconflict' => 'تضارب في التحرير: $1',
+'explainconflict' => "لقد عدل شخص آخر هذه الصفحة بعد أن بدأت أنت بتحريرها.
+صندوق النصوص العلوي يحتوي على النص الموجود حاليا في الصفحة.
+والتغييرات التي قمت أنت بها موجودة في الصندوق في أسفل الصفحة.
+يجب أن تقوم بدمج تغييراتك في النص الموجود حاليا.
+'''فقط''' ما هو موجود في الصندوق العلوي هو ما سيتم حفظه عند الضغط على زر \"حفظ الصفحة\".",
+'yourtext' => 'نصك',
+'storedversion' => 'النسخة المخزنة',
+'nonunicodebrowser' => "'''تحذير: متصفحك لا يتوافق مع الترميز الموحد.
+تمت معالجة هذا لكي تتمكن من تحرير الصفحات بأمان: الحروف التي ليست ASCII سوف تظهر في صندوق التحرير كأكواد سداسي عشرية.'''",
+'editingold' => "''' تحذير: أنت تقوم الآن بتحرير نسخة قديمة من هذه الصفحة.
+إذا قمت بحفظها، ستفقد كافة التغييرات التي حدثت بعد هذه النسخة. '''",
+'yourdiff' => 'الفروق',
+'copyrightwarning' => "من فضلك لاحظ أن جميع المساهمات ل {{SITENAME}} خاضعة وصادرة تحت ترخيص $2 (انظر في $1 للمزيد من التفاصيل)
+إذا لم ترد أن تخضع كتابتك للتعديل والتوزيع الحر، لا تضعها هنا<br />.
+كما أنك تتعهد بأنك قمت بكتابة ما هو موجود بنفسك، أو قمت بنسخها من مصدر يخضع ضمن الملكية العامة، أو مصدر حر آخر.
+'''لا ترسل أي عمل ذي حقوق محفوظة بدون الإذن من صاحب الحق'''.",
+'copyrightwarning2' => "من فضلك لاحظ أن جميع المساهمات في {{SITENAME}} يمكن أن تعدل أو تتغير أو تزال من قبل المساهمين الآخرين.
+إذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل، لا تضعها هنا.<br />
+أنت تقر أيضا أنك كتبت هذا بنفسك، أو نسخته من مصدر يخضع للملكية العامة، أو مصدر حر آخر (انظر $1 للتفاصيل).
+'''لا تضف أي عمل ذي حقوق محفوظة بدون تصريح!'''",
+'longpageerror' => "'''خطأ: النص الذي قمت بإدخاله {{PLURAL:$1|واحد كيلوبايت|$1 كيلوبيات}} أطول, وهو أطول من الحد الأقصى {{PLURAL:$2|واحد كيلوبايت|$2 كيلوبايت}}.'''
+و يتعذر حفظه.",
+'readonlywarning' => "'''تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا.
+إذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.'''
+
+الإداري الذي أغلقها أعطى هذا التفسير: $1",
+'protectedpagewarning' => "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''
+آخر مدخلة سجل موفرة بالأسفل كمرجع:",
+'semiprotectedpagewarning' => "'''ملاحظة:''' تمت حماية هذه الصفحة بحيث يمكن للمستخدمين المسجلين فقط تعديلها.
+آخر مدخلة سجل موفرة بالأسفل كمرجع:",
+'cascadeprotectedwarning' => "'''تحذير:''' تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:\$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
+'titleprotectedwarning' => "'''تحذير:  هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''
+آخر مدخلة سجل موفرة بالأسفل كمرجع:",
 'templatesused' => '{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:',
+'templatesusedpreview' => '{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:',
+'templatesusedsection' => '{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذا القسم:',
 'template-protected' => '(حماية كاملة)',
 'template-semiprotected' => '(حماية جزئية)',
 'hiddencategories' => '{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:',
+'nocreatetitle' => 'تم تحديد إنشاء الصفحات',
+'nocreatetext' => 'قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.
+يمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].',
+'nocreate-loggedin' => 'أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.',
+'sectioneditnotsupported-title' => 'تعديل الأقسام غير مدعوم',
+'sectioneditnotsupported-text' => 'تعديل الأقسام غير مدعوم في هذه الصفحة',
+'permissionserrors' => 'أخطاء السماحات',
+'permissionserrorstext' => 'لا تمتلك الصلاحية لفعل هذا، {{PLURAL:$1||للسبب التالي|للسببين التاليين|للأسباب التالية}}:',
 'permissionserrorstext-withaction' => 'لا تملك الصلاحيات ل$2، لل{{PLURAL:$1||سبب التالي|سببين التاليين|أسباب التالية}}:',
 'recreate-moveddeleted-warn' => "'''تحذير: أنت تقوم بإعادة إنشاء صفحة سبق حذفها.'''
 
@@ -391,17 +779,55 @@ $1',
 سجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:",
 'moveddeleted-notice' => 'هذه الصفحة تم حذفها.
 سجلا الحذف والنقل للصفحة معروضان بالأسفل كمرجع.',
+'log-fulllog' => 'أظهر السجل الكامل',
+'edit-hook-aborted' => 'التعديل تم تركه بواسطة الخطاف.
+لم يعط تفسيرا.',
+'edit-gone-missing' => 'لم يمكن تحديث الصفحة.
+يبدو أنه تم حذفها.',
+'edit-conflict' => 'تضارب تحريري.',
+'edit-no-change' => 'تعديلك تم تجاهله، لأنه لم يحدث أي تعديل للنص.',
+'edit-already-exists' => 'لم يمكن إنشاء صفحة جديدة.
+هي موجودة بالفعل.',
+'defaultmessagetext' => 'نص الرسالة الافتراضي',
 
 # Parser/template warnings
+'expensive-parserfunction-warning' => "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.
+
+ينبغي أن تكون أقل من {{PLURAL:$2||استدعاء واحد|استدعاءين|$2 استدعاءات|$2 استدعاء}}، يوجد الآن {{PLURAL:$1|استدعاء واحد|استدعاءان|$2 استدعاءات|$2 استدعاء}}.",
+'expensive-parserfunction-category' => 'صفحات يوجد بها استدعاءات دوال محلل كثيرة ومكلفة',
 'post-expand-template-inclusion-warning' => "'''تحذير:''' حجم تضمين القالب كبير جدا.
 بعض القوالب لن تضمن.",
 'post-expand-template-inclusion-category' => 'الصفحات حيث تم تجاوز حجم تضمين القالب',
 'post-expand-template-argument-warning' => "'''تحذير:''' هذه الصفحة تحتوي على عامل قالب واحد على الأقل له حجم تمدد كبير جدا.
 هذه العوامل تم حذفها.",
 'post-expand-template-argument-category' => 'صفحات تحتوي مدخلات القالب المحذوفة',
+'parser-template-loop-warning' => 'تم كشف حلقة قالب: [[$1]]',
+'parser-template-recursion-depth-warning' => 'تم تجاوز حد عمق فرد القوالب ($1)',
+'language-converter-depth-warning' => 'تم تخطي حد عمق محول اللغة ($1)',
+'node-count-exceeded-category' => 'الصفحات التي حدث فيها تجاوز تعداد العقد',
+'node-count-exceeded-warning' => 'تجاوزت هذه الصفحة تعداد العقد',
+'expansion-depth-exceeded-category' => 'الصفحات التي حدث فيها تجاوز عمق التوسيع',
+'expansion-depth-exceeded-warning' => 'الصفحة تجاوزت عمق التوسيع',
+'parser-unstrip-loop-warning' => 'حلقة معراة تم الكشف عنها',
+'parser-unstrip-recursion-limit' => 'تعدى حد العودية Unstrip  ($1)',
+
+# "Undo" feature
+'undo-success' => 'يمكن استرجاع التعديل.
+من فضلك تحقق من المقارنة بالأسفل للتأكد من أن هذا هو ما تريد أن تفعله، وبعد ذلك احفظ التغييرات بالأسفل للانتهاء من استرجاع التعديل.',
+'undo-failure' => 'لم يمكن استرجاع التعديل بسبب تعديلات متعارضة تمت على الصفحة.',
+'undo-norev' => 'فشل في الرجوع عن التعديل حيث أنه غير موجود أو تم حذفه.',
+'undo-summary' => 'الرجوع عن التعديل $1 بواسطة [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'لا يمكن إنشاء حساب',
+'cantcreateaccount-text' => "إنشاء الحسابات من عنوان الأيبي هذا ('''$1''') تم منعه بواسطة [[User:$3|$3]].
+
+السبب المعطى بواسطة $3 هو ''$2''",
 
 # History pages
 'viewpagelogs' => 'اعرض سجلات هذه الصفحة',
+'nohistory' => 'لا يوجد تاريخ للتعديلات لهذه الصفحة.',
+'currentrev' => 'المراجعة الحالية',
 'currentrev-asof' => 'المراجعة الحالية بتاريخ $1',
 'revisionasof' => 'مراجعة $1',
 'revision-info' => 'مراجعة $1 بواسطة $2',
@@ -409,7 +835,10 @@ $1',
 'nextrevision' => 'مراجعة أحدث ←',
 'currentrevisionlink' => 'المراجعة الحالية',
 'cur' => 'الحالي',
+'next' => 'التالي',
 'last' => 'السابق',
+'page_first' => 'الأولى',
+'page_last' => 'الأخيرة',
 'histlegend' => 'اختيار الفرق: علم على صناديق النسخ للمقارنة واضغط قارن بين النسخ المختارة أو الزر بالأسفل.<br />
 مفتاح: (الحالي) = الفرق مع النسخة الحالية
 (السابق) = الفرق مع النسخة السابقة، ط = تغيير طفيف',
@@ -417,21 +846,117 @@ $1',
 'history-show-deleted' => 'المحذوفة فقط',
 'histfirst' => 'أول',
 'histlast' => 'آخر',
+'historysize' => '({{PLURAL:$1|1 بايت|$1 بايت}})',
+'historyempty' => '(فارغ)',
 
 # Revision feed
+'history-feed-title' => 'تاريخ المراجعة',
+'history-feed-description' => 'تاريخ التعديل لهذه الصفحة في الويكي',
 'history-feed-item-nocomment' => '$1 في $2',
+'history-feed-empty' => 'الصفحة المطلوبة غير موجودة.
+من المحتمل أن تكون هذه الصفحة قد حذفت من الويكي، أو نقلت.
+حاول [[Special:Search|البحث في الويكي]] عن صفحات جديدة ذات صلة.',
 
 # Revision deletion
+'rev-deleted-comment' => '(أزيل ملخص التعديل)',
+'rev-deleted-user' => '(اسم المستخدم تمت إزالته)',
+'rev-deleted-event' => '(فعل السجل تمت إزالته)',
+'rev-deleted-user-contribs' => '[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]',
+'rev-deleted-text-permission' => "'''حُذِفت''' مراجعة هذه الصفحة.
+يمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+'rev-deleted-text-unhide' => "'''حُذِفت''' مراجعة الصفحة هذه.
+يمكن العثور على تفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].
+مازال بإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
+'rev-suppressed-text-unhide' => "'''أُخفيت''' مراجعة الصفحة هذه.
+يمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].
+بإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
+'rev-deleted-text-view' => "'''حُذِفت''' مراجعة هذه الصفحة.
+يمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+'rev-suppressed-text-view' => "'''أُخفيت''' مراجعة الصفحة هذه.
+يمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
+'rev-deleted-no-diff' => "لا يمكنك رؤية هذا الفرق لأن إحدى المراجعات '''حُذِفت'''.
+يمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+'rev-suppressed-no-diff' => "ليس بإمكانك مشاهدة هذا الفرق لأن إحدى المراجعات '''حذفت'''.",
+'rev-deleted-unhide-diff' => "'''حُذِفت''' إحدى مراجعتي هذا الفرق.
+يمكن العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].
+بإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
+'rev-suppressed-unhide-diff' => "'''أُخفيت''' إحدى مراجعتي هذا الفرق.
+يمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].
+بإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
+'rev-deleted-diff-view' => "'''حُذِفت''' إحدى مراجعتي هذا الفرق.
+يمكنك رؤية الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+'rev-suppressed-diff-view' => "'''أُخفيت''' إحدى مراجعتي هذا الفرق.
+يمكنك رؤية هذا الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
 'rev-delundel' => 'أظهر/أخف',
+'rev-showdeleted' => 'أظهر',
+'revisiondelete' => 'حذف/استرجاع المراجعات',
+'revdelete-nooldid-title' => 'مراجعة هدف غير صحيحة',
+'revdelete-nooldid-text' => 'إما أنك لم تحدد مراجعة (أو مراجعات) معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.',
+'revdelete-nologtype-title' => 'لا نوع سجل تم إعطاؤه',
+'revdelete-nologtype-text' => 'أنت لم تحدد نوع سجل لعمل هذا الفعل عليه.',
+'revdelete-nologid-title' => 'مدخلة سجل غير صحيحة',
+'revdelete-nologid-text' => 'أنت إما أنك لم تحدد حدث سجل مستهدف لعمل هذه الوظيفة أو أن المدخلة المحددة غير موجودة.',
+'revdelete-no-file' => 'الملف المحدد غير موجود.',
+'revdelete-show-file-confirm' => 'هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف "<nowiki>$1</nowiki>" بتاريخ $2 الساعة $3؟',
+'revdelete-show-file-submit' => 'نعم',
+'revdelete-selected' => "'''{{PLURAL:$2|المراجعة المختارة|المراجعات المختارة}} ل[[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:'''",
+'revdelete-text' => "'''المراجعات والأحداث المحذوفة ستظل تظهر في تاريخ الصفحة والسجلات،'''
+لكن أجزاء من محتواها لن يكون مسموحا للعامة برؤيتها.",
+'revdelete-confirm' => 'الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.
+من فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].',
+'revdelete-suppress-text' => "الإخفاء ينبغي أن يتم استخدامه '''فقط''' في الحالات التالية:
+* معلومات شخصية غير ملائمة
+*: ''عناوين المنازل وأرقام التليفونات، أرقام الضمان الاجتماعي، إلى آخره.''",
+'revdelete-legend' => 'وضع ضوابط رؤية',
+'revdelete-hide-text' => 'أخف نص المراجعة',
+'revdelete-hide-image' => 'أخف محتوى الملف',
+'revdelete-hide-name' => 'أخف الفعل والهدف',
+'revdelete-hide-comment' => 'أخف تعليق التعديل',
+'revdelete-hide-user' => 'أخف اسم/آيبي المستخدم',
+'revdelete-hide-restricted' => 'أخف البيانات عن الإداريين إضافة إلى الآخرين',
+'revdelete-radio-same' => '(لا تغير)',
+'revdelete-radio-set' => 'نعم',
+'revdelete-radio-unset' => 'لا',
+'revdelete-suppress' => 'أخف البيانات عن مديري النظام والبقية',
+'revdelete-unsuppress' => 'إزالة الضوابط من المراجعات المسترجعة',
+'revdelete-log' => 'السبب:',
+'revdelete-submit' => 'طبق على {{PLURAL:$1||المراجعة المختارة|المراجعتين المختارتين|المراجعات المختارة}}',
+'revdelete-success' => "'''تم تحديث رؤية المراجعات بنجاح.'''",
+'revdelete-failure' => "'''تعذر تحديث رؤية المراجعة:'''
+$1",
+'logdelete-success' => "'''تم ضبط رؤية السجلات بنجاح.'''",
+'logdelete-failure' => "'''تعذر ضبط رؤية السجل:'''
+$1",
 'revdel-restore' => 'تغيير الرؤية',
 'revdel-restore-deleted' => 'مراجعات محذوفة',
 'revdel-restore-visible' => 'مراجعات مرئية',
+'pagehist' => 'تاريخ الصفحة',
+'deletedhist' => 'التاريخ المحذوف',
+'revdelete-hide-current' => 'خطأ عند إحفاء العنصر المؤرخ في $2 $1: هذه هي المراجعة الحالية.
+لا يمكن إخفاؤها.',
+'revdelete-show-no-access' => 'خطأ في إظهار العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك"مقيد".
+ليس لك صلاحية الوصول إليه.',
+'revdelete-modify-no-access' => 'خطأ في تعديل العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك"مقيد".
+ليس لك صلاحية الوصول إليه.',
+'revdelete-modify-missing' => 'خطأ في تعديل العنصر ذا الهوية $1: العنصر مفقود من قاعدة البيانات!',
+'revdelete-no-change' => "'''تحذير:''' العنصر ذو التاريخ $2 $1 لديه أصلا إعدادات الظهور المطلوبة.",
+'revdelete-concurrent-change' => 'خطأ في تعديل العنصر ذي التاريخ $2 $1: تظهر حالته أن شخصا آخر عدله أثناء محاولتك تعديله.
+من فضلك راجع السجلات.',
+'revdelete-only-restricted' => 'خطأ إخفاء العنصر المؤرخ $2, $1: لا تستطيع تنحية العناصر من عرض الإداريين بدون أن تحدد أيضا إحدى خيارات التنحية الأخرى.',
+'revdelete-reason-dropdown' => '* أسباب حذف عامة
+** خرق لحقوق النشر
+** معلومات شخصية غير ملائمة
+**معلومات تشهيرية محتملة',
+'revdelete-otherreason' => 'سبب آخر/إضافي:',
+'revdelete-reasonotherlist' => 'سبب آخر',
+'revdelete-edit-reasonlist' => 'عدل أسباب الحذف',
 
 # Merge log
 'revertmerge' => 'إلغاء الدمج',
 
 # Diffs
-'history-title' => 'تاريخ مراجعة "$1"',
+'history-title' => ' «$1»: تاريخ المراجعة',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'قارن بين النسختين المختارتين',
 'editundo' => 'تراجع',
index bdce934..38537b0 100644 (file)
@@ -15,6 +15,7 @@
  * @author Ali1
  * @author Alnokta
  * @author Antime
+ * @author Avocato
  * @author Bassem JARKAS
  * @author Chaos
  * @author Ciphers
@@ -472,24 +473,24 @@ $messages = array(
 'tog-editsection' => 'مكن تعديل الأقسام عن طريق وصلات [عدل]',
 'tog-editsectiononrightclick' => 'فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)',
 'tog-showtoc' => 'اعرض فهرس المحتويات (للصفحات التي تحتوي على أكثر من 3 عناوين)',
-'tog-rememberpassword' => 'تذÙ\83ر Ø¯Ø®Ù\88Ù\84Ù\8a Ø¹Ù\84Ù\89 Ù\87ذا Ø§Ù\84Ù\85تصÙ\81Ø­ (Ø¥Ù\84Ù\89 {{PLURAL:$1||Ù\8aÙ\88Ù\85 Ù\88احد|Ù\8aÙ\88Ù\85Ù\8aÙ\86|$1 Ø£Ù\8aاÙ\85|$1 Ù\8aÙ\88Ù\85Ù\8bا|$1 Ù\8aÙ\88Ù\85}} Ù\83حد Ø£Ù\82صÙ\89)',
-'tog-watchcreations' => 'أضف الصفحات التي أنشئها إلى قائمة مراقبتي',
-'tog-watchdefault' => 'أضف الصفحات التي أعدلها إلى قائمة مراقبتي',
-'tog-watchmoves' => 'أضف الصفحات التي أنقلها إلى قائمة مراقبتي',
-'tog-watchdeletion' => 'أضف الصفحات التي أحذفها إلى قائمة مراقبتي',
+'tog-rememberpassword' => 'تذÙ\83ر Ø¯Ø®Ù\88Ù\84Ù\8a Ø¨Ù\87ذا Ø§Ù\84Ù\85تصÙ\81Ø­ (Ù\84Ù\85دة Ø£Ù\82صاÙ\87ا {{PLURAL:$1||Ù\8aÙ\88Ù\85 Ù\88احد|Ù\8aÙ\88Ù\85اÙ\86|$1 Ø£Ù\8aاÙ\85|$1 Ù\8aÙ\88Ù\85ا|$1 Ù\8aÙ\88Ù\85}})',
+'tog-watchcreations' => 'أضف الصفحات التي أنشئها والملفات التي أرفعها إلى قائمة مراقبتي.',
+'tog-watchdefault' => '!!أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي',
+'tog-watchmoves' => 'أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي',
+'tog-watchdeletion' => 'أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي',
 'tog-minordefault' => 'علم كل التعديلات طفيفة افتراضيا',
 'tog-previewontop' => 'أظهر العرض المسبق قبل صندوق التحرير',
 'tog-previewonfirst' => 'أظهر معاينة مع أول تعديل',
 'tog-nocache' => 'عطّل تخزين المتصفح للصفحة',
-'tog-enotifwatchlistpages' => 'أرسل لي رسالة إلكترونية عندما يتم تغيير صفحة في قائمة مراقبتي',
+'tog-enotifwatchlistpages' => 'أرسل لي رسالة إلكترونية عندما تُغيّر صفحة أو ملف في قائمة مراقبتي',
 'tog-enotifusertalkpages' => 'أرسل لي رسالة إلكترونية عندما تعدل صفحة نقاشي',
-'tog-enotifminoredits' => 'أرسل لي رسالة إلكترونية عن التعديلات الطفيفة للصفحات أيضا',
+'tog-enotifminoredits' => 'أرسل لي رسالة إلكترونية عن التعديلات الطفيفة للصفحات والملفات أيضا',
 'tog-enotifrevealaddr' => 'أظهر عنوان بريدي الإلكتروني في رسائل الإخطار',
 'tog-shownumberswatching' => 'اعرض عدد المستخدمين المراقبين',
 'tog-oldsig' => 'التوقيع الحالي:',
 'tog-fancysig' => 'عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)',
-'tog-externaleditor' => 'استخدم محرراً خارجياً بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([[mw:Manual:External_editors|للمزيد من المعلومات]].)',
-'tog-externaldiff' => 'استخدم فرقاً خارجياً بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([[mw:Manual:External_editors|للمزيد من المعلومات]].)',
+'tog-externaleditor' => 'استخدم محرراً خارجياً بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors لمزيد من المعلومات].)',
+'tog-externaldiff' => 'استخدم فرقاً خارجياً بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors للمزيد من المعلومات].)',
 'tog-showjumplinks' => 'مكن وصلات "اذهب إلى" المساعدة',
 'tog-uselivepreview' => 'استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)',
 'tog-forceeditsummary' => 'نبهني عند إدخال ملخص تعديل فارغ',
@@ -753,7 +754,7 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'صفحة',
-'nstab-user' => 'صفحة مستخدم',
+'nstab-user' => 'صفحة {{GENDER:{{BASEPAGENAME}}|مستخدم|مستخدمة}}',
 'nstab-media' => 'صفحة وسيط',
 'nstab-special' => 'صفحة خاصة',
 'nstab-project' => 'صفحة مشروع',
@@ -818,6 +819,8 @@ $1',
 'cannotdelete' => 'تعذر حذف الصفحة أو الملف "$1".
 ربما حذفها شحص آخر.',
 'cannotdelete-title' => 'لا يمكن حذف الصفحة "$1"',
+'delete-hook-aborted' => 'إحباط الحذف من قبل هوك.
+لم يقدم أي توضيح.',
 'badtitle' => 'عنوان سيء',
 'badtitletext' => 'عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الوصلة بين اللغات أو بين المشاريع خاطئة.
 ومن الممكن وجود رموز لا تصلح للاستخدام في العناوين.',
@@ -854,6 +857,8 @@ $2',
 المدير الذي قام بغلقه قدم التفسير التالي: "$3".',
 'invalidtitle-knownnamespace' => 'عنوان غير صالح في النطاق «$2» مع نص «$3»',
 'invalidtitle-unknownnamespace' => 'عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»',
+'exception-nologin' => 'غير مسجل الدخول',
+'exception-nologin-text' => 'تتطلب هذه الصفحة أو الفعل منك القيام بتسجيل الدخول على هذه الويكي أولا.',
 
 # Virus scanner
 'virus-badscanner' => "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
@@ -871,7 +876,7 @@ $2',
 'yourname' => 'اسم المستخدم:',
 'yourpassword' => 'كلمة السر:',
 'yourpasswordagain' => 'أعد كتابة كلمة السر:',
-'remembermypassword' => 'تذÙ\83ر Ø¯Ø®Ù\88Ù\84Ù\8a Ø¹Ù\84Ù\89 Ù\87ذا Ø§Ù\84حاسÙ\88ب (Ø¥Ù\84Ù\89 {{PLURAL:$1||Ù\8aÙ\88Ù\85 Ù\88احد|Ù\8aÙ\88Ù\85Ù\8aÙ\86|$1 Ø£Ù\8aاÙ\85|$1 Ù\8aÙ\88Ù\85Ù\8bا|$1 Ù\8aÙ\88Ù\85}} Ù\83حد Ø£Ù\82صÙ\89)',
+'remembermypassword' => 'تذÙ\83ر Ø¯Ø®Ù\88Ù\84Ù\8a Ø¨Ù\87ذا Ø§Ù\84Ù\85تصÙ\81Ø­ (Ù\84Ù\85دة Ø£Ù\82صاÙ\87ا {{PLURAL:$1||Ù\8aÙ\88Ù\85 Ù\88احد|Ù\8aÙ\88Ù\85اÙ\86|$1 Ø£Ù\8aاÙ\85|$1 Ù\8aÙ\88Ù\85ا|$1 Ù\8aÙ\88Ù\85}})',
 'securelogin-stick-https' => 'ابقَ في اتصال HTTPS بعد الدخول.',
 'yourdomainname' => 'نطاقك:',
 'externaldberror' => 'هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.',
@@ -883,12 +888,12 @@ $2',
 'logout' => 'اخرج',
 'userlogout' => 'اخرج',
 'notloggedin' => 'غير مسجل الدخول',
-'nologin' => "ألا تمتلك حسابا؟ '''$1'''.",
+'nologin' => "ليس لديك حساب؟ '''$1'''.",
 'nologinlink' => 'أنشئ حسابا',
 'createaccount' => 'أنشئ حسابا',
-'gotaccount' => "تمتلك حسابا بالفعل؟ '''$1'''.",
+'gotaccount' => "لديك حساب؟ '''$1'''.",
 'gotaccountlink' => 'لُج',
-'userlogin-resetlink' => 'أنسيت بيانات الولوج؟',
+'userlogin-resetlink' => 'نسيت تفاصيل الدخول؟',
 'createaccountmail' => 'بواسطة البريد الإلكتروني',
 'createaccountreason' => 'السبب:',
 'badretype' => 'كلمات السر التي أدخلتها لا تتطابق.',
@@ -1028,8 +1033,8 @@ $2
 'changeemail-oldemail' => 'عنوان البريد الإلكتروني الحالي:',
 'changeemail-newemail' => 'عنوان البريد الإلكتروني الجديد:',
 'changeemail-none' => '(لا شيء)',
-'changeemail-submit' => 'تغÙ\8aÙ\8aر البريد الإلكتروني',
-'changeemail-cancel' => 'Ø¥Ù\84غاء',
+'changeemail-submit' => 'غÙ\8aÙ\91ر البريد الإلكتروني',
+'changeemail-cancel' => 'Ø£Ù\84غÙ\90',
 
 # Edit page toolbar
 'bold_sample' => 'نص غليظ',
@@ -1083,8 +1088,8 @@ $2
 لا يمكنك استخدام خاصية 'مراسلة هذا المستخدم' إلا إذا كنت قد وضعت عنوان بريدي صحيح في [[Special:Preferences|تفضيلات حسابك]] ولم يتم منعك من استخدامها.
 عنوان الأيبي الخاص بك حاليا هو $3، ورقم المنع هو #$5.
 من فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
-'autoblockedtext' => 'تم منع عنوان آيبيك تلقائيا لأن مستخدما آخرا ممنوعا بواسطة $1 استخدمه.
-السبب الممنوح هو التالي:
+'autoblockedtext' => 'مُنِع عنوان آيبيك تلقائيا لأن مستخدما آخرا منعه $1 استخدمه.
+السبب المعطى هو التالي:
 
 :\'\'$2\'\'
 
@@ -1717,6 +1722,7 @@ $1",
 'right-writeapi' => 'استخدام API للكتابة',
 'right-delete' => 'حذف الصفحات',
 'right-bigdelete' => 'حذف الصفحات ذات التواريخ الكبيرة',
+'right-deletelogentry' => 'حذف والغاء حذف إدخالات سجل معين',
 'right-deleterevision' => 'حذف واسترجاع مراجعات معينة من الصفحات',
 'right-deletedhistory' => 'رؤية مدخلات التاريخ المحذوفة، بدون نصوصها المصاحبة',
 'right-deletedtext' => 'عرض النص المحذوف والتغييرات بين المراجعات المحذوفة',
@@ -2035,6 +2041,7 @@ $1',
 'lockmanager-fail-releaselock' => 'تعذر تحرير التأمين لـ "$1"..',
 'lockmanager-fail-db-bucket' => 'تعذر الإتصال بعدد كافي من قواعد تأمين البيانات في الحزمة $1.',
 'lockmanager-fail-db-release' => 'تعذر تحرير الأقفال في  قاعدة البيانات $1.',
+'lockmanager-fail-svr-acquire' => 'لم يمكن فرض أقفال على المخدم $1.',
 'lockmanager-fail-svr-release' => 'تعذر تحرير الأقفال على الخادم $1.',
 
 # ZipDirectoryReader
@@ -2733,7 +2740,7 @@ $1',
 
 # Contributions
 'contributions' => 'مساهمات المستخدم',
-'contributions-title' => 'مساهمات المستخدم $1',
+'contributions-title' => 'مساهمات {{GENDER:$1|المستخدم|المستخدمة}} $1',
 'mycontris' => 'مساهماتي',
 'contribsub2' => 'ل$1 ($2)',
 'nocontribs' => 'لم يتم العثور على تغييرات تطابق هذه المحددات.',
@@ -3140,8 +3147,8 @@ $1',
 'javascripttest-pagetext-unknownframework' => 'إطار اختبار غير معروف "$1".',
 'javascripttest-pagetext-frameworks' => 'الرجاء اختيار أحد أطر الاختبارات التالية: $1',
 'javascripttest-pagetext-skins' => 'قم باختيار الواجهة لإجراء الإحتبارات بها:',
-'javascripttest-qunit-intro' => 'راجع [$1 Ù\88Ø«Ù\8aÙ\82Ø© Ø§Ù\84Ø¥ختبار] على mediawiki.org.',
-'javascripttest-qunit-heading' => 'جÙ\86اح Ø£ختبار MediaWiki JavaScript QUnit',
+'javascripttest-qunit-intro' => 'راجع [$1 Ù\88Ø«Ù\8aÙ\82Ø© Ø§Ù\84اختبار] على mediawiki.org.',
+'javascripttest-qunit-heading' => 'جÙ\86اح Ø§ختبار MediaWiki JavaScript QUnit',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'صفحة المستخدم الخاصة بك',
@@ -3256,7 +3263,7 @@ $1',
 'anonymous' => '{{PLURAL:$1|مستخدم مجهول|مستخدمون مجهولون}} ل{{SITENAME}}',
 'siteuser' => 'مستخدم {{SITENAME}} $1',
 'anonuser' => 'مستخدم {{SITENAME}}  المجهول $1',
-'lastmodifiedatby' => 'أجرى آخر تعديل لهذه الصفحة $3 في $2، $1.',
+'lastmodifiedatby' => '{{GENDER:$4|أجرى|أجرت}} $3 آخر تعديل لهذه الصفحة في $2، $1.',
 'othercontribs' => 'بناء على عمل $1.',
 'others' => 'أخرون',
 'siteusers' => '{{PLURAL:$2||مستخدم|مستخدمي}} {{SITENAME}} $1',
@@ -3272,6 +3279,7 @@ $1',
 'spambot_username' => 'تنظيف سبام ميدياويكي',
 'spam_reverting' => 'استرجاع آخر نسخة ليس بها وصلات إلى $1',
 'spam_blanking' => 'كل النسخ احتوت على وصلات ل $1، إفراغ',
+'spam_deleting' => 'جميع النسخ تحوي رابطا إلى $1، يتم الحذف',
 
 # Info page
 'pageinfo-title' => 'المعلومات ل"$1"',
@@ -4197,9 +4205,9 @@ $5
 'sqlite-no-fts' => '$1 بدون دعم البحث في كامل النص',
 
 # New logging system
-'logentry-delete-delete' => 'حذف $1 صفحة $3',
+'logentry-delete-delete' => '$1 حذف الصفحة $3',
 'logentry-delete-restore' => 'استعاد $1 صفحة $3',
-'logentry-delete-event' => 'غيّر $1 إمكانية مشاهدة {{PLURAL:$5||حدث|حدثين|$5 أحداث|$5 حدثًا|$5 حدث}} في سجل $3: $4',
+'logentry-delete-event' => '$1 غير خاصية العرض لـ {{PLURAL:$5|مدخل السجل|$5 مدخلات السجل}} في $3: $4',
 'logentry-delete-revision' => 'غيّر $1 إمكانية مشاهدة {{PLURAL:$5||مراجعة واحدة|مراجعتين|$5 مراجعات|$5 مراجعة}} في صفحة $3: $4',
 'logentry-delete-event-legacy' => 'غيّر $1 إمكانية رؤية أحداث سجل $3',
 'logentry-delete-revision-legacy' => 'غيّر $1 إمكانية رؤية مراجعات صفحة $3',
@@ -4255,6 +4263,8 @@ $5
 'api-error-empty-file' => 'كان ملف الذي قمت بإرسال فارغة.',
 'api-error-emptypage' => 'إنشاء صفحات فارغة جديدة، غير مسموح به.',
 'api-error-fetchfileerror' => 'خطأ داخلي: قد حدث خطأ أثناء إحضار الملف.',
+'api-error-fileexists-forbidden' => 'يوجد مسبقا ملف باسم "$1"، ولا يمكن استبداله.',
+'api-error-fileexists-shared-forbidden' => 'يوجد مسبقا ملف باسم "$1" في مستودع الملفات المشتركة، ولا يمكن استبداله.',
 'api-error-file-too-large' => 'الملف الذي أرسلته كان كبيرا جدا.',
 'api-error-filename-tooshort' => 'اسم الملف قصير جدا.',
 'api-error-filetype-banned' => 'نوع الملف هذا ممنوع.',
index 2e2cdb5..483fc39 100644 (file)
@@ -137,7 +137,7 @@ $messages = array(
 'tog-nocache' => 'ব্ৰাউজাৰ পৃষ্ঠা কেশ্বিং নিষ্ক্ৰীয় কৰক',
 'tog-enotifwatchlistpages' => 'মোৰ লক্ষ্য-তালিকাত থকা পৃষ্ঠা সলনি হলে মোলৈ ই-মেইল পঠাব',
 'tog-enotifusertalkpages' => 'মোৰ বাৰ্তা পৃষ্ঠা সলনি হলে মোলৈ ই-মেইল পঠাব',
-'tog-enotifminoredits' => 'অগুৰুত্বপূৰ্ণ সম্পাদনা হলেও মোলৈ ই-মেইল পঠাব',
+'tog-enotifminoredits' => "অগুৰুত্বপূৰ্ণ সম্পাদনা হ'লেও মোলৈ ই-মেইল পঠাব",
 'tog-enotifrevealaddr' => 'জাননী ই-মেইল বোৰত মোৰ ই-মেইল ঠিকনা দেখুৱাব',
 'tog-shownumberswatching' => 'লক্ষ্য কৰি থকা সদস্য সমূহৰ সংখ্যা দেখুৱাওক',
 'tog-oldsig' => 'বৰ্তমানৰ স্বাক্ষৰ:',
@@ -1668,6 +1668,7 @@ URL টোৰ বৈধতা বিচাৰ কৰি পুনৰ চেষ
 'lockmanager-fail-releaselock' => '"$1" -ৰ বাবে লক মুক্ত কৰিব পৰা নগ\'ল।',
 'lockmanager-fail-db-bucket' => "বাকেট $1 -ত পৰ্যাপ্ত লক ডাটাবেইচসমূহ যোগাযোগ কৰিব পৰা নগ'ল।",
 'lockmanager-fail-db-release' => "$1 তথ্যকোষত তলা মোকোলাই দিব পৰা নগ'ল",
+'lockmanager-fail-svr-acquire' => "$1 চাৰ্ভাৰত তলা মোকোলাই দিব পৰা নগ'ল",
 'lockmanager-fail-svr-release' => "$1 চাৰ্ভাৰত তলা মোকোলাই দিব পৰা নগ'ল",
 
 # ZipDirectoryReader
@@ -3742,6 +3743,7 @@ $5
 'api-error-empty-file' => 'আপুনি দাখিল কৰা ফাইলটো খালী ।',
 'api-error-emptypage' => 'নতুন, খালী পৃষ্ঠা সৃষ্টি কৰিবলৈ অনুমতি নাই।',
 'api-error-fetchfileerror' => 'আভ্যন্তৰীণ ত্ৰুটি: ফাইলটো অনাত কিবা সমস্যা হৈছে।',
+'api-error-fileexists-forbidden' => '"$1" নামৰ এখন নথি আগৰ পৰাই উপলদ্ধ আৰু ইয়াৰ পুনৰ লিখন অসম্ভৱ ।',
 'api-error-file-too-large' => 'আপুনি দাখিল কৰা ফাইলখন বৰ ডাঙৰ ।',
 'api-error-filename-tooshort' => 'ফাইলৰ নামটো অতি চুটি।',
 'api-error-filetype-banned' => 'এই ধৰণৰ ফাইল নিষিদ্ধ।',
@@ -3780,6 +3782,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|শতাব্দী|শতাব্দী}}',
 'duration-millennia' => '$1 {{PLURAL:$1|সহস্ৰাব্দ|সহস্ৰাব্দ}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => "$1 চাৰ্ভাৰত তলা মোকোলাই দিব পৰা নগ'ল",
 );
index 5ad6fa2..e4bc2a3 100644 (file)
@@ -73,17 +73,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Activar la edición de seiciones calcando col botón drechu nos títulos de seición (necesita JavaScript)',
 'tog-showtoc' => 'Amosar índiz (pa páxines con más de 3 encabezaos)',
 'tog-rememberpassword' => 'Recordar la mio identificación nesti ordenador (hasta un máximu de $1 {{PLURAL:$1|día|díes}})',
-'tog-watchcreations' => 'Amestar les páxines que creo a la mio llista de vixilancia',
-'tog-watchdefault' => "Amestar les páxines qu'edito a la mio llista de vixilancia",
-'tog-watchmoves' => 'Amestar les páxines que muevo a la mio llista de vixilancia',
-'tog-watchdeletion' => 'Amestar les páxines que desanicio a la mio llista de vixilancia',
+'tog-watchcreations' => 'Amestar les páxines que creo y los ficheros que cargo a la mio llista de vixilancia',
+'tog-watchdefault' => "Amestar les páxines y ficheros qu'edito a la mio llista de vixilancia",
+'tog-watchmoves' => 'Amestar les páxines y ficheros que muevo a la mio llista de vixilancia',
+'tog-watchdeletion' => 'Amestar les páxines y ficheros que desanicio a la mio llista de vixilancia',
 'tog-minordefault' => 'Marcar toles ediciones como menores por defeutu',
 'tog-previewontop' => "Amosar previsualización enantes de la caxa d'edición",
 'tog-previewonfirst' => 'Amosar previsualización na primer edición',
 'tog-nocache' => 'Desactivar la caché de páxines del restolador',
-'tog-enotifwatchlistpages' => 'Mandame un corréu cuando camude una páxina de la mio llista de vixilancia',
+'tog-enotifwatchlistpages' => 'Mandame un corréu cuando camude una páxina o ficheru de la mio llista de vixilancia',
 'tog-enotifusertalkpages' => "Mandame un corréu cuando camude la mio páxina d'alderique",
-'tog-enotifminoredits' => 'Mandame tamién un corréu cuando heba ediciones menores de les páxines',
+'tog-enotifminoredits' => 'Mandame tamién un corréu cuando heba ediciones menores de les páxines y ficheros',
 'tog-enotifrevealaddr' => 'Amosar la mio direición de corréu nos correos de notificación',
 'tog-shownumberswatching' => "Amosar el númberu d'usuarios que tán vixilando la páxina",
 'tog-oldsig' => 'Firma esistente:',
@@ -416,6 +416,8 @@ Por favor informa d'esto a un [[Special:ListUsers/sysop|alministrador]], anotand
 'cannotdelete' => "Nun pudo desaniciase la páxina o'l ficheru «$1».
 Seique daquién yá lo desaniciara.",
 'cannotdelete-title' => 'Nun se pue desaniciar la páxina «$1»',
+'delete-hook-aborted' => 'Desaniciu albortáu pol hook.
+Nun conseñó esplicación.',
 'badtitle' => 'Títulu incorreutu',
 'badtitletext' => 'El títulu de páxina solicitáu nun ye válidu, ta baleru o tien enllaces interllingua o interwiki incorreutos.
 Pue contener ún o más carauteres que nun se puen usar nos títulos.',
@@ -1323,6 +1325,7 @@ Esta información sedrá pública.",
 'right-writeapi' => "Usar l'API d'escritura",
 'right-delete' => 'Esborrar páxines',
 'right-bigdelete' => 'Esborrar páxines con historiales grandes',
+'right-deletelogentry' => 'Desaniciar y restaurar entraes del rexistru determinaes',
 'right-deleterevision' => 'Eliminar y restaurar revisiones específiques de les páxines',
 'right-deletedhistory' => 'Ver entraes eliminaes del historial ensin testu asociáu',
 'right-deletedtext' => 'Ver el testu desaniciáu y los cambeos ente versiones desaniciaes',
@@ -1645,6 +1648,7 @@ Si'l problema persiste, contauta con un [[Special:ListUsers/sysop|alministrador]
 'lockmanager-fail-releaselock' => 'Nun se pudo lliberar el bloquéu pa "$1".',
 'lockmanager-fail-db-bucket' => 'Nun se pudo contautar con bloqueos de bases de datos bastantes nel conxuntu $1.',
 'lockmanager-fail-db-release' => 'Nun se pudieron lliberar los bloqueos na base de datos $1.',
+'lockmanager-fail-svr-acquire' => 'Nun se pudieron afitar los bloqueos nel sirvidor $1.',
 'lockmanager-fail-svr-release' => 'Nun se pudieron lliberar los bloqueos nel sirvidor $1.',
 
 # ZipDirectoryReader
@@ -3741,6 +3745,8 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'api-error-empty-file' => "El ficheru qu'unviasti taba baleru.",
 'api-error-emptypage' => 'Nun se permite la creación de páxines nueves baleres.',
 'api-error-fetchfileerror' => 'Fallu internu: daqué nun funcionó al buscar el ficheru.',
+'api-error-fileexists-forbidden' => 'Yá esiste un ficheru col nome «$1» y nun se pue sobrescribir.',
+'api-error-fileexists-shared-forbidden' => 'Yá esiste un ficheru col nome «$1» nel repositoriu de ficheros compartíos, y nun se pue sobrescribir.',
 'api-error-file-too-large' => "El ficheru qu'unviasti yera demasiao grande.",
 'api-error-filename-tooshort' => 'El nome de ficheru ye demasiao curtiu.',
 'api-error-filetype-banned' => 'Esta triba de ficheru ta torgada.',
@@ -3779,6 +3785,4 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'duration-centuries' => '$1 {{PLURAL:$1|sieglu|sieglos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenios}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Nun se pudieron afitar los bloqueos nel sirvidor $1.',
 );
index 1a04bbb..73aff4b 100644 (file)
@@ -90,7 +90,7 @@ $messages = array(
 'tog-editsection' => 'Hər bir bölmə üçün [redaktə]ni mümkün et',
 'tog-editsectiononrightclick' => 'Bölmələrin redaktəsini başlıqların üzərində sağ klik etməklə mümkün et (JavaScript)',
 'tog-showtoc' => 'Mündəricat siyahısını göstər (3 başlıqdan artıq olan səhifələrdə)',
-'tog-rememberpassword' => 'Məni bu kompüterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
+'tog-rememberpassword' => 'Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
 'tog-watchcreations' => 'Yaratdığım səhifələri izlədiyim səhifələrə əlavə et',
 'tog-watchdefault' => 'Redaktə etdiyim səhifələri izlədiyim səhifələrə əlavə et',
 'tog-watchmoves' => 'Adlarını dəyişdiyim səhifələri izlədiyim səhifələrə əlavə et',
@@ -480,7 +480,7 @@ Hesabınız yaradıldı.
 'yourname' => 'İstifadəçi adı',
 'yourpassword' => 'Parol:',
 'yourpasswordagain' => 'Parolu təkrar yazın:',
-'remembermypassword' => 'Məni bu kompüterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
+'remembermypassword' => 'Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
 'securelogin-stick-https' => 'Daxil olduqdan sonra HTTPS-lə əlaqədə qal',
 'yourdomainname' => 'Sizin domain',
 'externaldberror' => 'Verilənlər bazasının doğruluğunu yoxlamada xəta baş verib və yaxud sizin xarici istifadəçi qeydiyyatını yeniləmək hüququnuz yoxdur.',
@@ -1452,7 +1452,11 @@ $1',
 'filedelete-reason-otherlist' => 'Başqa səbəb',
 'filedelete-reason-dropdown' => '*Əsas silmə səbəbi
 ** Müəllif hüququ pozuntusu
-** Dublikat fayl',
+** Dublikat fayl
+** Keyfiyyətsiz şəkil
+** İstifadəsiz fayl
+** Qeyri-ensiklopedik şəxs
+** Lisenziyasız fayl',
 'filedelete-edit-reasonlist' => 'Silmə səbəblərini redaktə et',
 
 # MIME search
index 00687eb..aea27a6 100644 (file)
@@ -70,7 +70,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Һуңғы үҙгәртеүҙәр исемлегендә тикшерелгән үҙгәртеүҙәрҙе йәшер',
 'tog-newpageshidepatrolled' => 'Яңы биттәр исемлегендә тикшерелгән үҙгәртеүҙәрҙе йәшер',
 'tog-extendwatchlist' => 'Барлыҡ үҙгәртеүҙәрҙе үҙ эсенә алған, киңәйтелгән күҙәтеү исемлеге',
-'tog-usenewrc' => 'Һуңғы үҙгәртеүҙәрҙәрҙең сифатлыраҡ исемлеген ҡулланырға (JavaScript кәрәкле)',
+'tog-usenewrc' => 'Һуңғы төҙәтеүҙәр һәм күҙәтеү исемлегендәге үҙгәрештерҙе төркөмдәргә булергә (JavaScript)',
 'tog-numberheadings' => 'Башисемдәрҙе автоматик рәүештә номерландыр',
 'tog-showtoolbar' => 'Мөхәррирләү ваҡытында өҫкө ҡоралдар панелен күрһәтергә (JavaScript кәрәкле)',
 'tog-editondblclick' => 'Биттәрҙе ике сиртеү менән мөхәррирләргә (JavaScript кәрәкле)',
@@ -78,17 +78,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Бүлектәрҙе исемдәренә сысҡан менән сиртеп үҙгәртергә (JavaScript кәрәкле)',
 'tog-showtoc' => 'Эстәлек күрһәтелһен (3-тән күп башлығы булған биттәрҙә)',
 'tog-rememberpassword' => 'Был браузерҙа (иң күбендә $1 {{PLURAL:$1|көнгә}}) иҫәп яҙыуым хәтерләнһен',
-'tog-watchcreations' => 'Мин төҙөгән биттәрҙе күҙәтеү исемлегенә яҙырға',
-'tog-watchdefault' => 'Үҙгәрткән биттәрем күҙәтеү исемлегемә өҫтәлһен',
-'tog-watchmoves' => 'Ð\98Ñ\81емен Ò¯Ò\99гÓ\99Ñ\80Ñ\82кÓ\99н Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80ем ÐºÒ¯Ò\99Ó\99Ñ\82еү Ð¸Ñ\81емлегемÓ\99 Ó©Ò«Ñ\82Ó\99лһен',
-'tog-watchdeletion' => 'ЮйÒ\93ан Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80ем ÐºÒ¯Ò\99Ó\99Ñ\82еү Ð¸Ñ\81емлегемÓ\99 Ó©Ò«Ñ\82Ó\99лһен',
+'tog-watchcreations' => 'Мин төҙөгән биттәрҙе һәм күсергән файлдарҙы күҙәтеү исемлегенә өҫтәргә',
+'tog-watchdefault' => 'Мин үҙгәрткән биттәр һәм файлдар аңлатмаһын күҙәтеү исемлегенә өҫтәргә',
+'tog-watchmoves' => 'Ð\9cин Ð¸Ñ\81емен Ò¯Ò\99гÓ\99Ñ\80Ñ\82кÓ\99н Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80Ò\99е Ò»Ó\99м Ñ\84айлдаÑ\80Ò\99Ñ\8b ÐºÒ¯Ò\99Ó\99Ñ\82еү Ð¸Ñ\81емлегенÓ\99 Ó©Ò«Ñ\82Ó\99Ñ\80гÓ\99',
+'tog-watchdeletion' => 'Ð\9cин Ñ\8eйÒ\93ан Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80Ò\99е Ò»Ó\99м Ñ\84айлдаÑ\80Ò\99Ñ\8b ÐºÒ¯Ò\99Ó\99Ñ\82еү Ð¸Ñ\81емлегенÓ\99 Ó©Ò«Ñ\82Ó\99Ñ\80гÓ\99',
 'tog-minordefault' => 'Бөтә үҙгәртеүҙәрҙе, ғәҙәттә, әҙ үҙгәреш тип билдәләргә',
 'tog-previewontop' => 'Алдан байҡау тәҙрәһен мөхәррирләү битенең өҫтөнә ҡуйырға',
 'tog-previewonfirst' => 'Мөхәррирләүгә күскәндә алдан ҡарау күрһәтелһен',
 'tog-nocache' => 'Браузерҙа биттәрҙе кэшлауҙы тыйырға',
-'tog-enotifwatchlistpages' => 'Ð\9aÒ¯Ò\99Ó\99Ñ\82еү Ð¸Ñ\81емлегендÓ\99ге Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80Ò\99ең Ò¯Ò\99гÓ\99Ñ\80еÑ\88Ñ\82Ó\99Ñ\80е Ñ\82Ñ\83Ñ\80аһÑ\8bнда Ñ\8dлекÑ\82Ñ\80он Ð¿Ð¾Ñ\87Ñ\82а Ð°Ñ\88а Ð±ÐµÐ»Ð´ÐµÑ\80ергә',
+'tog-enotifwatchlistpages' => 'Ð\9aÒ¯Ò\99Ó\99Ñ\82еү Ð¸Ñ\81емлегендÓ\99ге Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80Ò\99ең Ò»Ó\99м Ñ\84айлдаÑ\80Ò\99Ñ\8bÒ£ Ò¯Ò\99гÓ\99Ñ\80еÑ\88Ñ\82Ó\99Ñ\80е Ñ\82Ñ\83Ñ\80аһÑ\8bнда Ñ\8dлекÑ\82Ñ\80он Ð¿Ð¾Ñ\87Ñ\82а Ð°Ñ\88а Ñ\85Ó\99бÓ\99Ñ\80 Ð¸Ñ\82ергә',
 'tog-enotifusertalkpages' => 'Шәхси фекер алышыу битем үҙгәртелеү тураһында электрон почта аша белдерергә',
-'tog-enotifminoredits' => 'Әҙ генә үҙгәрештәр тураһында электрон почта аша белдерергә',
+'tog-enotifminoredits' => 'Биттәрҙең һәм файлдарҙың аҙ гынә үҙгәрештәре тураһында ла электрон почта аша хәбер итергә',
 'tog-enotifrevealaddr' => 'Белдереү хәбәрҙәрендә почта адресым күрһәтелһен',
 'tog-shownumberswatching' => 'Битте күҙәтеү исемлегенә өҫтәгән ҡулланыусылар һанын күрһәтергә',
 'tog-oldsig' => 'Хәҙерге имза:',
@@ -274,7 +274,7 @@ $messages = array(
 'mediawikipage' => 'Хәбәрҙәр битен ҡарарға',
 'templatepage' => 'Ҡалып битен ҡарарға',
 'viewhelppage' => 'Ярҙам битен ҡарарға',
-'categorypage' => 'ТөÑ\80көм битен ҡарарға',
+'categorypage' => 'Ð\9aаÑ\82егоÑ\80иÑ\8f битен ҡарарға',
 'viewtalkpage' => 'Фекер алышыу битен ҡарарға',
 'otherlanguages' => 'Башҡа телдәрҙә',
 'redirectedfrom' => '($1 битенән йүнәлтелде)',
@@ -420,6 +420,8 @@ $1',
 'cannotdelete' => '«$1» исемле битте йәки файлды юйып булмай.
 Уны башҡа ҡулланыусы юйған булыуы мөмкин.',
 'cannotdelete-title' => '"$1" битен юйып булмай',
+'delete-hook-aborted' => 'Үҙгәртеүҙе махсус-процедура кире ҡаҡты.
+Өҫтәмә аңлатма килтерелмәй.',
 'badtitle' => 'Ярамаған исем',
 'badtitletext' => 'Биттең һоратылған исеме дөрөҫ түгел, буш йәки телдәр араһы йәки интервики исеме яңылыш күрһәтелгән. Исемдә тыйылған символдар булыуы ла мөмкин.',
 'perfcached' => 'Был мәғлүмәттәр кэштан алынған, уларҙа һуңғы үҙгәртеүҙәр булмаҫҡа мөмкин. Кэшта иң күбе {{PLURAL:$1|язма}} һаҡлана.',
index 0e00fa6..ba505c6 100644 (file)
@@ -1383,43 +1383,75 @@ Ini dae tabi matitingkog.',
 'recentchangeslinked-toolbox' => 'Mga angay na pagbabàgo',
 'recentchangeslinked-title' => 'Mga pagbabàgong angay sa "$1"',
 'recentchangeslinked-noresult' => 'Warang mga pagbabago sa mga pahinang nakatakod sa itinaong pagkalawig.',
-'recentchangeslinked-summary' => "Ini an lista nin mga pagsangli na ginibo pa sana sa mga pahinang nakatakod halì sa sarong espesyal na pahina (o sa mga myembro nin sarong espesyal na kategorya).
-'''Maitom''' an mga pahinang [[Special:Pigbabantayan|pigbabantayan mo]].",
+'recentchangeslinked-summary' => "Ini an listahan kan mga pagbabagong ginibo kan dae pa sana nahaloy sa mga pahina na nakatakod gikan sa sarong pinagsambit na pahina (o sa mga miyembro kan sarong pinagsambit na kategorya).
+An mga pahina na yaon sa [[Special:Watchlist|saimong Bantay-listahan]] na '''tekstong mahibog'''.",
+'recentchangeslinked-page' => 'Pahinang ngaran:',
+'recentchangeslinked-to' => 'Ipahiling an mga pagbabago sa mga pahina na nakatakod sa pinagtaong pahina lugod',
 
 # Upload
 'upload' => 'Isàngat an file',
 'uploadbtn' => 'Ikargá an file',
-'reuploaddesc' => 'Magbalik sa pormulario kan pagkarga.',
+'reuploaddesc' => 'Ikansela an pagkarga asin magbalik sa porma kan pagkakarga',
+'upload-tryagain' => 'Isumite an modipikadong deskripsyon kan sagunson',
 'uploadnologin' => 'Dai nakalaog',
 'uploadnologintext' => "Kaipuhan ika si [[Special:UserLogin|nakadagos]]
 para makakarga nin mga ''file''.",
+'upload_directory_missing' => 'An direktoriyo nin pagkarga ($1) nawawara tabi asin dae maikapagmukna sa paagi kan webserver.',
 'upload_directory_read_only' => 'An directoriong pagkarga na ($1) dai puedeng suratan kan serbidor nin web.',
 'uploaderror' => 'Salâ an pagkarga',
-'uploadtext' => "Gamiton tabî an pormulario sa babâ para magkarga nin mga ''file'', para maghiling o maghanap kan mga ladawan na dating kinarga magduman tabi sa [[Special:FileList|lista nin mga pigkargang ''file'']], an mga kinarga asin mga pinarâ nakalista man sa [[Special:Log/upload|historial nin pagkarga]].
-
-Kun boot mong ikaag an ladawan sa páhina, gamiton tabî an takod arog kan
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki>''',
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|alt text]]</nowiki>''' o
-'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' para sa direktong pagtakod sa ''file''.",
+'upload-recreate-warning' => "'''Patanid tabi: An sagunson sa pangaran kaini pinagpura o pinagbalyo na tabi.'''
+
+An talaan kan pagkapura asin pagkabalyo para sa pahinang ini yaon digde para sa saimong konbenyensiya:",
+'uploadtext' => "Gamita an porma sa ibaba tanganing makapagkarga nin mga sagunson.
+Para hilngon o hanapon an dati nang pinagkargang mga sagunson, magduman tabi sa [[Special:FileList|listahan kan pinagkargang mga sagunson]], mga pagkarga asin pagkarga otro pinagtala man sa [[Special:Log/upload|talaan nin pagkakarga]], mga pinagpura na yaon sa [[Special:Log/delete|talaan nin pagkapura]].
+
+Sa pagbali nin sarong sagunson sa sarong pahina, gamita tabi an takod kan saro sa mga minasunod na mga porma:
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' sa paggamit kan bilog na bersyon kan sagunson
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></tt>''' sa paggamit kan 200 pixel na lawig kan pagkakua sa sarong kahon na yaon sa parteng wala nin gaygayan na yaon an 'alt text' bilang deskripsyon
+* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>''' para sa direktang nakakatakod sa sagunson na dae pinagpapahiling na sarong sagunson",
+'upload-permitted' => 'Pinagtutugutang mga tipo nin sagunson: $1',
+'upload-preferred' => 'Pinagpapaurog na mga tipo nin sagunson: $1',
+'upload-prohibited' => 'Pinagbabawal na mga tipo nin sagunson: $1.',
 'uploadlog' => 'historial nin pagkarga',
 'uploadlogpage' => 'Ikarga an usip',
-'uploadlogpagetext' => "Mahihiling sa babâ an lista kan mga pinakahuring ''file'' na kinarga.",
+'uploadlogpagetext' => 'Yaon sa ibaba an sarong listahan kan dae pa sanang nahahaloy na pinagkargang mga sagunson.
+Hilngon tabi an [[Special:NewFiles|galleriya kan mga bagong sagunson]] para sa mas biswal na lantawon.',
 'filename' => 'Pangaran kan dokumento',
 'filedesc' => 'Kagabsan',
 'fileuploadsummary' => 'Kagabsan:',
-'filestatus' => 'Estatutong derechos nin paragamit:',
-'filesource' => 'Ginikanan',
+'filereuploadsummary' => 'Mga pagbabago kan sagunson:',
+'filestatus' => 'Kamugtakan sa karapatan nin panurat:',
+'filesource' => 'Gikanan:',
 'uploadedfiles' => "Mga ''file'' na ikinargá",
 'ignorewarning' => 'Dai pagintiendehon an mga patanid asin itagama pa man an file',
 'ignorewarnings' => 'Paliman-limanon an mga tanid',
 'minlength1' => "An pangaran kan mga ''file'' dapat na dai mababâ sa sarong letra.",
 'illegalfilename' => "An ''filename'' na \"\$1\" igwang mga ''character'' na dai pwede sa mga titulo nin páhina. Tâwan tabî nin bâgong pangaran an ''file'' asin probaran na ikarga giraray.",
+'filename-toolong' => 'Mga pangaran nin sagunson dae dapat maglawig na sobra sa 240 bytes.',
 'badfilename' => "Rinibayan an ''filename'' nin \"\$1\".",
+'filetype-mime-mismatch' => 'An ekstensyon kan sagunson na ".$1" bakong langkap sa detektadong tipo kan MIME nin sagunson ($2).',
 'filetype-badmime' => "Dai pigtotogotan na ikarga an mga ''file'' na MIME na \"\$1\" tipo.",
+'filetype-bad-ie-mime' => 'Dae makakapagkarga kaining sagunson nin huli ta an Internet Explorer minamansay kaini bilang "$1", na bakong pinagtutugutan asin potensyal na delikadong tipo nin sagunson.',
+'filetype-unwanted-type' => "'''\".\$1\"''' bakong aprubadong tipo nin sagunson.
+Pinapaurog an {{PLURAL:\$3|tipo nin sagunson na|tipo nin sagunson an}} \$2.",
+'filetype-banned-type' => '\'\'\'".$1"\'\'\' {{PLURAL:$4|bakong tinutugutan na tipo nin sagunson|bakong tinutugutan na mga tipo nin mga sagunson}}.
+An pinagtutugutan na {{PLURAL:$3|tipo nin sagunson|mga tipo nin mga sagunson}} $2.',
 'filetype-missing' => "Mayong ekstensyón an ''file'' (arog kan \".jpg\").",
+'empty-file' => 'An sagunson na saimong pinagsumite blangko.',
+'file-too-large' => 'An sagunson na saimong pinagsumite grabe kadakula.',
+'filename-tooshort' => 'An ngaran kan sagunson grabe kahalipot.',
+'filetype-banned' => 'Ining tipo nin sagunson pinagbabawal.',
+'verification-error' => 'Ining sagunson dae nag-agi sa beripikasyon.',
+'hookaborted' => 'An modipikasyon na saimong pinagprubaran na gibohon pinag-untok bilang sarong ekstensyon.',
+'illegal-filename' => 'An ngaran kan sagunson dae pinagtutugot.',
+'overwrite' => 'An pagpatungan an sarong eksistidong sagunson dae pinagtutugot.',
+'unknown-error' => 'May dae aram na kasalaan an nangyari.',
+'tmp-create-error' => 'Dae makapagmukna nin temporaryong sagunson.',
+'tmp-write-error' => 'An kasalaan nagsusurat nin temporaryong sagunson.',
 'large-file' => "Pigrerekomendár na dapat an mga ''file'' bakong mas dakula sa $1; $2 an sokol kaining ''file''.",
 'largefileserver' => "Mas dakula an ''file'' sa pigtotogotan na sokol kan ''server''.",
 'emptyfile' => "Garo mayong laog an ''file'' na kinarga mo. Pwede ser na salâ ining tipo nin ''filename''. Isegurado tabî kun talagang boot mong ikarga ining ''file''.",
+'windows-nonascii-filename' => 'Ining wiki dae tabi nagsusuporta kan mga pangaran kan sagunson na igwang espesyal na mga karakter.',
 'fileexists' => "Igwa nang ''file'' na may parehong pangaran sa ini, sosogon tabî an '''<tt>[[:$1]]</tt>''' kun dai ka seguradong ribayan ini.
 [[$1|thumb]]",
 'fileexists-extension' => "May ''file'' na may parehong pangaran: [[$2|thumb]]
@@ -1441,19 +1473,63 @@ Kun igwa ka nin ladawan na may resolusyón na maximo ikarga tabî ini, kun dai,
 'uploaddisabledtext' => "Pigpopogolan an pagkarga nin mga ''file'' o sa ining wiki.",
 'uploadscripted' => "Ining ''file'' igwang HTML o kodang eskritura na pwede ser na salang mainterpretar kan ''browser''.",
 'uploadvirus' => "May virus an ''file''! Mga detalye: $1",
-'sourcefilename' => 'Ginikanan kan pangaran kan dokumento',
-'destfilename' => "''Filename'' kan destinasyón",
-'watchthisupload' => 'Bantayan ining pahina',
+'sourcefilename' => 'Ginikanan kan pangaran nin sagunson:',
+'sourceurl' => 'Ginikanan kan kilyawan:',
+'destfilename' => 'Destinasyon kan pangaran nin sagunson:',
+'upload-maxfilesize' => 'Pinakahalangkaw na kadakulaan nin sagunson: $1',
+'upload-description' => 'Deskripsyon kan Sagunson',
+'upload-options' => 'Pagpipilian kan pagkukupkop',
+'watchthisupload' => 'Bantayi ining sagunson',
 'filewasdeleted' => "May sarong ''file'' na kapangaran kaini na dating pigkarga tapos pigparâ man sana. Sosogon muna tabî an $1 bago ikarga giraray ini.",
 'filename-bad-prefix' => "An pangaran nin ''file'' na pigkakarga mo nagpopoon sa '''\"\$1\"''', sarong pangaran na dai makapaladawan na normalmente enseguidang pigtatao kan mga kamerang digital. Magpili tabî nin pangaran nin ''file'' na mas makapaladawan.",
 'upload-success-subj' => 'Nakarga na',
+'upload-success-msg' => 'An saimong pagkukupkop na gikan sa [$2] matrayumpo. Ini makukua digde: [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'Problema sa pangupkop',
+'upload-failure-msg' => 'Nagkaigwa nin problema sa saimong pagkukupkop gikan sa [$2]:
+
+$1',
+'upload-warning-subj' => 'Patanid tabi sa pagkukupkop',
+'upload-warning-msg' => 'Nagkaigwa nin problema sa saimong pagkukupkop gikan sa [$2]. Ika puwedeng magbalik sa [[Special:Upload/stash/$1|upload form]] tanganing korehiran ining problema.',
 
 'upload-proto-error' => 'Salang protocolo',
 'upload-proto-error-text' => 'An pagkargang panharayo kaipuhan nin mga URLs na nagpopoon sa  <code>http://</code> o <code>ftp://</code>.',
 'upload-file-error' => 'Panlaog na salâ',
-'upload-file-error-text' => "May panlaog na salâ kan pagprobar na maggibo nin temporaryong ''file'' sa ''server''.  Apodon tabî an administrador nin sistema.",
+'upload-file-error-text' => 'Sarong internal na kasalaan an nangyari kunsoarin na pinagprubaran na magmukna in sarong temporaryong sagunson sa tagapagsirbe. Pakikontak lang tabi nin sarong [[Special:ListUsers/sysop|administrador]].',
 'upload-misc-error' => 'Dai naaaram na error sa pagkarga',
-'upload-misc-error-text' => 'May salang panyayari na dai aram kan pagkarga.  Sosogon tabî kun tamâ an URL asin probaran giraray.  Kun an problema nagpeperseguir, apodon tabî an sarong administrador nin sistema.',
+'upload-misc-error-text' => 'Sarong dae maiwasan na kasalaan an nangyari kan ika nagkukupkop.
+Paki arama tabi na an kilyawan balido asin nagagamit asin pakiotro giraray.
+Kun an problema yaon pa, pakikontak tabi nin sarong [[Special:ListUsers/sysop|administrador]].',
+'upload-too-many-redirects' => 'An kilyawan nagkaigwa nin kadakol na mga kaliwatan',
+'upload-unknown-size' => 'Dae aram an kadakulaan',
+'upload-http-error' => 'Sarong HTTP na kasalaan an nangyari: $1',
+'upload-copy-upload-invalid-domain' => 'Pangungupkop nin kopya bakong puwede gikan sa kinasakupan kaini.',
+
+# File backend
+'backend-fail-stream' => 'Dae maipakupsit an sagunson $1.',
+'backend-fail-backup' => 'Dae makapagtago nin saro pang kopya an sagunson $1.',
+'backend-fail-notexists' => 'An sagunson na $1 bakong eksistido.',
+'backend-fail-hashes' => 'Dae nakakakua nin kaputol kan sagunson para ipagkumpara.',
+'backend-fail-notsame' => 'Bakong magkakaparehong sagunson yaon na po sa $1.',
+'backend-fail-invalidpath' => '$1 bakong balidong agihan sa pagsasaray.',
+'backend-fail-delete' => 'Dae makakapura kan sagunson $1.',
+'backend-fail-alreadyexists' => 'An sagunson $1 eksistido na po.',
+'backend-fail-store' => 'Dae makakapagsaray nin sagunson an $1 sa $2.',
+'backend-fail-copy' => 'Dae makakakopya nin sagunson $1 pasiring sa $2.',
+'backend-fail-move' => 'Dae makakabalyo nin sagunson $1 pasiring sa $2.',
+'backend-fail-opentemp' => 'Dae makakapagbukas nin temporaryong sagunson.',
+'backend-fail-writetemp' => 'Dae makakapagsurat sa temporaryong sagunson.',
+'backend-fail-closetemp' => 'Dae makakapagsarado nin temporaryong sagunson.',
+'backend-fail-read' => 'Dae makakabasa nin sagunson $1.',
+'backend-fail-create' => 'Dae makakapagsurat nin sagunson $1.',
+'backend-fail-maxsize' => 'Dae makakapagsuat nin sagunson $1 nin huli ta ini grabe kadakula nin {{PLURAL:$2|sarong byte|$2 bytes}}.',
+'backend-fail-usable' => 'Dae makakapagsurat nin sagunson $1 sa dahilan na kulang an permiso o nawawara an mga direktoryo/kaaganan.',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'Paggamit dae pinagtugot',
+'img-auth-notindir' => 'An hinahagad na agihan bakong naka-akma sa pankargang direktoryo.',
+'img-auth-badtitle' => 'Dae nakakapaggibo in sarong balidong titulog gikan sa "$1".',
+'img-auth-nologinnWL' => 'Dae ka nakalaog asin "$1" mayo sa aprubadong listahan.',
+'img-auth-nofile' => 'An sagunson "$1" bakong eksistido.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Dai naabot an URL',
index 1f9e446..ac31cef 100644 (file)
@@ -1489,6 +1489,7 @@ $1",
 'right-writeapi' => 'выкарыстаньне API для запісаў',
 'right-delete' => 'выдаленьне старонак',
 'right-bigdelete' => 'Выдаленьне старонак зь вялікімі гісторыямі',
+'right-deletelogentry' => 'Выдаленьне і аднаўленьне асобных запісаў журналу',
 'right-deleterevision' => 'выдаленьне і аднаўленьне асобных вэрсіяў старонак',
 'right-deletedhistory' => 'прагляд выдаленай гісторыі старонак без доступу да выдаленага тэксту',
 'right-deletedtext' => 'прагляд выдаленага тэксту і зьменаў паміж выдаленымі вэрсіямі старонак',
@@ -1790,6 +1791,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Немагчыма зьняць блякаваньне для «$1».',
 'lockmanager-fail-db-bucket' => 'Немагчыма скантактавацца з дастатковай колькасьцю базаў блякавньняў на ўчастку $1.',
 'lockmanager-fail-db-release' => 'Немагчыма зьняць блякаваньні для базы зьвестак $1.',
+'lockmanager-fail-svr-acquire' => 'Немагчыма запытаць блякаваньні на сэрвэры $1.',
 'lockmanager-fail-svr-release' => 'Немагчыма зьняць блякаваньні для сэрвэра $1.',
 
 # ZipDirectoryReader
@@ -3901,6 +3903,4 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'duration-centuries' => '$1 {{PLURAL:$1|стагодзьдзе|стагодзьдзі|стагодзьдзяў}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячагодзьдзе|тысячагодзьдзі|тысячагодзьдзяў}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Немагчыма запытаць блякаваньні на сэрвэры $1.',
 );
index d43f729..3ce48ff 100644 (file)
@@ -11,6 +11,7 @@
  * @author Borislav
  * @author DCLXVI
  * @author Daggerstab
+ * @author Dimi z
  * @author Kaganer
  * @author Spiritia
  * @author Stanqo
@@ -243,7 +244,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Скриване на патрулираните редакции от списъка с последните промени',
 'tog-newpageshidepatrolled' => 'Скриване на патрулираните редакции от списъка на новите страници',
 'tog-extendwatchlist' => 'Разширяване на списъка, така че да показва всички промени, не само най-скорошните',
-'tog-usenewrc' => 'Ð\9fодобÑ\80Ñ\8fване Ð½Ð° Ð¿Ð¾Ñ\81ледниÑ\82е Ð¿Ñ\80омени (изисква Джаваскрипт)',
+'tog-usenewrc' => 'Ð\93Ñ\80Ñ\83пиÑ\80ане Ð½Ð° Ð¿Ð¾Ñ\81ледниÑ\82е Ð¿Ñ\80омени Ð¸ Ñ\81пиÑ\81Ñ\8aка Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение Ð¿Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86и (изисква Джаваскрипт)',
 'tog-numberheadings' => 'Номериране на заглавията',
 'tog-showtoolbar' => 'Помощна лента за редактиране (изисква Джаваскрипт)',
 'tog-editondblclick' => 'Редактиране при двойно щракване (изисква Джаваскрипт)',
@@ -252,7 +253,7 @@ $messages = array(
 'tog-showtoc' => 'Показване на съдържание (за страници с повече от три раздела)',
 'tog-rememberpassword' => 'Запомяне на паролата ми в този браузър (за не повече от $1 {{PLURAL:$1|ден|дни}})',
 'tog-watchcreations' => 'Добавяне на създадените от мен страници и качените от мен файлове към списъка ми за наблюдение',
-'tog-watchdefault' => 'Ð\94обавÑ\8fне Ð½Ð° Ñ\80едакÑ\82иÑ\80аниÑ\82е Ð¾Ñ\82 Ð¼ÐµÐ½ Ñ\81Ñ\82Ñ\80аниÑ\86и ÐºÑ\8aм списъка ми за наблюдение',
+'tog-watchdefault' => 'Ð\94обавÑ\8fне Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е, ÐºÐ¾Ð¸Ñ\82о Ñ\80едакÑ\82иÑ\80ам, Ð² списъка ми за наблюдение',
 'tog-watchmoves' => 'Добавяне на преместените от мен страници към списъка ми за наблюдение',
 'tog-watchdeletion' => 'Добавяне на изтритите от мен страници към списъка ми за наблюдение',
 'tog-minordefault' => 'Отбелязване на всички промени като малки по подразбиране',
@@ -986,6 +987,7 @@ $2
 'edit-no-change' => 'Вашата редакция беше игнорирана, тъй като не съдържа промени по текста.',
 'edit-already-exists' => 'Не можа да се създаде нова страница.
 Такава вече съществува.',
+'defaultmessagetext' => 'Текст на съобщението по подразбиране',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Внимание: Тази страница прекалено много пъти използва ресурсоемки парсерни функции.
@@ -1176,6 +1178,7 @@ $1",
 # Diffs
 'history-title' => 'Преглед на историята на „$1“',
 'difference-title' => 'Разлика между версии на „$1“',
+'difference-title-multipage' => 'Разлики между страниците „$1“ и „$2“',
 'difference-multipage' => '(Разлики между страниците)',
 'lineno' => 'Ред $1:',
 'compareselectedversions' => 'Сравнение на избраните версии',
@@ -2741,7 +2744,7 @@ $1',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1|една версия|$1 версии}} на $2 бяха внесени',
 
 # JavaScriptTest
-'javascripttest-disabled' => 'Тази функция е изключена.',
+'javascripttest-disabled' => 'Тази функционалност не е активирана в това уики.',
 'javascripttest-pagetext-noframework' => 'Тази страница е запазена за изпълнение на Джаваскрипт тестове.',
 'javascripttest-qunit-intro' => 'Вижте [$1 тестовата документация] на mediawiki.org.',
 
index ce988d8..996e52f 100644 (file)
@@ -813,7 +813,7 @@ Merkit mat an titouroù-se war kement goulenn savet ganeoc'h.
 'nosuchsectiontext' => "Klasket hoc'h eus kemmañ ur rann n'eus ket anezhi.
 Moarvat ez eo bet dilerc'hiet pe dilamet abaoe ma oa bet lennet ganeoc'h.",
 'loginreqtitle' => 'Anv implijer rekis',
-'loginreqlink' => 'Kevreañ',
+'loginreqlink' => 'kevreañ',
 'loginreqpagetext' => "Ret eo deoc'h $1 evit gwelet pajennoù all.",
 'accmailtitle' => 'Ger-tremen kaset.',
 'accmailtext' => "Kaset ez eus bet ur ger-tremen dargouezhek evit [[User talk:$1|$1]] da $2.
@@ -1134,7 +1134,7 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.",
 'lineno' => 'Linenn $1:',
 'compareselectedversions' => 'Keñveriañ ar stummoù diuzet',
 'showhideselectedversions' => 'Diskouez/Kuzhat ar stummoù diuzet',
-'editundo' => 'disteuler',
+'editundo' => 'dizober',
 'diff-multi' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant {{PLURAL:$2|un implijer|$2 implijer}} kuzhet.)",
 'diff-multi-manyusers' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant muioc'h eget $2 {{PLURAL:$2|implijer|implijer}} kuzhet.)",
 
@@ -1715,6 +1715,7 @@ Ma talc'h ar gudenn, kit e darempred gant [[Special:ListUsers/sysop|merourien ar
 'lockmanager-fail-releaselock' => 'Dibosupl leuskel ar prenn digor evit "$1".',
 'lockmanager-fail-db-bucket' => "Dibosupl mont e darempred gant diazoù roadennoù a-walc'h evit ar c'helornad $1.",
 'lockmanager-fail-db-release' => 'Dibosupl da leuskel ar prennoù digor war an diaz roadennoù $1.',
+'lockmanager-fail-svr-acquire' => 'Dibosupl eo bet tapout ar prennoù war ar servijer $1.',
 'lockmanager-fail-svr-release' => 'Dibosupl da leuskel ar prennoù digor war ar servijer $1.',
 
 # ZipDirectoryReader
@@ -2079,7 +2080,7 @@ Protokoloù skoret : <tt>$1</tt> (na lakait hini ebet eus ar re-se en ho klask)'
 # Special:ActiveUsers
 'activeusers' => 'Roll an implijerien oberiant',
 'activeusers-intro' => 'Setu aze ur roll eus an implijerien zo bet oberiant mui pe vui e-pad an $1 {{PLURAL:$1|deiz|deiz}} diwezhañ.',
-'activeusers-count' => '$1 {{PLURAL:$1|degasadenn}} abaoe an {{PLURAL:$3|deiz}} diwezhañ',
+'activeusers-count' => '$1 {{PLURAL:$1|degasadenn}} abaoe an {{PLURAL:$3|deiz|$3 deiz}} diwezhañ',
 'activeusers-from' => 'Diskouez an implijerien adal :',
 'activeusers-hidebots' => 'Kuzhat ar robotoù',
 'activeusers-hidesysops' => 'Kuzhat ar verourien',
@@ -3849,6 +3850,4 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'duration-centuries' => "$1 {{PLURAL:$1|c'hantved|kantved}}",
 'duration-millennia' => '$1 {{PLURAL:$1|milvloaz|milvoaz}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Dibosupl eo bet tapout ar prennoù war ar servijer $1.',
 );
index 4d25907..59d85ce 100644 (file)
@@ -321,6 +321,7 @@ $messages = array(
 'index-category' => 'Pàgines indexades',
 'noindex-category' => 'Pàgines no indexades',
 'broken-file-category' => 'Pàgines amb enllaços a fitxer trencats',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'about' => 'Quant a',
 'article' => 'Pàgina de contingut',
@@ -390,7 +391,7 @@ $messages = array(
 'unprotect' => 'Desprotecció',
 'unprotectthispage' => 'Desprotegeix aquesta pàgina',
 'newpage' => 'Pàgina nova',
-'talkpage' => 'Discussió de la pàgina',
+'talkpage' => 'Discussió',
 'talkpagelinktext' => 'Discussió',
 'specialpage' => 'Pàgina especial',
 'personaltools' => "Eines de l'usuari",
@@ -1415,6 +1416,7 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'right-writeapi' => "Fer servir l'escriptura a l'API",
 'right-delete' => 'Esborrar pàgines',
 'right-bigdelete' => 'Esborrar pàgines amb historials grans',
+'right-deletelogentry' => "Suprimeix o desfés la supressió d'entrades de registre específiques",
 'right-deleterevision' => 'Esborrar i restaurar versions específiques de pàgines',
 'right-deletedhistory' => 'Veure els historials esborrats sense consultar-ne el text',
 'right-deletedtext' => 'Veure el text esborrat i els canvis entre revisions esborrades',
@@ -1708,6 +1710,7 @@ $1',
 'lockmanager-fail-releaselock' => "No s'ha pogut alliberar el bloqueig de «$1».",
 'lockmanager-fail-db-bucket' => "No s'han pogut contactar un nombre suficient de bases de bloqueig en el cubell $1.",
 'lockmanager-fail-db-release' => "No s'han pogut alliberar els bloquejos a la base de dades $1.",
+'lockmanager-fail-svr-acquire' => "No s'han pogut aconseguir els bloquejos al servidor $1.",
 'lockmanager-fail-svr-release' => "No s'han pogut alliberar els bloquejos al servidor $1.",
 
 # ZipDirectoryReader
@@ -3809,6 +3812,4 @@ Altrament, podeu fer servir un senzill formulari a continuació. El vostre comen
 'duration-centuries' => '$1 {{PLURAL:$1|segle|segles}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mil·leni|mil·lenis}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => "No s'han pogut aconseguir els bloquejos al servidor $1.",
 );
index cf78ce7..dea665b 100644 (file)
@@ -11,6 +11,7 @@
  * @author Arastein
  * @author Asoxor
  * @author Cyrus abdi
+ * @author Diyar se
  * @author Haval
  * @author Marmzok
  * @author رزگار
@@ -150,7 +151,7 @@ $messages = array(
 'tog-hidepatrolled' => 'لە دوایین گۆڕانکاریەکان، دەستکاریە پارێزراوەکان داشارە',
 'tog-newpageshidepatrolled' => 'لە لیستی لاپەڕە نوێکان، لاپەڕە پارێزراوەکان داشارە',
 'tog-extendwatchlist' => 'لیستی چاودێری درێژبکەرەوە بۆ نیشان دانی ھەموو گۆڕانکارییەکان، نەک تەنھا دوایینەکان.',
-'tog-usenewrc' => 'دوا گۆڕانکارییە پەرە پێدراوەکان بەکار ببە (پێویستی بە جاڤاسکریپتە)',
+'tog-usenewrc' => 'گۆڕانکارییەکان لە دوایین گۆڕانکارییەکان و لیستی چاودێریدا بە پێی پەڕە پۆلێن بکە (پێویستی بە جاڤاسکریپتە)',
 'tog-numberheadings' => 'ژمارەکردنی خۆکاری سەردێڕەکان',
 'tog-showtoolbar' => 'شریتی ئامرازەکانی دەستکاری نیشان بدە (JavaScript پێویستە)',
 'tog-editondblclick' => 'دەستکاریی پەڕە بە دووکلیک لەسەر دەق (JavaScript پێویستە)',
@@ -158,17 +159,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'ڕێگە بدە بۆ دەستکاری کردنی بەشەکان لە ڕێگەی کلیکی ڕاست کردن لەسەر سەردێڕی بەشەکان (JavaScript پێویستە)',
 'tog-showtoc' => 'پێرستی ناوەرۆک نیشان بدە (بۆ ئەو پەڕانە کە زیاتر لە ٣ سەردێڕیان تێدایە)',
 'tog-rememberpassword' => 'چوونە ژوورەوەم لەسەر ئەم وێبگەڕە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ە)',
-'tog-watchcreations' => 'ئەو پەڕانە کە من دروستم کردوون زیاد بکە بە لیستی چاودێڕییەکەم',
-'tog-watchdefault' => 'ئەو پەڕانە کە من دەستکاریم کردوون زیاد بکە بە لیستی چاودێڕییەکەم',
-'tog-watchmoves' => 'ئەو پەڕانە کە من گواستومنەتەوە زیاد بکە بە لیستی چاودێڕییەکەم',
-'tog-watchdeletion' => 'ئەو پەڕانە کە‌ من سڕیومنەتەوە زیاد بکە‌ بە لیستی چاودێڕییەکەم',
+'tog-watchcreations' => 'ئەو پەڕانەی من دروستم کردوون و ئەو پەڕگانە من بارم کردوون زیاد بکە بە لیستی چاودێڕییەکەم',
+'tog-watchdefault' => 'ئەو پەڕانە  و ئەو پەڕگانە من دەستکاریان دەکەم زیاد بکە بە لیستی چاودێڕییەکەم',
+'tog-watchmoves' => 'ئەو پەڕانە و ئەو پەڕگانە کە من گواستومنەتەوە زیاد بکە بە لیستی چاودێڕییەکەم',
+'tog-watchdeletion' => 'ئەو پەڕانە و ئەو پەڕگانە من سڕیومنەتەوە زیاد بکە بە لیستی چاودێڕییەکەم',
 'tog-minordefault' => 'ھەموو دەستکارییەکان بە ورد نیشان بکە لە حاڵەتی دیفاڵت',
 'tog-previewontop' => 'پێشبینین بەرلە چوارچێوەی دەستکاری نیشان بدە‌',
 'tog-previewonfirst' => 'لە یەکەم دەستکاری دا پێشبینین نیشان بدە',
 'tog-nocache' => 'کاشکردنی پەڕەکانی وێبگەڕەکە لەکاربخە',
-'tog-enotifwatchlistpages' => 'ئÛ\95Ú¯Û\95ر Ù¾Û\95Ú\95Û\95Û\8cÛ\95Ú©Û\8c Ù\84Û\95 Ù\84Û\8cستÛ\8c Ú\86اÙ\88دÛ\8eÚ\95Û\8cÛ\8cÛ\95کاÙ\86Ù\85 Ú¯Û\86Ú\95درا Ø¦Û\8cÙ\85Û\95Û\8cÙ\84Ù\85 Ø¨Û\86 Ø¨Ù\86Û\8eرÛ\95',
+'tog-enotifwatchlistpages' => 'ئÛ\8cÙ\85Û\95Û\8cÙ\84Ù\85 Ø¨Û\86 Ø¨Ù\86Û\8eرÛ\95 Ú©Ø§ØªÛ\8eÚ© Ù¾Û\95Ú\95Û\95Û\8cÛ\95Ú© Û\8cاÙ\86 Ù¾Û\95Ú\95Ú¯Û\95Û\8cÛ\95Ú© Ù\84Û\95 Ù\84Û\8cستÛ\8c Ú\86اÙ\88دÛ\8eÚ\95Û\8cÛ\8cÛ\95کاÙ\86Ù\85دا Ú¯Û\86Ú\95درا',
 'tog-enotifusertalkpages' => 'ئەگەر پەڕەی وتووێژەکەم گۆڕدرا ئیمەیلم بۆ بنێرە',
-'tog-enotifminoredits' => 'بۆ گۆڕانکارییە بچووکەکانی پەڕەکانیش ئیمەیلم بۆ بنێرە',
+'tog-enotifminoredits' => 'بۆ گۆڕانکارییە بچووکەکانی پەڕەکان و پەڕگەکانیش ئیمەیلم بۆ بنێرە',
 'tog-enotifrevealaddr' => 'ئەدرەسی ئیمەیلەکەم لە ئیمەیلە ئاگاداریدەرەکان دا نیشان بدە',
 'tog-shownumberswatching' => 'ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە',
 'tog-oldsig' => 'واژۆی ئێستا:',
@@ -269,6 +270,7 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|ئەم هاوپۆلە تەنها ئەم پەڕگەی لەخۆ گرتووە.|ئەم‌ {{PLURAL:$1|پەڕگەیە}} کە بەشێکە لە هەموو $2پەڕگەی ئەم هاوپۆلە‌ دەیبینی.}}',
 'category-file-count-limited' => 'ئەم {{PLURAL:$1|پەڕگە|پەڕگانە}} لەم هاوپۆلەدایە.',
 'listingcontinuesabbrev' => '(درێژە)',
+'index-category' => 'پەڕە پێرستەکراوەکان',
 'noindex-category' => 'پەڕە پێرستنەکراوەکان',
 
 'about' => 'سەبارەت',
@@ -798,7 +800,7 @@ $2
 لەیادت بێ کە لاپەڕەکانی‌ .css و .js لە بابەت بە پیتی بچووک کەڵک وەر ئەگرن. وەک {{ns:user}}:Foo/vector.css نە وەک {{ns:user}}:Foo/Vector.css .",
 'updated' => '(نوێ‌کراوە)',
 'note' => "'''تێبینی:'''",
-'previewnote' => "'''لە بیرت بێت کە ئەمە تەنھا پێشبینینە.'''
+'previewnote' => "ە بیرت بێت کە ئەمە تەنھا پێشبینینە.'''
 گۆڕانکارییەکانت ھێشتا پاشەکەوت نەکراون!",
 'previewconflict' => 'ئەم پێشبینینە بە تۆ نیشان ئەدات ئەو دەقەی لە شوێنی دەستکاری سەرەوە داتناوە چۆن بەرچاو ئەکەوێت ئەگەر پاشەکەوتی بکەیت.',
 'session_fail_preview' => "'''ببوورە! ناتوانین دەستکارییەکەت پێواژۆ بکەین بە ھۆی لەدەستدانی session data.'''
@@ -1584,7 +1586,7 @@ $1',
 'backend-fail-delete' => 'نەکرا پەڕگەی $1 بسڕدرێتەوە.',
 'backend-fail-copy' => 'نەکرا پەڕگەی $1 کۆپی بکرێت بۆ $2.',
 'backend-fail-move' => 'نەکرا پەڕگەی $1 بگوازرێتەوە بۆ $2.',
-'backend-fail-create' => 'Ù\86Û\95کرا Ù¾Û\95Ú\95Ú¯Û\95Û\8c $1 Ø¯Ø±Ù\88ستبکرÛ\8eت.',
+'backend-fail-create' => 'Ù\86Û\95کرا Ù¾Û\95Ú\95Ú¯Û\95Û\8c $1 Ø¨Ù\86Ù\88Ù\88سرÛ\8eت',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'تێپه‌ربوون ره‌تکرایه‌وه‌',
@@ -2880,6 +2882,13 @@ $1',
 'exif-gpsspeed-k' => 'کیلۆمەتر هەر کاتژمێر',
 'exif-gpsspeed-m' => 'مایل هەر کاتژمێر',
 
+'exif-iimcategory-hth' => 'تەندروستی',
+'exif-iimcategory-sci' => 'زانست و تەکنۆلۆژیا',
+'exif-iimcategory-soi' => 'بابەتە کۆمەڵایەتییەکان',
+'exif-iimcategory-spo' => 'وەرزشەکان',
+
+'exif-urgency-normal' => 'ئاسایی ($1)',
+
 # External editor support
 'edit-externally' => 'دەستکاریی ئەم پەڕەیە بکە بە بەکارھێنانی پڕۆگرامێکی دەرەکی',
 'edit-externally-help' => '(بۆ زانیاریی زیاتر سەیری [//www.mediawiki.org/wiki/Manual:External_editors  ڕێنماییەکانی دامەزراندن] بکە)',
@@ -3071,6 +3080,7 @@ $5
 
 # Core parser functions
 'unknown_extension_tag' => 'تاگی درێژکراوەی نەناسراو "$1"',
+'duplicate-defaultsort' => "'''ئاگاداری''' کلیلی پۆلێنکردنی \"\$2'' چووەتە شوێنی کلیلی پۆلێنکردنی  \"\$1\"",
 
 # Special:Version
 'version' => 'وەشان',
index 62e7ed2..316a04b 100644 (file)
@@ -371,15 +371,15 @@ $messages = array(
 'tog-rememberpassword' => 'Zapamatovat si mé přihlášení v tomto prohlížeči (maximálně $1 {{PLURAL:$1|den|dny|dní}})',
 'tog-watchcreations' => 'Přidávat mnou založené stránky a načtené soubory ke sledovaným',
 'tog-watchdefault' => 'Přidávat mnou editované stránky a soubory ke sledovaným',
-'tog-watchmoves' => 'Přidávat mnou přesouvané stránky mezi sledované',
-'tog-watchdeletion' => 'Přidávat stránky, které smažu, mezi sledované',
+'tog-watchmoves' => 'Přidávat mnou přesouvané stránky a soubory mezi sledované',
+'tog-watchdeletion' => 'Přidávat stránky a soubory, které smažu, mezi sledované',
 'tog-minordefault' => 'Označit editaci implicitně jako malá editace',
 'tog-previewontop' => 'Zobrazovat náhled před editačním oknem (ne za ním)',
 'tog-previewonfirst' => 'Zobrazit při první editaci náhled',
 'tog-nocache' => 'Vypnout cachování v prohlížeči',
-'tog-enotifwatchlistpages' => 'Poslat e-mail při změně sledované stránky',
+'tog-enotifwatchlistpages' => 'Poslat e-mail při změně sledované stránky nebo souboru',
 'tog-enotifusertalkpages' => 'Poslat e-mail při změně mé diskusní stránky',
-'tog-enotifminoredits' => 'Poslat e-mail i pro menší editace (které jinak nezpůsobují odeslání e-mailu)',
+'tog-enotifminoredits' => 'Posílat e-maily i při malých editacích stránek a souborů',
 'tog-enotifrevealaddr' => 'Prozradit mou e-mailovou adresu v upozorňujících e-mailech',
 'tog-shownumberswatching' => 'Zobrazovat počet sledujících uživatelů',
 'tog-oldsig' => 'Stávající podpis:',
@@ -1577,6 +1577,7 @@ Tuto operaci nelze vrátit zpět.',
 'right-writeapi' => 'Používání zapisovacího API',
 'right-delete' => 'Mazání stránek',
 'right-bigdelete' => 'Mazání stránek s dlouhou historií',
+'right-deletelogentry' => 'Mazání a obnovování jednotlivých protokolovacích záznamů',
 'right-deleterevision' => 'Mazání a obnovování konkrétních revizí stránky',
 'right-deletedhistory' => 'Zobrazování smazaných položek v historii bez odpovídajícího textu',
 'right-deletedtext' => 'Prohlížení smazaného textu a rozdílů mezi smazanými verzemi',
@@ -1883,6 +1884,7 @@ Kontaktuje prosím [[Special:ListUsers/sysop|správce]].',
 'lockmanager-fail-releaselock' => 'Zámek pro „$1“ nelze uvolnit.',
 'lockmanager-fail-db-bucket' => 'Nelze navázat spojení s dostatečným počtem databází zámků v bloku $1.',
 'lockmanager-fail-db-release' => 'Uzamčení databáze $1 nelze uvolnit.',
+'lockmanager-fail-svr-acquire' => 'Nepodařilo se získat zámek serveru $1.',
 'lockmanager-fail-svr-release' => 'Uzamčení serveru $1 nelze uvolnit.',
 
 # ZipDirectoryReader
@@ -2418,6 +2420,8 @@ Rady a kontakt:
 'rollback' => 'Vrátit zpět editace',
 'rollback_short' => 'Vrátit zpět',
 'rollbacklink' => 'vrácení zpět',
+'rollbacklinkcount' => 'vrácení $1 {{PLURAL:$1|editace|editací}} zpět',
+'rollbacklinkcount-morethan' => 'vrácení více než $1 {{PLURAL:$1|editace|editací}} zpět',
 'rollbackfailed' => 'Nešlo vrátit zpět',
 'cantrollback' => 'Nelze vrátit zpět poslední editaci, neboť poslední přispěvatel je jediným autorem této stránky.',
 'alreadyrolled' => 'Nelze vrátit zpět poslední editaci [[:$1]] od uživatele [[User:$2|$2]] ([[User talk:$2|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), protože někdo jiný již stránku editoval nebo vrátil tuto změnu zpět.
@@ -4044,6 +4048,4 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'duration-centuries' => '$1 {{PLURAL:$1|století}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisíciletí}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Nepodařilo se získat zámek serveru $1.',
 );
index 7b279c3..06265fd 100644 (file)
@@ -200,18 +200,18 @@ $messages = array(
 'tog-editsection' => 'Redigér afsnit ved hjælp af [redigér]-henvisninger',
 'tog-editsectiononrightclick' => 'Redigér afsnit ved at højreklikke på deres titler (JavaScript)',
 'tog-showtoc' => 'Vis indholdsfortegnelse (på sider med mere end tre afsnit)',
-'tog-rememberpassword' => 'Husk mit login på denne computer (højst $1 {{PLURAL:$1|dag|dage}})',
-'tog-watchcreations' => 'Tilføj sider jeg opretter til min overvågningsliste',
-'tog-watchdefault' => 'Tilføj sider jeg redigerer til min overvågningsliste',
-'tog-watchmoves' => 'Tilføj sider jeg flytter til min overvågningsliste',
-'tog-watchdeletion' => 'Tilføj sider jeg sletter til min overvågningsliste',
-'tog-minordefault' => 'Markér som standard alle redigering som mindre',
+'tog-rememberpassword' => 'Husk mit login i denne browser (højst $1 {{PLURAL:$1|dag|dage}})',
+'tog-watchcreations' => 'Tilføj sider, jeg opretter, og filer, jeg lægger op, til min overvågningsliste',
+'tog-watchdefault' => 'Tilføj sider og filer, jeg redigerer, til min overvågningsliste',
+'tog-watchmoves' => 'Tilføj sider og filer, jeg flytter, til min overvågningsliste',
+'tog-watchdeletion' => 'Tilføj sider og filer, jeg sletter, til min overvågningsliste',
+'tog-minordefault' => 'Markér som standard alle redigeringer som mindre redigeringer',
 'tog-previewontop' => 'Vis forhåndsvisning over redigeringsboksen',
 'tog-previewonfirst' => 'Vis forhåndsvisning når du starter med at redigere',
 'tog-nocache' => 'Slå browsercaching af sider fra',
-'tog-enotifwatchlistpages' => 'Send mig en e-mail ved sideændringer',
+'tog-enotifwatchlistpages' => 'Send mig en e-mail ved ændringer til en side eller fil på min overvågningsliste',
 'tog-enotifusertalkpages' => 'Send mig en e-mail når min brugerdiskussionsside ændres',
-'tog-enotifminoredits' => 'Send mig også en e-mail ved mindre ændringer af overvågede sider',
+'tog-enotifminoredits' => 'Send mig også en e-mail ved mindre ændringer af sider og filer på min overvågningsliste',
 'tog-enotifrevealaddr' => 'Vis min e-mail-adresse i mails med besked om ændringer',
 'tog-shownumberswatching' => 'Vis antal brugere, der overvåger',
 'tog-oldsig' => 'Nuværende signatur:',
@@ -311,7 +311,7 @@ $messages = array(
 'category-article-count-limited' => 'Kategorien indeholder {{PLURAL:$1|den nedenstående side|de nedenstående $1 sider}}.',
 'category-file-count' => 'Denne kategori indeholder {{PLURAL:$2|kun den nedenstående fil.|{{PLURAL:$1|den nedenstående fil|de nedenstående $1 filer}} af i alt $2.}}',
 'category-file-count-limited' => 'Kategorien indeholder {{PLURAL:$1|den nedenstående fil|de nedenstående $1 filer}}.',
-'listingcontinuesabbrev' => ' forts.',
+'listingcontinuesabbrev' => 'forts.',
 'index-category' => 'Indekserede sider',
 'noindex-category' => 'Ikke-indekserede sider',
 'broken-file-category' => 'Sider med brudte filhenvisninger',
@@ -543,6 +543,8 @@ Gør venligst en [[Special:ListUsers/sysop|administrator]] opmærksom på det, o
 'cannotdelete' => 'Kunne ikke slette siden eller filen "$1".
 Den kan være blevet slettet af en anden.',
 'cannotdelete-title' => 'Kan ikke slette siden "$1"',
+'delete-hook-aborted' => 'Sletningen blev afbrudt af en programfunktion.
+Der var ikke nogen forklaring.',
 'badtitle' => 'Forkert titel',
 'badtitletext' => 'Den ønskede sides titel var ikke tilladt, tom eller siden er forkert henvist fra en {{SITENAME}} på et andet sprog.',
 'perfcached' => 'Følgende data er gemt i cachen, der muligvis ikke er helt opdateret. Der gemmes højst {{PLURAL:$1|ét resultat|$1 resultater}} i cachen.',
@@ -2223,7 +2225,7 @@ Bekræft venligst at du virkelig vil gøre dette, at du forstår konsekvenserne,
 ** Overtrædelse af ophavsret
 ** Hærværk',
 'delete-edit-reasonlist' => 'Rediger sletningsårsager',
-'delete-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset blevet for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.',
+'delete-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset, for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.',
 'delete-warning-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}} versioner, slettes den kan det forstyrre driften af {{SITENAME}}, gå forsigtigt frem.',
 
 # Rollback
@@ -3723,6 +3725,7 @@ Ellers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføj
 'api-error-empty-file' => 'Den fil du indsendte var tom.',
 'api-error-emptypage' => 'Det er ikke tilladt at oprette nye, tomme sider.',
 'api-error-fetchfileerror' => 'Intern fejl: noget gik galt under hentningen af filen.',
+'api-error-fileexists-forbidden' => 'En fil med navnet "$1" findes allerede, og den kan ikke overskrives.',
 'api-error-file-too-large' => 'Den fil du indsendte var for stor.',
 'api-error-filename-tooshort' => 'Filnavnet er for kort.',
 'api-error-filetype-banned' => 'Denne type fil er ikke tilladt.',
index 6344d99..54ca95c 100644 (file)
@@ -754,7 +754,7 @@ Falls dies nicht  zutrifft, hast du eventuell einen Fehler in der Software gefun
 'cannotdelete' => 'Die Seite oder Datei „$1“ kann nicht gelöscht werden.
 Möglicherweise wurde sie bereits von jemand anderem gelöscht.',
 'cannotdelete-title' => 'Seite „$1“ kann nicht gelöscht werden',
-'delete-hook-aborted' => 'Die Löschung wurde von einer Softwareerweiterung zu MediaWiki verhindert.
+'delete-hook-aborted' => 'Die Löschung wurde von einer Programmerweiterung zu MediaWiki verhindert.
 Es ist hierzu keine Erklärung verfügbar.',
 'badtitle' => 'Ungültiger Titel',
 'badtitletext' => 'Der Titel der angeforderten Seite ist ungültig, leer oder ein ungültiger Sprachlink von einem anderen Wiki.',
@@ -1622,6 +1622,7 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'right-writeapi' => 'Benutzung der writeAPI',
 'right-delete' => 'Seiten löschen',
 'right-bigdelete' => 'Seiten mit großer Versionsgeschichte löschen',
+'right-deletelogentry' => 'Einzelne Logbuch-Einträge löschen und wiederherstellen',
 'right-deleterevision' => 'Einzelne Versionen einer Seite löschen und wiederherstellen',
 'right-deletedhistory' => 'Gelöschte Versionen in der Versionsgeschichte ansehen, ohne zugehörigen Text',
 'right-deletedtext' => 'Gelöschte Texte und Versionsunterschiede zwischen gelöschten Versionen ansehen',
@@ -1935,6 +1936,7 @@ Wenn das Problem weiter besteht, informiere einen [[Special:ListUsers/sysop|Syst
 'lockmanager-fail-releaselock' => 'Die Sperre für „$1“ konnte nicht freigegeben werden.',
 'lockmanager-fail-db-bucket' => 'Es konnte mit Sammelabruf $1 keine ausreichende Anzahl an Verbindungen zu Sperrdatenbanken hergestellt werden.',
 'lockmanager-fail-db-release' => 'Die Sperren auf Datenbank $1 konnten nicht freigegeben werden.',
+'lockmanager-fail-svr-acquire' => 'Die Sperren auf Server $1 konnte nicht abgerufen werden.',
 'lockmanager-fail-svr-release' => 'Die Sperren auf Server $1 konnten nicht freigegeben werden.',
 
 # ZipDirectoryReader
@@ -2467,6 +2469,8 @@ Rückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'rollback' => 'Zurücksetzen der Änderungen',
 'rollback_short' => 'Zurücksetzen',
 'rollbacklink' => 'Zurücksetzen',
+'rollbacklinkcount' => '{{PLURAL:$1|Eine Version|$1 Versionen}} zurücksetzen',
+'rollbacklinkcount-morethan' => 'Mehr als {{PLURAL:$1|eine Version|$1 Versionen}} zurücksetzen',
 'rollbackfailed' => 'Zurücksetzen gescheitert',
 'cantrollback' => 'Die Änderung kann nicht zurückgesetzt werden, da es keine früheren Autoren gibt.',
 'alreadyrolled' => 'Das Zurücksetzen der Änderungen von [[User:$2|$2]] ([[User talk:$2|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) an [[:$1]] ist gescheitert, da in der Zwischenzeit ein anderer Benutzer die Seite geändert hat.
@@ -3788,7 +3792,7 @@ Bitte nutze die reguläre Vorschau.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Bearbeitungen der letzten {{PLURAL:$1|Sekunde|$1 Sekunden}} werden in dieser Liste noch nicht angezeigt.',
-'lag-warn-high' => 'Auf Grund hoher Datenbankauslastung werden die Bearbeitungen der letzten {{PLURAL:$1|Sekunde|$1 Sekunden}} in dieser Liste noch nicht angezeigt.',
+'lag-warn-high' => 'Auf Grund hoher Datenbankauslastung werden die Bearbeitungen der letzten {{PLURAL:$1|Sekunde|$1 Sekunden}} noch nicht in dieser Liste angezeigt.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Deine Beobachtungsliste enthält {{PLURAL:$1|einen Eintrag|$1 Einträge}}. Die Diskussionsseiten wurden dabei nicht mitgezählt.',
@@ -3861,8 +3865,8 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'version-software' => 'Installierte Software',
 'version-software-product' => 'Software',
 'version-software-version' => 'Version',
-'version-entrypoints' => 'Eingangspunkt-URLs',
-'version-entrypoints-header-entrypoint' => 'Eingangspunkt',
+'version-entrypoints' => 'URLs der Einstiegspunkte',
+'version-entrypoints-header-entrypoint' => 'Einstiegspunkt',
 'version-entrypoints-header-url' => 'URL',
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Artikelpfad]',
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Skriptpfad]',
@@ -4066,6 +4070,4 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Die Sperren auf Server $1 konnte nicht abgerufen werden.',
 );
index 2fc5505..d95f59f 100644 (file)
@@ -285,20 +285,20 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Qısıman be tıknayışê serrêze ra ebe gocega raşte bıvurne (JavaScript lazımo)',
 'tog-showtoc' => 'Tabloyê tedeesteyan bımocne (de pelanê be hirê sernuşteyan ra vêşêri de)',
 'tog-rememberpassword' => 'Parola mı nê cıgeyraoği de bia xo viri (seba tewr zêde $1 {{PLURAL:$1|roce|rocan}}).',
-'tog-watchcreations' => 'Pelê ke mı afernayê, lista mına seyrkerdışi ke',
-'tog-watchdefault' => 'Pelê ke mı vurnayê, lista mına seyrkerdışi ke',
-'tog-watchmoves' => 'Pelê ke mı kırışnayê, lista mına seyrkerdışi ke',
-'tog-watchdeletion' => 'Pelê ke mı esterıtê, lista mına seyrkerdışi ke',
+'tog-watchcreations' => 'Pelê ke mı afernayê u dosyeyê ke mı bar kerdê lista mına seyrkerdışi ke',
+'tog-watchdefault' => 'Pel u dosyeyê ke mı vurnayê lista mına seyrkerdışi ke',
+'tog-watchmoves' => 'Pel u dosyeyê ke mı kırıştê lista mına seyrkerdışi ke',
+'tog-watchdeletion' => 'Pel u dosyeyê ke mı seterıtê lista mına seyrkerdışi ke',
 'tog-minordefault' => "Vurnayışanê xo pêrune ''vurnayışo qıckek'' nışan bıde",
 'tog-previewontop' => 'Verqayti pela nuştışi ser de bımocne',
 'tog-previewonfirst' => 'Vurnayışo verên de verqayti tım bımocne',
 'tog-nocache' => 'Pelanê cıgeyraoği mia xo viri',
-'tog-enotifwatchlistpages' => 'Pela ke ez seyr kenan eke vurnayê mı rê e-poste bırışe',
+'tog-enotifwatchlistpages' => 'Jû pele ya zi dosyaya ke lista mına seyrkerdışi de vurnayê mı rê e-poste bırışe',
 'tog-enotifusertalkpages' => 'Pela mına werênayışi ke vurnayê mı rê e-poste bırışe',
-'tog-enotifminoredits' => 'Vurnayışanê qıckekan de zi mı rê e-poste bırışe',
+'tog-enotifminoredits' => 'Vurnayışanê qıckekanê pelan u dosyeyan de zi mı rê e-poste bırışe',
 'tog-enotifrevealaddr' => 'Adresa e-posteyê mı posteyê xeberan de bımocne',
 'tog-shownumberswatching' => 'Amarê karberanê seyrkerdoğan bımocne',
-'tog-oldsig' => 'İmza mewcude:',
+'tog-oldsig' => 'İmzaya şıma:',
 'tog-fancysig' => 'İmza rê mameley wikimeqaley bıke (bê gıreyo otomatik)',
 'tog-externaleditor' => 'Editorê teberi standard bıxebetne (tenya seba ekspertano, komputerê şıma de eyarê xısusiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato vêşêr.])',
 'tog-externaldiff' => 'Têverşanayışan pê programê teberi vıraze (tenya seba ekspertano, komputerê şıma de eyarê xısusiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato vêşêr.])',
@@ -405,11 +405,11 @@ $messages = array(
 
 'about' => 'Heqa',
 'article' => 'Wesiqe',
-'newwindow' => '(zerrey pençereyê dê newey de beno a)',
+'newwindow' => '(Teqa da newi de abêno)',
 'cancel' => 'Bıterkne',
 'moredotdotdot' => 'Vêşêri...',
 'mypage' => 'Pela mı',
-'mytalk' => 'Werênayışê mı',
+'mytalk' => 'Werênayışi',
 'anontalk' => 'Pela werênayışê nê IPy',
 'navigation' => 'Pusula',
 'and' => '&#32;u',
@@ -458,7 +458,7 @@ $messages = array(
 'print' => 'Çap ke',
 'view' => 'Bıvêne',
 'edit' => 'Bıvurnên',
-'create' => 'Vırazê',
+'create' => 'Vıraze',
 'editthispage' => 'Ena pele bıvurne',
 'create-this-page' => 'Na pele bınuse',
 'delete' => 'Besterne',
@@ -558,7 +558,7 @@ $1',
 'thisisdeleted' => 'Bıvêne ya zi $1 peyser bia?',
 'viewdeleted' => '$1 bıvêne?',
 'restorelink' => '{{PLURAL:$1|yew vurnayışo esterıte|$1 vurnayışê esterıtey}}',
-'feedlinks' => 'Cı resne:',
+'feedlinks' => 'Warikerdış:',
 'feed-invalid' => 'Qeydey cıresnayışê  beğşi nêvêreno.',
 'feed-unavailable' => 'Cıresnayışê şebekey çıniyê',
 'site-rss-feed' => '$1 Cıresnayışê RSSi',
@@ -635,6 +635,8 @@ Kerem kerê, naye be namey ''URL''i yew [[Special:ListUsers/sysop|karber]]i ra v
 'cannotdelete' => 'Pel  "$1" o ke şıma nişane kerd hewn a neşı.
 Belka yewna ten kerdo hewn a.',
 'cannotdelete-title' => 'şıma  "$1" nê şenê besternê.',
+'delete-hook-aborted' => 'Esterıtışi terefê çengeli ra ibtal bi.
+Qet tesrih beyan nêbi.',
 'badtitle' => 'Sernameo xırabın',
 'badtitletext' => 'Sernamey pela ke şıma waşt, nêvêrd, thalo/vengo ya ki zıwano miyanêno ğelet gırêdae ya ki sernamey wiki.
 Beno ke, tede yew ya zi zêdê işareti estê ke sernaman de nêxebetiyenê.',
@@ -670,6 +672,8 @@ Sebeb: "\'\'$2\'\'".',
 Xızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: "$3".',
 'invalidtitle-knownnamespace' => 'Canemey "$2" u metnê "$3" xırabo',
 'invalidtitle-unknownnamespace' => 'Sernameye nêşınasiya yana amraiya canameyo  $1 u metno "$2" xırab',
+'exception-nologin' => 'Tı cı nêkewtê',
+'exception-nologin-text' => 'Na pele ya zi nê karkerdışi rê nê wiki de cıkewtış icab keno.',
 
 # Virus scanner
 'virus-badscanner' => "Eyaro şaş: no virus-cıgerayox nêzanyeno: ''$1''",
@@ -697,7 +701,7 @@ Hesabê şıma biyo a.
 'loginprompt' => "Cıkewtena {{SITENAME}}i rê gani ''cookies'' akerdey bê.",
 'userlogin' => 'Cı kewe / hesab vıraze',
 'userloginnocreate' => 'Cı kewe',
-'logout' => 'Bıveciyên',
+'logout' => 'Veciyayış',
 'userlogout' => 'Bıveciyên',
 'notloggedin' => 'Hesab akerde niyo',
 'nologin' => "Hesabê şıma çıniyo? '''$1'''.",
@@ -796,9 +800,9 @@ Bıne vındere u newe ra dest pê bıkere.',
 'resetpass-temp-password' => 'parolayo muweqet:',
 
 # Special:PasswordReset
-'passwordreset' => 'Parola ancia bınuse',
+'passwordreset' => 'Parola reset ke',
 'passwordreset-text' => 'Nê formi melumatê hesab dê şıma birê şıma viri deye pırkerê.',
-'passwordreset-legend' => 'Parola ancia bınuse',
+'passwordreset-legend' => 'Parola reset ke',
 'passwordreset-disabled' => 'Parola reset kerdış ena viki sera qefılneyayo.',
 'passwordreset-pretext' => '{{PLURAL:$1||Enê cerenan ra jeweri defiye de}}',
 'passwordreset-username' => 'Namey karberi:',
@@ -831,7 +835,7 @@ Parola vêrdiye: $2',
 'changeemail-text' => 'Şıma qayılê ke e-postay xo bıvurnê se enê formi pırkerê. Qandê araşt kerdışi zi parolay xo şıma de bınusnê',
 'changeemail-no-info' => 'Resayışê ena pela rê Dekewtış icab keno.',
 'changeemail-oldemail' => 'E-postay şımaya newki:',
-'changeemail-newemail' => 'E-postay şımayê newe:',
+'changeemail-newemail' => 'E-posta adresiyo newe:',
 'changeemail-none' => '(Çıno)',
 'changeemail-submit' => 'E-postay xo bıvurne',
 'changeemail-cancel' => 'Bıterkne',
@@ -861,11 +865,11 @@ Parola vêrdiye: $2',
 'subject' => 'Mewzu/serrêze:',
 'minoredit' => 'Vurnayışo qıckeko',
 'watchthis' => 'Ena pele seyr ke',
-'savearticle' => 'Ena pele qeyd ke',
+'savearticle' => 'Peler qeyd ke',
 'preview' => 'Verqayt',
-'showpreview' => 'Verqayti bımocne',
-'showlivepreview' => 'Live preview',
-'showdiff' => 'Vurnayışan bımocne',
+'showpreview' => 'Verqayti bıvin',
+'showlivepreview' => 'Verqayto cıwın',
+'showdiff' => 'Vurnayışa bıvin',
 'anoneditwarning' => 'Teme!: Şıma bı hesabê xo nıkewtê cı. Hurêndiya namey şıma dı IP-adresa şıma qeyd bena u asena.',
 'anonpreviewwarning' => "''Ti hama nicikewte. Qeyd kerdiş zerre tarixê pele de adresê IP yê tu keyd keno.''",
 'missingsummary' => "'''DİQET:''' Şıma kılmnuşte nıkerd.
@@ -888,20 +892,20 @@ Sebebê musade nêdayiş: \'\'$2\'\'.
 Eke şıma sebebê musade nêdayiş ri itiraz keni, $1 de ya zi yewna [[{{MediaWiki:Grouppage-sysop}}|xızmkar]] de şıma eşkeni na mesela de qıse bıkeri. [[Special:Preferences|Tercihlerim]] eke şıma na qısme de pey yew e-postayo raşt nêkewte cı, şıma xususiyetê "Karber ri e-posta bışaw" ra n3eeşkeni istifade bıkeri, eke şıma tercihanê xo bıerz zerreyê e-postayê xo şıma hıni eşkeni e-posta bışawi.
 <br />IP adresê şıma yo nıkayın $3, numrayo musade nêdayiş #$5.
 <br />Eke şıma qayile yew xızmkar çiko bıpers, no malumatan not bıkere ney şıma ri lazım beni.',
-'autoblockedtext' => 'IP adresê şıma otomotikmen verniya grewya, çunke yewna ten $1 no numra şuxulnayene u no numra zi verniye gırewte bi.
-Sebeb noyo:
+'autoblockedtext' => 'IP adresê şıma otomotikmen kerda kılit, çıkı $1 verniya nê hesabi grota.
+Sebebê cı zi:
 
 :\'\'$2\'\'
 
-* Dest pê kerdışê musade nêdayiş: $8
-* Qedyayişê musade nêdayiş: $6
-* Qayili bloke bıbo: $7
+* Dest pê kerdışê verni grotışi: $8
+* Qedyayişê verni grotışi: $6
+* Qayile ke bloqe bıbo: $7
 
-Şıma qayile qey weri kewtışê na mesela, pê $1 ya zi [[{{MediaWiki:Grouppage-sysop}}|serkaran ra]] yew de eşkeni irtibat bıkeri.
+Şıma qayile qey weri kewtışê na mesela,  $1 ya na [[{{MediaWiki:Grouppage-sysop}}|serkaran ra]] yewi ra şenê irtibat kewê.
 
-Not, [[Special:Preferences|Tercihê karberi]] eke şıma yew e-postayo raşt nênuşt şıma nêeşkeni na xususiyet ra "karber ri e-posta bışıraw" istifade bıkeri.
+Not, [[Special:Preferences|Tercihê karberi]] eke şıma yew e-postayo raşt nênuşt se şıma nêşenê na xususiyet ra "karber rê e-posta bırışê" istifade bıkeri.
 
-IP numre şıma yo nıkayın $3 u ID şıma yo ke musade nêdaye #$5. Eke şıma yew tehqiqat vırazeni malumatê corınan xo vir ra mekere.',
+IP adresiya şıma yo nıkayên $3 u ID şıma yo ke musade nêdaye #$5. Eke şıma yew tehqiqat vırazeni malumatê corênan xo vira mekerê.',
 'blockednoreason' => 'sebeb nidaniyo',
 'whitelistedittext' => 'Eka ti wazene binusi ti gani  $1.',
 'confirmedittext' => 'Eka ti wazene binusi, adresê xo e-maili confirme bike.
@@ -1024,7 +1028,7 @@ Hewna kerde aseno.',
 'edit-no-change' => 'Vurnayişê şıma qebul nêbı, çunke nuşte de yew vurnayiş n3evıraziya.',
 'edit-already-exists' => 'Pelo newe nêvıraziyeno.
 Pel ca ra esto.',
-'defaultmessagetext' => 'Normal metnê nuşti',
+'defaultmessagetext' => 'Hesıbyaye metne mesaci',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Hişyari: No pel de fonksiyoni zaf esti.
@@ -1222,7 +1226,7 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 
 # Diffs
 'history-title' => 'Rewizyonê $1:',
-'difference-title' => 'Ferkê revizyonan de "$1"',
+'difference-title' => 'Pela "$1" ferqê çım ra viyarnayışan',
 'difference-title-multipage' => 'Ferkê pelan dê "$1" u "$2"',
 'difference-multipage' => '(Ferqê pelan)',
 'lineno' => 'Rêza $1i:',
@@ -1261,10 +1265,10 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'searchprofile-advanced' => 'Reverşiyoğî',
 'searchprofile-articles-tooltip' => '$1 de bigêre',
 'searchprofile-project-tooltip' => '$1 de bigêre',
-'searchprofile-images-tooltip' => 'Qe doyayî bigêre',
+'searchprofile-images-tooltip' => 'Dosya cı geyr',
 'searchprofile-everything-tooltip' => 'Tedeestey hemine cı geyre (pelanê mınaqeşey zi tey)',
 'searchprofile-advanced-tooltip' => 'qe cayê nimeyî bigêre',
-'search-result-size' => '$1 ({{PLURAL:$2|1 kelime|$2 kelimey}})',
+'search-result-size' => '$1 ({{PLURAL:$2|1 Çekuy|$2 çekuyê}})',
 'search-result-category-size' => '{{PLURAL:$1|1 eza|$1 ezayan}} ({{PLURAL:$2|1 ketegoriyê bini|$2 kategiryanê binan}}, {{PLURAL:$3|1 dosya|$3 dosyayan}})',
 'search-result-score' => 'Eleqa: $1%',
 'search-redirect' => '(ber $1)',
@@ -1285,7 +1289,7 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'showingresultsheader' => "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' of '''$3'''}} qe '''$4'''",
 'nonefound' => "'''Teme''': Teyna tay namecayan cıgeyro beno.
 Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mınaqeşe, templatenan, ucb.) ya zi cıgeyro ser namecay ki tı wazeni.",
-'search-nonefound' => 'Ser ena çekuye de netice çino',
+'search-nonefound' => 'Zey cıgeyrayış de şıma netice nêvineya',
 'powersearch' => 'Cıgeyrayışo hera',
 'powersearch-legend' => 'Cıgeyrayışo hera',
 'powersearch-ns' => 'Cayanê nameyan de cıgeyrayış:',
@@ -1308,7 +1312,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 
 # Preferences page
 'preferences' => 'Tercihi',
-'mypreferences' => 'Tercihê mı',
+'mypreferences' => 'Tercihi',
 'prefs-edits' => 'Amarê vurnayışan:',
 'prefsnologin' => 'Şıma cıkewtış nêvıraşto',
 'prefsnologintext' => 'Şıma gani be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cikewte]</span> ke tercihanê karberi xo eyar bıkerê.',
@@ -1336,7 +1340,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'prefs-rendering' => 'Asayış',
 'saveprefs' => 'Star ke',
 'resetprefs' => 'Vurnayışê ke qeyd nêbiy, pak ke',
-'restoreprefs' => 'Sazanê standardan pêron newe dere barke',
+'restoreprefs' => 'Sazanê hesıbyaya pêron newe dere barke',
 'prefs-editing' => 'Cay pela nustısi',
 'prefs-edit-boxsize' => 'Ebatê pencereyê vurnayîşî.',
 'rows' => 'Xeti:',
@@ -1347,7 +1351,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'stub-threshold-disabled' => 'Dezge ra vıcyaya',
 'recentchangesdays' => 'Rocê ke vurnayışanê peyênan de bıasê:',
 'recentchangesdays-max' => 'Tewr zaf $1 {{PLURAL:$1|roc|roci}}',
-'recentchangescount' => 'Amarê vurnayışiê ke standard bıasê:',
+'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-token' => 'Eke no ca pê kılito dızdeni/miyanki pırr bo, lista şımawa seyrkerdışi rê yew cıresnayışê RSSi vıraziyeno.
 Her kamo ke nê kılitê nê cay zaneno, şeno lista şımawa seyrkerdışi ki bıwano, coke ra yewo sağlem weçine.
@@ -1374,7 +1378,7 @@ Etıya şıma rê yew kılito raştameo ke şıma şenê bıgurenê/bıxebetnê:
 'prefs-searchoptions' => 'Tercihê cıgeyrayışi',
 'prefs-namespaces' => 'Caê namey',
 'defaultns' => 'Eke heni, enê cayanê namey de cı geyre (sae ke):',
-'default' => 'default',
+'default' => 'hesıbyaye',
 'prefs-files' => 'Dosyey',
 'prefs-custom-css' => 'CSSê xasi',
 'prefs-custom-js' => 'JSê xasi',
@@ -1457,22 +1461,22 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 # Groups
 'group' => 'Grup:',
 'group-user' => 'Karberi',
-'group-autoconfirmed' => 'Karbero ke xob xo biyê araşt',
+'group-autoconfirmed' => 'Karberê ke xob xo biyê araşt',
 'group-bot' => 'Boti',
 'group-sysop' => 'İdarekari',
 'group-bureaucrat' => 'Burokrati',
-'group-suppress' => 'Kontroli',
+'group-suppress' => 'Çımpawiyayeni',
 'group-all' => '(pêro)',
 
 'group-user-member' => '{{GENDER:$1|karber}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|Karbero ke xob xo biyê araşt}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|Karberê ke xob xo biyê araşt}}',
 'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => '{{GENDER:$1|İdarekar}}',
 'group-bureaucrat-member' => '{{GENDER:$1|buroqrat}}',
 'group-suppress-member' => '{{GENDER:$1|Temaşekar}}',
 
 'grouppage-user' => '{{ns:project}}:Karberi',
-'grouppage-autoconfirmed' => '{{ns:project}}:Karbero ke xob xo biyê araşt',
+'grouppage-autoconfirmed' => '{{ns:project}}:Karberê ke xob xo biyê araşt',
 'grouppage-bot' => '{{ns:project}}:Boti',
 'grouppage-sysop' => '{{ns:project}}:İdarekeri',
 'grouppage-bureaucrat' => '{{ns:project}}:Burokrati',
@@ -1503,6 +1507,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-writeapi' => 'İstıfadey APIyê nuştey',
 'right-delete' => 'Pele bestere',
 'right-bigdelete' => 'Pelanê be tarixanê dergan bestere',
+'right-deletelogentry' => 'besternayış u mebesternayışa re qeyde definayışê xısusi',
 'right-deleterevision' => 'Vurnayışê xısusiyê ke ê pelanê, inan bestere ya peyser bia',
 'right-deletedhistory' => 'Qeydanê tarixanê esterıteyan de qayt ke, bê nuştey inan',
 'right-deletedtext' => 'Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke',
@@ -1590,7 +1595,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'recentchanges-summary' => 'Ena pele de wiki sero vurnayışê peyêni teqib ke',
 'recentchanges-feed-description' => 'Ena feed dı vurnayişanê tewr peniyan teqip bık.',
 'recentchanges-label-newpage' => 'Enê vurnayışi pelaya newi vıraşt',
-'recentchanges-label-minor' => 'Eno yew edîto qickek o',
+'recentchanges-label-minor' => 'Eno vurnayışo do qickek o',
 'recentchanges-label-bot' => 'Eno vurnayış terefê yew boti ra vıraziyo',
 'recentchanges-label-unpatrolled' => 'Eno edît patrol nibiyo',
 'rcnote' => "Bıni dı {{PLURAL:$1|is '''1''' vurnayış|peni '''$1''' vurnayışan estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetani $5, $4.",
@@ -1607,7 +1612,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'hist' => 'verên',
 'hide' => 'Bınımne',
 'show' => 'Bımocne',
-'minoreditletter' => 'werdı',
+'minoreditletter' => 'w',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
 'unpatrolledletter' => '!',
@@ -1813,6 +1818,7 @@ Eke problem dewam kerd [[Special:ListUsers/sysop|serkari]] de irtibat kewe.',
 'lockmanager-fail-releaselock' => 'Dosyay kıliti nêvıradeyê "$1".',
 'lockmanager-fail-db-bucket' => 'Kılite malumat da sitıl de $1 irtibat kewtışi re bes nêkeno.',
 'lockmanager-fail-db-release' => 'Malumatê kıliti nêvıradeyê $1.',
+'lockmanager-fail-svr-acquire' => 'Kılitê teqdimkarê $1i nêvêniyenê.',
 'lockmanager-fail-svr-release' => 'Wasterê kıliti nêvıradeyê $1.',
 
 # ZipDirectoryReader
@@ -1872,7 +1878,7 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 
 'license' => 'Lisans:',
 'license-header' => 'Lisans',
-'nolicense' => 'Çik niweçiyeyo',
+'nolicense' => 'Theba nêweçineya',
 'license-nopreview' => '(verqeydî çin o)',
 'upload_source_url' => '(yew URLê raştî, şar rê akerde yo)',
 'upload_source_file' => '(komputerê ti de yew dosya)',
@@ -1905,7 +1911,7 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'filehist-user' => 'Karber',
 'filehist-dimensions' => 'Dimensiyoni',
 'filehist-filesize' => 'Ebatê dosyayî',
-'filehist-comment' => 'Vatış',
+'filehist-comment' => 'Mışewre',
 'filehist-missing' => 'Dosya nieseno',
 'imagelinks' => 'Gurenayışê dosya',
 'linkstoimage' => 'Ena {{PLURAL:$1|pela|$1 pela}} gıreye ena dosya:',
@@ -1964,7 +1970,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 # MIME search
 'mimesearch' => 'MIME bigêre',
 'mimesearch-summary' => 'no pel, no tewır dosyayan MIME kontrol kena. kewteye: tipa zerreyi/tipa bıni, e.g. <tt>resim/jpeg</tt>.',
-'mimetype' => 'Tipê MIME:',
+'mimetype' => 'Babetê NIME',
 'download' => 'bar ke',
 
 # Unwatched pages
@@ -2111,7 +2117,7 @@ Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gı
 'specialloguserlabel' => 'Kerdoğ:',
 'speciallogtitlelabel' => 'Menzil (sernuşte yana karber):',
 'log' => 'Qeydi',
-'all-logs-page' => 'Loganê umum yê hemî',
+'all-logs-page' => 'Umumi qeydi pêro',
 'alllogstext' => 'qey {{SITENAME}}i mocnayişê heme rocaneyani.
 tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyna hessasiyê herfa pil u qıciyi) bıweçine u esayiş qıc kerê.',
 'logempty' => 'qaydi de weina yew malumat çino',
@@ -2151,9 +2157,9 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 'special-categories-sort-abc' => 'alfabetik rêz ker',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'Îştirakê karberî wederna',
+'deletedcontributions' => 'İştiraqê karberan de besternayına',
 'deletedcontributions-title' => 'Îştirakê karberî wederna',
-'sp-deletedcontributions-contribs' => 'îştirakî',
+'sp-deletedcontributions-contribs' => 'iştıraqi',
 
 # Special:LinkSearch
 'linksearch' => 'Gıreyê teberi cı geyrê',
@@ -2172,7 +2178,7 @@ qaydeyê destek biyayeyi: <tt>$1</tt>',
 'listusers-blocked' => '(blok biy)',
 
 # Special:ActiveUsers
-'activeusers' => 'Listeyê karberî ke aktiv o.',
+'activeusers' => 'Listey karberan de aktivan',
 'activeusers-intro' => 'Ena yew listeye ke karberanê ke $1 {{PLURAL:$1|roc|rocan}} de îştiraq kerdo înan mocneno.',
 'activeusers-count' => 'ney {{PLURAL:$3|rocê peyin de|$3 rocê peyin de}} $1 {{PLURAL:$1|vuriyayiş|vuriyayiş}}',
 'activeusers-from' => 'karber ê ke pê ney destpêkeni ramocın:',
@@ -2232,7 +2238,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'emailsend' => 'bıerşawê/bıruşnê',
 'emailccme' => 'kopyayekê mesaji mı re bıerşaw',
 'emailccsubject' => '$2 kopyaya mesaj a ke şıma erşawıto/a $1:',
-'emailsent' => 'e-mail erşawiya/ruşiya',
+'emailsent' => 'E-posta bırşê',
 'emailsenttext' => 'e-mailê şıma erşawiya/ruşiya',
 'emailuserfooter' => 'na e-posta hetê ıney ra $1 erşawiya $2 no/na karberi/e re. pê fonksiyonê "Karberi/e re e-posta bıerşaw" no {{SITENAME}} keyepeli erşawiya.',
 
@@ -2243,11 +2249,11 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 
 # Watchlist
 'watchlist' => 'lista mına seyr-kerdışi',
-'mywatchlist' => 'Lista mına seyrkerdışi',
+'mywatchlist' => 'Listey seyrkerdışi',
 'watchlistfor2' => 'Qandê $1 ($2)',
 'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.',
 'watchlistanontext' => 'qey vurnayişê maddeya listeya temaşakerdişi $1.',
-'watchnologin' => 'hesab akerde niyo',
+'watchnologin' => 'Şıma de nêkewtê',
 'watchnologintext' => 'qey vurnayişê listeya temaşakerdışi [[Special:UserLogin|gani şıma hesab akeri]].',
 'addwatch' => 'Listeyê seyri deke',
 'addedwatchtext' => 'Ma pele "[[:$1]]" zerri [[Special:Watchlist|watchlist]]ê tı kerd de.
@@ -2256,7 +2262,7 @@ Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni. Hem zi çı dem
 'removedwatchtext' => 'Ena pela "[[:$1]]" biya wedariya [[Special:Watchlist|listeyê seyr-kerdışi şıma]].',
 'watch' => 'bıgê seyr-kerdış',
 'watchthispage' => 'Ena pele seyr ke',
-'unwatch' => 'Endi seyr meke',
+'unwatch' => 'Seyr meke',
 'unwatchthispage' => 'temaşa kerdışê peli vındarn.',
 'notanarticle' => 'mebhesê peli niyo',
 'notvisiblerev' => 'Revizyon esteriyayo',
@@ -2315,7 +2321,7 @@ qey hemkari u pêşniyazi:
 
 # Delete
 'deletepage' => 'Pele bıestere',
-'confirm' => 'Konfirme bike',
+'confirm' => 'Testiq ke',
 'excontent' => "behso kêm: '$1'",
 'excontentauthor' => "behso kêm: '$1' no/na ('[[Special:Contributions/$2|$2]]' karber/e têna paşt dayo/a)",
 'exbeforeblank' => "behsê verê esteriyayişi: '$1'",
@@ -2351,6 +2357,8 @@ bı diqqet dewam kerê.',
 'rollback' => 'vurnayişan tepiya bıger',
 'rollback_short' => 'Peyser bia',
 'rollbacklink' => 'peyser bia',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|vurnayış|vurnayışi}} peyd gıroti',
+'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|vurnayış|vuranyışi}} tewr peyd gırot',
 'rollbackfailed' => 'Peyserardış nêbi',
 'cantrollback' => 'karbero peyin têna paşt dayo, no semedi ra vuriyayiş tepiya nêgeriyeni.',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}} hetê [[Special:Contributions/$2|{{int:contribslink}}]]) ra pelê ıney[[:$1]] de vurnayiş biyo u no vurnayiş tepiya nêgeriyeno;
@@ -2428,7 +2436,7 @@ Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading p
 # Restrictions (nouns)
 'restriction-edit' => 'Bıvurne',
 'restriction-move' => 'Ahûln',
-'restriction-create' => 'Viraze',
+'restriction-create' => 'Vıraze',
 'restriction-upload' => 'Barke',
 
 # Restriction levels
@@ -2498,7 +2506,7 @@ $1',
 # Contributions
 'contributions' => 'İştirakê karberi',
 'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştıraqê mı',
+'mycontris' => 'İştıraqi',
 'contribsub2' => 'Qandê $1 ($2)',
 'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
 'uctop' => '(ser)',
@@ -2551,7 +2559,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 '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' => 'Adresê IPî ya zi namayê karberî',
-'ipbexpiry' => 'Çi wext de qediyeno:',
+'ipbexpiry' => 'Qedyayış:',
 'ipbreason' => 'Sebeb:',
 'ipbreasonotherlist' => 'Sebebê bini',
 'ipbreason-dropdown' => '*sebebê verni-grewtışi yê pêroyi
@@ -2621,7 +2629,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'blocklink' => 'kılit ke',
 'unblocklink' => 'ake',
 'change-blocklink' => 'kılit-kerdışi bıvurne',
-'contribslink' => 'iştıraki',
+'contribslink' => 'iştıraqi',
 'emaillink' => 'e-poste bırışe',
 'autoblocker' => 'Şıma otomatikmen kılit biy, çıke adresa şımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gureniyena.
 Sebebê kılit-biyayışê $1\'i: "$2"o',
@@ -2659,7 +2667,7 @@ labele parçeya benateyê na $2 adresibi u ey ra ver-geryayo u şıma eşkeni no
 'proxyblocker' => 'blokarê proxyi',
 'proxyblocker-disabled' => 'Eno fonksiyon nêxebetiyeno.',
 'proxyblockreason' => 'IPadresa şıma yew proxyo akerdeyo u ey ra verniyê ey geriya.',
-'proxyblocksuccess' => 'Kar bi temam.',
+'proxyblocksuccess' => 'Qeyd ke.',
 'sorbs' => 'DNSBL',
 'sorbsreason' => 'IP adresa şıma, hetê no {{SITENAME}} keyepeli ra  DNSBL de proxy hesibyayo u liste biyo.',
 'sorbs_create_account_reason' => 'IP adresa şıma, hetê no translatewiki.net keyepeli ra DNSBL de proxy hesibyayo u liste biyo.
@@ -2725,7 +2733,7 @@ Ma tu ra rica keni, tı en verni dı qontrol bıki u bışıravi.",
 Oturse, tı gani peleyê mınaqeşeyê manually beri.",
 'movearticle' => 'Pele bere:',
 'moveuserpage-warning' => "'''Diqet:''' Ti eka yew pelê karberi beni. Diqet bike teyna pel beni feqat ena pele reyna nameyê newi \"nebeno''.",
-'movenologin' => 'Ti ci nikewt',
+'movenologin' => 'Şıma de nêkewtê',
 'movenologintext' => 'qey vurnayişê nameyê peli şıma gani qeyd kerde u cıkewteyê [[Special:UserLogin|sistemi]] bıbiy.',
 'movenotallowed' => 'desturê şıma çino, şıma pelan bıkırışi',
 'movenotallowedfile' => 'desturê şıma çino, şıma pelan bıkırışi',
@@ -2808,7 +2816,7 @@ ma vaci: qey pelê "[[{{MediaWiki:Mainpage}}]]i " [[{{#Special:Export}}/{{MediaW
 # Namespace 8 related
 'allmessages' => 'Mesacê sistemi',
 'allmessagesname' => 'Name',
-'allmessagesdefault' => 'nuşteyo orjinal',
+'allmessagesdefault' => 'Hesıbyaye metnê mesaci',
 'allmessagescurrent' => 'nuşte yo ke Karyayo',
 'allmessagestext' => 'na liste, listeya mesajê cayê nameyê wikimedya yo.
 eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [//www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
@@ -2845,10 +2853,10 @@ karê zerredayişê benateyê wikiyani[[Special:Log/import|zerreyê rocaneyê k
 'import-interwiki-source' => 'Çime wîkî/pel:',
 'import-interwiki-history' => 'Qe eno pel, revizyonê tarixê hemî kopya bike',
 'import-interwiki-templates' => 'Şablonê hemî dehil bike',
-'import-interwiki-submit' => 'Import bike',
+'import-interwiki-submit' => 'Azare de',
 'import-interwiki-namespace' => 'Destinasyonê canameyî:',
 'import-upload-filename' => 'Nameyê dosyayi:',
-'import-comment' => 'Xulasa:',
+'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}}',
@@ -2908,7 +2916,7 @@ dosyaya emaneti vindbiyo',
 'tooltip-pt-anontalk' => 'vurnayiş ê ke no Ipadresi ra biyo muneqeşa bıker',
 'tooltip-pt-preferences' => 'Tercihê to',
 'tooltip-pt-watchlist' => 'Lista pelanê ke to gırewtê seyrkerdış',
-'tooltip-pt-mycontris' => 'Lista iştırakanê to',
+'tooltip-pt-mycontris' => 'Listey iştıraqa',
 'tooltip-pt-login' => 'Seba cıkewtışi şıma rê dewato; labelê, no zeruri niyo',
 'tooltip-pt-anonlogin' => 'Seba cıkewtışi şıma rê dewato; labelê, no zeruri niyo',
 'tooltip-pt-logout' => 'Bıveciyên',
@@ -2971,7 +2979,7 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 'tooltip-rollback' => '"Peyser biya" be yew tik pela îştirak(an)ê peyên|i(an) peyser ano.',
 'tooltip-undo' => '"Undo" ena vurnayışê newi iptal kena u vurnayışê verni a kena.
 Tı eşkeno yew sebeb bınus.',
-'tooltip-preferences-save' => 'Tercihê mı qeyd ke',
+'tooltip-preferences-save' => 'Terciha qeyd ke',
 'tooltip-summary' => 'Yew xulasaya kilm binuse',
 
 # Metadata
@@ -3005,7 +3013,7 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-header-views' => 'Bıvin',
 'pageinfo-subjectpage' => 'Pele',
 'pageinfo-talkpage' => 'Pelay qıse',
-'pageinfo-watchers' => 'Amarina temaşekaran',
+'pageinfo-watchers' => 'Amariya serykeran',
 'pageinfo-edits' => 'Amarina vurnayışan',
 'pageinfo-authors' => 'Amarina nuştekaran',
 'pageinfo-views' => 'Amarina mocnayışan',
@@ -3271,9 +3279,9 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-imageuniqueid' => 'şınasnameyê resmê xususiyi',
 'exif-gpsversionid' => 'revizyonê GPSyi',
 'exif-gpslatituderef' => 'paralelê zıme û veroci',
-'exif-gpslatitude' => 'paralel',
+'exif-gpslatitude' => 'Heralem',
 'exif-gpslongituderef' => 'meridyenê rocvetış û rocawavi',
-'exif-gpslongitude' => 'meridyen',
+'exif-gpslongitude' => 'Lemen',
 'exif-gpsaltituderef' => 'çımeyê berziyi',
 'exif-gpsaltitude' => 'berzî',
 'exif-gpstimestamp' => "Wextê GPSyi (se'eta atomiki)",
@@ -3354,7 +3362,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-attributionurl' => 'No nuşte çı wext karyayo, şıma ra reca gre dekerê de',
 'exif-preferredattributionname' => 'No nuşte çı wext karyayo, Şıma ra reca morkerê',
 'exif-pngfilecomment' => "Vatışê dosyada PNG'i",
-'exif-disclaimer' => 'Reddê mesuliyeti',
+'exif-disclaimer' => 'Redê mesuliyeti',
 'exif-contentwarning' => 'İkazê zerreki',
 'exif-giffilecomment' => "vatena dosya da GIF'i",
 'exif-intellectualgenre' => 'Babeta çêki',
@@ -3626,7 +3634,7 @@ $8',
 'limitall' => 'hemi',
 
 # E-mail address confirmation
-'confirmemail' => 'Adresê emaîlî xo konfirme bike',
+'confirmemail' => 'Adresê e-posta tesdiq ker',
 'confirmemail_noemail' => 'Yew emaîlê tu raştîyê çin o ke [[Special:Preferences|tercihê karberî]] ayar bike.',
 'confirmemail_text' => 'Qey gurweyayışê e-postayê wikiyi gani veror e-postayê şıma araşt bıbo.
 Adresa şıma re qey erşawıtışê e-postayê araştin, butonê cêrıni pıploxnê.
@@ -3870,7 +3878,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mesac]])',
-'timezone-utc' => 'ŞWC',
+'timezone-utc' => '[[UTC]]',
 
 # Core parser functions
 'unknown_extension_tag' => 'Etiketê ekstensiyon ê "$1"î nizanyeno',
@@ -3979,7 +3987,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 # Special:ComparePages
 'comparepages' => 'Pela miqeyese ke',
 'compare-selector' => 'Revizyonê pele miqayese bike',
-'compare-page1' => 'Pel 1',
+'compare-page1' => 'Pela 1',
 'compare-page2' => 'Pel 2',
 'compare-rev1' => 'Revizyonê 1i',
 'compare-rev2' => 'Revizyonê 2i',
@@ -4039,7 +4047,7 @@ Ena sita dı newke xırabiya teknik esta.',
 'logentry-move-move_redir' => '$1 pela $3 pela da $4 sera hetenayış ra ahulnê',
 'logentry-move-move_redir-noredirect' => '$1 hetenayışê qeydê pela da  $3 ahulnê $4 sero hetenayış vıraşt',
 'logentry-patrol-patrol' => '$1 revizyonê pela da $4 $3 ke kontrol',
-'logentry-patrol-patrol-auto' => '$1 Otomatik revizyonê pela da $4  $3 ke kontrol',
+'logentry-patrol-patrol-auto' => "$1 pelay $3'i rewizyon dê $4 ya kontrol ke",
 'logentry-newusers-newusers' => '$1 deye namey karberi vıraziya',
 'logentry-newusers-create' => '$1 deye namey karberi vıraziya',
 'logentry-newusers-create2' => "$1'i $3 rê hesab vıraşt",
@@ -4072,6 +4080,8 @@ Ena sita dı newke xırabiya teknik esta.',
 'api-error-empty-file' => 'Dosyaya ke şıma rışta venga.',
 'api-error-emptypage' => 'Newi, pelaya veng vıraştışi rê mısade nêdeyêno.',
 'api-error-fetchfileerror' => 'Xırabiya zerrek:Dosya grotış dı tay çi raşt nêşı.',
+'api-error-fileexists-forbidden' => 'Jû dosya be nê nameyê "$1" ra xora esta, u naye sero nêşeno ke bınuşiyo.',
+'api-error-fileexists-shared-forbidden' => 'Jû dosya be nameyê "$1" ra depoyê doyeyanê barekerdeyan de xora esta, u naye sero nêşeno ke bınuşiyo.',
 'api-error-file-too-large' => 'Dosyaye ke şıma rışta zaf gırda.',
 'api-error-filename-tooshort' => 'Namayê dosyayi zaf kilm a.',
 'api-error-filetype-banned' => 'Tipê ena dosya qedexe biya.',
@@ -4110,6 +4120,4 @@ Ena sita dı newke xırabiya teknik esta.',
 'duration-centuries' => '$1 {{PLURAL:$1|seserre|seserri}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenyum|milenyumi}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Kılitê teqdimkarê $1i nêvêniyenê.',
 );
index 8478b7d..3e6519a 100644 (file)
@@ -162,14 +162,14 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Wótkaze pódšmarnuś:',
 'tog-justify' => 'Tekst do bloka zrownaś',
-'tog-hideminor' => 'Małe změny schowaś',
+'tog-hideminor' => 'Małe změny w aktualnych změnach schowaś',
 'tog-hidepatrolled' => 'Doglědowane změny w aktualnych změnach schowaś',
 'tog-newpageshidepatrolled' => 'Doglědowane boki z lisćiny nowych bokow schowaś',
 'tog-extendwatchlist' => 'Wobglědowańku wócyniś, aby wšě změny pokazał, nic jano nejnowše',
 'tog-usenewrc' => 'Kupkowe změny pó boku w aktualnych změnach a wobglědowanjach (trjeba JavaScript)',
 'tog-numberheadings' => 'Nadpisma awtomatiski numerěrowaś',
-'tog-showtoolbar' => 'Wobźěłańsku lejstwu pokazaś (JavaScript)',
-'tog-editondblclick' => 'Boki z dwójnym kliknjenim wobźěłaś (JavaScript)',
+'tog-showtoolbar' => 'Wobźěłańsku lejstwu pokazaś (pótrjebujo JavaScript)',
+'tog-editondblclick' => 'Boki z dwójnym kliknjenim wobźěłaś (pótrjebujo JavaScript)',
 'tog-editsection' => 'Wobźěłanje wótstawkow pśez wótkaze [wobźěłaś] zmóžniś',
 'tog-editsectiononrightclick' => 'Wobźěłanje wótstawkow pśez kliknjenje z pšaweju tastu myški zmóžniś (JavaScript)',
 'tog-showtoc' => 'Wopśimjeśe pokazaś, jolic ma bok wěcej nježli 3 nadpisma',
@@ -1357,6 +1357,7 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'right-writeapi' => 'writeAPI wužywaś',
 'right-delete' => 'Boki wulašowaś',
 'right-bigdelete' => 'lašowaś boki, kótarež maju wjelike stawizny',
+'right-deletelogentry' => 'Jadnotliwe protokolowe zapiski wulašowaś a wótnowiś',
 'right-deleterevision' => 'Specifiske boki lašowaś a wótnowiś',
 'right-deletedhistory' => 'Wulašowane wersiji w stawiznach se bśez pśisłušnego teksta wobglědaś',
 'right-deletedtext' => 'Wulašowany tekst a změny mjazy wulašowanymi wersijami se woglědaś',
@@ -1665,6 +1666,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Zastajenje za "$1" njedajo se dopušćiś.',
 'lockmanager-fail-db-bucket' => 'W zběrniku $1 njedajo se dosć zastajeńskich datowych bankow kontaktěrowaś',
 'lockmanager-fail-db-release' => 'Zastajenja na datowu banku $1 njedaju se dopušćiś.',
+'lockmanager-fail-svr-acquire' => 'Zastajenja na serwer $1 njedaju se wótwołaś.',
 'lockmanager-fail-svr-release' => 'Zastajenja na serwer $1 njedaju se dopušćiś.',
 
 # ZipDirectoryReader
@@ -2196,6 +2198,8 @@ póstupujśo z glědanim.',
 'rollback' => 'Wobźěłanja slědk wześ',
 'rollback_short' => 'anulěrowaś',
 'rollbacklink' => 'anulěrowaś',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|změnu|změnje|změny|změnow}} slědk wześ',
+'rollbacklinkcount-morethan' => 'wěcej ako $1 {{PLURAL:$1|změnu|změnje|změny|změnow}} slědk wześ',
 'rollbackfailed' => 'Slědkwześe njejo se raźiło.',
 'cantrollback' => 'Njejo móžno změnu slědk wześ, slědny pśinosowaŕ jo jadnučki awtor boka.',
 'alreadyrolled' => 'Njejo móžno slědnu změnu w nastawku [[:$1]] wót [[User:$2|$2]] ([[User talk:$2|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) slědk wześ; drugi wužywaŕ jo mjaztym bok změnił abo južo slědk stajił .
@@ -3732,6 +3736,4 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 'duration-centuries' => '$1 {{PLURAL:$1|stolěśe|stolěśi|stolěśa|stolěśow}}',
 'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysaca|lěttysace|lěttysacow}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Zastajenja na serwer $1 njedaju se wótwołaś.',
 );
index f701a65..44dfff0 100644 (file)
@@ -366,10 +366,10 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Ενεργοποίηση επεξεργασίας τμήματος με δεξί κλικ στους τίτλους των τμημάτων (JavaScript)',
 'tog-showtoc' => 'Εμφάνιση πίνακα περιεχομένων (για σελίδες με περισσότερες από τρεις κεφαλίδες)',
 'tog-rememberpassword' => 'Διατήρηση της σύνδεσης μου σε αυτόν τον browser (για ένα μέγιστο $1 {{PLURAL:$1|ημέρας|ημερών}})',
-'tog-watchcreations' => 'Πρόσθεσε τις σελίδες που δημιουργώ στη λίστα παρακολούθησής μου',
-'tog-watchdefault' => 'ΠÏ\81οÏ\83θήκη Ï\84Ï\89ν Ï\83ελίδÏ\89ν Ï\80οÏ\85 ÎµÏ\80εξεÏ\81γάζεÏ\83Ï\84ε στη λίστα παρακολούθησης.',
+'tog-watchcreations' => 'Πρόσθεσε τις σελίδες που δημιουργώ και αρχεία που ανεβάζω στη λίστα παρακολούθησής μου',
+'tog-watchdefault' => 'ΠÏ\81οÏ\83θήκη Ï\84Ï\89ν Ï\83ελίδÏ\89ν Ï\80οÏ\85 ÎµÏ\80εξεÏ\81γάζομαι στη λίστα παρακολούθησης.',
 'tog-watchmoves' => 'Πρόσθεσε τις σελίδες που μετακινώ στη λίστα παρακολούθησής μου',
-'tog-watchdeletion' => 'Πρόσθεσε τις σελίδες που διαγράφω στη λίστα παρακολούθησής μου',
+'tog-watchdeletion' => 'Πρόσθεσε τις σελίδες και αρχεία που διαγράφω στη λίστα παρακολούθησής μου',
 'tog-minordefault' => 'Προκαθορίστε να χαρακτηρίζονται όλες οι αλλαγές "μικρής κλίμακας".',
 'tog-previewontop' => 'Εμφάνιση προεπισκόπησης πριν από το πλαίσιο επεξεργασίας και όχι μετά',
 'tog-previewonfirst' => 'Εμφάνιση προεπισκόπησης κατά την πρώτη επεξεργασία',
@@ -860,7 +860,7 @@ $2',
 'passwordreset' => 'Κωδικός επαναφοράς',
 'passwordreset-text' => 'Συμπληρώστε αυτή τη φόρμα για να λάβετε ένα  e-mail υπενθύμιση του λογαριασμού σας.',
 'passwordreset-legend' => 'Επαναφορά κωδικού πρόσβασης',
-'passwordreset-disabled' => 'Î\97 Î±Î½Î¬ÎºÏ\84ηÏ\83η  ÎºÏ\89δικοÏ\8d Ï\80Ï\81Ï\8cÏ\83βαÏ\83ηÏ\82 Î­Ï\87οÏ\85ν Î±Ï\80ενεÏ\81γοÏ\80οιηθεί Ï\83ε Î±Ï\85Ï\84Ï\8c Ï\84ο Î²Î¯ÎºÎ¹',
+'passwordreset-disabled' => 'Î\97 ÎµÏ\80αναÏ\86οÏ\81ά ÎºÏ\89δικοÏ\8d Ï\80Ï\81Ï\8cÏ\83βαÏ\83ηÏ\82 Î­Ï\87ει Î±Ï\80ενεÏ\81γοÏ\80οιηθεί Ï\83ε Î±Ï\85Ï\84Ï\8c Ï\84ο wiki',
 'passwordreset-pretext' => '{{PLURAL:$1||Εισάγεται ένα από τα στοιχεία δεδομένων που βλέπετε παρακάτω}}',
 'passwordreset-username' => 'Όνομα χρήστη:',
 'passwordreset-domain' => 'Domain:',
@@ -969,7 +969,7 @@ $2
 'nosuchsectiontitle' => 'Δεν υπάρχει τέτοιο τμήμα',
 'nosuchsectiontext' => 'Προσπαθήσατε να επεξεργαστείτε μια ενότητα που δεν υπάρχει. Μπορεί να έχει μετακινηθεί ή διαγραφεί, ενώ βλέπατε τη σελίδα.',
 'loginreqtitle' => 'Απαιτείται η σύνδεση του χρήστη.',
-'loginreqlink' => 'είσοδος',
+'loginreqlink' => 'συνδεθείτε',
 'loginreqpagetext' => 'Πρέπει να $1 για να δείτε άλλες σελίδες.',
 'accmailtitle' => 'Ο κωδικός έχει σταλεί.',
 'accmailtext' => "Ο τυχαία παρηγμένος κωδικός για τον/την [[User talk:$1|$1]] έχει σταλεί στο $2.
@@ -1305,8 +1305,8 @@ $1",
 'shown-title' => 'Εμφάνιση $1 {{PLURAL:$1|αποτελέσματος|αποτελεσμάτων}} ανά σελίδα',
 'viewprevnext' => 'Εμφάνιση ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Επιλογές αναζήτησης',
-'searchmenu-exists' => "'''Υπάρχει μια σελίδα που ονομάζεται \"[[:\$1]]\" σε αυτό το βίκι'''",
-'searchmenu-new' => "'''Δημιουργήστε τη σελίδα \"[[:\$1]]\" σε αυτό το βίκι!'''",
+'searchmenu-exists' => "'''Υπάρχει μια σελίδα που ονομάζεται \"[[:\$1]]\" σε αυτό το wiki'''",
+'searchmenu-new' => "'''Δημιουργήστε τη σελίδα \"[[:\$1]]\" σε αυτό το wiki!'''",
 'searchhelp-url' => 'Help:Περιεχόμενα',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Πλοηγηθείτε σε σελίδες με αυτό το πρόθεμα]]',
 'searchprofile-articles' => 'Σελίδες περιεχομένων',
@@ -1626,7 +1626,7 @@ $1",
 'action-unwatchedpages' => 'να εμφανίσετε τον κατάλογο μη παρακολουθούμενων σελίδων',
 'action-mergehistory' => 'να συγχωνεύσετε το ιστορικό αυτής της σελίδας',
 'action-userrights' => 'να επεξεργαστείτε όλα τα δικαιώματα χρηστών',
-'action-userrights-interwiki' => 'να ÎµÏ\80εξεÏ\81γαÏ\83Ï\84είÏ\84ε Ï\84α Î´Î¹ÎºÎ±Î¹Ï\8eμαÏ\84α Ï\87Ï\81ηÏ\83Ï\84Ï\8eν Ï\83ε Î¬Î»Î»Î± Î²Î¯ÎºÎ¹',
+'action-userrights-interwiki' => 'εÏ\80εξεÏ\81γαÏ\83Ï\84είÏ\84ε Ï\84α Î´Î¹ÎºÎ±Î¹Ï\8eμαÏ\84α Ï\87Ï\81ηÏ\83Ï\84Ï\8eν Ï\83ε Î¬Î»Î»Î± wiki',
 'action-siteadmin' => 'να κλειδώσετε ή ξεκλειδώσετε τη βάση δεδομένων',
 'action-sendemail' => 'αποστείλετε μηνύματα ηλεκτρονικού ταχυδρομείου',
 
@@ -2249,7 +2249,7 @@ $1',
 'emailtarget' => 'Εισαγάγετε το όνομα χρήστη του παραλήπτη',
 'emailusername' => 'Όνομα χρήστη:',
 'emailusernamesubmit' => 'Υποβολή',
-'email-legend' => 'Αποστολή μηνύματος ηλ. ταχυδρομείου σε έναν άλλο χρήστη του βίκι {{SITENAME}}',
+'email-legend' => 'Αποστολή μηνύματος ηλ. ταχυδρομείου σε έναν άλλο χρήστη του wiki {{SITENAME}}',
 'emailfrom' => 'Από:',
 'emailto' => 'Προς:',
 'emailsubject' => 'Θέμα:',
@@ -2809,7 +2809,7 @@ $1',
 
 # Export
 'export' => 'Εξαγωγή σελίδων',
-'exporttext' => 'Μπορείτε να κάνετε εξαγωγή του κειμένου και του ιστορικού επεξεργασίας μιας συγκεκριμένης σελίδας (ή περισσοτέρων σελίδων που έχουν ομαδοποιηθεί με χρήση XML). Μπορείτε να κάνετε εισαγωγή αυτού σε ένα άλλο βίκι χρησιμοποιώντας MediaWiki μέσω τής [[Special:Import|σελίδας εισαγωγής]].
+'exporttext' => 'Μπορείτε να κάνετε εξαγωγή του κειμένου και του ιστορικού επεξεργασίας μιας συγκεκριμένης σελίδας (ή περισσοτέρων σελίδων που έχουν ομαδοποιηθεί με χρήση XML). Μπορείτε να κάνετε εισαγωγή αυτού σε ένα άλλο wiki χρησιμοποιώντας MediaWiki μέσω τής [[Special:Import|σελίδας εισαγωγής]].
 
 Για την εξαγωγή ολόκληρων άρθρων, συμπληρώστε τους τίτλους στο παρακάτω πλαίσιο (ένα τίτλο σε κάθε σειρά) και επιλέξτε ανάμεσα από το να εξαγάγετε μόνο την τρέχουσα έκδοση (με τις πληροφορίες της πιο πρόσφατης επεξεργασίας) ή εναλλακτικά και τις παλιότερες εκδόσεις (με τις αντίστοιχες καταγραφές στη σελιδα του ιστορικού).
 
@@ -2872,7 +2872,7 @@ $1',
 'import-interwiki-namespace' => 'Προορισμός στην περιοχή ονομάτων:',
 'import-upload-filename' => 'Όνομα αρχείου:',
 'import-comment' => 'Σχόλιο:',
-'importtext' => 'Παρακαλούμε εξάγετε το αρχείο από το πηγαίο βίκι (χρησιμοποιώντας το [[Special:Export|εργαλείο εξαγωγής]]), αποθηκεύστε το στον υπολογιστή σας και μεταφορτώστε το από εκεί.',
+'importtext' => 'Παρακαλούμε εξάγετε το αρχείο από το πηγαίο wiki (χρησιμοποιώντας το [[Special:Export|εργαλείο εξαγωγής]]), αποθηκεύστε το στον υπολογιστή σας και μεταφορτώστε το από εκεί.',
 'importstart' => 'Η εισαγωγή των σελίδων είναι σε εξέλιξη...',
 'import-revision-count' => '$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}}',
 'importnopages' => 'Δεν υπάρχουν σελίδες για εισαγωγή.',
@@ -3724,7 +3724,7 @@ $5
 'version-hook-subscribedby' => 'Υπογεγραμμένο από',
 'version-version' => '(Έκδοση $1)',
 'version-license' => 'Άδεια χρήσης',
-'version-poweredby-credits' => "Αυτό το βίκι λειτουργεί χάρις στο '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
+'version-poweredby-credits' => "Αυτό το wiki λειτουργεί με στο '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
 'version-poweredby-others' => 'άλλοι',
 'version-license-info' => "Το MediaWiki είναι ελεύθερο λογισμικό. Μπορείτε να το αναδιανείμετε ή/και να το τροποποιήσετε υπό τους όρους της άδειας GNU General Public License όπως αυτή εκδόθηκε από το Free Software Foundation· είτε της δεύτερης έκδοσης της άδειας, είτε (κατ' επιλογή σας) οποιασδήποτε επόμενης έκδοσης.
 
@@ -3812,7 +3812,7 @@ $5
 'compare-revision-not-exists' => 'Η αναθεώρηση που καθορίσατε δεν υπάρχει.',
 
 # Database error messages
-'dberr-header' => 'Αυτό το βίκι έχει ένα πρόβλημα',
+'dberr-header' => 'Αυτό το wiki έχει ένα πρόβλημα',
 'dberr-problems' => 'Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.',
 'dberr-again' => 'Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.',
 'dberr-info' => '(Δεν μπορεί να επικοινωνήσει με τον εξυπηρετητή της βάσης δεδομένων: $1)',
index 48ec9b9..06acdd5 100644 (file)
@@ -200,162 +200,166 @@ $bookstoreList = array(
  * This array can be modified at runtime with the LanguageGetMagic hook
  */
 $magicWords = array(
-#   ID                                 CASE  SYNONYMS
-       'redirect'               => array( 0,    '#REDIRECT'              ),
-       'notoc'                  => array( 0,    '__NOTOC__'              ),
-       'nogallery'              => array( 0,    '__NOGALLERY__'          ),
-       'forcetoc'               => array( 0,    '__FORCETOC__'           ),
-       'toc'                    => array( 0,    '__TOC__'                ),
-       'noeditsection'          => array( 0,    '__NOEDITSECTION__'      ),
-       'noheader'               => array( 0,    '__NOHEADER__'           ),
-       'currentmonth'           => array( 1,    'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'          => array( 1,    'CURRENTMONTH1'          ),
-       'currentmonthname'       => array( 1,    'CURRENTMONTHNAME'       ),
-       'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN'    ),
-       'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV'     ),
-       'currentday'             => array( 1,    'CURRENTDAY'             ),
-       'currentday2'            => array( 1,    'CURRENTDAY2'            ),
-       'currentdayname'         => array( 1,    'CURRENTDAYNAME'         ),
-       'currentyear'            => array( 1,    'CURRENTYEAR'            ),
-       'currenttime'            => array( 1,    'CURRENTTIME'            ),
-       'currenthour'            => array( 1,    'CURRENTHOUR'            ),
-       'localmonth'             => array( 1,    'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'            => array( 1,    'LOCALMONTH1'             ),
-       'localmonthname'         => array( 1,    'LOCALMONTHNAME'         ),
-       'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN'      ),
-       'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV'       ),
-       'localday'               => array( 1,    'LOCALDAY'               ),
-       'localday2'              => array( 1,    'LOCALDAY2'              ),
-       'localdayname'           => array( 1,    'LOCALDAYNAME'           ),
-       'localyear'              => array( 1,    'LOCALYEAR'              ),
-       'localtime'              => array( 1,    'LOCALTIME'              ),
-       'localhour'              => array( 1,    'LOCALHOUR'              ),
-       'numberofpages'          => array( 1,    'NUMBEROFPAGES'          ),
-       'numberofarticles'       => array( 1,    'NUMBEROFARTICLES'       ),
-       'numberoffiles'          => array( 1,    'NUMBEROFFILES'          ),
-       'numberofusers'          => array( 1,    'NUMBEROFUSERS'          ),
-       'numberofactiveusers'    => array( 1,    'NUMBEROFACTIVEUSERS'    ),
-       'numberofedits'          => array( 1,    'NUMBEROFEDITS'          ),
-       'numberofviews'          => array( 1,    'NUMBEROFVIEWS'          ),
-       'pagename'               => array( 1,    'PAGENAME'               ),
-       'pagenamee'              => array( 1,    'PAGENAMEE'              ),
-       'namespace'              => array( 1,    'NAMESPACE'              ),
-       'namespacee'             => array( 1,    'NAMESPACEE'             ),
-       'namespacenumber'        => array( 1,    'NAMESPACENUMBER'        ),
-       'talkspace'              => array( 1,    'TALKSPACE'              ),
-       'talkspacee'             => array( 1,    'TALKSPACEE'              ),
-       'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'           => array( 1,    'FULLPAGENAME'           ),
-       'fullpagenamee'          => array( 1,    'FULLPAGENAMEE'          ),
-       'subpagename'            => array( 1,    'SUBPAGENAME'            ),
-       'subpagenamee'           => array( 1,    'SUBPAGENAMEE'           ),
-       'basepagename'           => array( 1,    'BASEPAGENAME'           ),
-       'basepagenamee'          => array( 1,    'BASEPAGENAMEE'          ),
-       'talkpagename'           => array( 1,    'TALKPAGENAME'           ),
-       'talkpagenamee'          => array( 1,    'TALKPAGENAMEE'          ),
-       'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                    => array( 0,    'MSG:'                   ),
-       'subst'                  => array( 0,    'SUBST:'                 ),
-       'safesubst'              => array( 0,    'SAFESUBST:'             ),
-       'msgnw'                  => array( 0,    'MSGNW:'                 ),
-       'img_thumbnail'          => array( 1,    'thumbnail', 'thumb'     ),
-       'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1' ),
-       'img_right'              => array( 1,    'right'                  ),
-       'img_left'               => array( 1,    'left'                   ),
-       'img_none'               => array( 1,    'none'                   ),
-       'img_width'              => array( 1,    '$1px'                   ),
-       'img_center'             => array( 1,    'center', 'centre'       ),
-       'img_framed'             => array( 1,    'framed', 'enframed', 'frame' ),
-       'img_frameless'          => array( 1,    'frameless'              ),
-       'img_page'               => array( 1,    'page=$1', 'page $1'     ),
-       'img_upright'            => array( 1,    'upright', 'upright=$1', 'upright $1'  ),
-       'img_border'             => array( 1,    'border'                 ),
-       'img_baseline'           => array( 1,    'baseline'               ),
-       'img_sub'                => array( 1,    'sub'                    ),
-       'img_super'              => array( 1,    'super', 'sup'           ),
-       'img_top'                => array( 1,    'top'                    ),
-       'img_text_top'           => array( 1,    'text-top'               ),
-       'img_middle'             => array( 1,    'middle'                 ),
-       'img_bottom'             => array( 1,    'bottom'                 ),
-       'img_text_bottom'        => array( 1,    'text-bottom'            ),
-       'img_link'               => array( 1,    'link=$1'                ),
-       'img_alt'                => array( 1,    'alt=$1'                 ),
-       'int'                    => array( 0,    'INT:'                   ),
-       'sitename'               => array( 1,    'SITENAME'               ),
-       'ns'                     => array( 0,    'NS:'                    ),
-       'nse'                    => array( 0,    'NSE:'                   ),
-       'localurl'               => array( 0,    'LOCALURL:'              ),
-       'localurle'              => array( 0,    'LOCALURLE:'             ),
-       'articlepath'            => array( 0,    'ARTICLEPATH'            ),
-       'pageid'                 => array( 0,    'PAGEID'                 ),
-       'server'                 => array( 0,    'SERVER'                 ),
-       'servername'             => array( 0,    'SERVERNAME'             ),
-       'scriptpath'             => array( 0,    'SCRIPTPATH'             ),
-       'stylepath'              => array( 0,    'STYLEPATH'              ),
-       'grammar'                => array( 0,    'GRAMMAR:'               ),
-       'gender'                 => array( 0,    'GENDER:'                ),
-       'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'            => array( 1,    'CURRENTWEEK'            ),
-       'currentdow'             => array( 1,    'CURRENTDOW'             ),
-       'localweek'              => array( 1,    'LOCALWEEK'              ),
-       'localdow'               => array( 1,    'LOCALDOW'               ),
-       'revisionid'             => array( 1,    'REVISIONID'             ),
-       'revisionday'            => array( 1,    'REVISIONDAY'            ),
-       'revisionday2'           => array( 1,    'REVISIONDAY2'           ),
-       'revisionmonth'          => array( 1,    'REVISIONMONTH'          ),
-       'revisionmonth1'         => array( 1,    'REVISIONMONTH1'         ),
-       'revisionyear'           => array( 1,    'REVISIONYEAR'           ),
-       'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP'      ),
-       'revisionuser'           => array( 1,    'REVISIONUSER'           ),
-       'plural'                 => array( 0,    'PLURAL:'                ),
-       'fullurl'                => array( 0,    'FULLURL:'               ),
-       'fullurle'               => array( 0,    'FULLURLE:'              ),
-       'canonicalurl'           => array( 0,    'CANONICALURL:'          ),
-       'canonicalurle'          => array( 0,    'CANONICALURLE:'         ),
-       'lcfirst'                => array( 0,    'LCFIRST:'               ),
-       'ucfirst'                => array( 0,    'UCFIRST:'               ),
-       'lc'                     => array( 0,    'LC:'                    ),
-       'uc'                     => array( 0,    'UC:'                    ),
-       'raw'                    => array( 0,    'RAW:'                   ),
-       'displaytitle'           => array( 1,    'DISPLAYTITLE'           ),
-       'rawsuffix'              => array( 1,    'R'                      ),
-       'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__'     ),
-       'nonewsectionlink'       => array( 1,    '__NONEWSECTIONLINK__'   ),
-       'currentversion'         => array( 1,    'CURRENTVERSION'         ),
-       'urlencode'              => array( 0,    'URLENCODE:'             ),
-       'anchorencode'           => array( 0,    'ANCHORENCODE'           ),
-       'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP'       ),
-       'localtimestamp'         => array( 1,    'LOCALTIMESTAMP'         ),
-       'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK' ),
-       'language'               => array( 0,    '#LANGUAGE:'             ),
-       'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'         => array( 1,    'NUMBEROFADMINS'         ),
-       'formatnum'              => array( 0,    'FORMATNUM'              ),
-       'padleft'                => array( 0,    'PADLEFT'                ),
-       'padright'               => array( 0,    'PADRIGHT'               ),
-       'special'                => array( 0,    'special',               ),
-       'speciale'               => array( 0,    'speciale',              ),
-       'defaultsort'            => array( 1,    'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'               => array( 0,    'FILEPATH:'              ),
-       'tag'                    => array( 0,    'tag'                    ),
-       'hiddencat'              => array( 1,    '__HIDDENCAT__'          ),
-       'pagesincategory'        => array( 1,    'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'               => array( 1,    'PAGESIZE'               ),
-       'index'                  => array( 1,    '__INDEX__'              ),
-       'noindex'                => array( 1,    '__NOINDEX__'            ),
-       'numberingroup'          => array( 1,    'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'         => array( 1,    '__STATICREDIRECT__'     ),
-       'protectionlevel'        => array( 1,    'PROTECTIONLEVEL'        ),
-       'formatdate'             => array( 0,    'formatdate', 'dateformat' ),
-       'url_path'               => array( 0,    'PATH' ),
-       'url_wiki'               => array( 0,    'WIKI' ),
-       'url_query'              => array( 0,    'QUERY' ),
-       'defaultsort_noerror'    => array( 0,    'noerror' ),
-       'defaultsort_noreplace'  => array( 0,    'noreplace' ),
+#   ID                                  CASE  SYNONYMS
+       'redirect'                => array( 0,    '#REDIRECT' ),
+       'notoc'                   => array( 0,    '__NOTOC__' ),
+       'nogallery'               => array( 0,    '__NOGALLERY__' ),
+       'forcetoc'                => array( 0,    '__FORCETOC__' ),
+       'toc'                     => array( 0,    '__TOC__' ),
+       'noeditsection'           => array( 0,    '__NOEDITSECTION__' ),
+       'noheader'                => array( 0,    '__NOHEADER__' ),
+       'currentmonth'            => array( 1,    'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'           => array( 1,    'CURRENTMONTH1' ),
+       'currentmonthname'        => array( 1,    'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'     => array( 1,    'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'      => array( 1,    'CURRENTMONTHABBREV' ),
+       'currentday'              => array( 1,    'CURRENTDAY' ),
+       'currentday2'             => array( 1,    'CURRENTDAY2' ),
+       'currentdayname'          => array( 1,    'CURRENTDAYNAME' ),
+       'currentyear'             => array( 1,    'CURRENTYEAR' ),
+       'currenttime'             => array( 1,    'CURRENTTIME' ),
+       'currenthour'             => array( 1,    'CURRENTHOUR' ),
+       'localmonth'              => array( 1,    'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'             => array( 1,    'LOCALMONTH1' ),
+       'localmonthname'          => array( 1,    'LOCALMONTHNAME' ),
+       'localmonthnamegen'       => array( 1,    'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'        => array( 1,    'LOCALMONTHABBREV' ),
+       'localday'                => array( 1,    'LOCALDAY' ),
+       'localday2'               => array( 1,    'LOCALDAY2' ),
+       'localdayname'            => array( 1,    'LOCALDAYNAME' ),
+       'localyear'               => array( 1,    'LOCALYEAR' ),
+       'localtime'               => array( 1,    'LOCALTIME' ),
+       'localhour'               => array( 1,    'LOCALHOUR' ),
+       'numberofpages'           => array( 1,    'NUMBEROFPAGES' ),
+       'numberofarticles'        => array( 1,    'NUMBEROFARTICLES' ),
+       'numberoffiles'           => array( 1,    'NUMBEROFFILES' ),
+       'numberofusers'           => array( 1,    'NUMBEROFUSERS' ),
+       'numberofactiveusers'     => array( 1,    'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'           => array( 1,    'NUMBEROFEDITS' ),
+       'numberofviews'           => array( 1,    'NUMBEROFVIEWS' ),
+       'pagename'                => array( 1,    'PAGENAME' ),
+       'pagenamee'               => array( 1,    'PAGENAMEE' ),
+       'namespace'               => array( 1,    'NAMESPACE' ),
+       'namespacee'              => array( 1,    'NAMESPACEE' ),
+       'namespacenumber'         => array( 1,    'NAMESPACENUMBER' ),
+       'talkspace'               => array( 1,    'TALKSPACE' ),
+       'talkspacee'              => array( 1,    'TALKSPACEE' ),
+       'subjectspace'            => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'           => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'            => array( 1,    'FULLPAGENAME' ),
+       'fullpagenamee'           => array( 1,    'FULLPAGENAMEE' ),
+       'subpagename'             => array( 1,    'SUBPAGENAME' ),
+       'subpagenamee'            => array( 1,    'SUBPAGENAMEE' ),
+       'basepagename'            => array( 1,    'BASEPAGENAME' ),
+       'basepagenamee'           => array( 1,    'BASEPAGENAMEE' ),
+       'talkpagename'            => array( 1,    'TALKPAGENAME' ),
+       'talkpagenamee'           => array( 1,    'TALKPAGENAMEE' ),
+       'subjectpagename'         => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'        => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                     => array( 0,    'MSG:' ),
+       'subst'                   => array( 0,    'SUBST:' ),
+       'safesubst'               => array( 0,    'SAFESUBST:' ),
+       'msgnw'                   => array( 0,    'MSGNW:' ),
+       'img_thumbnail'           => array( 1,    'thumbnail', 'thumb' ),
+       'img_manualthumb'         => array( 1,    'thumbnail=$1', 'thumb=$1' ),
+       'img_right'               => array( 1,    'right' ),
+       'img_left'                => array( 1,    'left' ),
+       'img_none'                => array( 1,    'none' ),
+       'img_width'               => array( 1,    '$1px' ),
+       'img_center'              => array( 1,    'center', 'centre' ),
+       'img_framed'              => array( 1,    'framed', 'enframed', 'frame' ),
+       'img_frameless'           => array( 1,    'frameless' ),
+       'img_page'                => array( 1,    'page=$1', 'page $1' ),
+       'img_upright'             => array( 1,    'upright', 'upright=$1', 'upright $1' ),
+       'img_border'              => array( 1,    'border' ),
+       'img_baseline'            => array( 1,    'baseline' ),
+       'img_sub'                 => array( 1,    'sub' ),
+       'img_super'               => array( 1,    'super', 'sup' ),
+       'img_top'                 => array( 1,    'top' ),
+       'img_text_top'            => array( 1,    'text-top' ),
+       'img_middle'              => array( 1,    'middle' ),
+       'img_bottom'              => array( 1,    'bottom' ),
+       'img_text_bottom'         => array( 1,    'text-bottom' ),
+       'img_link'                => array( 1,    'link=$1' ),
+       'img_alt'                 => array( 1,    'alt=$1' ),
+       'int'                     => array( 0,    'INT:' ),
+       'sitename'                => array( 1,    'SITENAME' ),
+       'ns'                      => array( 0,    'NS:' ),
+       'nse'                     => array( 0,    'NSE:' ),
+       'localurl'                => array( 0,    'LOCALURL:' ),
+       'localurle'               => array( 0,    'LOCALURLE:' ),
+       'articlepath'             => array( 0,    'ARTICLEPATH' ),
+       'pageid'                  => array( 0,    'PAGEID' ),
+       'server'                  => array( 0,    'SERVER' ),
+       'servername'              => array( 0,    'SERVERNAME' ),
+       'scriptpath'              => array( 0,    'SCRIPTPATH' ),
+       'stylepath'               => array( 0,    'STYLEPATH' ),
+       'grammar'                 => array( 0,    'GRAMMAR:' ),
+       'gender'                  => array( 0,    'GENDER:' ),
+       'notitleconvert'          => array( 0,    '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'        => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'             => array( 1,    'CURRENTWEEK' ),
+       'currentdow'              => array( 1,    'CURRENTDOW' ),
+       'localweek'               => array( 1,    'LOCALWEEK' ),
+       'localdow'                => array( 1,    'LOCALDOW' ),
+       'revisionid'              => array( 1,    'REVISIONID' ),
+       'revisionday'             => array( 1,    'REVISIONDAY' ),
+       'revisionday2'            => array( 1,    'REVISIONDAY2' ),
+       'revisionmonth'           => array( 1,    'REVISIONMONTH' ),
+       'revisionmonth1'          => array( 1,    'REVISIONMONTH1' ),
+       'revisionyear'            => array( 1,    'REVISIONYEAR' ),
+       'revisiontimestamp'       => array( 1,    'REVISIONTIMESTAMP' ),
+       'revisionuser'            => array( 1,    'REVISIONUSER' ),
+       'plural'                  => array( 0,    'PLURAL:' ),
+       'fullurl'                 => array( 0,    'FULLURL:' ),
+       'fullurle'                => array( 0,    'FULLURLE:' ),
+       'canonicalurl'            => array( 0,    'CANONICALURL:' ),
+       'canonicalurle'           => array( 0,    'CANONICALURLE:' ),
+       'lcfirst'                 => array( 0,    'LCFIRST:' ),
+       'ucfirst'                 => array( 0,    'UCFIRST:' ),
+       'lc'                      => array( 0,    'LC:' ),
+       'uc'                      => array( 0,    'UC:' ),
+       'raw'                     => array( 0,    'RAW:' ),
+       'displaytitle'            => array( 1,    'DISPLAYTITLE' ),
+       'rawsuffix'               => array( 1,    'R' ),
+       'newsectionlink'          => array( 1,    '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'        => array( 1,    '__NONEWSECTIONLINK__' ),
+       'currentversion'          => array( 1,    'CURRENTVERSION' ),
+       'urlencode'               => array( 0,    'URLENCODE:' ),
+       'anchorencode'            => array( 0,    'ANCHORENCODE' ),
+       'currenttimestamp'        => array( 1,    'CURRENTTIMESTAMP' ),
+       'localtimestamp'          => array( 1,    'LOCALTIMESTAMP' ),
+       'directionmark'           => array( 1,    'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                => array( 0,    '#LANGUAGE:' ),
+       'contentlanguage'         => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'        => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'          => array( 1,    'NUMBEROFADMINS' ),
+       'formatnum'               => array( 0,    'FORMATNUM' ),
+       'padleft'                 => array( 0,    'PADLEFT' ),
+       'padright'                => array( 0,    'PADRIGHT' ),
+       'special'                 => array( 0,    'special' ),
+       'speciale'                => array( 0,    'speciale' ),
+       'defaultsort'             => array( 1,    'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                => array( 0,    'FILEPATH:' ),
+       'tag'                     => array( 0,    'tag' ),
+       'hiddencat'               => array( 1,    '__HIDDENCAT__' ),
+       'pagesincategory'         => array( 1,    'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                => array( 1,    'PAGESIZE' ),
+       'index'                   => array( 1,    '__INDEX__' ),
+       'noindex'                 => array( 1,    '__NOINDEX__' ),
+       'numberingroup'           => array( 1,    'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'          => array( 1,    '__STATICREDIRECT__' ),
+       'protectionlevel'         => array( 1,    'PROTECTIONLEVEL' ),
+       'formatdate'              => array( 0,    'formatdate', 'dateformat' ),
+       'url_path'                => array( 0,    'PATH' ),
+       'url_wiki'                => array( 0,    'WIKI' ),
+       'url_query'               => array( 0,    'QUERY' ),
+       'defaultsort_noerror'     => array( 0,    'noerror' ),
+       'defaultsort_noreplace'   => array( 0,    'noreplace' ),
+       'pagesincategory_all'     => array( 0,    'all' ),
+       'pagesincategory_pages'   => array( 0,    'pages' ),
+       'pagesincategory_subcats' => array( 0,    'subcats' ),
+       'pagesincategory_files'   => array( 0,    'files' ),
 );
 
 /**
@@ -2923,6 +2927,8 @@ proceed with caution.',
 '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;
 last contributor is only author of this page.',
@@ -3260,6 +3266,7 @@ You cannot create an account',
 Since 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'              => '', # empty so the default is unchanged from previous versions of MediaWiki
 
 # Developer tools
 'lockdb'              => 'Lock database',
index 40b1b11..99ac033 100644 (file)
@@ -318,7 +318,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Kaŝi patrolitajn redaktojn en lastaj ŝanĝoj',
 'tog-newpageshidepatrolled' => 'Kaŝi patrolitajn paĝojn de listo de novaj paĝoj',
 'tog-extendwatchlist' => 'Etendi la atentaron por montri ĉiujn ŝanĝojn, ne nur la plej lastajn',
-'tog-usenewrc' => 'Uzi progresan "Lastaj ŝanĝoj" (bezonas JavaSkripton)',
+'tog-usenewrc' => 'Grupigi ŝanĝoj laŭ paĝo en "Lastaj ŝanĝoj" kaj "Atentaro" (bezonas Ĝavaskripton)',
 'tog-numberheadings' => 'Aŭtomate numerigi sekciojn',
 'tog-showtoolbar' => 'Montri eldonilaron',
 'tog-editondblclick' => 'Redakti per duobla alklako (JavaScript)',
@@ -1370,7 +1370,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'prefs-beta' => 'Ecoj de Beta',
 'prefs-datetime' => 'Dato kaj horo',
 'prefs-labs' => 'Ecoj el Laboratorio',
-'prefs-user-pages' => 'Uzanto paĝoj',
+'prefs-user-pages' => 'Uzantopaĝoj',
 'prefs-personal' => 'Uzanta profilo',
 'prefs-rc' => 'Lastaj ŝanĝoj',
 'prefs-watchlist' => 'Atentaro',
index a41f196..d04e59b 100644 (file)
@@ -360,17 +360,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Habilitar la edición de secciones presionando el botón de la derecha en los títulos de secciones (requiere JavaScript)',
 'tog-showtoc' => 'Mostrar el índice (para páginas con más de 3 encabezados)',
 'tog-rememberpassword' => 'Recordar mi nombre de usuario y contraseña entre sesiones en este navegador (por un máximo de $1 {{PLURAL:$1|día|días}})',
-'tog-watchcreations' => 'Vigilar las páginas que yo cree',
-'tog-watchdefault' => 'Vigilar las páginas que yo modifique',
-'tog-watchmoves' => 'Vigilar las páginas que renombre',
-'tog-watchdeletion' => 'Vigilar las páginas que borre',
+'tog-watchcreations' => 'Añadir las páginas que cree y los archivos que cargue a mi lista de vigilancia',
+'tog-watchdefault' => 'Añadir la páginas y archivos que edite a mi lista de vigilancia',
+'tog-watchmoves' => 'Añadir las páginas y archivos que mueva a mi lista de vigilancia',
+'tog-watchdeletion' => 'Añadir la páginas y archivos que borre a mi lista de vigilancia',
 'tog-minordefault' => 'Marcar todas las ediciones como menores de manera predeterminada',
 'tog-previewontop' => 'Mostrar previsualización antes del cuadro de edición',
 'tog-previewonfirst' => 'Mostrar previsualización en la primera edición',
 'tog-nocache' => 'Desactivar la caché de páginas del navegador',
 'tog-enotifwatchlistpages' => 'Enviarme un correo electrónico cuando se modifique una página o un archivo de mi lista de seguimiento',
 'tog-enotifusertalkpages' => 'Enviarme un correo electrónico cuando se modifique mi página de discusión',
-'tog-enotifminoredits' => 'Notificarme también los cambios menores de páginas',
+'tog-enotifminoredits' => 'Notificarme también por correo electrónico los cambios menores de las páginas y archivos',
 'tog-enotifrevealaddr' => 'Revelar mi dirección de correo electrónico en los correos de notificación',
 'tog-shownumberswatching' => 'Mostrar el número de usuarios que la vigilan',
 'tog-oldsig' => 'Firma actual:',
@@ -1588,6 +1588,7 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'right-writeapi' => 'Hacer uso del API para escribir',
 'right-delete' => 'Borrar páginas',
 'right-bigdelete' => 'Borrar páginas con historiales grandes',
+'right-deletelogentry' => 'Borrar y recuperar entradas de registro específicas',
 'right-deleterevision' => 'Borrar y restaurar revisiones específicas de páginas',
 'right-deletedhistory' => 'Ver el historial de páginas borradas, sin el texto asociado',
 'right-deletedtext' => 'Ver texto borrado y cambios entre revisiones borradas',
@@ -1898,6 +1899,7 @@ $1',
 'lockmanager-fail-releaselock' => 'No se pudo liberar el bloqueo de "$1".',
 'lockmanager-fail-db-bucket' => 'No se pudo contactar con las suficientes bases de datos del conjunto $1.',
 'lockmanager-fail-db-release' => 'No se pudieron liberar los bloqueos registrados en la base de datos $1.',
+'lockmanager-fail-svr-acquire' => 'No se pudieron obtener bloqueos en el servidor $1.',
 'lockmanager-fail-svr-release' => 'No se pudieron liberar los bloqueos registrados en el servidor $1.',
 
 # ZipDirectoryReader
@@ -2437,6 +2439,8 @@ Véase $2 para un registro de los borrados recientes.',
 'rollback' => 'Revertir ediciones',
 'rollback_short' => 'Revertir',
 'rollbacklink' => 'revertir',
+'rollbacklinkcount' => 'revertir $1 {{PLURAL:$1|edición|ediciones}}',
+'rollbacklinkcount-morethan' => 'revertir más de $1 {{PLURAL:$1|edición|ediciones}}',
 'rollbackfailed' => 'No se pudo revertir',
 'cantrollback' => 'No se puede revertir la edición;
 el último colaborador es el único autor de esta página.',
@@ -4029,6 +4033,4 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|siglos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'No se pudieron obtener bloqueos en el servidor $1.',
 );
index 132d383..f859d9f 100644 (file)
@@ -303,17 +303,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Peatükkide redigeerimine paremklõpsuga alampealkirjadel (JavaScript)',
 'tog-showtoc' => 'Näita sisukorda (lehtedel, millel on rohkem kui 3 pealkirja)',
 'tog-rememberpassword' => 'Parooli meeldejätmine tulevasteks seanssideks (kuni $1 {{PLURAL:$1|päevaks|päevaks}})',
-'tog-watchcreations' => 'Lisa minu loodud lehed jälgimisloendisse',
-'tog-watchdefault' => 'Jälgi uusi ja muudetud artikleid',
-'tog-watchmoves' => 'Lisa minu teisaldatud leheküljed jälgimisloendisse',
-'tog-watchdeletion' => 'Lisa minu kustutatud leheküljed jälgimisloendisse',
+'tog-watchcreations' => 'Lisa jälgimisloendisse minu alustatud leheküljed ja minu üles laaditud failid',
+'tog-watchdefault' => 'Lisa jälgimisloendisse minu muudetud leheküljed ja failid',
+'tog-watchmoves' => 'Lisa jälgimisloendisse minu teisaldatud leheküljed ja failid',
+'tog-watchdeletion' => 'Lisa jälgimisloendisse minu kustutatud leheküljed ja failid',
 'tog-minordefault' => 'Märgi kõik parandused vaikimisi pisiparandusteks',
 'tog-previewontop' => 'Näita eelvaadet toimetamiskasti ees',
 'tog-previewonfirst' => 'Näita eelvaadet esimesel redigeerimisel',
 'tog-nocache' => 'Keela võrgulehitsejal lehekülgede puhverdamine',
-'tog-enotifwatchlistpages' => 'Teata e-posti teel minu jälgitava lehekülje muutmisest',
+'tog-enotifwatchlistpages' => 'Teata e-posti teel minu jälgitava lehekülje või faili muutmisest',
 'tog-enotifusertalkpages' => 'Teata e-posti teel minu arutelulehekülje muutmisest',
-'tog-enotifminoredits' => 'Teata e-posti teel ka pisiparandustest',
+'tog-enotifminoredits' => 'Teata e-posti teel mulle ka pisiparandustest lehekülgedel ja failides',
 'tog-enotifrevealaddr' => 'Näita minu e-posti aadressi teavitus-e-kirjades',
 'tog-shownumberswatching' => 'Näita jälgivate kasutajate hulka',
 'tog-oldsig' => 'Praegune allkiri:',
@@ -1511,6 +1511,7 @@ See ei tohi olla pikem kui $1 {{PLURAL:$1|sümbol|sümbolit}}.',
 'right-writeapi' => 'Kasutada kirjutamise rakendusliidest',
 'right-delete' => 'Lehekülgi kustutada',
 'right-bigdelete' => 'Pikkade ajalugudega lehekülgi kustutada',
+'right-deletelogentry' => 'Kustutada ja taastada logisissekandeid',
 'right-deleterevision' => 'Kustutada ja taastada lehekülgede teatud redaktsioone',
 'right-deletedhistory' => 'Vaadata kustutatud ajalookirjeid ilma seotud tekstita',
 'right-deletedtext' => 'Vaadata kustutatud teksti ja võrrelda kustutatud redaktsioone',
@@ -2343,6 +2344,8 @@ Ettevaatust, selle kustutamine võib esile kutsuda häireid {{GRAMMAR:genitive|{
 'rollback' => 'Tühista muudatused',
 'rollback_short' => 'Tühista',
 'rollbacklink' => 'tühista',
+'rollbacklinkcount' => 'tühista {{PLURAL:$1|üks muudatus|$1 muudatust}}',
+'rollbacklinkcount-morethan' => 'tühista üle {{PLURAL:$1|ühe muudatuse|10 muudatuse}}',
 'rollbackfailed' => 'Muudatuste tühistamine ebaõnnestus',
 'cantrollback' => 'Ei saa muudatusi eemaldada, sest viimane kaastööline on artikli ainus autor.',
 'alreadyrolled' => 'Muudatust, mille tegi lehele [[:$1]] kasutaja [[User:$2|$2]] ([[User talk:$2|arutelu]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), ei saa tühistada, sest keegi teine on seda lehte vahepeal muutnud.
index 32b6804..0e1710d 100644 (file)
@@ -443,21 +443,21 @@ $messages = array(
 'tog-showtoolbar' => 'نوار ابزار جعبهٔ ویرایش نمایش یابد (نیازمند جاوااسکریپت)',
 'tog-editondblclick' => 'ویرایش صفحه‌ها با دوکلیک (نیازمند جاوااسکریپت)',
 'tog-editsection' => 'ویرایش بخش‌ها از طریق پیوندهای [ویرایش] فعال باشد',
-'tog-editsectiononrightclick' => 'ویرایش بخش‌ها با کلیک راست روی عناوین قسمت‌ها فعال باشد (نیازمند جاوااسکریپت)',
+'tog-editsectiononrightclick' => 'ویرایش بخش‌ها با کلیک راست روی عنوان‌های بخش‌ها فعال باشد (نیازمند جاوااسکریپت)',
 'tog-showtoc' => 'فهرست مندرجات نمایش یابد (برای صفحه‌های دارای بیش از ۳ عنوان)',
 'tog-rememberpassword' => 'گذرواژهٔ من (حداکثر $1 روز) در این مرورگر به خاطر سپرده شود',
-'tog-watchcreations' => 'صفحه‌هایی که می‌سازم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchdefault' => 'صفحه‌هایی که ویرایش می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchmoves' => 'صفحه‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchdeletion' => 'صفحه‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-watchcreations' => 'صفحه‌هایی که می‌سازم و پرونده‌هایی را که بارگذاری می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-watchdefault' => 'صفحه‌ها و پرونده‌هایی را که ویرایش می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-watchmoves' => 'صفحه‌ها و پرونده‌هایی را که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-watchdeletion' => 'صفحه‌ها و پرونده‌هایی را که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
 'tog-minordefault' => 'همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت بخورد',
 'tog-previewontop' => 'پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد',
 'tog-previewonfirst' => 'پیش‌نمایش هنگام اولین ویرایش نمایش یابد',
 'tog-nocache' => 'حافظهٔ نهانی مرورگر از کار انداخته شود',
-'tog-enotifwatchlistpages' => 'اگر صفحه‌ای از فهرست پی‌گیری‌هایم ویرایش شد برای من نامه‌ای فرستاده شود',
-'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه‌ای فرستاده شود',
-'tog-enotifminoredits' => 'برای تغییرات جزئی در صفحه‌ها هم به من نامه‌ای فرستاده شود',
-'tog-enotifrevealaddr' => 'Ù\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 Ù\85Ù\86 Ø±Ø§ Ø¯Ø± نامه‌های اطلاع‌رسانی نمایش یابد',
+'tog-enotifwatchlistpages' => 'اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد برای من نامه‌ای فرستاده شود',
+'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من رایانامه فرستاده شود',
+'tog-enotifminoredits' => 'براÛ\8c ØªØºÛ\8cÛ\8cرات Ø¬Ø²Ø¦Û\8c Ø¯Ø± ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ù\88 Ù¾Ø±Ù\88Ù\86دÙ\87â\80\8cÙ\87ا Ù\87Ù\85 Ø¨Ù\87 Ù\85Ù\86 Ù\86اÙ\85Ù\87â\80\8cاÛ\8c Ù\81رستادÙ\87 Ø´Ù\88د',
+'tog-enotifrevealaddr' => 'Ù\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 Ù\85Ù\86 Ø¯Ø± Ø±Ø§Û\8cانامه‌های اطلاع‌رسانی نمایش یابد',
 'tog-shownumberswatching' => 'شمار کاربران پی‌گیری‌کننده نمایش یابد',
 'tog-oldsig' => 'امضای کنونی:',
 'tog-fancysig' => 'امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)',
@@ -543,7 +543,7 @@ $messages = array(
 'dec' => 'دسامبر',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|رده‌های صفحه|رده‌های صفحه}}',
+'pagecategories' => '{{PLURAL:$1|رده|رده‌ها}}',
 'category_header' => 'صفحه‌های ردهٔ «$1»',
 'subcategories' => 'زیررده‌ها',
 'category-media-header' => 'پرونده‌های ردهٔ «$1»',
@@ -551,7 +551,7 @@ $messages = array(
 'hidden-categories' => '{{PLURAL:$1|ردهٔ پنهان|رده‌های پنهان}}',
 'hidden-category-category' => 'رده‌های پنهان',
 'category-subcat-count' => '{{PLURAL:$2|این رده تنها حاوی زیرردهٔ زیر است.|{{PLURAL:$1|این زیررده|این $1 زیررده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 زیررده است.}}',
-'category-subcat-count-limited' => 'این رده شامل {{PLURAL:$1|یک زیررده|$1 زیررده}} زیر می‌باشد.',
+'category-subcat-count-limited' => 'این رده شامل {{PLURAL:$1|یک|$1}} زیرردهٔ زیر است.',
 'category-article-count' => '{{PLURAL:$2|این رده فقط دارای صفحهٔ زیر است.|{{PLURAL:$1|این صفحه|این $1 صفحه}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 صفحه است.}}',
 'category-article-count-limited' => '{{PLURAL:$1|صفحهٔ|$1 صفحهٔ}} زیر در ردهٔ فعلی قرار دارند.',
 'category-file-count' => '{{PLURAL:$2|این رده تنها حاوی پروندهٔ زیر است.|{{PLURAL:$1|این پرونده|این $1 پرونده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 پرونده است.}}',
@@ -559,7 +559,7 @@ $messages = array(
 'listingcontinuesabbrev' => '(ادامه)',
 'index-category' => 'صفحه‌های نمایه‌شده',
 'noindex-category' => 'صفحه‌های نمایه‌نشده',
-'broken-file-category' => 'صفحه‌های دارای پیوندهای پروندهٔ خراب',
+'broken-file-category' => 'صفحه‌های دارای پیوند خراب به پرونده',
 
 'about' => 'درباره',
 'article' => 'صفحهٔ محتوایی',
@@ -618,7 +618,7 @@ $messages = array(
 'edit' => 'ویرایش',
 'create' => 'ایجاد',
 'editthispage' => 'ویرایش این صفحه',
-'create-this-page' => 'این صفحه را ایجاد کنید',
+'create-this-page' => 'ایجاد این صفحه',
 'delete' => 'حذف',
 'deletethispage' => 'حذف این صفحه',
 'undelete_short' => 'احیای {{PLURAL:$1|یک ویرایش|$1 ویرایش}}',
@@ -675,7 +675,7 @@ $1',
 'disclaimerpage' => 'Project:تکذیب‌نامهٔ عمومی',
 'edithelp' => 'راهنمای ویرایش‌کردن',
 'edithelppage' => 'Help:چگونه صفحه‌ها را ویرایش کنیم',
-'helppage' => 'Help:راهنما',
+'helppage' => 'Help:محتویات',
 'mainpage' => 'صفحهٔ اصلی',
 'mainpage-description' => 'صفحهٔ اصلی',
 'policy-url' => 'Project:سیاست‌ها',
@@ -685,7 +685,7 @@ $1',
 'privacypage' => 'Project:سیاست حفظ اسرار',
 
 'badaccess' => 'خطای دسترسی',
-'badaccess-group0' => 'شما اجازهٔ اجرای عملی که درخواست کرده‌اید را ندارید.',
+'badaccess-group0' => 'شما اجازهٔ اجرای عملی را که درخواست کرده‌اید ندارید.',
 'badaccess-groups' => 'عملی که درخواست کرده‌اید منحصر به کاربران {{PLURAL:$2|این گروه|این گروه‌ها}} است: $1.',
 
 'versionrequired' => 'نسخهٔ $1 از نرم‌افزار مدیاویکی لازم است',
@@ -776,7 +776,7 @@ $1',
 
 در غیر این صورت ممکن است اشکالی در نرم‌افزار پیدا کرده باشید.
 لطفاً این مشکل را با ذکر نشانی اینترنتی به یکی از [[Special:ListUsers/sysop|مدیران]] گزارش دهید.',
-'missingarticle-rev' => '(نسخهٔ شماره: $1)',
+'missingarticle-rev' => '(شمارهٔ نسخه: $1)',
 'missingarticle-diff' => '(تفاوت: $1، $2)',
 'readonly_lag' => 'پایگاه داده به طور خودکار قفل شده‌است تا نسخه‌های پشتیبان با نسخهٔ اصلی هماهنگ شوند',
 'internalerror' => 'خطای داخلی',
@@ -786,7 +786,7 @@ $1',
 'filecopyerror' => 'نشد از پروندهٔ «$1» روی «$2» نسخه‌برداری شود.',
 'filerenameerror' => 'نشد پروندهٔ «$1» به «$2» تغییر نام یابد.',
 'filedeleteerror' => 'نشد پروندهٔ «$1» حذف شود.',
-'directorycreateerror' => 'امکان ایجاد پوشه $1 وجود نداشت.',
+'directorycreateerror' => 'نشد مسیر $1 را ایجاد کرد.',
 'filenotfound' => 'پروندهٔ «$1» یافت نشد.',
 'fileexistserror' => 'امکان نوشتن روی پرونده $1 وجود ندارد: پرونده از قبل موجود است.',
 'unexpected' => 'مقدار غیرمنتظره: «$1»=«$2».',
@@ -816,7 +816,7 @@ $1',
 'viewsourcetext' => 'می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:',
 'viewyourtext' => "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
 'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار است و به منظور پیشگیری از خرابکاری قفل شده‌است.',
-'editinginterface' => "'''هشدار:''' صفحه‌ای را که ویرایش می‌کنید شامل  متنی‌است که در واسط کاربر این نرم‌افزار به کار رفته‌است.
+'editinginterface' => "'''هشدار:''' صفحه‌ای را که ویرایش می‌کنید شامل متنی‌است که در واسط کاربر این نرم‌افزار به کار رفته‌است.
 تغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.
 برای ترجمه لطفاً از [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] (پروژهٔ ترجمهٔ مدیاویکی) استفاده کنید.",
 'sqlhidden' => '(دستور اس‌کیوال پنهان شده)',
@@ -905,7 +905,7 @@ $2',
 'password-login-forbidden' => 'استفاده از این نام کاربری و گذرواژه ممنوع است.',
 'mailmypassword' => 'گذرواژهٔ جدید با رایانامه فرستاده شود',
 'passwordremindertitle' => 'یادآور گذرواژهٔ {{SITENAME}}',
-'passwordremindertext' => 'یک نفر (احتمالاً خود شما، با نشانی آی‌پی $1) گذرواژهٔ جدیدی برای حساب کاربری شما در {{SITENAME}} درخواست کرده‌است ($4). 
+'passwordremindertext' => 'یک نفر (احتمالاً خود شما، با نشانی آی‌پی $1) گذرواژهٔ جدیدی برای حساب کاربری شما در {{SITENAME}} درخواست کرده‌است ($4). 
 یک گذرواژهٔ موقت برای کاربر «$2» ساخته شده و برابر با «$3» قرار داده شده‌است.
 اگر هدفتان همین بوده‌است، اکنون باید وارد سامانه شوید و گذرواژهٔ جدیدی برگزینید.
 گذرواژهٔ موقت شما ظرف {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.
@@ -999,7 +999,7 @@ $2
 گذرواژهٔ موقت: $2',
 'passwordreset-emailsent' => 'یک نامهٔ یادآور فرستاده شده است.',
 'passwordreset-emailsent-capture' => 'رایانامهٔ یادآور فرستاده شد، که به شرح زیر است.',
-'passwordreset-emailerror-capture' => 'رایانامهٔ یادآور همانطور که در زیر مشاهده می‌فرمایید ایجاد شد ولی ارسال آن به کاربر موفقیت‌آمیز نبود: $1',
+'passwordreset-emailerror-capture' => 'رایانامهٔ یادآور همانطور که در زیر مشاهده می‌فرمایید ایجاد شد ولی ارسال آن به کاربر موفقیت‌آمیز نبود: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'تغییر آدرس پست رایانامه',
@@ -1117,7 +1117,7 @@ $2
 'clearyourcache' => "'''نکته:''' پس از ذخیره‌کردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
 *'''فایرفاکس / سافاری:'''  کلید ''Shift'' را نگه دارید و روی دکمهٔ ''Reload'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' یا ''Ctrl-R'' را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ''⌘-R'')
 *'''گوگل کروم:'''کلیدهای ''Ctrl+Shift+R'' را با هم فشار دهید. (در رایانه‌های اپل مکینتاش کلید‌های ''⌘-Shift-R'')
-*'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگه‌دارید و روی دکمهٔ ''Refresh'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' را با هم فشار دهید
+*'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگه‌دارید و روی دکمهٔ ''Refresh'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' را با هم فشار دهید
 *'''کانکوئرر:''' روی دکمهٔ ''Reload'' کلیک کنید و یا کلید ''F5'' را فشار دهید
 *'''اپرا:''' حافظهٔ نهانی مرورگر را از طریق منوی ''Tools &rarr; Preferences'' پاک کنید",
 'usercssyoucanpreview' => "'''نکته:''' پیش از ذخیه‌کردن فایل CSS یا JS خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
@@ -1184,7 +1184,7 @@ $2
 مدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
 'protectedpagewarning' => "'''هشدار: این صفحه قفل شده است تا فقط کاربران با امتیاز مدیر بتوانند ویرایشش کنند.'''
 آخرین موارد سیاهه در زیر آمده است:",
-'semiprotectedpagewarning' => "'''توجه:''' این صفحه قفل شده‌است تا تنها کاربران ثبت‌نام‌کرده قادر به ویرایش آن باشند.
+'semiprotectedpagewarning' => "'''توجه:''' این صفحه قفل شده‌است تا تنها کاربران ثبت‌نام‌کرده قادر به ویرایش آن باشند.
 آخرین موارد سیاهه در زیر آمده‌است:",
 'cascadeprotectedwarning' => "'''هشدار:''' این صفحه به علت قرارگرفتن در {{PLURAL:$1|صفحهٔ|صفحه‌های}} آبشاری-محافظت‌شدهٔ زیر قفل شده‌است تا فقط مدیران بتوانند ویرایشش کنند.",
 'titleprotectedwarning' => "'''هشدار: این صفحه به شکلی قفل شده‌است که برای ایجاد آن [[Special:ListGroupRights|اختیارات خاصی]] لازم است.'''
@@ -1700,6 +1700,7 @@ $1",
 'right-writeapi' => 'استفاده از API مربوط به نوشتن',
 'right-delete' => 'حذف صفحه‌ها',
 'right-bigdelete' => 'حذف صفحه‌های دارای تاریخچهٔ بزرگ',
+'right-deletelogentry' => 'حذف و احیای مدخل‌های خاصی از سیاهه',
 'right-deleterevision' => 'حذف و احیای نسخه‌های خاصی از صفحه',
 'right-deletedhistory' => 'مشاهدهٔ موارد حذف‌شده از تاریخچه، بدون دیدن متن آن‌ها',
 'right-deletedtext' => 'مشاهدهٔ متن حذف‌شده و تغییرات بین نسخه‌های حذف‌شده',
@@ -1821,11 +1822,11 @@ $1",
 'recentchangeslinked-feed' => 'تغییرات مرتبط',
 'recentchangeslinked-toolbox' => 'تغییرات مرتبط',
 'recentchangeslinked-title' => 'تغییرات مرتبط با $1',
-'recentchangeslinked-noresult' => 'در بازهٔ زمانی داده‌شده تغییری در صفحه‌های پیوندداده رخ نداده‌است.',
+'recentchangeslinked-noresult' => 'در بازهٔ زمانی داده‌شده تغییری در صفحه‌های پیوندداده رخ نداده‌است.',
 'recentchangeslinked-summary' => "در زیر فهرستی از تغییرات اخیر صفحه‌های پیوند داده شده از این صفحه (یا اعضای رده مورد نظر) را می‌بینید.
 صفحه‌هایی که در [[Special:Watchlist|فهرست پی‌گیری‌هایتان]] باشند به صورت '''پررنگ''' نشان داده می‌شوند.",
 'recentchangeslinked-page' => 'نام صفحه:',
-'recentchangeslinked-to' => 'نمایش تغییرات صفحه‌هایی که به صفحهٔ داده‌شده پیوند دارند',
+'recentchangeslinked-to' => 'نمایش تغییرات صفحه‌هایی که به صفحهٔ داده‌شده پیوند دارند',
 
 # Upload
 'upload' => 'بارگذاری پرونده',
@@ -1914,7 +1915,7 @@ $1",
 'fileexists-forbidden' => 'در حال حاضر، پرونده‌ای به همین نام وجود دارد، و قابل رونویسی نیست.
 اگر هم‌چنان می‌خواهید که پروندهٔ خود را بارگذاری کنید، لطفاً برگردید و نام دیگری استفاده کنید.
 [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'در حال حاضر، پرونده‌ای با همین نام در انبارهٔ مشترک پرونده‌ها وجود دارد.
+'fileexists-shared-forbidden' => 'در حال حاضر، پرونده‌ای با همین نام در انبارهٔ مشترک پرونده‌ها وجود دارد.
 اگر هنوز می‌خواهید پرونده خود را بار کنید، لطفاً برگردید و پروندهٔ موردنظر خود را با نام دیگری بار کنید.
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'به نظر می‌رسد این پرونده نسخه‌ای تکراری از {{PLURAL:$1|پروندهٔ|پرونده‌های}} زیر باشد:',
@@ -2010,6 +2011,7 @@ $1',
 'lockmanager-fail-releaselock' => 'نمی‌توان قفل «$1» را گشود.',
 'lockmanager-fail-db-bucket' => 'امکان ارتباط با تعداد کافی پایگاه داده قفل‌ها در محفظه $1 وجود نداشت.',
 'lockmanager-fail-db-release' => 'بازکردن قفل‌های پایگاه دادهٔ $1 ممکن نیست.',
+'lockmanager-fail-svr-acquire' => 'امکان گرفتن قفل‌های سرور $1 وجود ندارد.',
 'lockmanager-fail-svr-release' => 'امکان باز کردن قفل‌های سرور $1 وجود ندارد.',
 
 # ZipDirectoryReader
@@ -2526,7 +2528,7 @@ $NEWPAGE
 'delete-confirm' => 'حذف «$1»',
 'delete-legend' => 'حذف',
 'historywarning' => "'''هشدار!''' صفحه‌ای که قصد دارید حذف کنید تاریخچه‌ای با حدود $1 {{PLURAL:$1|نسخه|نسخه}} دارد:",
-'confirmdeletetext' => 'شما در حال حذف کردن یک صفحه یا تصویر از پایگاه‌ داده همراه با تمام تاریخچهٔ آن هستید.
+'confirmdeletetext' => 'شما در حال حذف کردن یک صفحه یا تصویر از پایگاه داده‌ها همراه با تمام تاریخچهٔ آن هستید.
 لطفاً این عمل را تأیید کنید و اطمینان حاصل کنید که عواقب این کار را می‌دانید و این عمل را مطابق با [[{{MediaWiki:Policy-url}}|سیاست‌ها]] انجام می‌دهید.',
 'actioncomplete' => 'عمل انجام شد',
 'actionfailed' => 'عمل ناموفق بود',
@@ -2699,7 +2701,7 @@ $1',
 # Namespace form on various pages
 'namespace' => 'فضای نام:',
 'invert' => 'انتخاب برعکس شود',
-'tooltip-invert' => 'این جعبه را علامت بزنید تا تغییرات صفحه‌های داخل فضای نام انتخاب شده (و دیگر فضاهای نام علامت زده شده) پنهان شوند',
+'tooltip-invert' => 'این جعبه را علامت بزنید تا تغییرات صفحه‌های داخل فضای نام انتخاب شده (و دیگر فضاهای نام علامت زده شده) پنهان شوند',
 'namespace_association' => 'فضای نام مرتبط',
 'tooltip-namespace_association' => 'این جعبه را علامت بزنید تا فضای نام بحث یا موضوع مرتبط با فضای نام انتخاب شده هم شامل شود',
 'blanknamespace' => '(اصلی)',
@@ -3146,9 +3148,9 @@ $1',
 'tooltip-p-logo' => 'مشاهدهٔ صفحهٔ اصلی',
 'tooltip-n-mainpage' => 'مشاهدهٔ صفحهٔ اصلی',
 'tooltip-n-mainpage-description' => 'مشاهدهٔ صفحهٔ اصلی',
-'tooltip-n-portal' => 'پیرامون پروژه، آنچه می‌توانید انجام دهید و اینکه چه چیز را کجا پیدا کنید',
+'tooltip-n-portal' => 'پیرامون پروژه، آنچه می‌توانید انجام دهید و اینکه چه چیز را کجا پیدا کنید',
 'tooltip-n-currentevents' => 'یافتن اطلاعات پیش‌زمینه پیرامون رویدادهای کنونی',
-'tooltip-n-recentchanges' => 'فهرستی از تغییرات اخیر در ویکی',
+'tooltip-n-recentchanges' => 'فهرستی از تغییرات اخیر ویکی',
 'tooltip-n-randompage' => 'آوردن یک صفحهٔ تصادفی',
 'tooltip-n-help' => 'مکانی برای دریافتن',
 'tooltip-t-whatlinkshere' => 'فهرست همهٔ صفحه‌هایی که به این صفحه پیوند می‌دهند',
@@ -3320,7 +3322,7 @@ $1',
 
 # Metadata
 'metadata' => 'متاداده',
-'metadata-help' => 'این پرونده حاوی اطلاعات اضافه‌ای‌است که احتمالاً دوربین دیجیتال یا پویشگری که در ایجاد یا دیجیتالی‌کردن آن به کار رفته آن را افزوده‌است. اگر پرونده از وضعیت ابتدایی‌اش تغییر داده شده باشد آنگاه ممکن است شرح و تفصیلات موجود اطلاعات تصویر را تماماً بازتاب ندهد.',
+'metadata-help' => 'این پرونده حاوی اطلاعات اضافه‌ای‌است که احتمالاً دوربین دیجیتال یا پویشگری که در ایجاد یا دیجیتالی‌کردن آن به کار رفته آن را افزوده‌است. اگر پرونده از وضعیت ابتدایی‌اش تغییر داده شده باشد آنگاه ممکن است شرح و تفصیلات موجود اطلاعات تصویر را تماماً بازتاب ندهد.',
 'metadata-expand' => 'نمایش جزئیات تفصیلی',
 'metadata-collapse' => 'نهفتن جزئیات تفصیلی',
 'metadata-fields' => 'فرادادهٔ تصویر نشان داده شده در این پیغام وقتی جدول فراداده‌های تصویر جمع شده باشد هم نمایش داده می‌شود. بقیهٔ موارد تنها زمانی نشان داده می‌شوند که جدول یاد شده باز شود.
@@ -4192,6 +4194,4 @@ $5
 'duration-centuries' => '$1 قرن',
 'duration-millennia' => '{{PLURAL:$1|هزار سال |$1 هزار سال}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'امکان گرفتن قفل‌های سرور $1 وجود ندارد.',
 );
index 0ea99ab..3225d74 100644 (file)
@@ -27,6 +27,7 @@
  * @author Pxos
  * @author Silvonen
  * @author Str4nd
+ * @author Stryn
  * @author Tarmo
  * @author Tofu II
  * @author Veikk0.ma
@@ -325,7 +326,7 @@ $messages = array(
 'tog-editsection' => 'Näytä muokkauslinkit jokaisen osion yläpuolella',
 'tog-editsectiononrightclick' => 'Muokkaa osioita napsauttamalla otsikkoa hiiren oikealla painikkeella (JavaScript)',
 'tog-showtoc' => 'Näytä sisällysluettelo sivuille, joilla yli 3 otsikkoa',
-'tog-rememberpassword' => 'Muista kirjautumisen tässä selaimessa (enintään $1 {{PLURAL:$1|päivä|päivää}})',
+'tog-rememberpassword' => 'Muista kirjautumiseni tässä selaimessa (enintään $1 {{PLURAL:$1|päivä|päivää}})',
 'tog-watchcreations' => 'Lisää luomani sivut tarkkailulistalleni',
 'tog-watchdefault' => 'Lisää muokkaamani sivut tarkkailulistalleni',
 'tog-watchmoves' => 'Lisää siirtämäni sivut tarkkailulistalleni',
@@ -426,7 +427,7 @@ $messages = array(
 'pagecategories' => '{{PLURAL:$1|Luokka|Luokat}}',
 'category_header' => "Luokan ''$1'' sisältämät sivut",
 'subcategories' => 'Alaluokat',
-'category-media-header' => 'Luokan ”$1” sisältämät tiedostot',
+'category-media-header' => 'Tiedostot, jotka ovat luokassa $1',
 'category-empty' => "''Tässä luokassa ei ole sivuja eikä tiedostoja.''",
 'hidden-categories' => '{{PLURAL:$1|Piilotettu luokka|Piilotetut luokat}}',
 'hidden-category-category' => 'Piilotetut luokat',
index 14ceb55..c9a40ac 100644 (file)
@@ -417,11 +417,11 @@ $messages = array(
 'underline-default' => 'Valeur par défaut du navigateur',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Style de police de la zone d’édition :',
-'editfont-default' => 'Celui par défaut du navigateur',
+'editfont-style' => 'Style de police de la zone de modification :',
+'editfont-default' => 'Police du navigateur par défaut',
 'editfont-monospace' => 'Police de chasse fixe',
 'editfont-sansserif' => 'Police sans empattement',
-'editfont-serif' => 'Police avec empattements',
+'editfont-serif' => 'Police avec empattement',
 
 # Dates
 'sunday' => 'dimanche',
@@ -600,7 +600,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'À propos de {{SITENAME}}',
 'aboutpage' => 'Project:À propos',
-'copyright' => 'Contenu disponible sous $1.',
+'copyright' => 'Sous licence $1',
 'copyrightpage' => '{{ns:project}}:Copyrights',
 'currentevents' => 'Actualités',
 'currentevents-url' => 'Project:Actualités',
@@ -1587,6 +1587,7 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'right-writeapi' => 'Utiliser l’API de modification du wiki',
 'right-delete' => 'Supprimer des pages',
 'right-bigdelete' => 'Supprimer des pages ayant un gros historique',
+'right-deletelogentry' => 'Supprimer et restaurer une entrée particulière du journal',
 'right-deleterevision' => 'Supprimer ou restaurer une version particulière d’une page',
 'right-deletedhistory' => 'Voir les entrées des historiques supprimées, mais sans leur texte',
 'right-deletedtext' => 'Voir le texte supprimé et les différences entre les versions supprimées',
@@ -1901,6 +1902,7 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'lockmanager-fail-releaselock' => 'Impossible de relâcher le verrou pour « $1 ».',
 'lockmanager-fail-db-bucket' => 'Impossible de contacter suffisamment de bases de données de verrouillage dans le godet $1.',
 'lockmanager-fail-db-release' => 'Impossible de relâcher les verrous sur la base de données $1.',
+'lockmanager-fail-svr-acquire' => "Impossible d'acquérir des verrous sur le serveur $1.",
 'lockmanager-fail-svr-release' => 'Impossible de relâcher les verrous sur le serveur $1.',
 
 # ZipDirectoryReader
@@ -2660,7 +2662,7 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 ** Tentative d’intimidation ou harcèlement
 ** Abus d’utilisation de comptes multiples
 ** Nom d’utilisateur inacceptable, injurieux ou diffamant',
-'ipb-hardblock' => 'Empêche les modifications des utilisateurs enregistrés utilisant cette adresse IP',
+'ipb-hardblock' => 'Empêcher les utilisateurs connectés de modifier en utilisant cette adresse IP',
 'ipbcreateaccount' => 'Empêcher la création de compte',
 'ipbemailban' => 'Empêcher l’utilisateur d’envoyer des courriels',
 'ipbenableautoblock' => 'Bloquer automatiquement la dernière adresse IP utilisée par l’utilisateur et toutes ses IPs ultérieures qu’il pourrait essayer',
@@ -2671,7 +2673,7 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 'ipbotherreason' => 'Motif différent ou supplémentaire :',
 'ipbhidename' => 'Masquer le nom d’utilisateur des modifications et des listes',
 'ipbwatchuser' => 'Suivre les pages utilisateur et de discussion de cet utilisateur',
-'ipb-disableusertalk' => 'Empêche cet utilisateur de modifier sa propre page de discussion pendant la durée de son blocage',
+'ipb-disableusertalk' => 'Empêcher cet utilisateur de modifier sa propre page de discussion pendant la durée de son blocage',
 'ipb-change-block' => 'Bloquer à nouveau cet utilisateur avec ces paramètres',
 'ipb-confirm' => 'Confirmer le blocage',
 'badipaddress' => 'Adresse IP incorrecte',
@@ -4059,6 +4061,4 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'duration-centuries' => '$1 {{PLURAL:$1|siècle|siècles}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millénaire|millénaires}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => "Impossible d'acquérir des verrous sur le serveur $1.",
 );
index a101aaf..442037c 100644 (file)
@@ -311,10 +311,10 @@ $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Solegnér los lims :',
-'tog-justify' => 'Èxplicar los paragrafos',
+'tog-justify' => 'Justifiar los paragrafos',
 'tog-hideminor' => 'Cachiér los petiôts changements dedens los dèrriérs changements',
 'tog-hidepatrolled' => 'Cachiér los changements survelyês dedens los dèrriérs changements',
-'tog-newpageshidepatrolled' => 'Cachiér les pâges survelyês entre-mié les pâges novèles',
+'tog-newpageshidepatrolled' => 'Cachiér les pâges survelyêyes entre-mié les pâges novèles',
 'tog-extendwatchlist' => 'Ètendre la lista de survelyence por fâre vêre tôs los changements et pas solament los ples novéls',
 'tog-usenewrc' => 'Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de survelyence (at fôta de JavaScript)',
 'tog-numberheadings' => 'Numerotar ôtomaticament los titros de sèccion',
@@ -323,27 +323,27 @@ $messages = array(
 'tog-editsection' => 'Activar lo changement de sèccions avouéc los lims « [changiér] »',
 'tog-editsectiononrightclick' => 'Activar lo changement de sèccions per clic drêt sur lors titros (at fôta de JavaScript)',
 'tog-showtoc' => 'Fâre vêre la trâbla de les matiéres (por les pâges qu’ont més de 3 sèccions)',
-'tog-rememberpassword' => 'Sè rapelar de mon contresegno sur ceti navigator (por $1 jorn{{PLURAL:$1||s}} u més)',
-'tog-watchcreations' => 'Apondre les pâges que fé a ma lista de survelyence',
-'tog-watchdefault' => 'Apondre les pâges que chanjo a ma lista de survelyence',
-'tog-watchmoves' => 'Apondre les pâges que renomo a ma lista de survelyence',
-'tog-watchdeletion' => 'Apondre les pâges que suprimo a ma lista de survelyence',
+'tog-rememberpassword' => 'Sè rapelar de mon contresegno sur cél navigator (por lo més $1 jorn{{PLURAL:$1||s}})',
+'tog-watchcreations' => 'Apondre les pâges que fé et pués los fichiérs que tèlècharjo a ma lista de survelyence',
+'tog-watchdefault' => 'Apondre les pâges et los fichiérs que chanjo a ma lista de survelyence',
+'tog-watchmoves' => 'Apondre les pâges et los fichiérs que renomo a ma lista de survelyence',
+'tog-watchdeletion' => 'Apondre les pâges et los fichiérs que suprimo a ma lista de survelyence',
 'tog-minordefault' => 'Marcar per dèfôt tôs los changements coment petiôts',
-'tog-previewontop' => 'Fâre vêre la prèvisualisacion en-dessus de la zona de changement',
+'tog-previewontop' => 'Fâre vêre la prèvisualisacion d’amont la zona de changement',
 'tog-previewonfirst' => 'Fâre vêre la prèvisualisacion pendent lo premiér changement',
-'tog-nocache' => 'Dèsactivar lo cache de les pâges per lo navigator',
-'tog-enotifwatchlistpages' => 'Mè mandar un mèssâjo quand na pâge de ma lista de survelyence est changiê',
-'tog-enotifusertalkpages' => 'Mè mandar un mèssâjo quand ma pâge de discussion est changiê',
-'tog-enotifminoredits' => 'Mè mandar un mèssâjo mémo en câs de petiôts changements de les pâges',
+'tog-nocache' => 'Dèsactivar lo cacho de les pâges per lo navigator',
+'tog-enotifwatchlistpages' => 'Mè mandar un mèssâjo quand na pâge ou ben un fichiér de ma lista de survelyence est changiê(ye)',
+'tog-enotifusertalkpages' => 'Mè mandar un mèssâjo quand ma pâge de discussion est changiêye',
+'tog-enotifminoredits' => 'Mè mandar un mèssâjo mémo en câs de petiôts changements de les pâges et des fichiérs',
 'tog-enotifrevealaddr' => 'Fâre vêre mon adrèce èlèctronica dens los mèssâjos de notificacion',
 'tog-shownumberswatching' => 'Fâre vêre lo nombro d’utilisators que siuvont na pâge',
 'tog-oldsig' => 'Signatura ègzistenta :',
 'tog-fancysig' => 'Trètar la signatura coment de vouiquitèxto (sen lim ôtomatico)',
-'tog-externaleditor' => 'Utilisar per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
-'tog-externaldiff' => 'Utilisar per dèfôt un comparator de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-externaleditor' => 'Empleyér per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-externaldiff' => 'Empleyér per dèfôt un comparator de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
 'tog-showjumplinks' => 'Activar los lims d’accèssibilitât « {{int:jumpto}} »',
-'tog-uselivepreview' => 'Utilisar l’apèrçu vito fêt (at fôta de JavaScript) (èxpèrimentâl)',
-'tog-forceeditsummary' => 'M’avèrtir quand j’é pas spècefiâ de rèsumâ de changement',
+'tog-uselivepreview' => 'Empleyér l’apèrçu rapido (at fôta de JavaScript) (èxpèrimentâl)',
+'tog-forceeditsummary' => 'M’avèrtir quand j’é pas spècifiâ de rèsumâ de changement',
 'tog-watchlisthideown' => 'Cachiér mos prôpros changements dedens la lista de survelyence',
 'tog-watchlisthidebots' => 'Cachiér los changements fêts per des bots dedens la lista de survelyence',
 'tog-watchlisthideminor' => 'Cachiér los petiôts changements dedens la lista de survelyence',
@@ -353,20 +353,20 @@ $messages = array(
 'tog-nolangconversion' => 'Dèsactivar la convèrsion de les variantes lengouistiques',
 'tog-ccmeonemails' => 'Mè mandar na copia des mèssâjos que mando ux ôtros utilisators',
 'tog-diffonly' => 'Pas fâre vêre lo contegnu de les pâges desot los difs',
-'tog-showhiddencats' => 'Fâre vêre les catègories cachiês',
+'tog-showhiddencats' => 'Fâre vêre les catègories cachiêyes',
 'tog-noconvertlink' => 'Dèsactivar la convèrsion des titros des lims',
 'tog-norollbackdiff' => 'Pas fâre vêre lo dif pendent na rèvocacion',
 
 'underline-always' => 'Tojorn',
 'underline-never' => 'Jamés',
-'underline-default' => 'Valor per dèfôt du navigator',
+'underline-default' => 'Valor du navigator per dèfôt',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stilo de police de la zona de changement :',
-'editfont-default' => 'Celi du navigator per dèfôt',
+'editfont-default' => 'Police du navigator per dèfôt',
 'editfont-monospace' => 'Police de chace fixa',
 'editfont-sansserif' => 'Police sen empiotament',
-'editfont-serif' => 'Police avouéc empiotaments',
+'editfont-serif' => 'Police avouéc empiotament',
 
 # Dates
 'sunday' => 'demenge',
@@ -425,9 +425,9 @@ $messages = array(
 'category_header' => 'Pâges dedens la catègorie « $1 »',
 'subcategories' => 'Sot-catègories',
 'category-media-header' => 'Fichiérs mèdia dedens la catègorie « $1 »',
-'category-empty' => "''Ora, ceta catègorie contint gins de pâge ou de fichiér mèdia.''",
-'hidden-categories' => '{{PLURAL:$1|Catègorie cachiê|Catègories cachiês}}',
-'hidden-category-category' => 'Catègories cachiês',
+'category-empty' => "''Ora, cela catègorie contint gins de pâge ou de fichiér mèdia.''",
+'hidden-categories' => '{{PLURAL:$1|Catègorie cachiêye|Catègories cachiêyes}}',
+'hidden-category-category' => 'Catègories cachiêyes',
 'category-subcat-count' => 'Cela catègorie-que at {{PLURAL:$2|ren que ceta sot-catègorie.|{{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}, sur na soma de $2.}}',
 'category-subcat-count-limited' => 'Cela catègorie-que at {{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}.',
 'category-article-count' => '{{PLURAL:$2|Cela catègorie-que contint ren que ceta pâge.|{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
@@ -435,31 +435,31 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|Cela catègorie-que contint ren que ceti fichiér.|{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens la presenta catègorie.',
 'listingcontinuesabbrev' => '(suita)',
-'index-category' => 'Pâges endèxâs',
-'noindex-category' => 'Pâges pas endèxâs',
+'index-category' => 'Pâges endèxâyes',
+'noindex-category' => 'Pâges pas endèxâyes',
 'broken-file-category' => 'Pâges avouéc des lims de fichiérs câssos',
 
 'about' => 'A propôs',
 'article' => 'Pâge de contegnu',
 'newwindow' => '(ôvre na fenétra novèla)',
 'cancel' => 'Anular',
-'moredotdotdot' => 'Et ples...',
+'moredotdotdot' => 's...',
 'mypage' => 'Ma pâge',
-'mytalk' => 'Pâge de discussion',
-'anontalk' => 'Discussion avouéc cetadrèce IP',
+'mytalk' => 'Ma pâge de discussion',
+'anontalk' => 'Discussion avouéc cetadrèce IP',
 'navigation' => 'Navigacion',
 'and' => '&#32;et',
 
 # Cologne Blue skin
 'qbfind' => 'Rechèrchiér',
-'qbbrowse' => 'Dèfelar',
+'qbbrowse' => 'Fâre dèfelar',
 'qbedit' => 'Changiér',
-'qbpageoptions' => 'Pâge de chouèx',
-'qbpageinfo' => 'Pâge d’enformacion',
-'qbmyoptions' => 'Mos chouèx',
+'qbpageoptions' => 'Ceta pâge',
+'qbpageinfo' => 'Contèxto',
+'qbmyoptions' => 'Mes pâges',
 'qbspecialpages' => 'Pâges spèciâles',
-'faq' => 'FDQ',
-'faqpage' => 'Project:FDQ',
+'faq' => 'Quèstions sovent posâyes',
+'faqpage' => 'Project:Quèstions sovent posâyes',
 
 # Vector skin
 'vector-action-addsection' => 'Apondre un sujèt',
@@ -468,47 +468,47 @@ $messages = array(
 'vector-action-protect' => 'Protègiér',
 'vector-action-undelete' => 'Refâre',
 'vector-action-unprotect' => 'Changiér la protèccion',
-'vector-simplesearch-preference' => 'Activar los consèlys de rechèrche mèlyorâs (solament por « Vèctor »)',
+'vector-simplesearch-preference' => 'Activar les idês de rechèrche bônâyes (solament por « Vèctor »)',
 'vector-view-create' => 'Fâre',
 'vector-view-edit' => 'Changiér',
 'vector-view-history' => 'Fâre vêre l’historico',
 'vector-view-view' => 'Liére',
-'vector-view-viewsource' => 'Vêre lo tèxto sôrsa',
+'vector-view-viewsource' => 'Fâre vêre lo tèxto sôrsa',
 'actions' => 'Accions',
 'namespaces' => 'Èspâços de noms',
 'variants' => 'Variantes',
 
-'errorpagetitle' => 'Èrror',
+'errorpagetitle' => 'Fôta',
 'returnto' => 'Tornar a la pâge $1.',
-'tagline' => 'De {{SITENAME}}.',
+'tagline' => 'De {{SITENAME}}',
 'help' => 'Éde',
 'search' => 'Rechèrche',
-'searchbutton' => 'Chèrchiér',
+'searchbutton' => 'Rechèrchiér',
 'go' => 'Alar trovar',
 'searcharticle' => 'Liére',
 'history' => 'Historico de la pâge',
 'history_short' => 'Historico',
-'updatedmarker' => 'betâ a jorn dês ma dèrriére visita',
+'updatedmarker' => 'betâye a jorn dês ma dèrriére visita',
 'printableversion' => 'Vèrsion emprimâbla',
-'permalink' => 'Lim historico',
+'permalink' => 'Lim fixo',
 'print' => 'Emprimar',
 'view' => 'Liére',
 'edit' => 'Changiér',
 'create' => 'Fâre',
 'editthispage' => 'Changiér ceta pâge',
-'create-this-page' => 'Fâre ceta pâge',
+'create-this-page' => 'Fâre cela pâge',
 'delete' => 'Suprimar',
 'deletethispage' => 'Suprimar ceta pâge',
 'undelete_short' => 'Refâre {{PLURAL:$1|yon changement|$1 changements}}',
-'viewdeleted_short' => 'Vêre {{PLURAL:$1|yon changement suprimâ|$1 changements suprimâs}}',
+'viewdeleted_short' => 'Fâre vêre {{PLURAL:$1|yon changement suprimâ|$1 changements suprimâs}}',
 'protect' => 'Protègiér',
 'protect_change' => 'changiér',
 'protectthispage' => 'Protègiér ceta pâge',
 'unprotect' => 'Changiér la protèccion',
 'unprotectthispage' => 'Changiér la protèccion de ceta pâge',
 'newpage' => 'Pâge novèla',
-'talkpage' => 'Pâge de discussion',
-'talkpagelinktext' => 'Discutar',
+'talkpage' => 'Discussion sur ceta pâge',
+'talkpagelinktext' => 'discutar',
 'specialpage' => 'Pâge spèciâla',
 'personaltools' => 'Outils a sè',
 'postcomment' => 'Novèla sèccion',
@@ -516,66 +516,66 @@ $messages = array(
 'talk' => 'Discussion',
 'views' => 'Visualisacions',
 'toolbox' => 'Bouèta d’outils',
-'userpage' => 'Pâge usanciér',
-'projectpage' => 'Pâge du projèt',
+'userpage' => 'Vêde la pâge utilisator',
+'projectpage' => 'Vêde la pâge du projèt',
 'imagepage' => 'Vêde la pâge du fichiér',
 'mediawikipage' => 'Vêde la pâge du mèssâjo',
 'templatepage' => 'Vêde la pâge du modèlo',
 'viewhelppage' => 'Vêde la pâge d’éde',
 'categorypage' => 'Vêde la pâge de catègorie',
-'viewtalkpage' => 'Pâge de discussion',
+'viewtalkpage' => 'Vêde la pâge de discussion',
 'otherlanguages' => 'Ôtres lengoues',
 'redirectedfrom' => '(Redirigiê dês $1)',
 'redirectpagesub' => 'Pâge de redirèccion',
-'lastmodifiedat' => 'Dèrriér changement de ceta pâge lo $1 a $2.<br />',
-'viewcount' => 'Ceta pâge at étâ vua {{PLURAL:$1|yon côp|$1 côps}}.',
-'protectedpage' => 'Pâge protègiê',
+'lastmodifiedat' => 'Dèrriér changement de ceta pâge lo $1 a $2.',
+'viewcount' => 'Ceta pâge est étâye vua {{PLURAL:$1|yon côp|$1 côps}}.',
+'protectedpage' => 'Pâge protègiêye',
 'jumpto' => 'Alar a :',
-'jumptonavigation' => 'Navigacion',
-'jumptosearch' => 'Rechèrche',
-'view-pool-error' => 'Dèsolâ, los sèrvors sont surchargiês por lo moment.
-Trop d’usanciérs chèrchont a arrevar a ceta pâge.
-Volyéd atendre un moment devant que vos tâchiéd de tornar arrevar a ceta pâge.
+'jumptonavigation' => 'navigacion',
+'jumptosearch' => 'rechèrche',
+'view-pool-error' => 'Dèconsolâ, los sèrviors sont lapidâs d’ôvra cetos temps.
+Trop d’utilisators tâchont de vêre ceta pâge.
+Volyéd atendre un moment devant que tornar tâchiér d’arrevar a ceta pâge.
 
 $1',
-'pool-timeout' => 'Dèpassement du dèlê pendent l’atenta du vèrrolyâjo',
-'pool-queuefull' => 'La fela d’ôvra est plêna',
-'pool-errorunknown' => 'Èrror encognua',
+'pool-timeout' => 'Dèlê dèpassâ pendent l’atenta du vèrroly',
+'pool-queuefull' => 'La renche d’ôvra est plêna',
+'pool-errorunknown' => 'Fôta encognua',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'A propôs de {{SITENAME}}',
 'aboutpage' => 'Project:A propôs',
-'copyright' => 'Lo contegnu est disponiblo desot $1.',
-'copyrightpage' => '{{ns:project}}:Drêt d’ôtor',
+'copyright' => 'Lo contegnu est disponiblo desot licence $1.',
+'copyrightpage' => '{{ns:project}}:Drêts d’ôtor',
 'currentevents' => 'Novèles',
 'currentevents-url' => 'Project:Novèles',
 'disclaimers' => 'Avèrtissements',
 'disclaimerpage' => 'Project:Avèrtissements g·ènèrals',
 'edithelp' => 'Éde',
-'edithelppage' => 'Help:Coment changiér una pâge',
+'edithelppage' => 'Help:Coment changiér na pâge',
 'helppage' => 'Help:Somèro',
 'mainpage' => 'Reçua',
 'mainpage-description' => 'Reçua',
 'policy-url' => 'Project:Règlles de dedens',
 'portal' => 'Comunôtât',
-'portal-url' => 'Project:Reçua',
+'portal-url' => 'Project:Reçua de la comunôtât',
 'privacy' => 'Politica de confidencialitât',
 'privacypage' => 'Project:Politica de confidencialitât',
 
-'badaccess' => 'Èrror de pèrmission',
-'badaccess-group0' => 'Vos avéd pas los drêts sufisents por rèalisar l’accion que vos demandâd.',
-'badaccess-groups' => 'L’accion que vos tâchiéd de rèalisar est accèssibla ren qu’ux usanciérs a {{PLURAL:$2|la tropa|les tropes}} : $1.',
+'badaccess' => 'Fôta de pèrmission',
+'badaccess-group0' => 'Vos avéd pas los drêts sufisents por rèalisar l’accion demandâye.',
+'badaccess-groups' => 'L’accion que vos tâchiéd de rèalisar est accèssibla ren qu’ux utilisators de {{PLURAL:$2|la tropa|les tropes}} : $1.',
 
 'versionrequired' => 'Vèrsion $1 de MediaWiki nècèssèra',
-'versionrequiredtext' => 'La vèrsion $1 de MediaWiki est nècèssèra por utilisar ceta pâge.
+'versionrequiredtext' => 'La vèrsion $1 de MediaWiki est nècèssèra por empleyér ceta pâge.
 Vêde la [[Special:Version|pâge de les vèrsions]].',
 
 'ok' => 'D’acôrd',
-'retrievedfrom' => 'Rècupèrâ de « $1 »',
+'retrievedfrom' => 'Rècupèrâye de « $1 »',
 'youhavenewmessages' => 'Vos avéd de $1 ($2).',
 'newmessageslink' => 'mèssâjos novéls',
 'newmessagesdifflink' => 'dèrriér changement',
-'youhavenewmessagesmulti' => 'Vos avéd de mèssâjos novéls dessus $1.',
+'youhavenewmessagesmulti' => 'Vos avéd de mèssâjos novéls sur $1',
 'editsection' => 'changiér',
 'editold' => 'changiér',
 'viewsourceold' => 'vêre lo tèxto sôrsa',
@@ -585,8 +585,8 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 'toc' => 'Somèro',
 'showtoc' => 'fâre vêre',
 'hidetoc' => 'cachiér',
-'collapsible-collapse' => 'Recllôre',
-'collapsible-expand' => 'Dèvelopar',
+'collapsible-collapse' => 'repleyér',
+'collapsible-expand' => 'dèpleyér',
 'thisisdeleted' => 'Voléd-vos fâre vêre ou ben refâre $1 ?',
 'viewdeleted' => 'Fâre vêre $1 ?',
 'restorelink' => '{{PLURAL:$1|yon changement suprimâ|$1 changements suprimâs}}',
@@ -598,13 +598,13 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 'page-rss-feed' => 'Flux RSS de « $1 »',
 'page-atom-feed' => 'Flux Atom de « $1 »',
 'red-link-title' => '$1 (pâge pas ègzistenta)',
-'sort-descending' => 'Triyér per ôrdre dècrèssent',
-'sort-ascending' => 'Triyér per ôrdre crèssent',
+'sort-descending' => 'Betar per ôrdre dèscendent',
+'sort-ascending' => 'Betar per ôrdre montent',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Pâge',
-'nstab-user' => 'Pâge usanciér',
-'nstab-media' => 'Pâge de mèdia',
+'nstab-user' => 'Pâge utilisator',
+'nstab-media' => 'Fichiér mèdia',
 'nstab-special' => 'Pâge spèciâla',
 'nstab-project' => 'Pâge du projèt',
 'nstab-image' => 'Fichiér',
@@ -615,45 +615,45 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 
 # Main script and global functions
 'nosuchaction' => 'Accion encognua',
-'nosuchactiontext' => 'L’accion spècefiâ dens l’URL est envalida.
+'nosuchactiontext' => 'L’accion spècifiâye dens l’URL est envalida.
 Vos éd pôt-étre mâl-buchiê l’URL ou ben siuvu un lim fôx.
-Pôt asse-ben étre quèstion d’una cofierie dens la programeria utilisâ per {{SITENAME}}.',
+Pôt asse-ben étre quèstion d’una cofierie dedens la programeria empleyêye per {{SITENAME}}.',
 'nosuchspecialpage' => 'Pâge spèciâla pas ègzistenta',
-'nospecialpagetext' => '<strong>Vos éd demandâ una pâge spèciâla qu’ègziste pas.</strong>
+'nospecialpagetext' => '<strong>Vos éd demandâ na pâge spèciâla qu’ègziste pas.</strong>
 
-Una lista de les pâges spèciâles valides sè trove dessus [[Special:SpecialPages|{{int:specialpages}}]].',
+Na lista de les pâges spèciâles valides sè trove dessus [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error' => 'Èrror',
-'databaseerror' => 'Èrror de la bâsa de balyês',
-'dberrortext' => 'Una èrror de sintaxa de la requéta dens la bâsa de balyês est arrevâ.
-Cen pôt endicar una cofierie dens la programeria.
-La dèrriére requéta trètâ per la bâsa de balyês ére :
+'error' => 'Fôta',
+'databaseerror' => 'Fôta de la bâsa de donâs',
+'dberrortext' => 'Na fôta de sintaxa de la requéta dens la bâsa de donâs est arrevâye.
+Cen pôt endicar na cofierie dedens la programeria.
+La dèrriére requéta trètâye per la bâsa de donâs ére :
 <blockquote><tt>$1</tt></blockquote>
 dês la fonccion « <tt>$2</tt> ».
-La bâsa de balyês at retornâ l’èrror « <tt>$3 : $4</tt> ».',
-'dberrortextcl' => 'Una èrror de sintaxa de la requéta dens la bâsa de balyês est arrevâ.
-La dèrriére requéta trètâ per la bâsa de balyês ére :
+La bâsa de donâs at retornâ la fôta « <tt>$3 : $4</tt> ».',
+'dberrortextcl' => 'Na fôta de sintaxa de la requéta dens la bâsa de donâs est arrevâye.
+La dèrriére requéta trètâye per la bâsa de donâs ére :
 « $1 »
 dês la fonccion « $2 ».
-La bâsa de balyês at retornâ l’èrror « $3 : $4 ».',
+La bâsa de donâs at retornâ la fôta « $3 : $4 ».',
 'laggedslavemode' => "'''Atencion :''' cela pâge pôt pas contegnir tôs los dèrriérs changements fêts.",
-'readonly' => 'Bâsa de balyês vèrrolyê',
-'enterlockreason' => 'Balyéd la rêson du vèrrolyâjo et pués una èstimacion de son temps',
-'readonlytext' => 'Ora, la bâsa de balyês est vèrrolyê por d’entrâs novèles et d’ôtros changements, probâblament por pèrmetre la mantegnence de la bâsa de balyês, aprés què tot tornerat a la normala.
+'readonly' => 'Bâsa de donâs vèrrolyêye',
+'enterlockreason' => 'Balyéd la rêson du vèrroly et pués n’èstimacion de la sina durâ',
+'readonlytext' => 'Ora, la bâsa de donâs est vèrrolyêye por les entrâs novèles et los ôtros changements, probâblament por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
 
-L’administrator que l’at vèrrolyê at balyê cetèxplicacion : $1',
-'missing-article' => 'La bâsa de balyês at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, avouéc lo titro « $1 » $2.
+L’administrator que l’at vèrrolyê at balyê cetèxplicacion : $1',
+'missing-article' => 'La bâsa de donâs at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, avouéc lo titro « $1 » $2.
 
-En g·ènèral, cen arreve en siuvent un lim de vers un dif dèpassâ ou ben de vers l’historico d’una pâge suprimâ.
+En g·ènèral, cen arreve en siuvent un lim de vers un dif dèpassâ ou ben de vers l’historico d’una pâge suprimâye.
 
-S’o est pas lo câs, pôt étre quèstion d’una cofierie dens la programeria.
+S’o est pas lo câs, pôt étre quèstion d’una cofierie dedens la programeria.
 La volyéd signalar a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar l’URL du lim.',
-'missingarticle-rev' => '(numerô de la vèrsion : $1)',
-'missingarticle-diff' => '(Dif : $1, $2)',
-'readonly_lag' => 'La bâsa de balyês at étâ vèrrolyê ôtomaticament pendent que los sèrvors secondèros ratrapont lor retârd sur lo sèrvor principâl.',
-'internalerror' => 'Èrror de dedens',
-'internalerror_info' => 'Èrror de dedens : $1',
+'missingarticle-rev' => '(numerô de vèrsion : $1)',
+'missingarticle-diff' => '(dif : $1, $2)',
+'readonly_lag' => 'La bâsa de donâs est étâye vèrrolyêye ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.',
+'internalerror' => 'Fôta de dedens',
+'internalerror_info' => 'Fôta de dedens : $1',
 'fileappenderrorread' => 'Empossiblo de liére « $1 » pendent l’aponsa.',
 'fileappenderror' => 'Empossiblo d’apondre « $1 » a « $2 ».',
 'filecopyerror' => 'Empossiblo de copiyér lo fichiér « $1 » vers « $2 ».',
@@ -661,32 +661,32 @@ La volyéd signalar a un [[Special:ListUsers/sysop|administrator]] sen oubliar d
 'filedeleteerror' => 'Empossiblo de suprimar lo fichiér « $1 ».',
 'directorycreateerror' => 'Empossiblo de fâre lo dossiér « $1 ».',
 'filenotfound' => 'Empossiblo de trovar lo fichiér « $1 ».',
-'fileexistserror' => 'Empossiblo d’ècrire dens lo dossiér « $1 » : lo fichiér ègziste.',
+'fileexistserror' => 'Empossiblo d’ècrire lo fichiér « $1 » : lo fichiér ègziste.',
 'unexpected' => 'Valor emprèvua : « $1 » = « $2 ».',
-'formerror' => 'Èrror : empossiblo de sometre lo formulèro',
-'badarticleerror' => 'Celaccion pôt pas étre fêta sur ceta pâge.',
+'formerror' => 'Fôta : empossiblo de sometre lo formulèro.',
+'badarticleerror' => 'Celaccion pôt pas étre fêta sur ceta pâge.',
 'cannotdelete' => 'Empossiblo de suprimar la pâge ou ben lo fichiér « $1 ».
-La suprèssion at pôt-étre ja étâ fêta per quârqu’un d’ôtro.',
+Pôt-étre la suprèssion est ja étâye fêta per quârqu’un d’ôtro.',
 'cannotdelete-title' => 'Empossiblo de suprimar la pâge « $1 »',
 'badtitle' => 'Crouyo titro',
-'badtitletext' => 'Lo titro de pâge demandâ est fôx, vouedo, ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
-Contint sûrement yon ou ben un mouél de caractèros que pôvont pas étre utilisâs dens los titros.',
-'perfcached' => 'Cetes balyês sont en cache et pôvont pas étre a jorn. {{PLURAL:$1|Yon rèsultat|$1 rèsultats}} u més {{PLURAL:$1|est disponiblo|sont disponiblos}} dedens lo cache.',
-'perfcachedts' => 'Cetes balyês sont en cache et ont étâ betâs a jorn por lo dèrriér côp a $1. {{PLURAL:$4|Yon rèsultat|$4 rèsultats}} u més {{PLURAL:$1|est disponiblo|sont disponiblos}} dedens lo cache.',
-'querypage-no-updates' => 'Ora, les mises a jorn por ceta pâge sont dèsactivâs.
-Les balyês ce-desot sont pas betâs a jorn.',
-'wrong_wfQuery_params' => 'Paramètres fôx dessus wfQuery()<br />
+'badtitletext' => 'Lo titro de la pâge demandâye est envalido, vouedo, ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
+Contint sûrament yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.',
+'perfcached' => 'Cetes donâs sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
+'perfcachedts' => 'Cetes donâs sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
+'querypage-no-updates' => 'Ora, les mises a jorn por ceta pâge sont dèsactivâyes.
+Les donâs ce-desot sont pas betâyes a jorn.',
+'wrong_wfQuery_params' => 'Paramètros fôx dessus wfQuery()<br />
 Fonccion : $1<br />
 Requéta : $2',
 'viewsource' => 'Vêre lo tèxto sôrsa',
-'viewsource-title' => 'Vêre la sôrsa de $1',
-'actionthrottled' => 'Accion limitâ',
-'actionthrottledtext' => 'Por combatre lo spame, la frèquence d’ègzécucion de cela accion est limitâ dens un moment prod côrt, et vos éd dèpassâ ceta limita.
-Volyéd tornar èprovar dens doux-três menutes.',
-'protectedpagetext' => 'Ceta pâge at étâ protègiê por empachiér son changement.',
-'viewsourcetext' => 'Vos pouede vêre et copiyér lo tèxto sôrsa de la pâge :',
-'viewyourtext' => "Vos pouede vêre et copiyér lo contegnu de '''voutros changements''' a ceta pâge :",
-'protectedinterface' => 'Ceta pâge fât de tèxto d’entèrface por la programeria et est protègiê por èvitar los abus.',
+'viewsource-title' => 'Vêre lo tèxto sôrsa de $1',
+'actionthrottled' => 'Accion limitâye',
+'actionthrottledtext' => 'Por combatre lo spame, l’usâjo de cel’accion est limitâ a doux-três côps dens un moment prod côrt. S’acomplét que vos éd dèpassâ ceta limita.
+Volyéd tornar èprovar dens un tôrn.',
+'protectedpagetext' => 'Ceta pâge est étâye protègiêye por empachiér son changement.',
+'viewsourcetext' => 'Vos pouede vêre et pués copiyér lo tèxto sôrsa de ceta pâge :',
+'viewyourtext' => "Vos pouede vêre et pués copiyér lo tèxto sôrsa de '''voutros changements''' a ceta pâge :",
+'protectedinterface' => 'Ceta pâge balye de tèxto d’entèrface por la programeria et est protègiêye por èvitar los abus.',
 'editinginterface' => "'''Atencion :''' vos éte aprés changiér una pâge utilisâ por fâre lo tèxto d’entèrface por la programeria.
 Los changements sè cognetront, d’aprés lo contèxto, sur totes ou ben quârques pâges visibles per los ôtros usanciérs.
 Por les traduccions, nos vos envitens a utilisar lo seto [//translatewiki.net/wiki/Main_Page?setlang=frp translatewiki.net], lo projèt de localisacion de MediaWiki.",
index 8d25e60..c97bf3a 100644 (file)
@@ -42,7 +42,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Falaich mùthaidhean fo fhaire ann an liosta nam mùthaidhean ùra',
 'tog-newpageshidepatrolled' => 'Falaich duilleagan fo fhaire ann an liosta nan duilleagan ùra',
 'tog-extendwatchlist' => "Leudaich an clàr-faire gus an seall e gach mùthadh 's chan ann an fheadhainn as ùire a-mhàin",
-'tog-usenewrc' => 'Cleachd mùthaidhean ùra leasaichte (feumaidh seo JavaScript)',
+'tog-usenewrc' => "Buidhnich na h-atharraichean a-rèir duilleige sna mùthaidhean ùra agus air a' chlàr-fhaire (feumaidh seo JavaScript)",
 'tog-numberheadings' => 'Cuir àireamhan ri ceann-sgrìobhaidhean leis fhèin',
 'tog-showtoolbar' => 'Seall am bàr-inneil deasachaidh (feumaidh seo JavaScript)',
 'tog-editondblclick' => 'Tòisich air deasachadh duilleige le briogadh dùbailt (feumaidh seo JavaScript)',
@@ -50,17 +50,17 @@ $messages = array(
 'tog-editsectiononrightclick' => "Cuir an comas deasachadh earainn le briogadh deas air tiotal de dh'earrainn (feumaidh seo JavaScript)",
 'tog-showtoc' => 'Seall an clàr-innse (air duilleagan air a bheil barrachd air 3 ceann-sgrìobhaidhean)',
 'tog-rememberpassword' => "Cuimhnich gu bheil mi air logadh a-steach air a' choimpiutair seo (suas gu $1 {{PLURAL:$1|latha|latha|latha|latha|làithean|latha}})",
-'tog-watchcreations' => 'Cuir duilleagan a chruthaicheas mi air mo chlàr-faire',
-'tog-watchdefault' => 'Cuir duilleagan a dheasaicheas mi air mo chlàr-faire',
-'tog-watchmoves' => 'Cuir duilleagan a ghluaiseas mi air mo chlàr-faire',
-'tog-watchdeletion' => 'Cuir duilleagan a sguabas mi às air mo chlàr-faire',
+'tog-watchcreations' => "Cuir duilleagan a chruthaicheas mi air a' chlàr-fhaire agam",
+'tog-watchdefault' => "Cuir duilleagan a dheasaicheas mi air a' chlàr-fhaire agam",
+'tog-watchmoves' => "Cuir duilleagan a ghluaiseas mi air a' chlàr-fhaire agam",
+'tog-watchdeletion' => "Cuir duilleagan a sguabas mi às air a' chlàr-fhaire agam",
 'tog-minordefault' => 'Comharraich gach mùthadh mar mhùthadh beag a ghnàth',
 'tog-previewontop' => "Nochd an ro-shealladh os cionn a' bhogsa deasachaidh",
 'tog-previewonfirst' => "Nochd an ro-shealladh nuair a nithear a' chiad deasachadh",
 'tog-nocache' => 'Cuir à comas tasgadh nan duilleagan',
-'tog-enotifwatchlistpages' => 'Cuir post-dealain thugam nuair a chuirear mùthadh air duilleag a tha air mo chlàr-faire',
+'tog-enotifwatchlistpages' => "Cuir post-dealain thugam nuair a mhùthar duilleag a tha air a' chlàr-fhaire agam",
 'tog-enotifusertalkpages' => 'Cuir post-dealain thugam nuair a mhùthaichear duilleag mo chonaltraidh',
-'tog-enotifminoredits' => 'Cuir post-dealain thugam nuair a chuirear mùthadh beag air duilleagan cuideachd',
+'tog-enotifminoredits' => 'Cuir post-dealain thugam nuair a nithear mùthadh beag air duilleagan cuideachd',
 'tog-enotifrevealaddr' => 'Nochd an seòladh puist-dhealain agam ann am teachdaireachdan fiosrachaidh',
 'tog-shownumberswatching' => "Nochd àireamh nan cleachdaichean a tha a' cumail sùil air",
 'tog-oldsig' => 'An t-earr-sgrìobhadh làithreach:',
@@ -131,18 +131,18 @@ $messages = array(
 'october-gen' => 'dhen Dàmhair',
 'november-gen' => 'dhen t-Samhain',
 'december-gen' => 'dhen Dùbhlachd',
-'jan' => 'faoi',
-'feb' => 'gibl',
-'mar' => 'màrt',
-'apr' => 'gibl',
-'may' => 'cèit',
-'jun' => 'ògmh',
-'jul' => 'iuch',
-'aug' => 'lùna',
-'sep' => 'sult',
-'oct' => 'dàmh',
-'nov' => 'samh',
-'dec' => 'dùbh',
+'jan' => 'Faoi',
+'feb' => 'Gearr',
+'mar' => 'Màrt',
+'apr' => 'Gibl',
+'may' => 'Cèit',
+'jun' => 'Ã\92gmh',
+'jul' => 'Iuch',
+'aug' => 'Lùna',
+'sep' => 'Sult',
+'oct' => 'Dàmh',
+'nov' => 'Samh',
+'dec' => 'Dùbh',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Roinn-seòrsa|Roinn-seòrsa|Roinn-seòrsa|Roinn-seòrsa|Roinnean-seòrsa|Roinn-seòrsa}}',
@@ -564,8 +564,38 @@ Saoil an do dh'atharraich thu am facal-faire agad mu thràth no an do dh'iarr th
 'passwordreset-pretext' => '{{PLURAL:$1||Cuir a-steach aon dhe na pìosan dàta gu h-ìosal}}',
 'passwordreset-username' => 'Ainm-cleachdaiche:',
 'passwordreset-domain' => 'Àrainn-lìn:',
+'passwordreset-capture' => "A bheil thu airson coimhead air a' phost-d?",
+'passwordreset-capture-help' => 'Ma chuireas tu cromag sa bhogsa seo, chì thusa am post-d (leis an fhacal-fhaire sealach) agus gheibh an cleachdaiche e cuideachd.',
 'passwordreset-email' => 'Seòladh puist-d:',
 'passwordreset-emailtitle' => "Dàta a' chunntais air {{SITENAME}}",
+'passwordreset-emailtext-ip' => "Dh'iarr cuideigin (thu fhèin, 's mathaid, on t-seòladh IP $1) cuimhneachan air an fhiosrachadh a tha co-cheangailte ris a' chunntas air {{SITENAME}} ($4). Tha {{PLURAL:$3|an cunntas|an dà chunntas|na cunntasan|na cunntasan|na cunntasan|na cunntasan}} a leanas co-cheangailte ris a' phost-d seo:
+
+$2
+
+Falbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire|an dà fhacal-faire|na faclan-faire|na faclan-faire|na faclan-faire|na faclan-faire}} sealach seo ann an {{PLURAL:$5|latha|$5 latha|$5 latha|$5 latha|$5 làithean|$5 latha}}.
+Bu chòir dhut clàradh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
+'passwordreset-emailtext-user' => "Dh'iarr an cleachdaiche $1 air {{SITENAME}} cuimhneachan air an fhiosrachadh a tha co-cheangailte ris a' chunntas agad air {{SITENAME}} ($4). Tha {{PLURAL:$3|an cunntas-cleachdaiche|an dà chunntas-cleachdaiche|na cunntasan-cleachdaiche|na cunntasan-cleachdaiche|na cunntasan-cleachdaiche|na cunntasan-cleachdaiche}} a leanas co-cheangailte ris a' phost-d seo:
+
+$2
+
+Falbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire|an dà fhacal-faire|na faclan-faire|na faclan-faire|na faclan-faire|na faclan-faire}} sealach seo ann an {{PLURAL:$5|latha|$5 latha|$5 latha|$5 latha|$5 làithean|$5 latha}}.
+Bu chòir dhut clàradh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
+'passwordreset-emailelement' => 'Ainm-cleachdaiche: $1
+Facal-faire sealach: $2',
+'passwordreset-emailsent' => "Chaidh cuimhneachan a chur air a' phost-d.",
+'passwordreset-emailsent-capture' => "Chaidh cuimhneachan a chur air a' phost-d agus chì thu sin gu h-ìosal.",
+'passwordreset-emailerror-capture' => "Chaidh cuimhneachan a chur air a' phost-d agus chì thu sin gu h-ìosal ach cha b' urrainn dhuinn a chur dhan chleachdaiche: $1",
+
+# Special:ChangeEmail
+'changeemail' => 'Atharraich am post-d',
+'changeemail-header' => "Atharraich cunntas a' phuist-d",
+'changeemail-text' => 'Lìon am foirm seo gus am post-d agad atharrachadh. Feumaidh tu am facal-faire agad a chur a-steach a-rithist gus a dhearbhadh.',
+'changeemail-no-info' => 'Feumaidh tu clàradh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.',
+'changeemail-oldemail' => 'An seòladh puist-d làithreach:',
+'changeemail-newemail' => 'An seòladh puist-d ùr:',
+'changeemail-none' => '(chan eil gin)',
+'changeemail-submit' => 'Atharraich am post-d',
+'changeemail-cancel' => 'Sguir dheth',
 
 # Edit page toolbar
 'bold_sample' => 'Teacs trom',
@@ -595,11 +625,47 @@ Saoil an do dh'atharraich thu am facal-faire agad mu thràth no an do dh'iarr th
 'savearticle' => 'Sàbhail an duilleag',
 'preview' => 'Ro-shealladh',
 'showpreview' => 'Seall an ro-shealladh',
+'showlivepreview' => 'Ro-shealladh beò',
 'showdiff' => 'Seall na mùthaidhean',
 'anoneditwarning' => "'''Rabhadh:''' Chan eil thu air logadh a-steach.
 Thèid an seòladh IP agad a chlàrachadh ann an eachdraidh na duilleige seo.",
+'anonpreviewwarning' => "''Chan eil thu air clàradh a-steach. Ma nì thu sàbhaladh, thèid an seòladh IP agad a chlàradh ann an eachdraidh deasachadh na duilleige seo.''",
+'missingsummary' => "'''Cuimhnich:''' Cha dug thu seachad gearr-chunntas air na dh'atharraich thu.
+Ma bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais gearr-chunntais.",
+'missingcommenttext' => 'Cuir a-steach beachd gu h-ìosal.',
+'missingcommentheader' => "'''Cuimhnich:''' Cha dug thu seachad cuspair/ceann airson a' bheachd seo.
+Ma bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais.",
 'summary-preview' => "Ro-shealladh a' ghearr-chunntais:",
+'subject-preview' => "Ro-shealladh air a' chuspair/air a' cheann:",
 'blockedtitle' => 'Tha an cleachdair air a bhacadh',
+'blockedtext' => "''Chaidh an t-ainm-cleachdaiche no an seòladh IP agad a bhacadh.'''
+
+'S e \$1 a chur am bacadh seo ort.
+Thug iad an cèill gun do rinn iad sinn air sgàth an adhbhair seo: ''\$2''.
+
+* Toiseach a' bhacaidh: \$8
+* Deireadh a' bhacaidh: \$6
+* An neach air a bheil am bacadh: \$7
+
+'S urrainn dhut fios a chur gu \$1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.
+Chan urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.
+'S e \$3 an seòladh IP làithreach agus agus 's e #\$5 ID a' bhacaidh.
+Thoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
+'autoblockedtext' => "''Chaidh an seòladh IP agad a bhacadh gu fèin-obrachail a chionn 's gun deach a chleachdadh le cuideigin eile a chaidh a bhacadh le \$1.'''
+Thug iad an cèill gun do rinn iad sinn air sgàth an adhbhair seo: 
+
+:''\$2''.
+
+* Toiseach a' bhacaidh: \$8
+* Deireadh a' bhacaidh: \$6
+* An neach air a bheil am bacadh: \$7
+
+'S urrainn dhut fios a chur gu \$1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.
+
+Dh'fhaoidte nach urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.
+
+'S e \$3 an seòladh IP làithreach agus agus 's e #\$5 ID a' bhacaidh.
+Thoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
 'loginreqlink' => 'log a-steach',
 'accmailtitle' => 'Facal-faire air a chur.',
 'accmailtext' => "Chaidh facal-faire a chruthachadh air thuaiream airson [[User talk:$1|$1]] 's a chur gu $2.
index 9629923..56f4f9f 100644 (file)
@@ -1480,6 +1480,7 @@ Ha de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.',
 'right-writeapi' => 'Usar a API para modificar o wiki',
 'right-delete' => 'Borrar páxinas',
 'right-bigdelete' => 'Borrar páxinas con historiais grandes',
+'right-deletelogentry' => 'Borrar e restaurar entradas de rexistro específicas',
 'right-deleterevision' => 'Borrar e restaurar versións específicas de páxinas',
 'right-deletedhistory' => 'Ver as entradas borradas do historial, sen o seu texto asociado',
 'right-deletedtext' => 'Ver texto borrado e cambios entre revisións eliminadas',
@@ -1799,6 +1800,7 @@ Se o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|admin
 'lockmanager-fail-releaselock' => 'Non se puido liberar o peche de "$1".',
 'lockmanager-fail-db-bucket' => 'Non se puido contactar cos peches de bases de datos suficientes no cubo $1.',
 'lockmanager-fail-db-release' => 'Non se puideron liberar os peches na base de datos $1.',
+'lockmanager-fail-svr-acquire' => 'Non se puideron obter os peches no servidor $1.',
 'lockmanager-fail-svr-release' => 'Non se puideron liberar os peches no servidor $1.',
 
 # ZipDirectoryReader
@@ -2346,6 +2348,8 @@ proceda con coidado.',
 'rollback' => 'Reverter as edicións',
 'rollback_short' => 'Reverter',
 'rollbacklink' => 'reverter',
+'rollbacklinkcount' => 'reverter $1 {{PLURAL:$1|edición|edicións}}',
+'rollbacklinkcount-morethan' => 'reverter máis de $1 {{PLURAL:$1|edición|edicións}}',
 'rollbackfailed' => 'Houbo un fallo ao reverter as edicións',
 'cantrollback' => 'Non se pode desfacer a edición; o último colaborador é o único autor desta páxina.',
 'alreadyrolled' => 'Non se pode desfacer a edición en "[[:$1]]" feita por [[User:$2|$2]] ([[User talk:$2|conversa]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); alguén máis editou ou desfixo os cambios desta páxina.
@@ -3944,6 +3948,4 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Non se puideron obter os peches no servidor $1.',
 );
index 867e9a5..6dc3615 100644 (file)
@@ -375,9 +375,9 @@ $messages = array(
 'tog-previewontop' => 'הצגת תצוגה מקדימה לפני תיבת העריכה (או: אחריה)',
 'tog-previewonfirst' => 'הצגת תצוגה מקדימה בעריכה ראשונה',
 'tog-nocache' => 'מניעת אחסון הדפים בזיכרון המטמון בדפדפן',
-'tog-enotifwatchlistpages' => 'ש×\9c×\99×\97ת ×\93×\95×\90\9c ×\90×\9c×\99×\9a ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93×£ ×\90×\95 ×\91ק×\95×\91×¥ ×\91רש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\9a',
-'tog-enotifusertalkpages' => 'ש×\9c×\99×\97ת ×\93×\95×\90\9c ×\90×\9c×\99×\9a ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93×£ ×©×\99×\97ת ×\94×\9eשת×\9eש ×©×\9c×\9a',
-'tog-enotifminoredits' => 'ש×\9c×\99×\97ת ×\93×\95×\90\9c ×\90×\9c×\99×\9a גם על עריכות משניות של דפים וקבצים',
+'tog-enotifwatchlistpages' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93×£ ×\90×\95 ×\91ק×\95×\91×¥ ×\91רש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\99',
+'tog-enotifusertalkpages' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93×£ ×©×\99×\97ת ×\94×\9eשת×\9eש ×©×\9c×\99',
+'tog-enotifminoredits' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 גם על עריכות משניות של דפים וקבצים',
 'tog-enotifrevealaddr' => 'חשיפת כתובת הדוא"ל שלך בהודעות דוא"ל',
 'tog-shownumberswatching' => 'הצגת מספר המשתמשים העוקבים אחרי הדף',
 'tog-oldsig' => 'החתימה הקיימת:',
@@ -394,7 +394,7 @@ $messages = array(
 'tog-watchlisthideanons' => 'הסתרת עריכות של משתמשים אנונימיים ברשימת המעקב',
 'tog-watchlisthidepatrolled' => 'הסתרת עריכות בדוקות ברשימת המעקב',
 'tog-nolangconversion' => 'ביטול המרת גרסאות שפה',
-'tog-ccmeonemails' => 'ק×\91×\9cת ×\94עתק×\99×\9d ×©×\9c ×\94×\95×\93×¢×\95ת ×\93×\95×\90\9c ×\94נש×\9c×\97×\95ת ×\9e×\9e× י למשתמשים אחרים',
+'tog-ccmeonemails' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\94עתק×\99×\9d ×©×\9c ×\94×\95×\93×¢×\95ת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×©×©×\9c×\97תי למשתמשים אחרים',
 'tog-diffonly' => 'ביטול הצגת תוכן הדף מתחת להשוואות הגרסאות',
 'tog-showhiddencats' => 'הצגת קטגוריות מוסתרות',
 'tog-noconvertlink' => 'ביטול המרת קישורים לכותרות',
@@ -1602,7 +1602,8 @@ $1",
 'right-writeapi' => 'שימוש ב־API לשינוי דפים',
 'right-delete' => 'מחיקת דפים',
 'right-bigdelete' => 'מחיקת דפים עם היסטוריית דף ארוכה',
-'right-deleterevision' => 'מחיקת גרסאות מסוימות של דפים',
+'right-deletelogentry' => 'מחיקת ושחזור פעולות מסוימות ביומן',
+'right-deleterevision' => 'מחיקת ושחזור גרסאות מסוימות של דפים',
 'right-deletedhistory' => 'צפייה בגרסאות מחוקות ללא הטקסט השייך להן',
 'right-deletedtext' => 'צפייה בטקסט מחוק ובהבדלים בין גרסאות מחוקות',
 'right-browsearchive' => 'חיפוש דפים מחוקים',
@@ -1918,6 +1919,7 @@ $1',
 'lockmanager-fail-releaselock' => 'לא הייתה אפשרות לשחרר את הנעילה עבור "$1".',
 'lockmanager-fail-db-bucket' => 'לא הייתה אפשרות לקבל מספיק מסדי נתונים של נעילות בדלי $1.',
 'lockmanager-fail-db-release' => 'לא הייתה אפשרות לשחרר נעילות על מסד הנתונים $1.',
+'lockmanager-fail-svr-acquire' => 'לא הייתה אפשרות לבצע נעילות על השרת $1.',
 'lockmanager-fail-svr-release' => 'לא הייתה אפשרות לשחרר נעילות על השרת $1.',
 
 # ZipDirectoryReader
@@ -2339,7 +2341,7 @@ $1',
 'emailsubject' => 'נושא:',
 'emailmessage' => 'הודעה:',
 'emailsend' => 'שליחה',
-'emailccme' => '× ×\90 ×\9cש×\9c×\95×\97 ×\9c×\99 ×\91×\93×\95×\90ר ×\94×\90×\9cק×\98ר×\95× ×\99 ×\94עתק ×©×\9c ×\94×\95×\93עת×\99.',
+'emailccme' => 'נא לשלוח לי בדואר אלקטרוני העתק של הודעתי.',
 'emailccsubject' => 'העתק של הודעתך למשתמש $1: $2',
 'emailsent' => 'הדואר נשלח',
 'emailsenttext' => 'הודעת הדואר האלקטרוני שלך נשלחה.',
@@ -2461,10 +2463,12 @@ $UNWATCHURL
 'rollback' => 'שחזור עריכות',
 'rollback_short' => 'שחזור',
 'rollbacklink' => 'שחזור',
+'rollbacklinkcount' => 'שחזור {{PLURAL:$1|עריכה אחת|$1 עריכות}}',
+'rollbacklinkcount-morethan' => 'שחזור יותר מ{{PLURAL:$1|עריכה אחת|־$1 עריכות}}',
 'rollbackfailed' => 'השחזור נכשל',
 'cantrollback' => 'לא ניתן לשחזר את העריכה;
 התורם האחרון הוא היחיד שכתב בדף זה.',
-'alreadyrolled' => '×\9c×\90 × ×\99ת×\9f ×\9cש×\97×\96ר ×\90ת ×¢×¨×\99×\9bת ×\94×\93×£ [[:$1]] ×¢×\9c ×\99×\93×\99 [[User:$2|$2]] ([[User talk:$2|ש×\99×\97×\94]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); ×\9e×\99ש×\94×\95 ×\90×\97ר ×\9b×\91ר ×¢×¨×\9a ×\90×\95 ×©×\97×\96ר ×\93×£ ×\96×\94.
+'alreadyrolled' => '×\9c×\90 × ×\99ת×\9f ×\9cש×\97×\96ר ×\90ת ×\94ער×\99×\9b×\94 ×©×\9c [[User:$2|$2]] ([[User talk:$2|ש×\99×\97×\94]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ×\91×\93×£ [[:$1]]; ×\9e×\99ש×\94×\95 ×\90×\97ר ×\9b×\91ר ×¢×¨×\9a ×\90×\95 ×©×\97×\96ר ×\90ת ×\94×\93×£.
 
 העריכה האחרונה הייתה של [[User:$3|$3]] ([[User talk:$3|שיחה]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "תקציר העריכה היה: \"'''\$1'''\".",
@@ -4112,6 +4116,4 @@ $5
 'duration-centuries' => '{{PLURAL:$1|מאה שנה|$1 מאות שנים|מאתיים שנה}}',
 'duration-millennia' => '{{PLURAL:$1|אלף שנה|$1 אלפי שנים|אלפיים שנה}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'לא הייתה אפשרות לבצע נעילות על השרת $1.',
 );
index e9ce52d..e8bc22a 100644 (file)
@@ -185,7 +185,7 @@ $messages = array(
 'tog-hidepatrolled' => 'हाल में हुए बदलावों में जाँचे हुए बदलाव छिपाएँ',
 'tog-newpageshidepatrolled' => 'नए पृष्ठों की सूची में से जाँचे हुए पृष्ठों को छिपाएँ',
 'tog-extendwatchlist' => 'केवल हालिया ही नहीं, बल्कि सभी परिवर्तनों को दिखाने के लिए ध्यानसूची को विस्तारित करें',
-'tog-usenewrc' => 'परिषà¥\8dà¤\95à¥\83त à¤¹à¤¾à¤²à¤¿à¤¯à¤¾ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\8bà¤\82 à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रà¥\87à¤\82 (à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤\95à¥\80 à¤\86वशà¥\8dयà¤\95ता à¤¹à¥\88)',
+'tog-usenewrc' => 'हाल à¤®à¥\87à¤\82 à¤¹à¥\81à¤\8f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\8bà¤\82 à¤®à¥\87à¤\82 à¤\94र à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\8bà¤\82 à¤\95à¥\8b à¤ªà¥\83षà¥\8dठ à¤\85नà¥\81सार à¤¸à¤®à¥\82हà¥\8bà¤\82 à¤®à¥\87à¤\82 à¤¬à¤¾à¤\81à¤\9fà¥\87à¤\82 (à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤\86वशà¥\8dयà¤\95)',
 'tog-numberheadings' => 'शीर्षक स्वयं-क्रमांकित करें',
 'tog-showtoolbar' => 'सम्पादन औज़ारपट्टी दिखाएँ (जावास्क्रिप्ट की आवश्यकता है)',
 'tog-editondblclick' => 'दुगुने क्लिक पर पृष्ठ संपादित करें (जावास्क्रिप्ट की आवश्यकता है)',
@@ -193,15 +193,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'अनुभाग शीर्षक पर दायाँ क्लिक करने पर अनुभाग सम्पादित करें (जावास्क्रिप्ट की आवश्यकता है)',
 'tog-showtoc' => 'अनुक्रम दर्शायें (जिन पृष्ठों पर तीन से अधिक अनुभाग हों)',
 'tog-rememberpassword' => 'इस ब्राउज़र पर मेरा कूटशब्द  (अधिकतम $1 {{PLURAL:$1|दिन|दिनों}} तक) याद रखें',
-'tog-watchcreations' => 'मेरे द्वारा निर्मित पृष्ठों को मेरी ध्यानसूची में जोड़ें',
-'tog-watchdefault' => 'मेरे द्वारा सम्पादित पृष्ठों को मेरी ध्यानसूची में जोड़ें',
-'tog-watchmoves' => 'मेरे द्वारा स्थानांतरित पृष्ठों को मेरी ध्यानसूची में जोड़ें',
-'tog-watchdeletion' => 'मेरे द्वारा हटाए गए पृष्ठों को मेरी ध्यानसूची में जोड़ें',
+'tog-watchcreations' => 'मà¥\87रà¥\87 à¤¦à¥\8dवारा à¤¨à¤¿à¤°à¥\8dमित à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\94र à¤®à¥\87रà¥\80 à¤\85पलà¥\8bड à¤\95à¥\80 à¤«à¤¼à¤¾à¤\87लà¥\8bà¤\82 à¤\95à¥\8b à¤®à¥\87रà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\87à¤\82',
+'tog-watchdefault' => 'मà¥\87रà¥\87 à¤¦à¥\8dवारा à¤¸à¤®à¥\8dपादित à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\94र à¤«à¤¼à¤¾à¤\87लà¥\8bà¤\82 à¤\95à¥\8b à¤®à¥\87रà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\87à¤\82',
+'tog-watchmoves' => 'मà¥\87रà¥\87 à¤¦à¥\8dवारा à¤¸à¥\8dथानाà¤\82तरित à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\8fवà¤\82 à¤«à¤¼à¤¾à¤\87लà¥\8bà¤\82 à¤\95à¥\8b à¤®à¥\87रà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\87à¤\82',
+'tog-watchdeletion' => 'मà¥\87रà¥\87 à¤¦à¥\8dवारा à¤¹à¤\9fाà¤\8f à¤\97à¤\8f à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\8fवà¤\82 à¤«à¤¼à¤¾à¤\87लà¥\8bà¤\82 à¤\95à¥\8b à¤®à¥\87रà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\87à¤\82',
 'tog-minordefault' => 'मेरे सभी सम्पादन छोटे बदलाव हैं',
 'tog-previewontop' => 'सम्पादन बक्से के ऊपर झलक दिखाएँ',
 'tog-previewonfirst' => 'प्रथम सम्पादन के बाद झलक दिखाएँ',
 'tog-nocache' => 'ब्राउज़र पृष्ठ कैशिंग अक्षम करें',
-'tog-enotifwatchlistpages' => 'मेरी ध्यानसूची में दर्ज किसी भी पृष्ठ में परिवर्तन होने पर मुझे ई-मेल करें',
+'tog-enotifwatchlistpages' => 'मà¥\87रà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¦à¤°à¥\8dà¤\9c à¤\95िसà¥\80 à¤­à¥\80 à¤ªà¥\83षà¥\8dठ à¤\85थवा à¤«à¤¼à¤¾à¤\87ल à¤®à¥\87à¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\8bनà¥\87 à¤ªà¤° à¤®à¥\81à¤\9dà¥\87 à¤\88-मà¥\87ल à¤\95रà¥\87à¤\82',
 'tog-enotifusertalkpages' => 'मेरा वार्ता पृष्ठ परिवर्तित होने पर मुझे ई-मेल करें',
 'tog-enotifminoredits' => 'छोटे परिवर्तनों के लिए भी मुझे ई-मेल भेजें',
 'tog-enotifrevealaddr' => 'अधिसूचना ई-मेल में मेरा ई-मेल पता दर्शाएँ',
@@ -704,7 +704,7 @@ $2',
 'passwordreset-text' => 'अपने खाते के विवरण का एक ई-मेल अनुस्मारक प्राप्त करने के लिए इस फ़ॉर्म को पूरा करें।',
 'passwordreset-legend' => 'कूटशब्द रीसेट करें',
 'passwordreset-disabled' => 'कूटशब्द रीसेट करना इस विकी पर अक्षम है।',
-'passwordreset-pretext' => '{{PLURAL:$1||नà¥\80à¤\9aà¥\87 à¤¦à¤¿à¤\8f à¤\97à¤\8f à¤¡à¥\87à¤\9fा à¤\95à¥\87 à¤\9fà¥\81à¤\95ड़à¥\8bà¤\82 में से एक लिखें}}',
+'passwordreset-pretext' => '{{PLURAL:$1||नà¥\80à¤\9aà¥\87 à¤ªà¥\82à¤\9bà¥\87 à¤\97à¤\8f à¤¡à¥\87à¤\9fा में से एक लिखें}}',
 'passwordreset-username' => 'सदस्यनाम:',
 'passwordreset-domain' => 'डोमेन:',
 'passwordreset-capture' => 'परिणामस्वरूप बना ई-मेल देखें?',
@@ -1230,7 +1230,7 @@ $1",
 'preferences' => 'मेरी वरीयताएँ',
 'mypreferences' => 'मेरी वरीयताएँ',
 'prefs-edits' => 'संपादन संख्या:',
-'prefsnologin' => 'लॉग इन नहीं किया है',
+'prefsnologin' => 'लॉग इन नहीं किया है',
 'prefsnologintext' => 'वरीयताएँ बदलने के लिए आपको <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} सत्रारंभ]</span> करना होगा।',
 'changepassword' => 'कूटशब्द बदलें',
 'prefs-skin' => 'त्वचा',
@@ -1552,7 +1552,7 @@ HTML टैग की जाँच करें।',
 'uploadbtn' => 'फ़ाइल अपलोड करें',
 'reuploaddesc' => 'अपलोड रद्द करें और पुनः अपलोड फ़ॉर्म पर जाएँ',
 'upload-tryagain' => 'संशोधित फ़ाइल विवरण भेजें',
-'uploadnologin' => 'à¤\86प à¤²à¥\89à¤\97à¥\8dड à¤\87न à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88à¤\82।',
+'uploadnologin' => 'लà¥\89à¤\97 à¤\87न à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤¹à¥\88',
 'uploadnologintext' => 'फ़ाइलें अपलोड करने के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है।',
 'upload_directory_missing' => 'अपलोड डाइरेक्टरी ($1) मौजूद नहीं है, और वेबसर्वर इसका निर्माण नहीं कर पाया।',
 'upload_directory_read_only' => 'अपलोड डाइरेक्टरी ($1) में वेबसर्वर लिख नहीं पा रहा है।',
@@ -1716,8 +1716,8 @@ $1',
 'backend-fail-writetemp' => 'अस्थायी फ़ाइल पर लिखना संभव नहीं हुआ।',
 'backend-fail-closetemp' => 'अस्थाई फ़ाइल बंद नहीं हो पाई।',
 'backend-fail-read' => 'फ़ाइल $1 पढ़ी नहीं जा सकी।',
-'backend-fail-create' => 'फ़ाà¤\87ल $1 à¤¬à¤¨à¤¾à¤\88 नहीं जा सकी।',
-'backend-fail-maxsize' => 'à¥\9eाà¤\87ल $1 à¤¬à¤¨à¤¾à¤\88 à¤¨à¤¹à¥\80à¤\82 à¤\9cा à¤¸à¤\95à¥\80 à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤¯à¤¹ {{PLURAL:$2|$2 à¤¬à¤¾à¤\88à¤\9f}} à¤¸à¥\87 à¤¬à¥\9cी है।',
+'backend-fail-create' => 'फ़ाà¤\87ल $1 à¤²à¤¿à¤\96à¥\80 नहीं जा सकी।',
+'backend-fail-maxsize' => 'फ़ाà¤\87ल $1 à¤²à¤¿à¤\96à¥\80 à¤¨à¤¹à¥\80à¤\82 à¤\9cा à¤¸à¤\95à¥\80 à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤¯à¤¹ {{PLURAL:$2|$2 à¤¬à¤¾à¤\88à¤\9f}} à¤¸à¥\87 à¤¬à¤¡à¤¼ी है।',
 'backend-fail-readonly' => 'भंडारण बैकेंड "$1" इस समय केवल पढ़ा जा सकता है (रीड-ओन्ली है)। दिया गया कारण था: "$2"',
 'backend-fail-synced' => 'फ़ाइल "$1" आतंरिक भंडारण बैकेंड में असंगत स्थिति में है।',
 'backend-fail-connect' => '"$1" भंडारण बैकेंड से सम्पर्क स्थापित नहीं किया जा सका।',
@@ -2399,9 +2399,9 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 'undeletedfiles' => '{{PLURAL:$1|1 फ़ाईल|$1 फ़ाईलें}} पुनर्स्थापित',
 'cannotundelete' => 'पुनर्स्थापित नहीं कर सकें;
 किसी और ने पहले ही पुनर्स्थापित कर दिया हों।',
-'undeletedpage' => "'''$1 को पुनर्स्थापित कर दिया गया है'''
+'undeletedpage' => "'''$1 को पुनर्स्थापित कर दिया गया है'''
 
-हाल में हटायें गये तथा पुनर्स्थापित किये हुए पन्नोंकी ज़ानकारी के लिये [[Special:Log/delete|हटानेकी सूची]] देखें।",
+हाल में हटाये गये तथा पुनर्स्थापित किये गए पन्नों की जानकारी के लिये [[Special:Log/delete|हटाने की लॉग]] देखें।",
 'undelete-header' => 'हाल में हटाये गये पृष्ठ देखने के लियें [[Special:Log/delete|हटाने की सूची]] देखें।',
 'undelete-search-title' => 'हटाये गये पृष्ठ खोज़ें',
 'undelete-search-box' => 'हटायें गयें पृष्ठ खोजें',
@@ -2669,7 +2669,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 इन मामलोंमे आपको स्वयं यह पृष्ठ जोडने पड़ सकते है ।",
 'movearticle' => 'पृष्ठ का नाम बदलें',
 'moveuserpage-warning' => 'चाल उपयोगकर्ता चेतावनी पृष्ठ',
-'movenologin' => 'लॉग इन नहीं किया',
+'movenologin' => 'लॉग इन नहीं किया है',
 'movenologintext' => 'लेख स्थानान्तरित करने के लिये आपका [[Special:UserLogin|लॉग इन]] किया होना आवश्यक हैं।',
 'movenotallowed' => 'आपको पृष्ठ स्थानांतरित करने की अनुमति नहीं है।',
 'movenotallowedfile' => 'आपको फ़ाइलें स्थानांतरित करने की अनुमति नहीं है।',
@@ -2920,7 +2920,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|सदस्य|सदस्य}} $1',
 'anonusers' => '{{SITENAME}} अनाम {{PLURAL:$2|सदस्य|सदस्य}} $1',
 'creditspage' => 'पान श्रेय नामावली',
-'nocredits' => 'à¤\87स à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤²à¤¿à¤¯à¥\87 à¤\95à¥\8dरà¥\87डिà¤\9f à¤\9c़ानà¤\95ारà¥\80 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88à¤\82।',
+'nocredits' => 'à¤\87स à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤²à¤¿à¤¯à¥\87 à¤\95à¥\8dरà¥\87डिà¤\9f à¤\9cानà¤\95ारà¥\80 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88।',
 
 # Spam protection
 'spamprotectiontitle' => 'स्पॅम सुरक्षा फिल्टर',
@@ -2948,7 +2948,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 'markaspatrolleddiff' => 'देख लिया ऐसा मार्क करें',
 'markaspatrolledtext' => 'इस पृष्ठ को देख लिया ऐसा मार्क करें',
 'markedaspatrolled' => 'देख लिया ऐसा मार्क करें',
-'markedaspatrolledtext' => 'चुने हुए अवतरण पर देखा गया का मार्क किया।',
+'markedaspatrolledtext' => '[[:$1]] का चयनित अवतरण जाँचा हुआ चिन्हित किया गया।',
 'rcpatroldisabled' => 'हाल में हुए बदलावों पर नजर रखना बंद कर दिया हैं',
 'rcpatroldisabledtext' => 'हाल में हुए बदलावोंपर नजर रखने की सुविधा बंद कर दी ग‍ईं हैं।',
 'markedaspatrollederror' => 'देख लिया ऐसा मार्क नहीं कर पायें',
@@ -3820,6 +3820,8 @@ $5
 'api-error-empty-file' => 'प्रस्तुत फ़ाइल खाली था।',
 'api-error-emptypage' => 'नए खाली पृष्ठ बनाने की अनुमति नहीं है।',
 'api-error-fetchfileerror' => 'आंतरिक त्रुटि: जब फ़ाइल लाया जा रहा तो कुछ गलत हो गया था।',
+'api-error-fileexists-forbidden' => '"$1" नाम की फ़ाइल पहले से मौजूद है और अधिलेखित नहीं की जा सकती।',
+'api-error-fileexists-shared-forbidden' => '"$1" नाम की फ़ाइल पहले से साझे फ़ाइल भण्डार में मौजूद है, और अधिलेखित नहीं की जा सकती।',
 'api-error-file-too-large' => 'प्रस्तुत फ़ाइल बहुत बड़ी थी।',
 'api-error-filename-tooshort' => 'फ़ाइल का नाम बहुत छोटा है।',
 'api-error-filetype-banned' => 'इस प्रकार की फ़ाइल पर प्रतिबंध लगा दिया है।',
index 685779d..9da7764 100644 (file)
@@ -13,6 +13,7 @@
  * @author Kguirnela
  * @author Oxyzen
  * @author Tagimata
+ * @author Taylortheturtle
  */
 
 $messages = array(
@@ -1530,6 +1531,7 @@ Pwede mo matan-aw ang iya ginhalinan',
 'tooltip-rollback' => '"Panumbalik" ginabalik ang (mga) na-islan sa sini nga pahina sa pinaka ulihi nga kontributor sa isa lang ka klik',
 'tooltip-undo' => '"Indi pag-obrahon" ginabalik ang gin-islan kag gabukas sa isaln form sa may prebyu mode.
 Gapasugot sa pagdugang sang rason sa kabilugan.',
+'tooltip-summary' => 'Maghatag sing diutay nga eksplikasyon',
 
 # Browsing diffs
 'previousdiff' => '← Mas daan nga na-islan',
index e4d78b2..efc62b1 100644 (file)
@@ -1357,6 +1357,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'right-writeapi' => 'writeAPI wužiwać',
 'right-delete' => 'Strony zhašeć',
 'right-bigdelete' => 'Strony z dołhimi stawiznami zničić',
+'right-deletelogentry' => 'Jednotliwe protokolowe zapiski zhašeć a wobnowić',
 'right-deleterevision' => 'Jednotliwe wersije wušmórnyć a wobnowić',
 'right-deletedhistory' => 'Wušmórnjene zapiski stawiznow bjez přisłušneho teksta wobhladać',
 'right-deletedtext' => 'Wušmórnjeny tekst a změny mjez wušmórnjenymi wersijemi sej wobhladać',
@@ -1668,6 +1669,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Zawěra za "$1" njeda so dopušćić.',
 'lockmanager-fail-db-bucket' => 'W zběrniku $1 njeda so dosć zawrjenskich datowych bankow kontaktować',
 'lockmanager-fail-db-release' => 'Zawěry na datowu banku $1 njedadźa so dopušćić',
+'lockmanager-fail-svr-acquire' => 'Zawěry na serwer $1 njehodźa so wotwołać.',
 'lockmanager-fail-svr-release' => 'Zawěry na serwer $1 njedadźa so dopušćić',
 
 # ZipDirectoryReader
@@ -2201,6 +2203,8 @@ Prošu potwjerdź, zo maš wotpohlad to činić, zo rozumiš sćěwki a zo to wo
 'rollback' => 'Změny cofnyć',
 'rollback_short' => 'Cofnyć',
 'rollbacklink' => 'Cofnyć',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|změnu|změnje|změny|změnow}} cofnyć',
+'rollbacklinkcount-morethan' => 'přez $1 {{PLURAL:$1|změnu|změnje|změny|změnow}} cofnyć',
 'rollbackfailed' => 'Cofnjenje njeporadźiło',
 'cantrollback' => 'Njemóžno změnu cofnyć; strona nima druhich awtorow.',
 'alreadyrolled' => 'Njemóžno poslednu změnu [[:$1]] přez wužiwarja [[User:$2|$2]] ([[User talk:$2|Diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) cofnyć; něchtó druhi je stronu wobdźěłał abo změnu hižo cofnył.
@@ -3722,6 +3726,4 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'duration-centuries' => '$1 {{PLURAL:$1|lětstotk|lětstotkaj|lětstotki|lětstotkow}}',
 'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysacaj|lěttysacy|lěttysacow}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Zawěry na serwer $1 njehodźa so wotwołać.',
 );
index 0d7362b..92849e8 100644 (file)
@@ -432,7 +432,7 @@ $messages = array(
 'hidden-category-category' => 'Rejtett kategóriák',
 'category-subcat-count' => "''{{PLURAL:$2|Ennek a kategóriának csak egyetlen alkategóriája van.|Ez a kategória az alábbi {{PLURAL:$1|alkategóriával|$1 alkategóriával}} rendelkezik (összesen $2 alkategóriája van).}}''",
 'category-subcat-count-limited' => 'Ebben a kategóriában {{PLURAL:$1|egy|$1}} alkategória található.',
-'category-article-count' => '{{PLURAL:$2|Csak a következő lap található ebben a kategóriában:|Az összesen $2 lapból a következő $1-t listázza ez a kategóriaoldal, a többi a további oldalakon található.}}',
+'category-article-count' => '{{PLURAL:$2|A kategóriában csak a következő lap található.|A következő $1 lap található a kategóriában, összesen $2 lapból.}}',
 'category-article-count-limited' => 'Ebben a kategóriában a következő {{PLURAL:$1|lap|$1 lap}} található:',
 'category-file-count' => '{{PLURAL:$2|Csak a következő fájl található ebben a kategóriában.|Az összesen $2 fájlból a következő $1-t listázza ez a kategórialap, a többi a további oldalakon található.}}',
 'category-file-count-limited' => 'Ebben a kategóriában {{PLURAL:$1|egy|$1}} fájl található.',
index c572a41..57a7da2 100644 (file)
@@ -718,8 +718,8 @@ $2',
 
 Խնդրում ենք կրկին ներկայանալ համակարգին այն ստանալուց հետո։',
 'blocked-mailpassword' => 'Ձեր IP հասցեից խմբագրումները արգելափակված են, և հետևաբար արգելված է նաև գաղտնաբառի վերականգնումը՝ հետագա չարաշահումների կանխման նպատակով։',
-'eauthentsent' => 'Առաջարկված էլ-հասցեին ուղարկվել է վավերացման նամակ։
\84Õ«Õ¶Õ¹Ö\87 Õ¸Ö\80Ö\87Õ§ Õ¡ÕµÕ¬ Õ¸Ö\82Õ²Õ¥Ö\80Õ»Õ¶Õ¥Ö\80 Õ¯Õ¸Ö\82Õ²Õ¡Ö\80Õ¯Õ¾Õ¥Õ¶ Õ¡ÕµÕ¤ Õ°Õ¡Õ½Ö\81Õ¥Õ«Õ¶, Õ±Õ¥Õ¦ Õ¡Õ¶Õ°Ö\80Õ¡ÕªÕ¥Õ·Õ¿ Õ§ Õ°Õ¥Õ¿Ö\87Õ¥Õ¬ Õ¶Õ¡Õ´Õ¡Õ¯Õ¸Ö\82Õ´ Õ¶Õ¯Õ¡Ö\80Õ¡Õ£Ö\80Õ¾Õ¡Õ® Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¶Õ¥Ö\80Õ«Õ¶Õ\9d Õ°Õ¡Õ·Õ¾Õ« Õ±Õ¥Õ¦ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¥Õ¬Õ¸Ö\82 Ö\83Õ¡Õ½Õ¿Õ¨ Õ¾Õ¡Õ¾Õ¥Ö\80Õ¡Ö\81Õ¶Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80։',
+'eauthentsent' => 'Նոր էլ-հասցեին ուղարկվել է վավերացման նամակ։
\80Õ¥Õ¿Ö\87Õ¥Õ\9bÖ\84 Õ¶Õ¡Õ´Õ¡Õ¯Õ« Ö\81Õ¸Ö\82Ö\81Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ«Õ¶Õ\9d Õ°Õ¡Õ½Õ¿Õ¡Õ¿Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80, Õ¸Ö\80 Õ¡ÕµÕ¤ Õ°Õ¡Õ½Ö\81Õ¥Õ¶ Õ±Õ¥Õ¦ Õ§ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö\82Õ´Ö\89 Õ\84Õ«Õ¶Õ¹ Õ¡ÕµÕ¤ Õ¶Õ¸Ö\80 Õ°Õ¡Õ½Ö\81Õ¥Õ«Õ¶ Õ¡ÕµÕ¬ Õ¶Õ¡Õ´Õ¡Õ¯Õ¶Õ¥Ö\80 Õ¹Õ¥Õ¶ Õ¯Õ¡Ö\80Õ¸Õ² Õ¸Ö\82Õ²Õ¡Ö\80Õ¯Õ¾Õ¥Õ¬։',
 'throttled-mailpassword' => 'Գաղտնաբառի հիշեցման ուղերձ արդեն ուղարկվել է վերջին {{PLURAL:$1|ժամվա|$1 ժամվա}} ընթացքում։ Չարաշահման կանխարգելման նպատակով թույլատրվում է միայն մեկ գաղտնաբառի հիշեցում ամեն {{PLURAL:$1|ժամվա|$1 ժամվա}} ընթացքում։',
 'mailerror' => 'Փոստի ուղարկման սխալ. $1',
 'acct_creation_throttle_hit' => 'Վերջին օրվա ընթացքում ձեր IP-հասցեից ստեղծվել է {{PLURAL:$1|1 մասնակցի հաշվիվ|$1 մասնակցի հաշվիվ}}, ինչը այս ժամանակաշրջանում առավելագույն թույլատրելի քանակն է։
@@ -1353,13 +1353,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'uploadnologintext' => 'Նիշքեր բեռնելու համար անհրաժեշտ է [[Special:UserLogin|մտնել համակարգ]]։',
 'upload_directory_read_only' => 'Վեբ-սերվերը չունի գրելու իրավունք բեռնումների թղթապանակում ($1)։',
 'uploaderror' => 'Բեռնման սխալ',
-'uploadtext' => "Նիշք բեռնելու համար օգտագործեք ստորև բերված ձևը։
-Նախկինում բեռնված նիշքերը դիտելու կամ որոնելու համար այցելեք [[Սպասարկող:Պատկերներիցանկը|բեռնված նիշքերի ցանկը]]։ Բեռնումները գրանցվում են [[Սպասարկող:Տեղեկամատյան/upload|բեռնման տեղեկամատյանում]], ջնջումները՝ [[Սպասարկող:Տեղեկամատյան/delete|ջնջման տեղեկամատյանում]]։
-
-Այս նիշքը որևէ էջում ընդգրկելու համար օգտագործեք հետևյալ հղման ձևերը.
-* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Նիշք.jpg]]</nowiki>''' - ամբողջական չափի պատկեր տեղադրելու համար,
-* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Նիշք.png|200px|thumb|left|այլ. տեքստ]]</nowiki>''' - 200 փիքսել լայնությամբ տարբերակը ձախ կողմում շրջանակի մեջ և «այլ․ տեքստ» բացատրությամբ տեղադրելու համար
-* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Նիշք.ogg]]</nowiki>''' - նիշքին ուղիղ հղման համար",
+'uploadtext' => '{{Բեռնել}}',
 'uploadlog' => 'բեռնման տեղեկամատյան',
 'uploadlogpage' => 'Բեռնման տեղեկամատյան',
 'uploadlogpagetext' => 'Ստորև բերված է ամենավերջին բեռնված նիշքերի ցանկը։
index 8fc05b0..29d5b32 100644 (file)
@@ -1414,6 +1414,7 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'right-writeapi' => 'Uso del API pro modificar le wiki',
 'right-delete' => 'Deler paginas',
 'right-bigdelete' => 'Deler paginas con historias longe',
+'right-deletelogentry' => 'Deler e restaurar specific entratas del registro',
 'right-deleterevision' => 'Deler e restaurar versiones specific de paginas',
 'right-deletedhistory' => 'Vider entratas de historia delite, sin lor texto associate',
 'right-deletedtext' => 'Vider texto delite e differentias inter versiones delite',
@@ -1733,6 +1734,7 @@ Si le problema persiste, contacta un [[Special:ListUsers/sysop|administrator]].'
 'lockmanager-fail-releaselock' => 'Non poteva liberar le file de serratura pro "$1".',
 'lockmanager-fail-db-bucket' => 'Non poteva contactar sufficiente bases de datos de serratura in situla $1.',
 'lockmanager-fail-db-release' => 'Non poteva liberar le serraturas sur le base de datos $1.',
+'lockmanager-fail-svr-acquire' => 'Non poteva acquirer le serraturas sur le servitor $1.',
 'lockmanager-fail-svr-release' => 'Non poteva liberar le serraturas sur le servitor $1.',
 
 # ZipDirectoryReader
@@ -2287,6 +2289,8 @@ procede con caution.',
 'rollback' => 'Revocar modificationes',
 'rollback_short' => 'Revocar',
 'rollbacklink' => 'revocar',
+'rollbacklinkcount' => 'revocar $1 {{PLURAL:$1|modification|modificationes}}',
+'rollbacklinkcount-morethan' => 'revocar plus de $1 {{PLURAL:$1|modification|modificationes}}',
 'rollbackfailed' => 'Revocation fallite',
 'cantrollback' => 'Impossibile revocar le modification;
 le ultime contributor es le sol autor de iste pagina.',
@@ -3890,6 +3894,4 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'duration-centuries' => '$1 {{PLURAL:$1|seculo|seculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennio|millennios}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Non poteva acquirer le serraturas sur le servitor $1.',
 );
index bb6185e..2a5b3d9 100644 (file)
@@ -159,7 +159,7 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad nga {{PLURAL:$1| a papeles|$1  a pappapeles}} ket adda iti daytoy a kategoria, ti $2 a dagup.}}',
 'category-file-count-limited' => 'Ti sumaganad nga {{PLURAL:$1|a papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.',
 'listingcontinuesabbrev' => 'tuloy.',
-'index-category' => 'Dagiti pagsurutan a panid',
+'index-category' => 'Dagiti naipasurutan a panid',
 'noindex-category' => 'Dagiti saan a pagsurutan a panid',
 'broken-file-category' => 'Dagiti panid a nadadael ti panag-silpo na iti papeles',
 
@@ -186,7 +186,7 @@ $messages = array(
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-addsection' => 'Nayonan ti topiko',
+'vector-action-addsection' => 'Agnayon ti topiko',
 'vector-action-delete' => 'Ikkaten',
 'vector-action-move' => 'Iyalis',
 'vector-action-protect' => 'Salakniban',
@@ -257,7 +257,7 @@ $messages = array(
 'jumpto' => 'Mapan idiay:',
 'jumptonavigation' => 'pagdaliasatan',
 'jumptosearch' => 'biruken',
-'view-pool-error' => 'Pasensian a, dagiti servers ket nadagsenan unay tattan.
+'view-pool-error' => 'Pasensian, dagiti servers ket nadagsenan unay tattan.
 Adu unay nga agar-aramat ti mangkitkita daytoy a panid.
 Pangaasim nga aguray ka met sakbay a padasem ti mangkita daytoy a panid.
 
@@ -339,8 +339,8 @@ $1',
 # Main script and global functions
 'nosuchaction' => 'Awan ti kasta nga aramid',
 'nosuchactiontext' => 'Ti inted nga inaganan ti URL ket imbalido.
-Baka madi ti naimakiniliam nga URL, wenno sinurot mo ti saan nga agpayso a panilpo.
-Baka daytoy ket "kiteb" ti "software" nga ususaren daytoy a/nga {{SITENAME}}.',
+Baka madi ti naimakiniliam nga URL, wenno sinurotmo ti saan nga agpayso a panilpo.
+Baka daytoy ket "kiteb" ti "software" nga ususaren babaen ti {{SITENAME}}.',
 'nosuchspecialpage' => 'Awan ti kasta nga espesial a panid',
 'nospecialpagetext' => '<strong>Nagkiddaw ka ti imbalido nga espesial a panid.</strong>
 
@@ -349,11 +349,11 @@ Masarakan ti listaan dagiti umisu nga espesial a pampanid iti [[Special:SpecialP
 # General errors
 'error' => 'Biddut',
 'databaseerror' => 'Biddut iti database',
-'dberrortext' => 'Adda biddut ti database ti  gramatika na a pinagsapul.
+'dberrortext' => 'Adda biddut ti database ti  gramatika na a panagsapul.
 Adda ngata  kiteb iti software.
-Ti pinaudi a pinagsapul ti database ket:
+Ti kinaudia a panagpadas ti panagsapul ti database ket:
 <blockquote><tt>$1</tt></blockquote>
-naggapu ti uneg ti opisio "<tt>$2</tt>".
+naggapu ti uneg ti pamay-an "<tt>$2</tt>".
 Ti database ket nangipatulod ti biddut "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Adda biddut ti database ti  gramatika a panagsapul.
 Ti kinaudi a panagsapul ti database ket:
@@ -363,7 +363,7 @@ Ti database ket nangipatulod ti biddut "$3: $4".',
 'laggedslavemode' => 'Ballaag: Mabalin a ti panid ket awan ti nagyan na kadagiti naudi a panagpabaro.',
 'readonly' => 'Nakandadoan ti database',
 'enterlockreason' => 'Mangipan ti rason no apay nga ikandado, agraman no kaano a maluktan ti kandado',
-'readonlytext' => 'Ti database ket naikandado iti baro a panagikabil ken panagbaliw, gapu dagiti kanayon nga pagsimpa, ket no malpas absublin to ti kasla idi.
+'readonlytext' => 'Ti database ket naikandado iti baro a panagikabil ken panagbaliw, gapu dagiti kanayon a pagsimpa, ket no malpas kadawyanto nga agsubli.
 
 Ti administrador a nagkandado ket daytoy ti palawag na: $1',
 'missing-article' => 'Ti database ket saan a nakabiruk ti testo ti panid  a nabirukanna kuman, ti napanaganan ti "$1" $2.
@@ -395,20 +395,20 @@ Amangan no addan sabali a nangikkat.',
 'delete-hook-aborted' => 'Inukas ti kawit ti panagborra.
 Awan ti intedna a palawag.',
 'badtitle' => 'Madi a titulo',
-'badtitletext' => 'Ti nakiddaw a titulo ti panid ket imbalido, blanko, wenno saan nga umno a naisilpo a titulo a maki-pagsasao wenno maki-wiki.
+'badtitletext' => 'Ti nakiddaw a titulo ti panid ket imbalido, blanko, wenno maysa a saan nga husto a naisilpo a titulo nga inter-lengguahe wenno inter-wiki a titulo.
 Adda ngata nagyan a maysa wenno ad-adu pay a kababalin a saan a mausar iti titulo.',
 'perfcached' => 'Ti sumaganad a data ket naka-cached ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagant|dagiti $1 a nagbanagan}} ket magun-od idiay cache.',
 'perfcachedts' => 'Ti sumaganad a data ket naka-cached, ken naudi a napabaro idi $1. Ti kaadu a {{PLURAL:$4|iti maysa a nagbanagan |dagiti $4 nagbanagan}} ket magun-od idiay cache.',
 'querypage-no-updates' => 'Dagiti panangpabaro iti daytoy a panid ket agdama a nabaldado. 
 Saan a mipasaradiwa ita dagiti data ditoy.',
 'wrong_wfQuery_params' => 'Kamali a parametro iti wfQuery()<br />
-Opisio: $1<br />
+Pamay-an: $1<br />
 Panagsapul: $2',
 'viewsource' => 'Kitaen ti taudan',
 'viewsource-title' => 'Kitaen ti taudan iti $1',
 'actionthrottled' => 'Napabuntog ti aramid',
-'actionthrottledtext' => 'Para ti pagkontra ti spam, naipatingga ka ti pinagtungpal ti adu unay iti daytoy nga aramid iti nasiket nga oras, ken nalippasamon ti patingga.
-Pangngaasi nga ipadas mo manen no madamdama.',
+'actionthrottledtext' => 'Para ti pagkontra ti spam, naipatinggaka ti panagtungpal ti adu unay iti daytoy nga aramid iti nasiket nga oras, ken nalippasamon ti patingga.
+Pangngaasi nga ipadasmo manen no madamdama.',
 'protectedpagetext' => 'Nasalakniban daytoy a panid tapno mapawilan ti panag-urnos.',
 'viewsourcetext' => 'Mabalinmo a kitaen ken tuladen ti taudan daytoy a panid:',
 'viewyourtext' => "Mabalinmo a makita ken tuladen ti taudan dagiti '''inurnosmo''' ditoy a panid:",
@@ -449,7 +449,7 @@ Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENA
 'yourname' => 'Nagan ti agar-aramat:',
 'yourpassword' => 'Kontrasenias:',
 'yourpasswordagain' => 'Uliten ti kontrasenias:',
-'remembermypassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (para iti kaadu iti $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}})',
+'remembermypassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (para iti kapaut iti $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}})',
 'securelogin-stick-https' => 'Agyan ka a nakasilpo iti HTTPS no nakastrekka',
 'yourdomainname' => 'Ti bukodmo a pagturayan:',
 'externaldberror' => 'Adda biddut idi ti panakapasingked ti database wenno saanmo a mabalin ti agpabaro ti bukodmo a ruar a pakabilangan.',
@@ -696,7 +696,9 @@ Naiyalis ngatan wenno naikkat idi kitkitaen dayta a panid.',
 
 Ti kontrasenias ti baro a pakabilangan ket masukatan idiay ''[[Special:ChangePassword|pagsukatan ti kontrasenias]]'' a panid no sumrekka.",
 'newarticle' => '(Baro)',
-'newarticletext' => "Nasurotmo ti maysa a panilpo ti panid a saan pay a napartuat. Tapno pmapartuat daytoy a panid, rugiamon ti agikur-it wenno agisurat iti pagsuratan a kahon iti baba (kitaen ti [[{{MediaWiki:Helppage}}|panid ti tulong]] para iti ad-adu pay a pakaammo). No met nakadanonka ditoy a dimo inggagara wenno gapu iti biddut, agtakla ka laeng ti '''agsubli'' a buton ti pabasabasam tapno makasublika iti naggapuam a panid.",
+'newarticletext' => "Nasurotmo ti maysa a panilpo ti panid a saan pay a napartuat. 
+Tapno mapartuat daytoy a panid, rugiamon ti agikur-it wenno agisurat iti pagsuratan a kahon dita baba (kitaen ti [[{{MediaWiki:Helppage}}|panid ti tulong]] para iti ad-adu pay a pakaammo). 
+No addaka ditoy babaen ti biddut, itaklam ti '''agsubli'''a buton ti pabasabasam tapno makasublika iti naggapuam a panid.",
 'anontalkpagetext' => "----''Daytoy ti pakitungtungan a panid para iti di am-ammo nga agar-aramat a saan pay a nakaaramid ti pakabilangan, wenno saan na nga us-usaren.
 Dakami ket agusar kami ti numero nga IP a pagtaengan ti panangilasin dagiti lalaki/babai.
 Ti kastoy nga IP a pagtaengan ket us-usaren a bingayan ti adu pay a sabsabali nga agar-aramat.
@@ -739,14 +741,14 @@ Annawid a .css ken .js dagiti titulo ket agususar ti napababa a letra, a kas dag
 Dagiti sinukatam ket saan pay a naidulin!",
 'continue-editing' => 'Agtultuloy nga agurnos',
 'previewconflict' => 'Daytoy a panagpadas ket agiparang ti testo dita ngato a panagurnos a lugar a kasla agparang no kayatmo nga idulin.',
-'session_fail_preview' => "'''Pasensian a! Saanmi a maaramid ti panag-urnos gapu ngamin ta naawanan ti gimong ti data.'''
+'session_fail_preview' => "'''Pasensia! Saanmi a maaramid ti panag-urnos gapu ngamin ta naawanan ti gimong ti data.'''
 Pangngaasi a padasem manen.
 No saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek ka manen.",
-'session_fail_preview_html' => "'''Pangngaasi! Saanmi a maaramid ti panagurnosmo ngamin ket naawanan ti gimong a datos.'''
+'session_fail_preview_html' => "'''Pasensia! Saanmi a maaramid ti panagurnosmo ngamin ket naawanan ti gimong a datos.'''
 
 ''Gapu ti {{SITENAME}} ket addaa ti nakilaw a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut ti dakes a JavaScript.''
 
-'''No daytoy ket pudno a panagurnos, pangngaasi a padasem manen.'''
+'''No daytoy ket pudno a panag-urnos, pangngaasi a padasem manen.'''
 No saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
 'token_suffix_mismatch' => "'''Ti panag-urnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna ti kuldit ti kababalin idiay pinagpudno ti panag-urnos.'''
 Ti panag-urnos ket saan a naawat tapno mapawilan ti panakadadael ti testo ti panid.
@@ -761,7 +763,7 @@ Mapasamak daytoy no agus-usarka ti saan a nasayaat a naibasta ti sapot a diamamm
 Ti ngato a lugar ti testo ket adda dagiti nagyanna a testo ti panid a kasla agdama a kita na.
 Ti inurnosmo ket maipakita dita babba a lugar ti testo
 Ipatipon mo dagiti sinukatam idiay lugar ti testo.
-'''Iti laeng'' testo dita ngato a lugar ti testo ti maidulin no pesselem ti \"{{int:savearticle}}\".",
+'''Iti laeng''' testo dita ngato a lugar ti testo ti maidulin no pesselem ti \"{{int:savearticle}}\".",
 'yourtext' => 'Ti testom',
 'storedversion' => 'Bersion a naidulin',
 'nonunicodebrowser' => "'''Ballaag: Ti  pabasabasam ket saan a kasla unicode .'''
@@ -784,7 +786,7 @@ No kayatmo i \"cut-n-paste\" mo dagiti testo iti testo a papeles ken idulinmo no
 
 Ti administrador a nangrikep ket saan a nangted ti palawag: \$1",
 'protectedpagewarning' => "'''Ballaag:  Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan ti gundaway nga administrador ti makaurnos ditoy.'''
-Ti nakaudi a naikabil a listaan ket adda dita baba tapno usarena  reperensia:",
+Ti nakaudi a naikabil a listaan ket adda dita baba tapno usaren a  reperensia:",
 'semiprotectedpagewarning' => "'''Pakaammo:'''Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.
 Ti naudi a naikabil a listaan ket adda dita baba tapno usaren a reperensia:",
 'cascadeprotectedwarning' => "'''Ballaag:''' Daytoy a panid ket nasalakniban tapno dagiti laeng administrador nga addaan ti  gundaway ti makaurnos, ngamin ket nairaman kadagiti sumaganad a sariap a nasalakniban
@@ -806,9 +808,9 @@ Mabalinmo ti agsubli ken urnosen ti adda a panid, wenno [[Special:UserLogin|sumr
 'permissionserrors' => 'Dagiti biddut ti pammalubos',
 'permissionserrorstext' => 'Awan ti pammalubosmo nga agaramid iti dayta, gapu ti sumaganad {{PLURAL:$1|a rason|a rasrason}}:',
 'permissionserrorstext-withaction' => 'Awan ti pammalubosmo nga $2, gapu ti sumaganad {{PLURAL:$1|a rason|rasrason}}:',
-'recreate-moveddeleted-warn' => "''Ballaag: Agparpartuatka manen ti naikkat idi a panid.'''
+'recreate-moveddeleted-warn' => "'''Ballaag: Agparpartuatka manen ti naikkat idi a panid'''
 
-Nasken a siguraduem no maikanatad nga ituloymo a parnuayen manen wenno urnosen daytoy a panid.
+Nasken a siguraduem no maikanatad nga ituloymo nga urnosen daytoy a panid.
 Ti panaka-ikkat ken panka-iyalis a listaan para iti daytoy  a panid ket adda ditoy a pakakitaan:",
 'moveddeleted-notice' => 'Naikkaten daytoy a panid.
 Ti listaan a panaka-ikkat ken panaka-iyalis ti panid ket naikabil dita baba tapno usaren a reperensia.',
@@ -941,7 +943,7 @@ Dagiti sabsabali nga administrador idiay {{SITENAME}} ket mabalin da a serrekan
 * Makapataud a dakes a pakaammo
 * Di maiparbeng a  kabukbukodan a pakaammo
 * : ''dagiti pagtaengan ken numero ti telepono, numero ti sosial a seguridad, ken dadduma pay.''",
-'revdelete-legend' => 'Iplastar dagiti pinagparit ti panagkita',
+'revdelete-legend' => 'Iplastar dagiti panagiparit ti panagkita',
 'revdelete-hide-text' => 'Ilemmeng ti testo ti binaliwan',
 'revdelete-hide-image' => 'Ilemmeng ti linaon ti papeles',
 'revdelete-hide-name' => 'Ilemmeng ti aramid ken puntaan',
@@ -977,9 +979,9 @@ Saan mo a mabalin a serrekan.',
 'revdelete-concurrent-change' => 'Biddut ti panagpabaro daytoy a banag a petsado a $2, $1: Ti panakaikabil na ket mabalin a nasuktanen ti sabsabli idi pinadas mo a pinabaro.',
 'revdelete-only-restricted' => 'Biddut ti panagilemmeng daytoy banag a petsado a $2, $1: Saan mo a maidepdep dagita iti panagkita dagiti adminitrador no saan mo a pilian ti maysa kadagiti pinagpili ti panagkita.',
 'revdelete-reason-dropdown' => '*Dagiti kadawyan a panagikkat
-** Panaglabsing ti karbengan ti pinagipablaak
-** Saan a maibagay a kabukbukodan a pakaammo
-** Makapataud a dakes a pakaammo',
+** Panaglabsing ti karbengan ti panagipablaak
+** Saan a maibagay ti kabukbukodan a pakaammo
+** Makapataud ti dakes a pakaammo',
 'revdelete-otherreason' => 'Sabali/dadduma a rason:',
 'revdelete-reasonotherlist' => 'Sabali a rason',
 'revdelete-edit-reasonlist' => 'Urnosen ti rason ti panagikkat',
@@ -988,7 +990,7 @@ Saan mo a mabalin a serrekan.',
 # Suppression log
 'suppressionlog' => 'Listaan ti nadepdepan',
 'suppressionlogtext' => 'Dita baba ket addaan dagiti listaan ti pinagikkat ken npanagserra a nairaman dagiti linaon a nailemmeng manipud kadagiti administrador.
-Kitaen ti [[Special:BlockList|Listaan ti lapden nga IP]] para iti listaan kadagiti agdama nga operasional a pinagparit ken panagserra.',
+Kitaen ti [[Special:BlockList|Listaan ti lapden nga IP]] para iti listaan kadagiti agdama nga operasional a panagparit ken panagserra.',
 
 # History merging
 'mergehistory' => 'Pagtiponen dagiti pakasaritaan ti pampanid',
@@ -1035,7 +1037,7 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 # Search results
 'searchresults' => 'Dagiti nagbanagan ti panagbiruk',
 'searchresults-title' => 'Dagiti nabirukan a nagbanagan ti "$1"',
-'searchresulttext' => 'Ti adu pay a pakaammo ti pinagbiruk {{SITENAME}}, kitaem ti [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchresulttext' => 'Ti adu pay a pakaammo ti panagbiruk {{SITENAME}}, kitaem ti [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => 'Nagbiruk ka  para iti \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|amin a panid a mangrugi iti "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|amin a panid nga agsilpo iti "$1"]])',
 'searchsubtitleinvalid' => "Nagbiruk ka para  iti '''$1'''",
 'toomanymatches' => 'Adu unay ti napasubli  nga agpapada, pangngaasi a padasem ti sabali a panagsapul',
@@ -1059,9 +1061,9 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 'searchprofile-images' => 'Sabsabali a midia',
 'searchprofile-everything' => 'Amin amin',
 'searchprofile-advanced' => 'Napasayaat',
-'searchprofile-articles-tooltip' => 'Agbiruk ka idiay $1',
-'searchprofile-project-tooltip' => 'Agbiruk ka idiay $1',
-'searchprofile-images-tooltip' => 'Agbiruk ka iti papeles',
+'searchprofile-articles-tooltip' => 'Agbirukka idiay $1',
+'searchprofile-project-tooltip' => 'Agbirukka idiay $1',
+'searchprofile-images-tooltip' => 'Agbirukka para iti papeles',
 'searchprofile-everything-tooltip' => 'Birukem amin a linaon (uray dagiti makipatangan a panid)',
 'searchprofile-advanced-tooltip' => 'Agbiruk ka kadagiti naiduma a "nagan ti lugar"',
 'search-result-size' => '$1 ({{PLURAL:$2|iti 1 a balikas|kadagiti $2 a balikas}})',
@@ -1077,7 +1079,7 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 'search-mwsuggest-disabled' => 'awanan ti singasing',
 'search-relatedarticle' => 'Mainaig',
 'mwsuggest-disable' => 'Pagsardengen dagiti AJAX a naibagbaga',
-'searcheverything-enable' => 'Agbiruk ka kadagiti amin a nagan ti lugar',
+'searcheverything-enable' => 'Agbirukka kadagiti amin a nagan ti lugar',
 'searchrelated' => 'mainaig',
 'searchall' => 'amin',
 'showingresults' => "Maiparang iti baba ti agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
@@ -1088,7 +1090,7 @@ Padasem a  pasarunuan ti panagbiruk mo ti ''all:'' tapno birukem amin a nagyan (
 'search-nonefound' => 'Awan ti nagbanagan a kapadpada ti sinapul.',
 'powersearch' => 'Napasayat a panagbiruk',
 'powersearch-legend' => 'Napasayat a panagbiruk',
-'powersearch-ns' => 'Agbiruk ka kadagiti nagan ti lugar:',
+'powersearch-ns' => 'Agbirukka kadagiti nagan ti lugar:',
 'powersearch-redir' => 'Ilista dagiti baw-ing',
 'powersearch-field' => 'Biruken iti',
 'powersearch-togglelabel' => 'Markaan:',
@@ -1205,7 +1207,7 @@ Masapul a nababbaba ngem $1 {{PLURAL:$1| a karakter|kadagiti karakter}} ti kaati
 'gender-unknown' => 'Saan a naibagbaga',
 'gender-male' => 'Lalaki',
 'gender-female' => 'Babai',
-'prefs-help-gender' => 'Makapili: Usaren no lalaki wenno babai a pinagtawag ti "software" .
+'prefs-help-gender' => 'Makapili: Usaren no lalaki wenno babai a panagtawag ti "software" .
 Daytoy a pakaammo ket makita ti publiko.',
 'email' => 'E-surat',
 'prefs-help-realname' => 'Saan a nasken ti pudno a nagan.
@@ -1402,8 +1404,8 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'rcshowhideliu' => '$1 dagiti nakastrek nga agar-aramat',
 'rcshowhideanons' => '$1 dagiti di am-ammo nga agar-aramat',
 'rcshowhidepatr' => '$1 dagiti napatrulian a panag-urnos',
-'rcshowhidemine' => '$1 dagiti inurnos ko',
-'rclinks' => 'Ipakita dagiti naudi a $1 sinukatan iti kallabes a $2 nga al-aldaw<br />$3',
+'rcshowhidemine' => '$1 dagiti inurnosko',
+'rclinks' => 'Ipakita dagiti naudi a $1 sinukatan iti kallabes a $2 nga al-aldaw<br />$3',
 'diff' => 'sabali',
 'hist' => 'saritaan',
 'hide' => 'Ilemmeng',
@@ -1605,10 +1607,11 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'lockmanager-fail-closelock' => 'Saan a marikepan ti nakandaduan a papeles para iti "$1".',
 'lockmanager-fail-deletelock' => 'Saan a maikkat ti nakandaduan a papeles para iti "$1".',
 'lockmanager-fail-acquirelock' => 'Saan a makaala ti kandado para iti "$1".',
-'lockmanager-fail-openlock' => 'Saan a maluktan ti kandado ti papeles para iti "$1".',
+'lockmanager-fail-openlock' => 'Saan a malukatan ti kandado ti papeles para iti "$1".',
 'lockmanager-fail-releaselock' => 'Saan a maibbatan ti kandado para iti "$1".',
 'lockmanager-fail-db-bucket' => 'Saan a makasilpo ti umanay a kandado kadagiti database idiay timba $1.',
 'lockmanager-fail-db-release' => 'Saan a maibbatan dagiti kandado idiay database $1.',
+'lockmanager-fail-svr-acquire' => 'Saan a makaala kadagiti kandado ti server $1.',
 'lockmanager-fail-svr-release' => 'Saan a maibbatan dagiti kandado idiay server $1.',
 
 # ZipDirectoryReader
@@ -1842,7 +1845,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'nviews' => '$1 {{PLURAL:$1|a panangkita|kadagiti panangkita}}',
 'nimagelinks' => 'Inusar idiay $1 {{PLURAL:$1|a panid|a pampanid}}',
 'ntransclusions' => 'inusar idiay $1 {{PLURAL:$1|a panid|a pampanid}}',
-'specialpage-empty' => 'Awan dagiti nagbanagan na daytoy a padamag.',
+'specialpage-empty' => 'Awan dagiti nagbanaganna daytoy a padamag.',
 'lonelypages' => 'Dagiti naulila a panid',
 'lonelypagestext' => 'Dagiti sumaganad a panid ket saan a nakasilpo idiay wenno naipakita kadagiti sabali a panid idiay {{SITENAME}}.',
 'uncategorizedpages' => 'Dagiti saan a nakategoria a panid',
@@ -2479,8 +2482,8 @@ Saanka a makaaramid ti pakabilangan',
 'cant-block-while-blocked' => 'Saanmo a maserraan dagiti sabali nga agar-aramat no naserraan ka met.',
 'cant-see-hidden-user' => 'Ti agar-aramat a kayatmo a serraan ket naserraan ken nailemmeng.
 Ket awan met ti karbengam nga agilemming ti agar-aramat, saan mo a makita wenno mabaliwan ti serra ti agar-aramat.',
-'ipbblocked' => 'Saan mo a mabalin ti agserra wenno agikkat ti serra ti sabali nga agar-aramat, ngamin ket naserraan ka met.',
-'ipbnounblockself' => 'Saan mo a mabalin a lukatan ti serram',
+'ipbblocked' => 'Saanmo a mabalin ti agserra wenno agikkat ti serra ti sabali nga agar-aramat, ngamin ket naserraan ka met.',
+'ipbnounblockself' => 'Saanmo a mabalin a lukatan ti serram',
 
 # Developer tools
 'lockdb' => 'Balunetan ti database',
@@ -2493,7 +2496,7 @@ Pangngaasi ta pasingkedam a daytoy ti kayatmo nga aramiden.',
 'unlockconfirm' => 'Wen, talaga a kayatko a balunetan ti database.',
 'lockbtn' => 'Balunetan ti database',
 'unlockbtn' => 'Lukatan ti database',
-'locknoconfirm' => 'Saan mo nga inkur-it ti kahon ti pasingkedan.',
+'locknoconfirm' => 'Saanmo nga inkur-it ti kahon ti pasingkedan.',
 'lockdbsuccesssub' => 'Balligi ti pannakabalunet ti database',
 'unlockdbsuccesssub' => 'Naikkaten ti balunet ti database',
 'lockdbsuccesstext' => 'Nabalunetan ti database.<br />
@@ -2595,8 +2598,8 @@ Ti kinaudi a naikabil ti listaan ket adda dita baba tapno mausar a reperensia:",
 Ti kinaudi a naikabil ti listaan ket adda iti baba tapno mausar a reperensia:",
 'move-over-sharedrepo' => '== Addaan ti papeles ==
 [[:$1]] addaan idiay pagbingayan a nagikabilan. Ti panagiyalis ti papeles iti titulo nga itoy ket paawanen na ti pagbingayan a papeles.',
-'file-exists-sharedrepo' => 'Ti napilim a nagan ti papeles ket naususaren idiay pagbingayan a nagikabilan.
-Pangngaasi ta agpili ka ti sabali a nagan.',
+'file-exists-sharedrepo' => 'Ti napilim a nagan ti papeles ket naususaren idiay pagbingayan a pagikabilan.
+Pangngaasi nga agpilika ti sabali a nagan.',
 
 # Export
 'export' => 'Agipan dagiti panid',
@@ -2708,7 +2711,7 @@ Pangngaasi ta padasem manen.',
 
 # JavaScriptTest
 'javascripttest' => 'Subsubokan ti JavaScript',
-'javascripttest-disabled' => 'Daytoy nga opisio ket saan pay a napakabaelan iti daytoy a wiki.',
+'javascripttest-disabled' => 'Daytoy a pamay-an ket saan pay a napakabaelan iti daytoy a wiki.',
 'javascripttest-title' => 'Agpatpataray ti $1 a subsubokan',
 'javascripttest-pagetext-noframework' => 'Daytoy a panid ket nailasin para iti panagpataray ti subsubokan a JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Di amamo a pagsubsubokan a tabas "$1".',
@@ -3173,7 +3176,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-flash-mode-2' => 'kinasigud a pinagiddep ti pinagsilap',
 'exif-flash-mode-3' => 'automatiko',
 'exif-flash-function-1' => 'Awan ti silap nga opisio',
-'exif-flash-redeye-1' => 'wagas a pinagikkat ti pinaglabbaga ti mata',
+'exif-flash-redeye-1' => 'wagas a panagikkat ti panaglabbaga ti mata',
 
 'exif-focalplaneresolutionunit-2' => 'pulgada',
 
@@ -3196,7 +3199,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-exposuremode-1' => 'Manual a panakailatakan',
 'exif-exposuremode-2' => 'Auto bracket',
 
-'exif-whitebalance-0' => 'Automatiko a pinagtimbang ti puraw',
+'exif-whitebalance-0' => 'Automatiko a panagtimbang ti puraw',
 'exif-whitebalance-1' => 'Manual a panagtimbang ti puraw',
 
 'exif-scenecapturetype-0' => 'Pagalagadan',
@@ -3280,7 +3283,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-dc-source' => 'Taudan ti midia',
 'exif-dc-type' => 'Kita ti midia',
 
-'exif-rating-rejected' => 'Saan nga naawat',
+'exif-rating-rejected' => 'Saan a naawat',
 
 'exif-isospeedratings-overflow' => 'Dakdakkel ngem 65535',
 
@@ -3388,8 +3391,8 @@ Daytoy a kodigo a pasingkedan ket agpaso iti $4.',
 'invalidateemail' => 'Ukasen ti pammasingked ti e-surat',
 
 # Scary transclusion
-'scarytranscludedisabled' => '[Nabaldado ti Interwiki pinagiraman]',
-'scarytranscludefailed' => '[Napaay ti pinagala ti templeta ti $1]',
+'scarytranscludedisabled' => '[Nabaldado ti Interwiki panagiraman]',
+'scarytranscludefailed' => '[Napaay ti panagala ti plantilia para iti $1]',
 'scarytranscludetoolong' => '[Atiddog unay ti URL]',
 
 # Delete conflict
@@ -3611,8 +3614,8 @@ Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'htmlform-selectorother-other' => 'Sabali',
 
 # SQLite database support
-'sqlite-has-fts' => '$1 adda ti suporta ti napno a teksto ti panagbiruk',
-'sqlite-no-fts' => '$1 awan ti suporta ti napno a teksto ti panagbiruk',
+'sqlite-has-fts' => '$1 adda ti suporta ti napno a testo ti panagbiruk',
+'sqlite-no-fts' => '$1 awan ti suporta ti napno a testo ti panagbiruk',
 
 # New logging system
 'logentry-delete-delete' => 'Inikkat ni $1 ti panid  ti $3',
@@ -3713,6 +3716,4 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|sig-siglo}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|mil-milenio}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Saan a makaala kadagiti kandado ti server $1.',
 );
index 024b453..718a2af 100644 (file)
@@ -244,15 +244,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Virkja hlutabreytingu með því að hægrismella á hlutafyrirsagnir (JavaScript)',
 'tog-showtoc' => 'Sýna efnisyfirlit (fyrir síður með meira en 3 fyrirsagnir)',
 'tog-rememberpassword' => 'Muna innskráninguna mína í þessum vafra (í allt að $1 {{PLURAL:$1|dag|daga}})',
-'tog-watchcreations' => 'Bæta síðum sem ég bý til á vaktlistann minn',
-'tog-watchdefault' => 'Bæta síðum sem ég breyti á vaktlistann minn',
-'tog-watchmoves' => 'Bæta síðum sem ég færi á vaktlistann minn',
-'tog-watchdeletion' => 'Bæta síðum sem ég eyði á vaktlistann minn',
+'tog-watchcreations' => 'Bæta síðum sem ég bý til og skrám sem ég hleð inn á vaktlistann minn',
+'tog-watchdefault' => 'Bæta síðum og skrám sem ég breyti á vaktlistann minn',
+'tog-watchmoves' => 'Bæta síðum og skrám sem ég færi á vaktlistann minn',
+'tog-watchdeletion' => 'Bæta síðum og skrám sem ég eyði á vaktlistann minn',
 'tog-minordefault' => 'Merkja allar breytingar sem minniháttar sjálfgefið',
 'tog-previewontop' => 'Sýna forskoðun á undan breytingarkassanum',
 'tog-previewonfirst' => 'Sýna forskoðun með fyrstu breytingu',
 'tog-nocache' => 'Slökkva á flýtiminni vafrans',
-'tog-enotifwatchlistpages' => 'Senda mér tölvupóst þegar síðu á vaktlistanum mínu er breytt',
+'tog-enotifwatchlistpages' => 'Senda mér tölvupóst þegar síðu eða skrá á vaktlistanum mínu er breytt',
 'tog-enotifusertalkpages' => 'Senda mér tölvupóst þegar notandaspjallinu mínu er breytt',
 'tog-enotifminoredits' => 'Senda mér einnig tölvupóst vegna minniháttar breytinga á síðum',
 'tog-enotifrevealaddr' => 'Gefa upp netfang mitt í tilkynningarpóstum',
@@ -617,6 +617,10 @@ $2',
 'filereadonlyerror' => 'Ekki var hægt að breyta skránni "$1" því skráin í skráarsafninu "$2" er engöngu hægt að lesa.
 
 Möppudýrið sem læsti skránni gaf þessa ástæðu: "\'\'$3\'\'".',
+'invalidtitle-knownnamespace' => 'Ógildur titill í nafnrými "$2" og með textann "$3"',
+'invalidtitle-unknownnamespace' => 'Ógildur titill með óþekkt nafnrými númer $1 og texta "$2"',
+'exception-nologin' => 'Óinnskráð(ur)',
+'exception-nologin-text' => 'Þessi síða eða aðgerð krefst þess að þú sért skráður inn á þessum wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Slæm stilling: óþekktur veiruskannari: ''$1''",
@@ -871,7 +875,7 @@ Hlutinn gæti hafa verið fluttur til eða hent á meðan þú varst að skoða
 
 Hægt er að breyta lykilorðinu fyrir aðganginn á ''[[Special:ChangePassword|change password]]'' þegar notandinn hefur skráð sig inn.",
 'newarticle' => '(Ný)',
-'newarticletext' => "Þú hefur fylgt tengli á síðu sem ekki er til.
+'newarticletext' => "Þú hefur fylgt tengli á síðu sem ekki er til ennþá.
 Þú getur búið til síðu með þessu nafni með því að skrifa í formið fyrir neðan
 (meiri upplýsingar í [[{{MediaWiki:Helppage}}|hjálpinni]]).
 Ef þú hefur óvart villst hingað geturðu notað '''til baka'''-hnappinn í vafranum þínum.",
@@ -984,6 +988,7 @@ Svo virðist sem henni hafi verið eytt.',
 'edit-no-change' => 'Breyting þín var hunsuð, því engin breyting var á textanum.',
 'edit-already-exists' => 'Gat ekki skapað nýja síðu.
 Hún er nú þegar til.',
+'defaultmessagetext' => 'Sjálfgefinn skilaboða texti',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Viðvörun:''' Þessi síða inniheldur of mörg vinnslufrek aðgerðar þáttunar köll.
@@ -1242,6 +1247,7 @@ Athugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.',
 'prefs-beta' => 'Stillingar á prufustigi',
 'prefs-datetime' => 'Tímasnið og tímabelti',
 'prefs-labs' => 'Stillingar á tilraunastigi',
+'prefs-user-pages' => 'Notendasíður',
 'prefs-personal' => 'Notandaupplýsingar',
 'prefs-rc' => 'Nýlegar breytingar',
 'prefs-watchlist' => 'Vaktlistinn',
@@ -1374,7 +1380,7 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 # Groups
 'group' => 'Hópur:',
 'group-user' => 'Notendur',
-'group-autoconfirmed' => 'Sjálfkrafa staðfesting notenda',
+'group-autoconfirmed' => 'Sjálfkrafa staðfestir notendur',
 'group-bot' => 'Vélmenni',
 'group-sysop' => 'Stjórnendur',
 'group-bureaucrat' => 'Möppudýr',
@@ -1389,7 +1395,7 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 'group-suppress-member' => '{{GENDER:$1|Umsjón}}',
 
 'grouppage-user' => '{{ns:project}}:Notendur',
-'grouppage-autoconfirmed' => '{{ns:project}}:Sjálfkrafa staðfesting notenda',
+'grouppage-autoconfirmed' => '{{ns:project}}:Sjálfkrafa staðfestir notendur',
 'grouppage-bot' => '{{ns:project}}:Vélmenni',
 'grouppage-sysop' => '{{ns:project}}:Stjórnendur',
 'grouppage-bureaucrat' => '{{ns:project}}:Möppudýr',
@@ -1420,6 +1426,7 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 'right-writeapi' => 'Nota API skrifun',
 'right-delete' => 'Eyða síðum',
 'right-bigdelete' => 'Eyða síðum með stórum breytingaskrám',
+'right-deletelogentry' => 'Eyða og endurvekja sérstakar aðgerða færslur',
 'right-deleterevision' => 'Eyða og endurvekja sérstaka breytignar á síðum',
 'right-deletedhistory' => 'Skoða eyddar færslur úr breytingarskrá, án efnis þeirra',
 'right-deletedtext' => 'Sjá eyddan texta og breytingar á milli eyddra útgáfna',
@@ -1700,8 +1707,8 @@ Ef vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjó
 'backend-fail-writetemp' => 'Gat ekki skrifað í tímabundna skrá.',
 'backend-fail-closetemp' => 'Mistókst að loka tímabundinni skrá.',
 'backend-fail-read' => 'Mistókst að lesa skrá $1.',
-'backend-fail-create' => 'Mistókst að búa til skrá $1.',
-'backend-fail-maxsize' => 'Mistókst að búa til skránna $1 því hún er stærri en {{PLURAL:$2|eitt bæti|$2 bæti}}.',
+'backend-fail-create' => 'Mistókst að skrifa skrá $1.',
+'backend-fail-maxsize' => 'Mistókst að skrifa skránna $1 því hún er stærri en {{PLURAL:$2|eitt bæti|$2 bæti}}.',
 'backend-fail-readonly' => 'Gagnabankann "$1" er engöngu hægt að lesa í augnablikinu. Ástæðan sem var gefin er: "\'\'$2\'\'"',
 'backend-fail-connect' => 'Mistókst að tengjast gagnabankanum "$1".',
 'backend-fail-internal' => 'Óþekkt villa átti sér stað í gagnabankanum "$1".',
@@ -2005,6 +2012,7 @@ Vinsamlegast athugið að aðrar vefsíður gætu tengt beint í skrár héðan,
 Þú getur takmarkað listann með því að velja tegund aðgerðaskráar, notandanafn, eða síðu.',
 'logempty' => 'Engin slík aðgerð fannst.',
 'log-title-wildcard' => 'Leita að titlum sem byrja á þessum texta',
+'showhideselectedlogentries' => 'Sýna/fela valdar aðgerða færslur',
 
 # Special:AllPages
 'allpages' => 'Allar síður',
@@ -2024,6 +2032,10 @@ Vinsamlegast athugið að aðrar vefsíður gætu tengt beint í skrár héðan,
 'allpages-bad-ns' => '{{SITENAME}} hefur ekki nafnrými „$1“.',
 'allpages-hide-redirects' => 'Fela tilvísanir',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Þú ert að skoða útgáfu síðunnar úr skyndiminni, sem getur verið allt að $1 gömul.',
+'cachedspecial-refresh-now' => 'Skoða síðustu',
+
 # Special:Categories
 'categories' => 'Flokkar',
 'categoriespagetext' => 'Eftirfarandi {{PLURAL:$1|flokkur inniheldur|flokkar innihalda}} síður eða skrár.
@@ -2031,7 +2043,7 @@ Vinsamlegast athugið að aðrar vefsíður gætu tengt beint í skrár héðan,
 Sjá einnig [[Special:WantedCategories|eftirsótta flokka]].',
 'categoriesfrom' => 'Sýna flokka frá:',
 'special-categories-sort-count' => 'raða eftir fjölda',
-'special-categories-sort-abc' => 'raða eftir stafrófinu',
+'special-categories-sort-abc' => 'raða í stafrófsröð',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'Eyddar breytingar notanda',
@@ -2235,6 +2247,8 @@ Eyðing síðunnar gæti truflað vinnslu gangnasafns {{SITENAME}}; haltu áfram
 'rollback' => 'Taka aftur breytingar',
 'rollback_short' => 'Taka aftur',
 'rollbacklink' => 'taka aftur',
+'rollbacklinkcount' => 'taka aftur $1 {{PLURAL:$1|breytingu|breytingar}}',
+'rollbacklinkcount-morethan' => 'taka aftur fleiri en $1 {{PLURAL:$1|breytingu|breytingar}}',
 'rollbackfailed' => 'Mistókst að taka aftur',
 'cantrollback' => 'Ekki hægt að taka aftur breytingu, síðasti höfundur er eini höfundur þessarar síðu.',
 'alreadyrolled' => 'Ekki var hægt að taka síðustu breytingu [[:$1]] eftir [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) til baka;
@@ -2301,7 +2315,7 @@ Núverandi staða síðunnar er '''$1''':",
 ** Breytingarstríð
 ** Síða með margar heimsóknir',
 'protect-edit-reasonlist' => 'Breyta verndarástæðum',
-'protect-expiry-options' => '1 tím:1 hour,1 dag:1 day,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite',
+'protect-expiry-options' => '1 tími:1 hour,1 dag:1 day,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite',
 'restriction-type' => 'Réttindi:',
 'restriction-level' => 'Takmarkaði við:',
 'minimum-size' => 'Lágmarksstærð',
@@ -2466,7 +2480,7 @@ Gefðu nákvæma skýringu að neðan (til dæmis, með því að vísa í þær
 'badipaddress' => 'Ógilt vistfang',
 'blockipsuccesssub' => 'Bann tókst',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] hefur verið bannaður/bönnuð.<br />
-Sjá [[Special:BlockList|bannaðar notendur og vistföng]] fyrir yfirlit yfir núverandi bönn.',
+Sjá [[Special:BlockList|bannaðir notendur og vistföng]] fyrir yfirlit yfir núverandi bönn.',
 'ipb-blockingself' => 'Þú ert í þann mund að banna sjálfan þig! Ertu viss um að þú viljir gera það?',
 'ipb-confirmhideuser' => 'Þú ert í þann mund að banna notenda sem er falinn. Notendanafn hans mun ekki birtast í listum og aðgerðarskrám. Ertu viss um að þú viljir gera það?',
 'ipb-edit-dropdown' => 'Breyta ástæðu fyrir banni',
@@ -2684,7 +2698,7 @@ Ef síðari möguleikinn á við getur þú einnig notað tengil, til dæmis
 # Namespace 8 related
 'allmessages' => 'Meldingar',
 'allmessagesname' => 'Titill',
-'allmessagesdefault' => 'Sjálfgefinn texti',
+'allmessagesdefault' => 'Sjálfgefinn skilaboða texti',
 'allmessagescurrent' => 'Núverandi texti',
 'allmessagestext' => 'Þetta er listi yfir kerfismeldingar í Melding-nafnrýminu.
 Gjörðu svo vel og heimsæktu [//www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.',
@@ -2751,6 +2765,9 @@ Vinsamlegast reyndu aftur.',
 'import-invalid-interwiki' => 'Get ekki flutt inn frá þessum wiki.',
 'import-error-edit' => 'Síðan "$1" var ekki flutt inn því þú hefur ekki réttindi til að breyta henni.',
 'import-error-create' => 'Síðan "$1" var ekki flutt inn því þú hefur ekki réttindi til að stofna hana.',
+'import-error-interwiki' => 'Síðan "$1" var ekki flutt inn því nafn hennar er frátekið fyrir ytri tengla (tungumálatengla).',
+'import-error-special' => 'Síðan "$1" var ekki flutt inn því hún tilheyrir ákveðnu nafnrými sem leyfir ekki síður.',
+'import-error-invalid' => 'Síðan "$1" var ekki flutt inn því nafn hennar er ógilt.',
 
 # Import log
 'importlogpage' => 'Innflutningsskrá',
@@ -2761,6 +2778,8 @@ Vinsamlegast reyndu aftur.',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|breyting|breytingar}} frá $2',
 
 # JavaScriptTest
+'javascripttest' => 'JavaScript prófun',
+'javascripttest-disabled' => 'Þessi möguleiki hefur ekki verið virkjaður á þessum wiki.',
 'javascripttest-pagetext-skins' => 'Veldu þema sem á að keyra prófanirnar á:',
 
 # Tooltip help for the actions
@@ -3648,7 +3667,9 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'api-error-duplicate-archive-popup-title' => 'Eins {{PLURAL:$1|skrá|skrár}} sem {{PLURAL:$1|hefur|hafa}} þegar verið eytt.',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|Afrituð skrá|Afritaðar skrár}}',
 'api-error-empty-file' => 'Skráin sem þú valdir er tóm.',
+'api-error-emptypage' => 'Stofnun nýrra, tómra síðna er óheimil.',
 'api-error-fetchfileerror' => 'Innri villa: Mistókst að sækja skránna.',
+'api-error-fileexists-forbidden' => 'Skrá með nafninu "$1" er þegar til og ekki er hægt að yfirskrifa hana.',
 'api-error-file-too-large' => 'Skráin sem þú valdir er of stór.',
 'api-error-filename-tooshort' => 'Skráarnafnið er of stutt',
 'api-error-filetype-banned' => 'Þessi gerð skráar er bönnuð.',
@@ -3672,6 +3693,7 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'api-error-unknown-code' => 'Óþekkt villa: "$1"',
 'api-error-unknown-error' => 'Innri villa: Eitthvað fór úrskeiðis þegar að skráinni þinni var hlaðið inn.',
 'api-error-unknown-warning' => 'Óþekkt viðvörun: $1',
+'api-error-unknownerror' => 'Óþekkt villa: "$1".',
 'api-error-uploaddisabled' => 'Ekki er leyft að hlaða inn á þessum wiki.',
 'api-error-verification-error' => 'Þessi skrá gæti verið skemmd, eða með vitlausa skráarendingu.',
 
@@ -3684,5 +3706,6 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'duration-years' => '$1 {{PLURAL:$1|ár|ár}}',
 'duration-decades' => '$1 {{PLURAL:$1|áratugur|áratugir}}',
 'duration-centuries' => '$1 {{PLURAL:$1|öld|aldir}}',
+'duration-millennia' => '$1 {{PLURAL:$1|árþúsund}}',
 
 );
index 7b19079..f956152 100644 (file)
@@ -37,6 +37,7 @@
  * @author Marzedu
  * @author McDutchie
  * @author Melos
+ * @author Minerva Titani
  * @author Nemo bis
  * @author Nick1915
  * @author Ninniuz
@@ -655,7 +656,7 @@ L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
 'invalidtitle-knownnamespace' => 'Titolo non valido con namespace "$2" e testo "$3"',
 'invalidtitle-unknownnamespace' => 'Titolo non valido con namespace sconosciuto "$1" e testo "$2"',
 'exception-nologin' => 'Accesso non effettuato',
-'exception-nologin-text' => "Questa pagina o azione richiede che tu abbia effettuato l'accesso su questo wiki.",
+'exception-nologin-text' => "Questa pagina o azione richiede che tu abbia effettuato l'accesso su questa wiki.",
 
 # Virus scanner
 'virus-badscanner' => "Errore di configurazione: antivirus sconosciuto: ''$1''",
@@ -673,31 +674,31 @@ L'account è stato creato correttamente. Non dimenticare di personalizzare le [[
 'yourname' => 'Nome utente:',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'Ripeti la password:',
-'remembermypassword' => 'Ricorda la password su questo computer (per un massimo di $1 {{PLURAL:$1|giorno|giorni}})',
+'remembermypassword' => 'Ricorda la password su questo browser (per un massimo di $1 {{PLURAL:$1|giorno|giorni}})',
 'securelogin-stick-https' => 'Resta connesso attraverso HTTPS dopo il login',
 'yourdomainname' => 'Specificare il dominio',
 'externaldberror' => 'Si è verificato un errore con il server di autenticazione esterno, oppure non si dispone delle autorizzazioni necessarie per aggiornare il proprio accesso esterno.',
 'login' => 'Entra',
-'nav-login-createaccount' => 'Entra / Registrati',
+'nav-login-createaccount' => 'Entra / registrati',
 'loginprompt' => 'Per accedere a {{SITENAME}} è necessario abilitare i cookie.',
-'userlogin' => 'Entra / Registrati',
+'userlogin' => 'Entra / registrati',
 'userloginnocreate' => 'Entra',
 'logout' => 'Esci',
-'userlogout' => 'esci',
+'userlogout' => 'Esci',
 'notloggedin' => 'Accesso non effettuato',
 'nologin' => "Non hai ancora un accesso? '''$1'''.",
-'nologinlink' => 'Crealo ora',
-'createaccount' => 'Crea un nuovo utente',
+'nologinlink' => 'Registrati',
+'createaccount' => 'Crea un accesso',
 'gotaccount' => "Hai già un accesso? '''$1'''.",
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => 'Hai dimenticato i tuoi dati di accesso?',
-'createaccountmail' => 'via e-mail',
+'createaccountmail' => 'Tramite email',
 'createaccountreason' => 'Motivo:',
 'badretype' => 'Le password inserite non coincidono tra loro.',
 'userexists' => 'Il nome utente inserito è già utilizzato.
 Scegliere un nome utente diverso.',
-'loginerror' => "Errore nell'accesso",
-'createaccounterror' => "Impossìbile creare s'account: $1",
+'loginerror' => "Errore durante l'accesso",
+'createaccounterror' => "Impossibile creare l'account: $1",
 'nocookiesnew' => "La registrazione è stata completata, ma non è stato possibile accedere a {{SITENAME}} perché i cookie sono disattivati. Riprovare l'accesso con il nome utente e la password appena creati dopo aver attivato i cookie nel proprio browser.",
 'nocookieslogin' => "L'accesso a {{SITENAME}} richiede l'uso dei cookie, che risultano disattivati. Riprovare l'accesso dopo aver attivato i cookie nel proprio browser.",
 'nocookiesfornew' => "L'account utente non è stato creato, poiché non abbiamo potuto confermare la sua fonte.
@@ -1469,6 +1470,7 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'right-writeapi' => "Usa l'API in scrittura",
 'right-delete' => 'Cancella pagine',
 'right-bigdelete' => 'Cancella pagine con cronologie lunghe',
+'right-deletelogentry' => 'Cancella e ripristina voci di registro specifiche',
 'right-deleterevision' => 'Nasconde revisioni specifiche delle pagine',
 'right-deletedhistory' => 'Visualizza le revisioni della cronologia cancellate senza il testo associato',
 'right-deletedtext' => 'Visualizza testo cancellato e modifiche fra revisioni cancellate',
@@ -1770,6 +1772,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Non riuscito rilascio del blocco per "$1".',
 'lockmanager-fail-db-bucket' => 'Impossibile contattare i necessari database di blocco nel bucket $1.',
 'lockmanager-fail-db-release' => 'Impossibile revocare i blocchi sul database $1.',
+'lockmanager-fail-svr-acquire' => 'Impossibile acquisire blocchi sul server $1.',
 'lockmanager-fail-svr-release' => 'Impossibile revocare i blocchi sul server $1.',
 
 # ZipDirectoryReader
@@ -2306,6 +2309,8 @@ Consultare il log delle $2 per un elenco delle pagine cancellate di recente.',
 'rollback' => 'Annulla le modifiche',
 'rollback_short' => 'Rollback',
 'rollbacklink' => 'rollback',
+'rollbacklinkcount' => 'rollback di {{PLURAL:$1|una modifica|$1 modifiche}}',
+'rollbacklinkcount-morethan' => 'rollback di più di {{PLURAL:$1|una modifica|$1 modifiche}}',
 'rollbackfailed' => 'Rollback fallito',
 'cantrollback' => "Impossibile annullare le modifiche; l'utente che le ha effettuate è l'unico ad aver contribuito alla pagina.",
 'alreadyrolled' => 'Non è possibile annullare le modifiche apportate alla pagina [[:$1]] da parte di [[User:$2|$2]] ([[User talk:$2|discussione]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); un altro utente ha già modificato la pagina oppure ha effettuato il rollback.
@@ -3034,6 +3039,10 @@ $1',
 'sp-newimages-showfrom' => 'Mostra i file più recenti a partire dalle ore $2 del $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds-abbrev' => '$1&nbsp;s',
+'minutes-abbrev' => '$1&nbsp;min',
+'hours-abbrev' => '$1&nbsp;h',
+'days-abbrev' => '$1&nbsp;gg.',
 'seconds' => '{{PLURAL:$1|un secondo|$1 secondi}}',
 'minutes' => '{{PLURAL:$1|un minuto|$1 minuti}}',
 'hours' => "{{PLURAL:$1|un'ora|$1 ore}}",
@@ -3870,6 +3879,4 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennio|millenni}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Impossibile acquisire blocchi sul server $1.',
 );
index cc2ca02..4b60466 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author 2nd-player
  * @author Akaniji
  * @author Alexsh
  * @author Ant176
@@ -369,7 +370,7 @@ $messages = array(
 'tog-hidepatrolled' => '最近の更新に巡回済みの編集を表示しない',
 'tog-newpageshidepatrolled' => '新しいページの一覧に巡回済みのページを表示しない',
 'tog-extendwatchlist' => 'ウォッチリストを拡張し、最新のものだけではなくすべての変更を表示',
-'tog-usenewrc' => 'æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\83\9aã\83¼ã\82¸ã\82\92æ\8b¡å¼µ(JavaScriptが必要)',
+'tog-usenewrc' => 'æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\81¨ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81§è¤\87æ\95°ã\81®å¤\89æ\9b´ã\82\92ã\83\9aã\83¼ã\82¸ã\81\94ã\81¨ã\81«ã\81¾ã\81¨ã\82\81ã\82\8b(JavaScriptが必要)',
 'tog-numberheadings' => '自動的に見出しに番号を振る',
 'tog-showtoolbar' => '編集用のツールバーを表示(JavaScriptが必要)',
 'tog-editondblclick' => 'ダブルクリックで編集(JavaScriptが必要)',
@@ -377,17 +378,17 @@ $messages = array(
 'tog-editsectiononrightclick' => '節見出しの右クリックで節を編集できるようにする(JavaScriptが必要)',
 'tog-showtoc' => '目次を表示(ページに見出しが4つ以上ある場合)',
 'tog-rememberpassword' => 'このブラウザーにログイン情報を記憶(最大 $1 {{PLURAL:$1|日間}})',
-'tog-watchcreations' => '自分が作成したページをウォッチリストに追加',
-'tog-watchdefault' => '自分が編集したページをウォッチリストに追加',
-'tog-watchmoves' => '自分が移動したページをウォッチリストに追加',
-'tog-watchdeletion' => '自分が削除したページをウォッチリストに追加',
+'tog-watchcreations' => 'è\87ªå\88\86ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81¨ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ',
+'tog-watchdefault' => 'è\87ªå\88\86ã\81\8cç·¨é\9b\86ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81¨ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ',
+'tog-watchmoves' => 'è\87ªå\88\86ã\81\8c移å\8b\95ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81¨ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ',
+'tog-watchdeletion' => 'è\87ªå\88\86ã\81\8cå\89\8aé\99¤ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81¨ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ',
 'tog-minordefault' => '細部の編集に既定でチェックを入れる',
 'tog-previewontop' => 'プレビューを編集ボックスの前に配置',
 'tog-previewonfirst' => '編集開始時にもプレビューを表示',
 'tog-nocache' => 'ブラウザーによるページのキャッシュを無効にする',
-'tog-enotifwatchlistpages' => 'ウォッチリストにあるページが更新されたらメールを受け取る',
+'tog-enotifwatchlistpages' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\81\8bã\83\95ã\82¡ã\82¤ã\83«ã\81\8cæ\9b´æ\96°ã\81\95ã\82\8cã\81\9fã\82\89ã\83¡ã\83¼ã\83«ã\82\92å\8f\97ã\81\91å\8f\96ã\82\8b',
 'tog-enotifusertalkpages' => '自分のトークページが更新されたらメールを受け取る',
-'tog-enotifminoredits' => '細部の編集でもメールを受け取る',
+'tog-enotifminoredits' => 'ページやファイルへの細部の編集でもメールを受け取る',
 'tog-enotifrevealaddr' => '通知メールで自分のメールアドレスを明示',
 'tog-shownumberswatching' => 'ページをウォッチしている利用者数を表示',
 'tog-oldsig' => '既存の署名:',
@@ -577,7 +578,7 @@ $messages = array(
 'viewhelppage' => 'ヘルプのページを表示',
 'categorypage' => 'カテゴリのページを表示',
 'viewtalkpage' => '議論を表示',
-'otherlanguages' => '他の言語',
+'otherlanguages' => '他言語版',
 'redirectedfrom' => '($1から転送)',
 'redirectpagesub' => 'リダイレクトページ',
 'lastmodifiedat' => 'このページが最後に更新されたのは $1 $2 です。',
@@ -755,6 +756,7 @@ $2',
 'filereadonlyerror' => 'ファイルリポジトリ「$2」が読み取り専用の状態にあるため、ファイル「$1」を変更できません。
 
 読み取り専用に設定した管理者からの説明:「$3」',
+'exception-nologin' => 'ログインしていません',
 
 # Virus scanner
 'virus-badscanner' => "環境設定が不適合です:不明なウイルス検知ソフトウェア:''$1''",
@@ -974,7 +976,7 @@ $2
 'showlivepreview' => 'ライブプレビュー',
 'showdiff' => '差分を表示',
 'anoneditwarning' => "'''警告:'''ログインしていません。
-このまま投稿した場合、ご使用中のIPアドレスがこのページの編集履歴に記録されます。",
+編集すると、IPアドレスがこのページの編集履歴に記録されます。",
 'anonpreviewwarning' => "''ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。''",
 'missingsummary' => "'''注意:'''要約欄が空欄です。
 「{{int:savearticle}}」をもう一度クリックすると、編集は要約なしで保存されます。",
@@ -1389,7 +1391,7 @@ $1",
 'searchprofile-images' => 'マルチメディア',
 'searchprofile-everything' => 'すべて',
 'searchprofile-advanced' => '詳細',
-'searchprofile-articles-tooltip' => '$1検索',
+'searchprofile-articles-tooltip' => '$1内を検索',
 'searchprofile-project-tooltip' => '$1内を検索',
 'searchprofile-images-tooltip' => 'ファイルを検索',
 'searchprofile-everything-tooltip' => '全本文ページ(トークページ含む)を検索',
@@ -2515,7 +2517,7 @@ $UNWATCHURL
 このページの最後の編集は[[User:$3|$3]]([[User talk:$3|トーク]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])によるものです。',
 'editcomment' => "編集内容の要約:「''$1''」",
 'revertpage' => '[[Special:Contributions/$2|$2]]([[User talk:$2|トーク]])による編集を[[User:$1|$1]]による直前の版へ差し戻しました',
-'revertpage-nouser' => '(利用者名削除)による編集を[[User:$1|$1]]による最新版へ差し戻しました',
+'revertpage-nouser' => '(利用者名削除)による編集を[[User:$1|$1]]による直前の版へ差し戻しました',
 'rollback-success' => '$1による編集を差し戻しました。
 $2による直前の版へ変更されました。',
 
@@ -2532,7 +2534,7 @@ $2による直前の版へ変更されました。',
 'protectedarticle' => '「[[$1]]」を保護しました',
 'modifiedarticleprotection' => '「[[$1]]」の保護レベルを変更しました',
 'unprotectedarticle' => '「[[$1]]」の保護を解除しました',
-'movedarticleprotection' => ' が保護の設定を「[[$2]]」から「[[$1]]」へ移動しました',
+'movedarticleprotection' => 'が保護の設定を「[[$2]]」から「[[$1]]」へ移動しました',
 'protect-title' => '「$1」の保護レベルを変更',
 'protect-title-notallowed' => '「$1」の保護レベルを表示',
 'prot_1movedto2' => '[[$1]] を [[$2]] へ移動',
@@ -2610,7 +2612,7 @@ $2による直前の版へ変更されました。',
 'undeletehistorynoadmin' => 'このページは削除されています。
 削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。
 管理者以外の利用者には、削除された各版の本文への制限がかけられています。',
-'undelete-revision' => 'ページ「$1」の、$3 が $4 $5 に削除した版:',
+'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版:',
 'undeleterevision-missing' => '正しくないまたは存在しない版です。
 間違ったリンクをたどったか、この版は既に復帰されたか、もしくは保存版から除去された可能性があります。',
 'undelete-nodiff' => 'これより前の版はありません。',
@@ -2792,8 +2794,8 @@ $1のブロックの理由は「''$2''」です。",
 参考のため、ブロックの記録を以下に示します:',
 'blocklog-showsuppresslog' => 'この利用者は以前にブロックされ、隠されたことがあります。
 参考のため、秘匿記録を以下に示します:',
-'blocklogentry' => ' が [[$1]] を$2ブロックしました。ブロックの詳細:$3',
-'reblock-logentry' => ' が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細:$3',
+'blocklogentry' => 'が [[$1]] を$2ブロックしました。ブロックの詳細:$3',
+'reblock-logentry' => 'が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細:$3',
 'blocklogtext' => 'このページは利用者のブロックと解除の記録です。
 自動的にブロックされたIPアドレスは表示されていません。
 現時点で有効なブロックは[[Special:BlockList|ブロックの一覧]]をご覧ください。',
@@ -3132,7 +3134,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'tooltip-watchlistedit-raw-submit' => 'ウォッチリストを更新する',
 'tooltip-recreate' => '削除されていても、ページを再作成する',
 'tooltip-upload' => 'アップロードを開始する',
-'tooltip-rollback' => '「巻き戻し」は、このページの最後の編集者によるこのページへの編集を1クリックで差し戻します',
+'tooltip-rollback' => '「巻き戻し」は、最後に編集した人によるこのページへの複数の編集を1クリックで差し戻します',
 'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビューを付けて開きます。要約欄に取り消しの理由を追加できます。',
 'tooltip-preferences-save' => '設定を保存する',
 'tooltip-summary' => '短い要約を入力してください',
@@ -3872,7 +3874,7 @@ $5
 'comma-separator' => '、',
 'colon-separator' => ':',
 'pipe-separator' => '&#32;|&#32;',
-'word-separator' => '',
+'word-separator' => '&#32;',
 'parentheses' => '($1)',
 
 # Multipage image navigation
@@ -4177,8 +4179,8 @@ MediaWikiは、有用であることを期待して配布されていますが
 'logentry-patrol-patrol-auto' => '$1 が自動的にページ「$3」の版 $4 をパトロール済みとしました',
 'logentry-newusers-newusers' => '$1 が利用者アカウントを作成しました',
 'logentry-newusers-create' => '$1 が利用者アカウントを作成しました',
-'logentry-newusers-create2' => '$1 が利用者アカウント「$3」を作成しました',
-'logentry-newusers-autocreate' => 'アカウント「$1」が自動的に作成されました',
+'logentry-newusers-create2' => '$1 が利用者アカウント $3 を作成しました',
+'logentry-newusers-autocreate' => 'アカウント $1 が自動的に作成されました',
 'newuserlog-byemail' => 'パスワードをメールでお送りしました',
 
 # Feedback
index 96c93d9..c5bd4a4 100644 (file)
@@ -514,6 +514,8 @@ $1',
 'cannotdelete' => 'გვერდის ან ფაილის „$1“ წაშლა შეუძლებელია.
 შესაძლოა, იგი უკვე წაშალა სხვა მომხმარებელმა.',
 'cannotdelete-title' => 'გვერდის „$1“ წაშლა შეუძლებელია',
+'delete-hook-aborted' => 'შესწორება გაუქმებულია გადამჭერით.
+დამატებითი ახსნა არ ჩაწერილა.',
 'badtitle' => 'არასწორი სათაური',
 'badtitletext' => 'მოთხოვნილი გვერდის სათაური იყო არასწორი, ცარიელი, ან წარმოადგენდა შეცდომით გაკეთებულ ბმულს ენათაშორისი ან ინტერ-ვიკი სათაურიდან.',
 'perfcached' => 'შემდეგი მონაცემები აღებულია ქეშიდან და შესაძლოა არ შეიცავდენენ ბოლო ცვლილებებს. ქეშში ინახება მაქსიმუმ $1 {{PLURAL:$1|ჩანაწერი}}.',
@@ -1406,6 +1408,7 @@ $1",
 'right-writeapi' => 'API-ს გამოყენება ჩაწერისთვის',
 'right-delete' => 'გვერდების წაშლა',
 'right-bigdelete' => 'გრძელი ისტორიის გვერდების წაშლა',
+'right-deletelogentry' => 'ჟურნალის კონკრეტული ჩანაწერების წაშლა და აღდგენა',
 'right-deleterevision' => 'გვერდის კონკრეტული ვერსიების წაშლა და აღდგენა',
 'right-deletedhistory' => 'წაშლილი გვერდების ხილავა წაშლილ ტექსთან ურთიერთობის გარეშე',
 'right-deletedtext' => 'წაშლილი ტექსტის და განსხვავებების ხილვა.',
@@ -1705,6 +1708,7 @@ $1',
 'lockmanager-fail-releaselock' => '"$1"–ის განბლოკვა ვერ მოხერხდა.',
 'lockmanager-fail-db-bucket' => '$1 სეგმენტში ბლოკირებების ბაზების საკმარის რაოდენობასთან დაკავშირება ვერ მოხერხდა.',
 'lockmanager-fail-db-release' => '$1 მონაცემთა ბაზაზე ბლოკის მოხსნა ვერ მოხერხდა.',
+'lockmanager-fail-svr-acquire' => 'ვერ მოხერხდა ბლოკირების მიღება სერვერზე $1.',
 'lockmanager-fail-svr-release' => '$1 სერვერზე ბლოკის მოხსნა ვერ მოხერხდა.',
 
 # ZipDirectoryReader
@@ -2255,6 +2259,8 @@ $UNWATCHURL
 'rollback' => 'რცვლილებების გაუქმება',
 'rollback_short' => 'სწრაფი გაუქმება',
 'rollbacklink' => 'სწრაფი გაუქმება',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|ცვლილების|ცვლილების}} დაბრუნება',
+'rollbacklinkcount-morethan' => '$1-ზე მეტი {{PLURAL:$1|ცვლილების|ცვლილების}} დაბრუნება',
 'rollbackfailed' => 'შეცდომა გაუქმებისას',
 'cantrollback' => 'შეუძლებელია უწინდელი რედაქციის აღდგენა; ის, ვინც უკანასკნელი ცვლილებები შეიტანა, ამ სტატიის ერთადერთი ავტორია.',
 'alreadyrolled' => 'შეუძლებელია ბოლო ცვლილების გაუქმება [[:$1]], გაკეებული [[User:$2|$2]] ([[User talk:$2|განხილვა]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -3848,6 +3854,8 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'api-error-empty-file' => 'არჩეული ფაილი ცარიელია.',
 'api-error-emptypage' => 'ახალი, ცარიელი გვერდების შექმნა აკრძალულია.',
 'api-error-fetchfileerror' => 'შიდა შეცდომა: ფაილის მიღებისას მოხდა რაღაც შეცდომა.',
+'api-error-fileexists-forbidden' => 'ფაილი სახელით „$1“ უკვე არსებობს და მისი გადაწერა შეუძლებელია.',
+'api-error-fileexists-shared-forbidden' => 'ფაილი სახელით „$1“ უკვე არსებობს საერთო ფაილების საცავში და გადაწერა შეუძლებელია.',
 'api-error-file-too-large' => 'არჩეული ფაილი ძალიან დიდია.',
 'api-error-filename-tooshort' => 'ფაილის სახელი ზედმეტად მოკლეა',
 'api-error-filetype-banned' => 'ფაილის ეს ტიპი აკრძალულია',
@@ -3886,6 +3894,4 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'duration-centuries' => '$1 {{PLURAL:$1|საუკუნე|საუკუნე}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'ვერ მოხერხდა ბლოკირების მიღება სერვერზე $1.',
 );
index 50b14bb..774d391 100644 (file)
@@ -29,17 +29,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Qısımu be teqnaena serrêze ra ebe gozaga raste bıvurne (JavaScript lazımo)',
 'tog-showtoc' => 'Tabloê tedeesteu basne (de pelunê be hirê sernustu ra jêdêri de)',
 'tog-rememberpassword' => 'Parola mı nê cıcêraoği de bia ho viri (serba tewr jêde $1 {{PLURAL:$1|roze|rozu}}).',
-'tog-watchcreations' => 'Pelê ke mı afernê, lista mına şêrkerdişi ke',
-'tog-watchdefault' => 'Pelê ke mı vurnê, lista mına şêrkerdişi ke',
-'tog-watchmoves' => 'Pelê ke mı kırısnê, lista mına şêrkerdişi ke',
-'tog-watchdeletion' => 'Pelê ke mı esterıtê, lista mına şêrkerdişi ke',
+'tog-watchcreations' => 'Pelê ke mı afernê u dosyê ke mı bar kerdê lista mına şêrkerdişi ke',
+'tog-watchdefault' => 'Pel u dosyê ke mı vurnê lista mına şêrkerdişi ke',
+'tog-watchmoves' => 'Pel u dosyê ke mı kırısnê lista mına şêrkerdişi ke',
+'tog-watchdeletion' => 'Pel u dosyê ke mı esterıtê, lista mına şêrkerdişi ke',
 'tog-minordefault' => 'Vurnaisunê ho pêrune ‘vurnaiso qızkek’ nisan bıde',
 'tog-previewontop' => 'Verqayti pela nustene ser de basne',
 'tog-previewonfirst' => 'Vurnaiso verên de verqayti tım basne',
 'tog-nocache' => 'Pelunê cıcêraoği mia ho viri',
-'tog-enotifwatchlistpages' => 'Pela ke ez şêr kenune eke vurnê mı rê e-poste bırusne',
+'tog-enotifwatchlistpages' => 'Zu pele ya ki dosyawa ke lista mına şêrkerdişi de vurnê mı rê e-poste bırusne',
 'tog-enotifusertalkpages' => 'Pela mına hurênaişi ke vurnê mı rê e-poste bırusne',
-'tog-enotifminoredits' => 'Vurnaisunê qızkeku de ki mı rê e-poste bırusne',
+'tog-enotifminoredits' => 'Vurnaisunê qızkekunê pelun u dosyu de ki mı rê e-poste bırusne',
 'tog-enotifrevealaddr' => 'Adresa e-postê mı postê xeberu de basne',
 'tog-shownumberswatching' => 'Amorê karberunê şêrkerdoğu basne',
 'tog-oldsig' => 'Verqaytê imza mewcude:',
index fba4e9f..eeafab8 100644 (file)
@@ -9,5 +9,7 @@
  *
  */
 
+$rtl = true;
+
 # Inherit everything for now
 $fallback = 'kk-arab, kk-cyrl';
index ac94583..9862f90 100644 (file)
@@ -532,7 +532,7 @@ $messages = array(
 'protect_change' => '보호 수준 바꾸기',
 'protectthispage' => '이 문서 보호하기',
 'unprotect' => '보호 설정 바꾸기',
-'unprotectthispage' => 'ì\9d´ ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë³\80ê²½í\95\98기',
+'unprotectthispage' => 'ì\9d´ ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë°\94꾸기',
 'newpage' => '새 문서',
 'talkpage' => '토론 문서',
 'talkpagelinktext' => '토론',
@@ -664,7 +664,7 @@ $1',
 "$1"
 입니다.
 데이터베이스는 "$3: $4" 오류를 일으켰습니다.',
-'laggedslavemode' => "'''주의:''' 문서가 최근에 바뀐 내용이 아닐 수도 있습니다.",
+'laggedslavemode' => "'''경고:''' 문서가 최근에 바뀐 내용이 아닐 수도 있습니다.",
 'readonly' => '데이터베이스 잠김',
 'enterlockreason' => '데이터베이스를 잠그는 이유와 예상되는 기간을 적어 주세요.',
 'readonlytext' => '데이터베이스가 잠겨 있어서 문서를 편집할 수 없습니다. 데이터베이스 관리가 끝난 후에는 정상으로 돌아올 것입니다.
@@ -677,7 +677,7 @@ $1',
 또는, 프로그램 버그가 발생했을 수도 있습니다. [[Special:ListUsers/sysop|관리자]]에게 오류가 나는 URL을 알려주세요.',
 'missingarticle-rev' => '(판번호: $1)',
 'missingarticle-diff' => '(차이: $1, $2)',
-'readonly_lag' => '슬레이브 데이터베이스가 마스터 서버의 자료를 ê°±ì\8b í\95\98ë\8a\94 ì¤\91ì\9e\85ë\8b\88ë\8b¤. ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ê°\80 ì\9e\90ë\8f\99ì\9c¼ë¡\9c ì\9e ê²¨ ì\9e\88ì\8aµë\8b\88ë\8b¤.',
+'readonly_lag' => '슬레이브 데이터베이스가 마스터 서버의 자료를 ì\83\88ë¡\9c ê³ ì¹\98ë\8a\94 ì¤\91ì\9e\85ë\8b\88ë\8b¤. ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ê°\80 ì\9e\90ë\8f\99ì\9c¼ë¡\9c ì\9e ê²¨ ì\9e\88ì\8aµë\8b\88ë\8b¤.',
 'internalerror' => '내부 오류',
 'internalerror_info' => '내부 오류: $1',
 'fileappenderrorread' => '내용을 덧붙이다가 "$1" 파일을 읽을 수 없습니다.',
@@ -701,7 +701,7 @@ $1',
 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
 'perfcached' => '다음 자료는 캐시된 것이므로 현재 상황을 반영하지 않을 수 있습니다. 캐시에 최대 {{PLURAL:$1|결과 $1개}}가 있습니다.',
 'perfcachedts' => '다음 자료는 캐시된 것으로, $1에 마지막으로 새로 고쳐졌습니다.  캐시에 최대 {{PLURAL:$4|결과 $4개}}가 있습니다.',
-'querypage-no-updates' => '이 문서의 갱신이 현재 비활성화되어 있습니다.
+'querypage-no-updates' => '이 문서의 새로 고침이 현재 비활성화되어 있습니다.
 자료가 잠시 새로 고치지 않을 것입니다.',
 'wrong_wfQuery_params' => 'wfQuery()에서 잘못된 매개변수 발생<br />
 함수: $1<br />
@@ -727,7 +727,7 @@ $2',
 'ns-specialprotected' => '특수 문서는 편집할 수 없습니다.',
 'titleprotected' => '[[User:$1|$1]] 사용자가 문서 만들기를 금지했습니다.
 이유는 다음과 같습니다. "$2"',
-'filereadonlyerror' => '"$2" í\8c\8cì\9d¼ ì \80ì\9e¥ì\86\8cê°\80 ì\9d½ê¸° ì \84ì\9a©ì\9d´ê¸° ë\95\8c문ì\97\90 "$1" í\8c\8cì\9d¼ì\9d\84 ë³\80ê²½í\95  수 없습니다.
+'filereadonlyerror' => '"$2" í\8c\8cì\9d¼ ì \80ì\9e¥ì\86\8cê°\80 ì\9d½ê¸° ì \84ì\9a©ì\9d´ê¸° ë\95\8c문ì\97\90 "$1" í\8c\8cì\9d¼ì\9d\84 ë°\94ê¿\80 수 없습니다.
 
 저장소 관리자가 파일 저장소를 잠근 이유에 대한 설명을 남겼습니다: "$3".',
 'invalidtitle-knownnamespace' => '제목 오류: "$2" 이름공간과 "$3" 텍스트',
@@ -754,7 +754,7 @@ $2',
 'remembermypassword' => '이 컴퓨터에서 로그인 상태를 저장하기 (최대 $1일)',
 'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다',
 'yourdomainname' => '도메인 이름:',
-'externaldberror' => '외부 인증 데이터베이스에 오류가 있거나 외부 계정을 ê°±ì\8b í\95  ê¶\8cí\95\9cì\9d´ ì\97\86ì\8aµë\8b\88ë\8b¤.',
+'externaldberror' => '외부 인증 데이터베이스에 오류가 있거나 외부 계정을 ì\83\88ë¡\9c ê³ ì¹  ê¶\8cí\95\9cì\9d´ ì\97\86ì\8aµë\8b\88ë\8b¤.',
 'login' => '로그인',
 'nav-login-createaccount' => '로그인 / 계정 만들기',
 'loginprompt' => '{{SITENAME}}에 로그인하려면 쿠키를 사용할 수 있어야 합니다.',
@@ -773,7 +773,7 @@ $2',
 'createaccountreason' => '이유:',
 'badretype' => '입력한 비밀번호가 서로 다릅니다.',
 'userexists' => '입력하신 사용자 이름이 이미 등록되어 있습니다.
\8b¤ë¥¸ ì\9d´ë¦\84ì\9d\84 ì\84 í\83\9dí\95´ì£¼ì\8b­ì\8b\9cì\98¤.',
\8b¤ë¥¸ ì\9d´ë¦\84ì\9d\84 ì\84 í\83\9dí\95\98ì\84¸ì\9a\94.',
 'loginerror' => '로그인 오류',
 'createaccounterror' => '계정을 만들지 못했습니다: $1',
 'nocookiesnew' => '사용자 계정을 만들었지만, 아직 로그인하지 않았습니다.
@@ -791,8 +791,8 @@ $2',
 'nosuchuser' => '"$1" 사용자가 존재하지 않습니다.
 사용자 이름은 대소문자를 구별합니다. 철자가 맞는지 확인해주세요.
 [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].',
-'nosuchusershort' => '이름이 ‘$1’인 사용자는 없습니다.
-ì² ì\9e\90ê°\80 ë§\9eë\8a\94ì§\80 í\99\95ì\9d¸í\95´ ì£¼세요.',
+'nosuchusershort' => '이름이 "$1"인 사용자는 없습니다.
+ì² ì\9e\90ê°\80 ë§\9eë\8a\94ì§\80 í\99\95ì\9d¸í\95\98세요.',
 'nouserspecified' => '사용자 이름을 입력하지 않았습니다.',
 'login-userblocked' => '이 사용자는 차단되었습니다. 로그인할 수 없습니다.',
 'wrongpassword' => '입력한 비밀번호가 다릅니다.
@@ -902,14 +902,14 @@ $2
 임시 비밀번호: $2',
 'passwordreset-emailsent' => '비밀번호 찾기 이메일을 보냈습니다.',
 'passwordreset-emailsent-capture' => '비밀번호 찾기 이메일이 발송되었으며, 아래에 표시되어 있습니다.',
-'passwordreset-emailerror-capture' => '비밀번호 찾기 이메일이 생성되어 아래에 표시되었지만 발송하는 데에는 실패했습니다: $1',
+'passwordreset-emailerror-capture' => '비밀번호 찾기 이메일이 만들어져 아래에 표시되었지만 발송하는 데에는 실패했습니다: $1',
 
 # Special:ChangeEmail
 'changeemail' => '이메일 주소 바꾸기',
 'changeemail-header' => '계정 메일 주소 바꾸기',
-'changeemail-text' => 'ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ë°\94꾸려면 ì\9d´ ì\96\91ì\8b\9dì\9d\84 ì±\84ì\9a°ì\84¸ì\9a\94. ë³\80ê²½ 내용을 확인하기 위해 당신의 비밀번호를 입력해야 합니다.',
+'changeemail-text' => 'ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ë°\94꾸려면 ì\9d´ ì\96\91ì\8b\9dì\9d\84 ì±\84ì\9a°ì\84¸ì\9a\94. ë°\94ë\80\9c 내용을 확인하기 위해 당신의 비밀번호를 입력해야 합니다.',
 'changeemail-no-info' => '이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.',
-'changeemail-oldemail' => '현재 E-mail 주소 :',
+'changeemail-oldemail' => '현재 이메일 주소 :',
 'changeemail-newemail' => '새 이메일 주소:',
 'changeemail-none' => '(없음)',
 'changeemail-submit' => '이메일 주소 바꾸기',
@@ -943,7 +943,7 @@ $2
 'showpreview' => '미리 보기',
 'showlivepreview' => '실시간 미리 보기',
 'showdiff' => '차이 보기',
-'anoneditwarning' => "'''주의''': 로그인하고 있지 않습니다.
+'anoneditwarning' => "'''경고''': 로그인하고 있지 않습니다.
 당신의 IP 주소가 문서 역사에 남게 됩니다.",
 'anonpreviewwarning' => "'''당신은 지금 로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''",
 'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다.
@@ -1011,7 +1011,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'noarticletext-nopermission' => '이 문서가 존재하지 않습니다.
 이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색]]하거나,
 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span>',
-'userpage-userdoesnotexist' => '‘$1’ 계정은 등록되어 있지 않습니다.
+'userpage-userdoesnotexist' => '"$1" 계정은 등록되어 있지 않습니다.
 이 문서를 만들거나 편집하려면 계정이 존재 하는지 확인해주세요.',
 'userpage-userdoesnotexist-view' => '"$1" 사용자 계정은 등록되지 않았습니다.',
 'blocked-notice-logextract' => '이 사용자는 현재 차단되어 있습니다.
@@ -1064,7 +1064,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 \"{{int:savearticle}}\"을 누르면 '''위쪽의 편집 내역만''' 저장됩니다.",
 'yourtext' => '당신의 편집',
 'storedversion' => '현재 문서',
-'nonunicodebrowser' => "'''주의: 당신의 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''
+'nonunicodebrowser' => "'''경고: 당신의 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''
 아스키가 아닌 문자가 16진수 코드로 나타날 수 있습니다.",
 'editingold' => "'''경고: 지금 이전 버전의 문서를 고치고 있습니다.'''
 이것을 저장하면 최근에 편집된 부분이 사라질 수 있습니다.",
@@ -1079,7 +1079,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 '''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
 'longpageerror' => "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''
 저장할 수 없습니다.",
-'readonlywarning' => "'''주의: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.'''
+'readonlywarning' => "'''경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.'''
 편집 내용을 복사 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.
 
 잠근 관리자가 남긴 설명은 다음과 같습니다: $1",
@@ -1087,7 +1087,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 이 문서의 최근 기록을 참고하십시오:",
 'semiprotectedpagewarning' => "'''참고:''' 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 잠겨 있습니다.
 이 문서의 최근 기록을 참고하십시오:",
-'cascadeprotectedwarning' => "'''주의''': 이 문서는 잠겨 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
+'cascadeprotectedwarning' => "'''경고''': 이 문서는 잠겨 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
 'titleprotectedwarning' => "'''경고: 이 문서는 잠겨 있어, 문서를 만드려면 [[Special:ListGroupRights|특정 권한]]이 필요합니다.'''
 아래 문서의 최근 기록을 참고하십시오:",
 'templatesused' => '이 문서에서 사용한 {{PLURAL:$1|틀}}:',
@@ -1106,7 +1106,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'permissionserrors' => '권한 오류',
 'permissionserrorstext' => '해당 명령을 수행할 권한이 없습니다. 다음의 {{PLURAL:$1|이유}}를 확인해보세요:',
 'permissionserrorstext-withaction' => '$2 권한이 없습니다. 다음의 {{PLURAL:$1|이유}}를 확인해주세요:',
-'recreate-moveddeleted-warn' => "'''주의: 삭제된 적이 있는 문서를 다시 만들고 있습니다.'''
+'recreate-moveddeleted-warn' => "'''경고: 삭제된 적이 있는 문서를 다시 만들고 있습니다.'''
 
 이 문서를 계속 편집하는 것이 적합한 것인지 확인해주세요.
 편의를 위해 삭제와 이동 기록을 다음과 같이 제공합니다:",
@@ -1146,14 +1146,14 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 
 # "Undo" feature
 'undo-success' => '편집을 되돌릴 수 있습니다.
\8e¸ì§\91 ë\90\98ë\8f\8c리기를 ì\99\84ë£\8cí\95\98려면 ì\9d´ í\8e¸ì§\91ì\9d\84 ë\90\98ë\8f\8c리려면 ì\95\84ë\9e\98ì\9d\98 ë³\80ê²½ë\90\98ë\8a\94 사항을 확인한 후 저장해주세요.',
\8e¸ì§\91 ë\90\98ë\8f\8c리기를 ì\99\84ë£\8cí\95\98려면 ì\9d´ í\8e¸ì§\91ì\9d\84 ë\90\98ë\8f\8c리려면 ì\95\84ë\9e\98ì\9d\98 ë°\94ë\80\9c 사항을 확인한 후 저장해주세요.',
 'undo-failure' => '중간의 다른 편집과 충돌하여 이 편집을 되돌릴 수 없습니다.',
 'undo-norev' => '문서가 없거나 삭제되었기 때문에 편집을 되돌릴 수 없습니다.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|토론]]) 의 $1판 편집을 되돌림',
 
 # Account creation failure
 'cantcreateaccounttitle' => '계정을 만들 수 없음',
-'cantcreateaccount-text' => "현재 아이피 주소('''$1''')는 [[User:$3|$3]] 사용자에 의해 계정 생성이 차단된 상태입니다.
+'cantcreateaccount-text' => "현재 아이피 주소('''$1''')는 [[User:$3|$3]] 사용자에 의해 계정 만들기가 차단된 상태입니다.
 
 차단 이유는 다음과 같습니다: $2",
 
@@ -1344,8 +1344,8 @@ $1",
 'notitlematches' => '해당하는 제목 없음',
 'textmatches' => '문서 내용 일치',
 'notextmatches' => '해당하는 문서 없음',
-'prevn' => 'ì\95\9eì\9c¼ë¡\9c $1개',
-'nextn' => 'ë\92¤ë¡\9c $1개',
+'prevn' => 'ì\9d´ì \84 $1개',
+'nextn' => 'ë\8b¤ì\9d\8c $1개',
 'prevn-title' => '이전 결과 $1개',
 'nextn-title' => '다음 결과 $1개',
 'shown-title' => '쪽마다 결과 $1개씩 보이기',
@@ -1451,7 +1451,7 @@ $1",
 'recentchangesdays-max' => '최대 $1일',
 'recentchangescount' => '기본으로 표시할 편집 수:',
 'prefs-help-recentchangescount' => '이 설정은 최근 바뀜, 문서 역사와 기록에 적용됩니다.',
-'prefs-help-watchlist-token' => '아래에 비밀 값을 넣으면 주시문서 목록에 대한 RSS 피드가 생성됩니다.
+'prefs-help-watchlist-token' => '아래에 비밀 값을 넣으면 주시문서 목록에 대한 RSS 피드가 만들어집니다.
 비밀 값을 알고 있는 사람이라면 누구나 피드를 읽을 수 있으므로 안전한 값을 입력해주세요.
 임의로 만들어진 다음 값을 사용할 수도 있습니다: $1',
 'savedprefs' => '설정을 저장했습니다.',
@@ -1480,7 +1480,7 @@ $1",
 'prefs-files' => '파일',
 'prefs-custom-css' => '사용자 CSS',
 'prefs-custom-js' => '사용자 자바스크립트',
-'prefs-common-css-js' => '모든 스킨에 적용되는 공통 CSS/자바스크립트:',
+'prefs-common-css-js' => '모든 스킨에 대한 공통 CSS/JavaScript:',
 'prefs-reset-intro' => '이 사이트의 기본값으로 환경 설정을 되돌릴 수 있습니다.
 복구할 수 없습니다.',
 'prefs-emailconfirm-label' => '이메일 인증:',
@@ -1603,6 +1603,7 @@ HTML 태그를 확인하세요.',
 'right-writeapi' => 'API 작성',
 'right-delete' => '문서 삭제',
 'right-bigdelete' => '문서 역사가 긴 문서를 삭제',
+'right-deletelogentry' => '특정 기록 항목을 삭제 및 복구',
 'right-deleterevision' => '문서의 특정 판을 삭제 및 복구',
 'right-deletedhistory' => '삭제된 문서의 내용을 제외한 역사를 보기',
 'right-deletedtext' => '삭제된 문서의 내용과 편집상의 차이를 보기',
@@ -1670,7 +1671,7 @@ HTML 태그를 확인하세요.',
 'action-suppressrevision' => '이 숨겨진 판을 검토하고 복구할',
 'action-suppressionlog' => '비공개 기록 보기',
 'action-block' => '이 사용자를 편집하지 못하도록 차단',
-'action-protect' => 'ì\9d´ ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë³\80ê²½í\95\98기',
+'action-protect' => 'ì\9d´ ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë°\94꾸기',
 'action-rollback' => '특정 문서를 마지막으로 편집한 사용자의 모든 편집을 간편하게 되돌리기',
 'action-import' => '다른 위키에서 이 문서를 가져오기',
 'action-importupload' => '파일 올리기를 통해 문서를 가져올',
@@ -1737,7 +1738,7 @@ HTML 태그를 확인하세요.',
 'upload-tryagain' => '수정된 파일 설명을 저장',
 'uploadnologin' => '로그인하지 않음',
 'uploadnologintext' => '파일을 올리려면 [[Special:UserLogin|로그인]]해야 합니다.',
-'upload_directory_missing' => '파일 올리기용 디렉터리($1)가 없고 웹 서버가 생성하지 못했습니다.',
+'upload_directory_missing' => '파일 올리기용 디렉터리($1)가 없고 웹 서버가 만들지 못했습니다.',
 'upload_directory_read_only' => '파일 저장 디렉터리($1)에 쓰기 권한이 없습니다.',
 'uploaderror' => '올리기 오류',
 'upload-recreate-warning' => "'''경고: 이 파일로 된 이름이 삭제되었거나 옮겨졌습니다.'''
@@ -1760,7 +1761,7 @@ HTML 태그를 확인하세요.',
 'filename' => '파일 이름',
 'filedesc' => '파일의 설명',
 'fileuploadsummary' => '요약:',
-'filereuploadsummary' => 'í\8c\8cì\9d¼ ë³\80ê²½에 대한 요약:',
+'filereuploadsummary' => 'í\8c\8cì\9d¼ ë°\94ë\80\9c에 대한 요약:',
 'filestatus' => '저작권 상태:',
 'filesource' => '출처:',
 'uploadedfiles' => '파일 올리기',
@@ -1925,6 +1926,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'lockmanager-fail-releaselock' => '"$1"에 대한 잠금을 해제하지 못했습니다.',
 'lockmanager-fail-db-bucket' => '데이터베이스의 버킷 $1의 잠금을 풀지 못했습니다.',
 'lockmanager-fail-db-release' => '데이터베이스 $1의 잠금을 풀지 못했습니다.',
+'lockmanager-fail-svr-acquire' => '서버 $1의 잠금을 걸지 못했습니다.',
 'lockmanager-fail-svr-release' => '서버 $1의 잠금을 풀지 못했습니다.',
 
 # ZipDirectoryReader
@@ -2195,9 +2197,9 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'protectedpages-cascade' => '연쇄적 보호만 보기',
 'protectedpagestext' => '다음의 문서는 이동/편집이 불가능하도록 보호되어 있습니다.',
 'protectedpagesempty' => '보호되어 있는 문서가 없습니다.',
-'protectedtitles' => '생성 보호된 표제어 목록',
-'protectedtitlestext' => '다음 표제어들은 생성이 금지되어 있습니다.',
-'protectedtitlesempty' => '해당 조건에 맞는 생성 금지 표제어가 없습니다.',
+'protectedtitles' => '만들기 보호된 표제어 목록',
+'protectedtitlestext' => '다음 표제어들은 만들기가 금지되어 있습니다.',
+'protectedtitlesempty' => '해당 조건에 맞는 만들기 금지 표제어가 없습니다.',
 'listusers' => '사용자 목록',
 'listusers-editsonly' => '기여가 있는 사용자만 보기',
 'listusers-creationsort' => '계정 등록일 순으로 정렬',
@@ -2233,7 +2235,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'log' => '기록 목록',
 'all-logs-page' => '모든 공개 기록',
 'alllogstext' => '{{SITENAME}}에서의 기록이 모두 나와 있습니다.
-로그 종류, 계정 이름, 문서 이름을 선택해서 볼 수 있습니다. 검색시에는 대소문자를 구별합니다.',
+기록 종류, 계정 이름, 문서 이름을 선택해서 볼 수 있습니다. 검색시에는 대소문자를 구별합니다.',
 'logempty' => '일치하는 항목이 없습니다.',
 'log-title-wildcard' => '다음 글로 시작하는 제목 검색',
 'showhideselectedlogentries' => '선택한 기록 항목 보이기/숨기기',
@@ -2280,7 +2282,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'linksearch' => '외부 링크 찾기',
 'linksearch-pat' => '검색 패턴:',
 'linksearch-ns' => '이름공간:',
-'linksearch-ok' => '검색',
+'linksearch-ok' => '찾기',
 'linksearch-text' => '"*.wikipedia.org"와 같이 와일드카드를 사용할 수 있습니다.
 적어도 "*.org"와 같이 최상위 도메인을 입력해야 합니다.<br />
 지원하는 프로토콜 목록: <tt>$1</tt> (검색할 때 이것을 추가하지 마세요)',
@@ -2446,7 +2448,7 @@ $UNWATCHURL
 'exblank' => '빈 문서',
 'delete-confirm' => '"$1" 삭제',
 'delete-legend' => '삭제',
-'historywarning' => "'''주의:''' 삭제하려는 문서에 과거 편집 내역 약 $1개가 있습니다:",
+'historywarning' => "'''경고:''' 삭제하려는 문서에 과거 편집 내역 약 $1개가 있습니다:",
 'confirmdeletetext' => '문서와 문서 역사를 삭제하려고 합니다.
 삭제하려는 문서가 맞는지, 이 문서를 삭제하는 것이 [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지를 확인해 주세요.',
 'actioncomplete' => '명령 완료',
@@ -2475,6 +2477,8 @@ $UNWATCHURL
 'rollback' => '편집 되돌리기',
 'rollback_short' => '되돌리기',
 'rollbacklink' => '되돌리기',
+'rollbacklinkcount' => '되돌리기 편집 $1회',
+'rollbacklinkcount-morethan' => '되돌리기 편집 $1회 이상',
 'rollbackfailed' => '되돌리기 실패',
 'cantrollback' => '편집을 되돌릴 수 없습니다.
 문서를 편집한 사용자가 한명뿐입니다.',
@@ -2593,7 +2597,7 @@ $UNWATCHURL
 'undeletedfiles' => '파일 $1개를 복구했습니다',
 'cannotundelete' => '복구에 실패했습니다.
 다른 사용자가 이미 복구했을 수도 있습니다.',
-'undeletedpage' => "'''$1 문서ê°\80 ë³µêµ¬ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.'''
+'undeletedpage' => "'''$1 문서를 ë³µêµ¬í\96\88ì\8aµë\8b\88ë\8b¤.'''
 
 [[Special:Log/delete|삭제 기록]]에서 최근의 삭제와 복구 기록을 볼 수 있습니다.",
 'undelete-header' => '최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.',
@@ -2662,8 +2666,8 @@ $1',
 'isredirect' => '넘겨주기 문서',
 'istemplate' => '포함',
 'isimage' => '파일 사용 중',
-'whatlinkshere-prev' => '{{PLURAL:$1|이전|이전 $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|다음|다음 $1}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|이전|이전 $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|다음|다음 $1}}',
 'whatlinkshere-links' => '← 가리키는 문서 목록',
 'whatlinkshere-hideredirs' => '넘겨주기를 $1',
 'whatlinkshere-hidetrans' => '틀을 $1',
@@ -2694,7 +2698,7 @@ $1',
 ** 다중 계정 악용
 ** 부적절한 계정 이름',
 'ipb-hardblock' => '이 IP를 이용하는 로그인한 사용자가 편집하는 것을 막기',
-'ipbcreateaccount' => '계정 생성을 막기',
+'ipbcreateaccount' => '계정 만들기를 막기',
 'ipbemailban' => '이메일을 보내지 못하도록 막기',
 'ipbenableautoblock' => '이 사용자가 최근에 사용했거나 앞으로 사용하는 IP를 자동으로 막기',
 'ipbsubmit' => '사용자 차단',
@@ -2729,7 +2733,7 @@ $1',
 'ipblocklist-legend' => '차단 중인 사용자 찾기',
 'blocklist-userblocks' => '계정에 대한 차단 숨기기',
 'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
-'blocklist-addressblocks' => 'ë\8b¹일 IP 차단을 숨기기',
+'blocklist-addressblocks' => 'ë\8b¨일 IP 차단을 숨기기',
 'blocklist-rangeblocks' => '광역 차단을 숨기기',
 'blocklist-timestamp' => '날짜·시각',
 'blocklist-target' => '차단 대상',
@@ -2836,7 +2840,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 만약 문서의 새 이름으로 된 문서가 존재할 때, 그 문서가 비었거나 넘겨주기 문서이고 문서 역사가 없을 때에만 이동합니다. 그렇지 않을 경우에는 이동하지 '''않습니다'''.
 이것은 실수로 이동한 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.
 
-'''주의!'''
+'''경고!'''
 인기 있는 문서일 경우 심각하고 예상하지 못한 문제를 초래할 수 있습니다.
 문서를 이동하기 전에 이러한 행동이 초래할 수 있는 결과에 대해 숙지하시기 바랍니다.",
 'movepagetext-noredirectfixer' => "아래의 양식을 사용해 문서의 이름을 바꾸고 문서의 모든 역사를 새 이름으로 옮길 수 있습니다.
@@ -2913,7 +2917,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'move-leave-redirect' => '이동 후 넘겨주기를 남기기',
 'protectedpagemovewarning' => "'''경고:''' 이 문서는 관리자만이 이동할 수 있도록 잠겨 있습니다.
 최근의 기록을 참고용으로 제공합니다:",
-'semiprotectedpagemovewarning' => "'''ì\95\8c림:''' 이 문서는 등록된 사용자만이 이동할 수 있도록 잠겨 있습니다.
+'semiprotectedpagemovewarning' => "'''참고:''' 이 문서는 등록된 사용자만이 이동할 수 있도록 잠겨 있습니다.
 최근 기록 내용을 참고용로 제공합니다:",
 'move-over-sharedrepo' => '== 파일이 존재함 ==
 [[:$1]] 파일이 공용 저장소에 있습니다. 이 이름으로 파일을 옮기면 공용의 파일을 덮어쓰게 될 것입니다.',
@@ -2930,7 +2934,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'exportall' => '모든 문서를 내보내기',
 'exportcuronly' => '현재 버전만 포함하고, 전체 역사는 포함하지 않음',
 'exportnohistory' => "----
-'''주ì\9d\98:''' 전체 문서 역사를 내보내는 기능은 성능 문제로 인해 비활성되어 있습니다.",
+'''참고:''' 전체 문서 역사를 내보내는 기능은 성능 문제로 인해 비활성되어 있습니다.",
 'exportlistauthors' => '각각 문서마다 모든 기여자의 목록을 포함',
 'export-submit' => '내보내기',
 'export-addcattext' => '분류에 있는 문서 추가:',
@@ -3227,7 +3231,7 @@ $1',
 # Media information
 'mediawarning' => "'''경고''': 이 파일에 악성 코드가 포함되어 있을 수 있습니다.
 파일을 실행하면 컴퓨터에 문제가 생길 가능성이 있습니다.",
-'imagemaxsize' => "그림 최대 크기:<br />''(파일 문서에 적용되는 기능)''",
+'imagemaxsize' => '그림 최대 크기:<br />(파일 문서에 적용되는 기능)',
 'thumbsize' => '섬네일 크기:',
 'widthheightpage' => '$1 × $2, $3페이지',
 'file-info' => '파일 크기: $1, MIME 종류: $2',
@@ -3342,8 +3346,8 @@ Variants for Chinese language
 'exif-relatedsoundfile' => '관련된 오디오 파일',
 'exif-datetimeoriginal' => '날짜와 시간',
 'exif-datetimedigitized' => '날짜와 시간(디지털 데이터)',
-'exif-subsectime' => 'í\8c\8cì\9d¼ì\9d´ ë³\80ê²½ë\90\9c ë\82 ì§\9cì\99\80 ì\8b\9cê°\84 (ì´\88ë\8b¨ì\9c\84 ë¯¸ë§\8c)',
-'exif-subsectimeoriginal' => '파일 생성시 날짜와 시간 (초단위 미만)',
+'exif-subsectime' => 'í\8c\8cì\9d¼ì\9d\84 ì\88\98ì \95í\95\9c ë\82 ì§\9cì\99\80 ì\8b\9cê°\84 (ì´\88ë\8b¨ì\9c\84 ë¯¸ë§\8c)',
+'exif-subsectimeoriginal' => '파일을 만든 날짜와 시간 (초단위 미만)',
 'exif-subsectimedigitized' => '디지털화된 날짜와 시간 (초단위 미만)',
 'exif-exposuretime' => '노출 시간',
 'exif-exposuretime-format' => '$1초 ($2)',
@@ -3454,7 +3458,7 @@ Variants for Chinese language
 'exif-serialnumber' => '카메라 일련 번호',
 'exif-cameraownername' => '카메라 소유자',
 'exif-label' => '라벨',
-'exif-datetimemetadata' => '메타데이터 최종 변경일',
+'exif-datetimemetadata' => '메타데이터 최종 수정일',
 'exif-nickname' => '이미지의 비공식적 이름',
 'exif-rating' => '평가 (5점 만점)',
 'exif-rightscertificate' => '권리 관리 인증서',
@@ -3781,7 +3785,7 @@ $5
 'scarytranscludetoolong' => '[URL이 너무 깁니다]',
 
 # Delete conflict
-'deletedwhileediting' => "'''주의''': 당신이 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
+'deletedwhileediting' => "'''경고''': 당신이 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
 'confirmrecreate' => '[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 삭제했습니다. 삭제 이유는 다음과 같습니다:
 : $2
 문서를 다시 만들어야 하는지 확인해주세요.',
@@ -4103,6 +4107,4 @@ $5
 'duration-centuries' => '$1{{PLURAL:$1|세기}}',
 'duration-millennia' => '$1{{PLURAL:$1|천년}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => '서버 $1의 잠금을 걸지 못했습니다.',
 );
index 41f89bf..6c8df5f 100644 (file)
@@ -396,7 +396,7 @@ $messages = array(
 'print' => 'Drocke',
 'view' => 'Beloore',
 'edit' => 'Ändere',
-'create' => 'Aanläje',
+'create' => 'Aanlääje',
 'editthispage' => 'De Sigg ändere',
 'create-this-page' => 'Neu aanläje',
 'delete' => 'Fottschmieße',
@@ -493,7 +493,7 @@ $1',
 'thisisdeleted' => '$1 - aanluure oder widder zeröckholle?',
 'viewdeleted' => '$1 aanzeije?',
 'restorelink' => '{{PLURAL:$1|eijn fottjeschmesse Änderung|$1 fottjeschmesse Änderunge|keij fottjeschmesse Änderunge}}',
-'feedlinks' => 'Abonnomang-Kannal (<i lang="en">Feed</i>):',
+'feedlinks' => 'Abonnomangs-Kannal (<i lang="en">Feed</i>):',
 'feed-invalid' => 'Esu en Zoot Abonnomang-Kannal (<i lang="en">Feed</i>) jitt et nit.',
 'feed-unavailable' => 'Mer han kein esu en Abonnomangs-Kannäl (<i lang="en">Feeds</i>) aam Loufe.',
 'site-rss-feed' => 'RSS-Abonnomang-Kannal (Feed) för de „$1“',
@@ -579,7 +579,7 @@ dat jeiht ävver nit.
 Muss De repareere.',
 'perfcached' => 'Di Daate heh noh kumme usem Zweschespeicher (cache) un künnte nit mieh janz de allerneuste sin.
 {{PLURAL:$1|Bloß ein Antwoot es|Nit mieh wi $1 Antwoote sin|Kein Antwoot es}} doh faßjehallde un ze han.',
-'perfcachedts' => 'De Daate heenoh kumme usem Zweschespeicher (Cache) un woodte aam $2 öm $3 opjenumme. Se künnte nit janz de allerneuste sin.
+'perfcachedts' => 'De Daate heenoh kumme usem Zweschespeicher (<i lang="en">cache</i>) un woodte aam $2 öm $3 opjenumme. Se künnte nit janz de allerneuste sin.
 {{PLURAL:$4|Bloß ein Antwoot es|Nit mieh wi $4 Antwoote sind|Kein Antwoot es}} doh ze han.',
 'querypage-no-updates' => "'''Heh die Sigg weed nit mieh op ene neue Stand jebraat.'''",
 'wrong_wfQuery_params' => 'Verkihrte Parameter för: <strong><code>wfQuery()</code></strong><br />
@@ -638,7 +638,7 @@ Künnt sin, dat De de ein oder ander Sigg immer wigger aanjezeich kriss, wie wan
 Dinge Zojang för heh es do.
 Do bes jetz aanjemeldt.
 Denk dran, Do künnts Der [[Special:Preferences|Ding Enstellunge heh för {{GRAMMAR:Akk|{{SITENAME}}}} zeräächmaache]].',
-'yourname' => 'Metmaacher Name:',
+'yourname' => 'Metmaacher_Naame:',
 'yourpassword' => 'Paßwoot:',
 'yourpasswordagain' => 'Noch ens dat Passwood',
 'remembermypassword' => 'Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})',
@@ -1122,7 +1122,7 @@ Als Jrund för et Sperre es enjedraare: ''$2''",
 'currentrev' => 'Neuste Version',
 'currentrev-asof' => 'De neuste Version fum $2 öm $3 Uhr',
 'revisionasof' => 'De Version vum $2 öm $3 Uhr',
-'revision-info' => 'Dat heh es de övverhollte Version $3, vum $2 aam $4 öm $5 Uhr afjeshpeichert.',
+'revision-info' => 'Dat heh es de övverhollte Version $3, {{GENDER:$2|vum|vum|vum Metmaacher|vun dä|vum}} $2 aam $4 öm $5 Uhr afjeshpeichert.',
 'previousrevision' => '← De Version dovör zeije',
 'nextrevision' => 'De Version donoh zeije →',
 'currentrevisionlink' => 'De neuste Version',
@@ -1352,7 +1352,7 @@ Appachtemangs-Name.',
 'powersearch-legend' => 'Extra Söhke',
 'powersearch-ns' => 'Söök en de Apachtemangs:',
 'powersearch-redir' => 'Ömleidunge aanzeije',
-'powersearch-field' => 'Söök noh:',
+'powersearch-field' => 'Söhk noh',
 'powersearch-togglelabel' => '&nbsp;',
 'powersearch-toggleall' => 'Övverall Höhksche draan maache',
 'powersearch-togglenone' => 'All Höhksche fott nämme',
@@ -1459,7 +1459,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'prefs-registration' => 'Aanjemeldt zick',
 'prefs-registration-date-time' => 'dem $2 öm $3 Uhr',
 'yourrealname' => 'Dinge richtije Name *',
-'yourlanguage' => 'Die Sproch, die et Wiki kalle soll:',
+'yourlanguage' => 'Di Schprooch, di et Wiki kalle soll:',
 'yourvariant' => 'Der Dijaläk, de Schriefwies, de Zoot Shprooch för der Enhald.',
 'prefs-help-variant' => 'Der Dijaläk udder de Schriefwies udder de Zoot Shprooch, di De för der Enhald.vun Sigge am leevsde häs.',
 'yournick' => 'Ding&nbsp;„Ongerschreff“&nbsp;*',
@@ -1514,8 +1514,8 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'userrights-nodatabase' => 'De Datebank „<strong>$1</strong>“ is nit doh, oder se litt op enem andere ẞööver.',
 'userrights-nologin' => 'Do moss als ene Wiki-Köbes [[Special:UserLogin|enjelog sin]], för dat De Metmaacher ier Rääschte ändere kanns.',
 'userrights-notallowed' => 'Met Dingem Zohjang heh häs De nit dat Rääsch, Rääschde aan Metmaacher ze verdeile udder se fott ze nämme.',
-'userrights-changeable-col' => '{{PLURAL:$1:Di Jropp|Jruppe|kein Jropp doh}}, die De ändere kanns',
-'userrights-unchangeable-col' => '{{PLURAL:$1:Di Jropp|Jruppe|kein Jropp doh}}, die De nit ändere kanns',
+'userrights-changeable-col' => '{{PLURAL:$1:Di Jropp|Jroppe|kein Jropp doh}}, di De ändere kanns',
+'userrights-unchangeable-col' => '{{PLURAL:$1:Di Jropp|Jroppe|kein Jropp doh}}, di De nit ändere kanns',
 'userrights-irreversible-marker' => '$1 *',
 
 # Groups
@@ -1530,10 +1530,10 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 
 'group-user-member' => '{{GENDER:$1|Metmaacher|Metmaacherin}}',
 'group-autoconfirmed-member' => 'automattesch beshtääteshte {{GENDER:$1|Metmaacher|Metmaacherėn}}',
-'group-bot-member' => 'Bot',
-'group-sysop-member' => 'Wiki-Köbes',
+'group-bot-member' => '{{GENDER:$1|Bot}}',
+'group-sysop-member' => '{{GENDER:$1|Wiki-Köbes}}',
 'group-bureaucrat-member' => '{{GENDER:$1|Bürrokrad|Bürrokraatėn}}',
-'group-suppress-member' => 'Kontrolletti',
+'group-suppress-member' => '{{GENDER:$1|Kontrolletti}}',
 
 'grouppage-user' => '{{ns:project}}:Metmaacher',
 'grouppage-autoconfirmed' => '{{ns:project}}:Bestätichte Metmaacher',
@@ -1658,7 +1658,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'recentchanges-label-bot' => 'Di Änderung es fun enem Bot jemaat woode',
 'recentchanges-label-unpatrolled' => 'Heh di Änderung es noch nit nohjeloort',
 'rcnote' => '{{PLURAL:$1|Heh es de letzte Änderung us|Heh sin de letzte <strong>$1</strong> Änderunge us|Et jit <strong>kei</strong> Änderunge en}} {{PLURAL:$2|däm letzte Daach|de letzte <strong>$2</strong> Dääsch|dä Zick}} vum <strong>$4</strong> aff <strong>$5</strong> Uhr beß jetz.',
-'rcnotefrom' => 'Hee sin bes <strong>$1</strong> fun de Änderunge zick däm <strong>$3</strong> öm <strong>$4</strong> Uhr opjeliss.',
+'rcnotefrom' => 'Hee {{PLURAL:$1|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.',
 'rclistfrom' => 'Zeich de Änderunge vum $1 aan',
 'rcshowhideminor' => '$1 klein Mini-Änderunge',
 'rcshowhidebots' => '$1 de Bots ehr Änderunge',
@@ -1728,7 +1728,7 @@ Usführlich met alle Müjjelichkeite fings de dat bei de Hölp.",
 (En de [[Special:NewFiles|Jalleri met neu Dateie]] kriß De ene Övverbleck med Belldsche)',
 'filename' => 'Dä Name vun dä Datei',
 'filedesc' => 'Beschrievungstex un Zosammefassung',
-'fileuploadsummary' => 'Beschrievungstex un Zosammefassung:',
+'fileuploadsummary' => 'Beschrievungstex un Zosammefaßong:',
 'filereuploadsummary' => 'Änderunge aan Dateie:',
 'filestatus' => 'Urhevver Räächsstatus:',
 'filesource' => 'Quell:',
@@ -1902,6 +1902,7 @@ Als Jrond es aanjejovve: „$2“',
 'lockmanager-fail-acquirelock' => 'Mer kunnte kein Schpärr för „$1“ krijje.',
 'lockmanager-fail-openlock' => 'Mer kunnte di Schpärdatei för „$1“ nit opmaache.',
 'lockmanager-fail-releaselock' => 'Mer kunnte di Schpärr för „$1“ nit ophävve.',
+'lockmanager-fail-db-bucket' => 'Mer kunnet nit met jenooch  <i lang="en">lock databases in bucket$1</i> en Verbendong opnämme.',
 'lockmanager-fail-db-release' => 'Mer kunnte di Schpärre för de Daatebangk „$1“ nit ophävve.',
 'lockmanager-fail-svr-release' => 'Mer kunnte di Schpärre för dä ẞööver „$1“ nit ophävve.',
 
@@ -1996,7 +1997,7 @@ Wann ene Metmaacher ußjesöhk es, kritt mer bloß die Dateie, di dä Metmaacher
 'filehist-user' => 'Metmaacher',
 'filehist-dimensions' => 'Pixelle Breed×Hühte (Dateiömfang)',
 'filehist-filesize' => 'Dateiömfang',
-'filehist-comment' => 'Aanmerkung',
+'filehist-comment' => 'Aanmärkong',
 'filehist-missing' => 'Di Datei es nit doh',
 'imagelinks' => 'Jebruch',
 'linkstoimage' => 'Heh {{PLURAL:$1|kütt di Sigg|kumme di $1 Sigge|sin keij Sigge}}, die op heh di Dattei linke {{PLURAL:$1|deiht|dun|dun}}:',
@@ -2193,7 +2194,7 @@ Di sin dann <del>dorschjeschtresche</del>.',
 'usereditcount' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Nix jedonn}}',
 'usercreated' => '{{GENDER:$3|}}Aanjemelldt aam $1 öm $2 Uhr',
 'newpages' => 'Neu Sigge',
-'newpages-username' => 'Metmaacher Name:',
+'newpages-username' => 'Metmaacher_Naame:',
 'ancientpages' => 'Atikele zoteet vun Ahl noh Neu',
 'move' => 'Ömnenne',
 'movethispage' => 'De Sigg ömnenne',
@@ -2267,7 +2268,7 @@ eins vun all däm op eimol.',
 'cachedspecial-refresh-now' => 'De neuste Version.',
 
 # Special:Categories
-'categories' => 'Saachjruppe',
+'categories' => 'Saachjroppe',
 'categoriespagetext' => 'Hee {{PLURAL:$1|es nur en Saachjrupp|sin nur Saachjruppe|es kei Saachjrupp}} jeliss, woh jät dren {{PLURAL:$1|es|es|wöhr}}. Mer han_er eije Leßte för de
 [[Special:UnusedCategories|Saachjruppe met nix dren]], un de
 [[Special:WantedCategories|jewönschte un nit aanjelaate Saachjruppe]].',
@@ -2356,7 +2357,7 @@ Alles klor?',
 'nowikiemailtext' => 'Hee dä Metmaacher well kein <i lang="en">e-mail</i> vun ander Metmaachere jescheck krijje.',
 'emailnotarget' => 'Et jitt keine Metmaacher met däm Naame, dämm mer en <i lang="en">e-mail</i> schecke künnt.',
 'emailtarget' => 'Jiff dä Metmaacher aan, dä di <i lang="en">e-mail</i> kritt',
-'emailusername' => 'Metmaacher Name:',
+'emailusername' => 'Metmaacher_Naame:',
 'emailusernamesubmit' => 'Loß Jonn!',
 'email-legend' => 'Scheck en<i lang="en"> e-mail</i> aan ene andere Metmaacher fum Wiki',
 'emailfrom' => 'Vun:',
@@ -2560,7 +2561,7 @@ Di Sigg '''„$1“:''' es jetz jrad:",
 # Restrictions (nouns)
 'restriction-edit' => 'et Ändere',
 'restriction-move' => 'et Ömnenne',
-'restriction-create' => 'Aanläje',
+'restriction-create' => 'Aanlääje',
 'restriction-upload' => 'Huhlaade',
 
 # Restriction levels
@@ -2652,7 +2653,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Heh di <i lang="en">IP</i>-Address es em Momang jesperrt.
 De neuste Sperr ier Enndraach em Logbooch es:',
 'sp-contributions-search' => 'Söök noh Metmaacher ier Beidräg',
-'sp-contributions-username' => 'Metmaachername odder <i lang="en">IP</i>-Address:',
+'sp-contributions-username' => 'Metmaachername odder IP-Address:',
 'sp-contributions-toponly' => 'Bloß neuste Versione zeije',
 'sp-contributions-submit' => 'Söhke',
 
@@ -2760,7 +2761,7 @@ Wells De dat?',
 'blocklist-nousertalk' => 'de eije Klaafsigg Änndere verbodde',
 'ipblocklist-empty' => 'Do es nix en dä Sperrleß.',
 'ipblocklist-no-results' => 'Dä Metmaacher udder di IP-Adrress es janit jesperrt.',
-'blocklink' => 'Sperre',
+'blocklink' => 'schpärre',
 'unblocklink' => 'widder freijevve',
 'change-blocklink' => 'Sperr ändere',
 'contribslink' => 'Beidräch',
@@ -2966,7 +2967,7 @@ Wenn De jenerell aan [//www.mediawiki.org/wiki/Localisation MediaWiki singe Öve
 'allmessages-filter-all' => 'ejaal',
 'allmessages-filter-modified' => 'heh em Wiki jeändert',
 'allmessages-prefix' => 'Name fängk aan met:',
-'allmessages-language' => 'Shprooch:',
+'allmessages-language' => 'Schprooch:',
 'allmessages-filter-submit' => 'Lohß Jonn!',
 
 # Thumbnails
@@ -3731,7 +3732,7 @@ Dä E-Mail-ẞööver hät jesaat: ''$1''",
 'confirmemail_needlogin' => 'Do muss Dich $1, för de E-Mail Adress ze bestätije.',
 'confirmemail_success' => 'Ding E-Mail Adress es jetz bestätich.
 Jetz künns De och noch enlogge. Vill Spass!',
-'confirmemail_loggedin' => 'Ding E-Mail Adress es jetz bestätich!',
+'confirmemail_loggedin' => 'Ding Addräß fö de <i lang="en">e-mail</i> es jäz beschtäätesch!',
 'confirmemail_error' => 'Beim E-Mail Adress Bestätije es jet donevve jejange, de Bestätijung kunnt nit avjespeichert wääde.',
 'confirmemail_subject' => 'Dun Ding e-mail Adress för {{GRAMMAR:Akkusativ|{{SITENAME}}}} bestäteje.',
 'confirmemail_body' => 'Künnt jod sin, Do wors et selver, vun de IP_Adress $1 hät sich
@@ -3972,7 +3973,7 @@ Do sullts en [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun dä <i lang="en">GNU Ge
 # Special:FilePath
 'filepath' => 'Medije-Dateie med ier URL zëije',
 'filepath-page' => 'Dattëij_Name:',
-'filepath-submit' => 'Lohß jonn!',
+'filepath-submit' => 'Lohß Jonn!',
 'filepath-summary' => "Med dä {{int:nstab-special}} hee künnd'Er dä kompläte Paad vun de neuste Version vun ene Datei direk erusfenge.
 Die Datei weed jlich aanjezeig, odder med däm paßende Projramm op jemaat.",
 
@@ -4025,7 +4026,7 @@ Die Datei weed jlich aanjezeig, odder med däm paßende Projramm op jemaat.",
 'tags' => 'De jöltijje Makeerunge för Änderunge',
 'tag-filter' => '[[Special:Tags|Makeerunge]] ußsöke:',
 'tag-filter-submit' => 'Beschränke!',
-'tags-title' => 'Makeerunge',
+'tags-title' => 'Makeeronge',
 'tags-intro' => 'Heh sin alle de Makeerunge opjeliß, die et Wiki för Änderunge verjevve kann, un wat se bedügge.',
 'tags-tag' => 'Dä Makeerung iere Name',
 'tags-display-header' => 'Kennzeiche en de Leßte met Änderunge',
index 78e9481..a17741f 100644 (file)
@@ -13,6 +13,8 @@
  * @author Marmzok
  */
 
+$rtl = true;
+
 $fallback = 'ckb';
 
 $digitTransformTable = array(
index 1c55804..63d8372 100644 (file)
@@ -1346,7 +1346,7 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 'activeusers-noresult' => 'Tu bikarhêner nehate dîtin.',
 
 # Special:Log/newusers
-'newuserlogpage' => 'Ã\87êkirina hesabê nû',
+'newuserlogpage' => 'çêkirina hesabê nû',
 
 # Special:ListGroupRights
 'listgrouprights' => 'Mafên koma bikarhêner',
@@ -1650,7 +1650,7 @@ Sedemekê binivîse!',
 'blocklist-tempblocks' => 'Astengkirinên demkî veşêre',
 'blocklist-rangeblocks' => 'Astengkirinên cur bi cur veşêre',
 'blocklist-by' => 'Astengkirina rêveber',
-'blocklist-params' => 'Parametreyan asteng bike',
+'blocklist-params' => 'Parametreyên astengkirinê',
 'blocklist-reason' => 'Sedem',
 'ipblocklist-submit' => 'Lêgerîn',
 'ipblocklist-localblock' => 'Astengkirina herêmî',
index 3059c11..23449c3 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Amahoney
  * @author Andrew Dalby
  * @author Dferg
  * @author Esteban97
@@ -171,15 +172,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Paginarum segmenta dextero percussu in titulis redigenda (JavaScript poscitur)',
 'tog-showtoc' => 'Indicem plurium quam III segmentorum paginis praebere',
 'tog-rememberpassword' => 'Memorare tesserae meae hoc in navigatro inter conventa ({{PLURAL:$1|die|diebus}} $1 tenus)',
-'tog-watchcreations' => 'Paginas quas creo in paginarum custoditarum indicem addere',
-'tog-watchdefault' => 'Paginas quas recenseo in paginarum custoditarum indicem addere',
-'tog-watchmoves' => 'Paginas quas moveo in paginarum custoditarum indicem addere',
-'tog-watchdeletion' => 'Paginas quas deleo in paginarum custoditarum indicem addere',
+'tog-watchcreations' => 'Paginas quas creo et fasciculos quos impono in paginarum custoditarum indicem addere',
+'tog-watchdefault' => 'Paginas et fasciculos quos recenseo in paginarum custoditarum indicem addere',
+'tog-watchmoves' => 'Paginas et fasciculos quos moveo in paginarum custoditarum indicem addere',
+'tog-watchdeletion' => 'Paginas et fasciculos quos deleo in paginarum custoditarum indicem addere',
 'tog-minordefault' => 'Notare omnes recensiones quasi minores',
 'tog-previewontop' => 'Monstrare praevisum ante capsam recensiti, non post ipsam',
 'tog-previewonfirst' => 'Praevisum monstrare recensione incipiente',
 'tog-nocache' => 'Sistere paginas apothecare',
-'tog-enotifwatchlistpages' => 'Mittere mihi litteras electronicas si pagina a me custodita mutatur',
+'tog-enotifwatchlistpages' => 'Mittere mihi litteras electronicas si pagina a me custodita vel fasciculus a me custoditus mutatur',
 'tog-enotifusertalkpages' => 'Mittere mihi litteras electronicas si mea disputatio mutatur',
 'tog-enotifminoredits' => 'Mittere mihi litteras electronicas etiam pro recensionibus minoribus',
 'tog-enotifrevealaddr' => 'Monstrare inscriptio mea electronica in nuntiis notificantibus',
@@ -512,7 +513,7 @@ Noli oblivisci [[Special:Preferences|praeferentias tuas]] apud {{grammar:accusat
 'createaccount' => 'Rationem novam creare',
 'gotaccount' => "Habesne iam rationem? '''$1'''.",
 'gotaccountlink' => 'Conventum aperi',
-'userlogin-resetlink' => 'Tesserae tuae oblitus esne?',
+'userlogin-resetlink' => 'Num tesserae tuae oblitus es?',
 'createaccountmail' => 'ab inscriptione electronica',
 'createaccountreason' => 'Causa:',
 'badretype' => 'Tesserae quas scripsisti inter se non congruunt.',
@@ -521,7 +522,7 @@ Nomen usoris alium selige.',
 'loginerror' => 'Error factus est in aperiendo conventum',
 'nocookiesnew' => "Ratio usoris creata est, sed conventum non apertum est. {{SITENAME}} ''Cookies'' utitur in usorum conventa aperiendo. Cookies tua debiles sunt. Eis potestatem fac, tum conventum aperi cum nomine usoris tesseraque tua nova.",
 'nocookieslogin' => "{{SITENAME}} ''Cookies'' utitur in usorum conventa aperiendo. Cookies tua debiles sunt. Eis potestatem fac, tum conare denuo.",
-'noname' => 'Nominem usoris ratum non designavisti.',
+'noname' => 'Nomen usoris ratum non designavisti.',
 'loginsuccesstitle' => 'Conventum prospere apertum est',
 'loginsuccess' => "'''Apud {{grammar:accusative|{{SITENAME}}}} agnosceris nomine \"\$1\".'''",
 'nosuchuser' => 'Usor "$1" non est.
@@ -665,7 +666,7 @@ aut [{{fullurl:{{FULLPAGENAME}}|action=edit}} hanc paginam creare]</span>.',
 'userpage-userdoesnotexist' => 'Usor "<nowiki>$1</nowiki>" non est. Visne re vera hanc paginam creare vel recensere?',
 'updated' => '(Novata)',
 'note' => "'''Nota:'''",
-'previewnote' => "'''Memento hanc paginam solum praevisum esse, neque iam servatam!'''",
+'previewnote' => "'''Memento hanc paginam solum praevisam esse, neque iam servatam!'''",
 'editing' => 'Recensio paginae "$1"',
 'creating' => 'Creans $1',
 'editingsection' => 'Recensens $1 (partem)',
@@ -807,6 +808,7 @@ Titulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,
 'compareselectedversions' => 'Conferre emendationes selectas',
 'showhideselectedversions' => 'Monstrare/celare emendationes selectas',
 'editundo' => 'abrogare',
+'diff-multi' => '(Inter has {{PLURAL:$1|una emendatio|$1 emendationes}} ab {{PLURAL:$2|uno usore|$2 usoribus}} {{PLURAL:$1|facta|factae}} non {{PLURAL:$1|videtur|videntur}})',
 
 # Search results
 'searchresults' => 'Eventum investigationis',
@@ -1162,7 +1164,7 @@ Vide etiam [[Special:NewFiles|pinacothecam fasciculorum recentissimorum imposito
 'upload-unknown-size' => 'Magnitudo ignota',
 
 'license' => 'Typus permissionis:',
-'license-header' => 'Typus permissionis:',
+'license-header' => 'Potestas usoris',
 'nolicense' => 'Nulla selecta',
 'license-nopreview' => '(Praevisum monstrari non potest)',
 
index fc9b562..34229ea 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author ILVI
+ * @author Jewbask
  * @author Remember the dot
  * @author Runningfridgesrule
  * @author Taichi
@@ -474,6 +475,7 @@ Si puede ser mete un [[Special:ListUsers/sysop|administrador]] en corriente y ta
 'missingarticle-rev' => '(nº. de revisión: $1)',
 'missingarticle-diff' => '(Dif.: $1, $2)',
 'filecopyerror' => 'No se pudo copiar el arxiv "$1" a "$2".',
+'badtitle' => 'Titolo malo',
 'badtitletext' => 'El título de la hoja demandada está vazío, no es valible, o es un link interlingua o interwiki incorrecto.
 Puede ser que contiene uno o más caracteres que no se pueden usar en los títulos.',
 'viewsource' => 'Ver su manadero',
@@ -481,9 +483,11 @@ Puede ser que contiene uno o más caracteres que no se pueden usar en los títul
 # Login and logout pages
 'yourname' => 'Su nombre de usuario',
 'yourpassword' => 'Parola',
+'yourpasswordagain' => 'Entra de muevo la parola',
 'remembermypassword' => 'Acórdate de mi entrada de usador en este bilgisayar/orddênador (por un maksimum de {{PLURAL:$1|día|días}})',
 'login' => 'Entrar',
 'nav-login-createaccount' => 'Entrar / Crîar un cuento',
+'loginprompt' => 'Kale tener "cookies" aktivadas enel navegador para enrejistrarse en {{SITENAME}}',
 'userlogin' => 'Entrar / Registrarse',
 'logout' => 'Salir',
 'userlogout' => 'Salir',
@@ -492,6 +496,7 @@ Puede ser que contiene uno o más caracteres que no se pueden usar en los títul
 'createaccount' => 'Crea un nuevo cuento',
 'gotaccount' => "¿Ya tienes un cuento? '''$1'''.",
 'gotaccountlink' => 'Entrar',
+'userlogin-resetlink' => 'Olvidates tus detalyos de akseso?',
 'createaccountmail' => 'por una letra electrónica',
 'userexists' => 'El nombre que entrates ya se usa.
 Si puede ser, escoge un otro nombre.',
@@ -568,7 +573,8 @@ Puedes [[Special:Search/{{PAGENAME}}|buscar este títůlo de hoja]] en otras hoj
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rejistros relasyonados]</span>.',
 'userpage-userdoesnotexist-view' => 'El cuento del usador $1 no está enrejistrado.',
 'note' => "'''Nota:'''",
-'previewnote' => "'¡Acórdate que esto es sólo una previsualización y daínda no se registró!'''",
+'previewnote' => "¡Akórdate ke esto es sólo una previsualizasion i aínda no se enrejistró!'''
+Los tus trokamientos no se tienen guadrados!",
 'editing' => 'Trocando $1',
 'editingsection' => 'Trocando $1 (sección)',
 'editingcomment' => 'Trocando $1 (kapítůlo)',
@@ -582,6 +588,8 @@ o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'hiddencategories' => 'Esta hoja es un miembro de {{PLURAL:$1|1 kateggoría escondida|$1 kateggorías escondidas}}:',
 'nocreate-loggedin' => 'No tienes el permisso de creas hojas nuevas.',
 'permissionserrorstext-withaction' => 'No tienes el permiso para $2, por las {{PLURAL:$1|razón|razones}} venideras:',
+'moveddeleted-notice' => "Esta ója fue efassada.
+El ''log'' de efassado i taxireado de la ója es amostrado abasho para dar referensia.",
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Avizo:''' La contenencia de xablon está muy grande.
@@ -593,6 +601,7 @@ Algunos xablones no van á ser comprendidos.",
 'currentrev' => "Enderechamiento d'al cavo",
 'currentrev-asof' => 'Enderechamiento de alcavo á las $1',
 'revisionasof' => 'Enderechamiento á las $1',
+'revision-info' => 'Revision en data $1 por $2',
 'previousrevision' => '← Enderechamiento de antes',
 'nextrevision' => 'Rêvisión venidera →',
 'currentrevisionlink' => 'Revisión actual',
@@ -613,6 +622,7 @@ Leyenda: (act) = diferencias con la versión actual,
 
 # Revision feed
 'history-feed-title' => 'Îstoria de nderechamientos',
+'history-feed-item-nocomment' => '$1 en $2',
 
 # Revision deletion
 'rev-delundel' => 'mostra/esconde',
@@ -635,7 +645,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'revertmerge' => 'Apartar',
 
 # Diffs
-'history-title' => 'Istoria de revisiones para «$1»',
+'history-title' => 'Istorya de trokamientos para «$1»',
 'lineno' => 'Shurá $1:',
 'compareselectedversions' => 'Comparar versiones escogidas',
 'editundo' => 'deshaze',
@@ -654,6 +664,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'nextn-title' => '$1 {{PLURAL:$1|resultado|resultados}} venideros',
 'shown-title' => 'Àmostrar $1 {{PLURAL:$1|resultado|resultados}} por hoja',
 'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
+'searchmenu-exists' => 'Egziste una oja yamada "[[:$1]]" en esta viki',
 'searchmenu-new' => "'''Crîar la hoja «[[:$1]]» en esta viki!'''",
 'searchhelp-url' => 'Help:Ayudo',
 'searchprofile-articles' => 'Hojas de contènido',
@@ -675,6 +686,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'search-interwiki-more' => '(más)',
 'search-mwsuggest-enabled' => 'con consejos',
 'search-mwsuggest-disabled' => 'no ay consejos',
+'searchrelated' => 'lisionado',
 'searchall' => 'todos',
 'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} para '''$4'''",
 'nonefound' => "'''Nota''': Por defecto sólo se busca en algunos espacios de nombre.
@@ -745,13 +757,17 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de
 'recentchanges-legend' => 'Opciones encima de los trocamientos frescos',
 'recentchanges-summary' => 'Perseguid en esta hoja, los trocamientos de alcabo realizados en la Viki.',
 'recentchanges-feed-description' => 'Perseguir los trocamientos más nuevos en el viki en este feed.',
+'recentchanges-label-newpage' => 'Este trokamiento krio una mueva ója',
 'recentchanges-label-minor' => 'Esta es un trocamiento chiquitico',
+'recentchanges-label-bot' => 'Este trokamiento fue echo por un bot',
+'recentchanges-label-unpatrolled' => 'Estre trokamiento no esta akavidado',
 'rcnote' => "Debaxo {{PLURAL:$1|ay '''1''' trocamiento realizado|están los dal cabo '''$1''' trocamientos realizados}} en  {{PLURAL:$2|el dal cabo día|los dal cabo '''$2''' días}}, hasta el $4, $5.",
 'rclistfrom' => 'Mostra los trocamientos nuevos empeçando desde $1',
 'rcshowhideminor' => '$1 trocamientos chiquiticos',
 'rcshowhidebots' => '$1 bots',
 'rcshowhideliu' => '$1 empleadores enrējjistrados',
 'rcshowhideanons' => '$1 empleadores anonimes',
+'rcshowhidepatr' => '$1 trokamientos akavidados',
 'rcshowhidemine' => '$1 mis ediciones',
 'rclinks' => 'Ver los dal cabo $1 trocamientos en los dal cabo $2 días.<br />$3',
 'diff' => 'dif',
@@ -769,6 +785,7 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de
 'recentchangeslinked-feed' => 'Trocamientos conectados',
 'recentchangeslinked-toolbox' => 'Trocamientos relatados',
 'recentchangeslinked-title' => 'Los trocamientos relacionados con "$1"',
+'recentchangeslinked-noresult' => 'Sin trokamientos en las ójas atadas en la data demandada',
 'recentchangeslinked-summary' => "Esto es la lista de los trocamientos de alcavo de las hojas que relatan á una hoja spēcifik (ou de los miembros de la katēggoría spēcifikada).
 Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son escritas '''con letras grexas'''.",
 'recentchangeslinked-page' => 'Nombre de la hoja',
@@ -780,6 +797,9 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son escritas '''con
 'filedesc' => 'Somario',
 'uploadedimage' => 'subió «[[$1]]»',
 
+'license' => 'Lesensia:',
+'license-header' => 'Lesensiamyénto',
+
 # Special:ListFiles
 'listfiles_name' => 'Nombre',
 'listfiles_user' => 'Usuario',
@@ -789,6 +809,7 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son escritas '''con
 'file-anchor-link' => 'Archivo',
 'filehist' => 'La storia del dosya',
 'filehist-help' => 'Klika encima de una data/ora para vel el arxivo de esta data.',
+'filehist-revert' => 'aboltar',
 'filehist-current' => 'actual',
 'filehist-datetime' => 'Data/Ora',
 'filehist-thumb' => 'Minyatura',
@@ -799,6 +820,7 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son escritas '''con
 'filehist-comment' => 'Comentario',
 'imagelinks' => 'El uso del dosya',
 'linkstoimage' => '{{PLURAL:$1|La hoja venidera da link|Las hojas venideras dan link}} a este arxivo:',
+'nolinkstoimage' => 'Dinguna ója tiene atamientos a esta imej',
 'sharedupload' => 'Este arxivo es de $1 i puede ser usado por otros proyectos.',
 'sharedupload-desc-here' => 'Esta hoja es de $1 y puede ser usado por otros projetos.
 La descripción en su [$2 hoja de descripción del arxivo] está amostrada debaxo.',
@@ -847,6 +869,7 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 
 # Special:LinkSearch
 'linksearch' => 'Linkes eksternos',
+'linksearch-line' => 'Atamiento para $1 en la ója $2',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Registro de creación de usuarios',
@@ -860,6 +883,7 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 # Watchlist
 'watchlist' => 'Mi lista de escogidas',
 'mywatchlist' => 'Mi lista de akavidamientos',
+'watchlistfor2' => 'Para $1 $2',
 'addedwatchtext' => "La hoja «[[:$1]]» fue ajustada a tu [[Special:Watchlist|lista de escogidas]]. Los trocamientos venideros en esta hoja i en tu hoja de diskussión associada se van indicar aí, i la hoja va aparecer '''gordo''' en la hoja de [[Special:RecentChanges|trocamientos freskos]] para hazerla más kolay de detektar.
 
 Cuando queres eliminar la hoja de tu lista de escogidas, piza «Dexar de cudiar» en el menú.",
@@ -882,6 +906,7 @@ en forma turable, ansí como todo su istoria.
 Si puede ser, confirma que de verdad queres hazer esto, que estás entendiendo las
 resultados, i que lo estás haziendo de acorddo con las [[{{MediaWiki:Policy-url}}|Políticas]].',
 'actioncomplete' => 'Aksion kompleta',
+'actionfailed' => 'Aksiyon sin reushitá',
 'deletedtext' => '"$1" fue efassado.
 Mira $2 para un registro de los efassados nuevos.',
 'dellogpage' => 'Registro de efassados',
@@ -940,9 +965,11 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 
 'sp-contributions-newbies' => 'Mostrar solo las ajustamientos de los usuarios nuevos',
 'sp-contributions-blocklog' => 'registro de bloqueos',
-'sp-contributions-talk' => 'Diścutir',
+'sp-contributions-uploads' => 'suvidas',
+'sp-contributions-talk' => 'Diskusyón',
 'sp-contributions-search' => 'Buscar ajustamientos',
 'sp-contributions-username' => 'Dirección IP o nombre de usuario:',
+'sp-contributions-toponly' => "Amostrar solo revisiones d'alkavo",
 'sp-contributions-submit' => 'Buscar',
 
 # What links here
@@ -950,15 +977,17 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'whatlinkshere-title' => 'Hojas que dan link a "$1"',
 'whatlinkshere-page' => 'Hoja:',
 'linkshere' => "Las hojas venideras dan link a '''[[:$1]]''':",
+'nolinkshere' => "Dinguna ója tiene atamientos kon '''[[:$1]]'''",
 'isredirect' => 'Hoja redirigida',
 'istemplate' => 'inclusión',
-'isimage' => 'Link del image',
+'isimage' => 'Atamiento de la dossia',
 'whatlinkshere-prev' => '{{PLURAL:$1|de antes|de antes $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|venidera|venideras $1}}',
 'whatlinkshere-links' => '← linkes',
 'whatlinkshere-hideredirs' => '$1 redirecciones',
 'whatlinkshere-hidetrans' => '$1 inclusiones',
 'whatlinkshere-hidelinks' => '$1 linkes',
+'whatlinkshere-hideimages' => '$1 atamientos a imejes',
 'whatlinkshere-filters' => 'Filtres',
 
 # Block/unblock
@@ -1019,6 +1048,7 @@ Si puede ser, escoge otro nombre.',
 
 # Thumbnails
 'thumbnail-more' => 'Engrandece',
+'thumbnail_error' => 'Yerro kriando la imej chika: $1',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Tu hoja de usador',
index 2e08a4c..1d64539 100644 (file)
@@ -1680,6 +1680,7 @@ Wann de Problem weider besteet, dann un de [[Special:ListUsers/sysop|Administrat
 'lockmanager-fail-openlock' => 'De Spärfichier fir "$1" konnt net opgemaach ginn.',
 'lockmanager-fail-releaselock' => 'D\'Spär fir "$1" konnt net opgehuewe ginn.',
 'lockmanager-fail-db-release' => "D'Spären op der Datebank $1 konnten net fräigeschalt ginn.",
+'lockmanager-fail-svr-acquire' => "D'Spären um Server $1 konnten net ofgefrot ginn.",
 'lockmanager-fail-svr-release' => "D'Spären um Server $1 konnten net fräigeschalt ginn.",
 
 # ZipDirectoryReader
@@ -1949,7 +1950,7 @@ An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun d
 'protectedtitlesempty' => 'Zur Zäit si mat de Parameteren déi Dir uginn hutt keng Säite fir neit Uleeë gespaart.',
 'listusers' => 'Benotzerlëscht',
 'listusers-editsonly' => 'Nëmme Benotzer mat Ännerunge weisen',
-'listusers-creationsort' => 'No dem Datum vum Uleeë sortéieren',
+'listusers-creationsort' => 'Nom Datum vum Uleeën zortéieren',
 'usereditcount' => '$1 {{PLURAL:$1|Ännerung|Ännerungen}}',
 'usercreated' => "{{GENDER:$3|De(n)|D'}} $1 ëm $2 Auer ugeluecht",
 'newpages' => 'Nei Säiten',
@@ -2015,8 +2016,8 @@ Dir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisit
 [[Special:UnusedCategories|Netbenotzt Kategorië]] ginn hei net gewisen.
 Kuckt och [[Special:WantedCategories|Gewënscht Kategorien]].',
 'categoriesfrom' => 'Weis Kategorien ugefaang bei:',
-'special-categories-sort-count' => 'No der Zuel sortéieren',
-'special-categories-sort-abc' => 'alphabetesch sortéieren',
+'special-categories-sort-count' => 'No der Zuel zortéieren',
+'special-categories-sort-abc' => 'alphabetesch zortéieren',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'Geläschte Kontributiounen',
@@ -3717,6 +3718,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'api-error-emptypage' => 'Et ass net erlaabt nei, eidel Säiten unzeleeën.',
 'api-error-fetchfileerror' => 'Interne Feeler: beim Opruffe vum Fichier huet eppes net fonctionnéiert.',
 'api-error-fileexists-forbidden' => 'E Fichier mam Numm "$1" gëtt et schonn an e kann net iwwerschriwwe ginn.',
+'api-error-fileexists-shared-forbidden' => 'E Fichier mam Numm "$1" gëtt et schonn am gedeelte Repertoire an e kann net iwwerschriwwe ginn.',
 'api-error-file-too-large' => 'De Fichier deen Dir geschéckt hutt war ze grouss.',
 'api-error-filename-tooshort' => 'Den Numm vum Fichier ass ze kuerz.',
 'api-error-filetype-banned' => 'Dësen Typ vu Fichier ass net zougelooss.',
@@ -3755,6 +3757,4 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'duration-centuries' => '$1 {{PLURAL:$1|Joerhonnert|Joerhonnerten}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Millenaire|Millenairen}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => "D'Spären um Server $1 konnten net ofgefrot ginn.",
 );
index f610349..444d6da 100644 (file)
@@ -163,7 +163,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Gemarkeerde wieziginge verberge in recente wieziginge',
 'tog-newpageshidepatrolled' => "Gemarkeerde pagina's verberge in de lies mit nuuj pagina's",
 'tog-extendwatchlist' => 'Oetgebreide volglies gebroeke óm alle verangeringe te zeen en neet allein de lèste',
-'tog-usenewrc' => 'Oetgebreide recènte verangeringe (Javascript nudig)',
+'tog-usenewrc' => 'Tuun verangeringe per pagina in recènte verangeringe en volglies (Javascript nudig)',
 'tog-numberheadings' => 'Köpkes automatisch nummere',
 'tog-showtoolbar' => 'Laot edit toolbar zeen',
 'tog-editondblclick' => "Bewirk pagina's bie 'ne dobbelklik (JavaScript)",
@@ -171,17 +171,17 @@ $messages = array(
 'tog-editsectiononrightclick' => "Secties bewirke mit 'ne rechtermoesklik op sectietitels (JavaScript nudig)",
 'tog-showtoc' => "Inhaudsopgaaf veur pagina's mit mie es 3 köpkes",
 'tog-rememberpassword' => 'Mien wachwaord onthouwe veur later sessies (hoegstens $1 {{PLURAL:$1|daag|daag}})',
-'tog-watchcreations' => "Pagina's die ich aanmaak automatisch volge",
-'tog-watchdefault' => "Voog pagina's die se bewirks toe aan dien volglies",
-'tog-watchmoves' => "Pagina's die ich verplaats automatisch volge",
-'tog-watchdeletion' => "Pagina's die ich ewegsjaf automatisch volge",
+'tog-watchcreations' => "Volg autematis pagina's die ich aanmaak en bestenj die ich upload",
+'tog-watchdefault' => "Voog pagina's em bestenj die se bewirks toe aan dien volglies",
+'tog-watchmoves' => "Volg autematis pagina's en bestenj die ich verplaats",
+'tog-watchdeletion' => "Volg autematis pagina's en bestenj die ich ewegsjaf",
 'tog-minordefault' => 'Markeer sjtanderd alle bewirkinge es klein',
 'tog-previewontop' => 'Veurvertuin baove bewèrkingsveld tuine',
 'tog-previewonfirst' => 'Preview laote zien bie de ierste bewirking',
 'tog-nocache' => 'Zèt de browserpaginacaching oet',
-'tog-enotifwatchlistpages' => "'ne E-mail nao mich versjikke bie bewirkinge van pagina's op mien volglies",
+'tog-enotifwatchlistpages' => "Versjik 'ne e-mail nao mich bie bewirkinge van pagina's en bestenj op mien volglies",
 'tog-enotifusertalkpages' => "'ne E-mail nao mich versjikke es emes mien euverlèkpagina verangert",
-'tog-enotifminoredits' => "'ne E-mail nao mich versjikke bie klein bewirkinge op pagina's op mien volglies",
+'tog-enotifminoredits' => "Versjik  mich 'ne e-mail bie klein bewirkinge op pagina's en bestenj op mien volglies",
 'tog-enotifrevealaddr' => 'Mien e-mailadres tuine in e-mailberichte',
 'tog-shownumberswatching' => "'t Aantal gebroekers tuine die dees pagina volg",
 'tog-oldsig' => 'Bestaonde ongerteikening:',
@@ -514,6 +514,8 @@ Maak hievan melding bie 'ne [[Special:ListUsers/sysop|systeembeheerder]] van {{S
 'cannotdelete' => 'Kós de pagina of \'t besjtand "$1" neet ewegsjaffe.
 Mesjiens haet emes angers det al gedaon.',
 'cannotdelete-title' => 'Pagina "$1" kin neet gewösj waere',
+'delete-hook-aborted' => "'t Wösje is aafgebroke door 'ne 'hook'.
+D'r is gein toelichting besjikbaar.",
 'badtitle' => 'Óngeljige paginatitel',
 'badtitletext' => 'De opgevraogde pagina is neet besjikbaar of laeg.',
 'perfcached' => "De gegaeves koume oet 'n cache en zeen mäögelik neet actueel. 't Geuf {{PLURAL:$1|maximaal ei rizzeltaot|maximaal $1 rizzeltaote}} inne cache.",
@@ -545,6 +547,8 @@ De gegaeve ree is ''$2''.",
 d\'n Opgegaeve raej vanne sloetendje admin waar "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Óngèljige titel mit naamruumdje "$2" en teks "$3"',
 'invalidtitle-unknownnamespace' => 'Óngèljige titel mit ónbekèndj naamruumdenómmer $1 en teks "$2"',
+'exception-nologin' => 'Neet aangemèld',
+'exception-nologin-text' => 'Óm dees pagina te betrachte of dees hanjeling te kinne doon mós se aangemèldj zeen bie deze wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Slechte configuratie: onbekenge virusscanner: ''$1''",
@@ -1372,6 +1376,7 @@ Deze informatie is zichbaar veur angere gebroekers.',
 'right-writeapi' => 'Bewèrke via de API',
 'right-delete' => "Pagina's verwijdere",
 'right-bigdelete' => "Pagina's mit 'n grote gesjiedenis verwijdere",
+'right-deletelogentry' => 'Wösj of plaats trögk specifieke logbookregels',
 'right-deleterevision' => "Versies van pagina's verberge",
 'right-deletedhistory' => 'Verwijderde versies bekieke, zonder te kinne zeen wat verwijderd is',
 'right-deletedtext' => 'Bekieke gewösjde teks en wieziginge tösse verwiedere versies',
@@ -1669,6 +1674,7 @@ Gank trök nao t [[Special:Upload/stash/$1|uploadformuleer]] om dit perbleem te
 'lockmanager-fail-releaselock' => 'Kós de vergrendeling veur "$1" neet opheffe.',
 'lockmanager-fail-db-bucket' => 'Kós neet in kontak kómme mit genóg vergrendelingsdatabases in de bucket $1.',
 'lockmanager-fail-db-release' => "'t Waar neet meugelik ómme vergrendeling veure database $1 óp tö höffe.",
+'lockmanager-fail-svr-acquire' => "'t Waar neet meugelik ómme vergrendeling oppe server $1 tö kriege.",
 'lockmanager-fail-svr-release' => "'t Waar neet meugelik ómme vergrendeling veure server $1 óp tö höffe.",
 
 # ZipDirectoryReader
@@ -2826,6 +2832,7 @@ Meistal wörd dit door 'ne zwarte externe link veroorzaak.",
 'spambot_username' => 'MediaWiki spam opruming',
 'spam_reverting' => 'Bezig mit trökdrèjje nao de letste versie die gein verwiezing haet nao $1',
 'spam_blanking' => "Alle wieziginge mit 'ne link nao $1 waere verwiederd",
+'spam_deleting' => 'Alle wieziginge hawwe links nao $1, wuuertj gewösj',
 
 # Info page
 'pageinfo-title' => 'Informatie euver "$1"',
@@ -3687,6 +3694,8 @@ Anges kin se-n ouch \'t einvawdig formeleer hieónger gebroeke. Dien commentaar
 'api-error-empty-file' => 't Bestandj det se perbeers te uploade had gein inhald.',
 'api-error-emptypage' => "Doe maags gein nuuj, laeg pagina's aanmake.",
 'api-error-fetchfileerror' => "Intern fout: d'r is get fout gegange bie 't óphaole van 't bestandj.",
+'api-error-fileexists-forbidden' => 'd\'r Besteit al e bestandj mitte naam "$1" det neet euversjreve kin waere.',
+'api-error-fileexists-shared-forbidden' => 'd\'r Besteit al e bestandj mitte naam "$1" inne gedeildje repositoir det neet euversjreve kin waere.',
 'api-error-file-too-large' => 't Bestandj det se perbeers te uploade waas te groet.',
 'api-error-filename-tooshort' => "t Bestandj det se perbeers te uploade had 'ne te kórte bestandjsnaam.",
 'api-error-filetype-banned' => 't Bestandj det se perbeers te uploade waas van e neet-toegelaote bestandjstype.',
index 30fd62a..3ce031b 100644 (file)
@@ -48,6 +48,11 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'Kategorijos_aptarimas',
 );
 
+$namespaceGenderAliases = array(
+       NS_USER      => array( 'male' => 'Naudotojas', 'female' => 'Naudotoja' ),
+       NS_USER_TALK => array( 'male' => 'Naudotojo_aptarimas', 'female' => 'Naudotojos_aptarimas' ),
+);
+
 $specialPageAliases = array(
        'Allmessages'               => array( 'Visi_pranešimai' ),
        'Allpages'                  => array( 'Visi_puslapiai' ),
@@ -1352,8 +1357,8 @@ teisės",
 'group-suppress' => 'Peržiūrėtojai',
 'group-all' => '(visi)',
 
-'group-user-member' => 'Naudotojas',
-'group-autoconfirmed-member' => 'Automatiškai patvirtintas naudotojas',
+'group-user-member' => '{{GENDER:$1|naudotojas|naudotoja}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|automatiškai patvirtintas naudotojas|automatiškai patvirtinta naudotoja}}',
 'group-bot-member' => 'Botas',
 'group-sysop-member' => 'Administratorius',
 'group-bureaucrat-member' => 'Biurokratas',
@@ -2218,7 +2223,7 @@ kažkas jau pakeitė puslapį arba suspėjo pirmas atmesti keitimą.
 
 Paskutimas keitimas darytas naudotojo [[User:$3|$3]] ([[User talk:$3|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Redagavimo komentaras: „''$1''“.",
-'revertpage' => 'Atmestas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]]) pakeitimas; sugrąžinta naudotojo [[User:$1|$1]] versija',
+'revertpage' => 'Atmestas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]]) pakeitimas; sugrąžinta [[User:$1|$1]] versija',
 'revertpage-nouser' => 'Atmesti (naudotojo vardas pašalintas) pakeitimai, grąžinta prieš tai buvusi [[User:$1|$1]] versija',
 'rollback-success' => 'Atmesti $1 pakeitimai;
 grąžinta prieš tai buvusi $2 versija.',
@@ -2354,8 +2359,8 @@ $1',
 'blanknamespace' => '(Pagrindinė)',
 
 # Contributions
-'contributions' => 'Naudotojo įnašas',
-'contributions-title' => 'Naudotojo $1 indėlis',
+'contributions' => 'Naudotojo indėlis',
+'contributions-title' => '{{GENDER:$1|Naudotojo|Naudotojos}} $1 indėlis',
 'mycontris' => 'Mano įnašas',
 'contribsub2' => 'Naudotojo $1 ($2)',
 'nocontribs' => 'Jokie keitimai neatitiko šių kriterijų.',
@@ -2853,7 +2858,7 @@ Leidžia pridėti atmetimo priežastį komentaruose',
 
 # Attribution
 'anonymous' => '{{SITENAME}} {{PLURAL:$1|anoniminis naudotojas|anoniminiai naudotojai}}',
-'siteuser' => '{{SITENAME}} naudotojas $1',
+'siteuser' => '{{SITENAME}} {{GENDER:$2|naudotojas|naudotoja}} $1',
 'anonuser' => '{{SITENAME}} anoniminis naudotojas $1',
 'lastmodifiedatby' => 'Šį puslapį paskutinį kartą redagavo $3 $2, $1.',
 'othercontribs' => 'Paremta $1 darbu.',
@@ -3468,10 +3473,10 @@ $5
 
 # Delete conflict
 'deletedwhileediting' => 'Dėmesio: Šis puslapis ištrintas po to, kai pradėjote redaguoti!',
-'confirmrecreate' => "Naudotojas [[User:$1|$1]] ([[User talk:$1|aptarimas]]) ištrynė šį puslapį po to, kai pradėjote jį redaguoti. Trynimo priežastis:
+'confirmrecreate' => "{{GENDER:$1|Naudotojas&nbsp;|Naudotoja&nbsp;|}}[[User:$1|$1]] ([[User talk:$1|aptarimas]]) ištrynė šį puslapį po to, kai pradėjote jį redaguoti. Trynimo priežastis:
 : ''$2''
 Prašome patvirtinti, kad tikrai norite iš naujo sukurti puslapį.",
-'confirmrecreate-noreason' => 'Naudotojas [[User:$1|$1]] ([[User talk:$1|aptarimas]]) ištrynė šį puslapį po to, kai jūs pradėjote redaguoti. Prašome patvirtinti, jog jūs tikrai norite atkurti šį puslapį.',
+'confirmrecreate-noreason' => '{{GENDER:$1|Naudotojas&nbsp;|Naudotoja&nbsp;|}}[[User:$1|$1]] ([[User talk:$1|aptarimas]]) ištrynė šį puslapį po to, kai jūs pradėjote redaguoti. Prašome patvirtinti, jog jūs tikrai norite atkurti šį puslapį.',
 'recreate' => 'Atkurti',
 
 # action=purge
@@ -3692,6 +3697,7 @@ Paveikslėliai yra rodomi pilna raiška, kiti failų tipai paleidžiami tiesiogi
 # New logging system
 'logentry-delete-delete' => '$1 ištrynė puslapį $3',
 'logentry-delete-restore' => '$1 atkūrė puslapį $3',
+'logentry-delete-revision' => '$1 pakeitė puslapio „$3“ {{PLURAL:$5|versijos|$5 versijų}} matomumą: $4',
 'revdelete-content-hid' => 'turinys paslėptas',
 'revdelete-summary-hid' => 'paslėptas keitimo komentaras',
 'revdelete-uname-hid' => 'paslėptas naudotojo vardas',
index 56660e9..360ab26 100644 (file)
@@ -224,7 +224,7 @@ $messages = array(
 'tog-hidepatrolled' => "Hanitrika ny fanovana voaara-maso ao amin'ny fanovana farany",
 'tog-newpageshidepatrolled' => "Hanitsika ny pejy voaara-maso ao amin'ny pejy vaovao",
 'tog-extendwatchlist' => 'Hanitatra ny lisitra fanaraham-pejy mba haneho ny fanovana rehetra fa tsy ny vaovao indrindra fotsiny',
-'tog-usenewrc' => "Hampiasa ny fanovana farany nohatsaraina (mila an'i Javascript)",
+'tog-usenewrc' => "Hamondrona ny fanovana araka ny pejy ao amin'ny fanovàna farany ary ao amin'ny pejy arahana (mila Javascript)",
 'tog-numberheadings' => 'Asio laharany ny lohateny',
 'tog-showtoolbar' => 'Asehoy ny edit toolbar (mila JavaScript)',
 'tog-editondblclick' => 'Ovay ny pejy rehefa voatsindry indroa misesy ny totozy (mila JavaScript)',
@@ -232,17 +232,17 @@ $messages = array(
 'tog-editsectiononrightclick' => "Ovay ny fizaràna rehefa manindry ny bokotra havanana amin'ny totozy eo amin'ny lohateny hoe fizaràna (mila JavaScript)",
 'tog-showtoc' => "Asehoy ny fanoroan-takila (ho an'ny pejy misy lohateny mihoatra ny 3)",
 'tog-rememberpassword' => "Tadidio ny tenimiafiko eto amin'ity solosaina ity (mandritry ny andro $1 fara-fahabetsany){{PLURAL:}}",
-'tog-watchcreations' => "Ampina ao anarin'ny pejy fanaraha-maso ny pejy amboariko",
-'tog-watchdefault' => "Atsofohy ao amin'ny lisitry ny pejy arahinao maso ny pejy izay ovainao na foroninao",
-'tog-watchmoves' => "Ampina ao anatin'ny pejiko fanaraha-maso ny pejy soloiko anarana",
-'tog-watchdeletion' => "Ampina anatin'ny pejy fanaraha-maso ny pejy nofafako",
+'tog-watchcreations' => 'Hanaraka ny pejy foronoko ary ny rakitra ampidiriko',
+'tog-watchdefault' => 'Hanaraka ny pejy ary ny rakitra ovaiko',
+'tog-watchmoves' => 'Hanaraka ny pejy ary ny rakitra ovaiko anarana',
+'tog-watchdeletion' => 'Hanaraka ny pejy ary ny rakitra voafafako',
 'tog-minordefault' => 'Mariho ho madinika foana aloha ny fanovana rehetra',
 'tog-previewontop' => "Asehoy alohan'ny boaty fanovana ny tsipalotra",
 'tog-previewonfirst' => "Asehoy ny tsipalotra amin'ny fanovana voalohany",
 'tog-nocache' => 'Tsy alefa ny fanehoana ny pejy voasitriky ny mpitety',
-'tog-enotifwatchlistpages' => 'Andefaso imailaka aho rehefa misy miova ny pejy',
+'tog-enotifwatchlistpages' => 'Andefasana imailaka rehefa voaova ny pejy na ny rakitra arahako',
 'tog-enotifusertalkpages' => 'Andefaso imailaka aho rehefa miova ny pejin-dresako',
-'tog-enotifminoredits' => 'Andefaso imailaka aho na dia fanovana madinika ihany aza',
+'tog-enotifminoredits' => "Andefasana imailaka na dia fanovana madinika aza no atao amin'ny pejy sy ny rakitra",
 'tog-enotifrevealaddr' => "Asehoy ny adiresy imailako any amin'ny imailaka fampilazana",
 'tog-shownumberswatching' => "Asehoy ny isan'ny mpikambana manara-maso ny pejy",
 'tog-oldsig' => "Topi-mason'ny sonia :",
@@ -572,21 +572,24 @@ Mihidy ho azy aloha ny banky angona mandra-pahatratran'ny serveur andevo ny tomp
 'badarticleerror' => "Tsy azo atao eto amin'ity pejy ity io asa io.",
 'cannotdelete' => "Tsy afaka fafàna ny pejy na ny rakitra « $1 ».
 Mety efa nataon'ny hafa angamba ny famafàna.",
+'cannotdelete-title' => 'Tsy afaka mamafa ny pejy "$1"',
 'badtitle' => 'Tsy mety ny lohateny',
 'badtitletext' => "Tsy mety io anaram-pejy nangatahinao io na tsy misy n'inon'inona na rohy dikan-teny vahiny misy diso tsipelina.",
-'perfcached' => 'Ireto angona ireto dia nalaina tao anaty cache koa mety ho efa lany daty. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => "Aminy ''cache'' daholo ny ''data'' misy ato, tamin'ny $1 ny data tato no natao ''mise à jour''. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+'perfcached' => "Ao amin'ny voatakona ireo data manaraka ireo ary mety tsy voavao. $1{{PLURAL:}} ihany no isan'ireo zavatra voatahiry ao amin'ny voatakona",
+'perfcachedts' => "Ao amin'ny voatakona (cache) ny data aseho, ary tamin'ny $1 izy no navaozina farany. $4{{PLURAL:}} no isan'ny valim-pikarohana ao amin'ilay voatakona.",
 'querypage-no-updates' => "Tsy nalefa ny ''mise à jour'' (update) hoan'ity pejy ity.
 Mety tsy misy fifandraisana amin'ny zavamisy ankehitriny ny zavamisy ao anatin'ity pejy ity..",
 'wrong_wfQuery_params' => "Misy tsy fetezana amin'ny wfQuery()<br />
 Asa : $1<br />
 fangatahana : $2",
 'viewsource' => 'Hijery fango',
+'viewsource-title' => "Hijery ny fangon'i $1",
 'actionthrottled' => 'Tao voafetra',
 'actionthrottledtext' => "Mba hiady amin'ny spam, ny hatetika momba ny fanaovana io otao io dia ferana ho foifoy, ary niaotra io fetra io ianao.
 Andramo indray afaka minitra vitsivitsy.",
 'protectedpagetext' => 'Voaaro mba tsy hisy hanova ity pejy ity.',
 'viewsourcetext' => "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity :",
+'viewyourtext' => "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
 'protectedinterface' => "Manome lahatsoratra ho an'ny rindrankajy ity pejy ity ary voaaro izy ity mba tsy hisy hanararaotra",
 'editinginterface' => "'''Tandremo :''' manova pejy ampiasan'ny lôjisialy wiki ianao. Mety hita ny mpikambana sàsany izy io. Rehefa tia mandika teny ianao, jereo ny volavola MediaWiki ho an'ny internationalisation ny hafatra [//translatewiki.net/wiki/Main_Page?setlang=fr translatewiki.net].",
 'sqlhidden' => '(nafenina ny requête SQL)',
@@ -599,6 +602,7 @@ $2',
 'ns-specialprotected' => "Tsy afaka ovaina ny pejy anatin'ny toeran'anarana « {{ns:special}} » .",
 'titleprotected' => "Voaaron'i [[User:$1|$1]] ity lohateny ity mba tsy hamorona pejy mitondra ity anarana ity.
 Ny antony napetraka dia : « ''$2'' ».",
+'exception-nologin' => 'Tsy tafiditra',
 
 # Virus scanner
 'virus-badscanner' => "Diso : Tsy fantatray ny mpitady virus ''$1''",
@@ -693,6 +697,7 @@ mba hanaporofoana fa anao io kaonty io.",
 'emailconfirmlink' => 'Hamarino ny adiresy imailakao',
 'invalidemailaddress' => 'Tsy mety io imailaka nalefanao io satria tsy manaraka ny firafitra tokony ho izy.
 Azafady manomeza adiresy voasoratra tsara na avelao ho banga io toerana io.',
+'cannotchangeemail' => "Tsy afaka ovaina eto amin'ity wiki ity ny adiresy imailaky ny kaonty.",
 'accountcreated' => 'Kaonty voaforona',
 'accountcreatedtext' => "Voasokatra ilay kaonty hoan'i $1.",
 'createaccount-title' => "Fanokafana kaonty ho an'ny/i {{SITENAME}}",
@@ -736,6 +741,7 @@ Mety efa nanova tenimiafina na nanontany tenimiafina miserana angamba ianao.',
 'passwordreset-pretext' => '{{PLURAL:$1}}Mampidira singa data eo ambany',
 'passwordreset-username' => 'Anaram-pikambana :',
 'passwordreset-domain' => 'Vala (domain) :',
+'passwordreset-capture' => 'Hijery ny imailaka vokany ?',
 'passwordreset-email' => 'Adiresy imailaka :',
 'passwordreset-emailtitle' => "Antsipirihan'ny kaonty eo amin'i {{SITENAME}}",
 'passwordreset-emailtext-ip' => "Nisy olona (mety ianao ihany angamba, avy amin'ity adiresy IP ity: $1) nangataka fampahalalana manokana mikasika ny kaontinao eo amin'i {{SITENAME}} ($4). {{PLURAL:$3|Ity|Ireto}} adiresy imailaka {{PLURAL:$3|Ity|Ireto}} dia mampiasa ity adiresy imailaka ity :
@@ -752,6 +758,8 @@ Hitsahatra afaka {{PLURAL:$5|iray|$5}} andro {{PLURAL:$3|io|ireo}} tenimiafina {
 'passwordreset-emailelement' => 'Anaram-pikambana : $1
 Tenimiafina miserana : $2',
 'passwordreset-emailsent' => 'Nalefa ny imailaka fampatsiahivana.',
+'passwordreset-emailsent-capture' => 'Lasa ilay imailaka fahatadidiana, izay aseho eo ambany.',
+'passwordreset-emailerror-capture' => "Voaforona ilay imailaka fitadidiana, izay aseho eo ambany, fa tsy nahomby anefa ny fandefasana azy any amin'ny mpikambana : $1",
 
 # Special:ChangeEmail
 'changeemail' => 'Hanova ny adiresy imailaka',
@@ -879,7 +887,9 @@ Ny fampidirana faran'ny laogin'ny fanakanam-pikambana dia naseho teo ambany ho a
 Tadidio fa mampiasa soramadinika ny lohatenin'ny pejinao manan-tovana *.css sy *.js, ohatra {{ns:user}}:Foo/vector.css fa tsy {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Nohavaozina)',
 'note' => "'''Fanamarihana:'''",
-'previewnote' => "'''Topi-maso ihany ity hitanao ity, tsy mbola voatahiry ny fanovana nataonao!'''",
+'previewnote' => "'''Fantaro fa topi-maso fotsiny ity.'''
+Mbola tsy voatahiry ny fanovanao !",
+'continue-editing' => 'Tohizana ny fanovana',
 'previewconflict' => "
 Ity topi-maso ity no mifanaraka amin'ny lahatsoratra ao amin'ny faritra eo ambony,
 ary toy izao no ho fisehon'ny pejy raha misafidy ny hitahiry azy ianao.",
@@ -918,7 +928,8 @@ Raha io no tahirizinao, dia ho very ny fanovana ity pejy ity rehetra taorian'io
 Ny zava-tsoratanao eto dia vokatr'asa naverinao soratana na nodikainao tany amina loharano ao amin'ny vala sarababem-bahoaka na loharano malalaka hafa (Jereo $1 ho an'ny antsipirihany).
 
 '''Aza mampiasa tahirin-kevitra tsy nahazoan-dalana!'''",
-'longpageerror' => "'''Tsi-fetezana : Ny lanjan’ny lahatsoratrao dia $1 Ko, mihoatra ny $2 Ko, ilay fetra napetraka. Tsy afaka tahirizina ilay lahatsoratra.'''",
+'longpageerror' => "'''Hadisoana : Ny tahirin-tsoratra nalefanao dia manana halava {{PLURAL:$1|iray|$1}} kilooktety, izay lava kokoa nohon'ny fetra avo indridra izay natao ho {{PLURAL:$2|iray|$2}} kilooktety.'''
+Tsy afaka tahirizina ilay tahirin-tsoratra.",
 'readonlywarning' => "'''FAMPITANDREMANA: Nohidiana noho ny antony fikolokoloana aloha ny banky angona,
 koa tsy afaka mitahiry ny fanovana nataonao aloha ianao izao. Angamba tokony hanao Couper coller aloha
 ianao dia tehirizo anaty rakitra ny fanovanao mandra-paha.'''
@@ -956,6 +967,7 @@ Mety voafafa angamba izy.',
 'edit-no-change' => "Tsy norarahian'ny rindrankajy ny fanovanao satria tsy nanova ny lahatsoratra ianao.",
 'edit-already-exists' => 'Tsy afaka amboarina ilay pejy vaovao.
 Efa misy izy.',
+'defaultmessagetext' => 'Hafatra raha tsy misy',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Tandremo : Betsaka loatra ny fanantsoana ny tao parser.
@@ -970,6 +982,11 @@ Ao aorian'ny fivelarana, mety namoaka valy lava loatra angamba izy, ary tsy namp
 'parser-template-loop-warning' => 'endrika vono hita tao : [[$1]]',
 'parser-template-recursion-depth-warning' => "Fetran'ny halalin'ny fiantsoana endrika voahoatra ($1).",
 'language-converter-depth-warning' => "Mihoatra ny fetran-kalalin'ny mpamadika teny ($1)",
+'node-count-exceeded-category' => "Pejy izay ahitana fihoatran'ny isam-patotra (node)",
+'node-count-exceeded-warning' => 'Pejy manana isam-patotra mihoatra',
+'expansion-depth-exceeded-category' => 'Pejy manana halalim-panitarana mihoatra',
+'expansion-depth-exceeded-warning' => 'Pejy manana halalim-panitarana mihoatra',
+'parser-unstrip-loop-warning' => 'Nahitana tondro mifolaka tsy azo vahana',
 
 # "Undo" feature
 'undo-success' => 'Ho voafafa io fanovana io. Marino tsara ny fanovana eo ambany, ary tehirizo rehefa vita.',
@@ -1114,8 +1131,7 @@ Jereo ny laogy.",
 
 # Suppression log
 'suppressionlog' => 'tatitr’asa momban’ny famafana pejy',
-'suppressionlogtext' => "Ity ny lisitra ny famafàna sy ny fanakanana asitrika amin'ny mpandrindra.
-Hijery ny [[Special:BlockList|lisitra ny adiresy IP sy mpikambana voasakana]] ho an'ny lisitra ny voaraoka sy ny fanakanana mbola miasa.",
+'suppressionlogtext' => "Ity ny lisitry ny famafana ary ny sakana mikasika ny votoatiny asitrika amin'ny mpandrindra. Jereo ny [[Special:BlockList|lisitry ny sakana]] ho an'ny lisitry ny fandroahana ary ny sakana mbola mihatra amin'izao fotoana.",
 
 # History merging
 'mergehistory' => 'Atsonika ny tantara ny pejy',
@@ -1150,6 +1166,8 @@ $3 santiôna{{PLURAL:}} natsonika tamin'ny [[:$2]]",
 
 # Diffs
 'history-title' => "Tantara ny endrik'i « $1 »",
+'difference-title' => "$1 : Fahasamihafan'ny santiôna roa",
+'difference-title-multipage' => 'Fahasamihafan\'ny pejy "$1" ary "$2"',
 'difference-multipage' => "(Fahasamihafan'ny pejy)",
 'lineno' => 'Andalana $1:',
 'compareselectedversions' => 'Ampitahao ireo version voafidy',
@@ -1245,6 +1263,7 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'prefs-beta' => 'Fitaovana beta',
 'prefs-datetime' => 'Daty sy ora',
 'prefs-labs' => 'Fitaovana  « labs »',
+'prefs-user-pages' => 'Pejim-pikambana',
 'prefs-personal' => 'Mombamomba anao',
 'prefs-rc' => 'Vao niova',
 'prefs-watchlist' => 'Lisitry ny pejy arahana-maso',
@@ -1356,10 +1375,15 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'userrights-lookup-user' => 'Handrindra vondrom-pikambana',
 'userrights-user-editname' => 'Manomeza solonanarana:',
 'editusergroup' => "Hanova satan'ny mpikambana",
+'editinguser' => "Fanovana ny zon'ny mpikambana '''[[user:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Hanova vondrom-pikambana',
 'saveusergroups' => 'Tehirizo ny vondrom-pikambana',
 'userrights-groupsmember' => "Mpikambana amin'ny vondrona:",
 'userrights-groupsmember-auto' => "Mpikambana tsy dia voalazan'i :",
+'userrights-groups-help' => 'Azonao atao ny manova ny vondrona isian\'ity mpikambana ity.
+* Ny boaty voa-"check" dia midika fa ao amin\'io vondrona io ilay mpikambana.
+* Ny boaty tsy voa-"check" dia midika fa tsy ao amin\'io vondrona io ilay mpikambana.
+* Ny * dia fa tsy azonao esorina amin\'ilay vondrona nampianao/nesorinao ilay mpikambana.',
 'userrights-reason' => 'Antony :',
 'userrights-no-interwiki' => "Tsy manana alalana manova ny alalan'ny mpikambana eny amin'ny wiki hafa ianao.",
 'userrights-nodatabase' => 'Tsy eto akaiky na tsy misy ny banky angona « $1 ».',
@@ -1378,12 +1402,12 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'group-suppress' => 'Mpitondra',
 'group-all' => '(izy rehetra)',
 
-'group-user-member' => 'Mpikambana',
-'group-autoconfirmed-member' => 'Mpikambana voasoratra',
-'group-bot-member' => 'Mpikambana rôbô',
-'group-sysop-member' => 'Mpandrindra',
-'group-bureaucrat-member' => 'Borôkraty',
-'group-suppress-member' => 'Mpitondra',
+'group-user-member' => '{{GENDER:$1|mpikambana}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|Mpikambana voamarina ho azy}}',
+'group-bot-member' => '{{GENDER:$1|Mpikambana rôbô}}',
+'group-sysop-member' => '{{GENDER:$1|Mpandrindra}}',
+'group-bureaucrat-member' => '{{GENDER:$1|Borôkraty}}',
+'group-suppress-member' => '{{GENDER:$1|Mpitondra}}',
 
 'grouppage-user' => '{{ns:project}}:Mpikambana',
 'grouppage-autoconfirmed' => '{{ns:project}}:Mpikambana Voamafy',
@@ -1417,6 +1441,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'right-writeapi' => 'Mampiasa ny API fifanovana ny wiki',
 'right-delete' => 'Mamafa pejy',
 'right-bigdelete' => 'Mamafa pejy manana tantara be',
+'right-deletelogentry' => "Hamafa ary hamerina iditra manokana ao amin'ny laogy.",
 'right-deleterevision' => 'Mamafa ny version manokana-na pejy iray',
 'right-deletedhistory' => 'Mijery ny tantaram-pejy voafafa fa tsy lahatsorany',
 'right-deletedtext' => "Mijery ny lahatsoratra voafafa sy ny fampitahana anelanelan'ny santiôna voafafa",
@@ -1451,6 +1476,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'right-siteadmin' => 'Manidy sy manokatra ny banky angona',
 'right-override-export-depth' => "Mamoaka ny pejy miaraka amin'ny zana-pejy hatramin'ny ambaratonga fahadimy",
 'right-sendemail' => "Mandefa imailaka any amin'ny mpikambana hafa",
+'right-passwordreset' => 'Hijery ny imailaka famerenana ny tenimiafina',
 
 # User rights log
 'rightslog' => 'Tatitr’asa momban’ny fanovana satam-pikambana',
@@ -1484,6 +1510,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'action-suppressionlog' => 'hijery io tao tsy sarababem-bahoaka',
 'action-block' => 'manakana am-panoratana ny mpikambana iray',
 'action-protect' => "manova ny fanovàn'ity pejy ity",
+'action-rollback' => "Manafoana haingana ny fanovan'ny mpikambana farany nanova pejy iray",
 'action-import' => 'mampiditra ity pejy ity avy amina wiki hafa',
 'action-importupload' => 'hampiditra ity pejy ity avy amina rakitra nampidirina',
 'action-patrol' => 'marihana ho hita ity version ity',
@@ -1493,6 +1520,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'action-userrights' => "hanova ny fahefan'ny mpikambana rehetra",
 'action-userrights-interwiki' => "hanova ny fahefan'ny mpikambana any amin'ny wiki hafa",
 'action-siteadmin' => 'Manidy sy manokatra ny banky angona',
+'action-sendemail' => 'handefa imailaka',
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|fanovana|fanovana}} $1',
@@ -1524,9 +1552,11 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|mpikambana|mpikambana}} manara-maso]',
 'rc_categories' => 'Ferana amin\'ireto sokajy ireto ihany (saraho amin\'ny "|")',
 'rc_categories_any' => 'Tsy misy fetrany',
+'rc-change-size-new' => "$1{{PLURAL:}} oktety taorian'ny fanovana",
 'newsectionsummary' => '/* $1 */ fizarana vaovao',
 'rc-enhanced-expand' => 'Jereo ny detail (mila JavaScript)',
 'rc-enhanced-hide' => 'Asitriho ny adidiny sy ny antsipiriany',
+'rc-old-title' => 'noforonina tamin\'ilay lohateny "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Novaina',
@@ -1571,6 +1601,7 @@ Raha hanisy sary ao anaty pejy, dia mampiasà rohy toy ny iray amin'ireto
 'ignorewarnings' => 'Aza mihaino fampitandremana',
 'minlength1' => 'Ny anaran-drakitra dia tokony manana litera iray fara-fahakeliny',
 'illegalfilename' => 'Misy litera tsy mety amin\'ny lohateny ny anaran\'ilay rakita "$1". Azafady soloy ny anaran\'ny rakitra dia andramo alefa indray.',
+'filename-toolong' => 'Tsy afaka mihoatra ny 240 oktety ny anaran-drakitra.',
 'badfilename' => 'Novana ho "$1" ny anaran\'ny rakitra.',
 'filetype-mime-mismatch' => "Ny karazan-drakitra dia tsy miady amin'ny karazana MIME.",
 'filetype-badmime' => 'Ny karazan-drakitra MIME « $1 » dia tsy afaka ampidirina.',
@@ -1668,6 +1699,41 @@ Raha mbola misy foana ilay  olana, manorata any amin'ny [[Special:ListUsers/syso
 'upload-unknown-size' => 'tsy fantatra ny habe',
 'upload-http-error' => 'Nisy tsy fetezana HTTP nitranga : $1',
 
+# File backend
+'backend-fail-stream' => 'Tsy afaka mamaky ilay rakitra $1.',
+'backend-fail-backup' => 'Tsy afaka mitahiry ilay rakitra $1.',
+'backend-fail-hashes' => "Tsy azo ilay hash an-drakitra ho an'ny fampitahana.",
+'backend-fail-delete' => 'Tsy afaka mamafa ilay rakitra $1.',
+'backend-fail-alreadyexists' => 'Efa misy ilay rakitra $1.',
+'backend-fail-store' => 'Tsy afaka mitahiry ilay rakitra $1 anaty $2.',
+'backend-fail-copy' => 'Tsy afaka mandika ilay rakitra $1 anaty $2.',
+'backend-fail-move' => "Tsy afaka manova ny toeran'ilay raktira avy amin'i $1 mankany amin'i $2.",
+'backend-fail-opentemp' => 'Tsy afaka manokatra ilay rakitra miserana.',
+'backend-fail-writetemp' => "Tsy afaka manoratra ao anatin'ilay rakitra miserana.",
+'backend-fail-closetemp' => 'Tsy afaka manidy ilay rakitra miserana.',
+'backend-fail-read' => 'Tsy afaka mamaky ilay rakitra $1.',
+'backend-fail-create' => "Tsy afaka manoratra anatin'ilay rakitra $1.",
+'backend-fail-readonly' => 'Amin\'izao fotoana dia famakiana ihany ny fitahirizana terminal an\'i "$1". "\'\'$2\'\'" no antony nomena',
+'backend-fail-connect' => 'Tsy afaka mifandray amin\'ny terminal fitahirizana "$1".',
+'backend-fail-internal' => 'Hadisoana tsy fantatra tao anatin\'ny terminal fitahirizana "$1".',
+'backend-fail-usable' => "Tsy afaka manoratra ilay rakitra $1 noho ny tsifiampian'ny zo na noho ny petra-drakitra tsy misy.",
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Tsy afaka miantso ilay banky angona laogy ho an\'ny terminal fitahirizana "$1".',
+'filejournal-fail-dbquery' => 'Tsy afaka manavao ny banky angona laogy ho an\'ilay terminal fitahirizana "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Tsy afaka manalahidy an\'i "$1" ; tsy voahidy ilay izy.',
+'lockmanager-fail-closelock' => 'Tsy afaka manidy ilay rakitra fanidiana ho an\'i "$1".',
+'lockmanager-fail-deletelock' => 'Tsy afaka manidy ilay rakitra fanidiana ho an\'i "$1"',
+'lockmanager-fail-acquirelock' => 'Tsy afaka maka ilay rakitra fanidiana ho an\'i "$1"',
+'lockmanager-fail-openlock' => 'Tsy afaka manokatra ilay rakitra fanidiana ho an\'i "$1".',
+'lockmanager-fail-releaselock' => 'Tsy afaka mamela ilay fanidiana ho an\'i "$1"',
+'lockmanager-fail-db-bucket' => "Tsy ampy ny isan'ireo banky angona fanidiana voaantso anatin'ny baketra (godet) $1.",
+'lockmanager-fail-db-release' => "Tsy afaka mamela ny fanidiana eo amin'ny banky angona $1.",
+'lockmanager-fail-svr-acquire' => "Tsy afaka maka ny fanidiana eo amin'ny lohamilina $1.",
+'lockmanager-fail-svr-release' => "Tsy afaka mamela ny fanidiana eo amin'ny banky angona $1.",
+
 # ZipDirectoryReader
 'zip-file-open-error' => "Nitrangana hadisoana teo am-panokafana ilay rakitra ZIP ho an'ny fanamarinana.",
 'zip-wrong-format' => "Tsy ZIP ny karazan-drakitr'ilay rakitra voatonona.",
@@ -1697,6 +1763,7 @@ Ny petra-drakitra misy rakitra ihany no azo aleha.",
 'img-auth-public' => "Ny asa ataon'i img_auth.php dia maneho ny rakitry ny wiki an'olona.
 ity wiki ity dia no-regler-na ho sarababem-bahoaka.",
 'img-auth-noread' => "Tsy manana ny alalam-pamakiana ilay mpikambana eo amin'ny « $1 ».",
+'img-auth-bad-query-string' => 'Manana tohintsora-kataka tsy manara-penitra ilay URL.',
 
 # HTTP errors
 'http-invalid-url' => 'URL diso : $1',
@@ -1794,6 +1861,7 @@ Aseho eo ambany ny [$2 famisavisana ilay rakitra].",
 ** Rakitra efa misy',
 'filedelete-edit-reasonlist' => 'Hanova ny antom-pamafàna',
 'filedelete-maintenance' => 'Ny famafana sy ny famerenan-drakitra dia tsy alefa mandritra ny fikojakojana.',
+'filedelete-maintenance-title' => 'Tsy afaka mamafa ilay rakitra',
 
 # MIME search
 'mimesearch' => 'Fikarohana MIME',
@@ -1893,6 +1961,7 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny
 'mostimages' => "Misy firohizana betsaka amin'ny sary",
 'mostrevisions' => 'Lahatsoratra niova im-betsaka indrindra',
 'prefixindex' => "Pejy manomboka amin'ny...",
+'prefixindex-namespace' => 'Ny pejy rehetra mitondra ny tovona (anaran-tsehatra $1)',
 'shortpages' => 'Pejy fohy',
 'longpages' => 'Pejy lavabe',
 'deadendpages' => 'Pejy tsy mirohy',
@@ -2214,6 +2283,7 @@ Ity ny réglage ny pejy '''$1''' :",
 'protect-level-sysop' => 'Sysops ihany',
 'protect-summary-cascade' => 'Fiarovana an-driana',
 'protect-expiring' => "Miala amin'ny $1",
+'protect-expiring-local' => 'mitsahatra ny $1',
 'protect-expiry-indefinite' => 'tsiefa',
 'protect-cascade' => "Miaro ny pejy ao anatin'ity pejy ity (cascading protection)",
 'protect-cantedit' => "Tsy afaka manolo ny sokaji-piarovan'ity pejy ity ianao satria tsy manana ny sata ilaina",
@@ -2279,6 +2349,7 @@ efa nisy mpikambana iray hafa angamba no namerina ilay pejy.',
 
 Vakio ny [[Special:Log/delete|laogim-pamafana]] ho an'ny lisitry ny famafana sy ny famerenana pejy.",
 'undelete-header' => 'Jereo ny [[Special:Log/delete|laogim-pamafana]] rehefa hanalisitra ny pejy vao voafafa.',
+'undelete-search-title' => 'Hitady pejy voafafa',
 'undelete-search-box' => 'Hitady pejy voafafa',
 'undelete-search-prefix' => "Asehoy ny pejy manomboka amin'ny :",
 'undelete-search-submit' => 'Fikarohana',
@@ -2288,6 +2359,7 @@ Vakio ny [[Special:Log/delete|laogim-pamafana]] ho an'ny lisitry ny famafana sy
 'undelete-cleanup-error' => 'Tsy fetezana teo am-pamafana ilay rakitra an-tahiry tsy miasa « $1 ».',
 'undelete-missing-filearchive' => "Tsy afaka atao ny mamerina ilay rakitra tahiry miaraka amin'ny ID $1 satria tsy ao amin'ny banky angona izy io.
 Mety efa naverina angamba izy io.",
+'undelete-error' => 'Pejin-kadisoam-panafoanana',
 'undelete-error-short' => 'Tsi-fetezana teo am-pamerenana ilay rakitra : $1',
 'undelete-error-long' => 'Nisy tsi-fetezana nitranga teo am-pamerenana ilay rakitra :
 
@@ -2298,6 +2370,7 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Anaran-tsehatra :',
 'invert' => 'Ampifamadiho ny safidy',
+'namespace_association' => 'Anaran-tsehatra nampiarahana',
 'blanknamespace' => '(fotony)',
 
 # Contributions
@@ -2348,6 +2421,7 @@ Aseho eo ambany ny iditra farany ao amin'ny laogim-panakanana  mba hampahalala :
 'whatlinkshere-filters' => 'sivana',
 
 # Block/unblock
+'autoblockid' => 'Fanakanana mandeha ho azy #$1',
 'block' => 'Hanakana ilay mpikambana',
 'unblock' => "Hanala ny sakan'ilay mpikambana",
 'blockip' => 'Sakano ny mpikambana',
@@ -2421,6 +2495,7 @@ mihatra amin'ny adiresy IP na solonanarana iray.",
 'unblocklink' => 'esory ny sakana',
 'change-blocklink' => 'ovay ny fanakanana',
 'contribslink' => "fandraisan'anjara",
+'emaillink' => 'Handefa imailaka',
 'autoblocker' => "Voasakana satria ny adiresy IP-nao dia vao avy nampiasain'i \"[[User:\$1|\$1]]\". Ny anton'ny fanakanana dia: \"'''\$2'''\"",
 'blocklogpage' => "Tantaran'ny sakana",
 'blocklog-showlog' => 'Efa voasakana ity mpikambana ity taloha.
@@ -2447,6 +2522,7 @@ ny lisitry ny fisakanana sy fandrarana na tanteraka misy ankehitriny.",
 'ipb_already_blocked' => 'Efa voasakana « $1 »',
 'ipb-needreblock' => 'Efa voasakana i $1. Tianao ovaina ve ny parametatra ?',
 'ipb-otherblocks-header' => '{{PLURAL:$1}}sakana hafa',
+'unblock-hideuser' => "Tsy azonao atao ny manala ny sakan'ity mpikambana ity, satria nafenina ny anaram-pikambany.",
 'ipb_cant_unblock' => 'Tsy fetezana : Marik ny fanakanana $1 tsy hita.
 Mety efa natao angamba ny fanalana sakana.',
 'ipb_blocked_as_range' => "Hadisoana : tsy nosakanana manokana ny adiresy IP $1 ka noho izany tsy afaka alàna ny sakany.
@@ -2583,6 +2659,7 @@ ary safidio na ny votoatiny ankehitriny ihany no ilainao na miaraka amin'ny endr
 miampy fampahalalana momba ny fanovana farany fotsiny ve sa miaraka amin'ny tantaran'ny fanovana rehetra.
 
 Etsy amin'ny toerana farany dia afaka mampiasa rohy ihany koa ianao, ohatra [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] ho an'ny [[{{MediaWiki:Mainpage}}]].",
+'exportall' => 'Hamoaka ny pejy rehetra',
 'exportcuronly' => "Ny votoatiny ankehitriny ihany no haondrana fa tsy miaraka amin'ny tantarany iray manontolo",
 'exportnohistory' => "
 ----
index 97f612f..2f81b3d 100644 (file)
@@ -1375,7 +1375,7 @@ $1",
 'showingresultsheader' => "{{PLURAL:$5|Резултат '''$1''' од '''$3'''|Резултати '''$1 - $2''' од '''$3'''}} за '''$4'''",
 'nonefound' => "'''Напомена''': Само некои именски простори се пребаруваат по основно.
 Обидете се со додавање на префиксот ''all:'' за да пребарувате низ сите содржини (вклучувајќи страници за разговор, шаблони, итн) или користете го бараниот именски простор како префикс.",
-'search-nonefound' => 'Нема резултати кои го задоволуваат бараното.',
+'search-nonefound' => 'Нема резултати што одговараат на бараното.',
 'powersearch' => 'Напредно пребарување',
 'powersearch-legend' => 'Напредно пребарување',
 'powersearch-ns' => 'Пребарај во следниве именски простори:',
@@ -1592,6 +1592,7 @@ $1",
 'right-writeapi' => 'Можност за пишување на API',
 'right-delete' => 'Бришење страници',
 'right-bigdelete' => 'Бришење страници со долга историја',
+'right-deletelogentry' => 'Бришење и враќање на конкретни ставки во дневник',
 'right-deleterevision' => 'Бришење и враќање на конкретни ревизии на страници',
 'right-deletedhistory' => 'Прегледување на записи во историја на бришења, без придружниот текст',
 'right-deletedtext' => 'Прегледување на избришан текст и промени помеѓу избришани ревизии',
@@ -1911,6 +1912,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Не можев да го ослободам катанецот за „$1“.',
 'lockmanager-fail-db-bucket' => 'Не можев да контактирам доволно податотеки-катанци во садот $1',
 'lockmanager-fail-db-release' => 'Не можев да ги ослободам катанците на базата $1',
+'lockmanager-fail-svr-acquire' => 'Не можев да добијам катанци за опслужувачот $1',
 'lockmanager-fail-svr-release' => 'Не можев да ги ослободам катанците на опслужувачот $1',
 
 # ZipDirectoryReader
@@ -2461,6 +2463,8 @@ $UNWATCHURL
 'rollback' => 'Отповикај промени',
 'rollback_short' => 'Отповикај',
 'rollbacklink' => 'отповикај',
+'rollbacklinkcount' => 'отповикај $1 {{PLURAL:$1|уредување|уредувања}}',
+'rollbacklinkcount-morethan' => 'отповикај повеќе од $1 {{PLURAL:$1|уредување|уредувања}}',
 'rollbackfailed' => 'Отповикувањето не успеа',
 'cantrollback' => 'Уредувањето не може да се отповика.
 Последниот уредник е воедно и единствениот автор на страницата.',
@@ -2966,7 +2970,7 @@ $1',
 'import-interwiki-templates' => 'Вклучи ги сите шаблони',
 'import-interwiki-submit' => 'Увези',
 'import-interwiki-namespace' => 'Целен именски простор:',
-'import-upload-filename' => 'Ð\98ме Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82екаÑ\82а:',
+'import-upload-filename' => 'Ð\9fодаÑ\82оÑ\82ека:',
 'import-comment' => 'Коментар:',
 'importtext' => 'Извезете ја податотеката од изворното вики користејќи ја [[Special:Export|алатката за извоз]].
 Зачувајте ја на вашиот сметач и подигнете ја овде.',
@@ -4035,7 +4039,7 @@ $5
 'fileduplicatesearch' => 'Барање на дуплирани податотеки',
 'fileduplicatesearch-summary' => 'Пребарување на дуплирани податотеки по тарабни вредности.',
 'fileduplicatesearch-legend' => 'Барање на дупликат',
-'fileduplicatesearch-filename' => 'Ð\98ме Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82екаÑ\82а:',
+'fileduplicatesearch-filename' => 'Ð\9fодаÑ\82оÑ\82ека:',
 'fileduplicatesearch-submit' => 'Барај',
 'fileduplicatesearch-info' => '$1 × $2 пиксели<br />Големина на податотеката: $3<br />MIME-тип: $4',
 'fileduplicatesearch-result-1' => 'Податотеката „$1“ нема истоветни дупликати.',
@@ -4223,6 +4227,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
 'duration-millennia' => '$1 {{PLURAL:$1|милениум|милениуми}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Не можев да добијам катанци за опслужувачот $1',
 );
index eb824ff..f68c324 100644 (file)
@@ -667,7 +667,7 @@ $1',
 ദയവായി താളിന്റെ യു.ആർ.എൽ സഹിതം ഒരു [[Special:ListUsers/sysop|കാര്യനിർവാഹകനെ]] ഇത് അറിയിക്കുക.',
 'missingarticle-rev' => '(മാറ്റം#: $1)',
 'missingarticle-diff' => '(വ്യത്യാസം: $1, $2)',
-'readonly_lag' => 'വിവരശേഖരം സ്വയം ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു അതേസമയം കീഴ്-വിവരശേഖര സെർവറുകൾ മാസ്റ്റർ വരെ പിടിച്ചിരിക്കുന്നു',
+'readonly_lag' => ' കീഴ്-വിവരശേഖര സെർവറുകൾ മാസ്റ്റർ വരെ എത്തിയതിനാൽ വിവരശേഖരം സ്വയം ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു',
 'internalerror' => 'ആന്തരിക പിഴവ്',
 'internalerror_info' => 'ആന്തരിക പിഴവ്: $1',
 'fileappenderrorread' => 'കൂട്ടിച്ചേർക്കുന്ന സമയം "$1" വായിച്ചെടുക്കാൻ കഴിഞ്ഞില്ല.',
@@ -691,7 +691,7 @@ $1',
 'perfcached' => 'താഴെ കൊടുത്തിരിക്കുന്ന വിവരം ശേഖരിച്ചു വെച്ചിരിക്കുന്നതാണ്, അതുകൊണ്ട് ചിലപ്പോൾ പുതിയതായിരിക്കണമെന്നില്ല. പരമാവധി {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.',
 'perfcachedts' => 'താഴെയുള്ള വിവരങ്ങൾ ശേഖരിച്ച് വെച്ചവയിൽ പെടുന്നു, അവസാനം പുതുക്കിയത് $1-നു ആണ്‌. പരമാവധി {{PLURAL:$4|ഒരു ഫലം|$4 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.',
 'querypage-no-updates' => 'ഈ താളിന്റെ പുതുക്കൽ തൽക്കാലം നടക്കുന്നില്ല. ഇവിടുള്ള വിവരങ്ങൾ ഏറ്റവും പുതിയതാവണമെന്നില്ല.',
-'wrong_wfQuery_params' => 'wfQuery()à´\8eà´¨àµ\8dനതിലàµ\87à´\95àµ\8dà´\95àµ\8d à´¤àµ\86à´±àµ\8dറായ à´ªà´°à´¾à´®àµ\80à´±àµ\8dററàµ\81à´\95ൾ<br />
+'wrong_wfQuery_params' => 'wfQuery()à´\8eà´¨àµ\8dനതിലàµ\87à´\95àµ\8dà´\95àµ\8d à´¤àµ\86à´±àµ\8dറായ à´\9aà´°à´\99àµ\8dà´\99ൾ<br />
 നിർദ്ദേശം: $1<br />
 അന്വേഷണം: $2',
 'viewsource' => 'മൂലരൂപം കാണുക',
@@ -703,7 +703,7 @@ $1',
 'viewyourtext' => "താങ്കൾക്ക് ഈ താളിലെ '''താങ്കളുടെ തിരുത്തലുകളുടെ''' മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
 'protectedinterface' => 'ഈ താൾ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു.',
 'editinginterface' => "'''മുന്നറിയിപ്പ്:''' സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്. ഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താവ് വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം. മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പരിഭാഷകൾക്ക് മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ സംരംഭം ആയ [//translatewiki.net/wiki/Main_Page?setlang=ml ബീറ്റാവിക്കി] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
-'sqlhidden' => '(SQL query മറച്ചിരിക്കുന്നു)',
+'sqlhidden' => '(എസ്.ക്യു.എൽ. ക്വറി മറച്ചിരിക്കുന്നു)',
 'cascadeprotected' => 'നിർഝരിത (cascading) സൗകര്യം ഉപയോഗിച്ച് തിരുത്തൽ നടത്തുന്നതിനു സം‌രക്ഷണം ഏർപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|താഴെ കൊടുത്തിട്ടുള്ള താളിന്റെ|താഴെ കൊടുത്തിട്ടുള്ള താളുകളുടെ}} ഭാഗമാണ്‌ ഈ താൾ. അതിനാൽ ഈ താൾ തിരുത്തുവാൻ സാധിക്കില്ല:
 $2',
 'namespaceprotected' => "'''$1''' നാമമേഖലയിലുള്ള താളുകൾ തിരുത്താൻ താങ്കൾക്ക് അനുവാദമില്ല.",
@@ -1113,7 +1113,7 @@ $3 അതിനു കാണിച്ചിരിക്കുന്ന കാര
 'last' => 'മുമ്പ്',
 'page_first' => 'ആദ്യ',
 'page_last' => 'അവസാന',
-'histlegend' => "വ്യത്യാസങ്ങൾ ഒത്തുനോക്കാൻ: ഒത്തുനോക്കേണ്ട പതിപ്പുകൾക്കൊപ്പമുള്ള റേഡിയോ ബട്ടൺ തിരഞ്ഞെടുത്ത് ''\"തിരഞ്ഞെടുത്ത പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം കാണുക\"'' എന്ന ബട്ടൺ ഞെക്കുകയോ ENTER കീ അമർത്തുകയോ ചെയ്യുക.<br />
+'histlegend' => "വ്യത്യാസങ്ങൾ ഒത്തുനോക്കാൻ: ഒത്തുനോക്കേണ്ട പതിപ്പുകൾക്കൊപ്പമുള്ള റേഡിയോ ബട്ടൺ തിരഞ്ഞെടുത്ത് ''\"തിരഞ്ഞെടുത്ത പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം കാണുക\"'' എന്ന ബട്ടൺ ഞെക്കുകയോ ''എന്റർ'' കീ അമർത്തുകയോ ചെയ്യുക.<br />
 
 സൂചന: (ഇപ്പോൾ) = നിലവിലുള്ള പതിപ്പുമായുള്ള വ്യത്യാസം, (മുമ്പ്) = തൊട്ടുമുൻപത്തെ പതിപ്പുമായുള്ള വ്യത്യാസം, (ചെ.) = ചെറിയ തിരുത്തൽ.",
 'history-fieldset-title' => 'നാൾവഴി പരിശോധന',
@@ -2044,7 +2044,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 
 'doubleredirects' => 'ഇരട്ട തിരിച്ചുവിടലുകൾ',
 'doubleredirectstext' => 'ഈ താളിൽ ഒരു തിരിച്ചുവിടലിൽ നിന്നും മറ്റു തിരിച്ചുവിടൽ താളുകളിലേയ്ക്ക് പോകുന്ന താളുകൾ കൊടുത്തിരിക്കുന്നു. ഓരോ വരിയിലും ഒന്നാമത്തേയും രണ്ടാമത്തേയും തിരിച്ചുവിടൽ താളിലേക്കുള്ള കണ്ണികളും, രണ്ടാമത്തെ തിരിച്ചുവിടൽ താളിൽ നിന്നു ശരിയായ ലക്ഷ്യതാളിലേക്കുള്ള കണ്ണികളും ഉൾക്കൊള്ളുന്നു.
-<del>à´µàµ\86à´\9fàµ\8dà´\9fà´¿à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനവ</del> à´¶à´°à´¿à´¯à´¾à´\95àµ\8dà´\95àµ\87à´£àµ\8dà´\9fà´¤àµ\81à´£àµ\8dà´\9f്.',
+<del>à´µàµ\86à´\9fàµ\8dà´\9fà´¿à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനവ</del> à´¶à´°à´¿à´¯à´¾à´\95àµ\8dà´\95ിയവയാണ്.',
 'double-redirect-fixed-move' => '[[$1]] മാറ്റിയിരിക്കുന്നു.
 ഇത് ഇപ്പോൾ [[$2]] എന്നതിലേയ്ക്ക് തിരിച്ചുവിടപ്പെട്ടിരിക്കുന്നു.',
 'double-redirect-fixed-maintenance' => '[[$1]] എന്ന താളിൽ നിന്ന് [[$2]] എന്ന താളിലേയ്ക്കുള്ള ഇരട്ട തിരിച്ചുവിടൽ ശരിയാക്കുന്നു.',
index 614cd34..88713b2 100644 (file)
@@ -49,7 +49,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Сүүлийн өөрчлөлтүүдэд манагдсан засваруудыг нуух',
 'tog-newpageshidepatrolled' => 'Шинэ хуудсуудын жагсаалтаас манагдаж буй хуудсуудыг нуух',
 'tog-extendwatchlist' => 'Хянах жагсаалтаа сүүлийн л засваруудыг бус бүх засварыг харуулахаар томруулах',
-'tog-usenewrc' => 'Сүүлийн өөрчлөлтүүдийн сайжруулсан хэлбэрийг ашиглах (ЖаваСкрипт хэрэглэгдэнэ)',
+'tog-usenewrc' => 'Сүүлийн үед хуудсанд хийсэн Грүп өөрчлөлтүүд (ЖаваСкрипт хэрэглэгдэнэ)',
 'tog-numberheadings' => 'Гарчигуудыг автоматаар дэс дугаарлах',
 'tog-showtoolbar' => 'Засварлах түүлбарыг үзүүлэх (ЖаваСкрипт)',
 'tog-editondblclick' => 'Хоёр удаа дараад хуудсыг засварлах (ЖаваСкрипт)',
index 3f0e6c4..9eecbf8 100644 (file)
@@ -206,17 +206,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Bolehkan penyuntingan bahagian dengan mengklik kanan pada tajuk bahagian (JavaScript)',
 'tog-showtoc' => 'Tunjukkan isi kandungan (bagi rencana yang melebihi 3 tajuk)',
 'tog-rememberpassword' => 'Ingat log masuk saya di pelayar ini (tidak melebihi $1 {{PLURAL:$1|hari|hari}})',
-'tog-watchcreations' => 'Tambahkan laman yang saya cipta ke dalam senarai pantau',
-'tog-watchdefault' => 'Tambahkan laman yang saya sunting ke dalam senarai pantau',
-'tog-watchmoves' => 'Tambahkan laman yang saya pindahkan ke dalam senarai pantau',
-'tog-watchdeletion' => 'Tambahkan laman yang saya hapuskan ke dalam senarai pantau',
+'tog-watchcreations' => 'Tambahkan halaman-halaman yang saya buat dan fail-fail yang saya muat naik ke dalam senarai pantau',
+'tog-watchdefault' => 'Tambahkan halaman-halaman dan fail-fail yang saya sunting ke dalam senarai pantau',
+'tog-watchmoves' => 'Tambahkan halaman-halaman dan fail-fail yang saya pindahkan ke dalam senarai pantau',
+'tog-watchdeletion' => 'Tambahkan halaman-halaman dan fail-fail yang saya hapuskan ke dalam senarai pantau',
 'tog-minordefault' => 'Tandakan semua suntingan sebagai kecil secara asali',
 'tog-previewontop' => 'Tunjukkan pralihat di atas kotak sunting',
 'tog-previewonfirst' => 'Tunjukkan pralihat pada suntingan pertama',
 'tog-nocache' => 'Lumpuhkan pengagregatan laman',
-'tog-enotifwatchlistpages' => 'E-melkan saya apabila berlaku perubahan pada laman yang dipantau',
+'tog-enotifwatchlistpages' => 'E-mel kepada saya tentang perubahan pada halaman-halaman dan fail-fail dalam senarai pantau saya',
 'tog-enotifusertalkpages' => 'E-melkan saya apabila berlaku perubahan pada laman perbincangan saya',
-'tog-enotifminoredits' => 'Juga e-melkan saya apabila berlaku penyuntingan kecil',
+'tog-enotifminoredits' => 'Juga e-mel kepada saya tentang suntingan kecil pada halaman-halaman dan fail-fail',
 'tog-enotifrevealaddr' => 'Serlahkan alamat e-mel saya dalam e-mel pemberitahuan',
 'tog-shownumberswatching' => 'Tunjukkan bilangan pemantau',
 'tog-oldsig' => 'Tanda tangan yang sedia ada:',
@@ -1421,6 +1421,7 @@ Tindakan ini tidak boleh dibatalkan.',
 'right-writeapi' => 'Menggunakan API tulis',
 'right-delete' => 'Menghapuskan laman',
 'right-bigdelete' => 'Menghapuskan laman bersejarah',
+'right-deletelogentry' => 'Memadamkan dan memulihkan entri log tertentu',
 'right-deleterevision' => 'Menghapuskan dan memulihkan semula mana-mana semakan bagi sesebuah laman',
 'right-deletedhistory' => 'Melihat senarai entri sejarah yang telah dihapuskan, tetapi tanpa teks yang berkaitan',
 'right-deletedtext' => 'Melihat teks yang telah dihapuskan dan perubahan antara semakan-semakan yang telah dihapuskan',
@@ -1728,6 +1729,7 @@ Sila hubungi [[Special:ListUsers/sysop|pentadbir sistem]].',
 'lockmanager-fail-releaselock' => 'Kunci untuk "$1" tidak dapat dikeluarkan.',
 'lockmanager-fail-db-bucket' => 'Di baldi $1 tidak dapat dihubungi pangkalan data selak yang secukupnya.',
 'lockmanager-fail-db-release' => 'Selak-selak tidak dapat dikeluarkan di pangkalan data $1.',
+'lockmanager-fail-svr-acquire' => 'Selak-selak tidak dapat diperoleh di pelayan $1.',
 'lockmanager-fail-svr-release' => 'Selak-selak tidak dapat dikeluarkan di pelayan $1.',
 
 # ZipDirectoryReader
@@ -2273,6 +2275,8 @@ Sila lihat $2 untuk rekod penghapusan terkini.',
 'rollback' => 'Undurkan suntingan.',
 'rollback_short' => 'Undur',
 'rollbacklink' => 'undur',
+'rollbacklinkcount' => 'mengundurkan $1 {{PLURAL:$1|suntingan}}',
+'rollbacklinkcount-morethan' => 'mengundurkan lebih daripada $1 {{PLURAL:$1|suntingan}}',
 'rollbackfailed' => 'Pengunduran gagal',
 'cantrollback' => 'Suntingan tersebut tidak dapat dibalikkan: penyumbang terakhir adalah satu-satunya pengarang bagi rencana ini.',
 'alreadyrolled' => 'Suntingan terakhir bagi [[:$1]] oleh [[User:$2|$2]] ([[User talk:$2|Perbualan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tidak dapat dibalikkan; terdapat pengguna lain yang telah menyunting atau membalikkan laman itu.
@@ -3847,6 +3851,4 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'duration-centuries' => '$1 abad',
 'duration-millennia' => '$1 alaf',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Selak-selak tidak dapat diperoleh di pelayan $1.',
 );
index 8c479ca..a1e2afa 100644 (file)
@@ -948,6 +948,7 @@ Jekk jogħġbok, erġa' pprova. Jekk xorta tibqa' ma taħdimx, ipprova [[Special
 Din il-modifika ma ġietx aċċettata sabiex ma jkunx hemm żballji fit-test tal-paġna. Dan xi kultant jiġri minħabba li qiegħed tuża servizz difettuż anonimu li huwa bbażat fuq il-web ta' prokura.'''",
 'edit_form_incomplete' => "'''Ċerti parti tal-formola tal-modifika ma laħqux is-server; iċċekkja jekk il-modifiki tiegħek humiex intatti u erġa' pprova.'''",
 'editing' => "Modifika ta' $1",
+'creating' => 'Qiegħed toħloq $1',
 'editingsection' => "Modifika ta' $1 (sezzjoni)",
 'editingcomment' => 'Qed jiġi editjat $1 (sezzjoni ġdida)',
 'editconflict' => "Kunflitt t'editjar: $1",
index 36a7bfe..9b2faae 100644 (file)
  * @author EivindJ
  * @author Event
  * @author Finnrind
+ * @author Geitost
  * @author Guaca
  * @author H92
  * @author Haakon K
  * @author Harald Khan
+ * @author Jeblad
  * @author Jóna Þórunn
  * @author Kph
  * @author Kph-no
@@ -318,7 +320,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Skjul patruljerte redigeringer i siste endringer',
 'tog-newpageshidepatrolled' => 'Skjul patruljerte sider fra listen over nye sider',
 'tog-extendwatchlist' => 'Utvid overvåkningslisten til å vise alle endringer, ikke bare de siste',
-'tog-usenewrc' => 'Bruk forbedret siste endringer (krever JavaScript)',
+'tog-usenewrc' => 'Grupper endringer i siste endringer og overvåkingslistte (krever JavaScript)',
 'tog-numberheadings' => 'Autonummerer overskrifter',
 'tog-showtoolbar' => 'Vis verktøylinje (krever JavaScript)',
 'tog-editondblclick' => 'Rediger sider ved å dobbeltklikke (krever JavaScript)',
@@ -326,17 +328,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift (JavaScript)',
 'tog-showtoc' => 'Vis innholdsfortegnelse (for sider med flere enn tre avsnitt)',
 'tog-rememberpassword' => 'Husk meg i denne nettleseren (i høyst $1 {{PLURAL:$1|dag|dager}})',
-'tog-watchcreations' => 'Overvåk sider jeg oppretter',
-'tog-watchdefault' => 'Overvåk alle sider jeg redigerer',
-'tog-watchmoves' => 'Overvåk sider jeg flytter',
-'tog-watchdeletion' => 'Overvåk sider jeg sletter',
+'tog-watchcreations' => 'Legg til sider jeg oppretter og filer jeg laster opp i min overvåkingsliste',
+'tog-watchdefault' => 'Legg til sider og filer jeg endrer på i min overvåkingsliste',
+'tog-watchmoves' => 'Legg til sider og filer jeg flytter til min overvåkingsliste',
+'tog-watchdeletion' => 'Legg til sider og filer jeg sletter i min overvåkingsliste',
 'tog-minordefault' => 'Merk i utgangspunktet alle redigeringer som mindre',
-'tog-previewontop' => 'Vis forhåndsvisningen ovenfor redigeringsboksen',
+'tog-previewontop' => 'Vis forhåndsvisningen over redigeringsboksen',
 'tog-previewonfirst' => 'Vis forhåndsvisning når du begynner å redigere',
 'tog-nocache' => 'Deaktiver nettlesermellomlagring av sider («caching»)',
-'tog-enotifwatchlistpages' => 'Send meg en e-post når sider på overvåkningslisten min blir endret',
+'tog-enotifwatchlistpages' => 'Send meg en e-post når sider og filer på overvåkningslisten min blir endret',
 'tog-enotifusertalkpages' => 'Send meg en e-post når brukerdiskusjonssiden min endres',
-'tog-enotifminoredits' => 'Send meg e-post også ved mindre endringer',
+'tog-enotifminoredits' => 'Send meg e-post også ved mindre endringer av sider og filer',
 'tog-enotifrevealaddr' => 'Vis min e-postadresse i utgående meldinger',
 'tog-shownumberswatching' => 'Vis antall brukere som overvåker',
 'tog-oldsig' => 'Nåværende signatur:',
@@ -668,6 +670,8 @@ Vennligst rapporter dette til en [[Special:ListUsers/sysop|administrator]], oppg
 'cannotdelete' => 'Siden eller fila «$1» kunne ikke slettes.
 Den kan ha blitt slettet av noen andre.',
 'cannotdelete-title' => 'Kan ikke slette siden «$1»',
+'delete-hook-aborted' => 'Sletting avbrutt av en funksjon.
+Den ga ingen forklaring.',
 'badtitle' => 'Ugyldig tittel',
 'badtitletext' => 'Den ønskede tittelen var ugyldig, tom eller feilaktig lenket fra en annen wiki.
 Den inneholder kanskje ett eller flere tegn som ikke kan brukes i titler.',
@@ -702,6 +706,8 @@ Den angitte grunnen er «''$2''».",
 Administrators nærmere begrunnelse: «$3».',
 'invalidtitle-knownnamespace' => 'Ugyldig tittel med navnerommet «$2» og teksten «$3»',
 'invalidtitle-unknownnamespace' => 'Ugyldig tittel med ukjent navneromsnummer $1 og teksten «$2»',
+'exception-nologin' => 'Ikke innlogget',
+'exception-nologin-text' => 'Denne siden eller handlingen krever at du er innlogget på denne wikien.',
 
 # Virus scanner
 'virus-badscanner' => "Dårlig konfigurasjon: Ukjent virusskanner: ''$1''",
@@ -1043,7 +1049,7 @@ Systemadministratoren som låste databasen oppga følgende årsak: $1",
 Det siste loggelementet er oppgitt under som referanse:",
 'semiprotectedpagewarning' => "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan endre den.
 Det siste loggelementet er oppgitt under som referanse:",
-'cascadeprotectedwarning' => "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede sider:<!--{{PLURAL:$1}}-->",
+'cascadeprotectedwarning' => "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede {{PLURAL:$1|sider}}:",
 'titleprotectedwarning' => "'''Advarsel: Denne siden har blitt låst slik at [[Special:ListGroupRights|spesielle rettigheter]] kreves for å opprette den.'''
 Det siste loggelementet er oppgitt under som referanse:",
 'templatesused' => '{{PLURAL:$1|Mal|Maler}} som brukes på denne siden:',
@@ -1094,6 +1100,7 @@ Disse parameterne har blitt utelatt.',
 'expansion-depth-exceeded-category' => 'Sider hvor hvor ekspansjonsdybden er overskredet',
 'expansion-depth-exceeded-warning' => 'Sida har overskredet ekspansjonsdybden',
 'parser-unstrip-loop-warning' => '«Unstrip»-loop påvist',
+'parser-unstrip-recursion-limit' => 'Rekursjonsgrense for taggfjerning overskredet ($1)',
 
 # "Undo" feature
 'undo-success' => 'Redigeringen kan omgjøres. Sjekk sammenligningen under for å bekrefte at du vil gjøre dette, og lagre endringene for å fullføre omgjøringen.',
@@ -1158,7 +1165,7 @@ Du kan fortsatt se den; detaljer finnes i [{{fullurl:{{#Special:Log}}/delete|pag
 Som administrator kan du se den; detaljer kan finnes i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].",
 'rev-deleted-no-diff' => "Du kan ikke vise forskjellen fordi en av versjonene har blitt '''slettet'''.
 Det kan finnes flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].",
-'rev-suppressed-no-diff' => "Du kanne ikke se revisjonsforskjellen fordi en av revisjonene har blitt '''slettet'''.",
+'rev-suppressed-no-diff' => "Du kan ikke se revisjonsforskjellen fordi en av revisjonene har blitt '''slettet.'''",
 'rev-deleted-unhide-diff' => "Én av revisjonene i denne diffen har blitt '''slettet'''.
 Det finnes flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].
 Du kan fortsatt [$1 se diffen] om du ønsker å gå videre.",
@@ -1217,9 +1224,9 @@ $1",
 'deletedhist' => 'Slettet historikk',
 'revdelete-hide-current' => 'Feil under skjuling av objektet datert $2, $1: dette er den gjeldende revisjonen.
 Den kan ikke skjules.',
-'revdelete-show-no-access' => 'Feil under visning av objekt datert $2, $1: dette objektet har blitt markert "begrenset".
+'revdelete-show-no-access' => 'Feil under visning av objekt datert $2, $1: dette objektet har blitt markert «begrenset».
 Du har ikke tilgang til det.',
-'revdelete-modify-no-access' => 'Feil under endring av objekt datert $2, $1: dette objektet har blitt markert "begrenset".
+'revdelete-modify-no-access' => 'Feil under endring av objekt datert $2, $1: dette objektet har blitt markert «begrenset».
 Du har ikke tilgang til det.',
 'revdelete-modify-missing' => 'Feil under endring av objekt ID $1: det mangler i databasen!',
 'revdelete-no-change' => "'''Advarsel:''' objektet datert $2 $1 hadde allerede synlighetsinnstillingene du forespurte.",
@@ -1277,13 +1284,13 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
 'lineno' => 'Linje $1:',
 'compareselectedversions' => 'Sammenlign valgte revisjoner',
 'showhideselectedversions' => 'Vis/skjul valgte versjoner',
-'editundo' => 'angre',
+'editundo' => 'fjern',
 'diff-multi' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av {{PLURAL:$2|én bruker|$2 brukere}} vises ikke)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)',
 
 # Search results
-'searchresults' => 'Søkeresultat',
-'searchresults-title' => 'Søkeresultat for «$1»',
+'searchresults' => 'Søkeresultater',
+'searchresults-title' => 'Søkeresultater for «$1»',
 'searchresulttext' => 'For mer informasjon om søking i {{SITENAME}}, se [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => "Du søkte etter '''[[:$1]]''' ([[Special:Prefixindex/$1|alle sider som begynner med «$1»]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle sider som lenker til «$1»]])",
 'searchsubtitleinvalid' => "Du søkte etter '''$1'''",
@@ -1319,8 +1326,8 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
 'search-redirect' => '(omdirigering $1)',
 'search-section' => '(avsnitt $1)',
 'search-suggest' => 'Mente du: $1',
-'search-interwiki-caption' => 'Søsterprosjekt',
-'search-interwiki-default' => '$1-resultat:',
+'search-interwiki-caption' => 'Søsterprosjekter',
+'search-interwiki-default' => '$1-resultater:',
 'search-interwiki-more' => '(mer)',
 'search-mwsuggest-enabled' => 'med forslag',
 'search-mwsuggest-disabled' => 'ingen forslag',
@@ -1334,7 +1341,7 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
 'showingresultsheader' => "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} for '''$4'''",
 'nonefound' => "'''Merk''': Som standard søkes det kun i enkelte navnerom.
 For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler, osv), eller bruk det ønskede navnerommet som prefiks.",
-'search-nonefound' => 'Det var ingen resultater som passet til søket.',
+'search-nonefound' => 'Ingen resultater passet til søket.',
 'powersearch' => 'Avansert søk',
 'powersearch-legend' => 'Avansert søk',
 'powersearch-ns' => 'Søk i navnerom:',
@@ -1375,7 +1382,7 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler,
 'prefs-watchlist-days' => 'Dager som skal vises i overvåkningslisten:',
 'prefs-watchlist-days-max' => 'Maksimalt $1 {{PLURAL:$1|dag|dager}}',
 'prefs-watchlist-edits' => 'Antall redigeringer som skal vises i utvidet overvåkningsliste:',
-'prefs-watchlist-edits-max' => 'Maksimum antall: 1000',
+'prefs-watchlist-edits-max' => 'Maksimalt antall: 1000',
 'prefs-watchlist-token' => 'Nøkkel for overvåkningsliste',
 'prefs-misc' => 'Diverse',
 'prefs-resetpass' => 'Endre passord',
@@ -1395,7 +1402,7 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler,
 'stub-threshold' => 'Grense for <span class="mw-stub-example">stubblenkeformatering</span>:',
 'stub-threshold-disabled' => 'Deaktivert',
 'recentchangesdays' => 'Antall dager som skal vises i siste endringer:',
-'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|dag|dager}})',
+'recentchangesdays-max' => 'Maks $1 {{PLURAL:$1|dag|dager}}',
 'recentchangescount' => 'Antall redigeringer som skal vises som standard:',
 'prefs-help-recentchangescount' => 'Dette inkluderer nylige endringer, sidehistorikk og logger.',
 'prefs-help-watchlist-token' => 'Om du fyller ut dette feltet med et hemmelig tall, vil det lages en RSS-liste for overvåkningslisten din.
@@ -1416,8 +1423,8 @@ Her er et tilfeldig tall du kan bruke: $1',
 'timezoneregion-asia' => 'Asia',
 'timezoneregion-atlantic' => 'Atlanterhavet',
 'timezoneregion-australia' => 'Australia',
-'timezoneregion-europe' => 'Europe',
-'timezoneregion-indian' => 'Det indiske hav',
+'timezoneregion-europe' => 'Europa',
+'timezoneregion-indian' => 'Indiahavet',
 'timezoneregion-pacific' => 'Stillehavet',
 'allowemail' => 'Tillat andre å sende meg e-post',
 'prefs-searchoptions' => 'Søkealternativ',
@@ -1461,12 +1468,12 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'prefs-signature' => 'Signatur',
 'prefs-dateformat' => 'Datoformat',
 'prefs-timeoffset' => 'Tidsforskyvning',
-'prefs-advancedediting' => 'Avanserte alternativ',
+'prefs-advancedediting' => 'Avanserte alternativer',
 'prefs-advancedrc' => 'Avanserte alternativ',
-'prefs-advancedrendering' => 'Avanserte alternativ',
-'prefs-advancedsearchoptions' => 'Avanserte alternativ',
-'prefs-advancedwatchlist' => 'Avanserte alternativ',
-'prefs-displayrc' => 'Visningsalternativ',
+'prefs-advancedrendering' => 'Avanserte alternativer',
+'prefs-advancedsearchoptions' => 'Avanserte alternativer',
+'prefs-advancedwatchlist' => 'Avanserte alternativer',
+'prefs-displayrc' => 'Visningsalternativer',
 'prefs-displaysearchoptions' => 'Visningsalternativer',
 'prefs-displaywatchlist' => 'Visningsalternativer',
 'prefs-diffs' => 'Forskjeller',
@@ -1528,7 +1535,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'right-createpage' => 'Opprette sider (som ikke er diskusjonssider)',
 'right-createtalk' => 'Opprette diskusjonssider',
 'right-createaccount' => 'Opprette nye kontoer',
-'right-minoredit' => 'Marker endringer som mindre',
+'right-minoredit' => 'Markere endringer som mindre',
 'right-move' => 'Flytte sider',
 'right-move-subpages' => 'Flytte sider med undersider',
 'right-move-rootuserpages' => 'Flytte hovedbrukersider',
@@ -1547,9 +1554,10 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'right-writeapi' => 'Redigere via API',
 'right-delete' => 'Slette sider',
 'right-bigdelete' => 'Slette sider med stor historikk',
+'right-deletelogentry' => 'Slett og gjenopprett spesifikke loggoppføringer',
 'right-deleterevision' => 'Slette og gjenopprette enkeltrevisjoner av sider',
 'right-deletedhistory' => 'Se slettet sidehistorikk uten tilhørende sidetekst',
-'right-deletedtext' => 'Vis slettet tekst og endringer mellom slettede versjoner',
+'right-deletedtext' => 'Vise slettet tekst og endringer mellom slettede versjoner',
 'right-browsearchive' => 'Søke i slettede sider',
 'right-undelete' => 'Gjenopprette sider',
 'right-suppressrevision' => 'Se og gjenopprette skjulte siderevisjoner',
@@ -1559,7 +1567,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'right-hideuser' => 'Blokkere et brukernavn og skjule det fra det offentlige',
 'right-ipblock-exempt' => 'Kan redigere fra blokkerte IP-adresser',
 'right-proxyunbannable' => 'Kan redigere fra blokkerte proxyer',
-'right-unblockself' => 'Fjern blokkering av seg selv',
+'right-unblockself' => 'Fjerne blokkering av seg selv',
 'right-protect' => 'Endre beskyttelsesnivåer',
 'right-editprotected' => 'Redigere beskyttede sider',
 'right-editinterface' => 'Redigere brukergrensesnittet',
@@ -1585,7 +1593,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 
 # User rights log
 'rightslog' => 'Brukerrettighetslogg',
-'rightslogtext' => 'Dette er en logg over forandringer i brukerrettigheter.',
+'rightslogtext' => 'Dette er en logg over endringer av brukerrettigheter.',
 'rightslogentry' => 'endret gruppe for $1 fra $2 til $3',
 'rightslogentry-autopromote' => 'ble automatisk forfremmet fra $2 til $3',
 'rightsnone' => '(ingen)',
@@ -1615,7 +1623,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'action-suppressionlog' => 'se denne private loggen',
 'action-block' => 'blokkere denne brukeren fra å redigere',
 'action-protect' => 'endre denne sidens beskyttelsesnivåer',
-'action-rollback' => 'tilbakestill raskt endringene til den siste brukeren som redigerte en bestemt side',
+'action-rollback' => 'raskt tilbakestille endringene til den siste brukeren som redigerte en bestemt side',
 'action-import' => 'importere denne siden fra en annen wiki',
 'action-importupload' => 'importere denne siden fra en opplastet fil',
 'action-patrol' => 'merke andre brukeres redigeringer som patruljert',
@@ -1625,20 +1633,20 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'action-userrights' => 'redigere alle brukerrettigheter',
 'action-userrights-interwiki' => 'endre brukerrettigheter for brukere på andre wikier',
 'action-siteadmin' => 'låse eller låse opp databasen',
-'action-sendemail' => 'send e-post',
+'action-sendemail' => 'sende e-poster',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|endring|endringer}}',
 'recentchanges' => 'Siste endringer',
-'recentchanges-legend' => 'Alternativ for siste endringer',
-'recentchanges-summary' => 'Vis de siste endringene til denne siden',
+'recentchanges-legend' => 'Alternativer for siste endringer',
+'recentchanges-summary' => 'På denne siden vises de siste endringene i wikien.',
 'recentchanges-feed-description' => 'Følg med på siste endringer i denne wikien med denne matingen.',
 'recentchanges-label-newpage' => 'Denne redigeringen opprettet en ny side',
 'recentchanges-label-minor' => 'Dette er en mindre endring',
 'recentchanges-label-bot' => 'Denne redigeringen ble gjort av en bot',
 'recentchanges-label-unpatrolled' => 'Denne redigeringen har ikke blitt patruljert ennå',
 'rcnote' => "Nedenfor vises {{PLURAL:$1|'''1''' endring|de siste '''$1''' endringene}} fra {{PLURAL:$2|det siste døgnet|de siste '''$2''' døgnene}}, per $5 $4.",
-'rcnotefrom' => "Nedenfor er endringene fra '''$2''' (opp til '''$1''' vises).",
+'rcnotefrom' => "Nedenfor er endringene siden '''$2''' (opp til '''$1''' vises).",
 'rclistfrom' => 'Vis nye endringer med start fra $1',
 'rcshowhideminor' => '$1 mindre endringer',
 'rcshowhidebots' => '$1 roboter',
@@ -1657,7 +1665,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'number_of_watching_users_pageview' => '[$1 overvåkende {{PLURAL:$1|bruker|brukere}}]',
 'rc_categories' => 'Begrens til kategorier (skilletegn: «|»)',
 'rc_categories_any' => 'Alle',
-'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} etter endring',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte}} etter endring',
 'newsectionsummary' => '/* $1 */ ny seksjon',
 'rc-enhanced-expand' => 'Vis detaljer (krever JavaScript)',
 'rc-enhanced-hide' => 'Skjul detaljer',
@@ -1857,6 +1865,7 @@ Om problemet fortsetter, kontakt en [[Special:ListUsers/sysop|administrator]].',
 'lockmanager-fail-releaselock' => 'Kunne ikke frigi låsen for «$1».',
 'lockmanager-fail-db-bucket' => 'Kunne ikke kontakte nok låsedatabaser i bøtten $1.',
 'lockmanager-fail-db-release' => 'Kunne ikke frigi låser på databasen $1.',
+'lockmanager-fail-svr-acquire' => 'Kunne ikke hente lås på server $1.',
 'lockmanager-fail-svr-release' => 'Kunne ikke frigi låser på tjeneren $1.',
 
 # ZipDirectoryReader
@@ -2160,6 +2169,7 @@ Merk at andre sider kanskje lenker til en fil med en direkte lenke, så filen li
 Du kan minske antallet resultater ved å velge loggtype, brukernavn eller den siden som er påvirket (husk å skille mellom store og små bokstaver).',
 'logempty' => 'Ingen elementer i loggen.',
 'log-title-wildcard' => 'Søk i titler som starter med denne teksten',
+'showhideselectedlogentries' => 'Vis/skjul de valgte logghendelsene',
 
 # Special:AllPages
 'allpages' => 'Alle sider',
@@ -2394,6 +2404,8 @@ Se $2 for en oversikt over de siste slettingene.',
 'rollback' => 'Fjern redigeringer',
 'rollback_short' => 'Tilbakestill',
 'rollbacklink' => 'tilbakestill',
+'rollbacklinkcount' => 'tilbakestill {{PLURAL:$1|én endring|$1 endringer}}',
+'rollbacklinkcount-morethan' => 'tilbakestill mer enn $1 {{PLURAL:$1|endring|endringer}}',
 'rollbackfailed' => 'Kunne ikke tilbakestille',
 'cantrollback' => 'Kan ikke fjerne redigering; den siste brukeren er den eneste forfatteren.',
 'alreadyrolled' => 'Kan ikke fjerne den siste redigeringen på [[$1]] av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); en annen har allerede redigert siden eller fjernet redigeringen.
@@ -3044,6 +3056,7 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'spambot_username' => 'MediaWikis spamopprydning',
 'spam_reverting' => 'Tilbakestiller til siste versjon uten lenke til $1',
 'spam_blanking' => 'Alle revisjoner inneholdt lenke til $1, tømmer siden',
+'spam_deleting' => 'Sletter alle revisjoner med lenker til $1',
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
@@ -3938,6 +3951,8 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'api-error-empty-file' => 'Filen du sendte inn var tom.',
 'api-error-emptypage' => 'Det er ikke tillatt å opprette nye, tomme sider.',
 'api-error-fetchfileerror' => 'Intern feil: Noe gikk galt ved henting av denne filen.',
+'api-error-fileexists-forbidden' => 'En fil med navnet «$1» finnes allerede, og kan ikke overskrives.',
+'api-error-fileexists-shared-forbidden' => 'En fil med navnet «$1» finnes allerede i det delte filsystemet, og kan ikke overskrives.',
 'api-error-file-too-large' => 'Filen du la inn var for stor.',
 'api-error-filename-tooshort' => 'Filnavnet er for kort.',
 'api-error-filetype-banned' => 'Denne filtypen er ikke tillatt.',
index 3ca1d4e..b105e23 100644 (file)
@@ -312,9 +312,9 @@ $messages = array(
 'tog-justify' => "Alinea's uutvullen",
 'tog-hideminor' => 'Kleine wiezigingen verbargen in leste wiezigingen',
 'tog-hidepatrolled' => 'Wiezigingen die emarkeerd bin verbargen in leste wiezigingen',
-'tog-newpageshidepatrolled' => "Pagina's die emarkeerd bin, verbargen in de lieste mit nieje artikels",
+'tog-newpageshidepatrolled' => 'Ziejen die emarkeerd bin, verbargen in de lieste mit nieje artikels',
 'tog-extendwatchlist' => 'Volglieste uutbreien, zodat alle wiezigingen zichtbaor bin, en niet allinnig de leste wieziging',
-'tog-usenewrc' => "Groepeer wiezigingen per pagina in de liesten leste wiezigingen en mien volglieste (hierveur he'j JavaScript neudig)",
+'tog-usenewrc' => 'Groepeer wiezigingen per zied in "Leste wiezigingen" en "Mien volglieste" (hierveur he\'j JavaScript neudig)',
 'tog-numberheadings' => 'Koppen vanzelf nummeren',
 'tog-showtoolbar' => 'Laot de warkbalke zien',
 'tog-editondblclick' => 'Mit dubbelklik bewarken (JavaScript)',
@@ -322,25 +322,25 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Bewarkgedeelte mit rechtermuusknoppe bewarken (JavaScript)',
 'tog-showtoc' => 'Samenvatting laoten zien van de zaken die an bod koemen (mit meer as dree onderwarpen)',
 'tog-rememberpassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})',
-'tog-watchcreations' => "Pagina's die'k anmake en bestaanden die'k opsture op mien volglieste zetten",
-'tog-watchdefault' => "Pagina's en bestaanden die'k wiezige op mien volglieste zetten",
-'tog-watchmoves' => "Pagina's en bestaanden die'k herneume op mien volglieste zetten",
-'tog-watchdeletion' => "Pagina's en bestaanden die'k vortdo op mien volglieste zetten",
+'tog-watchcreations' => "Spul wa'k anmake op mien volglieste zetten",
+'tog-watchdefault' => "Spul wa'k bewarke op mien volglieste zetten",
+'tog-watchmoves' => "Spul wa'k herneume op mien volglieste zetten",
+'tog-watchdeletion' => "Spul wa'k vortdo op mien volglieste zetten",
 'tog-minordefault' => "Markeer alle veraanderingen as 'kleine wieziging'",
-'tog-previewontop' => 'De naokiekpagina boven t bewarkingsveld zetten',
+'tog-previewontop' => 'De naokiekzied boven t bewarkingsveld zetten',
 'tog-previewonfirst' => 'Naokieken bie eerste wieziging',
 'tog-nocache' => 'De tussenopslag van de webkieker uutzetten',
-'tog-enotifwatchlistpages' => 'Stuur mien n berichjen over pagina- of bestaandswiezigingen uut mien volglieste.',
-'tog-enotifusertalkpages' => 'Stuur mien n berichjen as mien overlegpagina ewiezigd is.',
-'tog-enotifminoredits' => "Stuur mien oek n berichjen bie kleine bewarkingen van pagina's en bestaanden",
+'tog-enotifwatchlistpages' => 'Stuur mien n berichjen over zied- of bestaandswiezigingen uut mien volglieste.',
+'tog-enotifusertalkpages' => 'Stuur mien n berichjen as mien overlegzied ewiezigd is.',
+'tog-enotifminoredits' => 'Stuur mien oek n berichjen bie kleine bewarkingen van ziejen en bestaanden',
 'tog-enotifrevealaddr' => 'Mien netpostadres laoten zien in netposttiejigen',
-'tog-shownumberswatching' => 't Antal gebrukers bekieken die disse pagina volgt',
+'tog-shownumberswatching' => 't Antal gebrukers bekieken die disse zied volgt',
 'tog-oldsig' => 'Bestaonde haandtekening:',
 'tog-fancysig' => 'Ondertekening zien as wikitekste (zonder automatiese verwiezing)',
 'tog-externaleditor' => 'Standard n externe tekstbewarker gebruken (allinnig veur gevorderden - veur disse funksie bin spesiale instellingen neudig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informasie]).',
 'tog-externaldiff' => 'Standard n extern vergeliekingsprogramma gebruken (allinnig veur gevorderden - veur disse funksie bin spesiale instellingen neudig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informasie]).',
 'tog-showjumplinks' => '"Gao naor"-verwiezingen toelaoten',
-'tog-uselivepreview' => 'Gebruuk "rechtstreeks naokieken" (mö\'j JavaScript veur hebben - experimenteel)',
+'tog-uselivepreview' => 'Gebruuk "rechtstreeks naokieken" (mu\'j JavaScript veur hebben - experimenteel)',
 'tog-forceeditsummary' => 'Geef n melding bie n lege samenvatting',
 'tog-watchlisthideown' => 'Verbarg mien eigen bewarkingen',
 'tog-watchlisthidebots' => 'Verbarg botgebrukers',
@@ -350,9 +350,9 @@ $messages = array(
 'tog-watchlisthidepatrolled' => 'Wiezigingen die emarkeerd bin op volglieste verbargen',
 'tog-nolangconversion' => 't Ummezetten van variaanten uutschakelen',
 'tog-ccmeonemails' => 'Stuur mien kopieën van berichten an aandere gebrukers',
-'tog-diffonly' => 'Laot de pagina-inhoud niet onder de an-egeven wiezigingen zien.',
+'tog-diffonly' => 'Laot de inhoud van ziejen niet onder de an-egeven wiezigingen zien.',
 'tog-showhiddencats' => 'Laot verbörgen kategorieën zien',
-'tog-noconvertlink' => 'Paginanaamkonversie uutschakelen',
+'tog-noconvertlink' => 'Ziednaamkonversie uutschakelen',
 'tog-norollbackdiff' => 'Wiezigingen vortlaoten nao t weerummedreien',
 
 'underline-always' => 'Altied',
@@ -428,23 +428,23 @@ $messages = array(
 'hidden-category-category' => 'Verbörgen kategorieën',
 'category-subcat-count' => '{{PLURAL:$2|Disse kategorie hef de volgende subkategorie.|Disse kategorie hef de volgende {{PLURAL:$1|subkategorie|$1 subkategorieën}}, van in totaal $2.}}',
 'category-subcat-count-limited' => 'Disse kategorie hef de volgende {{PLURAL:$1|subkategorie|$1 subkategorieën}}.',
-'category-article-count' => "{{PLURAL:$2|In disse kategorie steet allinnig de volgende pagina.|De volgende {{PLURAL:$1|pagina steet|$1 pagina's staon}} in disse kategorie, van in totaal $2.}}",
-'category-article-count-limited' => "In disse kategorie {{PLURAL:$1|steet de volgende pagina|staon de volgende $1 pagina's}}.",
+'category-article-count' => '{{PLURAL:$2|In disse kategorie steet allinnig de volgende zied.|De volgende {{PLURAL:$1|zied steet|$1 ziejen staon}} in disse kategorie, van in totaal $2.}}',
+'category-article-count-limited' => 'In disse kategorie {{PLURAL:$1|steet de volgende zied|staon de volgende $1 ziejen}}.',
 'category-file-count' => 'In disse kategorie {{PLURAL:$2|steet t volgende bestaand|staon de volgende $1 bestaanden, van in totaal $2}}.',
 'category-file-count-limited' => 'In disse kategorie {{PLURAL:$1|steet t volgende bestaand|staon de volgende $1 bestaanden}}.',
 'listingcontinuesabbrev' => '(vervolg)',
-'index-category' => "Pagina's die indexeerd bin",
-'noindex-category' => "Pagina's die niet indexeerd bin",
-'broken-file-category' => "Pagina's mit verkeerde bestaandsverwiezingen",
+'index-category' => 'Spul wat al indexeerd is',
+'noindex-category' => 'Spul wat nog niet indexeerd is',
+'broken-file-category' => 'Ziejen mit verkeerde bestaandsverwiezingen',
 
 'about' => 'Informasie',
 'article' => 'Artikel',
 'newwindow' => '(niej vienster)',
 'cancel' => 'Aofbreken',
 'moredotdotdot' => 'Meer...',
-'mypage' => 'Mien gebrukerspagina',
+'mypage' => 'Mien gebrukerszied',
 'mytalk' => 'Mien overleg',
-'anontalk' => 'Overlegpagina veur dit IP-adres',
+'anontalk' => 'Overlegzied veur dit IP-adres',
 'navigation' => 'Navigasie',
 'and' => '&#32;en',
 
@@ -452,10 +452,10 @@ $messages = array(
 'qbfind' => 'Zeuken',
 'qbbrowse' => 'Blaojen',
 'qbedit' => 'Bewark',
-'qbpageoptions' => 'Pagina-opsies',
-'qbpageinfo' => 'Pagina-informasie',
+'qbpageoptions' => 'Disse zied',
+'qbpageinfo' => 'Ziedinformasie',
 'qbmyoptions' => 'Veurkeuren',
-'qbspecialpages' => "Spesiale pagina's",
+'qbspecialpages' => 'Spesiale ziejen',
 'faq' => 'Vragen die vake esteld wörden',
 'faqpage' => 'Project:Vragen die vake esteld wörden',
 
@@ -493,47 +493,47 @@ $messages = array(
 'view' => 'Lezen',
 'edit' => 'Bewarken',
 'create' => 'Anmaken',
-'editthispage' => 'Pagina bewarken',
-'create-this-page' => 'Disse pagina anmaken',
+'editthispage' => 'Disse zied bewarken',
+'create-this-page' => 'Disse zied anmaken',
 'delete' => 'Vortdoon',
-'deletethispage' => 'Disse pagina vortdoon',
+'deletethispage' => 'Disse zied vortdoon',
 'undelete_short' => '$1 {{PLURAL:$1|versie|versies}} weerummeplaotsen',
 'viewdeleted_short' => '{{PLURAL:$1|Eén versie die vortedaon is|$1 versies die vortedaon bin}} bekieken',
 'protect' => 'Beveiligen',
 'protect_change' => 'wiezigen',
 'protectthispage' => 'Beveiligen',
 'unprotect' => 'Beveiliging wiezigen',
-'unprotectthispage' => 'Beveiliging van disse pagina wiezigen',
-'newpage' => 'Nieje pagina',
-'talkpage' => 'Overlegpagina',
+'unprotectthispage' => 'Beveiliging van disse zied wiezigen',
+'newpage' => 'Nieje zied',
+'talkpage' => 'Overlegzied',
 'talkpagelinktext' => 'Overleg',
-'specialpage' => 'Spesiale pagina',
+'specialpage' => 'Spesiale zied',
 'personaltools' => 'Persoonlike instellingen',
 'postcomment' => 'Niej onderwarp',
 'articlepage' => 'Artikel',
 'talk' => 'Overleg',
-'views' => 'Aspekten/aksies',
+'views' => 'Weergaven',
 'toolbox' => 'Hulpmiddels',
-'userpage' => 'gebrukerspagina',
-'projectpage' => 'Bekiek projektpagina',
-'imagepage' => 'Bestaandspagina bekieken',
+'userpage' => 'gebrukerszied',
+'projectpage' => 'Bekiek projektzied',
+'imagepage' => 'Bestaandszied bekieken',
 'mediawikipage' => 'Tiejige bekieken',
 'templatepage' => 'Mal bekieken',
-'viewhelppage' => 'Hulppagina bekieken',
-'categorypage' => 'Kategoriepagina bekieken',
-'viewtalkpage' => 'Bekiek overlegpagina',
+'viewhelppage' => 'Hulpzied bekieken',
+'categorypage' => 'Kategoriezied bekieken',
+'viewtalkpage' => 'Bekiek overlegzied',
 'otherlanguages' => 'Aandere talen',
 'redirectedfrom' => '(deurestuurd vanaof "$1")',
-'redirectpagesub' => 'Deurstuurpagina',
-'lastmodifiedat' => 'Disse pagina is t lest ewiezigd op $1 um $2.',
-'viewcount' => 'Disse pagina is $1 {{PLURAL:$1|keer|keer}} bekeken.',
-'protectedpage' => 'Beveiligden pagina',
+'redirectpagesub' => 'Deurstuurzied',
+'lastmodifiedat' => 'Disse zied is t lest ewiezigd op $1 um $2.',
+'viewcount' => 'Disse zied is $1 {{PLURAL:$1|keer|keer}} bekeken.',
+'protectedpage' => 'Beveiligden zied',
 'jumpto' => 'Gao naor:',
 'jumptonavigation' => 'navigasie',
 'jumptosearch' => 'zeuk',
 'view-pool-error' => "De servers bin noen overbelast.
-Te veule meensen proberen disse pagina te bekieken.
-Wacht even veurda'j opniej toegang proberen te kriegen tot disse pagina.
+Te veule meensen proberen disse zied te bekieken.
+Wacht even veurda'j opniej toegang proberen te kriegen tot disse zied.
 
 $1",
 'pool-timeout' => 'Wachttied tiejens t wachten op vergrendeling',
@@ -565,9 +565,9 @@ $1",
 'badaccess-groups' => 'Disse aksie kan allinnig uutevoerd wörden deur gebrukers uut {{PLURAL:$2|de groep|één van de groepen}}: $1.',
 
 'versionrequired' => 'Versie $1 van MediaWiki is neudig',
-'versionrequiredtext' => 'Versie $1 van MediaWiki is neudig um disse pagina te gebruken. Zie [[Special:Version|Versie]].',
+'versionrequiredtext' => 'Versie $1 van MediaWiki is neudig um disse zied te gebruken. Zie [[Special:Version|Versie]].',
 
-'ok' => 'Oké',
+'ok' => 'Best',
 'retrievedfrom' => 'Van "$1"',
 'youhavenewmessages' => 'Je hebben $1 ($2).',
 'newmessageslink' => 'nieje berichten',
@@ -594,7 +594,7 @@ $1",
 'site-atom-feed' => '$1 Atom-voer',
 'page-rss-feed' => '"$1" RSS-voer',
 'page-atom-feed' => '"$1" Atom-voer',
-'red-link-title' => '$1 (pagina besteet nog niet)',
+'red-link-title' => '$1 (zied besteet nog niet)',
 'sort-descending' => 'Aoflopend sorteren',
 'sort-ascending' => 'Oplopend sorteren',
 
@@ -602,8 +602,8 @@ $1",
 'nstab-main' => 'Artikel',
 'nstab-user' => 'Gebruker',
 'nstab-media' => 'Media',
-'nstab-special' => 'Spesiale pagina',
-'nstab-project' => 'Projektpagina',
+'nstab-special' => 'Spesiale zied',
+'nstab-project' => 'Projektzied',
 'nstab-image' => 'Bestaand',
 'nstab-mediawiki' => 'Tiejige',
 'nstab-template' => 'Mal',
@@ -615,10 +615,10 @@ $1",
 'nosuchactiontext' => 'De opdrachte in t webadres in ongeldig.
 Je hebben t webadres misschien verkeerd in-etikt of de verkeerde verwiezing evolgd.
 Dit kan oek dujen op n fout in de programmatuur van {{SITENAME}}.',
-'nosuchspecialpage' => 'Der besteet gien spesiale pagina mit disse naam',
-'nospecialpagetext' => "<strong>Disse spesiale pagina wörden niet herkend deur de programmatuur.</strong>
+'nosuchspecialpage' => 'Der besteet gien spesiale zied mit disse naam',
+'nospecialpagetext' => "<strong>Disse spesiale zied wörden niet herkend deur de programmatuur.</strong>
 
-n Lieste mit bestaonde spesiale pagina ku'j vienen op [[Special:SpecialPages|{{int:specialpages}}]].",
+n Lieste mit bestaonde spesiale ziejen ku'j vienen op [[Special:SpecialPages|{{int:specialpages}}]].",
 
 # General errors
 'error' => 'Foutmelding',
@@ -637,15 +637,15 @@ t Leste veurzeuk an de databanke was:
 vanuut de funksie "$2"
 De databanke gaf de volgende foutmelding: "$3: $4"',
 'laggedslavemode' => '<strong>Waorschuwing:</strong> t is meugelik dat leste wiezigingen in de tekste van dit artikel nog niet verwarkt bin.',
-'readonly' => 'De databanke is beveilig',
-'enterlockreason' => 'Waorumme en veur hoe lange is e eblokkeerd?',
+'readonly' => 'De databanke is beveiligd',
+'enterlockreason' => 'Waorumme en veur hoe lange is t eblokkeerd?',
 'readonlytext' => "De databanke van {{SITENAME}} is noen esleuten veur nieje bewarkingen en wiezigingen, warschienlik veur bestaandsonderhoud. De verantwoordelike systeembeheerder gaf hierveur de volgende reden op: '''$1'''",
-'missing-article' => 'In de databanke steet gien tekste veur de pagina "$1" die der wel in zol mutten staon ($2).
+'missing-article' => 'In de databanke steet gien tekste veur de zied "$1" die der wel in zol mutten staon ($2).
 
-Dit kan koemen deurda\'j n ouwe verwiezing naor t verschil tussen twee versies van n pagina volgen of n versie opvragen die vortedaon is.
+Dit kan koemen deurda\'j n ouwe verwiezing naor t verschil tussen twee versies van n zied volgen of n versie opvragen die vortedaon is.
 
 As dat niet zo is, dan he\'j misschien n fout in de programmatuur evunnen.
-Meld t dan effen bie n [[Special:ListUsers/sysop|systeembeheerder]] van {{SITENAME}} en vermeld derbie de internetverwiezing van disse pagina.',
+Meld t dan effen bie n [[Special:ListUsers/sysop|systeembeheerder]] van {{SITENAME}} en vermeld derbie de internetverwiezing van disse zied.',
 'missingarticle-rev' => '(versienummer: $1)',
 'missingarticle-diff' => '(Wieziging: $1, $2)',
 'readonly_lag' => 'De databanke is automaties beveilig, zodat de ondergeschikten servers zich kunnen synchroniseren mit de sentrale server.',
@@ -661,37 +661,37 @@ Meld t dan effen bie n [[Special:ListUsers/sysop|systeembeheerder]] van {{SITENA
 'fileexistserror' => 'Kon niet schrieven naor t bestaand "$1": t bestaand besteet al',
 'unexpected' => 'Onverwachten weerde: "$1"="$2".',
 'formerror' => 'Fout: kon formulier niet versturen',
-'badarticleerror' => 'Disse haandeling kan op disse pagina niet uutevoerd wörden.',
-'cannotdelete' => 'De pagina of t bestaand "$1" kon niet vortedaon wörden.
+'badarticleerror' => 'Disse haandeling kan op disse zied niet uutevoerd wörden.',
+'cannotdelete' => 'De zied of t bestaand "$1" kon niet vortedaon wörden.
 t Kan ween dat n aander t al vortedaon hef.',
-'cannotdelete-title' => 'Pagina "$1" kan niet vortedaon wörden',
+'cannotdelete-title' => 'Zied "$1" kan niet vortedaon wörden',
 'delete-hook-aborted' => 't Vortdoon wörden in t wiere eschopt deur n MediaWiki-programmatuuruutbreiding.
 Der is gien veerdere informasie beschikbaor.',
 'badtitle' => 'Ongeldige naam',
-'badtitletext' => 'De naam van de op-evreugen pagina is niet geldig, leeg, of n interwiki-verwiezing naor n onbekende of ongeldige wiki.',
+'badtitletext' => 'De naam van de op-evreugen zied is niet geldig, leeg, of n interwiki-verwiezing naor n onbekende of ongeldige wiki.',
 'perfcached' => 'Disse gegevens koemen uut t tussengeheugen en bin misschien niet aktueel. Der {{PLURAL:$1|is hooguut een resultaot|bin hooguut $1 resultaoten}} beschikbaor in t tussengeheugen.',
 'perfcachedts' => 'Disse gegevens koemen uut t tussengeheugen die veur t lest bie-ewörken is op $2 um $3. Der {{PLURAL:$4|is hooguut een resultaot|bin hooguut $4 resultaoten}} beschikbaor in t tussengeheugen.',
-'querypage-no-updates' => "'''Disse pagina wörden niet meer bie-ewörken.'''",
+'querypage-no-updates' => "'''Disse zied wörden niet meer bie-ewörken.'''",
 'wrong_wfQuery_params' => 'Parameters veur wfQuery() waren verkeerd<br />
 Funksie: $1<br />
 Zeukopdrachte: $2',
 'viewsource' => 'Brontekste bekieken',
 'viewsource-title' => 'Bron bekieken van $1',
-'actionthrottled' => 'Haandeling tegen-ehuilen',
+'actionthrottled' => 'Haandeling tegenehöllen',
 'actionthrottledtext' => "As maotregel tegen t plaotsen van ongewunste verwiezingen, is t antal keren da'j disse haandeling in n korte tied uutvoeren kunnen beteund. Je hebben de limiet overschrejen. Probeer t over n antal minuten weer.",
-'protectedpagetext' => 'Disse pagina is beveiligd um bewarkingen te veurkoemen.',
-'viewsourcetext' => 'Je kunnen de brontekste van disse pagina bewarken en bekieken:',
-'viewyourtext' => "Je kunnen '''joew bewarkingen''' an de brontekste van disse pagina bekieken en kopiëren:",
-'protectedinterface' => 'Op disse pagina steet n tekste die gebruukt wörden veur systeemteksten van de wiki. Allinnig beheerders kunnen disse pagina bewarken.',
-'editinginterface' => "'''Waorschuwing:''' je bewarken n pagina die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Overweeg veur vertalingen um [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net] te gebruken, t vertalingsprojekt veur MediaWiki.",
+'protectedpagetext' => 'Disse zied is beveiligd um bewarkingen te veurkoemen.',
+'viewsourcetext' => 'Je kunnen de brontekste van disse zied bewarken en bekieken:',
+'viewyourtext' => "Je kunnen '''joew bewarkingen''' an de brontekste van disse zied bekieken en kopiëren:",
+'protectedinterface' => 'Op disse zied steet n tekste die gebruukt wörden veur systeemteksten van de wiki. Allinnig beheerders kunnen disse zied bewarken.',
+'editinginterface' => "'''Waorschuwing:''' je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Overweeg veur vertalingen um [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net] te gebruken, t vertalingsprojekt veur MediaWiki.",
 'sqlhidden' => '(SQL-zeukopdrachte verbörgen)',
-'cascadeprotected' => 'Disse pagina is beveiligd umdat t veurkump in de volgende {{PLURAL:$1|pagina|pagina\'s}}, die beveiligd {{PLURAL:$1|is|bin}} mit de "kaskade"-opsie:
+'cascadeprotected' => 'Disse zied is beveiligd umdat t veurkömp in de volgende {{PLURAL:$1|zied|ziejen}}, die beveiligd {{PLURAL:$1|is|bin}} mit de "kaskade"-opsie:
 $2',
-'namespaceprotected' => "Je maggen gien pagina's in de '''$1'''-naamruumte bewarken.",
-'customcssprotected' => 'Je kunnen disse CSS-pagina niet bewarken, umdat der persoonlike instellingen van n aandere gebruker in staon.',
-'customjsprotected' => 'Je kunnen disse JavaScript-pagina niet bewarken, umdat der persoonlike instellingen van n aandere gebruker in staon.',
-'ns-specialprotected' => "Spesiale pagina's kunnen niet bewarkt wörden.",
-'titleprotected' => "t Anmaken van disse pagina is beveiligd deur [[User:$1|$1]].
+'namespaceprotected' => "Je maggen gien ziejen in de '''$1'''-naamruumte bewarken.",
+'customcssprotected' => 'Je kunnen disse CSS-zied niet bewarken, umdat der persoonlike instellingen van n aandere gebruker in staon.',
+'customjsprotected' => 'Je kunnen disse JavaScript-zied niet bewarken, umdat der persoonlike instellingen van n aandere gebruker in staon.',
+'ns-specialprotected' => 'Spesiale ziejen kunnen niet bewarkt wörden.',
+'titleprotected' => "t Anmaken van disse zied is beveiligd deur [[User:$1|$1]].
 De op-egeven reden is ''$2''.",
 'filereadonlyerror' => 'Kon t bestaand "$1" niet anpassen umdat de bestaandsmap "$2" op dit moment op allinnig-lezen steet.
 
@@ -699,7 +699,7 @@ De beheerder gaf hierveur de volgende reden: "$3".',
 'invalidtitle-knownnamespace' => 'Ongeldige titel mit naamruumte "$2" en tekste "$3"',
 'invalidtitle-unknownnamespace' => 'Ongeldige titel mit onbekend naamruumtenummer $1 en tekste "$2"',
 'exception-nologin' => 'Niet an-emeld',
-'exception-nologin-text' => "Um disse pagina te bekieken of disse haandeling uut te kunnen voeren mu'j an-emeld ween bie disse wiki.",
+'exception-nologin-text' => "Um disse zied te bekieken of disse haandeling uut te kunnen voeren mu'j an-emeld ween bie disse wiki.",
 
 # Virus scanner
 'virus-badscanner' => "Slichte konfigurasie: onbekend antivirusprogramma: ''$1''",
@@ -710,7 +710,7 @@ De beheerder gaf hierveur de volgende reden: "$3".',
 'logouttext' => "'''Je bin noen aofemeld.'''
 
 Je kunnen {{SITENAME}} noen anoniem gebruken of je eigen [[Special:UserLogin|opniej anmelden]] onder disse of n aandere gebrukersnaam.
-t Kan ween dat der wat pagina's bin die weeregeven wörden asof je an-emeld bin totda'j t tussengeheugen van joew webkieker leegmaken.",
+t Kan ween dat der wat ziejen bin die weeregeven wörden asof je an-emeld bin totda'j t tussengeheugen van joew webkieker leegmaken.",
 'welcomecreation' => '== Welkom, $1! ==
 Joew gebrukersnaam is an-emaakt.
 Vergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] in te stellen.',
@@ -748,7 +748,7 @@ Je hebben disse scheumbestaanden uutezet.
 Zet ze an, en meld daornao an mit de nieje gegevens.',
 'nocookieslogin' => 't Anmelden is mislokt umdat de webkieker gien scheumbestaanden (cookies) an hef staon. Probeer t aksepteren van scheumbestaanden an te zetten en daornao opniej an te melden.',
 'nocookiesfornew' => "De gebruker is niet an-emaakt, umdat de bron niet bevestigd kon wörden.
-Zörg derveur da'j scheumbestaanden (cookies) an hebben staon, herlaot disse pagina en probeer t opniej.",
+Zörg derveur da'j scheumbestaanden (cookies) an hebben staon, herlaoj disse zied en probeer t opniej.",
 'noname' => 'Je mutten n gebrukersnaam opgeven.',
 'loginsuccesstitle' => 'Suksesvol an-emeld',
 'loginsuccess' => 'Je bin noen an-emeld bie {{SITENAME}} as "$1".',
@@ -779,7 +779,7 @@ en blief joew bestaonde wachtwoord gebruken.',
 'noemailcreate' => 'Je mutten n geldig netpostadres opgeven',
 'passwordsent' => 'Der is n niej wachtwoord verstuurd naor t netpostadres van gebruker "$1". Meld an, a\'j t wachtwoord ontvangen.',
 'blocked-mailpassword' => "Dit IP-adres is eblokkeerd. Dit betekent da'j niet bewarken kunnen en dat {{SITENAME}} joew wachtwoord niet weerummehaolen kan, dit wörden edaon um misbruuk tegen te gaon.",
-'eauthentsent' => "Der is n bevestigingsberich naor t op-egeven netpostadres verstuurd. Veurdat der veerdere berichten naor dit netpostadres verstuurd kunnen wörden, mö'j de instruksies volgen in t toe-esturen berich, um te bevestigen da'j joe eigen daodwarkelik an-emeld hebben.",
+'eauthentsent' => "Der is n bevestigingsberich naor t op-egeven netpostadres verstuurd. Veurdat der veerdere berichten naor dit netpostadres verstuurd kunnen wörden, mu'j de instruksies volgen in t toe-esturen berich, um te bevestigen da'j joe eigen daodwarkelik an-emeld hebben.",
 'throttled-mailpassword' => 'In {{PLURAL:$1|t leste ure|de leste $1 uren}} is der al n wachtwoordherinnering estuurd.
 Um misbruuk te veurkoemen wörden der mer één wachtwoordherinnering per {{PLURAL:$1|ure|$1 uren}} verstuurd.',
 'mailerror' => 'Fout bie t versturen van bericht: $1',
@@ -812,7 +812,7 @@ Je mutten effen wachten veurda'j t opniej proberen kunnen.",
 
 # Change password dialog
 'resetpass' => 'Wachtwoord wiezigen',
-'resetpass_announce' => "Je bin an-emeld mit n veurlopige kode die mit de netpost toe-estuurd wörden. Um t anmelden te voltooien, mö'j n niej wachtwoord invoeren:",
+'resetpass_announce' => "Je bin an-emeld mit n veurlopige kode die mit de netpost toe-estuurd wörden. Um t anmelden te voltooien, mu'j n niej wachtwoord invoeren:",
 'resetpass_text' => '<!-- Tekste hier invoegen -->',
 'resetpass_header' => 'Wachtwoord wiezigen',
 'oldpassword' => "Wachtwoord da'j noen hebben",
@@ -821,7 +821,7 @@ Je mutten effen wachten veurda'j t opniej proberen kunnen.",
 'resetpass_submit' => 'Voer t wachtwoord in en meld je an',
 'resetpass_success' => 'Joew wachtwoord is suksesvol ewiezigd Je wörden noen an-emeld...',
 'resetpass_forbidden' => 'Wachtwoorden kunnen niet ewiezigd wörden',
-'resetpass-no-info' => "Je mutten an-emeld ween veurda'j disse pagina gebruken kunnen.",
+'resetpass-no-info' => "Je mutten an-emeld ween veurda'j disse zied gebruken kunnen.",
 'resetpass-submit-loggedin' => 'Wachtwoord wiezigen',
 'resetpass-submit-cancel' => 'Aofbreken',
 'resetpass-wrong-oldpass' => "t Veurlopige wachtwoord of t wachtwoord da'j noen hebben is ongeldig.
@@ -845,14 +845,14 @@ De volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres
 
 $2
 
-{{PLURAL:$3|Dit tiedelike wachtwoord vervuilt|Disse tiedelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.
+{{PLURAL:$3|Dit tiedelike wachtwoord vervölt|Disse tiedelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.
 Meld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
 'passwordreset-emailtext-user' => "De gebruker $1 van {{SITENAME}} hef joew gebrukersgegevens veur {{SITENAME}} ($4) op-evreugen vanaof t IP-adres $1.
 De volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:
 
 $2
 
-{{PLURAL:$3|Dit tiedelike wachtwoord vervuilt|Disse tiedelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.
+{{PLURAL:$3|Dit tiedelike wachtwoord vervölt|Disse tiedelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.
 Meld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
 'passwordreset-emailelement' => 'Gebrukersnaam: $1
 Tiedelik wachtwoord: $2',
@@ -863,8 +863,8 @@ Tiedelik wachtwoord: $2',
 # Special:ChangeEmail
 'changeemail' => 'Wiezig netpostadres',
 'changeemail-header' => 'Netpostadres wiezigen',
-'changeemail-text' => "Vul dit formulier in um joew netpostadres te wiezigen. Um disse wieziging te bevestigen mö'j je wachtwoord invoeren.",
-'changeemail-no-info' => 'Je mutten an-emeld ween um drekt toegang te hebben tot disse pagina.',
+'changeemail-text' => "Vul dit formulier in um joew netpostadres te wiezigen. Um disse wieziging te bevestigen mu'j je wachtwoord invoeren.",
+'changeemail-no-info' => 'Je mutten an-emeld ween um drekt toegang te hebben tot disse zied.',
 'changeemail-oldemail' => 't Ouwe netpostadres:',
 'changeemail-newemail' => 't Nieje netpostadres:',
 'changeemail-none' => '(gien)',
@@ -895,16 +895,16 @@ Tiedelik wachtwoord: $2',
 'summary' => 'Samenvatting:',
 'subject' => 'Onderwarp:',
 'minoredit' => 'kleine wieziging',
-'watchthis' => 'volg disse pagina',
-'savearticle' => 'Pagina opslaon',
+'watchthis' => 'volg disse zied',
+'savearticle' => 'Zied opslaon',
 'preview' => 'Naokieken',
 'showpreview' => 'Bewarking naokieken',
 'showlivepreview' => 'Drekte weergave',
 'showdiff' => 'Verschil bekieken',
 'anoneditwarning' => "'''Waorschuwing:''' je bin niet an-emeld.
-Joew IP-adres zal op-esleugen wörden a'j wiezigingen op disse pagina anbrengen.",
+Joew IP-adres zal op-esleugen wörden a'j wiezigingen op disse zied anbrengen.",
 'anonpreviewwarning' => "''Je bin niet an-emeld.''
-''Deur de bewarking op te slaon wörden joew IP-adres op-esleugen in de paginageschiedenisse.''",
+''Deur de bewarking op te slaon wörden joew IP-adres op-esleugen in de ziedgeschiedenisse.''",
 'missingsummary' => "'''Herinnering:''' je hebben gien samenvatting op-egeven veur de bewarking. A'j noen weer op ''Opslaon'' klikken wörden de bewarking zonder samenvatting op-esleugen.",
 'missingcommenttext' => 'Plaots joew opmarking hieronder.',
 'missingcommentheader' => "'''Waorschuwing:''' je hebben der gien onderwarptitel bie ezet. A'j noen weer op \"{{int:savearticle}}\" klikken, dan wörden de bewarking op-esleugen zonder onderwarptitel.",
@@ -941,31 +941,31 @@ NB: je kunnen de opsie "n bericht sturen" niet gebruken, behalven a\'j n geldig
 Joew IP-adres is $3 en joew blokkeernummer is $5.
 Geef disse nummers deur a\'j kontakt mit ene opnemen over de blokkering.',
 'blockednoreason' => 'gien reden op-egeven',
-'whitelistedittext' => "Um pagina's te kunnen wiezigen, mö'j $1 ween",
+'whitelistedittext' => "Um ziejen te kunnen wiezigen, mu'j $1 ween",
 'confirmedittext' => "Je mutten je netpostadres bevestigen veurda'j bewarken kunnen. Vul je adres in en bevestig t via [[Special:Preferences|mien veurkeuren]].",
 'nosuchsectiontitle' => 'Disse seksie besteet niet',
 'nosuchsectiontext' => 'Je proberen n seksie te bewarken dat niet besteet.
 t Kan ween dat t herneumd is of dat t vortedaon is to jie t an t bekieken waren.',
 'loginreqtitle' => 'Anmelden verplicht',
 'loginreqlink' => 'Anmelden',
-'loginreqpagetext' => 'Je mutten $1 um disse pagina te bekieken.',
+'loginreqpagetext' => 'Je mutten $1 um disse zied te bekieken.',
 'accmailtitle' => 'Wachtwoord is verstuurd.',
 'accmailtext' => "Der is n willekeurig wachtwoord veur [[User talk:$1|$1]] verstuurd naor $2.
 
-t Wachtwoord veur disse gebruker kan ewiezigd wörden deur de pagina ''[[Special:ChangePassword|wachtwoord wiezigen]]'' te gebruken.",
+t Wachtwoord veur disse gebruker kan ewiezigd wörden deur de zied ''[[Special:ChangePassword|wachtwoord wiezigen]]'' te gebruken.",
 'newarticle' => '(Niej)',
-'newarticletext' => "Disse pagina besteet nog niet.
-In t veld hieronder ku'j wat schrieven um disse pagina an te maken (meer informasie vie'j op de [[{{MediaWiki:Helppage}}|hulppagina]]).
+'newarticletext' => "Disse zied besteet nog niet.
+In t veld hieronder ku'j wat schrieven um disse zied an te maken (meer informasie vie'j op de [[{{MediaWiki:Helppage}}|hulpzied]]).
 A'j hier per ongelok terechtekeumen bin gebruuk dan de knoppe '''veurige''' um weerumme te gaon.",
-'anontalkpagetext' => "---- ''Disse overlegpagina heurt bie n anonieme gebruker die nog gien gebrukersnaam hef, of t niet gebruuk. We gebruken daorumme t IP-adres um hum of heur te herkennen, mer t kan oek ween dat meerdere personen t zelfde IP-adres gebruken, en da'j hiermee berichten ontvangen die niet veur joe bedoeld bin. A'j dit veurkoemen willen, dan ku'j t bes [[Special:UserLogin/signup|n gebrukersnaam anmaken]] of [[Special:UserLogin|anmelden]].''",
-'noarticletext' => 'Der steet noen gien tekste op disse pagina.
-Je kunnen [[Special:Search/{{PAGENAME}}|de titel opzeuken]] in aandere pagina\'s,
+'anontalkpagetext' => "---- ''Disse overlegzied heurt bie n anonieme gebruker die nog gien gebrukersnaam hef, of t niet gebruukt. We gebruken daorumme t IP-adres um hum of heur te herkennen, mer t kan oek ween dat meerdere personen t zelfde IP-adres gebruken, en da'j hiermee berichten ontvangen die niet veur joe bedoeld bin. A'j dit veurkoemen willen, dan ku'j t best [[Special:UserLogin/signup|n gebrukersnaam anmaken]] of [[Special:UserLogin|anmelden]].''",
+'noarticletext' => 'Der steet noen gien tekste op disse zied.
+Je kunnen [[Special:Search/{{PAGENAME}}|de titel opzeuken]] in aandere ziejen,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} zeuken in de logboeken],
-of [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse pagina bewarken]</span>.',
-'noarticletext-nopermission' => 'Op disse pagina steet gien tekste.
-Je kunnen [[Special:Search/{{PAGENAME}}|zeuken naor disse term]] in aandere pagina\'s of
+of [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse zied bewarken]</span>.',
+'noarticletext-nopermission' => 'Op disse zied steet gien tekste.
+Je kunnen [[Special:Search/{{PAGENAME}}|zeuken naor disse term]] in aandere ziejen of
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken deurzeuken]</span>.',
-'userpage-userdoesnotexist' => 'Je bewarken n gebrukerspagina van n gebruker die niet besteet (gebruker "<nowiki>$1</nowiki>"). Kiek effen nao o\'j disse pagina wel anmaken/bewarken willen.',
+'userpage-userdoesnotexist' => 'Je bewarken n gebrukerszied van n gebruker die niet besteet (gebruker "<nowiki>$1</nowiki>"). Kiek effen nao o\'j disse zied wel anmaken/bewarken willen.',
 'userpage-userdoesnotexist-view' => 'Gebruker "$1" steet hier niet in-eschreven',
 'blocked-notice-logextract' => 'Disse gebruker is op t moment eblokkeerd.
 De leste regel uut t blokkeerlogboek steet hieronder as referensie:',
@@ -977,120 +977,120 @@ De leste regel uut t blokkeerlogboek steet hieronder as referensie:',
 *'''Opera:''' leeg t tussengeheugen in ''Extra → Voorkeuren\"",
 'usercssyoucanpreview' => "'''Tip:''' gebruuk de knoppe \"{{int:showpreview}}\" um joew nieje css/js nao te kieken veurda'j t opslaon.",
 'userjsyoucanpreview' => "'''Tip:''' gebruuk de knoppe \"{{int:showpreview}}\" um joew nieje css/js nao te kieken veurda'j t opslaon.",
-'usercsspreview' => "'''Dit is allinnig n kontrole van joew persoonlike CSS.'''
+'usercsspreview' => "'''Dit is allinnig n naokieksel van joew persoonlike CSS.'''
 '''t Is nog niet op-esleugen!'''",
 'userjspreview' => "'''Denk deran da'j joew persoonlike JavaScript allinnig nog mer an t bekieken bin, t is nog niet op-esleugen!'''",
 'sitecsspreview' => "'''Je bin allinnig mer de CSS an t naokieken.'''
 '''t Is nog niet op-esleugen!'''",
 'sitejspreview' => "'''Je bin allinnig mer de JavaScript-kode an t naokieken.'''
 '''t Is nog niet op-esleugen!'''",
-'userinvalidcssjstitle' => "'''Waorschuwing:''' der is gien uutvoering mit de naam \"\$1\". Vergeet niet dat joew eigen .css- en .js-pagina's beginnen mit n kleine letter, bv. \"{{ns:user}}:Naam/'''v'''ector\" in plaotse van \"{{ns:user}}:Naam/'''V'''ector.css\".",
+'userinvalidcssjstitle' => "'''Waorschuwing:''' der is gien uutvoering mit de naam \"\$1\". Vergeet niet dat joew eigen .css- en .js-ziejen beginnen mit n kleine letter, bv. \"{{ns:user}}:Naam/'''v'''ector\" in plaotse van \"{{ns:user}}:Naam/'''V'''ector.css\".",
 'updated' => '(Bewark)',
 'note' => "'''Opmarking:'''",
-'previewnote' => "'''Waort je: dit is n kontrolepagina.'''
+'previewnote' => "'''Waort je: dit is n naokiekzied.'''
 Joew tekste is niet op-esleugen!",
 'continue-editing' => 'Deurgaon mit bewarken',
-'previewconflict' => "Disse versie laot zien hoe de tekste in t bovenste veld deruut kump te zien a'j de tekste opslaon.",
+'previewconflict' => "Disse versie löt zien hoe de tekste in t bovenste veld deruut kömp te zien a'j de tekste opslaon.",
 'session_fail_preview' => "'''De bewarking kan niet verwarkt wörden wegens n verlies an data.'''
 Probeer t laoter weer.
-As t probleem dan nog steeds veurkump, probeer dan [[Special:UserLogout|opniej an te melden]].",
+As t probleem dan nog steeds veurkömp, probeer dan [[Special:UserLogout|opniej an te melden]].",
 'session_fail_preview_html' => "'''De bewarking kan niet verwarkt wörden wegens n verlies an data.'''
 
-''Umdat in {{SITENAME}} roewe HTML in-eschakeld is, is de weergave dervan verbörgen um te veurkoemen dat t JavaScript an-evuilen wörden.''
+''Umdat in {{SITENAME}} roewe HTML in-eschakeld is, is de weergave dervan verbörgen um te veurkoemen dat t JavaScript an-evöllen wörden.''
 
 '''As dit n legitieme wieziging is, probeer t dan opniej.'''
-As t dan nog problemen geef, probeer dan um [[Special:UserLogout|opniej an te melden]].",
-'token_suffix_mismatch' => "'''De bewarking is eweigerd umdat de webkieker de leestekens in t bewarkingstoken verkeerd behaandeld hef. De bewarking is eweigerd um verminking van de paginatekste te veurkoemen. Dit gebeurt soms as der n web-ebaseerden proxydienst gebruukt wörden waor fouten in zitten.'''",
+As t dan nog problemen gif, probeer dan um [[Special:UserLogout|opniej an te melden]].",
+'token_suffix_mismatch' => "'''De bewarking is eweigerd umdat de webkieker de leestekens in t bewarkingstoken verkeerd behaandeld hef. De bewarking is eweigerd um verminking van de ziedtekste te veurkoemen. Dit gebeurt soms as der n web-ebaseerden proxydienst gebruukt wörden waor fouten in zitten.'''",
 'edit_form_incomplete' => "'''Partie delen van t bewarkingsformulier hebben de server niet bereikt. Kiek eers nao of de bewarkingen kloppen en probeer t opniej.'''",
-'editing' => 'Bewark: $1',
-'creating' => 'Bezig mit t anmaken van $1',
-'editingsection' => 'Bewark: $1 (deelpagina)',
-'editingcomment' => 'Bewark: $1 (niej onderwarp)',
-'editconflict' => 'Bewarkingskonflikt: $1',
-'explainconflict' => "'''NB:''' n aander hef disse pagina ewiezigd naoda'j an disse bewarking begunnen bin.
-t Bovenste bewarkingsveld laot de pagina zien zo as t noen is.
-Daoronder (bie \"Wiezigingen\") staon de verschillen tussen joew versie en de op-esleugen pagina.
+'editing' => 'Bewarken: $1',
+'creating' => 'Anmaken: $1',
+'editingsection' => 'Bewarken: $1 (deelzied)',
+'editingcomment' => 'Bewarken: $1 (niej onderwarp)',
+'editconflict' => 'Tegelieke bewörken: $1',
+'explainconflict' => "'''NB:''' n aander hef disse zied ewiezigd naoda'j an disse bewarking begunnen bin.
+t Bovenste bewarkingsveld löt de zied zien zo as t noen is.
+Daoronder (bie \"Wiezigingen\") staon de verschillen tussen joew versie en de op-esleugen zied.
 Helemaole onderan (bie \"Joew tekste\") steet nog n bewarkingsveld mit joew versie.
 Je zullen je eigen wiezigingen in de nieje tekste in mutten passen.
 '''Allinnig''' de tekste in t bovenste veld wörden beweerd a'j noen kiezen veur \"{{int:savearticle}}\".",
 'yourtext' => 'Joew tekste',
 'storedversion' => 'Op-esleugen versie',
-'nonunicodebrowser' => "'''Waorschuwing: de webkieker kan niet goed overweg mit unikode, schakel over op n aandere webkieker um de wiezigingen an te brengen!'''",
-'editingold' => "'''Waorschuwing: je bewarken noen n ouwe versie van disse pagina. A'j de wiezigingen opslaon, gaon alle niejere versies verleuren.'''",
+'nonunicodebrowser' => "'''Waorschuwing: joew webkieker kan niet goed mit unikode uut de voten, schakel over op n aandere webkieker um de wiezigingen an te brengen!'''",
+'editingold' => "'''Waorschuwing: je bewarken noen n ouwe versie van disse zied. A'j de wiezigingen opslaon, bi'j alle niejere versies kwiet.'''",
 'yourdiff' => 'Wiezigingen',
 'copyrightwarning' => "Waort je dat alle biedragen an {{SITENAME}} vrie-egeven mutten wörden onder de \$2 (zie \$1 veur meer informasie).
 A'j niet willen dat joew tekste deur aander volk bewarkt en verspreid kan wörden, slao de tekste dan niet op.<br />
-Deur op \"Pagina opslaon\" te klikken beleuf je ons da'j disse tekste zelf eschreven hebben, of over-eneumen hebben uut n vrieje, openbaore bron.<br />
+Deur op \"Zied opslaon\" te klikken beleuf je ons da'j disse tekste zelf eschreven hebben, of over-eneumen hebben uut n vrieje, openbaore bron.<br />
 '''Gebruuk gien spul mit auteursrechten, a'j daor gien toestemming veur hebben!'''",
 'copyrightwarning2' => "Waort je dat alle biedragen an {{SITENAME}} deur aander volk bewarkt of vortedaon kan wörden. A'j niet willen dat joew tekste deur aander volk bewarkt wörden, slao de tekste dan niet op.<br />
-Deur op \"Pagina opslaon\" te klikken beleuf je ons da'j disse tekste zelf eschreven hebben, of over-eneumen hebben uut n vrieje, openbaore bron (zie \$1 veur meer informasie).
+Deur op \"Zied opslaon\" te klikken beleuf je ons da'j disse tekste zelf eschreven hebben, of over-eneumen hebben uut n vrieje, openbaore bron (zie \$1 veur meer informasie).
 '''Gebruuk gien spul mit auteursrechten, a'j daor gien toestemming veur hebben!'''",
 'longpageerror' => "'''Foutmelding: de tekste die'j opslaon willen is {{PLURAL:$1|een kilobyte|$1 kilobytes}}. Dit is groter as t toe-estaone maximum van $2 kilobytes. Joew tekste kan niet op-esleugen wörden.'''",
-'readonlywarning' => "'''Waorschuwing: De databanke is op dit moment in onderhoud; t is daorumme niet meugelik um pagina's te wiezigen.
-Je kunnen de tekste t beste bie joew eigen systeem opslaon en laoter opniej proberen de pagina te bewarken.'''
+'readonlywarning' => "'''Waorschuwing: De databanke is op dit moment in onderhoud; t is daorumme niet meugelik um ziejen te wiezigen.
+Je kunnen de tekste t beste bie joew eigen systeem opslaon en laoter opniej proberen de zied te bewarken.'''
 
 As grund is angeven: $1",
-'protectedpagewarning' => "'''Waorschuwing: disse pagina is beveiligd, zodat allinnig beheerders t kunnen wiezigen.'''
+'protectedpagewarning' => "'''Waorschuwing: disse zied is beveiligd, zodat allinnig beheerders t kunnen wiezigen.'''
 De leste logboekregel steet hieronder:",
-'semiprotectedpagewarning' => "'''Let op:''' disse pagina is beveiligd en ku'j allinnig bewarken a'j n eregistreerden gebruker bin.
+'semiprotectedpagewarning' => "'''Let op:''' disse zied is beveiligd en ku'j allinnig bewarken a'j n eregistreerden gebruker bin.
 De leste logboekregel steet hieronder:",
-'cascadeprotectedwarning' => "'''Waorschuwing:''' disse pagina is beveiligd, zodat allinnig beheerders disse pagina kunnen bewarken, dit wörden edaon umdat disse pagina veurkump in de volgende {{PLURAL:$1|kaskade-beveiligden pagina|kaskade-beveiligden pagina's}}:",
-'titleprotectedwarning' => "'''Waorschuwing: disse pagina is beveilig. Je hebben [[Special:ListGroupRights|bepaolde rechten]] neudig um t an te kunnen maken.'''
+'cascadeprotectedwarning' => "'''Waorschuwing:''' disse zied is beveiligd, zodat allinnig beheerders disse zied bewarken kunnen, dit wörden edaon umdat disse zied veurkömp in de volgende {{PLURAL:$1|kaskade-beveiligden zied|kaskade-beveiligden ziejen}}:",
+'titleprotectedwarning' => "'''Waorschuwing: disse zied is beveiligd. Je hebben [[Special:ListGroupRights|bepaolde rechten]] neudig um t an te kunnen maken.'''
 De leste logboekregel steet hieronder:",
-'templatesused' => '{{PLURAL:$1|Mal|Mallen}} die op disse pagina gebruukt wörden:',
+'templatesused' => '{{PLURAL:$1|Mal|Mallen}} die op disse zied gebruukt wörden:',
 'templatesusedpreview' => '{{PLURAL:$1|Mal|Mallen}} die in disse bewarking gebruukt wörden:',
 'templatesusedsection' => '{{PLURAL:$1|Mal|Mallen}} die in dit subkopjen gebruukt wörden:',
-'template-protected' => '(beveilig)',
-'template-semiprotected' => '(semibeveilig)',
-'hiddencategories' => 'Disse pagina vuilt in de volgende verbörgen {{PLURAL:$1|kategorie|kategorieën}}:',
+'template-protected' => '(beveiligd)',
+'template-semiprotected' => '(half-beveiligd)',
+'hiddencategories' => 'Disse zied völt in de volgende verbörgen {{PLURAL:$1|kategorie|kategorieën}}:',
 'edittools' => '<!-- Disse tekste steet onder de bewarkings- en bestaandinlaodformulieren. -->',
-'nocreatetitle' => "t Anmaken van pagina's is beteund",
-'nocreatetext' => "Disse webstee hef de meugelikheid um nieje pagina's an te maken beteund. Je kunnen pagina's die al bestaon wiezigen of je kunnen je [[Special:UserLogin|anmelden of n gebrukerspagina anmaken]].",
-'nocreate-loggedin' => "Je hebben gien toestemming um nieje pagina's an te maken.",
+'nocreatetitle' => 't Anmaken van nieje ziejen is beteund',
+'nocreatetext' => 'Disse webstee hef de meugelikheid um nieje ziejen an te maken beteund. Je kunnen ziejen die al bestaon wiezigen of je kunnen je [[Special:UserLogin|anmelden of n gebrukerszied anmaken]].',
+'nocreate-loggedin' => 'Je hebben gien toestemming um nieje ziejen an te maken.',
 'sectioneditnotsupported-title' => 't Bewarken van seksies wörden niet ondersteund',
-'sectioneditnotsupported-text' => 'Je kunnen op disse pagina gien seksies bewarken.',
+'sectioneditnotsupported-text' => 'Je kunnen op disse zied gien seksies bewarken.',
 'permissionserrors' => 'Fouten mit de rechten',
 'permissionserrorstext' => 'Je maggen of kunnen dit niet doon. De {{PLURAL:$1|reden|redens}} daorveur {{PLURAL:$1|is|bin}}:',
 'permissionserrorstext-withaction' => 'Je hebben gien rech um $2, mit de volgende {{PLURAL:$1|reden|redens}}:',
-'recreate-moveddeleted-warn' => "'''Waorschuwing: je maken n pagina an die eerder al vortedaon is.'''
+'recreate-moveddeleted-warn' => "'''Waorschuwing: je maken n zied an die eerder al vortedaon is.'''
 
-Bedenk eers of t neudig is um disse pagina veerder te bewarken.
-Veur de dudelikheid steet hieronder  t vortdologboek en t herneumlogboek veur disse pagina:",
-'moveddeleted-notice' => 'Disse pagina is vortedaon.
+Bedenk eerst of t neudig is um disse zied veerder te bewarken.
+Veur de dudelikheid steet hieronder  t vortdologboek en t herneumlogboek veur disse zied:",
+'moveddeleted-notice' => 'Disse zied is vortedaon.
 Hieronder steet de informasie uut t vortdologboek en t herneumlogboek.',
 'log-fulllog' => 't Hele logboek bekieken',
 'edit-hook-aborted' => 'De bewarking is aofebreuken deur n hook.
 Der is gien reden op-egeven.',
-'edit-gone-missing' => 'De pagina kon niet bie-ewörken wörden.
+'edit-gone-missing' => 'De zied kon niet bie-ewörken wörden.
 t Schient dat t vortedaon is.',
-'edit-conflict' => 'Bewarkingskonflikt.',
+'edit-conflict' => 'Tegelieke bewörken.',
 'edit-no-change' => 'Joew bewarking is enegeerd, umdat der gien wieziging an de tekste edaon is.',
-'edit-already-exists' => 'De pagina kon niet an-emaakt wörden.
+'edit-already-exists' => 'De zied kon niet an-emaakt wörden.
 t Besteet al.',
 'defaultmessagetext' => 'Standardtekste',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => 'Waorschuwing: disse pagina gebruukt te veule kostbaore parserfunksies.
+'expensive-parserfunction-warning' => 'Waorschuwing: disse zied gebruukt te veule kostbaore parserfunksies.
 
 Noen {{PLURAL:$1|is|bin}} t der $1, terwiel t der minder as $2 {{PLURAL:$2|mut|mutten}} ween.',
-'expensive-parserfunction-category' => "Pagina's die te veule kostbaore parserfunksies gebruken",
+'expensive-parserfunction-category' => 'Ziejen die te veule kostbaore parserfunksies gebruken',
 'post-expand-template-inclusion-warning' => 'Waorschuwing: de grootte van de in-evoegden mal is te groot.
 Sommigen mallen wörden niet in-evoegd.',
-'post-expand-template-inclusion-category' => "Pagina's die over de maximumgrootte veur in-evoegden mallen hinne gaon",
-'post-expand-template-argument-warning' => 'Waorschuwing: disse pagina gebruuk tenminsten één parameter in n mal, die te groot is as t uuteklap wörden. Disse parameters wörden vorteleuten.',
-'post-expand-template-argument-category' => "Pagina's mit ontbrekende malelementen",
+'post-expand-template-inclusion-category' => 'Ziejen die over de maximumgrootte veur in-evoegden mallen hinne gaon',
+'post-expand-template-argument-warning' => 'Waorschuwing: disse zied gebruuk tenminsten één parameter in n mal, die te groot is as t uuteklap wörden. Disse parameters wörden vorteleuten.',
+'post-expand-template-argument-category' => 'Ziejen mit ontbrekende malelementen',
 'parser-template-loop-warning' => 'Der is n kringloop in mallen waoreneumen: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Der is over de rekursiediepte veur mallen is hinne gaon ($1)',
 'language-converter-depth-warning' => 'Je hebben t dieptelimiet veur de taalumzetter bereikt ($1)',
-'node-count-exceeded-category' => "Pagina's die t knuppenantal overschrejen hebben.",
-'node-count-exceeded-warning' => 'Op de pagina is t maximale antal nodes overschrejen',
-'expansion-depth-exceeded-category' => "Pagina's waor de expansiediepte overschrejen is",
-'expansion-depth-exceeded-warning' => 'In disse pagina staon te veul mallen',
+'node-count-exceeded-category' => 'Ziejen die t knuppenantal overschrejen hebben.',
+'node-count-exceeded-warning' => 'Op de zied is t maximale antal nodes overschrejen',
+'expansion-depth-exceeded-category' => 'Ziejen waor de expansiediepte overschrejen is',
+'expansion-depth-exceeded-warning' => 'Op disse zied staon te veule mallen',
 'parser-unstrip-loop-warning' => 'Der is n "unstrip"-lusse evunnen',
 'parser-unstrip-recursion-limit' => 'De rekursielimiet ($1) veur "unstrip" is overschrejen',
 
 # "Undo" feature
-'undo-success' => 'De bewarking kan weerummedreid wörden. Kiek de vergelieking hieronder nao um der wisse van de ween dat alles goed is, en slao de de pagina op um de bewarking weerumme te dreien.',
+'undo-success' => 'De bewarking kan weerummedreid wörden. Kiek de vergelieking hieronder nao um der wisse van de ween dat alles goed is, en slao de de zied op um de bewarking weerumme te dreien.',
 'undo-failure' => 'De wieziging kon niet weerummedreid wörden umdat t ondertussen awweer ewiezigd is.',
 'undo-norev' => 'De bewarking kon niet weerummedreid wörden, umdat t niet besteet of vortedaon is.',
 'undo-summary' => 'Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) weerummedreid.',
@@ -1102,8 +1102,8 @@ Sommigen mallen wörden niet in-evoegd.',
 De deur $3 op-egeven reden is ''$2''",
 
 # History pages
-'viewpagelogs' => 'Bekiek logboeken veur disse pagina',
-'nohistory' => 'Der bin gien eerdere versies van disse pagina.',
+'viewpagelogs' => 'Bekiek logboeken veur disse zied',
+'nohistory' => 'Der bin gien eerdere versies van disse zied.',
 'currentrev' => 'Leste versie',
 'currentrev-asof' => 'Leste versie van $1',
 'revisionasof' => 'Versie op $1',
@@ -1126,9 +1126,9 @@ De deur $3 op-egeven reden is ''$2''",
 
 # Revision feed
 'history-feed-title' => 'Wiezigingsoverzichte',
-'history-feed-description' => 'Wiezigingsoverzichte veur disse pagina op de wiki',
+'history-feed-description' => 'Wiezigingsoverzichte veur disse zied op de wiki',
 'history-feed-item-nocomment' => '$1 op $2',
-'history-feed-empty' => "De op-evreugen pagina besteet niet. t Kan ween dat disse pagina vortedaon is of dat t herneumd is. Probeer te [[Special:Search|zeuken]] naor soortgelieke nieje pagina's.",
+'history-feed-empty' => 'De op-evreugen zied besteet niet. t Kan ween dat disse zied vortedaon is of dat t herneumd is. Probeer te [[Special:Search|zeuken]] naor soortgelieke nieje ziejen.',
 
 # Revision deletion
 'rev-deleted-comment' => '(bewarkingsopmarking vortedaon)',
@@ -1203,7 +1203,7 @@ $1",
 'revdel-restore' => 'Zichtbaorheid wiezigen',
 'revdel-restore-deleted' => 'vortedaone versies',
 'revdel-restore-visible' => 'zichtbaore versies',
-'pagehist' => 'Paginageschiedenisse',
+'pagehist' => 'Ziedgeschiedenisse',
 'deletedhist' => 'Geschiedenisse die vortehaold is',
 'revdelete-hide-current' => 'Fout bie t verbargen van t objekt van $1 um $2 uur: dit is de versie van noen.
 Disse versie kan niet verbörgen wörden.',
@@ -1211,7 +1211,7 @@ Disse versie kan niet verbörgen wörden.',
 Je hebben gien toegang tot dit objekt.',
 'revdelete-modify-no-access' => 'Fout bie t wiezigen van t objekt van $1 um $2 uur: dit objekt is emarkeerd as "beveilig".
 Je hebben gien toegang tot dit objekt.',
-'revdelete-modify-missing' => 'Fout bie t wiezigen van versienummer $1: t kump niet veur in de databanke!',
+'revdelete-modify-missing' => 'Fout bie t wiezigen van versienummer $1: t kömp niet veur in de databanke!',
 'revdelete-no-change' => "'''Waorschuwing:''' t objekt van $1 um $2 uur had al de an-egeven zichtbaorheidsinstellingen.",
 'revdelete-concurrent-change' => 'Fout bie t wiezigen van t objekt van $1 um $2 uur: de staotus is inmiddels ewiezigd deur n aander.
 Kiek de logboeken nao.',
@@ -1227,42 +1227,42 @@ Kiek de logboeken nao.',
 
 # Suppression log
 'suppressionlog' => 'Verbargingslogboek',
-'suppressionlogtext' => "In de onderstaande lieste staon de vortedaone pagina's en blokkeringen die veur beheerders verbörgen bin. 
-In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toepassige bin, te bekieken.",
+'suppressionlogtext' => 'In de onderstaande lieste staon de vortedaone ziejen en blokkeringen die veur beheerders verbörgen bin. 
+In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toepassige bin, te bekieken.',
 
 # History merging
-'mergehistory' => "Geschiedenisse van pagina's bie mekaar doon",
-'mergehistory-header' => "Via disse pagina ku'j versies uut de geschiedenisse van n bronpagina mit n niejere pagina samenvoegen. Zörg derveur dat disse versies uut de geschiedenisse histories juus bin.",
-'mergehistory-box' => "Geschiedenisse van twee pagina's bie mekaar doon:",
-'mergehistory-from' => 'Bronpagina:',
-'mergehistory-into' => 'Bestemmingspagina:',
+'mergehistory' => 'Geschiedenisse van ziejen bie mekaar doon',
+'mergehistory-header' => "Via disse zied ku'j versies uut de geschiedenisse van n bronzied mit n niejere zied samenvoegen. Zörg derveur dat disse versies uut de geschiedenisse histories juus bin.",
+'mergehistory-box' => 'Geschiedenisse van twee ziejen bie mekaar doon:',
+'mergehistory-from' => 'Bronzied:',
+'mergehistory-into' => 'Bestemmingszied:',
 'mergehistory-list' => 'Bewarkingsgeschiedenisse die bie mekaar edaon kan wörden',
 'mergehistory-merge' => 'De volgende versies van [[:$1]] kunnen samenevoegd wörden naor [[:$2]]. Gebruuk de kolom mit keuzerondjes um allinnig de versies die emaak bin op en veur de an-egeven tied samen te voegen. Let op dat t gebruken van de navigasieverwiezingen disse kolom zal herinstellen.',
 'mergehistory-go' => 'Bekiek bewarkingen die bie mekaar edaon kunnen wörden',
 'mergehistory-submit' => 'Versies bie mekaar doon',
 'mergehistory-empty' => 'Der bin gien versies die samenevoegd kunnen wörden.',
 'mergehistory-success' => '$3 {{PLURAL:$3|versie|versies}} van [[:$1]] bin suksesvol samenevoegd naor [[:$2]].',
-'mergehistory-fail' => 'Kan gien geschiedenisse samenvoegen, kiek opniej de pagina- en tiedparameters nao.',
-'mergehistory-no-source' => 'Bronpagina $1 besteet niet.',
-'mergehistory-no-destination' => 'Bestemmingspagina $1 besteet niet.',
-'mergehistory-invalid-source' => 'De bronpagina mut n geldige titel ween.',
-'mergehistory-invalid-destination' => 'De bestemmingspagina mut n geldige titel ween.',
+'mergehistory-fail' => 'Kan gien geschiedenisse samenvoegen, kiek opniej de zied- en tiedparameters nao.',
+'mergehistory-no-source' => 'Bronzied $1 besteet niet.',
+'mergehistory-no-destination' => 'Bestemmingszied $1 besteet niet.',
+'mergehistory-invalid-source' => 'De bronzied mut n geldige titel ween.',
+'mergehistory-invalid-destination' => 'De bestemmingszied mut n geldige titel ween.',
 'mergehistory-autocomment' => '[[:$1]] samenevoegd naor [[:$2]]',
 'mergehistory-comment' => '[[:$1]] samenevoegd naor [[:$2]]: $3',
-'mergehistory-same-destination' => 'De bronpagina en doelpagina kunnen niet t zelfde ween',
+'mergehistory-same-destination' => 'De bronzied en doelzied kunnen niet t zelfde ween',
 'mergehistory-reason' => 'Reden:',
 
 # Merge log
 'mergelog' => 'Samenvoegingslogboek',
 'pagemerge-logentry' => 'voegen [[$1]] naor [[$2]] samen (versies tot en mit $3)',
 'revertmerge' => 'Samenvoeging weerummedreien',
-'mergelogpagetext' => "Hieronder zie'j n lieste van de leste samenvoegingen van n paginageschiedenisse naor n aandere.",
+'mergelogpagetext' => "Hieronder zie'j n lieste van de leste samenvoegingen van n ziedgeschiedenisse naor n aandere.",
 
 # Diffs
 'history-title' => 'Versiegeschiedenisse van "$1"',
 'difference-title' => 'Verschil tussen versies van "$1"',
-'difference-title-multipage' => 'Verschil tussen pagina\'s "$1" en "$2"',
-'difference-multipage' => "(Verschil tussen pagina's)",
+'difference-title-multipage' => 'Verschil tussen ziejen "$1" en "$2"',
+'difference-multipage' => '(Verschil tussen ziejen)',
 'lineno' => 'Regel $1:',
 'compareselectedversions' => 'Vergeliek de ekeuzen versies',
 'showhideselectedversions' => 'Ekeuzen versies bekieken/verbargen',
@@ -1274,7 +1274,7 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'searchresults' => 'Zeukresultaoten',
 'searchresults-title' => 'Zeukresultaoten veur "$1"',
 'searchresulttext' => 'Veur meer informasie over zeuken op {{SITENAME}}, zie [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => 'Je zöchten naor \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|alle pagina\'s die beginnen mit "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle pagina\'s die verwiezen naor "$1"]])',
+'searchsubtitle' => 'Je zöchten naor \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|alle ziejen die beginnen mit "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle ziejen die verwiezen naor "$1"]])',
 'searchsubtitleinvalid' => 'Veur zeukopdrachte "$1"',
 'toomanymatches' => 'Der waren te veule resultaoten. Probeer n aandere zeukopdrachte.',
 'titlematches' => 'Overeenkomst mit t onderwarp',
@@ -1285,22 +1285,22 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'nextn' => 'volgende {{PLURAL:$1|$1}}',
 'prevn-title' => '{{PLURAL:$1|Veurig resultaot|Veurige $1 resultaoten}}',
 'nextn-title' => '{{PLURAL:$1|Volgend resultaot|Volgende $1 resultaoten}}',
-'shown-title' => 'Laot $1 {{PLURAL:$1|resultaot|resultaoten}} per pagina zien',
+'shown-title' => 'Laot $1 {{PLURAL:$1|resultaot|resultaoten}} per zied zien',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Zeukopsies',
-'searchmenu-exists' => "* Pagina '''[[$1]]'''",
-'searchmenu-new' => "'''De pagina \"[[:\$1]]\" op disse wiki anmaken!'''",
+'searchmenu-exists' => "'''Der is n zied mit de naam \"[[:\$1]]\" op disse wiki.'''",
+'searchmenu-new' => "'''De zied \"[[:\$1]]\" op disse wiki anmaken!'''",
 'searchhelp-url' => 'Help:Inhold',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Paginanamen mit dit veurvoegsel laoten zien]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Ziednamen mit dit veurvoegsel laoten zien]]',
 'searchprofile-articles' => 'Artikels',
-'searchprofile-project' => "Hulp- en projektpagina's",
+'searchprofile-project' => 'Hulp- en projektziejen',
 'searchprofile-images' => 'Multimedia',
 'searchprofile-everything' => 'Alles',
 'searchprofile-advanced' => 'Uutebreid',
 'searchprofile-articles-tooltip' => 'Zeuken in $1',
 'searchprofile-project-tooltip' => 'Zeuken in $1',
 'searchprofile-images-tooltip' => 'Zeuken naor bestaanden',
-'searchprofile-everything-tooltip' => "Alle inhoud deurzeuken (oek overlegpagina's)",
+'searchprofile-everything-tooltip' => 'Alle inhoud deurzeuken (oek overlegziejen)',
 'searchprofile-advanced-tooltip' => 'Zeuken in de an-egeven naamruumtes',
 'search-result-size' => '$1 ({{PLURAL:$2|1 woord|$2 woorden}})',
 'search-result-category-size' => '{{PLURAL:$1|1 kategorielid|$1 kategorielejen}} ({{PLURAL:$2|1 onderkategorie|$2 onderkategorieën}}, {{PLURAL:$3|1 bestaand|$3 bestaanden}})',
@@ -1321,7 +1321,7 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'showingresults' => "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}}  <b>$1</b> vanaof nummer <b>$2</b>.",
 'showingresultsnum' => "Hieronder {{PLURAL:$3|steet '''1''' resultaot|staon '''$3''' resultaoten}} vanaof nummer '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultaot '''$1''' van '''$3'''|Resultaoten '''$1 - $2''' van '''$3'''}} veur '''$4'''",
-'nonefound' => "<strong>Let wel:</strong> standard wörden niet alle naamruumtes deurzöcht. A'j in zeukopdrachte as veurvoegsel \"''all:'' gebruken wörden alle pagina's deurzöcht (oek overlegpagina's, mallen en gao zo mer deur). Je kunnen oek n naamruumte as veurvoegsel gebruken.",
+'nonefound' => "<strong>Let wel:</strong> standard wörden niet alle naamruumtes deurzöcht. A'j in zeukopdrachte as veurvoegsel \"''all:'' gebruken wörden alle ziejen deurzöcht (oek overlegziejen, mallen en gao zo mer deur). Je kunnen oek n naamruumte as veurvoegsel gebruken.",
 'search-nonefound' => 'Der bin gien resultaoten veur de zeukopdrachte.',
 'powersearch' => 'Zeuk',
 'powersearch-legend' => 'Uutebreid zeuken',
@@ -1335,7 +1335,7 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'searchdisabled' => 'Zeuken in {{SITENAME}} is niet meugelik. Je kunnen gebruukmaken van Google. De gegevens over {{SITENAME}} bin misschien niet bie-ewörken.',
 
 # Quickbar
-'qbsettings' => 'Paginalieste',
+'qbsettings' => 'Lieste mit ziejen',
 'qbsettings-none' => 'Gien',
 'qbsettings-fixedleft' => 'Links, vaste',
 'qbsettings-fixedright' => 'Rechts, vaste',
@@ -1356,7 +1356,7 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'prefs-beta' => 'Bètafunksies',
 'prefs-datetime' => 'Daotum en tied',
 'prefs-labs' => 'Alphafunksies',
-'prefs-user-pages' => "Gebrukerspagina's",
+'prefs-user-pages' => 'Gebrukersziejen',
 'prefs-personal' => 'Gebrukersgegevens',
 'prefs-rc' => 'Leste wiezigingen',
 'prefs-watchlist' => 'Volglieste',
@@ -1370,7 +1370,7 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'prefs-changeemail' => 'Netpostadres wiezigen',
 'prefs-setemail' => 'Stel n netpostadres in',
 'prefs-email' => 'Instellingen veur netpost',
-'prefs-rendering' => 'Paginaweergave',
+'prefs-rendering' => 'Ziedweergave',
 'saveprefs' => 'Veurkeuren opslaon',
 'resetprefs' => 'Standardveurkeuren herstellen',
 'restoreprefs' => 'Alle standardinstellingen weerummezetten',
@@ -1379,13 +1379,13 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'rows' => 'Regels',
 'columns' => 'Kolommen',
 'searchresultshead' => 'Zeukresultaoten',
-'resultsperpage' => 'Antal zeukresultaoten per pagina',
+'resultsperpage' => 'Antal zeukresultaoten per zied',
 'stub-threshold' => 'Verwiezingsformattering van <a href="#" class="stub">beginnetjes</a>:',
-'stub-threshold-disabled' => 'uuteschakeld',
-'recentchangesdays' => 'Antal dagen die de lieste "leste wiezigingen" laot zien:',
+'stub-threshold-disabled' => 'uutezet',
+'recentchangesdays' => 'Antal dagen die "Leste wiezigingen" löt zien:',
 'recentchangesdays-max' => '(hooguut $1 {{PLURAL:$1|dag|dagen}})',
 'recentchangescount' => 'Standard antal bewarkingen um te laoten zien:',
-'prefs-help-recentchangescount' => "Dit geldt veur leste wiezigingen, paginageschiedenisse en logboekpagina's",
+'prefs-help-recentchangescount' => 'Dit geldt veur leste wiezigingen, ziedgeschiedenisse en logboekziejen',
 'prefs-help-watchlist-token' => "A'j in dit veld n geheime kode invullen, dan maakt t RSS-voer an veur joew volglieste.
 Iederene die disse kode weet kan joew volglieste bekieken, kies dus n veilige kode.
 Je kunnen oek disse egenereren standardkode gebruken: $1",
@@ -1416,7 +1416,7 @@ Je kunnen oek disse egenereren standardkode gebruken: $1",
 'prefs-custom-css' => 'Persoonlike CSS',
 'prefs-custom-js' => 'Persoonlike JS',
 'prefs-common-css-js' => 'Edeelden CSS/JS veur elke vormgeving:',
-'prefs-reset-intro' => 'Je kunnen disse pagina gebruken um joew veurkeuren naor de standardinstellingen weerumme te zetten.
+'prefs-reset-intro' => 'Je kunnen disse zied gebruken um joew veurkeuren naor de standardinstellingen weerumme te zetten.
 Disse haandeling kan niet ongedaonemaakt wörden.',
 'prefs-emailconfirm-label' => 'Netpostbevestiging:',
 'prefs-textboxsize' => 'Aofmetingen bewarkingsscharm',
@@ -1428,9 +1428,9 @@ Disse haandeling kan niet ongedaonemaakt wörden.',
 'yourrealname' => 'Echte naam (niet verplicht)',
 'yourlanguage' => 'Taal veur systeemteksten',
 'yourvariant' => 'Taalvariaant veur inhoud:',
-'prefs-help-variant' => "Joew veurkeursvariaant of -spelling um de inhoudspagina's van disse wiki in weer te geven.",
+'prefs-help-variant' => 'Joew veurkeursvariaant of -spelling um de inhoudsziejen van disse wiki in weer te geven.',
 'yournick' => 'Alias veur ondertekeningen',
-'prefs-help-signature' => 'Reaksies op de overlegpagina\'s mutten ondertekend wörden mit "<nowiki>~~~~</nowiki>", dit wörden dan ummezet in joew ondertekening mit daorbie de daotum en tied van de bewarking.',
+'prefs-help-signature' => 'Reaksies op de overlegziejen mutten ondertekend wörden mit "<nowiki>~~~~</nowiki>", dit wörden dan ummezet in joew ondertekening mit daorbie de daotum en tied van de bewarking.',
 'badsig' => 'Ongeldige haandtekening; HTML naokieken.',
 'badsiglength' => 'Joew haandtekening is te lang.
 t Mut minder as {{PLURAL:$1|letter|letters}} hebben.',
@@ -1443,7 +1443,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'email' => 'Privéberichten',
 'prefs-help-realname' => "* Echte naam (niet verplicht): a'j disse opsie invullen zu'w joew echte naam gebruken um erkenning te geven veur joew warkzaamheen.",
 'prefs-help-email' => "n Netpostadres is niet verplicht, mer zo ku'w wel joew wachtwoord toesturen veur a'j t vergeten bin.",
-'prefs-help-email-others' => "Je kunnen oek aandere meensen de meugelikheid geven um kontakt mit joe op te nemen mit n verwiezing op joew gebrukers- en overlegpagina zonder da'j de identiteit pries hoeven te geven.",
+'prefs-help-email-others' => "Je kunnen oek aandere meensen de meugelikheid geven um kontakt mit joe op te nemen mit n verwiezing op joew gebrukers- en overlegzied zonder da'j de identiteit pries hoeven te geven.",
 'prefs-help-email-required' => "Hier he'w n netpostadres veur neudig.",
 'prefs-info' => 'Baosisinformasie',
 'prefs-i18n' => 'Taalinstellingen',
@@ -1511,63 +1511,64 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'grouppage-suppress' => '{{ns:project}}:Toezichte',
 
 # Rights
-'right-read' => "Pagina's bekieken",
-'right-edit' => "Pagina's bewarken",
-'right-createpage' => "Pagina's anmaken",
-'right-createtalk' => "Overlegpagina's anmaken",
+'right-read' => 'Ziejen bekieken',
+'right-edit' => 'Ziejen bewarken',
+'right-createpage' => 'Ziejen anmaken',
+'right-createtalk' => 'Overlegziejen anmaken',
 'right-createaccount' => 'Nieje gebrukers anmaken',
 'right-minoredit' => 'Bewarkingen markeren as klein',
-'right-move' => "Pagina's herneumen",
-'right-move-subpages' => "Pagina's samen mit subpagina's verplaotsen",
-'right-move-rootuserpages' => "Gebrukerspagina's van t hoogste nivo herneumen",
+'right-move' => 'Ziejen herneumen',
+'right-move-subpages' => 'Ziejen samen mit de ziejen die deronder hangen verplaotsen',
+'right-move-rootuserpages' => 'Gebrukersziejen van t hoogste nivo herneumen',
 'right-movefile' => 'Bestaanden herneumen',
-'right-suppressredirect' => 'Gien deurverwiezing anmaken op de ouwe naam as n pagina herneumd wörden',
+'right-suppressredirect' => 'Gien deurverwiezing anmaken op de ouwe naam as n zied herneumd wörden',
 'right-upload' => 'Bestaanden opsturen',
 'right-reupload' => 'n Bestaond bestaand overschrieven',
 'right-reupload-own' => "Bestaanden overschrieven die'j der zelf bie ezet hebben",
 'right-reupload-shared' => 'Media uut de edeelden mediadatabanke plaotselik overschrieven',
 'right-upload_by_url' => 'Bestaanden inlaojen via n webadres',
-'right-purge' => 't Tussengeheugen van n pagina legen',
+'right-purge' => 't Tussengeheugen van n zied legen',
 'right-autoconfirmed' => 'Behaandeld wörden as n an-emelde gebruker',
 'right-bot' => 'Behaandeld wörden as n eautomatiseerd preces',
-'right-nominornewtalk' => "Kleine bewarkingen an n overlegpagina leien niet tot n melding 'nieje berichten'",
+'right-nominornewtalk' => "Kleine bewarkingen an n overlegzied leien niet tot n melding 'nieje berichten'",
 'right-apihighlimits' => 'Hoge API-limieten gebruken',
 'right-writeapi' => 'Bewarken via de API',
-'right-delete' => "Pagina's vortdoon",
-'right-bigdelete' => "Pagina's mit n grote geschiedenisse vortdoon",
-'right-deleterevision' => "Versies van pagina's verbargen",
+'right-delete' => 'Ziejen vortdoon',
+'right-bigdelete' => 'Ziejen mit n grote geschiedenisse vortdoon',
+'right-deletelogentry' => 'Bepaolde logboekregels vortdoon en weerummeplaotsen',
+'right-deleterevision' => 'Versies van ziejen verbargen',
 'right-deletedhistory' => 'Vortedaone versies bekieken, zonder te kunnen zien wat der vortedaon is',
 'right-deletedtext' => 'Bekiek vortedaone tekste en wiezigingen tussen vortedaone versies',
-'right-browsearchive' => "Vortedaone pagina's bekieken",
-'right-undelete' => "Vortedaone pagina's weerummeplaotsen",
+'right-browsearchive' => 'Vortedaone ziejen bekieken',
+'right-undelete' => 'Vortedaone ziejen weerummeplaotsen',
 'right-suppressrevision' => 'Verbörgen versies bekieken en weerummeplaotsen',
 'right-suppressionlog' => 'Niet-publieke logboeken bekieken',
 'right-block' => 'Aandere gebrukers de meugelikheid ontnemen um te bewarken',
 'right-blockemail' => 'n Gebruker t recht ontnemen um berichjes te versturen',
-'right-hideuser' => 'n Gebruker veur de overige gebrukers verbargen',
+'right-hideuser' => 'n Gebruker veur de aandere gebrukers verbargen',
 'right-ipblock-exempt' => 'IP-blokkeringen ummezeilen',
 'right-proxyunbannable' => "Blokkeringen veur proxy's gelden niet",
 'right-unblockself' => 'Eigen gebruker deblokkeren',
 'right-protect' => "Beveiligingsnivo's wiezigen",
-'right-editprotected' => "Beveiligden pagina's bewarken",
+'right-editprotected' => 'Beveiligden ziejen bewarken',
 'right-editinterface' => 't {{SITENAME}}-uterlik bewarken',
 'right-editusercssjs' => 'De CSS- en JS-bestaanden van aandere gebrukers bewarken',
 'right-editusercss' => 'De CSS-bestaanden van aandere gebrukers bewarken',
 'right-edituserjs' => 'De JS-bestaanden van aandere gebrukers bewarken',
-'right-rollback' => 'Gauw de leste bewarking(en) van n gebruker an n pagina weerummedreien',
+'right-rollback' => 'Gauw de leste bewarking(en) van n gebruker an n zied weerummedreien',
 'right-markbotedits' => 'Weerummedreien bewarkingen markeren as botbewarkingen',
 'right-noratelimit' => 'Hef gien tiedsaofhankelike beparkingen',
-'right-import' => "Pagina's uut aandere wiki's invoeren",
-'right-importupload' => "Pagina's vanuut n bestaand invoeren",
-'right-patrol' => 'Bewarkingen as ekontroleerd markeren',
-'right-autopatrol' => 'Bewarkingen wörden automaties as ekontroleerd emarkeerd',
-'right-patrolmarks' => 'Kontroletekens in leste wiezigingen bekieken',
-'right-unwatchedpages' => "Bekiek n lieste mit pagina's die niet op n volglieste staon",
-'right-mergehistory' => "De geschiedenisse van pagina's bie mekaar doon",
+'right-import' => "Ziejen uut aandere wiki's invoeren",
+'right-importupload' => 'Ziejen vanuut n bestaand invoeren',
+'right-patrol' => 'Bewarkingen as nao-ekeken markeren',
+'right-autopatrol' => 'Bewarkingen wörden automaties op nao-ekeken ezet',
+'right-patrolmarks' => 'Naokiektekens in "Leste wiezigingen" bekieken',
+'right-unwatchedpages' => 'Bekiek n lieste mit ziejen die niet op n volglieste staon',
+'right-mergehistory' => 'De geschiedenisse van ziejen bie mekaar doon',
 'right-userrights' => 'Alle gebrukersrechten bewarken',
 'right-userrights-interwiki' => "Gebrukersrechten van gebrukers in aandere wiki's wiezigen",
 'right-siteadmin' => 'De databanke blokkeren en weer vriegeven',
-'right-override-export-depth' => "Pagina's uutvoeren, oek de pagina's waor naor verwezen wörden, tot n diepte van 5",
+'right-override-export-depth' => 'Ziejen uutvoeren, oek de ziejen waor naor verwezen wörden, tot n diepte van 5',
 'right-sendemail' => 'Bericht versturen naor aandere gebrukers',
 'right-passwordreset' => 'Bekiek netpostberichten veur t opniej instellen van joew wachtwoord',
 
@@ -1579,37 +1580,37 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'rightsnone' => '(gien)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'disse pagina lezen',
-'action-edit' => 'disse pagina bewarken',
-'action-createpage' => "pagina's schrieven",
-'action-createtalk' => "overlegpagina's anmaken",
+'action-read' => 'disse zied lezen',
+'action-edit' => 'disse zied bewarken',
+'action-createpage' => 'ziejen schrieven',
+'action-createtalk' => 'overlegziejen anmaken',
 'action-createaccount' => 'disse gebruker anmaken',
 'action-minoredit' => 'disse bewarking as klein markeren',
-'action-move' => 'disse pagina herneumen',
-'action-move-subpages' => "disse pagina en de biebeheurende subpagina's herneumen",
-'action-move-rootuserpages' => "gebrukerspagina's van t hoogste nivo herneumen",
+'action-move' => 'disse zied herneumen',
+'action-move-subpages' => 'disse zied en de biebeheurende ziejen die deronder hangen herneumen',
+'action-move-rootuserpages' => 'gebrukersziejen van t hoogste nivo herneumen',
 'action-movefile' => 'dit bestaand herneumen',
 'action-upload' => 'dit bestaand opsturen',
 'action-reupload' => 'dit bestaonde bestaand overschrieven',
 'action-reupload-shared' => 'n aander bestaand over dit bestaand uut de edeelden mediadatabanke hinne zetten.',
 'action-upload_by_url' => 'dit bestaand vanaof n webadres inlaojen',
 'action-writeapi' => 'de schrief-API bewarken',
-'action-delete' => 'disse pagina vortdoon',
+'action-delete' => 'disse zied vortdoon',
 'action-deleterevision' => 'disse versie vortdoon',
-'action-deletedhistory' => 'de vortedaone versies van disse pagina bekieken',
-'action-browsearchive' => "vortedaone pagina's zeuken",
-'action-undelete' => 'disse pagina weerummeplaotsen',
+'action-deletedhistory' => 'de vortedaone versies van disse zied bekieken',
+'action-browsearchive' => 'vortedaone ziejen zeuken',
+'action-undelete' => 'disse zied weerummeplaotsen',
 'action-suppressrevision' => 'disse verbörgen versie bekieken en weerummeplaotsen',
 'action-suppressionlog' => 'dit bescharmde logboek bekieken',
 'action-block' => 'disse gebruker blokkeren',
-'action-protect' => 't beveiligingsnivo van disse pagina anpassen',
-'action-rollback' => 'bewarkingen van de leste gebruker die n pagina hef ewiezigd rap weerummedreien',
-'action-import' => 'disse pagina van n aandere wiki invoeren',
-'action-importupload' => 'disse pagina invoeren vanaof n op-estuurd bestaand',
-'action-patrol' => 'bewarkingen van aander volk as ekontroleerd markeren',
-'action-autopatrol' => 'eigen bewarkingen as ekontroleerd markeren',
-'action-unwatchedpages' => "bekiek de liest mit pagina's die niet evolgd wörden",
-'action-mergehistory' => 'de geschiedenisse van disse pagina samenvoegen',
+'action-protect' => 't beveiligingsnivo van disse zied anpassen',
+'action-rollback' => 'bewarkingen van de leste gebruker die n zied hef ewiezigd rap weerummedreien',
+'action-import' => 'disse zied van n aandere wiki invoeren',
+'action-importupload' => 'disse zied invoeren vanaof n op-estuurd bestaand',
+'action-patrol' => 'bewarkingen van aandere luui op nao-ekeken zetten',
+'action-autopatrol' => 'eigen bewarkingen op nao-ekeken zetten',
+'action-unwatchedpages' => 'bekiek de lieste mit ziejen die niet evolgd wörden',
+'action-mergehistory' => 'de geschiedenisse van disse zied samenvoegen',
 'action-userrights' => 'alle gebrukersrechten bewarken',
 'action-userrights-interwiki' => "de rechten van gebrukers op aandere wiki's bewarken",
 'action-siteadmin' => 'de databanke blokkeren of vriegeven',
@@ -1619,9 +1620,9 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'nchanges' => '$1 {{PLURAL:$1|wieziging|wiezigingen}}',
 'recentchanges' => 'Leste wiezigingen',
 'recentchanges-legend' => 'Opsies veur leste wiezigingen',
-'recentchanges-summary' => 'Op disse pagina ku-j de leste wiezigingen van disse wiki bekieken.',
+'recentchanges-summary' => "Op disse zied ku'j de leste wiezigingen van disse wiki bekieken.",
 'recentchanges-feed-description' => 'Zeuk naor de alderleste wiezingen op disse wiki in disse voer.',
-'recentchanges-label-newpage' => 'Mit disse bewarking is n nieje pagina an-emaakt',
+'recentchanges-label-newpage' => 'Mit disse bewarking is n nieje zied an-emaakt',
 'recentchanges-label-minor' => 'Dit is n kleine wieziging',
 'recentchanges-label-bot' => 'Disse bewarking is uutevoerd deur n bot',
 'recentchanges-label-unpatrolled' => 'Disse bewarking is nog niet nao-ekeken',
@@ -1657,29 +1658,29 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'recentchangeslinked-feed' => 'Volg verwiezigingen',
 'recentchangeslinked-toolbox' => 'Volg verwiezigingen',
 'recentchangeslinked-title' => 'Wiezigingen verwaant an $1',
-'recentchangeslinked-noresult' => 'Gien wiezigingen of pagina waornaor verwezen wörden in disse periode.',
-'recentchangeslinked-summary' => "Op disse spesiale pagina steet n lieste mit de leste wieziginen op pagina's waornaor verwezen wörden. Pagina's op [[Special:Watchlist|joew volglieste]] staon '''vet-edrokt'''.",
-'recentchangeslinked-page' => 'Paginanaam:',
-'recentchangeslinked-to' => "Bekiek wiezigingen op pagina's mit verwiezingen naor disse pagina",
+'recentchangeslinked-noresult' => 'Gien wiezigingen of zied waornaor verwezen wörden in disse periode.',
+'recentchangeslinked-summary' => "Op disse spesiale zied steet n lieste mit de leste wieziginen op ziejen waornaor verwezen wörden. Ziejen op [[Special:Watchlist|joew volglieste]] staon '''vet-edrokt'''.",
+'recentchangeslinked-page' => 'Ziednaam:',
+'recentchangeslinked-to' => 'Bekiek wiezigingen op ziejen mit verwiezingen naor disse zied',
 
 # Upload
 'upload' => 'Bestaand opsturen',
 'uploadbtn' => 'Bestaand opsturen',
-'reuploaddesc' => 'Weerumme naor t bestaandinlaodformulier.',
+'reuploaddesc' => 'Weerumme naor de opstuurzied',
 'upload-tryagain' => 'Bestaandsbeschrieving biewarken',
 'uploadnologin' => 'Niet an-emeld',
 'uploadnologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween um bestaanden toe te kunnen voegen.',
-'upload_directory_missing' => 'De bestaandinlaodmap ($1) is vort en kon niet an-emaakt wörden deur de webserver.',
+'upload_directory_missing' => 'De inlaojmap veur bestaanden ($1) is vort en kon niet an-emaakt wörden deur de webserver.',
 'upload_directory_read_only' => "Op t moment ku'j gien bestaanden opsturen vanwegen techniese problemen ($1).",
 'uploaderror' => 'Fout bie t inlaojen van t bestaand',
 'upload-recreate-warning' => "'''Waorschuwing: der is n bestaand mit disse naam vortedaon of herneumd.'''
 
-Hieronder steet t vortdologboek en t herneumlogboek veur disse pagina:",
+Hieronder steet t vortdologboek en t herneumlogboek veur disse zied:",
 'uploadtext' => "Gebruuk t formulier hieronder um bestaanden op te sturen.
 Um bestaanden te bekieken of te zeuken die eerder al op-estuurd bin, ku'j naor de [[Special:FileList|bestaandslieste]] gaon.
 Bestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smiezen houwen in t [[Special:Log/upload|logboek mit nieje bestaanden]] en t [[Special:Log/delete|vortdologboek]].
 
-Um t bestaand in te voegen in n pagina ku'j één van de volgende kodes gebruken:
+Um t bestaand in te voegen in n zied ku'j één van de volgende kodes gebruken:
 * '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''
 * '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternetieve tekste]]</nowiki>'''
 * '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
@@ -1727,9 +1728,9 @@ Zie de [[Special:NewFiles|uutstalling mit media]] veur n overzichte.',
 'windows-nonascii-filename' => 'Disse wiki ondersteunt gien bestaandsnamen mit spesiale tekens.',
 'fileexists' => "n Bestaand mit disse naam besteet al; voeg t bestaand onder n aandere naam toe.
 '''<tt>[[:$1]]</tt>''' [[$1|thumb]]",
-'filepageexists' => "De beschrievingspagina veur dit bestaand bestung al op '''<tt>[[:$1]]</tt>''', mer der besteet nog gien bestaand mit disse naam.
-De samenvatting die'j op-egeven hebben zal niet op de beschrievingspagina koemen.
-Bewark de pagina haandmaotig um joew beschrieving daor weer te geven.
+'filepageexists' => "De beschrievingszied veur dit bestaand bestung al op '''<tt>[[:$1]]</tt>''', mer der besteet nog gien bestaand mit disse naam.
+De samenvatting die'j op-egeven hebben zal niet op de beschrievingszied koemen.
+Bewark de zied haandmaotig um joew beschrieving daor weer te geven.
 [[$1|thumb]]",
 'fileexists-extension' => "n Bestaand mit n soortgelieke naam besteet al: [[$2|thumb]]
 * Naam van t bestaand da'j derbie zetten wollen: '''<tt>[[:$1]]</tt>'''
@@ -1755,11 +1756,11 @@ Bekiek t vortdologboek veurda'j veurdan gaon.",
 'savefile' => 'Bestaand opslaon',
 'uploadedimage' => 'Op-estuurd: [[$1]]',
 'overwroteimage' => 'Nieje versie van "[[$1]]" op-estuurd',
-'uploaddisabled' => 't Opsturen van bestaanden is uuteschakeld.',
-'copyuploaddisabled' => 't Opsturen van bestaanden via n webadres is uuteschakeld.',
+'uploaddisabled' => 't Opsturen van bestaanden is uutezet.',
+'copyuploaddisabled' => 't Opsturen van bestaanden via n webadres is uutezet.',
 'uploadfromurl-queued' => 'Joew bestaand is in de wachtrie ezet.',
-'uploaddisabledtext' => 't Opsturen van bestaanden is uuteschakeld.',
-'php-uploaddisabledtext' => 't Opsturen van PHP-bestaanden is uuteschakeld. Kiek de instellingen veur t opsturen van bestaanden effen nao.',
+'uploaddisabledtext' => 't Opsturen van bestaanden is uutezet.',
+'php-uploaddisabledtext' => 't Opsturen van PHP-bestaanden is uutezet. Kiek de instellingen veur t opsturen van bestaanden effen nao.',
 'uploadscripted' => 'In dit bestaand steet HTML- of skriptkode die verkeerd elezen kan wörden deur de webkieker.',
 'uploadvirus' => 'In dit bestaand zit n virus! Gegevens: $1',
 'uploadjava' => 't Bestaand is n ZIP-bestaand waor n Java .class-bestaand in zit.
@@ -1782,7 +1783,7 @@ t Inlaojen van Java-bestaanden is niet toe-estaon umdat hiermee beveiligingsinst
 $1',
 'upload-warning-subj' => 'Waorschuwing veur t opsturen van bestaanden',
 'upload-warning-msg' => 'Der was n probleem mit t inlaojen van t bestaand [$2].
-Gao weerumme naor t [[Special:Upload/stash/$1|bestaandinlaodformulier]] um dit probleem te verhelpen.',
+Gao weerumme naor t [[Special:Upload/stash/$1|opstuurformulier]] um dit probleem te verhelpen.',
 
 'upload-proto-error' => 'Verkeerd protokol',
 'upload-proto-error-text' => 'Um op disse maniere bestaanden toe te voegen mutten webadressen beginnen mit <code>http://</code> of <code>ftp://</code>.',
@@ -1836,22 +1837,23 @@ As t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/
 'lockmanager-fail-releaselock' => 'Kon vergrendeling van "$1" der niet aof haolen.',
 'lockmanager-fail-db-bucket' => 'Kon niet in kontakt koemen mit genog vergrendelingsdatabanken in de nemmer $1.',
 'lockmanager-fail-db-release' => 'Kon de vergrendeling veur de databanke $1 niet deraof haolen.',
+'lockmanager-fail-svr-acquire' => 'Kon gien vergrendeling op server $1 zetten.',
 'lockmanager-fail-svr-release' => 'Kon de vergrendeling veur de server $1 der niet aof haolen.',
 
 # ZipDirectoryReader
-'zip-file-open-error' => 'Der is wat fout egaon bie t los doon van t bestaand veur de ZIP-kontrole.',
+'zip-file-open-error' => 'Der is wat fout egaon bie t los doon van t bestaand veur de ZIP-kontraole.',
 'zip-wrong-format' => 't Op-egeven bestaand was gien ZIP-bestaand.',
 'zip-bad' => 't Bestaand is beschaodig of is n onleesbaor ZIP-bestaand.
-De veiligheid kan niet ekontroleerd wörden.',
+De veiligheid kan niet nao-ekeken wörden.',
 'zip-unsupported' => 't Bestaand is n ZIP-bestaand dat gebruukmaak van ZIP-meugelikheen die MediaWiki niet ondersteunt.
-De veiligheid kan niet ekontroleerd wörden.',
+De veiligheid kan niet nao-ekeken wörden.',
 
 # Special:UploadStash
 'uploadstash' => 'Verbörgen bestaanden',
-'uploadstash-summary' => 'Disse pagina geef toegang tot bestaanden die op-estuurd bin of nog op-estuurd wörden mer nog niet beschikbaor emaakt bin op de wiki. Disse bestaanden bin allinnig zichtbaor veur de gebruker die ze opstuurt.',
+'uploadstash-summary' => 'Disse zied gif toegang tot bestaanden die op-estuurd bin of nog op-estuurd wörden mer nog niet beschikbaor emaakt bin op de wiki. Disse bestaanden bin allinnig zichtbaor veur de gebruker die ze opstuurt.',
 'uploadstash-clear' => 'Verbörgen bestaanden vortdoon',
 'uploadstash-nofiles' => 'Der bin gien verbörgen bestaanden.',
-'uploadstash-badtoken' => 't Uutvoeren van de haandeling is mislokt. Dit kump warschienlik deurdat joew bewarkingsreferensies verleupen bin. Probeer t opniej.',
+'uploadstash-badtoken' => 't Uutvoeren van de haandeling is mislokt. Dit kömp waorschienlik deurdat joew bewarkingsreferensies verleupen bin. Probeer t opniej.',
 'uploadstash-errclear' => 't Vortdoon van de bestaanden is mislokt.',
 'uploadstash-refresh' => 'Lieste mit bestaanden biewarken',
 'invalid-chunk-offset' => 'Ongeldig startpunt',
@@ -1862,8 +1864,8 @@ De veiligheid kan niet ekontroleerd wörden.',
 Joew server is niet in-esteld um disse informasie deur te geven.
 Misschien gebruukt t CGI, en dan wörden img_auth niet ondersteund.
 Zie https://www.mediawiki.org/wiki/Manual:Image_Authorization veur meer informasie.',
-'img-auth-notindir' => 't Op-evreugen pad is niet de in-estelde bestaandinlaodmap',
-'img-auth-badtitle' => 'Kon gien geldige paginanaam maken van "$1".',
+'img-auth-notindir' => 't Op-evreugen pad is niet bekend in de in-estelden inlaojmap',
+'img-auth-badtitle' => 'Kon gien geldige ziednaam maken van "$1".',
 'img-auth-nologinnWL' => 'Je bin niet an-emeld en "$1" steet niet op de witte lieste.',
 'img-auth-nofile' => 'Bestaand "$1" besteet niet.',
 'img-auth-isdir' => 'Je proberen de map "$1" binnen te koemen.
@@ -1871,7 +1873,7 @@ Allinnig toegang tot bestaanden is toe-estaon.',
 'img-auth-streaming' => 'Bezig mit t streumen van "$1".',
 'img-auth-public' => 't Doel van img_auth.php is de uutvoer van bestaanden van n besleuten wiki.
 Disse wiki is in-esteld as publieke wiki.
-Um beveiligingsredens is img_auth.php uuteschakeld.',
+Um beveiligingsredens is img_auth.php uutezet.',
 'img-auth-noread' => 'De gebruker hef gien leestoegang tot "$1".',
 'img-auth-bad-query-string' => 'In t webadres steet n ongeldige zeukopdrachte.',
 
@@ -1899,8 +1901,8 @@ Um beveiligingsredens is img_auth.php uuteschakeld.',
 'upload_source_file' => ' (een bestaand op de hardeschieve)',
 
 # Special:ListFiles
-'listfiles-summary' => "Op disse spesiale pagina ku'j alle bestaanden bekieken die lestens op-estuurd bin.
-As disse pagina efilterd wörden op gebruker, zie'j allinnig bestaanden waor de gebruker de leste versie van hef op-estuurd.",
+'listfiles-summary' => "Op disse spesiale zied ku'j alle bestaanden bekieken die lestens op-estuurd bin.
+As disse zied efilterd wörden op gebruker, zie'j allinnig bestaanden waor de gebruker de leste versie van hef op-estuurd.",
 'listfiles_search_for' => 'Zeuk naor bestaand:',
 'imgfile' => 'bestaand',
 'listfiles' => 'Bestaandslieste',
@@ -1928,11 +1930,11 @@ As disse pagina efilterd wörden op gebruker, zie'j allinnig bestaanden waor de
 'filehist-dimensions' => 'Grootte',
 'filehist-filesize' => 'Bestaandsgrootte',
 'filehist-comment' => 'Opmarkingen',
-'filehist-missing' => 'Bestaand ontbreekt',
+'filehist-missing' => 'Bestaand ontbrik',
 'imagelinks' => 'Bestaandsgebruuk',
-'linkstoimage' => "Dit bestaand wörden gebruukt op de volgende {{PLURAL:$1|pagina|$1 pagina's}}:",
+'linkstoimage' => 'Dit bestaand wörden gebruukt op de volgende {{PLURAL:$1|zied|$1 ziejen}}:',
 'linkstoimage-more' => 'Der {{PLURAL:$2|is|bin}} meer as $1 {{PLURAL:$1|verwiezing|verwiezingen}} naor dit bestaand.
-De volgende lieste geef allinnig de eerste {{PLURAL:$1|verwiezing|$1 verwiezingen}} naor dit bestaand weer.
+De volgende lieste gif allinnig de eerste {{PLURAL:$1|verwiezing|$1 verwiezingen}} naor dit bestaand weer.
 De [[Special:WhatLinksHere/$2|hele lieste]] is oek beschikbaor.',
 'nolinkstoimage' => 'Bestaand is niet in gebruuk.',
 'morelinkstoimage' => '[[Special:WhatLinksHere/$1|Meer verwiezingen]] naor dit bestaand bekieken.',
@@ -1942,9 +1944,9 @@ De [[Special:WhatLinksHere/$2|hele lieste]] is oek beschikbaor.',
 'sharedupload-desc-there' => "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. Bekiek de [$2 beschrieving van t bestaand] veur meer informasie.",
 'sharedupload-desc-here' => "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. De [$2 beschrieving van t bestaand] dergindse, steet hieronder.",
 'sharedupload-desc-edit' => 'Dit besatand kömp van $1 en kan oek in aandere projekten gebruukt wörden.
-Je kunnen de [$2 pagina mit de bestaandsbeschrieving] daor bewarken.',
+Je kunnen de [$2 zied mit de bestaandsbeschrieving] daor bewarken.',
 'sharedupload-desc-create' => 'Dit besatand kömp van $1 en kan oek in aandere projekten gebruukt wörden.
-Je kunnen de [$2 pagina mit de bestaandsbeschrieving] daor bewarken.',
+Je kunnen de [$2 zied mit de bestaandsbeschrieving] daor bewarken.',
 'filepage-nofile' => 'Der besteet gien bestaand mit disse naam.',
 'filepage-nofile-link' => 'Der besteet gien bestaand mit disse naam, mer je kunnen t [$1 opsturen].',
 'uploadnewversion-linktext' => 'n Niejere versie van dit bestaand opsturen.',
@@ -1974,7 +1976,7 @@ Je kunnen de [$2 pagina mit de bestaandsbeschrieving] daor bewarken.',
 'filedelete-nofile-old' => "Der is gien versie van '''$1''' in t archief mit de an-egeven eigenschappen.",
 'filedelete-otherreason' => 'Aandere reden:',
 'filedelete-reason-otherlist' => 'Aandere reden',
-'filedelete-reason-dropdown' => "*Veulveurkoemende redens veur t vortdoon van pagina's
+'filedelete-reason-dropdown' => "*Veulveurkoemende redens veur t vortdoon van ziejen
 ** Auteursrechtenschending
 ** Dit bestaand he'w dubbel",
 'filedelete-edit-reasonlist' => 'Reden veur t vortdoon bewarken',
@@ -1983,72 +1985,72 @@ Je kunnen de [$2 pagina mit de bestaandsbeschrieving] daor bewarken.',
 
 # MIME search
 'mimesearch' => 'Zeuken op MIME-type',
-'mimesearch-summary' => 'Op disse spesiale pagina kunnen de bestaanden naor t MIME-type efiltreerd wörden. In de invoer mut altied t media- en subtype staon, bieveurbeeld: <tt>aofbeelding/jpeg</tt>.',
+'mimesearch-summary' => 'Op disse spesiale zied kunnen de bestaanden naor t MIME-type efiltreerd wörden. In de invoer mut altied t media- en subtype staon, bieveurbeeld: <tt>aofbeelding/jpeg</tt>.',
 'mimetype' => 'MIME-type:',
 'download' => 'binnenhaolen',
 
 # Unwatched pages
-'unwatchedpages' => "Pagina's die niet evolgd wörden",
+'unwatchedpages' => 'Ziejen die niet evolgd wörden',
 
 # List redirects
 'listredirects' => 'Lieste van deurverwiezingen',
 
 # Unused templates
 'unusedtemplates' => 'Ongebruukten mallen',
-'unusedtemplatestext' => 'Hieronder staon alle pagina\'s in de naamruumte "{{ns:template}}" die nargens gebruukt wörden.
+'unusedtemplatestext' => 'Hieronder staon alle ziejen in de naamruumte "{{ns:template}}" die nargens gebruukt wörden.
 Vergeet niet de verwiezingen nao te kieken veurda\'j de mal vortdoon.',
 'unusedtemplateswlh' => 'aandere verwiezingen',
 
 # Random page
-'randompage' => 'Zo mer n artikel',
-'randompage-nopages' => "Der staon gien pagina's in de {{PLURAL:$2|naamruumte|naamruumtes}}: $1.",
+'randompage' => 'Netzelde welk artikel',
+'randompage-nopages' => 'Der staon gien ziejen in de {{PLURAL:$2|naamruumte|naamruumtes}}: $1.',
 
 # Random redirect
-'randomredirect' => 'Zo mer n deurverwiezing',
+'randomredirect' => 'Netzelde welke deurverwiezing',
 'randomredirect-nopages' => 'Der staon gien deurverwiezingen in de naamruumte "$1".',
 
 # Statistics
 'statistics' => 'Staotistieken',
-'statistics-header-pages' => 'Paginastaotistieken',
+'statistics-header-pages' => 'Ziedstaotistieken',
 'statistics-header-edits' => 'Bewarkingsstaotistieken',
 'statistics-header-views' => 'Staotistieken bekieken',
 'statistics-header-users' => 'Gebrukerstaotistieken',
 'statistics-header-hooks' => 'Overige staotistieken',
-'statistics-articles' => "Inhouwelike pagina's",
-'statistics-pages' => "Pagina's",
-'statistics-pages-desc' => "Alle pagina's in de wiki, oek overlegpagina's, deurverwiezingen, en gao zo mer deur.",
+'statistics-articles' => 'Inhouwelike ziejen',
+'statistics-pages' => 'Ziejen',
+'statistics-pages-desc' => 'Alle ziejen in de wiki, oek overlegziejen, deurverwiezingen, en gao zo mer deur.',
 'statistics-files' => 'Bestaanden',
-'statistics-edits' => 'Paginabewarkingen vanaof t begin van {{SITENAME}}',
-'statistics-edits-average' => 'Gemiddeld antal bewarkingen per pagina',
-'statistics-views-total' => "Totaal antal weeregeven pagina's",
-'statistics-views-total-desc' => "t Bekieken van niet-bestaonde pagina's en spesiale pagina's zitten der niet bie in",
-'statistics-views-peredit' => "Weeregeven pagina's per bewarking",
+'statistics-edits' => 'Ziedbewarkingen vanaof t begin van {{SITENAME}}',
+'statistics-edits-average' => 'Gemiddeld antal bewarkingen per zied',
+'statistics-views-total' => 'Totaal antal weeregeven ziejen',
+'statistics-views-total-desc' => 't Bekieken van niet-bestaonde ziejen en spesiale ziejen zitten der niet bie in',
+'statistics-views-peredit' => 'Weeregeven ziejen per bewarking',
 'statistics-users' => 'In-eschreven [[Special:ListUsers|gebrukers]]',
 'statistics-users-active' => 'Aktieve gebrukers',
 'statistics-users-active-desc' => 'Gebrukers die de veurbieje {{PLURAL:$1|dag|$1 dagen}} n haandeling uutevoerd hebben',
-'statistics-mostpopular' => "Meestbekeken pagina's",
+'statistics-mostpopular' => 'Meestbekeken ziejen',
 
-'disambiguations' => "Pagina's die verwiezen naor deurverwiespagina's",
+'disambiguations' => 'Ziejen die verwiezen naor deurverwiesziejen',
 'disambiguationspage' => 'Template:Dv',
-'disambiguations-text' => "De onderstaonde pagina's verwiezen naor n '''deurverwiespagina'''. Disse verwiezingen mutten eigenliks rechtstreeks verwiezen naor t juuste onderwarp.
+'disambiguations-text' => "De onderstaonde ziejen verwiezen naor n '''deurverwieszied'''. Disse verwiezingen mutten eigenliks rechtstreeks verwiezen naor t juuste onderwarp.
 
-Pagina's wörden ezien as n deurverwiespagina, as de mal gebruukt wörden die vermeld steet op [[MediaWiki:Disambiguationspage]]",
+Ziejen wörden ezien as n deurverwieszied, as de mal gebruukt wörden die vermeld steet op [[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'Dubbele deurverwiezingen',
-'doubleredirectstext' => "Op disse lieste staon alle pagina's die deurverwiezen naor aandere deurverwiezingen.
-Op elke regel steet de eerste en de tweede deurverwiezing, daorachter steet de doelpagina van de tweede deurverwiezing.
-Meestentieds is leste pagina de gewunste doelpagina, waor oek de eerste pagina heer zol mutten liejen.",
+'doubleredirectstext' => 'Op disse lieste staon alle ziejen die deurverwiezen naor aandere deurverwiezingen.
+Op elke regel steet de eerste en de tweede deurverwiezing, daorachter steet de doelzied van de tweede deurverwiezing.
+Meestentieds is leste zied de gewunste doelzied, waor oek de eerste zied heer zol mutten liejen.',
 'double-redirect-fixed-move' => '[[$1]] is herneumd en is noen n deurverwiezing naor [[$2]]',
 'double-redirect-fixed-maintenance' => 'Verbeteren van dubbele deurverwiezing van [[$1]] naor [[$2]].',
 'double-redirect-fixer' => 'Deurverwiezingsverbeteraar',
 
 'brokenredirects' => 'Ebreuken deurverwiezingen',
-'brokenredirectstext' => 'Disse deurverwiezingen verwiezen naor n niet-bestaonde pagina.',
+'brokenredirectstext' => 'Disse deurverwiezingen verwiezen naor n niet-bestaonde zied.',
 'brokenredirects-edit' => 'bewark',
 'brokenredirects-delete' => 'vortdoon',
 
-'withoutinterwiki' => "Pagina's zonder verwiezingen naor aandere talen",
-'withoutinterwiki-summary' => "De volgende pagina's verwiezen niet naor versies in n aandere taal.",
+'withoutinterwiki' => 'Ziejen zonder verwiezingen naor aandere talen',
+'withoutinterwiki-summary' => 'De volgende ziejen verwiezen niet naor versies in n aandere taal.',
 'withoutinterwiki-legend' => 'Veurvoegsel',
 'withoutinterwiki-submit' => 'Bekieken',
 
@@ -2061,44 +2063,44 @@ Meestentieds is leste pagina de gewunste doelpagina, waor oek de eerste pagina h
 'nmembers' => '$1 {{PLURAL:$1|onderwarp|onderwarpen}}',
 'nrevisions' => '$1 {{PLURAL:$1|versie|versies}}',
 'nviews' => '{{PLURAL:$1|1 keer|$1 keer}} bekeken',
-'nimagelinks' => "Wörden op {{PLURAL:$1|één pagina|$1 pagina's}} gebruukt",
-'ntransclusions' => "wörden op {{PLURAL:$1|één pagina|$1 pagina's}} gebruukt",
-'specialpage-empty' => 'Disse pagina is leeg.',
-'lonelypages' => "Weespagina's",
-'lonelypagestext' => "Naor disse pagina's wörden niet verwezen vanuut {{SITENAME}} en ze bin oek nargens in-evoegd.",
-'uncategorizedpages' => "Pagina's zonder kategorie",
+'nimagelinks' => 'Wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt',
+'ntransclusions' => 'wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt',
+'specialpage-empty' => 'Disse zied is leeg.',
+'lonelypages' => 'Weesziejen',
+'lonelypagestext' => 'Naor disse ziejen wörden niet verwezen vanuut {{SITENAME}} en ze bin oek nargens in-evoegd.',
+'uncategorizedpages' => 'Ziejen zonder kategorie',
 'uncategorizedcategories' => 'Kategorieën zonder kategorie',
 'uncategorizedimages' => 'Bestaanden zonder kategorie',
 'uncategorizedtemplates' => 'Mallen zonder kategorie',
 'unusedcategories' => 'Ongebruukten kategorieën',
 'unusedimages' => 'Ongebruukten bestaanden',
-'popularpages' => 'Populaire artikels',
+'popularpages' => 'Populaere artikels',
 'wantedcategories' => 'Gewunste kategorieën',
-'wantedpages' => "Gewunste pagina's",
-'wantedpages-badtitle' => 'Ongeldige paginanaam in resultaot: $1',
+'wantedpages' => 'Gewunste ziejen',
+'wantedpages-badtitle' => 'Ongeldige ziednaam in resultaot: $1',
 'wantedfiles' => 'Gewunste bestaanden',
-'wantedfiletext-cat' => "De volgende bestaanden wörden gebruukt mer bestaon niet. Bestaanden van externe databanken kunnen op-eneumen ween in de lieste, ondanks dat ze bestaon. Soortgelieke vals positieven wörden <del>deurehaold weeregeven</del>. Pagina's die niet-bestaonde bestaanden insluten staon op de pagina [[:$1]].",
+'wantedfiletext-cat' => 'De volgende bestaanden wörden gebruukt mer bestaon niet. Bestaanden van externe databanken kunnen op-eneumen ween in de lieste, ondanks dat ze bestaon. Soortgelieke vals positieven wörden <del>deurehaold weeregeven</del>. Ziejen die niet-bestaonde bestaanden insluten staon op de zied [[:$1]].',
 'wantedfiletext-nocat' => 'De volgende bestaanden wörden gebruukt mer bestaon niet. Bestaanden van externe databanken kunnen op-eneumen ween in de lieste, ondanks dat ze bestaon. Soortgelieke vals positieven wörden <del>deurehaold weeregeven</del>.',
 'wantedtemplates' => 'Gewunste mallen',
-'mostlinked' => "Pagina's waor t meest naor verwezen wörden",
+'mostlinked' => 'Ziejen waor t meest naor verwezen wörden',
 'mostlinkedcategories' => 'Meestgebruukten kategorieën',
 'mostlinkedtemplates' => 'Meestgebruukten mallen',
 'mostcategories' => 'Artikels mit de meeste kategorieën',
 'mostimages' => 'Meestgebruukten bestaanden',
 'mostrevisions' => 'Artikels mit de meeste bewarkingen',
-'prefixindex' => "Alle pagina's op veurvoegsel",
-'prefixindex-namespace' => "Alle pagina's mit t veurvoegsel (naamruumte $1)",
+'prefixindex' => 'Alle ziejen op veurvoegsel',
+'prefixindex-namespace' => 'Alle ziejen mit t veurvoegsel (naamruumte $1)',
 'shortpages' => 'Korte artikels',
 'longpages' => 'Lange artikels',
-'deadendpages' => "Pagina's zonder verwiezingen",
-'deadendpagestext' => "De onderstaonde pagina's verwiezen niet naor aandere pagina's in disse wiki.",
-'protectedpages' => "Pagina's die beveiligd bin",
+'deadendpages' => 'Ziejen zonder verwiezingen',
+'deadendpagestext' => 'De onderstaonde ziejen verwiezen niet naor aandere ziejen in disse wiki.',
+'protectedpages' => 'Ziejen die beveiligd bin',
 'protectedpages-indef' => 'Allinnig blokkeringen zonder verloopdaotum',
 'protectedpages-cascade' => 'Allinnig beveiligingen mit de kaskadeopsie',
-'protectedpagestext' => "De volgende pagina's bin beveiligd en kunnen niet herneumd of bewarkt wörden.",
-'protectedpagesempty' => "Der bin op t moment gien beveiligden pagina's",
-'protectedtitles' => 'Paginanamen die beveiligd bin',
-'protectedtitlestext' => "De volgende pagina's bin beveiligd, zodat ze niet opniej an-emaakt kunnen wörden",
+'protectedpagestext' => 'De volgende ziejen bin beveiligd en kunnen niet herneumd of bewarkt wörden.',
+'protectedpagesempty' => 'Der bin op t moment gien beveiligden ziejen',
+'protectedtitles' => 'Ziednamen die beveiligd bin',
+'protectedtitlestext' => 'De volgende ziejen bin beveiligd, zodat ze niet opniej an-emaakt kunnen wörden',
 'protectedtitlesempty' => 'Der bin noen gien titels beveiligd die an disse veurweerden voldoon.',
 'listusers' => 'Gebrukerslieste',
 'listusers-editsonly' => 'Allinnig gebrukers mit bewarkingen laoten zien',
@@ -2116,14 +2118,14 @@ De volgende bestaanden bin op-estuurd mer niet in gebruuk.
 t Kan ween dat der drekt verwezen wörden naor n bestaand.
 n Bestaand kan hier dus verkeerd op-eneumen ween.",
 'unusedcategoriestext' => 'De onderstaonde kategorieën bin an-emaakt mer bin niet in gebruuk.',
-'notargettitle' => 'Gien pagina op-egeven',
-'notargettext' => 'Je hebben niet op-egeven veur welke pagina je disse funksie bekieken willen.',
-'nopagetitle' => 'Doelpagina besteet niet',
-'nopagetext' => "De pagina die'j herneumen willen besteet niet.",
+'notargettitle' => 'Gien zied op-egeven',
+'notargettext' => 'Je hebben niet op-egeven veur welke zied je disse funksie bekieken willen.',
+'nopagetitle' => 'Doelzied besteet niet',
+'nopagetext' => "De zied die'j herneumen willen besteet niet.",
 'pager-newer-n' => '{{PLURAL:$1|1 niejere|$1 niejere}}',
 'pager-older-n' => '{{PLURAL:$1|1 ouwere|$1 ouwere}}',
 'suppress' => 'Toezichte',
-'querypage-disabled' => 'Disse spesiale pagina is uuteschakeld um prestasieredens.',
+'querypage-disabled' => 'Disse spesiale zied is uutezet um prestasieredens.',
 
 # Book sources
 'booksources' => 'Boekinformasie',
@@ -2134,7 +2136,7 @@ n Bestaand kan hier dus verkeerd op-eneumen ween.",
 
 # Special:Log
 'specialloguserlabel' => 'Uutvoerende gebruker:',
-'speciallogtitlelabel' => 'Doel (paginanaam of gebruker):',
+'speciallogtitlelabel' => 'Doel (ziednaam of gebruker):',
 'log' => 'Logboeken',
 'all-logs-page' => 'Alle publieke logboeken',
 'alllogstext' => 'Dit is t kombinasielogboek van {{SITENAME}}.
@@ -2144,31 +2146,31 @@ Je kunnen oek kiezen veur bepaolde logboeken en filteren op gebruker (heufdlette
 'showhideselectedlogentries' => 'Ekeuzen logboekregels laoten zien of verbargen',
 
 # Special:AllPages
-'allpages' => "Alle pagina's",
+'allpages' => 'Alle ziejen',
 'alphaindexline' => '$1 tot $2',
-'nextpage' => 'Volgende pagina ($1)',
-'prevpage' => 'Veurige pagina ($1)',
-'allpagesfrom' => "Laot pagina's zien vanaof:",
-'allpagesto' => "Laot pagina's zien tot:",
+'nextpage' => 'Volgende zied ($1)',
+'prevpage' => 'Veurige zied ($1)',
+'allpagesfrom' => 'Laot ziejen zien vanaof:',
+'allpagesto' => 'Laot ziejen zien tot:',
 'allarticles' => 'Alle artikels',
-'allinnamespace' => "Alle pagina's (naamruumte $1)",
-'allnotinnamespace' => "Alle pagina's (niet in naamruumte $1)",
+'allinnamespace' => 'Alle ziejen (naamruumte $1)',
+'allnotinnamespace' => 'Alle ziejen (niet in naamruumte $1)',
 'allpagesprev' => 'veurige',
 'allpagesnext' => 'volgende',
 'allpagessubmit' => 'Zeuk',
-'allpagesprefix' => "Pagina's bekieken die beginnen mit:",
-'allpagesbadtitle' => 'De op-egeven paginanaam is ongeldig of der steet n interwikiveurvoegsel in. Meugelikerwieze staon der karakters in de naam die niet gebruukt maggen wörden in paginanamen.',
+'allpagesprefix' => 'Ziejen bekieken die beginnen mit:',
+'allpagesbadtitle' => 'De op-egeven ziednaam is ongeldig of der steet n interwikiveurvoegsel in. Meugelikerwieze staon der karakters in de naam die niet gebruukt maggen wörden in ziednamen.',
 'allpages-bad-ns' => '{{SITENAME}} hef gien "$1"-naamruumte.',
 'allpages-hide-redirects' => 'Deurverwiezingen verbargen',
 
 # SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => 'Je bekieken noen n versie uut t tussengeheugen van disse pagina, die hooguut $1 oud is.',
-'cachedspecial-viewing-cached-ts' => 'Je bekieken noen n versie uut t tussengeheugen van disse pagina, t kan ween dat t niet helemaole bie de tied is.',
+'cachedspecial-viewing-cached-ttl' => 'Je bekieken noen n versie uut t tussengeheugen van disse zied, die hooguut $1 oud is.',
+'cachedspecial-viewing-cached-ts' => 'Je bekieken noen n versie uut t tussengeheugen van disse zied, t kan ween dat t niet helemaole bie de tied is.',
 'cachedspecial-refresh-now' => 'Leste bekieken.',
 
 # Special:Categories
 'categories' => 'Kategorieën',
-'categoriespagetext' => "De de volgende {{PLURAL:$1|kategorie steet|kategorieën staon}} pagina's of mediabestaanden.
+'categoriespagetext' => "De de volgende {{PLURAL:$1|kategorie steet|kategorieën staon}} ziejen of mediabestaanden.
 [[Special:UnusedCategories|ongebruukten kategorieën]] zie'j hier niet.
 Zie oek [[Special:WantedCategories|gewunste kategorieën]].",
 'categoriesfrom' => 'Laot kategorieën zien vanaof:',
@@ -2212,7 +2214,7 @@ Ondersteunde protokollen: <tt>$1</tt> (zet t niet in joew zeukopdrachte).',
 
 # Special:ListGroupRights
 'listgrouprights' => 'Rechten van gebrukersgroepen',
-'listgrouprights-summary' => "Op disse pagina staon de gebrukersgroepen van disse wiki beschreven, mit de biebeheurende rechten.
+'listgrouprights-summary' => "Op disse zied staon de gebrukersgroepen van disse wiki beschreven, mit de biebeheurende rechten.
 Meer informasie over de rechten ku'j [[{{MediaWiki:Listgrouprights-helppage}}|hier vienen]].",
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Rech toe-ewezen</span>
 * <span class="listgrouprights-revoked">Rech in-etrökken</span>',
@@ -2272,28 +2274,28 @@ De ontvanger kan dus drek beantwoorden.",
 'nowatchlist' => 'Gien artikels in volglieste.',
 'watchlistanontext' => '$1 is verplicht um joew volglieste te bekieken of te wiezigen.',
 'watchnologin' => 'Niet an-emeld',
-'watchnologintext' => "Um je volglieste an te passen mö'j eers [[Special:UserLogin|an-emeld]] ween.",
+'watchnologintext' => "Um je volglieste an te passen mu'j eerst [[Special:UserLogin|an-emeld]] ween.",
 'addwatch' => 'Op mien volglieste zetten',
-'addedwatchtext' => "De pagina \"[[:\$1]]\" steet noen op joew [[Special:Watchlist|volglieste]].
-Toekomstige wiezigingen op disse pagina en de overlegpagina zullen hier vermeld wörden, oek zullen disse pagina's '''vet-edrokt''' ween in de lieste mit de [[Special:RecentChanges|leste wiezigingen]] zoda'j t makkeliker zien kunnen.",
+'addedwatchtext' => "De zied \"[[:\$1]]\" steet noen op joew [[Special:Watchlist|volglieste]].
+Toekomstige wiezigingen op disse zied en de overlegzied zullen hier vermeld wörden, oek zullen disse ziejen '''vet-edrokt''' ween in de lieste mit de [[Special:RecentChanges|leste wiezigingen]] zoda'j t makkeliker zien kunnen.",
 'removewatch' => 'Van mien volglieste aofhaolen',
-'removedwatchtext' => 'De pagina "[[:$1]]" is van [[Special:Watchlist|joew volglieste]] aofehaold.',
+'removedwatchtext' => 'De zied "[[:$1]]" is van [[Special:Watchlist|joew volglieste]] aofehaold.',
 'watch' => 'Volgen',
-'watchthispage' => 'Volg disse pagina',
+'watchthispage' => 'Volg disse zied',
 'unwatch' => 'Niet volgen',
 'unwatchthispage' => 'Niet volgen',
 'notanarticle' => 'Gien artikel',
 'notvisiblerev' => 'Bewarking is vortedaon',
-'watchnochange' => "Gien van de pagina's op joew volglieste is in disse periode ewiezigd",
-'watchlist-details' => "Der {{PLURAL:$1|steet één pagina|staon $1 pagina's}} op joew volglieste, zonder de overlegpagina's mee-erekend.",
+'watchnochange' => 'Gien van de ziejen op joew volglieste is in disse periode ewiezigd',
+'watchlist-details' => 'Der {{PLURAL:$1|steet één zied|staon $1 ziejen}} op joew volglieste, zonder de overlegziejen mee-erekend.',
 'wlheader-enotif' => 'Je kriegen bericht per netpost',
-'wlheader-showupdated' => "* Pagina's die sinds joew leste bezeuk bie-ewörken bin, staon '''vet-edrokt'''.",
-'watchmethod-recent' => "leste wiezigingen an t naokieken op pagina's die'j volgen",
+'wlheader-showupdated' => "* Ziejen die sinds joew leste bezeuk bie-ewörken bin, staon '''vet-edrokt'''.",
+'watchmethod-recent' => "leste wiezigingen an t naokieken op ziejen die'j volgen",
 'watchmethod-list' => 'Kik joew nao volglieste veur de leste wiezigingen',
-'watchlistcontains' => "Der {{PLURAL:$1|steet 1 pagina|staon $1 pagina's}} op joew volglieste.",
+'watchlistcontains' => 'Der {{PLURAL:$1|steet 1 zied|staon $1 ziejen}} op joew volglieste.',
 'iteminvalidname' => "Verkeerde naam '$1'",
 'wlnote' => 'Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofeleupen ure|de leste $2 uren}} vanaof $3 um $4.',
-'wlshowlast' => 'Laot de aofeleupen $1 ure $2 dagen $3 zien',
+'wlshowlast' => 'Laot de veurbieje $1 uur $2 dagen $3 zien',
 'watchlist-options' => 'Opsies veur de volglieste',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -2302,18 +2304,18 @@ Toekomstige wiezigingen op disse pagina en de overlegpagina zullen hier vermeld
 'watcherrortext' => 'Der is n fout op-etrejen tiejens t wiezigen van joew volgliesinstellingen veur "$1".',
 
 'enotif_mailer' => '{{SITENAME}}-berichgevingssysteem',
-'enotif_reset' => "Markeer alle pagina's as bezöcht.",
-'enotif_newpagetext' => 'Dit is n nieje pagina.',
+'enotif_reset' => 'Markeer alle ziejen as bezöcht.',
+'enotif_newpagetext' => 'Dit is n nieje zied.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-gebruker',
 'changed' => 'ewiezigd',
 'created' => 'an-emaakt',
-'enotif_subject' => '{{SITENAME}}-pagina $PAGETITLE is $CHANGEDORCREATED deur $PAGEEDITOR',
+'enotif_subject' => '{{SITENAME}}-zied $PAGETITLE is $CHANGEDORCREATED deur $PAGEEDITOR',
 'enotif_lastvisited' => 'Zie $1 veur alle wiezigingen sinds joew leste bezeuk.',
 'enotif_lastdiff' => 'Zie $1 um disse wieziging te bekieken.',
 'enotif_anon_editor' => 'anonieme gebruker $1',
 'enotif_body' => 'Huj $WATCHINGUSERNAME,
 
-De pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE deur $PAGEEDITOR, zie $PAGETITLE_URL veur de leste versie.
+De zied $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE deur $PAGEEDITOR, zie $PAGETITLE_URL veur de leste versie.
 
 $NEWPAGE
 
@@ -2323,8 +2325,8 @@ Kontaktgevevens van de auteur:
 Netpost: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Je kriegen veerder gien berichten, behalven a\'j disse pagina bezeuken.
-Op joew volglieste ku\'j veur alle pagina\'s die\'j volgen de waorschuwingsinstellingen deraof haolen.
+Je kriegen veerder gien berichten, behalven a\'j disse zied bezeuken.
+Op joew volglieste ku\'j veur alle ziejen die\'j volgen de waorschuwingsinstellingen deraof haolen.
 
 Groeten van t {{SITENAME}}-waorschuwingssysteem.
 
@@ -2335,7 +2337,7 @@ Je kunnen joew netpostinstellingen wiezigen op:
 Je kunnen de volgliestinstellingen wiezigen op:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Je kunnen de pagina van joew volglieste aofhaolen deur op de volgende verwiezing te klikken:
+Je kunnen de zied van joew volglieste aofhaolen deur op de volgende verwiezing te klikken:
 $UNWATCHURL
 
 Opmarkingen en veerdere hulpe:
@@ -2345,33 +2347,33 @@ Opmarkingen en veerdere hulpe:
 'deletepage' => 'Vortdoon',
 'confirm' => 'Bevestigen',
 'excontent' => "De tekste was: '$1'",
-'excontentauthor' => "De tekste was: '$1' (pagina an-emaakt deur: [[Special:Contributions/$2|$2]])",
-'exbeforeblank' => "veurdat disse pagina leegemaakt wörden stung hier: '$1'",
-'exblank' => 'Pagina was leeg',
+'excontentauthor' => "De tekste was: '$1' (zied an-emaakt deur: [[Special:Contributions/$2|$2]])",
+'exbeforeblank' => "veurdat disse zied leegemaakt wörden stung hier: '$1'",
+'exblank' => 'Zied was leeg',
 'delete-confirm' => '"$1" vortdoon',
 'delete-legend' => 'Vortdoon',
-'historywarning' => "'''Waorschuwing''': de pagina die'j vortdoon, hef $1 {{PLURAL:$1|versie|versies}}:",
-'confirmdeletetext' => "Je staon op t punt n pagina en de geschiedenisse dervan vort te doon.
+'historywarning' => "'''Waorschuwing''': de zied die'j vortdoon, hef $1 {{PLURAL:$1|versie|versies}}:",
+'confirmdeletetext' => "Je staon op t punt n zied en de geschiedenisse dervan vort te doon.
 Bevestig hieronder dat dit inderdaod de bedoeling is, da'j de gevolgen begriepen en dat t akkedeert mit t [[{{MediaWiki:Policy-url}}|beleid]].",
 'actioncomplete' => 'Uutevoerd',
 'actionfailed' => 'De haandeling is mislokt.',
-'deletedtext' => 't Artikel "$1" is vortedaon. Zie de "$2" veur n lieste van pagina\'s die as lest vortedaon bin.',
+'deletedtext' => 't Artikel "$1" is vortedaon. Zie de "$2" veur n lieste van ziejen die as lest vortedaon bin.',
 'dellogpage' => 'Vortdologboek',
-'dellogpagetext' => "Hieronder steet n lieste van pagina's en bestaanden die as lest vortedaon bin.",
+'dellogpagetext' => 'Hieronder steet n lieste van ziejen en bestaanden die as lest vortedaon bin.',
 'deletionlog' => 'Vortdologboek',
 'reverted' => 'Eerdere versie hersteld',
 'deletecomment' => 'Reden:',
 'deleteotherreason' => 'Aandere/extra reden:',
 'deletereasonotherlist' => 'Aandere reden',
-'deletereason-dropdown' => "*Redens veur t vortdoon van pagina's
+'deletereason-dropdown' => '*Redens veur t vortdoon van ziejen
 ** Op vrage van de auteur
 ** Schending van de auteursrechten
-** Vandelisme",
+** Vandelisme',
 'delete-edit-reasonlist' => 'Redens veur t vortdoon bewarken',
-'delete-toobig' => "Disse pagina hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.
-t Vortdoon van dit soort pagina's is mit rechten bepark um t per ongelok versteuren van de warking van {{SITENAME}} te veurkoemen.",
-'delete-warning-toobig' => 'Disse pagina hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.
-Woart je: t vortdoon van disse pagina kan de warking van de databanke van {{SITENAME}} versteuren.
+'delete-toobig' => 'Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.
+t Vortdoon van dit soort ziejen is mit rechten bepark um t per ongelok versteuren van de warking van {{SITENAME}} te veurkoemen.',
+'delete-warning-toobig' => 'Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.
+Woart je: t vortdoon van disse zied kan de warking van de databanke van {{SITENAME}} versteuren.
 Wees veurzichtig',
 
 # Rollback
@@ -2380,10 +2382,10 @@ Wees veurzichtig',
 'rollbacklink' => 'Weerummedreien',
 'rollbackfailed' => 'Wieziging herstellen is mislokt',
 'cantrollback' => 'De wiezigingen konnen niet hersteld wörden; der is mer 1 auteur.',
-'alreadyrolled' => 'Kan de leste wieziging van de pagina [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niet weerummedreien.
-n Aander hef disse pagina al bewarkt of hersteld naor n eerdere versie.
+'alreadyrolled' => 'Kan de leste wieziging van de zied [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niet weerummedreien.
+n Aander hef disse zied al bewarkt of hersteld naor n eerdere versie.
 
-De leste bewarking op disse pagina is edaon deur [[User:$3|$3]] ([[User talk:$3|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+De leste bewarking op disse zied is edaon deur [[User:$3|$3]] ([[User talk:$3|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "De bewarkingssamenvatting was: ''$1''.",
 'revertpage' => 'Wiezigingen deur [[Special:Contributions/$2|$2]] hersteld tot de versie nao de leste wieziging deur $1',
 'revertpage-nouser' => 'Wiezigingen deur (gebrukersnaam vortedaon) weerummedreid naor de leste versie deur [[User:$1|$1]]',
@@ -2391,12 +2393,12 @@ De leste bewarking op disse pagina is edaon deur [[User:$3|$3]] ([[User talk:$3|
 
 # Edit tokens
 'sessionfailure-title' => 'Sessiefout',
-'sessionfailure' => 'Der is n probleem mit joew anmeldsessie. De aksie is stop-ezet uut veurzörg tegen n beveiligingsrisico (dat besteet uut t meugelike "kraken" van disse sessie). Gao weerumme naor de veurige pagina, laoj disse pagina opniej en probeer t nog es.',
+'sessionfailure' => 'Der is n probleem mit joew anmeldsessie. De aksie is stop-ezet uut veurzörg tegen n beveiligingsrisico (dat besteet uut t meugelike "kraken" van disse sessie). Gao weerumme naor de veurige zied, laoj disse zied opniej en probeer t nog es.',
 
 # Protect
 'protectlogpage' => 'Beveiligingslogboek',
-'protectlogtext' => "Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en pagina's.
-Zie de [[Special:ProtectedPages|lieste mit pagina's die beveiligd bin]] veur t hele overzichte.",
+'protectlogtext' => 'Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en ziejen.
+Zie de [[Special:ProtectedPages|lieste mit ziejen die beveiligd bin]] veur t hele overzichte.',
 'protectedarticle' => '[[$1]] is beveiligd',
 'modifiedarticleprotection' => 'beveiligingsnivo van "[[$1]]"  ewiezigd',
 'unprotectedarticle' => 'hef de beveiliging van "[[$1]]" deraof ehaold',
@@ -2405,30 +2407,30 @@ Zie de [[Special:ProtectedPages|lieste mit pagina's die beveiligd bin]] veur t h
 'protect-title-notallowed' => 'Beveiligingsnivo veur "$1" bekieken',
 'prot_1movedto2' => '[[$1]] is ewiezigd naor [[$2]]',
 'protect-badnamespace-title' => 'Niet te beveiligen naamruumte',
-'protect-badnamespace-text' => "Pagina's in disse naamruumte kunnen niet beveiligd wörden.",
+'protect-badnamespace-text' => 'Ziejen in disse naamruumte kunnen niet beveiligd wörden.',
 'protect-legend' => 'Beveiliging bevestigen',
 'protectcomment' => 'Reden:',
 'protectexpiry' => 'Duur',
 'protect_expiry_invalid' => 'Verlooptied is ongeldig.',
 'protect_expiry_old' => 'De verlooptied is al veurbie.',
 'protect-unchain-permissions' => 'Overige beveiligingsinstellingen beschikbaor maken',
-'protect-text' => "Hier ku'j t beveiligingsnivo veur de pagina '''$1''' instellen.",
-'protect-locked-blocked' => "Je kunnen beveiligingsnivo's niet wiezigen terwiel je eblokkeerd bin. Hier bin de instellingen zo as ze noen bin veur de pagina '''$1''':",
+'protect-text' => "Hier ku'j t beveiligingsnivo veur de zied '''$1''' instellen.",
+'protect-locked-blocked' => "Je kunnen beveiligingsnivo's niet wiezigen terwiel je eblokkeerd bin. Hier bin de instellingen zo as ze noen bin veur de zied '''$1''':",
 'protect-locked-dblock' => "Beveiligingsnivo's kunnen effen niet ewiezigd wörden umdat de databanke noen beveiligd is.
-Hier staon de instellingen zo as ze noen bin veur de pagina '''$1''':",
-'protect-locked-access' => "Je hebben gien rechten um t beveilingsnivo van pagina's te wiezigen.
-Hier staon de instellingen zo as ze noen bin veur de pagina '''$1''':",
-'protect-cascadeon' => "Disse pagina wörden beveiligd, umdat t op-eneumen is in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|bin}} mit de kaskadeopsie. Je kunnen t beveiligingsnivo van disse pagina anpassen, mer dat hef gien invleud op de kaskadebeveiliging.",
+Hier staon de instellingen zo as ze noen bin veur de zied '''$1''':",
+'protect-locked-access' => "Je hebben gien rechten um t beveilingsnivo van ziejen te wiezigen.
+Hier staon de instellingen zo as ze noen bin veur de zied '''$1''':",
+'protect-cascadeon' => 'Disse zied wörden beveiligd, umdat t op-eneumen is in de volgende {{PLURAL:$1|zied|ziejen}} die beveiligd {{PLURAL:$1|is|bin}} mit de kaskadeopsie. Je kunnen t beveiligingsnivo van disse zied anpassen, mer dat hef gien invleud op de kaskadebeveiliging.',
 'protect-default' => 'Veur alle gebrukers',
 'protect-fallback' => 'Hierveur is t rech "$1" neudig',
 'protect-level-autoconfirmed' => 'Blokkeer nieje en anonieme gebrukers',
 'protect-level-sysop' => 'Allinnig beheerders',
 'protect-summary-cascade' => 'kaskade',
 'protect-expiring' => 'löp aof op $1 (UTC)',
-'protect-expiring-local' => 'vervuilt op $1',
+'protect-expiring-local' => 'vervölt op $1',
 'protect-expiry-indefinite' => 'onbepark',
-'protect-cascade' => "Kaskadebeveiliging (beveilig alle pagina's en mallen die in disse pagina op-eneumen bin)",
-'protect-cantedit' => "Je kunnen t beveiligingsnivo van disse pagina niet wiezigen, umda'j gien rechten hebben um t te bewarken.",
+'protect-cascade' => 'Kaskadebeveiliging (beveilig alle ziejen en mallen die in disse zied op-eneumen bin)',
+'protect-cantedit' => "Je kunnen t beveiligingsnivo van disse zied niet wiezigen, umda'j gien rechten hebben um t te bewarken.",
 'protect-othertime' => 'Aandere tiedsduur:',
 'protect-othertime-op' => 'aandere tiedsduur',
 'protect-existing-expiry' => 'Bestaonde verloopdaotum: $2 $3',
@@ -2438,7 +2440,7 @@ Hier staon de instellingen zo as ze noen bin veur de pagina '''$1''':",
 ** Vandelisme
 ** Ongewunste verwiezingen plaotsen
 ** Bewarkingsoorlog
-** Pagina mit veul bezeukers',
+** Zied mit veule bezeukers',
 'protect-edit-reasonlist' => 'Redens veur beveiliging bewarken',
 'protect-expiry-options' => '1 uur:1 hour,1 dag:1 day,1 weke:1 week,2 weken:2 weeks,1 maond:1 month,3 maonden:3 months,6 maonden:6 months,1 jaor:1 year,onbeparkt:infinite',
 'restriction-type' => 'Toegang',
@@ -2459,22 +2461,22 @@ Hier staon de instellingen zo as ze noen bin veur de pagina '''$1''':",
 'restriction-level-all' => 'alles',
 
 # Undelete
-'undelete' => "Vortedaone pagina's bekieken",
-'undeletepage' => "Vortedaone pagina's bekieken en weerummeplaotsen",
+'undelete' => 'Vortedaone ziejen bekieken',
+'undeletepage' => 'Vortedaone ziejen bekieken en weerummeplaotsen',
 'undeletepagetitle' => "'''Hieronder staon de vortedaone bewarkingen van [[:$1]]'''.",
-'viewdeletedpage' => "Bekiek vortedaone pagina's",
-'undeletepagetext' => "Hieronder {{PLURAL:$1|steet de pagina die vortedaon is|staon de pagina's die vortedaon bin}} en vanuut t archief  weerummeplaots {{PLURAL:$1|kan|kunnen}} wörden.",
+'viewdeletedpage' => 'Bekiek vortedaone ziejen',
+'undeletepagetext' => 'Hieronder {{PLURAL:$1|steet de zied die vortedaon is|staon de ziejen die vortedaon bin}} en vanuut t archief  weerummeplaotst {{PLURAL:$1|kan|kunnen}} wörden.',
 'undelete-fieldset-title' => 'Versies weerummeplaotsen',
-'undeleteextrahelp' => "Laot alle vakjes leeg en klik op '''''{{int:undeletebtn}}''''' um de hele pagina mit alle veurgeschiedenisse weerumme te plaotsen.
+'undeleteextrahelp' => "Laot alle vakjes leeg en klik op '''''{{int:undeletebtn}}''''' um de hele zied mit alle veurgeschiedenisse weerumme te plaotsen.
 Vink de versies die weerummeplaotsen willen an en klik op '''''{{int:undeletebtn}}''''' um bepaolde versies weerumme te zetten.",
 'undeleterevisions' => '$1 {{PLURAL:$1|versie|versies}} earchiveerd',
-'undeletehistory' => "A'j n pagina weerummeplaotsen, wörden alle versies as ouwe versies weerummeplaots.
-As der al n nieje pagina mit de zelfde naam an-emaakt is, zullen disse versies as ouwe versies weerummeplaotst wörden, mer de op-esleugen versie zal niet ewiezigd wörden.",
-'undeleterevdel' => "Herstellen kan niet as daor de leste versie van de pagina of t bestaand gedeeltelik mee vortedaon wörden.
-In dat geval mö'j de leste versie as zichtbaor instellen.",
-'undeletehistorynoadmin' => 'Disse pagina is vortedaon. De reden hierveur steet hieronder, samen mit de informasie van de gebrukers die dit artikel ewiezigd hebben veurdat t vortedaon is. De tekste van t artikel is allinnig zichtbaor veur beheerders.',
+'undeletehistory' => "A'j n zied weerummeplaotsen, wörden alle versies as ouwe versies weerummeplaots.
+As der al n nieje zied mit de zelfde naam an-emaakt is, zullen disse versies as ouwe versies weerummeplaotst wörden, mer de op-esleugen versie zal niet ewiezigd wörden.",
+'undeleterevdel' => "Herstellen kan niet as daor de leste versie van de zied of t bestaand gedeeltelik mee vortedaon wörden.
+In dat geval mu'j de leste versie as zichtbaor instellen.",
+'undeletehistorynoadmin' => 'Disse zied is vortedaon. De reden hierveur steet hieronder, samen mit de informasie van de gebrukers die dit artikel ewiezigd hebben veurdat t vortedaon is. De tekste van t artikel is allinnig zichtbaor veur beheerders.',
 'undelete-revision' => 'Vortedaone versies van $1 (per $4 um $5) deur $3:',
-'undeleterevision-missing' => "Ongeldige of ontbrekende versie. t Is meugelik da'j n verkeerde verwiezing gebruken of dat disse pagina weerummeplaotst is of dat t uut t archief ewist is.",
+'undeleterevision-missing' => "Ongeldige of ontbrekende versie. t Is meugelik da'j n verkeerde verwiezing gebruken of dat disse zied weerummeplaotst is of dat t uut t archief ewist is.",
 'undelete-nodiff' => 'Gien eerdere versie evunnen.',
 'undeletebtn' => 'Weerummeplaotsen',
 'undeletelink' => 'bekiek/weerummeplaotsen',
@@ -2485,22 +2487,22 @@ In dat geval mö'j de leste versie as zichtbaor instellen.",
 'undeletedrevisions' => '$1 {{PLURAL:$1|versie|versies}} weerummeplaotst',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 versie|$1 versies}} en {{PLURAL:$2|1 bestaand|$2 bestaanden}} bin weerummeplaotst',
 'undeletedfiles' => '{{PLURAL:$1|1 bestaand|$1 bestaanden}} weerummeplaotst',
-'cannotundelete' => 'Weerummeplaotsen van t bestaand is mislokt; n aander hef disse pagina misschien al weerummeplaotst.',
+'cannotundelete' => 'Weerummeplaotsen van t bestaand is mislokt; n aander hef disse zied misschien al weerummeplaotst.',
 'undeletedpage' => "'''$1 is weerummeplaotst'''
 
-Bekiek t [[Special:Log/delete|vortdologboek]] veur n overzichte van pagina's die kortens vortedaon en weerummeplaotst bin.",
+Bekiek t [[Special:Log/delete|vortdologboek]] veur n overzichte van ziejen die kortens vortedaon en weerummeplaotst bin.",
 'undelete-header' => 'Zie t [[Special:Log/delete|vortdologboek ]] veur spul dat krek vortedaon is.',
-'undelete-search-title' => "Vortedaone pagina's zeuken",
-'undelete-search-box' => "Deurzeuk vortedaone pagina's",
-'undelete-search-prefix' => "Bekiek pagina's vanaof:",
+'undelete-search-title' => 'Vortedaone ziejen zeuken',
+'undelete-search-box' => 'Deurzeuk vortedaone ziejen',
+'undelete-search-prefix' => 'Bekiek ziejen vanaof:',
 'undelete-search-submit' => 'Zeuk',
-'undelete-no-results' => "Gien pagina's evunnen in t archief mit vortedaone pagina's.",
+'undelete-no-results' => 'Gien ziejen evunnen in t archief mit vortedaone ziejen.',
 'undelete-filename-mismatch' => 'Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: bestaandsnaam kloppen niet',
 'undelete-bad-store-key' => 'Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: t bestaand was der al niet meer veurdat t vortedaon wörden.',
 'undelete-cleanup-error' => 'Fout bie t herstellen van t ongebruukten archiefbestaand "$1".',
 'undelete-missing-filearchive' => 't Lokten niet um ID $1 weerumme te plaotsen umdat t niet in de databanke is.
 Misschien is t al weerummeplaotst.',
-'undelete-error' => 'Der is wat fout egaon bie t vortdoon van de pagina',
+'undelete-error' => 'Der is wat fout egaon bie t vortdoon van de zied',
 'undelete-error-short' => 'Fout bie t herstellen van t bestaand: $1',
 'undelete-error-long' => 'Fouten bie t herstellen van t bestaand:
 
@@ -2510,8 +2512,8 @@ $1',
 
 # Namespace form on various pages
 'namespace' => 'Naamruumte:',
-'invert' => 'seleksie ummekeren',
-'tooltip-invert' => "Vink dit vakjen an um wiezigingen an pagina's binnen de ekeuzen naamruumte te verbargen (en de biebeheurende naamruumte as dat an-evinkt is)",
+'invert' => 'Seleksie ummekeren',
+'tooltip-invert' => 'Vink dit vakjen an um wiezigingen an ziejen binnen de ekeuzen naamruumte te verbargen (en de biebeheurende naamruumte as dat an-evinkt is)',
 'namespace_association' => 'Naamruumte die hieran ekoppeld is',
 'tooltip-namespace_association' => 'Vink dit vakjen an um oek de overlegnaamruumte, of in t ummekeren geval de naamruumte zelf, derbie te doon die bie disse naamruumte heurt.',
 'blanknamespace' => '(Heufdnaamruumte)',
@@ -2545,12 +2547,12 @@ De leste regel uut t blokkeerlogboek steet as referensie',
 'sp-contributions-submit' => 'Zeuk',
 
 # What links here
-'whatlinkshere' => 'Verwiezingen naor disse pagina',
-'whatlinkshere-title' => 'Pagina\'s die verwiezen naor "$1"',
-'whatlinkshere-page' => 'Pagina:',
-'linkshere' => "Disse pagina's verwiezen naor '''[[:$1]]''':",
-'nolinkshere' => "Gien enkele pagina verwies naor '''[[:$1]]'''.",
-'nolinkshere-ns' => "Gien enkele pagina verwiest naor '''[[:$1]]''' in de ekeuzen naamruumte.",
+'whatlinkshere' => 'Verwiezingen naor disse zied',
+'whatlinkshere-title' => 'Ziejen die verwiezen naor "$1"',
+'whatlinkshere-page' => 'Zied:',
+'linkshere' => "Disse ziejen verwiezen naor '''[[:$1]]''':",
+'nolinkshere' => "Gien enkele zied verwis naor '''[[:$1]]'''.",
+'nolinkshere-ns' => "Gien enkele zied verwis naor '''[[:$1]]''' in de ekeuzen naamruumte.",
 'isredirect' => 'deurverwiezing',
 'istemplate' => 'in-evoegd as mal',
 'isimage' => 'bestaandsverwiezing',
@@ -2570,19 +2572,19 @@ De leste regel uut t blokkeerlogboek steet as referensie',
 'blockip' => 'Gebruker blokkeren',
 'blockip-title' => 'Gebruker blokkeren',
 'blockip-legend' => 'n Gebruker of IP-adres blokkeren',
-'blockiptext' => "Gebruuk dit formulier um n IP-adres of gebrukersnaam te blokkeren. t Is bedoeld um vandelisme te veurkoemen en mit in akkerderen mit t [[{{MediaWiki:Policy-url}}|beleid]]. Geef hieronder n reden op (bieveurbeeld op welke pagina's de vandelisme epleeg is)",
+'blockiptext' => 'Gebruuk dit formulier um n IP-adres of gebrukersnaam te blokkeren. t Is bedoeld um vandelisme te veurkoemen en mit in akkerderen mit t [[{{MediaWiki:Policy-url}}|beleid]]. Geef hieronder n reden op (bieveurbeeld op welke ziejen de vandelisme epleeg is)',
 'ipadressorusername' => 'IP-adres of gebrukersnaam',
 'ipbexpiry' => 'Verlöp nao',
 'ipbreason' => 'Reden:',
 'ipbreasonotherlist' => 'aandere reden',
-'ipbreason-dropdown' => "*Algemene redens veur t blokkeren
+'ipbreason-dropdown' => '*Algemene redens veur t blokkeren
 ** valse informasie invoeren
-** pagina's leegmaken
+** ziejen leegmaken
 ** ongewunste verwiezingen plaotsen
 ** onzinteksten schrieven
 ** targerieje of naor gedrag
 ** misbruuk vanaof meerdere profielen
-** ongewunste gebrukersnaam",
+** ongewunste gebrukersnaam',
 'ipb-hardblock' => 'Veurkoemen dat an-emelde gebrukers vanaof dit IP-adres kunnen bewarken',
 'ipbcreateaccount' => 'Veurkom t anmaken van gebrukersprofielen',
 'ipbemailban' => 'Veurkom dat bepaolde gebrukers berichten versturen',
@@ -2593,8 +2595,8 @@ De leste regel uut t blokkeerlogboek steet as referensie',
 'ipbotheroption' => 'aanders',
 'ipbotherreason' => 'Aandere/extra reden:',
 'ipbhidename' => 'Verbarg de gebrukersnaam in bewarkingen en liesten',
-'ipbwatchuser' => 'Gebrukerspagina en overlegpagina op volglieste zetten',
-'ipb-disableusertalk' => 'Veurkoemen dat disse gebruker tiejens de blokkering de eigen overlegpagina kan bewarken',
+'ipbwatchuser' => 'Gebrukerszied en overlegzied op volglieste zetten',
+'ipb-disableusertalk' => 'Veurkoemen dat disse gebruker tiejens de blokkering de eigen overlegzied kan bewarken',
 'ipb-change-block' => 'De gebruker opniej blokkeren mit disse instellingen',
 'ipb-confirm' => 'Blokkering bevestigen',
 'badipaddress' => 'Ongeldig IP-adres of onbestaonde gebrukersnaam',
@@ -2623,7 +2625,7 @@ Op de [[Special:BlockList|blokkeerlieste]] steet n lieste mit alle blokkeringen.
 'blocklist-rangeblocks' => 'IP-adresblokkeringen verbargen',
 'blocklist-timestamp' => 'Tiedstip',
 'blocklist-target' => 'Doel',
-'blocklist-expiry' => 'Vervuilt',
+'blocklist-expiry' => 'Vervölt',
 'blocklist-by' => 'Eblokkeerd deur',
 'blocklist-params' => 'Blokkeringsparameters',
 'blocklist-reason' => 'Reden',
@@ -2636,7 +2638,7 @@ Op de [[Special:BlockList|blokkeerlieste]] steet n lieste mit alle blokkeringen.
 'noautoblockblock' => 'autoblok niet aktief',
 'createaccountblock' => 'anmaken van n gebrukersprofiel is eblokkeerd',
 'emailblock' => 't versturen van berichten is eblokkeerd',
-'blocklist-nousertalk' => 'kan zien eigen overlegpagina niet bewarken',
+'blocklist-nousertalk' => 'kan zien eigen overlegzied niet bewarken',
 'ipblocklist-empty' => 'De blokkeerlieste is leeg.',
 'ipblocklist-no-results' => 't Op-evreugen IP-adres of de gebrukersnaam is niet eblokkeerd.',
 'blocklink' => 'blokkeren',
@@ -2644,7 +2646,7 @@ Op de [[Special:BlockList|blokkeerlieste]] steet n lieste mit alle blokkeringen.
 'change-blocklink' => 'blokkering wiezigen',
 'contribslink' => 'biedragen',
 'emaillink' => 'netpostbericht sturen',
-'autoblocker' => 'Vanzelf eblokkeerd umdat t IP-adres overenekump mit t IP-adres van [[User:$1|$1]], die eblokkeerd is mit as reden: "$2"',
+'autoblocker' => 'Vanzelf eblokkeerd umdat t IP-adres overenekömp mit t IP-adres van [[User:$1|$1]], die eblokkeerd is mit as reden: "$2"',
 'blocklogpage' => 'Blokkeerlogboek',
 'blocklog-showlog' => 'Disse gebruker is al eerder eblokkeerd.
 t Blokkeerlogboek steet hieronder as referensie:',
@@ -2655,13 +2657,13 @@ t Logboek mit onderdrokten versies steet hieronder as referensie:',
 'blocklogtext' => "Hier zie'j n lieste van de leste blokkeringen en deblokkeringen. Automatiese blokkeringen en deblokkeringen koemen niet in t logboek te staon. Zie de [[Special:BlockList|blokkeerlieste]] veur de lieste van adressen die noen eblokkeerd bin.",
 'unblocklogentry' => 'blokkering van $1 is op-eheven',
 'block-log-flags-anononly' => 'allinnig anoniemen',
-'block-log-flags-nocreate' => 'anmaken van gebrukersprofielen uuteschakeld',
-'block-log-flags-noautoblock' => 'autoblokkeren uuteschakeld',
+'block-log-flags-nocreate' => 'anmaken van gebrukersprofielen uutezet',
+'block-log-flags-noautoblock' => 'autoblokkeren uutezet',
 'block-log-flags-noemail' => 't versturen van berichten is eblokkeerd',
-'block-log-flags-nousertalk' => 'kan zien eigen overlegpagina niet bewarken',
+'block-log-flags-nousertalk' => 'kan zien eigen overlegzied niet bewarken',
 'block-log-flags-angry-autoblock' => 'uutebreide automatiese blokkering in-eschakeld',
 'block-log-flags-hiddenname' => 'gebrukersnaam verbörgen',
-'range_block_disabled' => 'De meugelikheid veur beheerders um n groep adressen te blokkeren is uuteschakeld.',
+'range_block_disabled' => 'De meugelikheid veur beheerders um n groep adressen te blokkeren is uutezet.',
 'ipb_expiry_invalid' => 'De op-egeven verlooptied is ongeldig.',
 'ipb_expiry_temp' => 'Blokkeringen veur verbörgen gebrukers mutten permanent ween.',
 'ipb_hide_invalid' => 'Kan disse gebruker niet verbargen; warschienlik hef e al te veule bewarkingen emaakt.',
@@ -2677,12 +2679,12 @@ De blokkering is onderdeel van de reeks $2, waorvan de blokkering wel op-eheven
 'ip_range_toolarge' => 'Groeps-IP-adressen die groter bin as /$1, bin niet toe-estaon.',
 'blockme' => 'Mien blokkeren',
 'proxyblocker' => 'Proxyblokker',
-'proxyblocker-disabled' => 'Disse funksie is uuteschakeld.',
-'proxyblockreason' => "Dit is n automatiese preventieve blokkering umda'j gebruuk maken van n open proxyserver.",
+'proxyblocker-disabled' => 'Disse funksie is uutezet.',
+'proxyblockreason' => "Dit is n automatiese preventieve blokkering umda'j gebruukmaken van n open proxyserver.",
 'proxyblocksuccess' => 'Suksesvol.',
 'sorbsreason' => "Joew IP-adres is op-eneumen as open proxyserver in de zwarte lieste van DNS die'w veur {{SITENAME}} gebruken.",
 'sorbs_create_account_reason' => "Joew IP-adres is op-eneumen as open proxyserver in de zwarte lieste van DNS, die'w veur {{SITENAME}} gebruken.
-Je kunnen gien gebrukerspagina anmaken.",
+Je kunnen gien gebrukerszied anmaken.",
 'cant-block-while-blocked' => "Je kunnen aandere gebrukers niet blokkeren a'j zelf oek eblokkeerd bin.",
 'cant-see-hidden-user' => "De gebruker die'j proberen te blokkeren is al eblokkeerd en verbörgen.
 Umda'j gien rech hebben um gebrukers te verbargen, ku'j de blokkering van de gebruker niet bekieken of bewarken.",
@@ -2692,7 +2694,7 @@ Umda'j gien rech hebben um gebrukers te verbargen, ku'j de blokkering van de geb
 # Developer tools
 'lockdb' => 'Databanke blokkeren',
 'unlockdb' => 'Databanke vriegeven',
-'lockdbtext' => "Waorschuwing: a'j de databanke blokkeren dan kan der gienene meer pagina's bewarken, zien veurkeuren wiezingen of wat aanders doon waorveur der wiezigingen in de databanke neudig bin.",
+'lockdbtext' => "Waorschuwing: a'j de databanke blokkeren dan kan der gienene meer ziejen bewarken, zien veurkeuren wiezingen of wat aanders doon waorveur der wiezigingen in de databanke neudig bin.",
 'unlockdbtext' => 'Vriegeven van de databanke maak alle bewarkingen weer meugelik.
 Mut de databanke vrie-egeven wörden?',
 'lockconfirm' => 'Ja, ik wille de databanke blokkeren.',
@@ -2711,87 +2713,87 @@ Vergeet niet de [[Special:UnlockDB|databanke vrie te geven]] a'j klaor bin mit t
 
 # Move page
 'move-page' => 'Herneum "$1"',
-'move-page-legend' => 'Pagina herneumen',
-'movepagetext' => "Mit dit formulier ku'j de pagina n nieje naam geven, de geschiedenisse geet dan vanzelf mee.
-De ouwe naam zal automaties n deurverwiezing wörden naor de nieje pagina.
+'move-page-legend' => 'Zied herneumen',
+'movepagetext' => "Mit dit formulier ku'j de zied n nieje naam geven, de geschiedenisse geet dan vanzelf mee.
+De ouwe naam zal automaties n deurverwiezing wörden naor de nieje zied.
 Deurverwiezingen naor de ouwe naam kunnen automaties ewiezigd wörden.
 A'j derveur kiezen um dat niet te doon, kiek t dan effen nao of der [[Special:DoubleRedirects|dubbele]] en [[Special:BrokenRedirects|ebreuken deurverwiezingen]] bin ontstaon.
 t Is an joe um derveur te zörgen dat de deurverwiezingen naor de goeie naam gaon.
 
-n Pagina kan '''allinnig''' herneumd wörden as de nieje naam niet besteet of t n deurverwiezing is zonder veerdere geschiedenisse.
-Dit betekent da'j n pagina weer naor de ouwe naam kunnen herneumen, a'j bieveurbeeld n fout emaakt hebben, zonder da'j de bestaonde pagina overschrieven.
+n Zied kan '''allinnig''' herneumd wörden as de nieje naam niet besteet of t n deurverwiezing is zonder veerdere geschiedenisse.
+Dit betekent da'j n zied weer naor de ouwe naam kunnen herneumen, a'j bieveurbeeld n fout emaakt hebben, zonder da'j de bestaonde zied overschrieven.
 
 '''WAORSCHUWING!'''
-Veur populaire pagina's kan t herneumen drastiese en onveurziene gevolgen hebben.
+Veur populaere ziejen kan t herneumen drastiese en onveurziene gevolgen hebben.
 Zörg derveur da'j de gevolgen overzien veurda'j veerder gaon.",
-'movepagetext-noredirectfixer' => "Mit dit formulier ku'j de pagina n nieje naam geven, de geschiedenisse geet dan vanzelf mee.
-De ouwe naam zal automaties n deurverwiezing wörden naor de nieje pagina.
+'movepagetext-noredirectfixer' => "Mit dit formulier ku'j de zied n nieje naam geven, de geschiedenisse geet dan vanzelf mee.
+De ouwe naam zal automaties n deurverwiezing wörden naor de nieje zied.
 Kiek oek effen nao of der gien [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|ebreuken deurverwiezingen]] bin ontstaon.
 t Is an joe um derveur te zörgen dat de deurverwiezingen naor de goeie naam gaon.
 
-n Pagina kan '''allinnig''' herneumd wörden as de nieje naam niet besteet of t n deurverwiezing is zonder veerdere geschiedenisse.
-Dit betekent da'j n pagina weer naor de ouwe naam kunnen herneumen, a'j bieveurbeeld n fout emaakt hebben, zonder da'j de bestaonde pagina overschrieven.
+n Zied kan '''allinnig''' herneumd wörden as de nieje naam niet besteet of t n deurverwiezing is zonder veerdere geschiedenisse.
+Dit betekent da'j n zied weer naor de ouwe naam kunnen herneumen, a'j bieveurbeeld n fout emaakt hebben, zonder da'j de bestaonde zied overschrieven.
 
 '''WAORSCHUWING!'''
-Veur popelaire pagina's kan t herneumen drastiese en onveurziene gevolgen hebben.
+Veur populaere ziejen kan t herneumen drastiese en onveurziene gevolgen hebben.
 Zörg derveur da'j de gevolgen overzien veurda'j veerder gaon.",
-'movepagetalktext' => "De overlegpagina die derbie heurt krig oek n nieje titel, mer '''niet''' in de volgende gevallen:
-* As de pagina in n aandere naamruumte eplaots wörden
-* As der al n niet-lege overlegpagina besteet onder de aandere naam
+'movepagetalktext' => "De overlegzied die derbie heurt krig oek n nieje titel, mer '''niet''' in de volgende gevallen:
+* As de zied in n aandere naamruumte eplaotst wörden
+* As der al n niet-lege overlegzied besteet onder de aandere naam
 * a'j t onderstaonde vinkjen vorthaolen",
 'movearticle' => 'Herneum',
-'moveuserpage-warning' => "'''Waorschuwing:''' Je staon op t punt um n gebrukerspagina te herneumen. Allinnig disse pagina zal herneumd wörden, '''niet''' de gebruker.",
+'moveuserpage-warning' => "'''Waorschuwing:''' Je staon op t punt um n gebrukerszied te herneumen. Allinnig disse zied zal herneumd wörden, '''niet''' de gebruker.",
 'movenologin' => 'Niet an-emeld.',
-'movenologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween um de naam van n pagina te wiezigen.',
-'movenotallowed' => "Je hebben gien rechten um pagina's te herneumen.",
+'movenologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween um de naam van n zied te wiezigen.',
+'movenotallowed' => 'Je hebben gien rechten um ziejen te herneumen.',
 'movenotallowedfile' => 'Je hebben gien rechten um bestaanden te herneumen.',
-'cant-move-user-page' => "Je hebben gien rechten um gebrukerspagina's te herneumen.",
-'cant-move-to-user-page' => "Je hebben gien rechten um n pagina naor n gebrukerspagina te herneumen. Herneumen naor n subpagina ma'j wel doon.",
+'cant-move-user-page' => 'Je hebben gien rechten um gebrukersziejen te herneumen.',
+'cant-move-to-user-page' => "Je hebben gien rechten um n zied naor n gebrukerszied te herneumen. Herneumen naor n zied die deronder völt ma'j wel doon.",
 'newtitle' => 'Nieje naam',
-'move-watch' => 'volg disse pagina',
+'move-watch' => 'volg disse zied',
 'movepagebtn' => 'Herneum',
 'pagemovedsub' => 'Naamwieziging suksesvol',
 'movepage-moved' => '\'\'\'"$1" is ewiezigd naor "$2"\'\'\'',
 'movepage-moved-redirect' => 'Der is n deurverwiezing an-emaakt.',
 'movepage-moved-noredirect' => 'Der is gien deurverwiezing an-emaakt.',
-'articleexists' => 'Onder disse naam besteet al n pagina. Kies n aandere naam.',
-'cantmove-titleprotected' => 'Je kunnen gien pagina naor disse titel herneumen, umdat de nieje titel beveiligd is tegen t anmaken dervan.',
-'talkexists' => "De pagina zelf is herneumd, mer de overlegpagina kon niet verherneumd wörden, umdat de doelnaam al n niet-lege overlegpagina had. Kombineer de overlegpagina's mit de haand.",
+'articleexists' => 'Onder disse naam besteet al n zied. Kies n aandere naam.',
+'cantmove-titleprotected' => 'Je kunnen gien zied naor disse titel herneumen, umdat de nieje titel beveiligd is tegen t anmaken dervan.',
+'talkexists' => 'De zied zelf is herneumd, mer de overlegzied kon niet verherneumd wörden, umdat de doelnaam al n niet-lege overlegzied had. Kombineer de overlegziejen mit de haand.',
 'movedto' => 'wiezigen naor',
-'movetalk' => 'De overlegpagina oek wiezigen, as t meuglik is.',
-'move-subpages' => "Herneum subpagina's (tot en mit $1)",
-'move-talk-subpages' => "Herneum subpagina's van overlegpagina's (tot en mit $1)",
-'movepage-page-exists' => 'De pagina $1 besteet al en kan niet automaties vortedaon wörden.',
-'movepage-page-moved' => 'De pagina $1 is herneumd naor $2.',
-'movepage-page-unmoved' => 'De pagina $1 kon niet herneumd wörden naor $2.',
-'movepage-max-pages' => "t Maximale antal automaties te herneumen pagina's is bereikt ({{PLURAL:$1|$1|$1}}).
-De overige pagina's wörden niet automaties herneumd.",
+'movetalk' => 'De overlegzied oek wiezigen, as t meuglik is.',
+'move-subpages' => 'Herneum de ziejen die deronder hangen (tot en mit $1)',
+'move-talk-subpages' => 'Herneum de ziejen die onder de overlegziejen hangen (tot en mit $1)',
+'movepage-page-exists' => 'De zied $1 besteet al en kan niet automaties vortedaon wörden.',
+'movepage-page-moved' => 'De zied $1 is herneumd naor $2.',
+'movepage-page-unmoved' => 'De zied $1 kon niet herneumd wörden naor $2.',
+'movepage-max-pages' => 't Maximale antal automaties te herneumen ziejen is bereikt ({{PLURAL:$1|$1|$1}}).
+De aandere ziejen wörden niet automaties herneumd.',
 'movelogpage' => 'Herneumlogboek',
-'movelogpagetext' => "Hieronder steet n lieste mit pagina's die herneumd bin.",
-'movesubpage' => "{{PLURAL:$1|Subpagina|Subpagina's}}",
-'movesubpagetext' => "De {{PLURAL:$1|subpagina|$1 subpagina's}} van disse pagina vie'j hieronder.",
-'movenosubpage' => "Disse pagina hef gien subpagina's.",
+'movelogpagetext' => 'Hieronder steet n lieste mit ziejen die herneumd bin.',
+'movesubpage' => '{{PLURAL:$1|Zied die deronder hank|Ziejen die deronder hangen}}',
+'movesubpagetext' => "De {{PLURAL:$1|zied die onder disse zied hank|$1 ziejen die onder disse zied hangen}} vie'j hieronder.",
+'movenosubpage' => 'Onder disse zied hangen gien aandere ziejen.',
 'movereason' => 'Reden:',
 'revertmove' => 'Weerummedreien',
 'delete_and_move' => 'Vortdoon en herneumen',
 'delete_and_move_text' => '==Mut vortedaon wörden==
 <div style="color: red"> Onder de nieje naam "[[:$1]]" besteet al n artikel. Wi\'j t vortdoon um plaotse te maken veur t herneumen?</div>',
-'delete_and_move_confirm' => 'Ja, disse pagina vortdoon',
+'delete_and_move_confirm' => 'Ja, disse zied vortdoon',
 'delete_and_move_reason' => 'Vortedaon vanwegen de herneuming van "[[$1]]"',
 'selfmove' => 'De naam kan niet ewiezigd wörden naor de naam die t al hef.',
-'immobile-source-namespace' => 'Pagina\'s in de naamruumte "$1" kunnen niet herneumd wörden',
-'immobile-target-namespace' => 'Pagina\'s kunnen niet herneumd wörden naor de naamruumte "$1"',
-'immobile-target-namespace-iw' => 'n Interwikiverwiezing is gien geldige bestemming veur t herneumen van n pagina.',
-'immobile-source-page' => 'Disse pagina kan niet herneumd wörden.',
-'immobile-target-page' => 'Kan niet herneumd wörden naor disse paginanaam.',
-'imagenocrossnamespace' => 'n Mediabestaand kan niet naor n aandere naamruumte verplaots wörden',
+'immobile-source-namespace' => 'Ziejen in de naamruumte "$1" kunnen niet herneumd wörden',
+'immobile-target-namespace' => 'Ziejen kunnen niet herneumd wörden naor de naamruumte "$1"',
+'immobile-target-namespace-iw' => 'n Interwikiverwiezing is gien geldige bestemming veur t herneumen van n zied.',
+'immobile-source-page' => 'Disse zied kan niet herneumd wörden.',
+'immobile-target-page' => 'Kan niet herneumd wörden naor disse ziednaam.',
+'imagenocrossnamespace' => 'n Mediabestaand kan niet naor n aandere naamruumte verplaotst wörden',
 'nonfile-cannot-move-to-file' => 'Je kunnen niet herneumen van en naor de bestaandsnaamruumte',
 'imagetypemismatch' => 'De nieje bestaandsextensie is niet gelieke an t bestaandstype',
 'imageinvalidfilename' => 'De nieje bestaandsnaam is ongeldig',
 'fix-double-redirects' => 'Alle deurverwiezingen die naor de ouwe titel verwiezen, herneumen naor de nieje titel',
 'move-leave-redirect' => 'n Deurverwiezing achterlaoten',
-'protectedpagemovewarning' => "'''Waorschuwing:''' disse pagina kan allinnig deur beheerders herneumd wörden.",
-'semiprotectedpagemovewarning' => "'''Waorschuwing:''' disse pagina kan allinnig deur eregistreerden gebrukers herneumd wörden.
+'protectedpagemovewarning' => "'''Waorschuwing:''' disse zied kan allinnig deur beheerders herneumd wörden.",
+'semiprotectedpagemovewarning' => "'''Waorschuwing:''' disse zied kan allinnig deur eregistreerden gebrukers herneumd wörden.
 De leste logboekregel steet hieronder:",
 'move-over-sharedrepo' => "== t Bestaand besteet al ==
 [[:$1]] besteet al in de edeelden mediadatabanke. A'j n bestaand naor disse titel herneumen, dan ku'j  t edeelden bestaand niet gebruken.",
@@ -2799,25 +2801,25 @@ De leste logboekregel steet hieronder:",
 Kies n aandere bestaandsnaam.',
 
 # Export
-'export' => "Pagina's uutvoeren",
-'exporttext' => "De tekste en geschiedenisse van n pagina of n antal pagina's kunnen in XML-formaot uutevoerd wörden. Dit bestaand ku'j daornao uutvoeren naor n aandere MediaWiki deur de [[Special:Import|invoerpagina]] te gebruken.
+'export' => 'Ziejen uutvoeren',
+'exporttext' => "De tekste en geschiedenisse van n zied of n koppel ziejen kunnen in XML-formaot uutevoerd wörden. Dit bestaand ku'j daornao uutvoeren naor n aandere MediaWiki deur de [[Special:Import|invoerzied]] te gebruken.
 
-Zet in t onderstaonde veld de namen van de pagina's die'j uutvoeren willen, één pagina per regel, en geef an o'j alle versies mit de bewarkingssamenvatting uutvoeren willen of allinnig de leste versies mit de bewarkingssamenvatting.
+Zet in t onderstaonde veld de namen van de ziejen die'j uutvoeren willen, één zied per regel, en gif an o'j alle versies mit de bewarkingssamenvatting uutvoeren willen of allinnig de leste versies mit de bewarkingssamenvatting.
 
-A'j dat leste doon willen dan ku'j oek n verwiezing gebruken, bieveurbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] veur de pagina \"[[{{MediaWiki:Mainpage}}]]\".",
-'exportall' => "Alle pagina's uutvoeren",
+A'j dat leste doon willen dan ku'j oek n verwiezing gebruken, bieveurbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] veur de zied \"[[{{MediaWiki:Mainpage}}]]\".",
+'exportall' => 'Alle ziejen uutvoeren',
 'exportcuronly' => 'Allinnig de actuele versie, niet de veurgeschiedenisse',
 'exportnohistory' => "----
-'''NB:''' t uutvoeren van de hele geschiedenisse is uuteschakeld vanwegen prestasieredens.",
-'exportlistauthors' => 'De hele auteurslieste opnemen veur elke pagina',
+'''NB:''' t uutvoeren van de hele geschiedenisse is uutezet vanwegen prestasieredens.",
+'exportlistauthors' => 'De hele auteurslieste opnemen veur elke zied',
 'export-submit' => 'Uutvoeren',
-'export-addcattext' => "Pagina's derbie doon uut de kategorie:",
+'export-addcattext' => 'Ziejen derbie doon uut de kategorie:',
 'export-addcat' => 'Derbie doon',
-'export-addnstext' => "Pagina's uut de volgende naamruumte derbie doon:",
+'export-addnstext' => 'Ziejen uut de volgende naamruumte derbie doon:',
 'export-addns' => 'Derbie doon',
 'export-download' => 'As bestaand opslaon',
 'export-templates' => 'Mit mallen derbie',
-'export-pagelinks' => "Pagina's waor naor verwezen wörden opnemen tot:",
+'export-pagelinks' => 'Ziejen waor naor verwezen wörden opnemen tot:',
 
 # Namespace 8 related
 'allmessages' => 'Alle systeemteksten',
@@ -2826,7 +2828,7 @@ A'j dat leste doon willen dan ku'j oek n verwiezing gebruken, bieveurbeeld [[{{#
 'allmessagescurrent' => 'De leste versie',
 'allmessagestext' => "Hieronder steet n lieste mit alle systeemteksten in de MediaWiki-naamruumte.
 Kiek oek effen bie [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] a'j biedragen willen an de algemene vertaling veur MediaWiki.",
-'allmessagesnotsupportedDB' => "Disse pagina kan niet gebruukt wörden umdat '''\$wgUseDatabaseMessages''' uuteschakeld is.",
+'allmessagesnotsupportedDB' => "Disse zied kan niet gebruukt wörden umdat '''\$wgUseDatabaseMessages''' uutezet is.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filtreer op wiezigingen:',
 'allmessages-filter-unmodified' => 'niet ewiezigd',
@@ -2838,36 +2840,36 @@ Kiek oek effen bie [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie]
 
 # Thumbnails
 'thumbnail-more' => 'vergroten',
-'filemissing' => 'Bestaand ontbreekt',
+'filemissing' => 'Bestaand ontbrik',
 'thumbnail_error' => 'Fout bie t laojen van de miniatuuraofbeelding: $1',
-'djvu_page_error' => 'DjVu-pagina buten bereik',
+'djvu_page_error' => 'DjVu-zied buten bereik',
 'djvu_no_xml' => 'Kon de XML-gegevens veur t DjVu-bestaand niet oproepen',
 'thumbnail-temp-create' => 'Kon gien tiedelik miniatuurbestaand anmaken.',
 'thumbnail-dest-create' => 'Kon gien miniatuurbestaand op de doellokasie opslaon.',
 'thumbnail_invalid_params' => 'Ongeldige parameters veur de miniatuuraofbeelding',
 'thumbnail_dest_directory' => 'De bestemmingsmap kon niet an-emaakt wörden.',
 'thumbnail_image-type' => 'Dit bestaandstype wörden niet ondersteund',
-'thumbnail_gd-library' => 'De instellingen veur de GD-biebeltheek bin niet compleet. De funksie $1 ontbreekt',
+'thumbnail_gd-library' => 'De instellingen veur de GD-biebeltheek bin niet compleet. De funksie $1 ontbrik',
 'thumbnail_image-missing' => 't Lik derop dat t bestaand vort is: $1',
 
 # Special:Import
-'import' => "Pagina's invoeren",
+'import' => 'Ziejen invoeren',
 'importinterwiki' => 'Transwiki-invoer',
-'import-interwiki-text' => 'Kies n wiki en paginanaam um in te voeren.
+'import-interwiki-text' => 'Kies n wiki en ziednaam um in te voeren.
 Versie- en auteursgegevens blieven hierbie beweerd.
 Alle transwiki-invoerhaandelingen wörden op-esleugen in t [[Special:Log/import|invoerlogboek]].',
-'import-interwiki-source' => 'Bronwiki/pagina:',
-'import-interwiki-history' => 'Kopieer de hele geschiedenisse veur disse pagina',
+'import-interwiki-source' => 'Bronwiki/zied:',
+'import-interwiki-history' => 'Kopieer de hele geschiedenisse veur disse zied',
 'import-interwiki-templates' => 'Alle mallen opnemen',
 'import-interwiki-submit' => 'Invoeren',
 'import-interwiki-namespace' => 'Doelnaamruumte:',
 'import-upload-filename' => 'Bestaandsnaam:',
 'import-comment' => 'Opmarkingen:',
-'importtext' => 'Gebruuk de [[Special:Export|uutvoerfunksie]] in de wiki waor de informasie vandaon kump.
+'importtext' => 'Gebruuk de [[Special:Export|uutvoerfunksie]] in de wiki waor de informasie vandaon kömp.
 Slao t op joew eigen systeem op, en stuur t daornao hier op.',
-'importstart' => "Pagina's an t invoeren...",
+'importstart' => 'Ziejen an t invoeren...',
 'import-revision-count' => '$1 {{PLURAL:$1|versie|versies}}',
-'importnopages' => "Der bin gien pagina's um in te voeren.",
+'importnopages' => 'Der bin gien ziejen um in te voeren.',
 'imported-log-entries' => '$1 {{PLURAL:$1|logboekregel|logboekregels}} in-evoerd.',
 'importfailed' => 'Invoeren is mislokt: $1',
 'importunknownsource' => 'Onbekend invoerbrontype',
@@ -2875,7 +2877,7 @@ Slao t op joew eigen systeem op, en stuur t daornao hier op.',
 'importbadinterwiki' => 'Foute interwikiverwiezing',
 'importnotext' => 'Leeg of gien tekste',
 'importsuccess' => 'Invoeren suksesvol!',
-'importhistoryconflict' => 'Der bin konflikten in de geschiedenisse van de pagina (is misschien eerder al in-evoerd)',
+'importhistoryconflict' => 'Der bin konflikten in de geschiedenisse van de zied (is misschien eerder al in-evoerd)',
 'importnosources' => 'Gien transwiki-invoerbronnen vastesteld en t drek inlaojen van versies is eblokkeerd.',
 'importnofile' => 'Der is gien invoerbestaand op-estuurd.',
 'importuploaderrorsize' => 't Opsturen van t invoerbestaand is mislokt.
@@ -2885,21 +2887,21 @@ t Bestaand is mer gedeeltelik an-ekeumen.',
 'importuploaderrortemp' => 't Opsturen van t invoerbestaand is mislokt.
 De tiedelike map is niet anwezig.',
 'import-parse-failure' => 'Fout bie t verwarken van de XML-invoer',
-'import-noarticle' => "Der bin gien pagina's um in te voeren!",
+'import-noarticle' => 'Der bin gien ziejen um in te voeren!',
 'import-nonewrevisions' => 'Alle versies bin al eerder in-evoerd.',
 'xml-error-string' => '$1 op regel $2, kolom $3 (byte $4): $5',
 'import-upload' => 'XML-gegevens derbie doon',
 'import-token-mismatch' => 'De sessiegegevens bin verleuren egaon. Probeer t opniej.',
 'import-invalid-interwiki' => 't Is niet meugelik um van de an-egeven wiki in te voeren.',
-'import-error-edit' => 'De pagina "$1" is niet in-evoerd umda\'j de rechten niet hebben um t te bewarken.',
-'import-error-create' => 'De pagina "$1" is niet in-evoerd umda\'j de rechten niet hebben um t an te maken.',
-'import-error-interwiki' => 'De pagina "$1" is niet in-evoerd umdat disse naam ereserveerd is veur externe verwiezingen (interwiki).',
-'import-error-special' => 'Pagina "$1" is niet in-evoerd umdat t eplaotst is in n spesiale naamruumte waor gien pagina\'s in eplaotst kunnen wörden.',
-'import-error-invalid' => 'De pagina" "$1" is niet in-evoerd umdat de naam ongeldig is.',
+'import-error-edit' => 'De zied "$1" is niet in-evoerd umda\'j de rechten niet hebben um t te bewarken.',
+'import-error-create' => 'De zied "$1" is niet in-evoerd umda\'j de rechten niet hebben um t an te maken.',
+'import-error-interwiki' => 'De zied "$1" is niet in-evoerd umdat disse naam ereserveerd is veur externe verwiezingen (interwiki).',
+'import-error-special' => 'Zied "$1" is niet in-evoerd umdat t eplaotst is in n spesiale naamruumte waor gien ziejen in eplaotst kunnen wörden.',
+'import-error-invalid' => 'De zied" "$1" is niet in-evoerd umdat de naam ongeldig is.',
 
 # Import log
 'importlogpage' => 'Invoerlogboek',
-'importlogpagetext' => "Administratieve invoer van pagina's mit geschiedenisse van aandere wiki's.",
+'importlogpagetext' => "Administratieve invoer van ziejen mit geschiedenisse van aandere wiki's.",
 'import-logentry-upload' => 'hef [[$1]] in-evoerd',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|versie|versies}}',
 'import-logentry-interwiki' => 'transwiki $1',
@@ -2909,7 +2911,7 @@ De tiedelike map is niet anwezig.',
 'javascripttest' => 'JavaScript testen',
 'javascripttest-disabled' => 'Disse funksie steet niet an op disse wiki.',
 'javascripttest-title' => 'Tests uutvoeren veur $1',
-'javascripttest-pagetext-noframework' => 'Disse pagina is ereserveerd veur t uutvoeren van JavaScript-testen.',
+'javascripttest-pagetext-noframework' => 'Disse zied is ereserveerd veur t uutvoeren van JavaScript-testen.',
 'javascripttest-pagetext-unknownframework' => 'Onbekend testraamwark "$1".',
 'javascripttest-pagetext-frameworks' => 'Kies een van de volgende testraamwarken: $1',
 'javascripttest-pagetext-skins' => 'Kies n vormgeving um de tests mee uut te voeren:',
@@ -2941,7 +2943,7 @@ De tiedelike map is niet anwezig.',
 'tooltip-ca-unwatch' => 'Smiet disse bladziede van oewe voalglieste',
 'tooltip-search' => '{{SITENAME}} duurzeukn',
 'tooltip-search-go' => 'Noar n bladziede mit disse naam goan as t besteet',
-'tooltip-search-fulltext' => "De pagina's vuur disse tekst zeuken",
+'tooltip-search-fulltext' => 'Zeuk noar ziedn woar disse tekst in steet',
 'tooltip-p-logo' => 'Goa noar t vuurblad',
 'tooltip-n-mainpage' => 'Goa noar t vuurblad',
 'tooltip-n-mainpage-description' => 'Goa noar t vuurblad',
@@ -2976,7 +2978,7 @@ De tiedelike map is niet anwezig.',
 'tooltip-diff' => 'Bekiek oew aegen wiezigingen',
 'tooltip-compareselectedversions' => 'Bekiek de verschillen tussen de ekeuzen versies.',
 'tooltip-watch' => 'Voog disse bladziede to an oew volglieste',
-'tooltip-watchlistedit-normal-submit' => "Pagina's vortdoon",
+'tooltip-watchlistedit-normal-submit' => 'Ziejen vortdoon',
 'tooltip-watchlistedit-raw-submit' => 'Volglieste biewarken',
 'tooltip-recreate' => 'Disse bladziede opniej anmaken, ondanks t feit dat t vortdoan is.',
 'tooltip-upload' => 'Bestaanden tovogen',
@@ -2993,31 +2995,31 @@ Iej könt in de bewearkingssamenvatting n reden opgeven.',
 'anonymous' => 'Anonieme {{PLURAL:$1|gebruker|gebrukers}} van {{SITENAME}}',
 'siteuser' => '{{SITENAME}}-gebruker $1',
 'anonuser' => 'Anonieme {{SITENAME}}-gebruker $1',
-'lastmodifiedatby' => 'Disse pagina is t lest ewiezigd op $2, $1 deur $3.',
+'lastmodifiedatby' => 'Disse zied is t lest ewiezigd op $2, $1 deur $3.',
 'othercontribs' => 'Ebaseerd op wark van $1.',
 'others' => 'aandere',
 'siteusers' => '{{SITENAME}}-{{PLURAL:$2|gebruker|gebrukers}}  $1',
 'anonusers' => 'Anonieme {{SITENAME}}-{{PLURAL:$2|gebruker|gebrukers}} $1',
-'creditspage' => 'Pagina-auteurs',
-'nocredits' => 'Der is gien auteursinformasie beschikbaor veur disse pagina.',
+'creditspage' => 'Auteursinformasie',
+'nocredits' => 'Der is gien auteursinformasie beschikbaor veur disse zied.',
 
 # Spam protection
 'spamprotectiontitle' => 'Moekfilter',
-'spamprotectiontext' => "De pagina die'j opslaon wollen is eblokkeerd deur de moekfilter.
-Meestentieds kump dit deur n uutgaonde verwiezing die op de zwarte lieste steet.",
+'spamprotectiontext' => "De zied die'j opslaon wollen is eblokkeerd deur de moekfilter.
+Meestentieds kömp dit deur n uutgaonde verwiezing die op de zwarte lieste steet.",
 'spamprotectionmatch' => 'Disse tekste zörgen derveur dat onze moekfilter alarmsleug: $1',
 'spambot_username' => 'MediaWiki ongewunste zooi oprumen',
 'spam_reverting' => 'Bezig mit t weerummezetten naor de leste versie die gien verwiezing hef naor $1',
 'spam_blanking' => 'Alle wiezigingen mit n verwiezing naor $1 wörden vortehaold',
-'spam_deleting' => 'In alle versies staon verwiezingen naor $1. Pagina vortedaon',
+'spam_deleting' => 'In alle versies staon verwiezingen naor $1. Zied vortedaon',
 
 # Info page
 'pageinfo-title' => 'Informasie over "$1"',
 'pageinfo-header-edits' => 'Bewarkingen',
 'pageinfo-header-watchlist' => 'Volglieste',
 'pageinfo-header-views' => 'Bekeken',
-'pageinfo-subjectpage' => 'Pagina:',
-'pageinfo-talkpage' => 'Overlegpagina',
+'pageinfo-subjectpage' => 'Zied:',
+'pageinfo-talkpage' => 'Overlegzied',
 'pageinfo-watchers' => 'Antal volgers',
 'pageinfo-edits' => 'Antal bewarkingen',
 'pageinfo-authors' => 'Antal verschillende auteurs',
@@ -3035,19 +3037,19 @@ Meestentieds kump dit deur n uutgaonde verwiezing die op de zwarte lieste steet.
 'skinname-modern' => 'Niejmoeds',
 
 # Patrolling
-'markaspatrolleddiff' => 'Markeer as ekontroleerd',
-'markaspatrolledtext' => 'Disse pagina is emarkeerd as ekontroleerd',
-'markedaspatrolled' => 'Emarkeerd as ekontroleerd',
-'markedaspatrolledtext' => 'De ekeuzen versie van [[:$1]] is emarkeerd as ekontroleerd.',
-'rcpatroldisabled' => 'De kontrolemeugelikheid op leste wiezigingen is uuteschakeld.',
-'rcpatroldisabledtext' => 'De meugelikheid um de leste wiezigingen as ekontroleerd te markeren is noen uuteschakeld.',
+'markaspatrolleddiff' => 'Zet op nao-ekeken',
+'markaspatrolledtext' => 'Disse zied is op nao-ekeken ezet',
+'markedaspatrolled' => 'Op nao-ekeken ezet',
+'markedaspatrolledtext' => 'De ekeuzen versie van [[:$1]] is op nao-ekeken ezet.',
+'rcpatroldisabled' => 'De naokiekmeugelikheid op "Leste wiezigingen" is uutezet.',
+'rcpatroldisabledtext' => 'De meugelikheid um de leste wiezigingen op nao-ekeken te zetten is noen uutezet.',
 'markedaspatrollederror' => 'De bewarking kon niet aofevinkt wörden.',
 'markedaspatrollederrortext' => 'Je mutten n wieziging selekteren um t as nao-ekeken te markeren.',
-'markedaspatrollederror-noautopatrol' => 'Je maggen joew eigen bewarkingen niet as ekontroleerd markeren.',
+'markedaspatrollederror-noautopatrol' => 'Je maggen joew eigen bewarkingen niet op nao-ekeken zetten.',
 
 # Patrol log
 'patrol-log-page' => 'Markeerlogboek',
-'patrol-log-header' => 'In dit logboek staon de versies die emarkeerd bin as ekontroleerd.',
+'patrol-log-header' => 'In dit logboek staon de versies die op nao-ekeken ezet bin.',
 'log-show-hide-patrol' => 'Markeerlogboek $1',
 
 # Image deletion
@@ -3068,12 +3070,12 @@ $1',
 # Media information
 'mediawarning' => "'''Waorschuwing:''' in dit bestaand zit misschien kodering die slicht is veur t systeem.",
 'imagemaxsize' => "Maximale aofmetingen van aofbeeldingen:<br />
-''(veur op de beschrievingspagina)''",
+''(veur op de beschrievingszied)''",
 'thumbsize' => 'Grootte van de miniatuuraofbeelding:',
-'widthheightpage' => "$1 × $2, $3 {{PLURAL:$3|pagina|pagina's}}",
+'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|zied|ziejen}}',
 'file-info' => 'Bestaandsgrootte: $1, MIME-type: $2',
 'file-info-size' => '$1 × $2 beeldpunten, bestaandsgrootte: $3, MIME-type: $4',
-'file-info-size-pages' => "$1 × $2 beeldpunten, bestaandsgrootte: $3, MIME-type: $4, $5 {{PLURAL:$5|pagina|pagina's}}",
+'file-info-size-pages' => '$1 × $2 beeldpunten, bestaandsgrootte: $3, MIME-type: $4, $5 {{PLURAL:$5|zied|ziejen}}',
 'file-nohires' => 'Gien hogere resolusie beschikbaor.',
 'svg-long-desc' => 'SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaandsgrootte: $3',
 'show-big-image' => 'Volle resolusie',
@@ -3089,7 +3091,7 @@ $1',
 # Special:NewFiles
 'newimages' => 'Nieje bestaanden',
 'imagelisttext' => "Hier volgt n lieste mit '''$1''' {{PLURAL:$1|bestaand|bestaanden}} esorteerd $2.",
-'newimages-summary' => 'Op disse spesiale pagina staon de bestaanden die der as lest bie-ekeumen bin.',
+'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)',
@@ -3106,18 +3108,18 @@ $1',
 'ago' => '$1 eleen',
 
 # Bad image list
-'bad_image_list' => "De opmaak is as volgt:
+'bad_image_list' => 'De opmaak is as volgt:
 
 Allinnig regels in n lieste (regels die beginnen mit *) wörden verwarkt.
 De eerste verwiezing op n regel mut n verwiezing ween naor n ongewunst bestaand.
-Alle volgende verwiezingen die op de zelfde regel staon, wörden behaandeld as uutzundering, zo as pagina's waorop t bestaand in te tekste op-eneumen is.",
+Alle volgende verwiezingen die op de zelfde regel staon, wörden behaandeld as uutzundering, zo as ziejen waorop t bestaand in te tekste op-eneumen is.',
 
 # Metadata
 'metadata' => 'Metadata',
 'metadata-help' => 'In dit bestaand zit metadata mit EXIF-informasie, die deur n fotokamera, inleesapparaot of fotobewarkingsprogramma op-estuurd kan ween.',
 'metadata-expand' => 'Bekiek uutebreiden gegevens',
 'metadata-collapse' => 'Verbarg uutebreiden gegevens',
-'metadata-fields' => 'De aofbeeldingsmetadatavelden in dit bericht staon oek op n aofbeeldingspagina as de metadatatabel in-eklapt is.
+'metadata-fields' => 'De aofbeeldingsmetadatavelden in dit bericht staon oek op n aofbeeldingszied as de metadatatabel in-eklapt is.
 Aandere velden wörden verbörgen.
 * make
 * model
@@ -3152,7 +3154,7 @@ Aandere velden wörden verbörgen.
 'exif-jpeginterchangeformat' => 'Aofstaand tot JPEG SOI',
 'exif-jpeginterchangeformatlength' => 'Bytes van JPEG-gegevens',
 'exif-whitepoint' => 'Witpuntchromaticiteit',
-'exif-primarychromaticities' => 'Chromaciteit van primaire kleuren',
+'exif-primarychromaticities' => 'Chromasiteit van primaere kleuren',
 'exif-ycbcrcoefficients' => 'Transformasiematrixkoëfficiënten veur de kleurruumte',
 'exif-referenceblackwhite' => 'Referensieweerden veur zwart/wit',
 'exif-datetime' => 'Tiedstip van digitalisasie',
@@ -3535,13 +3537,13 @@ Aandere velden wörden verbörgen.
 # E-mail address confirmation
 'confirmemail' => 'Bevestig netpostadres',
 'confirmemail_noemail' => 'Je hebben gien geldig netpostadres in-evoerd in joew [[Special:Preferences|veurkeuren]].',
-'confirmemail_text' => "Bie disse wiki mö'j je netpostadres bevestigen veurda'j de berichtopsies gebruken kunnen. Klik op de onderstaonde knoppe um n bevestigingsbericht te ontvangen. In dit bericht zit n kode mit n verwiezing; um je netpostadres te bevestigen mö'j disse verwiezing los doon.",
+'confirmemail_text' => "Bie disse wiki mu'j je netpostadres bevestigen veurda'j de berichtopsies gebruken kunnen. Klik op de onderstaonde knoppe um n bevestigingsbericht te ontvangen. In dit bericht zit n kode mit n verwiezing; um je netpostadres te bevestigen mu'j disse verwiezing openen.",
 'confirmemail_pending' => "Der is al n bevestigingskode op-estuurd; a'j net n gebrukersnaam an-emaakt hebben, wacht dan eerst n paor minuten tot da'j dit bericht ontvöngen hebben veurda'j n nieje kode anvragen.",
 'confirmemail_send' => 'Stuur n bevestigingskode',
 'confirmemail_sent' => 'Bevestigingsbericht verstuurd.',
 'confirmemail_oncreate' => "n Bevestigingskode is naor joew netpostadres verstuurd. Disse kode is niet neudig um an te melden, mer je mutten t wel bevestigen veurda'j de netpostmeugelikheen van disse wiki gebruken kunnen.",
 'confirmemail_sendfailed' => '{{SITENAME}} kon joe gien bevestigingskode toesturen.
-Kontroleer joew netpostadres op ongeldige tekens.
+Kiek nao of der gien ongeldige tekens in t netpostadres zitten.
 
 Fout bie t versturen: $1',
 'confirmemail_invalid' => 'Ongeldige bevestigingskode. De kode kan verlopen ween.',
@@ -3591,50 +3593,50 @@ De bevestigingskode zal verlopen op $4.',
 'invalidateemail' => 'Netpostbevestiging ofbreken',
 
 # Scary transclusion
-'scarytranscludedisabled' => '[Interwiki-intergrasie is uuteschakeld]',
+'scarytranscludedisabled' => '[Interwiki-intergrasie is uutezet]',
 'scarytranscludefailed' => '[De mal $1 kon niet op-ehaold wörden]',
 'scarytranscludetoolong' => '[URL is te lang]',
 
 # Delete conflict
-'deletedwhileediting' => "'''Waorschuwing''': disse pagina is vortedaon terwiel jie t an t bewarken waren!",
-'confirmrecreate' => "Gebruker [[User:$1|$1]] ([[User talk:$1|Overleg]]) hef disse pagina vortedaon naoda'j  begunnen bin mit joew wieziging, mit opgave van de volgende reden: ''$2''. Bevestig da'j t artikel herschrieven willen.",
-'confirmrecreate-noreason' => "Gebruker [[User:$1|$1]] ([[User talk:$1|overleg]]) hef disse pagina vortedaon naoda'j  begunnen bin mit joew wieziging. Bevestig da'j t artikel herschrieven willen.",
+'deletedwhileediting' => "'''Waorschuwing''': disse zied is vortedaon terwiel jie t an t bewarken waren!",
+'confirmrecreate' => "Gebruker [[User:$1|$1]] ([[User talk:$1|Overleg]]) hef disse zied vortedaon naoda'j  begunnen bin mit joew wieziging, mit opgave van de volgende reden: ''$2''. Bevestig da'j t artikel herschrieven willen.",
+'confirmrecreate-noreason' => "Gebruker [[User:$1|$1]] ([[User talk:$1|overleg]]) hef disse zied vortedaon naoda'j  begunnen bin mit joew wieziging. Bevestig da'j t artikel herschrieven willen.",
 'recreate' => 'Herschrieven',
 
 # action=purge
 'confirm_purge_button' => 'Bevestig',
-'confirm-purge-top' => "Klik op 'bevestig' um t tussengeheugen van disse pagina te legen.",
-'confirm-purge-bottom' => "t leegmaken van t tussengeheugen zörgt derveur da'j de leste versie van n pagina zien.",
+'confirm-purge-top' => "Klik op 'bevestig' um t tussengeheugen van disse zied te legen.",
+'confirm-purge-bottom' => "t leegmaken van t tussengeheugen zörgt derveur da'j de leste versie van n zied zien.",
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Oké',
-'confirm-watch-top' => 'Disse pagina op joew volglieste zetten?',
+'confirm-watch-top' => 'Disse zied op joew volglieste zetten?',
 'confirm-unwatch-button' => 'Oké',
-'confirm-unwatch-top' => 'Disse pagina van joew volglieste aofhaolen?',
+'confirm-unwatch-top' => 'Disse zied van joew volglieste aofhaolen?',
 
 # Multipage image navigation
 'imgmultipageprev' => '&larr; veurige',
 'imgmultipagenext' => 'volgende &rarr;',
 'imgmultigo' => 'Oké',
-'imgmultigoto' => 'Gao naor de pagina $1',
+'imgmultigoto' => 'Gao naor de zied $1',
 
 # Table pager
 'ascending_abbrev' => 'aofl.',
 'descending_abbrev' => 'opl.',
 'table_pager_next' => 'Volgende',
 'table_pager_prev' => 'Veurige',
-'table_pager_first' => 'Eerste pagina',
-'table_pager_last' => 'Leste pagina',
-'table_pager_limit' => 'Laot $1 resultaoten per pagina zien',
-'table_pager_limit_label' => 'Zaken per pagina:',
+'table_pager_first' => 'Eerste zied',
+'table_pager_last' => 'Leste zied',
+'table_pager_limit' => 'Laot $1 resultaoten per zied zien',
+'table_pager_limit_label' => 'Zaken per zied:',
 'table_pager_limit_submit' => 'Zeuk',
 'table_pager_empty' => 'Gien resultaoten',
 
 # Auto-summaries
-'autosumm-blank' => 'Pagina leegemaakt',
+'autosumm-blank' => 'Zied leegemaakt',
 'autosumm-replace' => "Tekste vervöngen deur '$1'",
 'autoredircomment' => 'deurverwiezing naor [[$1]]',
-'autosumm-new' => "Nieje pagina: '$1'",
+'autosumm-new' => "Nieje zied: '$1'",
 
 # Size units
 'size-kilobytes' => '$1 kB',
@@ -3643,35 +3645,35 @@ De bevestigingskode zal verlopen op $4.',
 'livepreview-loading' => 'An t laojen…',
 'livepreview-ready' => 'An t laojen… ree!',
 'livepreview-failed' => 'Rechtstreeks naokieken is niet meugelik!
-Kiek de pagina op de normale maniere nao.',
+Kiek de zied op de normale maniere nao.',
 'livepreview-error' => 'Verbiending niet meugelik: $1 "$2"
-Kiek de pagina op de normale maniere nao.',
+Kiek de zied op de normale maniere nao.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Wiezigingen die niejer bin as $1 {{PLURAL:$1|seconde|seconden}} staon misschien nog niet in de lieste.',
 'lag-warn-high' => 'De databanke is aorig zwaor belast. Wiezigingen die niejer bin as $1 {{PLURAL:$1|sekonde|sekonden}} staon daorumme misschien nog niet in de lieste.',
 
 # Watchlist editor
-'watchlistedit-numitems' => "Der {{PLURAL:$1|steet 1 pagina|staon $1 pagina's}} op joew volglieste, zonder overlegpagina's.",
+'watchlistedit-numitems' => 'Der {{PLURAL:$1|steet 1 zied|staon $1 ziejen}} op joew volglieste, zonder overlegziejen.',
 'watchlistedit-noitems' => 'Joew volglieste is leeg.',
 'watchlistedit-normal-title' => 'Volglieste bewarken',
-'watchlistedit-normal-legend' => "Disse pagina's van mien volglieste aofhaolen.",
-'watchlistedit-normal-explain' => "Pagina's die op joew volglieste staon, zie'j hieronder.
-Um n pagina van joew volglieste aof te haolen mö'j t vakjen dernaost anklikken, en klik dan op \"{{int:Watchlistedit-normal-submit}}\".
-Je kunnen oek [[Special:EditWatchlist/raw|de roewe lieste bewarken]].",
-'watchlistedit-normal-submit' => "Pagina's deraof haolen",
-'watchlistedit-normal-done' => "Der {{PLURAL:$1|is 1 pagina|bin $1 pagina's}} vortedaon uut joew volglieste:",
+'watchlistedit-normal-legend' => 'Disse ziejen van mien volglieste aofhaolen.',
+'watchlistedit-normal-explain' => 'Ziejen die op joew volglieste staon, zie\'j hieronder.
+Um n zied van joew volglieste aof te haolen mu\'j t vakjen dernaost anklikken, en klik dan op "{{int:Watchlistedit-normal-submit}}".
+Je kunnen oek [[Special:EditWatchlist/raw|de roewe lieste bewarken]].',
+'watchlistedit-normal-submit' => 'Ziejen deraof haolen',
+'watchlistedit-normal-done' => 'Der {{PLURAL:$1|is 1 zied|bin $1 ziejen}} vortedaon uut joew volglieste:',
 'watchlistedit-raw-title' => 'Roewe volglieste bewarken',
 'watchlistedit-raw-legend' => 'Roewe volglieste bewarken',
-'watchlistedit-raw-explain' => "Pagina's die op joew volglieste staon, zie'j hieronder. Je kunnen de lieste bewarken deur pagina's deruut vort te haolen en derbie te te zetten.
-Eén pagina per regel.
-A'j klaor bin, klik dan op \"{{int:Watchlistedit-raw-submit}}\".
-Je kunnen oek [[Special:EditWatchlist|t standardbewarkingsscharm gebruken]].",
+'watchlistedit-raw-explain' => 'Ziejen die op joew volglieste staon, zie\'j hieronder. Je kunnen de lieste bewarken deur ziejen deruut vort te haolen en derbie te te zetten.
+Eén zied per regel.
+A\'j klaor bin, klik dan op "{{int:Watchlistedit-raw-submit}}".
+Je kunnen oek [[Special:EditWatchlist|t standardbewarkingsscharm gebruken]].',
 'watchlistedit-raw-titles' => 'Titels:',
 'watchlistedit-raw-submit' => 'Volglieste biewarken',
 'watchlistedit-raw-done' => 'Joew volglieste is bie-ewörken.',
-'watchlistedit-raw-added' => "Der {{PLURAL:$1|is 1 pagina|bin $1 pagina's}} bie edaon:",
-'watchlistedit-raw-removed' => "Der {{PLURAL:$1|is 1 pagina|bin $1 pagina's}} vortedaon:",
+'watchlistedit-raw-added' => 'Der {{PLURAL:$1|is 1 zied|bin $1 ziejen}} bie edaon:',
+'watchlistedit-raw-removed' => 'Der {{PLURAL:$1|is 1 zied|bin $1 ziejen}} vortedaon:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Wiezigingen bekieken',
@@ -3688,7 +3690,7 @@ Je kunnen oek [[Special:EditWatchlist|t standardbewarkingsscharm gebruken]].",
 # Special:Version
 'version' => 'Versie',
 'version-extensions' => 'Uutbreidingen die installeerd bin',
-'version-specialpages' => "Spesiale pagina's",
+'version-specialpages' => 'Spesiale ziejen',
 'version-parserhooks' => 'Parserhoeken',
 'version-variables' => 'Variabels',
 'version-antispam' => 'Veurkoemen van ongewunste bewarkingen',
@@ -3722,7 +3724,7 @@ Samen mit dit programma heur je n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de
 'filepath' => 'Bestaandslokasie',
 'filepath-page' => 'Bestaand:',
 'filepath-submit' => 'Zeuken',
-'filepath-summary' => 'Disse spesiale pagina geef t hele pad veur n bestaand. 
+'filepath-summary' => 'Disse spesiale zied gif t hele pad veur n bestaand. 
 Aofbeeldingen wörden in resolusie helemaole weeregeven. 
 Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma opend.',
 
@@ -3738,27 +3740,27 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'fileduplicatesearch-noresults' => 'Der is gien bestaand mit de naam "$1" evunnen.',
 
 # Special:SpecialPages
-'specialpages' => "Spesiale pagina's",
+'specialpages' => 'Spesiale ziejen',
 'specialpages-note' => '----
-* Normale spesiale pagina\'s.
-* <strong class="mw-specialpagerestricted">Beparkt toegankelike spesiale pagina\'s.</strong>
-* <span class="mw-specialpagecached">Spesiale pagina\'s mit allinnig gegevens uut t tussengeheugen (kunnen verouwerd ween).</span>',
+* Normale spesiale ziejen.
+* <strong class="mw-specialpagerestricted">Beparkt toegankelike spesiale ziejen.</strong>
+* <span class="mw-specialpagecached">Spesiale ziejen mit allinnig gegevens uut t tussengeheugen (kunnen verouwerd ween).</span>',
 'specialpages-group-maintenance' => 'Onderhoudsliesten',
-'specialpages-group-other' => "Overige spesiale pagina's",
+'specialpages-group-other' => 'Aandere spesiale ziejen',
 'specialpages-group-login' => 'Anmelden / inschrieven',
 'specialpages-group-changes' => 'Leste wiezigingen en logboeken',
 'specialpages-group-media' => 'Media-overzichten en nieje bestaanden',
 'specialpages-group-users' => 'Gebrukers en rechten',
-'specialpages-group-highuse' => "Veulgebruukten pagina's",
-'specialpages-group-pages' => 'Paginaliesten',
-'specialpages-group-pagetools' => 'Paginahulpmiddels',
+'specialpages-group-highuse' => 'Veulgebruukten ziejen',
+'specialpages-group-pages' => 'Liesten mit ziejen',
+'specialpages-group-pagetools' => 'Ziedhulpmiddels',
 'specialpages-group-wiki' => 'Wikigegevens en -hulpmiddels',
-'specialpages-group-redirects' => "Deurverwiezende spesiale pagina's",
+'specialpages-group-redirects' => 'Deurverwiezende spesiale ziejen',
 'specialpages-group-spam' => 'Hulpmiddels tegen ongewunste bewarkingen',
 
 # Special:BlankPage
-'blankpage' => 'Lege pagina',
-'intentionallyblankpage' => 'Disse pagina is bewust leeg eleuten.',
+'blankpage' => 'Lege zied',
+'intentionallyblankpage' => 'Disse zied is bewust leeg eleuten.',
 
 # External image whitelist
 'external_image_whitelist' => ' #Laot disse regel onveraanderd<pre>
@@ -3775,7 +3777,7 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'tag-filter' => '[[Special:Tags|Etiketfilter]]:',
 'tag-filter-submit' => 'Filtreren',
 'tags-title' => 'Etiket',
-'tags-intro' => 'Op disse pagina staon de etiketten waormee de programmatuur elke bewarking kan markeren, en de betekenisse dervan.',
+'tags-intro' => 'Op disse zied staon de etiketten waormee de programmatuur elke bewarking kan markeren, en de betekenisse dervan.',
 'tags-tag' => 'Etiketnaam',
 'tags-display-header' => 'Weergave in wiezigingsliesten',
 'tags-description-header' => 'Beschrieving van de betekenisse',
@@ -3784,10 +3786,10 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'tags-hitcount' => '$1 {{PLURAL:$1|wieziging|wiezigingen}}',
 
 # Special:ComparePages
-'comparepages' => "Pagina's vergelieken",
-'compare-selector' => 'Paginaversies vergelieken',
-'compare-page1' => 'Pagina 1',
-'compare-page2' => 'Pagina 2',
+'comparepages' => 'Ziejen vergelieken',
+'compare-selector' => 'Ziedversies vergelieken',
+'compare-page1' => 'Zied 1',
+'compare-page2' => 'Zied 2',
 'compare-rev1' => 'Versie 1',
 'compare-rev2' => 'Versie 2',
 'compare-submit' => 'Vergelieken',
@@ -3796,13 +3798,13 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'compare-revision-not-exists' => "De versie die'j op-egeven hebben, besteet niet.",
 
 # Database error messages
-'dberr-header' => 'Disse wiki hef n probleem',
+'dberr-header' => 'Disse wiki hef wat kuren',
 'dberr-problems' => 't Spiet ons, mer disse webstee hef op t moment wat techniese problemen.',
 'dberr-again' => 'Wach n paor minuten en probeer t daornao opniej.',
 'dberr-info' => '(Kan gien verbiending maken mit de databankeserver: $1)',
 'dberr-usegoogle' => "Misschien ku'j ondertussen zeuken via Google.",
-'dberr-outofdate' => "Let op: indexen die zee hebben van onze pagina's bin misschien niet aktueel.",
-'dberr-cachederror' => 'Disse pagina is n kopie uut t tussengeheugen en is misschien niet aktueel.',
+'dberr-outofdate' => 'Let op: indexen die zee hebben van onze ziejen bin misschien niet aktueel.',
+'dberr-cachederror' => 'Disse zied is n kopie uut t tussengeheugen en is misschien niet aktueel.',
 
 # HTML forms
 'htmlform-invalid-input' => 'Der bin problemen mit n paor in-egeven weerden',
@@ -3821,17 +3823,17 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'sqlite-no-fts' => 'Versie $1 zonder ondersteuning veur "full-text" zeuken',
 
 # New logging system
-'logentry-delete-delete' => '$1 hef de pagina $3 vortedaon',
-'logentry-delete-restore' => '$1 hef de pagina $3 weerummezet',
+'logentry-delete-delete' => '$1 hef de zied $3 vortedaon',
+'logentry-delete-restore' => '$1 hef de zied $3 weerummezet',
 'logentry-delete-event' => '$1 hef de zichtbaorheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 ewiezigd: $4',
-'logentry-delete-revision' => '$1 hef de zichtbaorheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 ewiezigd: $4',
+'logentry-delete-revision' => '$1 hef de zichtbaorheid van {{PLURAL:$5|een versie|$5 versies}} van de zied $3 ewiezigd: $4',
 'logentry-delete-event-legacy' => '$1 hef de zichtbaorheid van logboekregels van $3 ewiezigd',
-'logentry-delete-revision-legacy' => '$1 hef de zichtbaorheid van versies van de pagina $3 ewiezigd.',
-'logentry-suppress-delete' => '$1 hef de pagina $3 onderdrokt',
+'logentry-delete-revision-legacy' => '$1 hef de zichtbaorheid van versies van de zied $3 ewiezigd.',
+'logentry-suppress-delete' => '$1 hef de zied $3 onderdrokt',
 'logentry-suppress-event' => '$1 hef de zichtbaorheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 sluuksem ewiezigd: $4',
-'logentry-suppress-revision' => '$1 hef de zichtbaorheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 sluuksem ewiezigd: $4',
+'logentry-suppress-revision' => '$1 hef de zichtbaorheid van {{PLURAL:$5|een versie|$5 versies}} van de zied $3 sluuksem ewiezigd: $4',
 'logentry-suppress-event-legacy' => '$1 hef de zichtbaorheid van logboekregels van $3 sluuksem ewiezigd',
-'logentry-suppress-revision-legacy' => '$1 hef de zichtbaorheid van versies van de pagina $3 sluuksem ewiezigd.',
+'logentry-suppress-revision-legacy' => '$1 hef de zichtbaorheid van versies van de zied $3 sluuksem ewiezigd.',
 'revdelete-content-hid' => 'inhoud verbörgen',
 'revdelete-summary-hid' => 'bewarkingssamenvatting verbörgen',
 'revdelete-uname-hid' => 'gebrukersnaam verbörgen',
@@ -3840,12 +3842,12 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'revdelete-uname-unhid' => 'gebrukersnaam zichtbaor emaakt',
 'revdelete-restricted' => 'hef beparkingen an beheerders op-eleg',
 'revdelete-unrestricted' => 'hef beparkingen veur beheerders deraof ehaold',
-'logentry-move-move' => '$1 herneumden de pagina $3 naor $4',
-'logentry-move-move-noredirect' => '$1 herneumden de pagina $3 naor $4 zonder n deurverwiezing achter te laoten',
-'logentry-move-move_redir' => '$1 herneumden de pagina $3 naor $4 over n deurverwiezing heer',
-'logentry-move-move_redir-noredirect' => '$1 herneumden de pagina $3 naor $4 over n deurverwiezing heer zonder n deurverwiezing achter te laoten',
-'logentry-patrol-patrol' => '$1 hef versie $4 van pagina $3 as ekontroleerd emarkeerd',
-'logentry-patrol-patrol-auto' => '$1 hef versie $4 van pagina $3 automaties as ekontroleerd emarkeerd',
+'logentry-move-move' => '$1 herneumden de zied $3 naor $4',
+'logentry-move-move-noredirect' => '$1 herneumden de zied $3 naor $4 zonder n deurverwiezing achter te laoten',
+'logentry-move-move_redir' => '$1 herneumden de zied $3 naor $4 over n deurverwiezing heer',
+'logentry-move-move_redir-noredirect' => '$1 herneumden de zied $3 naor $4 over n deurverwiezing heer zonder n deurverwiezing achter te laoten',
+'logentry-patrol-patrol' => '$1 hef versie $4 van de zied $3 op nao-ekeken ezet',
+'logentry-patrol-patrol-auto' => '$1 hef versie $4 van de zied $3 automaties op nao-ekeken ezet',
 'logentry-newusers-newusers' => '$1 hef n gebruker an-emaakt',
 'logentry-newusers-create' => '$1 hef n gebruker an-emaakt',
 'logentry-newusers-create2' => '$1 hef n gebruker $3 an-emaakt',
@@ -3854,16 +3856,16 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 
 # Feedback
 'feedback-bugornote' => 'A\'j zovere bin um n technies probleem nauwkeurig te beschrieven, [$1 meld dan n programmafout].
-Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zullen op de pagina "[$3 $2]" ezet wörden, samen mit joew gebrukersnaam en de webkieker die\'j gebruken.',
+Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zullen op de zied "[$3 $2]" ezet wörden, samen mit joew gebrukersnaam en de webkieker die\'j gebruken.',
 'feedback-subject' => 'Onderwarp:',
 'feedback-message' => 'Bericht:',
 'feedback-cancel' => 'Aofbreken',
 'feedback-submit' => 'Troegkoppeling opslaon',
-'feedback-adding' => 'Joew troegkoppeling wörden op de pagina ezet...',
+'feedback-adding' => 'Joew troegkoppeling wörden op de zied ezet...',
 'feedback-error1' => 'Fout: onbekend resultaot uut de API',
 'feedback-error2' => 'Fout: de bewarking is mislokt',
 'feedback-error3' => 'Fout: gien reaksie van de API',
-'feedback-thanks' => 'Bedankt! Joew troegkoppeling is op de pagina "[$2 $1]" ezet.',
+'feedback-thanks' => 'Bedankt! Joew troegkoppeling is op de zied "[$2 $1]" ezet.',
 'feedback-close' => 'Ree',
 'feedback-bugcheck' => 'Mooi! Kiek nao of t niet al één van de [$1 bekende problemen] is.',
 'feedback-bugnew' => 'Ik heb t nao-ekeken. Meld n nieje programmafout',
@@ -3877,7 +3879,7 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Duplikaotbestaand dat al vortedaon is|Duplikaotbestaanden die al vortedaon bin}}',
 'api-error-duplicate-popup-title' => 'Zelfde {{PLURAL:$1|bestaand|bestaanden}}',
 'api-error-empty-file' => "t Bestaand da'j op-estuurd hebben is leeg.",
-'api-error-emptypage' => "Je maggen gien lege nieje pagina's anmaken.",
+'api-error-emptypage' => 'Je maggen gien lege nieje ziejen anmaken.',
 'api-error-fetchfileerror' => 'Interne fout: der is iets verkeerd egaon mit t ophaolen van t bestaand.',
 'api-error-fileexists-forbidden' => 'Der besteet al n bestaand mit de naam "$1" die niet overschreven kan wörden.',
 'api-error-fileexists-shared-forbidden' => 'Der besteet al n bestaand mit de naam "$1" in de edeelden bestaandsarchief dat niet overschreven kan wörden.',
@@ -3895,7 +3897,7 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'api-error-mustbeloggedin' => 'Je mutten an-emeld ween um bestaanden te kunnen opsturen.',
 'api-error-mustbeposted' => 'Der zit n fout in de programmatuur. Der wörden gien gebruukemaakt van de juuste HTTP-methode.',
 'api-error-noimageinfo' => 't Opsturen van t bestaand is aoferond, mer de server hef gien gegevens over t bestaand egeven.',
-'api-error-nomodule' => 'Interne fout: der is gien inlaodmodule in-esteld.',
+'api-error-nomodule' => 'Interne fout: der is gien inlaojmodule in-esteld.',
 'api-error-ok-but-empty' => 'Interne fout: de server hef gien gegevens weerestuurd.',
 'api-error-overwrite' => 'Je maggen gien bestaond bestaand overschrieven.',
 'api-error-stashfailed' => 'Interne fout: de server kon t tiedelike bestaand niet opslaon.',
@@ -3919,6 +3921,4 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Kon gien vergrendeling op server $1 zetten.',
 );
index 1bd7c73..da926be 100644 (file)
@@ -361,17 +361,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Bewerken van deelpagina’s mogelijk maken met een rechtermuisklik op een tussenkop (vereist JavaScript)',
 'tog-showtoc' => 'Inhoudsopgave weergeven (voor pagina’s met minstens 3 tussenkoppen)',
 'tog-rememberpassword' => 'Aanmeldgegevens onthouden (maximaal $1 {{PLURAL:$1|dag|dagen}})',
-'tog-watchcreations' => 'Pagina’s die ik aanmaak automatisch volgen',
-'tog-watchdefault' => 'Pagina’s die ik bewerk automatisch volgen',
-'tog-watchmoves' => 'Pagina’s die ik hernoem automatisch volgen',
-'tog-watchdeletion' => 'Pagina’s die ik verwijder automatisch volgen',
+'tog-watchcreations' => "Pagina's die ik aanmaak en bestanden die ik upload automatisch volgen",
+'tog-watchdefault' => 'Pagina’s en bestanden die ik bewerk automatisch volgen',
+'tog-watchmoves' => 'Pagina’s en bestanden die ik hernoem automatisch volgen',
+'tog-watchdeletion' => 'Pagina’s en bestanden die ik verwijder automatisch volgen',
 'tog-minordefault' => 'Mijn bewerkingen als ‘klein’ markeren',
 'tog-previewontop' => 'Voorvertoning boven bewerkingsveld weergeven',
 'tog-previewonfirst' => 'Voorvertoning bij eerste bewerking weergeven',
 'tog-nocache' => "Cachen van pagina's door de browser uitschakelen",
-'tog-enotifwatchlistpages' => 'Mij e-mailen bij bewerkingen van pagina’s op mijn volglijst',
+'tog-enotifwatchlistpages' => 'Mij e-mailen bij bewerkingen van pagina’s of bestanden op mijn volglijst',
 'tog-enotifusertalkpages' => 'Mij e-mailen als iemand mijn overlegpagina wijzigt',
-'tog-enotifminoredits' => 'Mij e-mailen bij kleine bewerkingen van pagina’s op mijn volglijst',
+'tog-enotifminoredits' => 'Mij e-mailen bij kleine bewerkingen van pagina’s en bestanden op mijn volglijst',
 'tog-enotifrevealaddr' => 'Mijn e-mailadres weergeven in e-mailberichten',
 'tog-shownumberswatching' => 'Het aantal gebruikers weergeven dat deze pagina volgt',
 'tog-oldsig' => 'Bestaande ondertekening:',
@@ -508,7 +508,7 @@ $messages = array(
 'vector-simplesearch-preference' => 'Verbeterde zoeksuggesties inschakelen (alleen voor het uiterlijk Vector)',
 'vector-view-create' => 'Aanmaken',
 'vector-view-edit' => 'Bewerken',
-'vector-view-history' => 'Geschiedenis bekijken',
+'vector-view-history' => 'Geschiedenis weergeven',
 'vector-view-view' => 'Lezen',
 'vector-view-viewsource' => 'Brontekst bekijken',
 'actions' => 'Handelingen',
@@ -705,8 +705,8 @@ Maak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAM
 'cannotdelete' => 'De pagina of het bestand "$1" kon niet verwijderd worden.
 Mogelijk is deze al door iemand anders verwijderd.',
 'cannotdelete-title' => 'Pagina "$1" kan niet verwijderd worden',
-'delete-hook-aborted' => 't Vortdoon is aofebreuken deur n haak.
-Der is gien informasie over beschikbaor.',
+'delete-hook-aborted' => 'Het verwijderen is afgebroken door een hook.
+Er is geen toelichting beschikbaar.',
 'badtitle' => 'Ongeldige paginanaam',
 'badtitletext' => 'De naam van de opgevraagde pagina was ongeldig, leeg of bevatte een verkeerde intertaal- of interwikinaamverwijzing.
 Wellicht bevat de paginanaam niet toegestane tekens.',
@@ -1625,6 +1625,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'right-writeapi' => 'Bewerken via de API',
 'right-delete' => "Pagina's verwijderen",
 'right-bigdelete' => "Pagina's met een grote geschiedenis verwijderen",
+'right-deletelogentry' => 'Specifieke logboekregels verwijderen en terugplaatsen',
 'right-deleterevision' => "Versies van pagina's verbergen",
 'right-deletedhistory' => 'Verwijderde versies bekijken, zonder te kunnen zien wat verwijderd is',
 'right-deletedtext' => 'Verwijderde tekst en wijzigingen tussen verwijderde versies bekijken',
@@ -1950,6 +1951,7 @@ Als het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop
 'lockmanager-fail-releaselock' => 'Het was niet mogelijk vergrendeling van "$1" op te heffen.',
 'lockmanager-fail-db-bucket' => 'Het was niet mogelijk om in contact te komen met voldoende vergrendelingsdatabases in de bucket $1.',
 'lockmanager-fail-db-release' => 'Het was niet mogelijk om de vergrendeling voor de database $1 op te heffen.',
+'lockmanager-fail-svr-acquire' => 'Het was niet mogelijk een vergrendeling te krijgen op server $1.',
 'lockmanager-fail-svr-release' => 'Het was niet mogelijk om de vergrendeling voor de server $1 op te heffen.',
 
 # ZipDirectoryReader
@@ -2502,6 +2504,8 @@ Wees voorzichtig.',
 'rollback' => 'Wijzigingen ongedaan maken',
 'rollback_short' => 'Terugdraaien',
 'rollbacklink' => 'terugdraaien',
+'rollbacklinkcount' => '{{PLURAL:$1|één bewerking|$1 bewerkingen}} terugdraaien',
+'rollbacklinkcount-morethan' => 'Meer dan {{PLURAL:$1|één bewerking|$1 bewerkingen}} terugdraaien',
 'rollbackfailed' => 'Ongedaan maken van wijzigingen mislukt.',
 'cantrollback' => 'Ongedaan maken van wijzigingen onmogelijk: deze pagina heeft slechts 1 auteur.',
 'alreadyrolled' => 'Het is niet mogelijk om de bewerking van de pagina [[:$1]] door [[User:$2|$2]] ([[User talk:$2|overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|bijdragen]]) ongedaan te maken.
@@ -4128,6 +4132,4 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Het was niet mogelijk een vergrendeling te krijgen op server $1.',
 );
index f106a4c..b5466dc 100644 (file)
@@ -1062,7 +1062,7 @@ Grunnen som vart gjeven av $3 er ''$2''",
 'rev-deleted-comment' => '(endringssamandrag fjerna)',
 'rev-deleted-user' => '(brukarnamnet er fjerna)',
 'rev-deleted-event' => '(fjerna loggoppføring)',
-'rev-deleted-user-contribs' => 'brukarnamn eller IP-adresse er fjerna - endringa er skjult i bidraga',
+'rev-deleted-user-contribs' => '[brukarnamn eller IP-adresse fjerna - endringa er gøymd frå bidraga]',
 'rev-deleted-text-permission' => "Denne sideversjonen er vorten '''sletta'''.
 Det kan vere detaljar i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
 'rev-deleted-text-unhide' => "Denne sideversjonen er vorten '''sletta'''.
@@ -2579,7 +2579,7 @@ I desse falla lyt du flytte eller flette saman sida manuelt.",
 'move-subpages' => 'Flytt undersider (opp til $1)',
 'move-talk-subpages' => 'Flytt undersider av diskusjonssida (opp til $1)',
 'movepage-page-exists' => 'Sida $1 finst alt og kan ikkje skrivast over automatisk.',
-'movepage-page-moved' => 'Sida $1 har blitt flytta til $2.',
+'movepage-page-moved' => 'Sida $1 er flytt til $2.',
 'movepage-page-unmoved' => 'Sida $1 kunne ikkje flyttast til $2.',
 'movepage-max-pages' => 'Grensa på {{PLURAL:$1|éi side|$1 sider}} er nådd; ingen fleire sider kjem til å verte flytta automatisk.',
 'movelogpage' => 'Flyttelogg',
index ccc53c4..00e9b8b 100644 (file)
@@ -402,7 +402,7 @@ $messages = array(
 'qbpageoptions' => 'ଏହି ପୃଷ୍ଠାଟି',
 'qbpageinfo' => 'ଭିତର ଚିଜ',
 'qbmyoptions' => 'ମୋ ପୃଷ୍ଠାଗୁଡ଼ିକ',
-'qbspecialpages' => 'ନିà¬\86ରା ପୃଷ୍ଠା',
+'qbspecialpages' => 'ବିଶà­\87ଷ ପୃଷ୍ଠା',
 'faq' => 'ବାରମ୍ବାର ପଚରାଯାଉଥିବା ପ୍ରଶ୍ନ',
 'faqpage' => 'Project:ବାରମ୍ବାର ପଚରାଯାଉଥିବା ପ୍ରଶ୍ନ',
 
@@ -454,7 +454,7 @@ $messages = array(
 'newpage' => 'ନୂଆ ପୃଷ୍ଠା',
 'talkpage' => 'ପୃଷ୍ଠାକୁ ଆଲୋଚନା କରନ୍ତୁ',
 'talkpagelinktext' => 'କଥାଭାଷା',
-'specialpage' => 'ନିà¬\86ରା ପୃଷ୍ଠା',
+'specialpage' => 'ବିଶà­\87ଷ ପୃଷ୍ଠା',
 'personaltools' => 'ନିଜର ଟୁଲ',
 'postcomment' => 'ନୂଆ ଭାଗ',
 'articlepage' => 'ସୂଚୀ ପୃଷ୍ଠାଟି ଦେଖାଇବେ',
@@ -520,10 +520,10 @@ $1',
 'newmessageslink' => 'ନୂଆ ମେସେଜ',
 'newmessagesdifflink' => 'ଶେଷ ବଦଳ',
 'youhavenewmessagesmulti' => '$1 ତାରିଖରେ ନୂଆ ଚିଠିଟିଏ ଆସିଛି',
-'editsection' => 'ସମ୍ପାଦନ',
+'editsection' => 'ସମ୍ପାଦନ',
 'editold' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
 'viewsourceold' => 'ମୂଳାଧାର ଦେଖିବେ',
-'editlink' => 'ସମ୍ପାଦନ',
+'editlink' => 'ସମ୍ପାଦନ',
 'viewsourcelink' => 'ମୂଳାଧାର ଦେଖିବେ',
 'editsectionhint' => '$1 ଭାଗଟିକୁ ବଦଳାଇବେ',
 'toc' => 'ଭିତର ଚିଜ',
@@ -549,7 +549,7 @@ $1',
 'nstab-main' => 'ପୃଷ୍ଠା',
 'nstab-user' => 'ବ୍ୟବହାରକାରୀଙ୍କର ପୃଷ୍ଠା',
 'nstab-media' => 'ମେଡିଆ ପରଦ',
-'nstab-special' => 'ନିà¬\86ରା ପୃଷ୍ଠା',
+'nstab-special' => 'ବିଶà­\87ଷ ପୃଷ୍ଠା',
 'nstab-project' => 'ପ୍ରକଳ୍ପ ପୃଷ୍ଠା',
 'nstab-image' => 'ଫାଇଲ',
 'nstab-mediawiki' => 'ସନ୍ଦେଶ',
@@ -591,8 +591,8 @@ $1',
 
 ଯଦି ଆପଣ ଖୋଜିଥିବା ପୃଷ୍ଠାଟି କେହି ଉଡ଼ାଇ ଦେଇଥାଏ ତେବେ ଏମିତି ହୋଇପାରେ ।
 
-ଯଦି à¬¸à­\87ମିତି à¬¹à­\8bà¬\87ନଥାà¬\8f à¬¤à­\87ବà­\87 à¬\86ପଣ à¬\8fହି à¬¸à¬«à¬\9fବେରରେ କିଛି ଅସୁବିଧା ଖୋଜି ପାଇଛନ୍ତି ।
-କେହି ଜଣେ ଟିକେ [[Special:ListUsers/sysop|ପରିଛା]] ଙ୍କୁ ଏହି ଇଉଆରେଲ (url) ସହ ଚିଠିଟିଏ ପଠାଇ ଦିଅନ୍ତୁ ।',
+ଯଦି à¬¸à­\87ମିତି à¬¹à­\8bà¬\87ନଥାà¬\8f à¬¤à­\87ବà­\87 à¬\86ପଣ à¬\8fହି à¬¸à¬«à­\8dà¬\9fà­±େରରେ କିଛି ଅସୁବିଧା ଖୋଜି ପାଇଛନ୍ତି ।
+କେହି ଜଣେ [[Special:ListUsers/sysop|ପରିଚାଳକ]] ଙ୍କୁ ଏହି ଇଉଆରଏଲ (url) ସହ ଚିଠିଟିଏ ପଠାଇ ଦିଅନ୍ତୁ ।',
 'missingarticle-rev' => '(ସଙ୍କଳନ#: $1)',
 'missingarticle-diff' => '(ତଫାତ: $1, $2)',
 'readonly_lag' => 'ଏହି ଡାଟାବେସଟିରେ ଆପେ ଆପେ ତାଲା ପଡ଼ିଯାଇଅଛି, ଇତିମଧ୍ୟରେ ସାନ ଡାଟାବେସଟି ମୁଖ୍ୟ ଡାଟାବେସ ସହିତ ଯୋଗାଯୋଗ କରୁଅଛି',
@@ -671,8 +671,8 @@ $2',
 'userlogout' => 'ଲଗ ଆଉଟ',
 'notloggedin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'nologin' => 'ଖାତାଟିଏ ନାହିଁ? $1।',
-'nologinlink' => 'ନà­\81ଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ',
-'createaccount' => 'ନà­\81à¬\86 à¬\96ାତା à¬\96à­\8bଲିବା',
+'nologinlink' => 'ନà­\82ଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ',
+'createaccount' => 'ନà­\82à¬\86 à¬\96ାତାà¬\9fିà¬\8f à¬\96à­\8bଲନà­\8dତà­\81',
 'gotaccount' => 'ଆଗରୁ ଖାତାଟିଏ ଅଛି କି? $1.',
 'gotaccountlink' => 'ଲଗ ଇନ',
 'userlogin-resetlink' => 'ଲଗଇନ ତଥ୍ୟ ସବୁ ଭୁଲିଗେଲେକି?',
@@ -1133,7 +1133,7 @@ $3ଙ୍କ ଦେଇ ଦିଆଯାଇଥିବା କାରଣ ହେଲା '
 'revdelete-selected' => "'''[[:$1]]ର {{PLURAL:$2|ବଛା ସଙ୍କଳନ|ବଛା ସଙ୍କଳନ}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|ବଛା ଲଗ ଘଟଣା|ବଛା ଲଗ ଘଟଣାବଳୀ}}:'''",
 'revdelete-text' => "'''ଲିଭାଯାଇଥିବା ସଂସ୍କରଣ ଓ ଘଟଣାସମୂହ ଏବେ ବି ପୃଷ୍ଠାର ଇତିହାସରେ ରହିବ, କିନ୍ତୁ ଜନସାଧାରଣଙ୍କୁ ସେସବୁର କିଛି ଭାଗ ଲୁଚାଇ ରଖାଯିବ ।'''
-à¬\8fହି {{SITENAME}}ର à¬¬à¬¾à¬\95ି à¬ªà¬°à¬¿à¬\9bାଗଣ ଲୁଚିରହିଥିବା ବିଷୟବସ୍ତୁ ଦେଖିପାରିବେ ଓ ଅଧିକ ବାରଣ ଥିଲେ ହେଁ ସେହି ଏକା ଇଣ୍ଟରଫେସ ବ୍ୟବହାର କରି ତାହାକୁ ଆଉଥରେ ଲିଭାଯିବାରୁ ଅଟକାଇପାରିବେ ।",
+à¬\8fହି {{SITENAME}}ର à¬¬à¬¾à¬\95ି à¬ªà¬°à¬¿à¬\9aାଳà¬\95ଗଣ ଲୁଚିରହିଥିବା ବିଷୟବସ୍ତୁ ଦେଖିପାରିବେ ଓ ଅଧିକ ବାରଣ ଥିଲେ ହେଁ ସେହି ଏକା ଇଣ୍ଟରଫେସ ବ୍ୟବହାର କରି ତାହାକୁ ଆଉଥରେ ଲିଭାଯିବାରୁ ଅଟକାଇପାରିବେ ।",
 'revdelete-confirm' => 'ଦୟାକରି ଥୟ କରନ୍ତୁ ଯେ ଆପଣ ଏହା କରିବାକୁ ଚାହୁଁଛନ୍ତି, ଆପଣ ଏହାର ପରିଣାମ ଜାଣନ୍ତି ଓ ଆପଣ [[{{MediaWiki:Policy-url}}|ନୀତି]] ଅନୁସାରେ ଏହା କରୁଛନ୍ତି ।',
 'revdelete-suppress-text' => "ଦବାଇ ରଖିବା '''କେବଳ''' ଏହି ତଳଲିଖିତ କ୍ଷେତ୍ରରେ ବ୍ୟବହାର କରାଯିବ:
 * ସମ୍ଭାବିତ ଅପମାନଜଣକ ତଥ୍ୟ
@@ -1145,11 +1145,11 @@ $3ଙ୍କ ଦେଇ ଦିଆଯାଇଥିବା କାରଣ ହେଲା '
 'revdelete-hide-name' => 'କାମ ଓ ଲକ୍ଷ ସବୁ ଲୁଚାଇଦିଅନ୍ତୁ',
 'revdelete-hide-comment' => 'ବଦଳ ସାରକଥା ଲୁଚାଇଦିଅନ୍ତୁ',
 'revdelete-hide-user' => 'ସମ୍ପାଦକଙ୍କର ଇଉଜର ନାମ /IP ଲୁଚାଇଦିଅନ୍ତୁ',
-'revdelete-hide-restricted' => 'ପରିà¬\9bା ଓ ବାକିମାନଙ୍କ ଠାରୁ ତଥ୍ୟକୁ ଦବାଇଦିଅନ୍ତୁ',
+'revdelete-hide-restricted' => 'ପରିà¬\9aାଳà¬\95 ଓ ବାକିମାନଙ୍କ ଠାରୁ ତଥ୍ୟକୁ ଦବାଇଦିଅନ୍ତୁ',
 'revdelete-radio-same' => '(ବଦଳାନ୍ତୁ ନାହିଁ)',
 'revdelete-radio-set' => 'ହଁ',
 'revdelete-radio-unset' => 'ନାହିଁ',
-'revdelete-suppress' => 'ପରିà¬\9bା ଓ ବାକିମାନଙ୍କ ଠାରୁ ତଥ୍ୟକୁ ଦବାଇଦିଅନ୍ତୁ',
+'revdelete-suppress' => 'ପରିà¬\9aାଳà¬\95 ଓ ବାକିମାନଙ୍କ ଠାରୁ ତଥ୍ୟକୁ ଦବାଇଦିଅନ୍ତୁ',
 'revdelete-unsuppress' => 'ଆଉଥରେ ସ୍ଥାପିତ ସଙ୍କଳନସବୁରେ ଥିବା ବାରଣକୁ ବାହାର କରିଦିଅନ୍ତୁ',
 'revdelete-log' => 'କାରଣ:',
 'revdelete-submit' => 'ବଛା {{PLURAL:$1|ସଙ୍କଳନ|ସଙ୍କଳନସବୁ}} ପାଇଁ ଲାଗୁ କରନ୍ତୁ',
@@ -1447,7 +1447,7 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'userrights-reason' => 'କାରଣ:',
 'userrights-no-interwiki' => 'ଆପଣଙ୍କୁ ବାକି ଉଇକିରେ ସଭ୍ୟ ଅଧିକାର ବଦଳାଇବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।',
 'userrights-nodatabase' => '$1 ଡାଟାବେସଟି ନାହିଁ ବା କେବଳ ସ୍ଥାନୀୟ ହୋଇ ରହିଛି ।',
-'userrights-nologin' => 'à¬\86ପଣ à¬ªà¬°à¬¿à¬\9bା à¬\96ାତାରà­\81 [[Special:UserLogin|ଲà¬\97 à¬\87ନ]] à¬\95ରି à¬¸à¬­à­\8dà­\9f à¬\85ଧିà¬\95ାରର à¬¸à­\81ବିଧା à¬¨େଇପାରିବେ ।',
+'userrights-nologin' => 'à¬\86ପଣ à¬ªà¬°à¬¿à¬\9aାଳà¬\95 à¬\96ାତାରà­\81 [[Special:UserLogin|ଲà¬\97 à¬\87ନ]] à¬\95ରି à¬¸à¬­à­\8dà­\9f à¬\85ଧିà¬\95ାରର à¬¸à­\81ବିଧା à¬¦େଇପାରିବେ ।',
 'userrights-notallowed' => 'ଆପଣଙ୍କ ଖାତାରେ ସଭ୍ୟ ଅଧିକାର ଯୋଡ଼ିବା ବା କାଢ଼ିବାର ଅନୁମତି ନାହିଁ ।',
 'userrights-changeable-col' => 'ଆପଣ ବଦଳାଇପାରିବା ଗୋଠସମୂହ',
 'userrights-unchangeable-col' => 'ଯେଉଁ ଗୋଠସବୁ ଆପଣ ବଦଳାଇପାରିବେ ନାହିଁ',
@@ -1457,7 +1457,7 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'group-user' => 'ବ୍ୟବହାରକାରୀଗଣ',
 'group-autoconfirmed' => 'ଆପେଆପେ ଥୟ କରା ସଭ୍ୟ',
 'group-bot' => 'ଆପେଆପେ ଚାଳିତ ସଭ୍ୟ',
-'group-sysop' => 'ପରିà¬\9bାଗଣ',
+'group-sysop' => 'ପରିà¬\9aାଳà¬\95ଗଣ',
 'group-bureaucrat' => 'ପ୍ରଶାସକ',
 'group-suppress' => 'ଅଜାଣତ ଅଣଦେଖା',
 'group-all' => '(ସବୁ)',
@@ -1465,14 +1465,14 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'group-user-member' => '{{GENDER:$1|ବ୍ୟବହାରକାରୀ}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|ଆପେଆପେ ଥୟ କରା ସଭ୍ୟ}}',
 'group-bot-member' => '{{GENDER:$1|ଆପେଚାଳିତ ସଭ୍ୟ}}',
-'group-sysop-member' => '{{GENDER:$1|ପରିà¬\9bା}}',
+'group-sysop-member' => '{{GENDER:$1|ପରିà¬\9aାଳà¬\95}}',
 'group-bureaucrat-member' => '{{GENDER:$1|ପ୍ରଶାସକ}}',
 'group-suppress-member' => '{{GENDER:$1|ଅଜାଣତ ଅଣଦେଖା}}',
 
 'grouppage-user' => '{{ns:project}}:ବ୍ୟବହାରକାରୀ',
 'grouppage-autoconfirmed' => '{{ns:project}}:ଆପେଆପେ ଥୟ କରା ସଭ୍ୟ',
 'grouppage-bot' => '{{ns:project}}:ଆପେ ଚାଳିତ ସଭ୍ୟଗଣ',
-'grouppage-sysop' => '{{ns:project}}:ପରିà¬\9bା',
+'grouppage-sysop' => '{{ns:project}}:ପରିà¬\9aାଳà¬\95',
 'grouppage-bureaucrat' => '{{ns:project}}:ପ୍ରଶାସକଗଣ',
 'grouppage-suppress' => '{{ns:project}}:ଅଜାଣତ ଅଣଦେଖା',
 
@@ -2006,7 +2006,7 @@ A page is treated as disambiguation page if it uses a template which is linked f
 
 'brokenredirects' => 'ଭଙ୍ଗା ପୁନପ୍ରେରଣ',
 'brokenredirectstext' => 'ତଳଲିଖିତ ପୁନପ୍ରେରଣ ସବୁ ସ୍ଥିତିହିନ ପୃଷ୍ଠାମାନଙ୍କୁ ପୁନପ୍ରେରିତ ହୋଇଥାଏ :',
-'brokenredirects-edit' => 'ସମ୍ପାଦନ',
+'brokenredirects-edit' => 'ସମ୍ପାଦନ',
 'brokenredirects-delete' => 'ଲିଭାଇବେ',
 
 'withoutinterwiki' => 'ଭାଷାର ଲିଙ୍କ ନଥିବା ପୃଷ୍ଠାମାନ',
@@ -2157,7 +2157,7 @@ A page is treated as disambiguation page if it uses a template which is linked f
 'activeusers-count' => 'ବିଗତ {{PLURAL:$3|ଦିନ|$3 ଦିନରେ}}ରେ $1ଟି {{PLURAL:$1|ସମ୍ପାଦନା|ସମ୍ପାଦନା}}',
 'activeusers-from' => 'ଏହି ନାମରେ ଆରମ୍ଭ ହେଉଥିବା ସଭ୍ୟମାନଙ୍କୁ ଦେଖାଇବେ:',
 'activeusers-hidebots' => 'ଆପେଆପେ ଚାଳିତ ସଭ୍ୟମାନଙ୍କୁ ଲୁଚାନ୍ତୁ',
-'activeusers-hidesysops' => 'ପରିà¬\9bାà¬\97ଣଙ୍କୁ ଲୁଚାଇବେ',
+'activeusers-hidesysops' => 'ପରିà¬\9aାଳà¬\95ମାନଙ୍କୁ ଲୁଚାଇବେ',
 'activeusers-noresult' => 'ଜଣେ ବି ସଭ୍ୟ ମିଳିଲେ ନାହିଁ ।',
 
 # Special:Log/newusers
@@ -2927,13 +2927,13 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'tooltip-t-contributions' => 'ଏହି ଇଉଜରଙ୍କର ଦେଇ କରାଯାଇଥିବା ସବୁଯାକ ଦାନ ଦେଖାଇବା',
 'tooltip-t-emailuser' => 'ଏହି ସଭ୍ୟଙ୍କୁ ଇ-ମେଲଟିଏ ପଠାଇବେ',
 'tooltip-t-upload' => 'ଫାଇଲ ଅପଲୋଡ଼ କରିବେ',
-'tooltip-t-specialpages' => 'ନିà¬\86ରା à¬ªà­\83ଷà­\8dଠା ତାଲିକା',
+'tooltip-t-specialpages' => 'ବିଶà­\87ଷ à¬ªà­\83ଷà­\8dଠାମାନà¬\99à­\8dà¬\95ର à¬\8fà¬\95 ତାଲିକା',
 'tooltip-t-print' => 'ଏହି ପୃଷ୍ଠାର ଛପାହୋଇପାରିବା ସଙ୍କଳନ',
 'tooltip-t-permalink' => 'ବଦଳାଯାଇଥିବା ଏହି ଫରଦଟିର ସ୍ଥାୟୀ ଲିଙ୍କ',
 'tooltip-ca-nstab-main' => 'ସୂଚୀ ପୃଷ୍ଠାଟି ଦେଖାଇବେ',
 'tooltip-ca-nstab-user' => 'ଫାଇଲ ପୃଷ୍ଠାଗୁଡ଼ିକ ଦେଖନ୍ତୁ',
 'tooltip-ca-nstab-media' => 'ମିଡ଼ିଆ ପୃଷ୍ଠାଟି ଦେଖିବେ',
-'tooltip-ca-nstab-special' => 'à¬\8fà¬\87à¬\9fି à¬\97à­\8bà¬\9fିà¬\8f à¬¨à¬¿à¬\86ରା ପୃଷ୍ଠା, ଆପଣ ଏହାକୁ ବଦଳାଇପାରିବେ ନାହିଁ',
+'tooltip-ca-nstab-special' => 'à¬\8fହା à¬\97à­\8bà¬\9fିà¬\8f à¬¬à¬¿à¬¶à­\87ଷ ପୃଷ୍ଠା, ଆପଣ ଏହାକୁ ବଦଳାଇପାରିବେ ନାହିଁ',
 'tooltip-ca-nstab-project' => 'ପ୍ରକଳ୍ପ ପୃଷ୍ଠାଟି ଦେଖାଇବେ',
 'tooltip-ca-nstab-image' => 'ଫାଇଲ ପୃଷ୍ଠାଗୁଡ଼ିକ ଦେଖନ୍ତୁ',
 'tooltip-ca-nstab-mediawiki' => 'ସିଷ୍ଟମ ମେସେଜ ଦେଖିବେ',
@@ -3651,7 +3651,7 @@ $5
 # Special:Version
 'version' => 'ସଂସ୍କରଣ',
 'version-extensions' => 'ଇନଷ୍ଟଲ କରାହୋଇଥିବା ଏକ୍ସଟେନସନସବୁ',
-'version-specialpages' => 'ନିà¬\86ରା ପୃଷ୍ଠା',
+'version-specialpages' => 'ବିଶà­\87ଷ ପୃଷ୍ଠା',
 'version-parserhooks' => 'ପାର୍ସର ହୁକ',
 'version-variables' => 'ଚଳ',
 'version-antispam' => 'ଅଦରକାରୀ ମେଲ ଅଟକ',
@@ -3697,7 +3697,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'fileduplicatesearch-noresults' => '"$1" ନାମରେ ଗୋଟିଏ ବି ଫାଇଲ ମିଳିଲା ନାହିଁ ।',
 
 # Special:SpecialPages
-'specialpages' => 'ନିà¬\86ରା ପୃଷ୍ଠା',
+'specialpages' => 'ବିଶà­\87ଷ ପୃଷ୍ଠା',
 'specialpages-note' => '----
 * ସାଧାରଣ ବିଶେଷ ପୃଷ୍ଠାମାନ ।
 * <span class="mw-specialpagerestricted">କିଳାଯାଇଥିବା ବିଶେଷ ପୃଷ୍ଠାମାନ ।</span>',
@@ -3738,7 +3738,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'tags-display-header' => 'ବଦଳ ତାଲିକାରେ ଦେଖଣା',
 'tags-description-header' => 'ଅର୍ଥର ପୁରା ବିବରଣୀ',
 'tags-hitcount-header' => 'ଚିହ୍ନିତ ବଦଳ',
-'tags-edit' => 'ସମ୍ପାଦନ',
+'tags-edit' => 'ସମ୍ପାଦନ',
 'tags-hitcount' => '$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}',
 
 # Special:ComparePages
index 50cb0fe..90e0b43 100644 (file)
@@ -71,7 +71,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Айсын бæрæггонд ивдтытæ фæстаг ивдтытæй',
 'tog-newpageshidepatrolled' => 'Басгæрст фæрстæ ног фæрсты номхыгъдæй æмбæхс',
 'tog-extendwatchlist' => 'Стырдæр цæстдард номхыгъд алы ивдимæ дæр, æрмæст фæстагимæ нал.',
-'tog-usenewrc' => 'Ð¥Ñ\83Ñ\8bздæÑ\80 Ñ\84æÑ\81Ñ\82аг Ð¸Ð²Ð´Ñ\82Ñ\8bÑ\82Ñ\8b Ð½Ð¾Ð¼Ñ\85Ñ\8bгÑ\8aд (домы JavaScript)',
+'tog-usenewrc' => 'ФæÑ\81Ñ\82аг Ã¦Ð¼Ã¦ Ñ\86æÑ\81Ñ\82даÑ\80д Ð¸Ð²Ð´Ñ\82Ñ\8bÑ\82æ Ñ\84аÑ\80Ñ\81мæ Ð³Ã¦Ñ\81гæ Ð¸Ñ\83 ÐºÃ¦Ð½Ã¦Ñ\82 (домы JavaScript)',
 'tog-numberheadings' => 'Сæргæндты автоматикон нумераци',
 'tog-showtoolbar' => 'Æвдисын ивыны панел (домы JavaScript)',
 'tog-editondblclick' => 'Фæрстæ дыкъæппæй ив (JavaScript)',
@@ -79,17 +79,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Сæргондыл рахиз æркъæппæй фарсы хæйттæ ив (JavaScript)',
 'tog-showtoc' => 'Сæргæндты номхыгъд æвдис (æртæ сæргондæй фылдæр цы фарсы ис, уым)',
 'tog-rememberpassword' => 'Бахъуыды мæ кæнæд ацы браузер ($1 {{PLURAL:$1|бонмæ|бонмæ}})',
-'tog-watchcreations' => 'Æз цы фæрстæ райдайын, уыдонмæ мæ цæст дарын мæ фæнды',
-'tog-watchdefault' => 'Æз цы фæрстæ ивын, уыдонмæ мæ цæст дарын мæ фæнды',
-'tog-watchmoves' => 'Æз цы фæрсты нæмттæ ивын, уыдонмæ мæ цæст дарын мæ фæнды',
-'tog-watchdeletion' => 'Æз цы фæрстæ аппарын, уыдонмæ мæ цæст дарын мæ фæнды',
+'tog-watchcreations' => 'Æз цы фæрстæ аразын æмæ цы файлтæ бавгæнын, уыдон мæ цæстдард уæт.',
+'tog-watchdefault' => 'Æз цы фæрстæ æмæ цы файлтæ ивын, уыдон мæ цæстдард уæт',
+'tog-watchmoves' => 'Æз цы фæрсты нæмттæ æмæ цы файлтæ ивын, уыдон мæ цæстдард уæт',
+'tog-watchdeletion' => 'Æз цы фæрстæ æмæ цы файлтæ хафын, уыдон мæ цæстдард уæт',
 'tog-minordefault' => 'Æппæт ивддзинæдтæ банысан кæн куыд чысылтæ',
 'tog-previewontop' => 'Разæркасты рудзынг ивыны рудзынджы уæлдæр',
 'tog-previewonfirst' => 'Æвдисын иу разæркаст фыццаг ивды рæстæджы',
 'tog-nocache' => 'Ахицæн кæнын браузеры кешкæнынад',
-'tog-enotifwatchlistpages' => 'Электронон постæй мæм хъуысынгæнинаг æрвыст уа, æз цы фæрстæм мæ цæст дарын, уыдонæй иу куы ивд æрцæуа, уæд',
+'tog-enotifwatchlistpages' => 'Æз цы фæрстæм æмæ цы файлтæм дарын мæ цæст, уыдонæй иу ивд куы æрцæуа, уæд-иу мæм E-mail æрцæуæд',
 'tog-enotifusertalkpages' => 'Электронон постæй мæм хъуысынгæнинаг æрвыст уа, мæ тæрхоны фарс куы ивд æрцæуа, уæд',
-'tog-enotifminoredits' => 'Ð\9aæд Ð¸Ð²Ð´Ð´Ð·Ð¸Ð½Ð°Ð´ Ñ\87Ñ\8bÑ\81Ñ\8bл Ñ\83, Ñ\83æддæÑ\80 Ð¼Ã¦Ð¼ Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ñ\80баÑ\86æÑ\83а',
+'tog-enotifminoredits' => 'ФаÑ\80Ñ\81 ÐºÃ¦Ð½Ã¦ Ñ\84айлÑ\8b Ð¸Ð²Ð´ Ñ\87Ñ\8bÑ\81Ñ\8bл ÐºÑ\83Ñ\8b Ñ\83а, Ñ\83æддæÑ\80-иÑ\83 Ð¼Ã¦Ð¼ E-mail Ã¦Ñ\80баÑ\86æÑ\83æÑ\82',
 'tog-enotifrevealaddr' => 'Æвдисын мæ e-mail хъусын кæныны фыстæджыты',
 'tog-shownumberswatching' => 'Цал архайæджы фарсмæ сæ цæст дарынц, уый равдис',
 'tog-oldsig' => 'Ныры къухæрфыст:',
@@ -422,6 +422,8 @@ $1',
 'cannotdelete' => 'Нæй аппарæн файл кæнæ фарс "$1".
 Æндæр исчи йæ аппæрста мыййаг.',
 'cannotdelete-title' => 'Нæ уайы схафын фарс "$1"',
+'delete-hook-aborted' => 'Хук æй хафын нæ бауагъта.
+Уæлæмхасæн æмбарынгæнæн нæ радта.',
 'badtitle' => 'Æнæмбæлон сæргонд',
 'badtitletext' => 'Æрдомд фарсы ном уыд рæдыдимæ кæнæ афтид кæнæ та йæ æхсæн-æвзаг æви йæ интервики æрвитæн раст нæ уыд.
 Гæнæн ис Номы ис ахæм дамгъæтæ, кæдон уым æвæрын нæй гæнæн.',
@@ -456,6 +458,10 @@ $2',
 'filereadonlyerror' => 'Нæ уайы фæивын файл "$1" уый тыххæй æмæ репозиторий "$2" кусы æрмæст фæрсыны уавæры.
 
 Радгæс, кæцы сæвæрдта ацы уавæр, ныууагъта ахæм амонæн: "\'\'$3\'\'".',
+'invalidtitle-knownnamespace' => '"$2" номдон æмæ "$3" тексты рæдыд сæр',
+'invalidtitle-unknownnamespace' => 'Æнæзонгæ номдоны нымæц, "$1" æмæ "$2" тексты рæдыд сæр',
+'exception-nologin' => 'Системæмæ æнæхызт',
+'exception-nologin-text' => 'Ацы фарс кæнæ ми домынц дæуæй, цæмæй системæмæ хызт уай.',
 
 # Virus scanner
 'virus-badscanner' => "Æвзæр æвæрд: Нæзонгæ вирусты скане: ''$1''",
@@ -552,25 +558,81 @@ $2',
 'emaildisabled' => 'Ацы сайтæн йæ бон нæу æрвитын e-mail.',
 'accountcreated' => 'Аккаунт конд æрцыд',
 'accountcreatedtext' => '$1 архайæджы аккаунт конд æрцыд.',
-'createaccount-title' => '{{grammar:genitive|{{SITENAME}}}} аккант бакæнын',
+'createaccount-title' => '{{grammar:genitive|{{SITENAME}}}} аккаунт бакæнын',
+'createaccount-text' => '{{grammar:genitive|{{SITENAME}}}} ($4) чидæр бакодта аккаунт дæ e-mail адрисæн æмæ йæ схуыдта "$2", "$3" паролимæ.
+Ныр ды хъуамæ бахизай системæмæ æмæ фæивай дæ парол.
+
+Дæ бон у мацæмæ дарай ацы фыстæг, кæд уыцы аккаунт рæдыдæй сарæзтис.',
+'usernamehasherror' => 'Фæсномыгы ма хъуамæ уа хызæг нысан',
+'login-throttled' => 'Фæстаг рæстæджы ды бахизын æгæр бирæ фæлвардтай.
+Дæ хорзæхæй, фæлæуу-иу иннæ фæлварæны размæ.',
+'login-abort-generic' => 'Нæ дын бантыст бахизын. Урæд.',
 'loginlanguagelabel' => 'Æвзаг: $1',
+'suspicious-userlogout' => 'Дæ рахизыны домæн нæ сæххæст ис, уымæн æмæ хæлд браузерæй кæнæ кешгæнæг проксийæ æрвысты хуызæн у.',
+
+# E-mail sending
+'php-mail-error-unknown' => 'Нæбæрæг рæдыд PHP-йы mail() функцийы.',
+'user-mail-no-addy' => 'Е-mail æрвыста æнæ e-mail адрисæй.',
 
 # Change password dialog
+'resetpass' => 'Пароль фæивын',
+'resetpass_announce' => 'Ды бахызтæ e-mail-æй æрвыст рæстæгмæ паролæй.
+Цæмæй кæронмæ бахизай системæмæ, уый тыххæй ам хъуамæ сæвæрай ног пароль.',
 'resetpass_text' => '<!-- Бахæсс дæ текст ам -->',
+'resetpass_header' => 'Аккаунты пароль ивын',
 'oldpassword' => 'Раздæры пароль:',
 'newpassword' => 'Нæуæг пароль:',
+'retypenew' => 'Ног пароль ногæй бафысс:',
+'resetpass_submit' => 'Пароль сæвæрын æмæ системæмæ бахизын',
+'resetpass_success' => 'Дæ пароль ивд æрцыд!
+Ныр ды хизыс системæмæ...',
 'resetpass_forbidden' => 'Пароль баивæн нæй',
+'resetpass-no-info' => 'Ды хъуамæ системæмæ хызт уай, цæмæй ацы фарсмæ комкоммæ бавналай.',
 'resetpass-submit-loggedin' => 'Пароль фæивын',
 'resetpass-submit-cancel' => 'Ныууадзын',
+'resetpass-wrong-oldpass' => 'Рæстæгмæ кæнæ нырыккон пароль нæ бæззы.
+Гæнæн ис ды нырид фæивтай дæ пароль кæнæ та ног рæстæгмæ пароль æрдомдтай.',
 'resetpass-temp-password' => 'Рæстæгмæ пароль:',
 
 # Special:PasswordReset
+'passwordreset' => 'Пароль фæлварæн',
+'passwordreset-text' => 'Байдзаг кæн ацы формæ, цæмæй райсай дæ аккаунты бахизæнтæ рымысæн e-mail.',
+'passwordreset-legend' => 'Пароль раппарын',
+'passwordreset-disabled' => 'Парол фæлварын ацы викийы хицæн у.',
+'passwordreset-pretext' => '{{PLURAL:$1||Дæлдæр цы рардты хæйттæ ис, уыдонæй иу бафысс}}',
 'passwordreset-username' => 'Фæсномыг:',
+'passwordreset-domain' => 'Домен:',
+'passwordreset-capture' => 'Цы e-mail рауадис, уый æвдыст æрцæуæт?',
+'passwordreset-capture-help' => 'Кæд сæвæрай ацы нысан, уæд дын e-mail (рæстæгмæ паролимæ) æвдыст æрцæудзæн. Архайæгмæ дæр æрвыст æрцæудзæн.',
 'passwordreset-email' => 'Электрон посты адрис:',
+'passwordreset-emailtitle' => '{{grammar:genitive|{{SITENAME}}}} акканты тыххæй',
+'passwordreset-emailtext-ip' => 'Чидæр (уæццæгæн ды, $1 IP адрисæй) æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) аккаунты тыххæй детальтæ. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы e-mail адрисимæ:
+
+$2
+
+{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.
+Ныр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.',
+'passwordreset-emailtext-user' => '{{grammar:genitive|{{SITENAME}}}} архайæг $1 æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) аккаунты тыххæй детальтæ. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы e-mail адрисимæ:
+
+$2
+
+{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.
+Ныр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.',
 'passwordreset-emailelement' => 'Фæсномыг: $1
 Рæстæгмæ пароль: $2',
+'passwordreset-emailsent' => 'Æрхъуыдыгæнæн e-mail æрвыст æрцыд',
+'passwordreset-emailsent-capture' => 'Æрхъуыдыгæнæн e-mail æрвыст æрцыд æмæ бындæр æвдыст у.',
+'passwordreset-emailerror-capture' => 'Æрхъуыдыгæнæн e-mail арæзт æрцыд æмæ бындæр æвдыст у. Фæлæ йæ арвитын нæ бантыстис: $1',
 
 # Special:ChangeEmail
+'changeemail' => 'E-mail адрис фæивын',
+'changeemail-header' => 'Аккаунты e-mail адрис фæивын',
+'changeemail-text' => 'Байдзаг кæн ацы формæ, цæмæй дæ e-mail адрис фæивай. Уый тыххæй дын хъæудзæн дæ пароль бафыссын.',
+'changeemail-no-info' => 'Ды хъуамæ системæмæ хызт уай, цæмæй ацы фарсмæ комкоммæ бавналай.',
+'changeemail-oldemail' => 'Нырыккон e-mail адрис:',
+'changeemail-newemail' => 'Ног e-mail адрис:',
+'changeemail-none' => '(нæй)',
+'changeemail-submit' => 'E-mail фæивын',
 'changeemail-cancel' => 'Ныууадзын',
 
 # Edit page toolbar
@@ -603,10 +665,53 @@ $2',
 'showdiff' => 'Иртасын',
 'anoneditwarning' => "'''Сындæггай:''' Ды системæйы нæ дæ.
 Дæ IP адрес фыст æрцæудзæнис фарсы историйы.",
+'anonpreviewwarning' => "''Ды системæмæ хызт нæ дæ. Бавæрд дын дæ IP адрис ныффысдзæн фарсы историйы.''",
+'missingsummary' => "'''Æрхъуыдыкæнинаг:''' Ды не рхастай ивды афыст.
+Кæд ногæй равзарай \"{{int:savearticle}}\", уæд ивд æнæ афыстæй бавæрд уыдзæнис.",
+'missingcommenttext' => 'Дæ хорзæхæй, дæлдæр комментари бафысс.',
+'missingcommentheader' => "'''Æрхъуыдыкæнинаг:''' Ды ацы комментарийæн не рхастай темæ/сæр.
+Кæд ногæй равзарай \"{{int:savearticle}}\", уæд ивд æнæ уымæй бавæрд уыдзæнис.",
 'summary-preview' => 'Ивд афыст уыдзæн:',
+'subject-preview' => 'Темæ/сæр:',
 'blockedtitle' => 'Архайæг хъодыгонд æрцыд',
+'blockedtext' => "'''Дæ фæсномыг кæнæ дæ IP адрис блокгонд æрцыд.'''
+
+Блок скодта $1.
+Йæ аххосаг у ''$2''.
+
+* Блокы райдиан: $8
+* Блокы кæрон: $6
+* Блокы мысан: $7
+
+Дæ бон у бадзурай {{grammar:allative|$1}} кæнæ [[{{MediaWiki:Grouppage-sysop}}|радгæсмæ]], цæмæй блокы тыххæй аныхас кæнай.
+Дæ бон нæу электронон фыстæг æм арвитай, цалынмæ дæ [[Special:Preferences|аккаунты фадæтты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
+Дæ нырыккон IP адрис у $3, æмæ блокы бæрæггæнæн у #$5.
+Дæ хорзæхæй, уæлдæр цы детальтæ ис, уыдон иу дæ домæнмæ бафтау.",
+'autoblockedtext' => "'''Дæ IP адрис йæхæдæг ныблок ис, уымæн æмæ ууылты архайдта æндæр архайæг, кæй ныблок кодта $1.'''
+Йæ аххосаг у:
+
+:''$2''
+
+* Блокы райдиан: $8
+* Блокы кæрон: $6
+* Блокы мысан: $7
+
+Дæ бон у бадзурай {{grammar:allative|$1}} кæнæ æндæр [[{{MediaWiki:Grouppage-sysop}}|радгæсмæ]], цæмæй блокы тыххæй аныхас кæнай.
+
+Дæ бон нæу электронон фыстæг æм арвитай, цалынмæ дæ [[Special:Preferences|аккаунты фадæтты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
+
+Дæ нырыккон IP адрис у $3, æмæ блокы бæрæггæнæн у #$5.
+Дæ хорзæхæй, уæлдæр цы детальтæ ис, уыдон иу дæ домæнмæ бафтау.",
 'blockednoreason' => 'аххос амынд не ’рцыд',
+'whitelistedittext' => 'Дæуæн хъæуы $1, цæмæй фæртæ ивай.',
+'confirmedittext' => 'Фæрстæ ивыны размæ ды хъуамæ сбæлвырд кæнай дæ e-mail адрис.
+Дæ хæрзæхæй, сæвæр æмæ сбæлвырд кæн дæ e-mail адрис дæ [[Special:Preferences|фадæтты]].',
+'nosuchsectiontitle' => 'Хай нæ уард кæны',
+'nosuchsectiontext' => 'Ды фæлвардтай ахæм фарс ивын, кæцы нæй.
+Гæнæн ис, цалынмæ ды фарс кастæ, уый хаст кæнæ хафт æрцыдис.',
 'loginreqtitle' => 'Хъæуы бахизын',
+'loginreqlink' => 'бахизын',
+'loginreqpagetext' => 'Дæуæн хъæуы $1 цæмæй æндæр фæрстæ кæсай.',
 'accmailtitle' => 'Пароль рарвыст у.',
 'newarticle' => '(Ног)',
 'newarticletext' => 'Ды ныххæцыдтæ ахæм æрвитæныл, кæй фарс нырмæ нæй.
@@ -1464,4 +1569,30 @@ $3',
 'feedback-message' => 'Фыстæг:',
 'feedback-close' => 'Æххæст',
 
+# API errors
+'api-error-noimageinfo' => 'Æвгæд æххæст у, фæлæ нын сервер ницыуал рабæрæг кодта файлы тыххæй.',
+'api-error-nomodule' => 'Мидæггаг рæдыд: Бавгæнæн модуль нæу æвæрд.',
+'api-error-ok-but-empty' => 'Мидæггаг рæдыд: Серверæй дзуапп нæй.',
+'api-error-overwrite' => 'Уæвгæ файл ногæй фыссын нæй гæнæн.',
+'api-error-stashfailed' => 'Мидæггаг рæдыд: Серверæн нæ рауадис рæстæгмæ файл фæдарын.',
+'api-error-timeout' => 'Сервер нæ радта дзуапп бадзырд рæстæгмæ.',
+'api-error-unclassified' => 'Нæзонгæ рæдыд æрцыд.',
+'api-error-unknown-code' => 'Нæзонгæ рæдыд: "$1".',
+'api-error-unknown-error' => 'Мидæггаг рæдыд: Цыдæр раст нæ ацыдис, файл куы æвгæдтай, уæд.',
+'api-error-unknown-warning' => 'Нæзонгæ фæдзæхст: "$1".',
+'api-error-unknownerror' => 'Нæзонгæ рæдыд: "$1".',
+'api-error-uploaddisabled' => 'Ацы викийы бавгæныны фадат хицæн у.',
+'api-error-verification-error' => 'Ацы файл гæнæн ис хæлд у, кæнæ йæ номы фæстаг хай раст нæу.',
+
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|секунд|секунды}}',
+'duration-minutes' => '$1 {{PLURAL:$1|минут|минуты}}',
+'duration-hours' => '$1 {{PLURAL:$1|сахат|сахаты}}',
+'duration-days' => '$1 {{PLURAL:$1|бон|боны}}',
+'duration-weeks' => '$1 {{PLURAL:$1|къуыри|къуырийы}}',
+'duration-years' => '$1 {{PLURAL:$1|аз|азы}}',
+'duration-decades' => '$1 {{PLURAL:$1|дæсадз|дæсадзы}}',
+'duration-centuries' => '$1 {{PLURAL:$1|æнус|æнусы}}',
+'duration-millennia' => '$1 {{PLURAL:$1|мин аз|мин азы}}',
+
 );
index 8c29317..55c82a4 100644 (file)
@@ -16,6 +16,7 @@
  * @author Kaganer
  * @author Sukh
  * @author Surinder.wadhawan
+ * @author TariButtar
  * @author Ævar Arnfjörð Bjarmason
  * @author לערי ריינהארט
  */
@@ -111,10 +112,10 @@ $messages = array(
 'june' => 'ਜੂਨ',
 'july' => 'ਜੁਲਾਈ',
 'august' => 'ਅਗਸਤ',
-'september' => 'ਸਤੰਬਰ',
+'september' => 'ਸਿਤੰਬਰ',
 'october' => 'ਅਕਤੂਬਰ',
 'november' => 'ਨਵੰਬਰ',
-'december' => 'ਦਸੰਬਰ',
+'december' => 'ਦਿਸੰਬਰ',
 'january-gen' => 'ਜਨਵਰੀ',
 'february-gen' => 'ਫ਼ਰਵਰੀ',
 'march-gen' => 'ਮਾਰਚ',
@@ -123,22 +124,22 @@ $messages = array(
 'june-gen' => 'ਜੂਨ',
 'july-gen' => 'ਜੁਲਾਈ',
 'august-gen' => 'ਅਗਸਤ',
-'september-gen' => 'ਸਤੰਬਰ',
+'september-gen' => 'ਸਿਤੰਬਰ',
 'october-gen' => 'ਅਕਤੂਬਰ',
 'november-gen' => 'ਨਵੰਬਰ',
-'december-gen' => 'ਦਸੰਬਰ',
-'jan' => 'ਜਨ',
-'feb' => 'ਫ਼ਰ',
-'mar' => 'ਮਾਰ',
-'apr' => 'ਅਪ',
+'december-gen' => 'ਦਿਸੰਬਰ',
+'jan' => 'ਜਨਵਰੀ',
+'feb' => 'ਫ਼ਰਵਰੀ',
+'mar' => 'ਮਾਰ',
+'apr' => 'ਅਪਰੈਲ',
 'may' => 'ਮਈ',
 'jun' => 'ਜੂਨ',
 'jul' => 'ਜੁਲਾਈ',
-'aug' => 'ਅਗ',
-'sep' => 'ਸਤੰ',
-'oct' => 'ਅਕ',
-'nov' => 'ਨਵੰ',
-'dec' => 'ਦਸੰ',
+'aug' => 'ਅਗਸਤ',
+'sep' => 'ਸਿਤੰਬਰ',
+'oct' => 'ਅਕਤੂਬਰ',
+'nov' => 'ਨਵੰਬਰ',
+'dec' => 'ਦਿਸੰਬਰ',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|ਕੈਟਾਗਰੀ|ਕੈਟਾਗਰੀਆਂ}}',
@@ -171,7 +172,7 @@ $messages = array(
 'qbpageinfo' => 'ਭਾਗ',
 'qbmyoptions' => 'ਮੇਰੇ ਪੇਜ',
 'qbspecialpages' => 'ਖਾਸ ਪੇਜ',
-'faq' => 'ਸਵਾਲ-à¨\9cਵਾਬ',
+'faq' => 'à¨\85à¨\95ਸਰ à¨ªà©\81ੱà¨\9bà©\87 à¨\9cਾਣ à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨µà¨¾à¨²',
 'faqpage' => 'Project:ਸਵਾਲ-ਜਵਾਬ',
 
 # Vector skin
@@ -193,7 +194,7 @@ $messages = array(
 'errorpagetitle' => 'ਗਲਤੀ',
 'returnto' => '$1 ਤੇ ਵਾਪਸ ਜਾਓ',
 'tagline' => '{{SITENAME}} ਤੋਂ',
-'help' => 'ਮੱਦਦ',
+'help' => 'ਮਦਦ',
 'search' => 'ਖੋਜ',
 'searchbutton' => 'ਖੋਜ',
 'go' => 'ਜਾਓ',
@@ -238,7 +239,7 @@ $messages = array(
 'otherlanguages' => 'ਹੋਰ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ',
 'redirectedfrom' => '($1 ਤੋਂ ਰੀ-ਡਿਰੈਕਟ)',
 'redirectpagesub' => 'ਰੀ-ਡਿਰੈਕਟ ਪੇਜ',
-'lastmodifiedat' => 'à¨\87ਹ à¨ªà©\87à¨\9c à¨\86à¨\96ਰà©\80 à¨µà¨¾à¨° $2, $1 à¨¨à©\82à©° ਸੋਧਿਆ ਗਿਆ ਸੀ।',
+'lastmodifiedat' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨\86à¨\96਼ਰà©\80 à¨µà¨¾à¨° $1 à¨¨à©\82à©° $2 à¨¤à©\87 ਸੋਧਿਆ ਗਿਆ ਸੀ।',
 'viewcount' => 'ਇਹ ਪੇਜ ਅਸੈੱਸ ਕੀਤਾ ਗਿਆ {{PLURAL:$1|ਇੱਕਵਾਰ|$1 ਵਾਰ}}.',
 'protectedpage' => 'ਸੁਰੱਖਿਅਤ ਪੇਜ',
 'jumpto' => 'ਜੰਪ ਕਰੋ:',
@@ -258,8 +259,8 @@ $messages = array(
 'edithelp' => 'ਮੱਦਦ ਐਡੀਟਿੰਗ',
 'edithelppage' => 'Help:ਐਡਟਿੰਗ',
 'helppage' => 'Help:ਸਮੱਗਰੀ',
-'mainpage' => 'ਮà©\81ੱà¨\96 à¨ªà©\87à¨\9c',
-'mainpage-description' => 'ਮà©\81ੱà¨\96 à¨ªà©\87à¨\9c',
+'mainpage' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼à¨¾',
+'mainpage-description' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼à¨¾',
 'policy-url' => 'Project:ਪਾਲਸੀ',
 'portal' => 'ਕਮਿਊਨਟੀ ਪੋਰਟਲ',
 'portal-url' => 'Project:ਕਮਿਊਨਟੀ ਪੋਰਟਲ',
@@ -301,11 +302,11 @@ $messages = array(
 'nstab-main' => 'ਲੇਖ',
 'nstab-user' => 'ਯੂਜ਼ਰ ਪੇਜ',
 'nstab-media' => 'ਮੀਡਿਆ ਪੇਜ',
-'nstab-special' => 'ਖਾਸ ਸਫ਼ਾ',
+'nstab-special' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¾',
 'nstab-project' => 'ਪਰੋਜੈਕਟ ਪੇਜ',
 'nstab-image' => 'ਫਾਇਲ',
 'nstab-mediawiki' => 'ਸੁਨੇਹਾ',
-'nstab-template' => 'ਟੈਪਲੇਟ',
+'nstab-template' => 'à¨\9fà©\88à¨\82ਪਲà©\87à¨\9f',
 'nstab-help' => 'ਮੱਦਦ ਪੇਜ',
 'nstab-category' => 'ਕੈਟਾਗਰੀ',
 
@@ -340,16 +341,16 @@ A list of valid special pages can be found at [[Special:SpecialPages]].',
 
 You can continue to use {{SITENAME}} anonymously, or you can log in again as the same or as a different user.
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-'welcomecreation' => '== $1 ਜੀ ਆਇਆਂ ਨੂੰ! ==
+'welcomecreation' => '== ਜੀ ਆਇਆਂ ਨੂੰ! ==
 
-ਤà©\81ਹਾਡਾ à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f à¨¬à¨£à¨¾à¨\87à¨\86 à¨\97ਿà¨\86 ਹੈ। ਆਪਣੀ [[Special:ਪਸੰਦ|{{SITENAME}} ਪਸੰਦ]] ਬਦਲਣੀ ਨਾ ਭੁੱਲੋ।',
+ਤà©\81ਹਾਡਾ à¨\96਼ਾਤਾ à¨¬à¨£ à¨\9aà©\81ੱà¨\95ਾ ਹੈ। ਆਪਣੀ [[Special:ਪਸੰਦ|{{SITENAME}} ਪਸੰਦ]] ਬਦਲਣੀ ਨਾ ਭੁੱਲੋ।',
 'yourname' => 'ਯੂਜ਼ਰ ਨਾਂ:',
 'yourpassword' => 'ਪਾਸਵਰਡ:',
 'yourpasswordagain' => 'ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ:',
 'remembermypassword' => 'ਇਸ ਕੰਪਿਊਟਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)',
 'yourdomainname' => 'ਤੁਹਾਡੀ ਡੋਮੇਨ:',
 'login' => 'ਲਾਗ ਇਨ',
-'nav-login-createaccount' => 'ਲਾà¨\97 à¨\87ਨ / à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਓ',
+'nav-login-createaccount' => 'ਲਾà¨\97 à¨\87ਨ / à¨\96਼ਾਤਾ ਬਣਾਓ',
 'loginprompt' => 'ਤੁਹਾਨੂੰ {{SITENAME}} ਉੱਤੇ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਯੋਗ ਕਰਨੇ ਜ਼ਰੂਰੀ ਹਨ।',
 'userlogin' => 'ਲਾਗ ਇਨ / ਅਕਾਊਂਟ ਬਣਾਓ',
 'userloginnocreate' => 'ਲਾਗ ਇਨ',
@@ -364,8 +365,7 @@ Note that some pages may continue to be displayed as if you were still logged in
 'createaccountmail' => 'ਈਮੇਲ ਨਾਲ',
 'createaccountreason' => 'ਕਾਰਨ:',
 'badretype' => 'ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।',
-'userexists' => 'ਯੂਜ਼ਰ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ਅਧੀਨ ਹੈ।
-ਵੱਖਰਾ ਯੂਜ਼ਰ ਨਾਂ ਵਰਤੋਂ ਜੀ।',
+'userexists' => 'ਇਹ ਮੈਂਬਰ-ਨਾਮ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ’ਚ ਹੈ। ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਵੱਖਰਾ ਮੈਂਬਰ-ਨਾਮ ਵਰਤੋਂ।',
 'loginerror' => 'ਲਾਗਇਨ ਗਲਤੀ',
 'createaccounterror' => 'ਅਕਾਊਂਟ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1',
 'nocookiesnew' => 'ਯੂਜ਼ਰ ਅਕਾਊਂਟ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਪਰ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ।{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.',
@@ -445,7 +445,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'subject' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ:',
 'minoredit' => 'ਇਹ ਛੋਟੀ ਸੋਧ ਹੈ',
 'watchthis' => 'ਇਹ ਪੇਜ ਵਾਚ ਕਰੋ',
-'savearticle' => 'ਪà©\87à¨\9c à¨¸à©°à¨­à¨¾à¨²ੋ',
+'savearticle' => 'ਸਫ਼ਾ à¨¸à©°à¨­à¨¾à¨²à¨¼ੋ',
 'preview' => 'ਝਲਕ',
 'showpreview' => 'ਝਲਕ ਵੇਖੋ',
 'showlivepreview' => 'ਲਾਈਵ ਝਲਕ',
@@ -466,8 +466,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'newarticletext' => "ਤੁਸੀਂ ਕਿਸੇ ਐਸੇ ਲਿੰਕ ਰਾਹੀਂ ਉਸ ਪੰਨੇ ਤੇ ਪੁੱਜੇ ਹੋ ਜੋ ਅਜੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
 ਪੰਨਾ ਬਨਾਉਣ ਲਈ  ਹੇਠ ਦਿੱਤੇ ਖਾਨੇ ਵਿਚ ਪਾਠ ਲਿਖੋ।(ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ [[{{MediaWiki:Helppage}}|ਮੱਦਦ ਪੰਨਾ]] ਦੇਖੋ)
 ਜੇ ਤੁਸੀਂ ਇੱਥੇ ਗਲਤੀ ਨਾਲ ਆਏ ਹੋ ਤਾਂ ਆਪਣੇ ਬਰਾਊਜ਼ਰ ਦੇ ਬੈਕ ('''back''') ਬਟਨ ਪਰ ਕਲਿਕ ਕਰੋ।",
-'noarticletext' => 'ਫਿਲਹਾਲ ਇਸ ਪੰਨੇ ਤੇ ਐਸਾ ਕੋਈ ਪਾਠ ਨਹੀਂ ਹੈ।ਤੁਸੀਂ ਦੂਸਰੇ ਪੰਨਿਆਂ ਤੇ [[Special:Search/{{PAGENAME}}|ਇਸ ਪਾਠ ਦੀ ਖੋਜ]] ਕਰ ਸਕਦੇ ਹੋ।,<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ਸੰਭੰਧਿਤ ਖਾਤਿਆਂ ਵਿਚ ਖੋਜ ਸਕਦੇ ਹੋ],
-ਯਾ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ਇਸ ਪੰਨੇ ਨੂੰ ਸੰਪਾਦਨ ਕਰ ਸਕਦੇ ਹੋ]</span>।',
+'noarticletext' => 'ਫ਼ਿਲਹਾਲ ਇਸ ਸਫ਼ੇ ਤੇ ਕੋਈ ਲਿਖਤ ਨਹੀਂ ਹੈ।ਤੁਸੀਂ ਦੂਸਰੇ ਸਫ਼ਿਆਂ ਤੇ [[Special:Search/{{PAGENAME}}|ਇਸ ਸਿਰਲੇਖ ਦੀ ਖੋਜ]] ਕਰ ਸਕਦੇ ਹੋ, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ਸਬੰਧਿਤ ਚਿੱਠਿਆਂ ਦੀ ਖੋਜ ਸਕਦੇ ਹੋ] ਜਾਂ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ਇਸ ਸਫ਼ੇ ਵਿਚ ਲਿਖ ਸਕਦੇ ਹੋ]</span>।',
 'noarticletext-nopermission' => '↓
 ਫਿਲਹਾਲ ਇਸ ਪੰਨੇ ਤੇ ਐਸਾ ਕੋਈ ਪਾਠ ਨਹੀਂ ਹੈ।ਤੁਸੀਂ ਦੂਸਰੇ ਪੰਨਿਆਂ ਤੇ [[Special:Search/{{PAGENAME}}|ਇਸ ਪਾਠ ਦੀ ਖੋਜ]] ਕਰ ਸਕਦੇ ਹੋ।,<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ਸੰਬੰਧਿਤ ਖਾਤਿਆਂ ਵਿਚ ਖੋਜ ਸਕਦੇ ਹੋ],
 ਯਾ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ਇਸ ਪੰਨੇ ਨੂੰ ਸੰਪਾਦਨ ਕਰ ਸਕਦੇ ਹੋ]</span>।',
@@ -495,8 +494,8 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 ਪੰਨੇ ਦੇ ਹਟਾਣ ਯਾ ਜਗ੍ਹਾ ਬਦਲੀ ਦਾ ਚਿੱਠਾ,ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਹੈ।',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''ਖ਼ਬਰਦਾਰ: ਸੰਚੇ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ।ਕੁਝ ਸੰਚੇ ਛੁਟ ਜਾਣਗੇ।",
-'post-expand-template-inclusion-category' => 'à¨\89ਹ à¨ªà©°à¨¨à©\87 à¨\9cਿਥà©\87 à¨¸à©°à¨\9aਿà¨\86à¨\82 à¨¦à¨¾ à¨\85à¨\95ਾਰ à¨¨à¨¿à¨£à¨®à¨¿à¨¤ à¨¹à©±à¨¦ à¨¤à©\8cà¨\82 à¨µà©±à¨§ à¨¹à©\88।',
+'post-expand-template-inclusion-warning' => "'''ਖ਼ਬਰਦਾਰ:''' ਟੈਂਪਲੇਟਾਂ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। ਕੁਝ ਟੈਂਪਲੇਟ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣਗੇ।",
+'post-expand-template-inclusion-category' => 'à¨\93ਹ à¨¸à¨«à¨¼à©\87 à¨\9cਿੱਥà©\87 à¨\9fà©\88à¨\82ਪਲà©\87à¨\9fਾà¨\82 à¨¦à©\87 à¨¸à¨¼à¨¾à¨®à¨² à¨\95ਰਨ à¨¦à¨¾ à¨\85à¨\95ਾਰ à¨¹à©±à¨¦à©\8bà¨\82 à¨µà¨§ à¨\97ਿà¨\86 à¨¹à©\88',
 'post-expand-template-argument-warning' => "'''ਖ਼ਬਰਦਾਰ'''ਇਸ ਸਫ਼ੇ ਤੇ ਕਿਸੇ ਫ਼ਰਮੇ ਵਿਚ ਘੱਟੋ ਘੱਟ ਇਕ ਸਁਘਟਕ ਐਸਾ ਹੈ ਜਿਸ ਦਾ ਵਿਸਤ੍ਰਿਤ ਰੂਪ ਬਹੁਤ ਵੱਡਾ ਹੈ।ਐਸੇ ਸਁਘਟਕਾਂ ਨੂਁ ਛੱਡ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
 'post-expand-template-argument-category' => 'ਐਸੇ ਸਫ਼ੇ ਜਿਨ੍ਹਾਂ ਵਿਚ ਫ਼ਰਮੇ ਦੇ ਸਁਘਟਕ ਛੁੱਟ ਗਏ ਹਨ ।',
 
@@ -514,7 +513,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'currentrevisionlink' => 'ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ',
 'cur' => 'ਮੌਜੂਦਾ',
 'next' => 'ਅੱਗੇ',
-'last' => 'ਆਖਰੀ',
+'last' => 'à¨\86à¨\96਼ਰà©\80',
 'page_first' => 'ਪਹਿਲਾਂ',
 'page_last' => 'ਆਖਰੀ',
 'history-fieldset-title' => 'ਇਤਿਹਾਸ ਤੇ ਇਕ ਨਜ਼ਰ ਮਾਰੋ ।',
@@ -542,8 +541,8 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'revdelete-log' => 'ਕਾਰਨ:',
 'revdelete-submit' => 'ਚੁਣੇ ਰੀਵਿਜ਼ਨ ਉੱਤੇ ਲਾਗੂ ਕਰੋ',
 'revdel-restore' => 'ਦਿੱਖ ਬਦਲੋ',
-'revdel-restore-deleted' => 'ਹਟਾਏ ਗਏ ਬਦਲਾਅ',
-'revdel-restore-visible' => 'ਦà©\8dਰਿਸ਼à¨\9f ਬਦਲਾਅ',
+'revdel-restore-deleted' => 'ਮਿਟਾਏ ਗਏ ਬਦਲਾਅ',
+'revdel-restore-visible' => 'ਦਿੱਸਣਯà©\8bà¨\97 ਬਦਲਾਅ',
 'pagehist' => 'ਪੇਜ ਦਾ ਅਤੀਤ',
 'deletedhist' => 'ਹਟਾਇਆ ਗਿਆ ਅਤੀਤ',
 
@@ -551,7 +550,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'revertmerge' => 'ਬਿਨ-ਮਿਲਾਨ',
 
 # Diffs
-'history-title' => '"$1" à¨¦à©\80 à¨¸à¨¼à©\8bਧ à¨¤à¨µà¨¾à¨°à©\80à¨\96',
+'history-title' => '"$1" à¨¦à©\87 à¨¬à¨¦à¨²à¨¾à¨\85 à¨¦à¨¾ à¨\85ਤà©\80ਤ',
 'lineno' => 'ਲਾਈਨ $1:',
 'compareselectedversions' => 'ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ',
 'editundo' => 'ਵਾਪਸ(undo)',
@@ -566,20 +565,20 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'notitlematches' => 'ਕੋਈ ਪੇਜ ਟਾਇਟਲ ਨਹੀਂ ਮਿਲਦਾ',
 'textmatches' => 'ਪੇਜ ਟੈਕਸਟ ਮਿਲਦਾ',
 'notextmatches' => 'ਕੋਈ ਪੇਜ ਟੈਕਸਟ ਨਹੀਂ ਮਿਲਦਾ',
-'prevn' => 'ਪਿੱà¨\9bà©\87 {{PLURAL:$1|$1}}',
-'nextn' => 'à¨\85ੱà¨\97à©\87 {{PLURAL:$1|$1}}',
+'prevn' => 'ਪਿà¨\9bਲਾ {{PLURAL:$1|$1}}',
+'nextn' => 'à¨\85à¨\97ਲਾ {{PLURAL:$1|$1}}',
 'prevn-title' => 'ਪਹਿਲਾ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}}',
 'nextn-title' => '↓
 ਅਗਲਾ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}}',
-'shown-title' => 'ਪà©\8dਰਤà©\80 à¨ªà©\87à¨\9c਼ $1 {{PLURAL:$1|ਨਤà©\80à¨\9cਾ|ਨਤà©\80à¨\9cà©\87}} à¨µà©\87ਖਾਓ',
+'shown-title' => 'ਪà©\8dਰਤà©\80 à¨¸à¨«à¨¼à¨¾ $1 {{PLURAL:$1|ਨਤà©\80à¨\9cਾ|ਨਤà©\80à¨\9cà©\87}} à¨µà¨¿ਖਾਓ',
 'viewprevnext' => 'ਵੇਖੋ ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''ਇਸ ਵਿਕਿ ਤੇ \"[[:\$1]]\" ਨਾਮ ਦਾ ਇਕ ਸਫ਼ਾ ਹੈ'''",
-'searchmenu-new' => "'''à¨\87ਸ à¨µà¨¿à¨\95ਿ à¨ªà¨° \"[[:\$1]]\" à¨¨à¨¾à¨® à¨¨à¨¾à¨² à¨ªà©°à¨¨ਾ ਬਣਾਓ!'''",
+'searchmenu-new' => "'''à¨\87ਸ à¨µà¨¿à¨\95à©\80 à¨¤à©\87 \"[[:\$1]]\" à¨¨à¨¾à¨® à¨¨à¨¾à¨² à¨¸à¨«à¨¼ਾ ਬਣਾਓ!'''",
 'searchhelp-url' => 'Help:ਸਮੱਗਰੀ',
 'searchprofile-articles' => 'ਸਮੱਗਰੀ ਪੇਜ',
 'searchprofile-project' => 'ਮੱਦਦ ਅਤੇ ਪ੍ਰੋਜੈਕਟ ਸਫ਼ੇ',
 'searchprofile-images' => 'ਮਲਟੀਮੀਡਿਆ',
-'searchprofile-everything' => 'ਹਰ à¨\9aà©\80à¨\9c਼',
+'searchprofile-everything' => 'ਸਭ à¨\95à©\81à¨\9d',
 'searchprofile-advanced' => 'ਤਕਨੀਕੀ',
 'searchprofile-articles-tooltip' => "$1 'ਚ ਖੋਜ",
 'searchprofile-project-tooltip' => "$1 'ਚ ਖੋਜ",
@@ -596,7 +595,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'search-mwsuggest-disabled' => 'ਕੋਈ ਸੁਝਾਅ ਨਹੀਂ',
 'searchrelated' => 'ਸੰਬੰਧਿਤ',
 'searchall' => 'ਸਭ',
-'search-nonefound' => 'ਤà©\81ਹਾਡà©\80 à¨\96à©\8bà¨\9c à¨¨à¨¾à¨² à¨®à©\87ਲ à¨\96ਾà¨\82ਦà©\87 à¨\95à©\8bà¨\88 à¨¸à¨¿à©±à¨\9fੇ ਨਹੀਂ ਮਿਲੇ।',
+'search-nonefound' => 'ਤà©\81ਹਾਡà©\80 à¨\96à©\8bà¨\9c à¨¨à¨¾à¨² à¨®à©\87ਲ à¨\96ਾà¨\82ਦà©\87 à¨\95à©\8bà¨\88 à¨¨à¨¤à©\80à¨\9cੇ ਨਹੀਂ ਮਿਲੇ।',
 'powersearch' => 'ਖੋਜ',
 'powersearch-legend' => 'ਤਕਨੀਕੀ ਖੋਜ',
 'powersearch-ns' => 'ਨੇਮ-ਸਪੇਸ ਵਿੱਚ ਖੋਜ:',
@@ -701,9 +700,9 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'rcshowhideanons' => '$1 ਅਗਿਆਤ ਯੂਜ਼ਰ',
 'rcshowhidemine' => '$1 ਮੇਰਾ ਐਡਿਟ',
 'rclinks' => 'ਪਿਛਲੇ $2 ਦਿਨਾਂ ਵਿਚ ਹੋਏ $1 ਬਦਲਾਅ ਦਿਖਾਓ<br />$3',
-'diff' => 'à¨\85ੰਤਰ',
+'diff' => 'ਫ਼ਰà¨\95',
 'hist' => 'ਅਤੀਤ',
-'hide' => 'à¨\93ਹਲà©\87',
+'hide' => 'à¨\9bà©\81ਪਾà¨\93',
 'show' => 'ਵੇਖੋ',
 'minoreditletter' => 'ਛ',
 'newpageletter' => 'ਨ',
@@ -718,7 +717,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ ਬਦਲਾਅ',
 'recentchangeslinked-title' => '"$1" ਨਾਲ ਸੰਬੰਧਿਤ ਬਦਲਾਅ',
 'recentchangeslinked-noresult' => 'ਜੁੜੇ ਹੋਏ ਸਫਿਆਂ ਤੇ ,ਦਿੱਤੇ ਸਮੇਂ ਵਿਚ ਕੁਝ ਨਹੀਂ ਬਦਲਿਆ ।',
-'recentchangeslinked-summary' => 'à¨\87ਹ à¨¸à©\82à¨\9aà©\80 à¨\8aਨà©\8dਹਾà¨\82 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 ,à¨\9cà©\8b à¨\87à¨\95 à¨\96ਾਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨¸à©°à¨¬à©°à¨§à¨¿à¨¤ à¨¹à¨¨, (ਯਾ à¨\95ਿਸà©\87 à¨\96ਾਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82) à¨¦à©\87 à¨¹à¨¾à¨² à¨µà¨¿à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µà¨¾à¨\82 à¨¨à©\82à©° à¨¦à¨°à¨¸à¨¼à¨¾à¨\82ਦà©\80 à¨¹à©\88 [[Special:Watchlist|ਤà©\81ਹਾਡà©\80 à¨¦à©\8dਰਿਸ਼à¨\9fà©\80 à¨\97à©\8bà¨\9aਰ à¨¸à©\82à¨\9aà©\80]] à¨µà¨¿à¨\9a à¨®à©\8cà¨\9cà©\82ਦ à¨ªà©°à¨¨à©\87 à¨®à©\8bà¨\9fà©\87 à¨\85ਖਰਾਂ ਵਿਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
+'recentchangeslinked-summary' => 'à¨\87ਹ à¨²à¨¿à¨¸à¨\9f à¨\87à¨\95 à¨\96਼ਾਸ à¨¸à¨«à¨¼à©\87 à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨\9cਾà¨\82 à¨\95ਿਸà©\87 à¨\96਼ਾਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨¹à¨¾à¨² à¨µà¨¿à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µà¨¾à¨\82 à¨¨à©\82à©° à¨¦à¨°à¨¸à¨¾à¨\82à¨\89ਦà©\80 à¨¹à©\88। [[Special:Watchlist|ਤà©\81ਹਾਡà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f]] à¨µà¨¿à¨\9a à¨®à©\8cà¨\9cà©\82ਦ à¨¸à¨«à¨¼à©\87 à¨®à©\8bà¨\9fà©\87 à¨\85ੱਖਰਾਂ ਵਿਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
 'recentchangeslinked-page' => 'ਸਫ਼ਾ ਨਾਂ:',
 'recentchangeslinked-to' => 'ਇਸ ਦੇ ਬਦਲੇ ਇਸ ਪੰਨੇ ਨਾਲ ਜੁੜੇ ਪੰਨਿਆਂ ਵਿਚ ਹੋਏ ਬਦਲਾਅ ਦਿਖਾਓ',
 
@@ -795,9 +794,9 @@ to upload files.',
 'filehist-filesize' => 'ਫਾਇਲ ਆਕਾਰ',
 'filehist-comment' => 'ਟਿੱਪਣੀ',
 'imagelinks' => 'ਫ਼ਾਈਲ ਦੀ ਵਰਤੌਂ',
-'linkstoimage' => 'ਹà©\87ਠ à¨²à¨¿à¨\96ਿਤ {{PLURAL:$1|ਪੰਨà©\87 à¨¦à¨¾ à¨¹à¨µà¨¾à¨²à¨¾ à¨¹à©\88|$1 à¨ªà©°à¨¨à©\87 à¨¦à©\87 à¨¹à¨µà¨¾à¨²à©\87 à¨¹à¨¨}} to this file:',
+'linkstoimage' => 'à¨\87ਹ {{PLURAL:$1|ਸਫ਼à©\87 à¨¦à©\87 à¨²à¨¿à©°à¨\95|$1 à¨¸à¨«à¨¼à©\87}} à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à¨¾à¨²à¨¼ à¨\9cà©\8bà©\9cਦà©\87 à¨¹à¨¨à©\87:',
 'nolinkstoimage' => 'ਇਸ ਮਿਸਲ ਨਾਲ ਕੋਈ ਵਿ ਸਫ਼ੇ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ ।',
-'sharedupload-desc-here' => 'à¨\87ਹ à¨®à¨¿à¨¸à¨² $1 à¨¦à©\80 à¨¹à©\88 à¨\85ਤà©\87 à¨¹à©\8bਰ à¨ªà©\8dਰਾà¨\9cà©\88à¨\95à¨\9fਾà¨\82 à¨µà¨¿à¨\9a à¨µà©\80 à¨µà¨°à¨¤à©\80 à¨\9cਾ à¨¸à¨\95ਦà©\80 à¨¹à©\88 à¥¤ à¨\87ਸ à¨¦à©\87 [$2 à¨®à¨¿à¨¸à¨² à¨µà¨¾à¨²à©\87 à¨¬à©\8dਰਿਤਾà¨\82ਤ à¨ªà©°à¨¨à©\87] à¨µà¨¿à¨\9a à¨®à©\8cà¨\9cà©\82ਦ à¨µà¨°à¨¨à¨£ à¨¨à¨¿à¨®à¨¨ à¨²à¨¿à¨\96ਿਤ ਹੈ।',
+'sharedupload-desc-here' => 'à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ $1 à¨¦à©\80 à¨¹à©\88 à¨\85ਤà©\87 à¨¹à©\8bਰ à¨ªà©\8dਰਾà¨\9cà©\88à¨\95à¨\9fਾà¨\82 à¨µà¨¿à¨\9a à¨µà©\80 à¨µà¨°à¨¤à©\80 à¨\9cਾ à¨¸à¨\95ਦà©\80 à¨¹à©\88 à¥¤ à¨\87ਸ [$2 à¨«à¨¼à¨¾à¨\88ਲ à¨¦à©\87 à¨µà©\87ਰਵਾ à¨¸à¨«à¨¼à©\87] à¨µà¨¿à¨\9a à¨®à©\8cà¨\9cà©\82ਦ à¨µà©\87ਰਵਾ à¨¹à©\87ਠ à¨¦à¨¿à¨¸ à¨°à¨¿à¨¹à¨¾ ਹੈ।',
 'uploadnewversion-linktext' => 'ਇਸ ਫਾਇਲ ਦਾ ਇੱਕ ਨਵਾਂ ਵਰਜਨ ਅੱਪਲੋਡ ਕਰੋ',
 
 # File reversion
@@ -911,7 +910,7 @@ to upload files.',
 'mywatchlist' => 'ਮੇਰੀ ਵਾਚ-ਲਿਸਟ',
 'watchlistfor2' => '$1 $2 ਲਈ',
 'watchnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
-'watch' => 'ਵਾà¨\9a',
+'watch' => 'ਨਿà¨\97ਰਾਨà©\80 à¨°à©±à¨\96à©\8b',
 'watchthispage' => 'ਇਹ ਪੇਜ ਵਾਚ ਕਰੋ',
 'unwatch' => 'ਅਣ-ਵਾਚ',
 'wlshowlast' => 'ਆਖਰੀ $1 ਦਿਨ $2 ਘੰਟੇ $3 ਵੇਖੋ',
@@ -972,8 +971,8 @@ to upload files.',
 
 # Undelete
 'undeletebtn' => 'ਰੀਸਟੋਰ',
-'undeletelink' => 'ਵà©\87à¨\96à©\8b/ਰà©\80ਸà¨\9fà©\8bਰ',
-'undeleteviewlink' => 'ਦੇਖੋ',
+'undeletelink' => 'ਵà©\87à¨\96à©\8b/ਵਾਪਸ à¨²à¨¿à¨\86à¨\93',
+'undeleteviewlink' => 'ਵੇਖੋ',
 'undeletereset' => 'ਰੀ-ਸੈੱਟ',
 'undeletecomment' => 'ਟਿੱਪਣੀ:',
 'undelete-show-file-submit' => 'ਹਾਂ',
@@ -1003,7 +1002,7 @@ to upload files.',
 'sp-contributions-submit' => 'ਖੋਜ',
 
 # What links here
-'whatlinkshere' => 'à¨\87ੱਥà©\87 à¨\95ਿਹà©\9cà©\87 à¨²à¨¿à©°à¨\95',
+'whatlinkshere' => 'à¨\95ਿਹà©\9cà©\87 (ਸਫ਼à©\87) à¨\87ੱਥà©\87 à¨\9cà©\8bà©\9cਦà©\87 à¨¹à¨¨',
 'whatlinkshere-title' => '$1 ਨਾਲ ਜੁੜੇ ਹੋਏ ਪੰਨੇ',
 'whatlinkshere-page' => 'ਸਫਾ:',
 'linkshere' => "ਹੇਠ ਦਿੱਤੇ ਪੰਨੇ '''[[:$1]]''' ਨਾਲ ਜੋੜਦੇ ਹਨ।",
@@ -1028,7 +1027,7 @@ to upload files.',
 'ipbreasonotherlist' => 'ਹੋਰ ਕਾਰਨ',
 'ipbsubmit' => 'ਇਹ ਯੂਜ਼ਰ ਲਈ ਪਾਬੰਦੀ',
 'ipbother' => 'ਹੋਰ ਟਾਈਮ:',
-'ipboptions' => '੨ à¨\98à¨\82à¨\9fà©\87:2 hours, à©§ à¨¦à¨¿à¨¨:1 day, à©© à¨¦à¨¿à¨¨:3 days, à©§ à¨¹à¨«à©\8dਤਾ:1 week, à©¨ à¨¹à¨«à©\8dਤੇ:2 weeks, ੧ ਮਹੀਨਾ:1 month, ੩ ਮਹੀਨੇ:3 months, ੬ ਮਹੀਨੇ:6 months, ੧ ਸਾਲ:1 year, ਹਮੇਸ਼ਾ ਲਈ:infinite',
+'ipboptions' => '੨ à¨\98à©°à¨\9fà©\87:2 hours, à©§ à¨¦à¨¿à¨¨:1 day, à©© à¨¦à¨¿à¨¨:3 days, à©§ à¨¹à¨«à¨¼à¨¤à¨¾:1 week, à©¨ à¨¹à¨«à¨¼ਤੇ:2 weeks, ੧ ਮਹੀਨਾ:1 month, ੩ ਮਹੀਨੇ:3 months, ੬ ਮਹੀਨੇ:6 months, ੧ ਸਾਲ:1 year, ਹਮੇਸ਼ਾ ਲਈ:infinite',
 'ipbotheroption' => 'ਹੋਰ',
 'ipbotherreason' => 'ਹੋਰ/ਆਮ ਕਾਰਨ:',
 'badipaddress' => 'ਗਲਤ IP ਐਡਰੈੱਸ',
@@ -1040,8 +1039,8 @@ to upload files.',
 'expiringblock' => '$1 $2 ਮਿਆਦ ਖਤਮ',
 'anononlyblock' => 'anon. ਹੀ',
 'emailblock' => 'ਈਮੇਲ ਬਲਾਕ ਹੈ',
-'blocklink' => 'ਬਲਾà¨\95',
-'unblocklink' => 'à¨\85ਣ-ਬਲਾà¨\95',
+'blocklink' => 'ਰà©\8bà¨\95 à¨²à¨¾à¨\93',
+'unblocklink' => 'ਰà©\8bà¨\95 à¨°à©±à¨¦ à¨\95ਰà©\8b',
 'change-blocklink' => 'ਬਲਾਕ ਬਦਲੋ',
 'contribslink' => 'ਯੋਗਦਾਨ',
 'unblocklogentry' => '$1 ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਈ',
@@ -1063,7 +1062,7 @@ to upload files.',
 'movedto' => 'ਮੂਵ ਕੀਤਾ',
 'movelogpage' => 'ਮੂਵ ਲਾਗ',
 'movereason' => 'ਕਾਰਨ:',
-'revertmove' => 'ਰà©\80ਵਰà¨\9f',
+'revertmove' => 'ਰੱਦ à¨\95ਰà©\8b',
 'delete_and_move' => 'ਹਟਾਓ ਅਤੇ ਮੂਵ ਕਰੋ',
 
 # Export
@@ -1101,45 +1100,45 @@ to upload files.',
 'import-logentry-upload-detail' => '$1 ਰੀਵਿਜ਼ਨ',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨¯à©\82à¨\9c਼ਰ ਸਫ਼ਾ',
-'tooltip-pt-mytalk' => 'ਤà©\81ਹਾਡਾ à¨\9aਰà¨\9aਾ à¨ªà©\87à¨\9c',
+'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨®à©\88à¨\82ਬਰ ਸਫ਼ਾ',
+'tooltip-pt-mytalk' => 'ਤà©\81ਹਾਡਾ à¨\9aਰà¨\9aਾ à¨¸à¨«à¨¼à¨¾',
 'tooltip-pt-preferences' => 'ਮੇਰੀ ਪਸੰਦ',
-'tooltip-pt-watchlist' => 'ਤà©\81ਹਾਡà©\87 à¨µà¨¿à¨\9aਾਰ à¨\97à©\8bà¨\9aਰà©\87 à¨°à©±à¨\96à©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨¦à¨¿ à¨¸à©\82à¨\9aà©\80।',
+'tooltip-pt-watchlist' => 'ਤà©\81ਹਾਡà©\87 à¨µà¨¿à¨\9aਾਰ à¨\97à©\8bà¨\9aਰà©\87 à¨°à©±à¨\96à©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f',
 'tooltip-pt-mycontris' => 'ਮੇਰੇ ਯੋਗਦਾਨ ਦੀ ਲਿਸਟ',
 'tooltip-pt-login' => 'ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਪਰ ਇਹ ਲਾਜ਼ਮੀ ਨਹੀਂ ਹੈ',
 'tooltip-pt-logout' => 'ਲਾਗ ਆਉਟ',
 'tooltip-ca-talk' => 'ਸਮਗੱਰੀ ਸਫ਼ੇ ਬਾਰੇ ਚਰਚਾ',
-'tooltip-ca-edit' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¸à©\8bਧ à¨¸à¨\95ਦà©\87 à¨¹à©\8b। à¨¸à©°à¨­à¨¾à¨²à¨£ à¨¤à©\8bà¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨\9dਲà¨\95 à¨¬à¨\9fਨ à¨µà¨°à¨¤ à¨\95à©\87 à¨µà©\87à¨\96à©\8b à¨\9cà©\80',
+'tooltip-ca-edit' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¸à©\8bਧ à¨¸à¨\95ਦà©\87 à¨¹à©\8b। à¨®à¨¿à¨¹à¨°à¨¬à¨¾à¨¨à©\80 à¨\95ਰà¨\95à©\87 à¨¸à©°à¨­à¨¾à¨²à¨£ à¨¤à©\8bà¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨\9dਲà¨\95 à¨¬à¨\9fਨ à¨µà¨°à¨¤à©\8b।',
 'tooltip-ca-addsection' => 'ਨਵਾਂ ਖੰਡ ਸ਼ੁ੍ਰੂ ਕਰੋ',
-'tooltip-ca-viewsource' => 'à¨\87ਹ à¨ªà©\87à¨\9c਼ ਸੁਰੱਖਿਅਤ ਹੈ।
-ਤੁਸੀਂ ਇਸ ਦਾ ਸਰੋਤ ਵੇਖ ਸਕਦੇ ਹੋ।',
+'tooltip-ca-viewsource' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ ਸੁਰੱਖਿਅਤ ਹੈ।
+ਤੁਸੀਂ ਇਸਦਾ ਸਰੋਤ ਵੇਖ ਸਕਦੇ ਹੋ।',
 'tooltip-ca-history' => 'ਇਹ ਸਫ਼ੇ ਦਾ ਪਿਛਲਾ ਰੀਵਿਜ਼ਨ',
 'tooltip-ca-protect' => 'ਇਹ ਪੇਜ ਸੁਰੱਖਿਅਤ ਬਣਾਓ',
 'tooltip-ca-delete' => 'ਇਹ ਪੇਜ ਹਟਾਓ',
 'tooltip-ca-move' => 'ਇਹ ਪੇਜ ਭੇਜੋ',
-'tooltip-ca-watch' => "ਇਹ ਸਫ਼ੇ ਆਪਣੀ ਵਾਚ-ਲਿਸਟ 'ਚੋਂ ਹਟਾਓ",
+'tooltip-ca-watch' => 'ਇਹ ਸਫ਼ਾ ਆਪਣੀ ਵਾਚ-ਲਿਸਟ ਵਿਚ ਸ਼ਾਮਲ ਕਰੋ',
 'tooltip-ca-unwatch' => 'ਇਹ ਸਫ਼ਾ ਆਪਣੀ ਵਾਚ-ਲਿਸਟ ਤੋਂ ਹਟਾਓ',
 'tooltip-search' => 'ਖੋਜ {{SITENAME}}',
 'tooltip-search-go' => 'ਠੀਕ ਇਹ ਨਾਂ ਵਾਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਉ, ਜੇ ਮੌਜੂਦ ਹੈ',
-'tooltip-search-fulltext' => 'à¨\87ਸ à¨\9fà©\88à¨\95ਸà¨\9f ਲਈ ਸਫ਼ਿਆਂ ਦੀ ਖੋਜ।',
-'tooltip-p-logo' => 'ਮà©\81ੱà¨\96 à¨ªà©\87à¨\9c',
-'tooltip-n-mainpage' => 'ਮà©\81ੱà¨\96 à¨ªà©\87à¨\9c ਖੋਲ੍ਹੋ',
+'tooltip-search-fulltext' => 'à¨\87ਸ à¨²à¨¿à¨\96ਤ ਲਈ ਸਫ਼ਿਆਂ ਦੀ ਖੋਜ।',
+'tooltip-p-logo' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼à¨¾',
+'tooltip-n-mainpage' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼à¨¾ ਖੋਲ੍ਹੋ',
 'tooltip-n-mainpage-description' => 'ਮੁੱਖ ਪੇਜ਼ ਉੱਤੇ ਜਾਓ',
 'tooltip-n-portal' => 'ਪਰੋਜੈਕਟ ਬਾਰੇ, ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ, ਕਿੱਥੇ ਕੁਝ ਲੱਭ ਸਕਦੇ ਹੋ',
 'tooltip-n-currentevents' => 'ਮੌਜੂਦਾ ਸਮਾਗਮ ਬਾਰੇ ਪਿਛਲੀ ਜਾਣਕਾਰੀ ਲੱਭੋ',
 'tooltip-n-recentchanges' => 'ਵਿਕਿ ਵਿੱਚ ਤਾਜ਼ਾ ਬਦਲਾਅ ਦੀ ਲਿਸਟ',
 'tooltip-n-randompage' => 'ਇੱਕ ਰਲਵਾਂ ਪੇਜ ਲੋਡ ਕਰੋ',
 'tooltip-n-help' => 'ਖੋਜਣ ਲਈ ਥਾਂ',
-'tooltip-t-whatlinkshere' => 'ਸਭ à¨µà¨¿à¨\95ਿ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f, à¨\9cà©\8b à¨\87ੱਥà©\87 à¨²à¨¿à©°à¨\95 à¨\95à©\80ਤੇ ਹਨ',
-'tooltip-t-recentchangeslinked' => 'à¨\87ਹ ਸਫ਼ੇ ਤੋਂ ਲਿੰਕ ਕੀਤੇ ਸਫ਼ਿਆਂ ਵਿੱਚ ਤਾਜ਼ਾ ਬਦਲਾਅ',
-'tooltip-feed-atom' => 'à¨\87ਸ à¨ªà©°à¨¨ੇ ਦੀ ਐਟਮ ਫ਼ੀਡ',
+'tooltip-t-whatlinkshere' => 'ਵਿà¨\95à©\80 à¨¦à©\87 à¨¸à¨¾à¨°à©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f, à¨\9cà©\8b à¨\87ੱਥà©\87 à¨\9cà©\8bà©\9cਦੇ ਹਨ',
+'tooltip-t-recentchangeslinked' => 'à¨\87ਸ ਸਫ਼ੇ ਤੋਂ ਲਿੰਕ ਕੀਤੇ ਸਫ਼ਿਆਂ ਵਿੱਚ ਤਾਜ਼ਾ ਬਦਲਾਅ',
+'tooltip-feed-atom' => 'à¨\87ਸ à¨¸à¨«à¨¼ੇ ਦੀ ਐਟਮ ਫ਼ੀਡ',
 'tooltip-t-contributions' => 'ਇਸ ਮੈਂਬਰ ਦਾ ਯੋਗਦਾਨ ਦਿਖਾਓ',
 'tooltip-t-emailuser' => 'ਇਹ ਯੂਜ਼ਰ ਨੂੰ ਮੇਲ ਭੇਜੋ',
 'tooltip-t-upload' => 'ਚਿੱਤਰ ਜਾਂ ਮੀਡਿਆ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ',
-'tooltip-t-specialpages' => 'ਸਭ à¨\96ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ',
+'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨\96਼ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ',
 'tooltip-t-print' => 'ਇਹ ਸਫ਼ੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ',
 'tooltip-t-permalink' => 'ਸਫ਼ੇ ਦੇ ਇਹ ਰੀਵਿਜ਼ਨ ਲਈ ਪੱਕੇ ਲਿੰਕ',
-'tooltip-ca-nstab-main' => 'ਸਮà¨\97ੱਰà©\80 à¨ªà©\87à¨\9c ਵੇਖੋ',
+'tooltip-ca-nstab-main' => 'ਸਮੱà¨\97ਰà©\80 à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'tooltip-ca-nstab-user' => 'ਯੂਜ਼ਰ ਪੇਜ ਵੇਖੋ',
 'tooltip-ca-nstab-media' => 'ਮੀਡਿਆ ਪੇਜ ਵੇਖੋ',
 'tooltip-ca-nstab-special' => 'ਇਹ ਖਾਸ ਸਫ਼ਾ ਹੈ, ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਨੂੰ ਸੋਧ ਨਹੀਂ ਸਕਦੇ ਹੋ',
@@ -1150,7 +1149,7 @@ to upload files.',
 'tooltip-ca-nstab-help' => 'ਮੱਦਦ ਪੇਜ ਵੇਖੋ',
 'tooltip-ca-nstab-category' => 'ਕੈਟਾਗਰੀ ਪੇਜ ਵੇਖੋ',
 'tooltip-minoredit' => 'ਇਸ ਤੇ ਛੋਟੇ ਬਦਲਾਅ ਦਾ  ਨਿਸ਼ਾਨ ਲਾਓ',
-'tooltip-save' => 'ਆਪਣੇ ਬਦਲਾਅ ਸੰਭਾਲੋ',
+'tooltip-save' => 'à¨\86ਪਣà©\87 à¨¬à¨¦à¨²à¨¾à¨\85 à¨¸à©°à¨­à¨¾à¨²à¨¼à©\8b',
 'tooltip-preview' => 'ਆਪਣੇ ਬਦਲਾਅ ਦੀ ਝਲਕ ਵੇਖੋ, ਸੰਭਾਲਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ ਜੀ!',
 'tooltip-diff' => 'ਇਸ ਪਾਠ ਵਿਚ ਆਪਣੇ ਕੀਤੇ ਹੋਏ ਬਦਲਾਅ ਦੇਖੋ',
 'tooltip-compareselectedversions' => 'ਇਸ ਪੰਨੇ ਦੇ ਚੁਣੇ ਹੋਏ ਸ਼ੋਧਾਂ ਵਿਚ ਫ਼ਰਕ ਦੇਖੋ',
@@ -1159,7 +1158,7 @@ to upload files.',
 'tooltip-rollback' => "'' ਵਾਪਸ ਲੈ ਜਾਓ '' ਇਕ ਝਟਕੇ ਵਿਚ ਹੀ ਪਿਛਲੇ ਯੂਜ਼ਰ ਦੇ ਬਦਲਾਵਾਂ ਨੂੰ ਗਾਇਬ ਕਰ ਦੇਂਦਾ ਹੈ।",
 'tooltip-undo' => '" ਪੁਰਾਣੀ ਹਾਲਤ ਵਿਚ ਪਰਤੋ " ਇਸ ਬਦਲਾਅ ਨੂੰ ਰੱਦ ਕਰਕੇ ਸੰਪਾਦਨ ਫਾਰਮ ਨੂੰ ਝਲਕ ਦੇ ਅੰਦਾਜ਼ ਵਿਚ ਦਿਖਾਂਦਾ ਹੈ।
 ਇਸ ਦਵਾਰਾ ਸਾਰ ਵਿਚ ਪੁਰਾਣੇ ਹਾਲਤ ਵਿਚ ਪਰਤਣ ਦਾ ਕਾਰਨ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।',
-'tooltip-summary' => 'ਇਕ ਸੰਖੇਪ ਖੁਲਾਸਾ ਦਰਜ ਕਰੋ',
+'tooltip-summary' => 'à¨\87à¨\95 à¨¸à©°à¨\96à©\87ਪ à¨\96਼à©\81ਲਾਸਾ à¨¦à¨°à¨\9c à¨\95ਰà©\8b',
 
 # Attribution
 'others' => 'ਹੋਰ',
@@ -1307,7 +1306,7 @@ to upload files.',
 'version' => 'ਵਰਜਨ',
 
 # Special:SpecialPages
-'specialpages' => 'à¨\96ਾਸ à¨ªà©\87à¨\9c',
+'specialpages' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à©\87',
 'specialpages-group-login' => 'ਲਾਗ ਇਨ / ਅਕਾਊਂਟ ਬਣਾਓ',
 
 # Special:BlankPage
index f9d073d..cd33b36 100644 (file)
@@ -762,6 +762,9 @@ Gamitan me ing radio button column bang bukud mung detang miyalilan aniang o bay
 'searchmenu-exists' => "'''Atin bulung a mikilagiung \"[[:\$1]]\" keng wiking ini.'''",
 'searchhelp-url' => 'Help:Kalamnan',
 'searchprofile-everything' => 'Eganagana',
+'searchprofile-articles-tooltip' => 'Paintunan king$1',
+'searchprofile-images-tooltip' => 'Manintun makasimpan',
+'searchprofile-everything-tooltip' => 'Manintun karing eganaganang laman (kayabe no reng bulung pamisabi-sabi)',
 'search-result-size' => '$1 ({{PLURAL:$2|1 a kataya|$2 kataya}})',
 'search-result-score' => 'Kaugnayan (relevance): $1%',
 'search-redirect' => '(pamanalis direksiun $1)',
index de6af95..1eb5179 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Kaganer
+ * @author Krinkle
  * @author Xqt
  * @author לערי ריינהארט
  */
@@ -426,7 +427,7 @@ Paesswatt fer nau: $2',
 'qbsettings-none' => 'Ken',
 
 # Preferences page
-'preferences' => 'paerseenlich Profil',
+'preferences' => 'Paerseenlich Profil',
 'mypreferences' => 'Mei Uffschtelling',
 'changepassword' => 'Paesswatt ennere',
 'skin-preview' => 'Aagucke',
index 67cd743..24b174c 100644 (file)
@@ -19,6 +19,7 @@
  * @author Holek
  * @author Jwitos
  * @author Kaganer
+ * @author Karol007
  * @author Lajsikonik
  * @author Lampak
  * @author Lazowik
@@ -33,6 +34,7 @@
  * @author Odder
  * @author Olgak85
  * @author Przemub
+ * @author Reedy
  * @author Remedios44
  * @author Remember the dot
  * @author Rzuwig
@@ -305,17 +307,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Kliknięcie prawym klawiszem myszy na tytule sekcji rozpoczyna jej edycję (JavaScript)',
 'tog-showtoc' => 'Pokazuj spis treści (na stronach z więcej niż 3 nagłówkami)',
 'tog-rememberpassword' => 'Zapamiętaj moje hasło w przeglądarce (maksymalnie przez $1 {{PLURAL:$1|dzień|dni}})',
-'tog-watchcreations' => 'Dodaj do obserwowanych strony tworzone przeze mnie',
-'tog-watchdefault' => 'Dodaj do obserwowanych strony, które edytuję',
-'tog-watchmoves' => 'Dodaj do obserwowanych strony, które przenoszę',
-'tog-watchdeletion' => 'Dodaj do obserwowanych strony, które usuwam',
+'tog-watchcreations' => 'Dodawaj do obserwowanych tworzone przeze mnie strony oraz wgrywane przeze mnie pliki',
+'tog-watchdefault' => 'Dodawaj do obserwowanych strony i pliki, które edytuję',
+'tog-watchmoves' => 'Dodawaj do obserwowanych strony i pliki, które przenoszę',
+'tog-watchdeletion' => 'Dodawaj do obserwowanych strony i pliki, które usuwam',
 'tog-minordefault' => 'Wszystkie edycje domyślnie oznaczaj jako drobne',
 'tog-previewontop' => 'Pokazuj podgląd powyżej obszaru edycji',
 'tog-previewonfirst' => 'Pokazuj podgląd strony podczas pierwszej edycji',
 'tog-nocache' => 'Wyłącz pamięć podręczną przeglądarki',
-'tog-enotifwatchlistpages' => 'Wyślij do mnie e‐mail kiedy strona z mojej listy obserwowanych zostanie zmodyfikowana',
+'tog-enotifwatchlistpages' => 'Wyślij do mnie e‐mail, gdy strona lub plik z mojej listy obserwowanych zostaną zmodyfikowane',
 'tog-enotifusertalkpages' => 'Wyślij do mnie e‐mail kiedy moja strona dyskusji zostanie zmodyfikowana',
-'tog-enotifminoredits' => 'Wyślij e‐mail także w przypadku drobnych zmian na stronach',
+'tog-enotifminoredits' => 'Wyślij e‐mail także w przypadku drobnych zmian na stronach lub w plikach',
 'tog-enotifrevealaddr' => 'Nie ukrywaj mojego adresu e‐mail w powiadomieniach',
 'tog-shownumberswatching' => 'Pokaż liczbę użytkowników obserwujących stronę',
 'tog-oldsig' => 'Twój obecny podpis',
@@ -648,7 +650,7 @@ Można zgłosić ten fakt [[Special:ListUsers/sysop|administratorowi]], podając
 'cannotdelete' => 'Strona lub plik „$1” nie mogą zostać usunięte.
 Możliwe, że zostały już usunięte przez kogoś innego.',
 'cannotdelete-title' => 'Nie można usunąć strony „$1”.',
-'delete-hook-aborted' => 'Usuwanie przerwane przez zaczep.
+'delete-hook-aborted' => 'Usuwanie przerwane przez hak.
 Przyczyna nieokreślona.',
 'badtitle' => 'Niepoprawny tytuł',
 'badtitletext' => 'Podano niepoprawny tytuł strony. Prawdopodobnie jest pusty lub zawiera znaki, których użycie jest zabronione.',
@@ -1855,6 +1857,7 @@ Jeśli problem będzie się powtarzał, skontaktuj się z [[Special:ListUsers/sy
 'lockmanager-fail-releaselock' => 'Nie może zwolnić blokady dla " $1 ".',
 'lockmanager-fail-db-bucket' => 'Nie można powiązać wystarczającej ilości zablokowanych baz danych w segmencie $1 .',
 'lockmanager-fail-db-release' => 'Nie udało się zwolnić blokad w bazie danych $1.',
+'lockmanager-fail-svr-acquire' => 'Nie udało się uzyskać blokady na serwerze $1.',
 'lockmanager-fail-svr-release' => 'Nie udało się zwolnić blokady na serwerze $1.',
 
 # ZipDirectoryReader
@@ -1958,10 +1961,10 @@ Dostępna jest też [[Special:WhatLinksHere/$2|pełna lista]].',
 'morelinkstoimage' => 'Pokaż [[Special:WhatLinksHere/$1|więcej odnośników]] do tego pliku.',
 'linkstoimage-redirect' => '$1 (przekierowanie do pliku) $2',
 'duplicatesoffile' => '{{PLURAL:$1|Następujący plik jest kopią|Następujące pliki są kopiami}} pliku ([[Special:FileDuplicateSearch/$2|więcej informacji]]):',
-'sharedupload' => 'Ten plik znajduje się na $1 i może być używany w innych projektach.',
-'sharedupload-desc-there' => 'Ten plik znajduje się na $1 i może być używany w innych projektach.
+'sharedupload' => 'Ten plik znajduje się w $1 i może być używany w innych projektach.',
+'sharedupload-desc-there' => 'Ten plik znajduje się w $1 i może być używany w innych projektach.
 Więcej informacji odnajdziesz na [$2 stronie opisu pliku].',
-'sharedupload-desc-here' => 'Ten plik znajduje się na $1 i może być używany w innych projektach.
+'sharedupload-desc-here' => 'Ten plik znajduje się w $1 i może być używany w innych projektach.
 Poniżej znajdują się informacje ze [$2 strony opisu] tego pliku.',
 'sharedupload-desc-edit' => 'Plik ten pochodzi z $1 i może być wykorzystany w innych projektach.
 Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
@@ -3861,9 +3864,9 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 
 # Special:SpecialPages
 'specialpages' => 'Strony specjalne',
-'specialpages-note' => '* Typowe strony specjalne.
-* <span class="mw-specialpagerestricted">Strony specjalne o ograniczonym dostępie.</span>
-* <span class="mw-specialpagecached">Buforowane strony specjalne (mogą być nieaktualne).</span>',
+'specialpages-note' => '----
+* Normalne strony specjalne.
+* <span class="mw-specialpagerestricted">Zastrzeżone strony specjalne.</span>',
 'specialpages-group-maintenance' => 'Raporty konserwacyjne',
 'specialpages-group-other' => 'Inne strony specjalne',
 'specialpages-group-login' => 'Logowanie i rejestracja',
@@ -4040,6 +4043,4 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'duration-centuries' => '$1 {{PLURAL:$1|stulecie|stulecia|stuleci}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tysiąclecie|tysiąclecia|tysiącleci}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Nie udało się uzyskać blokady na serwerze $1.',
 );
index 6699535..6a64e59 100644 (file)
@@ -1588,6 +1588,7 @@ Se a-i riva sossì n'àotra vira, ch'as buta an comunicassion con n'[[Special:Li
 'lockmanager-fail-releaselock' => 'As peul pa gavé la saradura për «$1».',
 'lockmanager-fail-db-bucket' => 'As peul pa contatesse a basta ëd base ëd dàit ëd saradura ant ël sëstin $1.',
 'lockmanager-fail-db-release' => 'As peulo pa gavesse le saradure an sla base ëd dàit $1.',
+'lockmanager-fail-svr-acquire' => 'As peul pa butesse le saradure an sël servent $1.',
 'lockmanager-fail-svr-release' => 'As peulo pa arlassesse le saradure an sël servent $1.',
 
 # ZipDirectoryReader
@@ -2664,26 +2665,26 @@ Për piasì, ch'a preuva torna.",
 # Import log
 'importlogpage' => "Registr dj'amportassion",
 'importlogpagetext' => "Amportassion aministrative ëd pàgine e ëd soa stòria da dj'àutre wiki.",
-'import-logentry-upload' => "amportà [[$1]] con un càrich d'archivi",
+'import-logentry-upload' => "a l'ha amportà [[$1]] con un càrich d'archivi",
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|revision|revision}}',
 'import-logentry-interwiki' => "Amportà da n'àutra wiki $1",
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|revision|revision}} da $2',
 
 # JavaScriptTest
 'javascripttest' => 'Preuva ëd JavaScript',
-'javascripttest-disabled' => "Sta funsion-sì a l'é pa stàita abilità dzora sta wiki-sì.",
+'javascripttest-disabled' => "Sta funsion-sì a l'é pa stàita abilità ansima a costa wiki.",
 'javascripttest-title' => 'Fé dle preuve $1',
 'javascripttest-pagetext-noframework' => "Costa pàgina a l'é arservà për fé dle preuve JavaScript.",
-'javascripttest-pagetext-unknownframework' => 'Utiss ëd preuva pa conossù "$1".',
-'javascripttest-pagetext-frameworks' => "Për piasì, ch'a serna un-a dle struture ëd test sì-dapress: $1",
+'javascripttest-pagetext-unknownframework' => 'Strutura ëd preuva pa conossùa «$1».',
+'javascripttest-pagetext-frameworks' => "Për piasì, ch'a serna un-a dle struture ëd preuva sì-dapress: $1",
 'javascripttest-pagetext-skins' => "Ch'a serna na pel për fé le preuve:",
-'javascripttest-qunit-intro' => 'Varda [$1 la documentassion dle preuve] dzora a mediawiki.org.',
+'javascripttest-qunit-intro' => 'Vëdde [$1 la documentassion dle preuve] dzora a mediawiki.org.',
 'javascripttest-qunit-heading' => 'Sequensa ëd preuve QUnit ëd JavaScript su MediaWiki',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Toa pàgina utent',
-'tooltip-pt-anonuserpage' => 'Pàgina Utent për l',
-'tooltip-pt-mytalk' => 'Toa pàgina ëd discussion e ciaciarade.',
+'tooltip-pt-userpage' => 'Soa pàgina utent',
+'tooltip-pt-anonuserpage' => "La pàgina utent për l'IP con ël qual chiel a contribuiss",
+'tooltip-pt-mytalk' => 'Soa pàgina ëd discussion e ciaciarade',
 'tooltip-pt-anontalk' => 'Pàgina ëd ciaciarade për l',
 'tooltip-pt-preferences' => 'Coma che i veuj mia {{SITENAME}}.',
 'tooltip-pt-watchlist' => 'Lista dle pàgine che chiel as ten sot euj.',
@@ -3714,6 +3715,4 @@ Dësnò, a peule dovré ël formlari semplificà sì-sota. Sò coment a sarà gi
 'duration-centuries' => '$1 {{PLURAL:$1|sécol|sécoj}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenari|milenari}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'As peul pa butesse le saradure an sël servent $1.',
 );
index 79f113b..afb513d 100644 (file)
@@ -165,7 +165,7 @@ $messages = array(
 'tog-hidepatrolled' => 'په وروستيو بدلونونو کې څارل شوې سمونونه پټول',
 'tog-newpageshidepatrolled' => 'د نوؤ مخونو په لړليک کې کتل شوي مخونه پټول',
 'tog-extendwatchlist' => 'يوازې د وروستني بدلونونو د ښکاره کولو لپاره نه بلکه د ټولو بدلونونو د ښکاره کولو لپاره کتنلړ غځول',
-'tog-usenewrc' => 'د وروستي بدلونو پرمختللې بڼه کارول (جاوا سکرېپټ ته اړتيا ده)',
+'tog-usenewrc' => 'په کتنلړ او وروستي بدلونو مخ باندې ډله ايز بدلونونه (جاوا سکرېپټ ته اړتيا ده)',
 'tog-numberheadings' => 'د سرليکونو خپلکاره شمېرايښودنه',
 'tog-showtoolbar' => 'د سمولو توکپټه ښکاره کول (جاواسکرېپټ)',
 'tog-editondblclick' => 'په دوه کلېک سره د مخونو سمون (د جاواسکرېپټ اړتيا ده)',
@@ -173,17 +173,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'د ښي کلېک سره د سرليکونو د برخې سمون چارنول (جاواسکرېپټ ته اړتيا)',
 'tog-showtoc' => 'نيوليک ښکاره کول (د هغو مخونو لپاره چې له ۳ نه ډېر سرليکونه لري)',
 'tog-rememberpassword' => 'زما کارن-نوم په دې کتنمل (تر $1 {{PLURAL:$1|ورځې|ورځو}}) په ياد وساته!',
-'tog-watchcreations' => 'هغه مخونه چې زه يې جوړوم، زما کتنلړ کې ورګډ کړه',
-'tog-watchdefault' => 'هغه مخونه چې زه يې سموم، زما کتنلړ کې ورګډ کړه',
-'tog-watchmoves' => 'هغه مخونه چې زه يې لېږدوم، زما کتنلړ کې ورګډ کړه',
-'tog-watchdeletion' => 'هغه مخونه چې زه يې ړنګوم، زما کتنلړ کې ورګډ کړه',
+'tog-watchcreations' => 'زما کتنلړ کې دې هغه مخونه چې زه يې جوړوم او هغه دوتنې چې زه يې پورته کوم ورګډې شي',
+'tog-watchdefault' => 'زما کتنلړ کې دې هغه مخونه او دوتنې ورګډې شي چې زه يې سموم',
+'tog-watchmoves' => 'زما کتنلړ کې دې هغه مخونه او دوتنې ورګډې شي چې زه يې لېږدوم',
+'tog-watchdeletion' => 'زما کتنلړ کې دې هغه مخونه او دوتنې ورګډې شي چې زه يې ړنګوم',
 'tog-minordefault' => 'په تلواليزه توګه ټول سمونونه واړه په نخښه کول',
 'tog-previewontop' => 'د سمون بکس نه دمخه مخکتنه ښکاره کول',
 'tog-previewonfirst' => 'په لومړي سمون کې مخکتنه ښکاره کول',
 'tog-nocache' => 'د کتنمل د مخ ياده ساتنې چار ناچارندول',
-'tog-enotifwatchlistpages' => 'کله چې زما کتنلړ کې يو مخ بدلون مومي نو ما ته دې برېښليک راشي',
+'tog-enotifwatchlistpages' => 'کله چې زما د کتنلړ په يوې دوتنې يا يو مخ کې بدلون راځي نو ما ته دې د بدلون په اړه برېښليک راشي',
 'tog-enotifusertalkpages' => 'کله چې زما د خبرو اترو په مخ کې بدلون پېښېږي نو ما ته دې يو برېښليک ولېږلی شي.',
-'tog-enotifminoredits' => 'کله چې په مخونو کې وړې سمونې کېږي نو ماته دې برېښليک ولېږل شي',
+'tog-enotifminoredits' => 'کله چې په مخونو او دوتنو کې وړې سمونې کېږي نو ماته دې د بدلون په اړه برېښليک راشي',
 'tog-enotifrevealaddr' => 'په يادښت برېښليک کې زما برېښليک پته ښکاره کول',
 'tog-shownumberswatching' => 'د کتونکو کارنانو شمېر ښکاره کول',
 'tog-oldsig' => 'اوسنی لاسليک:',
@@ -267,7 +267,7 @@ $messages = array(
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|وېشنيزه|وېشنيزې}}',
 'category_header' => 'د "$1" په وېشنيزه کې شته مخونه',
-'subcategories' => 'وړې-وېشنيزې',
+'subcategories' => 'څېرمه وېشنيزې',
 'category-media-header' => 'د "$1" په وېشنيزه کې شته رسنۍ',
 'category-empty' => "''تر اوسه پورې همدا وېشنيزه هېڅ کوم مخ يا کومه رسنيزه دوتنه نلري.''",
 'hidden-categories' => '{{PLURAL:$1|پټه وېشنيزه|پټې وېشنيزې}}',
@@ -798,6 +798,7 @@ $1',
 'edit-no-change' => 'ستاسې سمون بابېزه وګڼل شو، دا ځکه چې تاسې په متن کې کوم بدلون نه دی راوستلی.',
 'edit-already-exists' => 'په دې نوم يو نوی مخ جوړ نه شو.
 پدې نوم د پخوا نه يو مخ شته.',
+'defaultmessagetext' => 'تلوالیزه پيغام متن',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''ګواښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
@@ -891,7 +892,7 @@ $1',
 'revertmerge' => 'بېلول',
 
 # Diffs
-'history-title' => 'د "$1" Ø¯ Ù¾Û\90Ú\9aÙ\84Ù\8aÚ© Ø¨Ú¼Ù\87',
+'history-title' => 'د "$1" Ø¯ Ù\85Ø®Ù\84Ù\8aدÙ\86Û\90 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ©',
 'difference-multipage' => '(د مخونو تر مېنځ توپير)',
 'lineno' => '$1 کرښه:',
 'compareselectedversions' => 'ټاکلې بڼې سره پرتلل',
@@ -1171,7 +1172,7 @@ $1',
 'nchanges' => '$1 {{PLURAL:$1|بدلون|بدلونونه}}',
 'recentchanges' => 'وروستي بدلونونه',
 'recentchanges-legend' => 'د ورستي بدلونو خوښنې',
-'recentchanges-summary' => 'په همدې مخ باندې د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.',
+'recentchanges-summary' => 'په دې مخ د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.',
 'recentchanges-feed-description' => 'همدلته د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ او وګورۍ چې څه پېښ شوي.',
 'recentchanges-label-newpage' => 'دغه سمون يو نوی مخ جوړ کړی',
 'recentchanges-label-minor' => 'دا يوه وړه سمونه ده',
@@ -1248,6 +1249,8 @@ $1',
 'file-too-large' => 'کومه دوتنه چې تاسې دلته سپارلې ډېره لويه ده.',
 'filename-tooshort' => 'د دوتنې نوم ډېر لنډ دی',
 'filetype-banned' => 'په دې ډول دوتنې بنديز دی.',
+'illegal-filename' => 'د دوتنې نوم نه دی پرېښل شوی.',
+'unknown-error' => 'يوه ناڅرګنده تېروتنه رامېنځته شوه.',
 'tmp-create-error' => 'لنډمهاله دوتنه جوړېدای نه شي',
 'fileexists' => "د پخوا نه پدې نوم يوه دوتنه شته، که تاسو ډاډه نه ياست او يا هم که تاسو غواړۍ چې بدلون پکې راولۍ، لطفاً '''<tt>[[:$1]]</tt>''' وګورۍ.
 [[$1|thumb]]",
@@ -1279,10 +1282,11 @@ $1',
 'upload-http-error' => 'د HTTP يوه ستونزه رامېنځ ته شوې: $1',
 
 # File backend
+'backend-fail-notexists' => 'د $1 په نوم دوتنه نشته.',
 'backend-fail-delete' => 'د "$1" دوتنه ړنګه نه شوه.',
 'backend-fail-alreadyexists' => 'د $1 دوتنه له پخوا نه شته.',
 'backend-fail-read' => 'د "$1" دوتنه نه شي لوستل کېدای.',
-'backend-fail-create' => 'د "$1" دوتنه نه شي جوړېدای.',
+'backend-fail-create' => 'د "$1" په دوتنه کې نور څه و نه ليکل شول.',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'ځانګړې شوې دوتنه يوه ZIP دوتنه نه وه.',
@@ -1757,6 +1761,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 # Namespace form on various pages
 'namespace' => 'نوم-تشيال:',
 'invert' => 'ټاکنې سرچپه کول',
+'namespace_association' => 'مل نومتشيال',
 'blanknamespace' => '(آرنی)',
 
 # Contributions
@@ -1836,6 +1841,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'unblockip' => 'کارن له بنديزه وېستل',
 'ipusubmit' => 'دا بنديز ليرې کول',
 'unblocked' => 'له [[User:$1|$1]] بنديز ليري شو',
+'unblocked-range' => 'له $1 بنديز ليرې شو',
 'blocklist' => 'بنديز لګېدلي کارنان',
 'ipblocklist' => 'بنديز لګېدلي کارنان',
 'ipblocklist-legend' => 'يو بنديز شوی کارن موندل',
@@ -1879,6 +1885,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 # Developer tools
 'lockdb' => 'توکبنسټ تړل',
+'unlockdb' => 'توکبنسټ پرانيستل',
 'lockconfirm' => 'هو، زه د توکبنسټ تړل غواړم.',
 'lockbtn' => 'توکبنسټ تړل',
 'unlockbtn' => 'توکبنسټ پرانيستل',
@@ -2543,6 +2550,7 @@ $5
 'api-error-filename-tooshort' => 'د دوتنې نوم ډېر لنډ دی.',
 'api-error-filetype-banned' => 'په دې ډول دوتنې بنديز دی.',
 'api-error-illegal-filename' => 'د دوتنې نوم نه دی پرېښل شوی.',
+'api-error-unclassified' => 'يوه ناڅرګنده تېروتنه رامېنځته شوه.',
 'api-error-unknown-code' => 'ناڅرګنده تېروتنه: "$1"',
 'api-error-unknown-warning' => 'ناڅرګنده ګواښنه: "$1".',
 'api-error-unknownerror' => 'ناڅرګنده تېروتنه: "$1".',
index c93f285..296a093 100644 (file)
@@ -315,7 +315,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Esconder edições patrulhadas nas mudanças recentes',
 'tog-newpageshidepatrolled' => 'Esconder páginas patrulhadas na lista de páginas novas',
 'tog-extendwatchlist' => 'Listagem expandida de todas as mudanças às páginas vigiadas, não apenas das mais recentes',
-'tog-usenewrc' => 'Usar a versão melhorada das mudanças recentes (requer JavaScript)',
+'tog-usenewrc' => 'Agrupar alterações por página nas mudanças recentes e páginas vigiadas (requer JavaScript)',
 'tog-numberheadings' => 'Auto-numerar cabeçalhos',
 'tog-showtoolbar' => 'Mostrar barra de edição (JavaScript)',
 'tog-editondblclick' => 'Editar páginas quando houver um clique duplo (JavaScript)',
@@ -323,17 +323,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Possibilitar a edição de secções por clique com o botão direito no título da secção (JavaScript)',
 'tog-showtoc' => 'Mostrar índice (para páginas com mais de três secções)',
 'tog-rememberpassword' => 'Recordar os meus dados neste browser (no máximo, durante $1 {{PLURAL:$1|dia|dias}})',
-'tog-watchcreations' => 'Adicionar as páginas que eu criar às minhas páginas vigiadas',
-'tog-watchdefault' => 'Adicionar as páginas que eu editar às minhas páginas vigiadas',
-'tog-watchmoves' => 'Adicionar as páginas que eu mover às minhas páginas vigiadas',
-'tog-watchdeletion' => 'Adicionar as páginas que eu eliminar às minhas páginas vigiadas',
+'tog-watchcreations' => 'Adicionar as páginas e ficheiros que eu criar às minhas páginas vigiadas',
+'tog-watchdefault' => 'Adicionar as páginas e ficheiros que eu editar às minhas páginas vigiadas',
+'tog-watchmoves' => 'Adicionar as páginas e ficheiros que eu mover às minhas páginas vigiadas',
+'tog-watchdeletion' => 'Adicionar as páginas e ficheiros que eu eliminar às minhas páginas vigiadas',
 'tog-minordefault' => 'Por omissão, marcar todas as edições como menores',
 'tog-previewontop' => 'Mostrar a antevisão antes da caixa de edição',
 'tog-previewonfirst' => 'Mostrar a antevisão na primeira edição',
 'tog-nocache' => 'Desactivar a cache de páginas do browser',
-'tog-enotifwatchlistpages' => 'Notificar-me por correio electrónico quando uma página vigiada é alterada',
+'tog-enotifwatchlistpages' => 'Notificar-me por correio electrónico quando uma página ou ficheiro vigiado for alterado',
 'tog-enotifusertalkpages' => 'Notificar-me por correio electrónico quando a minha página de discussão é editada',
-'tog-enotifminoredits' => 'Notificar-me por correio electrónico também quando as edições forem menores',
+'tog-enotifminoredits' => 'Notificar-me por correio electrónico também sobre edições menores de páginas ou ficheiros',
 'tog-enotifrevealaddr' => 'Revelar o meu endereço de correio electrónico nas notificações',
 'tog-shownumberswatching' => 'Mostrar o número de utilizadores a vigiar',
 'tog-oldsig' => 'Assinatura existente:',
@@ -620,7 +620,7 @@ Isto pode também indicar um defeito no software da {{SITENAME}}.',
 'nosuchspecialpage' => 'Esta página especial não existe',
 'nospecialpagetext' => '<strong>Solicitou uma página especial inválida.</strong>
 
-Uma lista das páginas especiais válidas pode ser encontrada em [[Special:SpecialPages|{{int:specialpages}}]].',
+Encontra uma lista das páginas especiais válidas em [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
 'error' => 'Erro',
@@ -667,6 +667,8 @@ Anote a URL e reporte este incidente a um [[Special:ListUsers/sysop|administrado
 'cannotdelete' => 'Não foi possível eliminar a página ou ficheiro "$1".
 Pode já ter sido eliminado por outro utilizador.',
 'cannotdelete-title' => 'Não é possível eliminar a página "$1"',
+'delete-hook-aborted' => 'A eliminação foi cancelada por um "hook".
+Não foi dada nenhuma explicação.',
 'badtitle' => 'Título inválido',
 'badtitletext' => 'O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorrecto.
 Talvez contenha um ou mais caracteres que não podem ser usados em títulos.',
@@ -683,7 +685,7 @@ Consulta: $2',
 'actionthrottledtext' => 'Como medida anti-spam, está impedido de realizar esta operação demasiadas vezes num espaço de tempo curto e já excedeu esse limite. Tente de novo dentro de alguns minutos, por favor.',
 'protectedpagetext' => 'Esta página foi protegida contra novas edições.',
 'viewsourcetext' => 'Pode ver e copiar o conteúdo desta página:',
-'viewyourtext' => "Você pode ver e copiar o código-fonte das '''suas edições''' a esta página:",
+'viewyourtext' => "Pode ver e copiar o código-fonte das '''suas edições''' desta página:",
 'protectedinterface' => 'Esta página fornece o texto da interface ao software e está protegida para prevenir abusos.',
 'editinginterface' => "'''Aviso:''' Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afectarão a aparência da interface de utilizador para os outros utilizadores. Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projecto destinado à tradução do MediaWiki.",
 'sqlhidden' => '(Consulta SQL em segundo-plano)',
@@ -700,6 +702,8 @@ A justificação foi "\'\'$2\'\'".',
 O administrador que efetuou o bloqueio deu a seguinte explicação: "$3".',
 'invalidtitle-knownnamespace' => 'Título inválido com o espaço nominal "$2" e texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título inválido com número de espaço nominal $1 desconhecido e texto "$2"',
+'exception-nologin' => 'Não está autenticado',
+'exception-nologin-text' => 'Esta página ou operação requer que esteja autenticado nesta wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
@@ -792,7 +796,7 @@ Não serão enviados correios de nenhuma das seguintes funcionalidades.',
 'emailconfirmlink' => 'Confirme o seu endereço de correio electrónico',
 'invalidemailaddress' => 'O endereço de correio electrónico não pode ser aceite porque parece ter um formato inválido.
 Introduza um endereço formatado correctamente ou deixe o campo vazio.',
-'cannotchangeemail' => 'A conta de e-mail não pode ser alterado nesta wiki.',
+'cannotchangeemail' => 'Os endereços de correio electrónico das contas não podem ser alterados nesta wiki.',
 'emaildisabled' => 'Este site não consegue enviar e-mails.',
 'accountcreated' => 'Conta criada',
 'accountcreatedtext' => 'A conta de utilizador para $1 foi criada.',
@@ -804,7 +808,7 @@ Se a conta foi criada por engano, pode ignorar esta mensagem.',
 'usernamehasherror' => 'O nome de utilizador não pode conter o símbolo de cardinal (#).',
 'login-throttled' => 'Realizou demasiadas tentativas de autenticação com esta conta.
 Aguarde antes de tentar novamente, por favor.',
-'login-abort-generic' => 'A sua autenticação não teve êxito - Abortada',
+'login-abort-generic' => 'A sua autenticação não teve êxito - Cancelada',
 'loginlanguagelabel' => 'Língua: $1',
 'suspicious-userlogout' => 'O seu pedido para sair foi negado porque parece ter sido enviado por um browser danificado ou por um proxy com cache.',
 
@@ -822,7 +826,7 @@ Para prosseguir, será necessário definir uma nova palavra-chave.',
 'newpassword' => 'Palavra-chave nova:',
 'retypenew' => 'Repita a palavra-chave nova:',
 'resetpass_submit' => 'Definir palavra-chave e entrar',
-'resetpass_success' => 'Sua palavra-chave foi alterada com sucesso! Autenticando-se...',
+'resetpass_success' => 'A sua palavra-chave foi alterada! Autenticação em curso...',
 'resetpass_forbidden' => 'Não é possível alterar palavras-chave',
 'resetpass-no-info' => 'Precisa estar autenticado para aceder directamente a esta página.',
 'resetpass-submit-loggedin' => 'Alterar palavra-chave',
@@ -835,7 +839,7 @@ Pode ter já alterado com sucesso a sua palavra-chave ou solicitado uma nova pal
 'passwordreset' => 'Repor palavra-chave',
 'passwordreset-text' => 'Preencha este formulário para recuperar os dados da sua conta por correio electrónico.',
 'passwordreset-legend' => 'Reiniciar a palavra-chave',
-'passwordreset-disabled' => 'Reiniciar a palavra-chave foi impossibilitado nesta wiki.',
+'passwordreset-disabled' => 'O reinício da palavra-chave foi impossibilitado nesta wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Introduza um dos dados abaixo}}',
 'passwordreset-username' => 'Nome de utilizador:',
 'passwordreset-domain' => 'Domínio:',
@@ -1099,7 +1103,7 @@ Estes argumentos foram omitidos.',
 'node-count-exceeded-warning' => 'A página excedeu o total de nós',
 'expansion-depth-exceeded-category' => 'Páginas em que a profundidade de expansão é excedida',
 'expansion-depth-exceeded-warning' => 'A página excedeu a profundidade de expansão',
-'parser-unstrip-loop-warning' => 'Detectado loop unstrip',
+'parser-unstrip-loop-warning' => 'Foi detectado um ciclo infinito unstrip',
 'parser-unstrip-recursion-limit' => 'Limite de recursão do unstrip excedido ($1)',
 
 # "Undo" feature
@@ -1260,8 +1264,8 @@ Certifique-se de que esta alteração manterá a continuidade histórica da pág
 'mergehistory-from' => 'Página de origem:',
 'mergehistory-into' => 'Página de destino:',
 'mergehistory-list' => 'Histórico de edições fundíveis',
-'mergehistory-merge' => 'As seguintes revisões de [[:$1]] podem fundir-se em [[:$2]].
-Usando os botões de opção, pode escolher fundir apenas as revisões até àquela que marcar.
+'mergehistory-merge' => 'As seguintes edições de [[:$1]] podem ser fundidas em [[:$2]].
+Usando os botões de opção, pode escolher fundir apenas as edições até àquela que marcar.
 Note que, se usar os links de navegação, os botões de opção voltarão aos valores originais.',
 'mergehistory-go' => 'Mostrar edições que podem ser fundidas',
 'mergehistory-submit' => 'Fundir edições',
@@ -1285,6 +1289,8 @@ Note que, se usar os links de navegação, os botões de opção voltarão aos v
 
 # Diffs
 'history-title' => 'Histórico de edições de "$1"',
+'difference-title' => 'Diferenças entre edições de "$1"',
+'difference-title-multipage' => 'Diferenças entre as páginas "$1" e "$2"',
 'difference-multipage' => '(Diferenças entre páginas)',
 'lineno' => 'Linha $1:',
 'compareselectedversions' => 'Comparar as versões seleccionadas',
@@ -1346,7 +1352,7 @@ Note que, se usar os links de navegação, os botões de opção voltarão aos v
 'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1–$2''' de '''$3'''}} para '''$4'''",
 'nonefound' => "'''Nota''': Por omissão, só alguns dos espaços nominais são pesquisados.
 Tente usar o prefixo ''all:'' para pesquisar todo o conteúdo (incluindo páginas de discussão, predefinições, etc.), ou use como prefixo o espaço nominal desejado.",
-'search-nonefound' => 'A pesquisa não produziu quaisquer resultados.',
+'search-nonefound' => 'A pesquisa não produziu resultados.',
 'powersearch' => 'Pesquisa avançada',
 'powersearch-legend' => 'Pesquisa avançada',
 'powersearch-ns' => 'Pesquisar nos espaços nominais:',
@@ -1367,7 +1373,7 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es
 'qbsettings-fixedright' => 'Fixa à direita',
 'qbsettings-floatingleft' => 'Flutuante à esquerda',
 'qbsettings-floatingright' => 'Flutuante à direita',
-'qbsettings-directionality' => 'Fixado, a dependener da direccionalidade do script da sua língua',
+'qbsettings-directionality' => 'Fixa, conforme a direccionalidade da escrita na sua língua',
 
 # Preferences page
 'preferences' => 'Preferências',
@@ -1382,6 +1388,7 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es
 'prefs-beta' => 'Funcionalidades beta',
 'prefs-datetime' => 'Data e hora',
 'prefs-labs' => 'Funcionalidades dos laboratórios',
+'prefs-user-pages' => 'Páginas de utilizador',
 'prefs-personal' => 'Perfil de utilizador',
 'prefs-rc' => 'Mudanças recentes',
 'prefs-watchlist' => 'Páginas vigiadas',
@@ -1470,7 +1477,7 @@ Esta informação será pública.',
 'prefs-help-realname' => 'Opcional: se optar por revelar o seu nome verdadeiro, este será utilizado para atribuir-lhe crédito pelo seu trabalho.',
 'prefs-help-email' => 'Opcional: o endereço de correio electrónico é opcional, mas será necessário para reiniciar a palavra-chave caso esqueça a antiga.',
 'prefs-help-email-others' => 'Também pode optar por permitir que outros entrem em contacto consigo por correio electrónico, através de um link nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio electrónico.',
-'prefs-help-email-required' => 'O endereço de correio electrónico é requerido.',
+'prefs-help-email-required' => 'É necessário o endereço de correio electrónico.',
 'prefs-info' => 'Informações básicas',
 'prefs-i18n' => 'Internacionalização',
 'prefs-signature' => 'Assinatura',
@@ -1524,9 +1531,9 @@ Esta informação será pública.',
 
 'group-user-member' => '{{GENDER:$1|utilizador|utilizadora}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|utilizador autoconfirmado|utilizadora autoconfirmada}}',
-'group-bot-member' => 'robô',
+'group-bot-member' => '{{GENDER:$1|robô}}',
 'group-sysop-member' => '{{GENDER:$1|administrador|administradora}}',
-'group-bureaucrat-member' => 'burocrata',
+'group-bureaucrat-member' => '{{GENDER:$1|burocrata}}',
 'group-suppress-member' => '{{GENDER:$1|supressor|supressora}}',
 
 'grouppage-user' => '{{ns:project}}:Utilizadores',
@@ -1561,6 +1568,7 @@ Esta informação será pública.',
 'right-writeapi' => 'Usar a API de escrita',
 'right-delete' => 'Eliminar páginas',
 'right-bigdelete' => 'Eliminar páginas com histórico grande',
+'right-deletelogentry' => 'Eliminar e restaurar entradas específicas de registos',
 'right-deleterevision' => 'Eliminar e restaurar edições específicas de páginas',
 'right-deletedhistory' => 'Ver entradas de histórico eliminadas, sem o texto associado',
 'right-deletedtext' => 'Ver texto eliminado e mudanças entre revisões eliminadas',
@@ -1728,7 +1736,7 @@ Consulte a [[Special:NewFiles|galeria de novos ficheiros]] para visioná-los.',
 'minlength1' => 'Os nomes de ficheiros devem de ter pelo menos uma letra.',
 'illegalfilename' => 'O nome do ficheiro "$1" contém caracteres que não são permitidos no título das páginas.
 Altere o nome do ficheiro e tente enviá-lo novamente, por favor.',
-'filename-toolong' => 'Os nomes de ficheiros não podem ser superiores a 240 bytes.',
+'filename-toolong' => 'Os nomes de ficheiros não podem ter mais de 240 bytes.',
 'badfilename' => 'O nome do ficheiro foi alterado para "$1".',
 'filetype-mime-mismatch' => 'A extensão ".$1" não corresponde ao tipo MIME do ficheiro ($2).',
 'filetype-badmime' => 'Não é permitido carregar ficheiros do tipo MIME "$1".',
@@ -1856,38 +1864,40 @@ Caso o problema persista, contacte um [[Special:ListUsers/sysop|administrador]].
 'backend-fail-copy' => 'Não foi possível copiar o ficheiro $1 para $2.',
 'backend-fail-move' => 'Não é possível mover o ficheiro $1 para $2.',
 'backend-fail-opentemp' => 'Não foi possível abrir o ficheiro temporário.',
-'backend-fail-writetemp' => 'Não foi possível gravar no ficheiro temporário.',
+'backend-fail-writetemp' => 'Não foi possível escrever no ficheiro temporário.',
 'backend-fail-closetemp' => 'Não foi possível fechar o ficheiro temporário.',
 'backend-fail-read' => 'Não foi possível ler o ficheiro $1.',
-'backend-fail-create' => 'Não foi possível escrever o ficheiro $1.',
-'backend-fail-maxsize' => 'Não foi possível criar o ficheiro  $1  porque ele é maior do que  {{PLURAL:$2| um byte| $2  bytes}}.',
+'backend-fail-create' => 'Não foi possível gravar o ficheiro $1.',
+'backend-fail-maxsize' => 'Não foi possível gravar o ficheiro $1 porque tem mais do que {{PLURAL:$2|um byte|$2 bytes}}.',
 'backend-fail-readonly' => 'O servidor de armazenamento "$1" está actualmente no modo "somente leitura". A razão dada foi: "$2"',
-'backend-fail-synced' => 'O ficheiro" $1 " está em um estado inconsistente dentro da base de dados',
+'backend-fail-synced' => 'O ficheiro "$1" está num estado inconsistente nos servidores de armazenamento interno',
 'backend-fail-connect' => 'Não foi possível estabelecer ligação com o servidor de armazenamento "$1".',
 'backend-fail-internal' => 'Ocorreu um erro desconhecido no servidor de armazenamento "$1".',
-'backend-fail-contenttype' => 'Não foi possível determinar o tipo de conteúdo do ficheiro para armazenar em " $1 ".',
-'backend-fail-batchsize' => 'Foi fornecido um bloco de $1 {{PLURAL:$1|operação|operações}} sobre ficheiros ao servidor backend de armazenamento; o limite é de $2 {{PLURAL:$2|operação|operações}}.',
+'backend-fail-contenttype' => 'Não foi possível determinar o tipo de conteúdo do ficheiro para armazenar em "$1".',
+'backend-fail-batchsize' => 'Foi fornecido um bloco de $1 {{PLURAL:$1|operação|operações}} sobre ficheiros ao servidor de armazenamento; o limite é de $2 {{PLURAL:$2|operação|operações}}.',
+'backend-fail-usable' => 'Não foi possível gravar o ficheiro $1 devido a permissões insuficientes ou a directórios ou repositórios inexistentes.',
 
 # File journal errors
-'filejournal-fail-dbconnect' => 'Não foi possível ligar à base de dados de registos no "backend" de armazenamento "$1".',
-'filejournal-fail-dbquery' => 'Não foi possível atualizar a base de dados de registos do "backend" de armazenamento "$1".',
+'filejournal-fail-dbconnect' => 'Não foi possível estabelecer ligação à base de dados de registos no servidor de armazenamento "$1".',
+'filejournal-fail-dbquery' => 'Não foi possível atualizar a base de dados de registos do servidor de armazenamento "$1".',
 
 # Lock manager
-'lockmanager-notlocked' => 'Não foi possível desbloquear " $1 "; não se encontra bloqueado.',
+'lockmanager-notlocked' => 'Não foi possível desbloquear "$1" porque não se encontra bloqueado.',
 'lockmanager-fail-closelock' => 'Não foi possível encerrar a referência de bloqueio para "$1".',
 'lockmanager-fail-deletelock' => 'Não foi possível eliminar a referência de bloqueio para "$1".',
 'lockmanager-fail-acquirelock' => 'Não foi possível adquirir bloqueio para "$1".',
-'lockmanager-fail-openlock' => 'Não foi possível abrir ficheiro de bloqueio para "$1".',
-'lockmanager-fail-releaselock' => 'Não foi possível libertar bloqueio para "$1".',
+'lockmanager-fail-openlock' => 'Não foi possível abrir o ficheiro de bloqueio de "$1".',
+'lockmanager-fail-releaselock' => 'Não foi possível libertar o bloqueio de "$1".',
 'lockmanager-fail-db-bucket' => 'Não foi possível contactar bases de dados de bloqueio suficientes no "bucket" $1.',
 'lockmanager-fail-db-release' => 'Não foi possível libertar bloqueios na base de dados $1.',
+'lockmanager-fail-svr-acquire' => 'Não foi possível obter bloqueios no servidor $1.',
 'lockmanager-fail-svr-release' => 'Não foi possível libertar bloqueios no servidor $1.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Foi encontrado um erro ao abrir o ficheiro ZIP para verificação.',
 'zip-wrong-format' => 'O ficheiro especificado não é um ficheiro ZIP.',
 'zip-bad' => 'O ficheiro ZIP encontra-se corrompido ou não é legível.
-A sua segurança não pode ser devidamente verificada.',
+A segurança do mesmo não pode ser devidamente verificada.',
 'zip-unsupported' => 'Este ficheiro ZIP usa funcionalidades ZIP não suportadas pelo MediaWiki.
 A sua segurança não pode ser devidamente verificada.',
 
@@ -1906,7 +1916,7 @@ A sua segurança não pode ser devidamente verificada.',
 'img-auth-nopathinfo' => 'PATH_INFO em falta.
 O seu servidor não está configurado para passar esta informação.
 Pode ser baseado em CGI e não consegue suportar img_auth.
-Consulte a documentação em [//www.mediawiki.org/wiki/Manual:Image_Authorization Image Authorization].',
+Consulte a documentação em https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'O endereço especificado não conduz ao directório de carregamento de ficheiros configurado.',
 'img-auth-badtitle' => 'Não é possível construir um título válido a partir de "$1".',
 'img-auth-nologinnWL' => 'Não está autenticado e o ficheiro "$1" não está na lista branca.',
@@ -1945,8 +1955,8 @@ Verifique se o endereço está correcto e o site disponível, por favor.',
 'upload_source_file' => ' (um ficheiro no seu computador)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Esta página especial mostra todos os ficheiros carregados.
-Quando filtrados pelo usuário, os últimos ficheiros carregados aparecem no topo da lista.',
+'listfiles-summary' => 'Esta página especial lista todos os ficheiros carregados.
+Quando filtrada por utilizador, só lista os ficheiros cuja última versão foi carregada pelo utilizador.',
 'listfiles_search_for' => 'Pesquisar por nome de imagem:',
 'imgfile' => 'ficheiro',
 'listfiles' => 'Ficheiros',
@@ -1988,11 +1998,11 @@ Encontra-se disponível uma [[Special:WhatLinksHere/$2|lista completa]].',
 'sharedupload-desc-there' => 'Este ficheiro provém de $1 e pode ser usado por outros projectos.
 Consulte a [$2 página de descrição do ficheiro] para mais informações, por favor.',
 'sharedupload-desc-here' => 'Este ficheiro provém de $1 e pode ser usado por outros projectos.
-A descrição na [$2 página de descrição] é mostrada abaixo.',
+A descrição na [$2 página original de descrição do ficheiro] é mostrada abaixo.',
 'sharedupload-desc-edit' => 'Este ficheiro provém de $1 e pode ser utilizado por outros projetos.
-Talvez você pretenda editar a descrição na sua [$2 página de descrição de ficheiro] lá.',
+Talvez queira editar a descrição na [$2 página original de descrição do ficheiro].',
 'sharedupload-desc-create' => 'Este ficheiro provém de $1 e pode ser utilizado por outros projetos.
-Talvez você pretenda editar a descrição na sua [$2 página de descrição de ficheiro] lá.',
+Talvez queira editar a descrição na [$2 página original de descrição do ficheiro].',
 'filepage-nofile' => 'Não existe nenhum ficheiro com este nome.',
 'filepage-nofile-link' => 'Não existe nenhum ficheiro com este nome, mas pode [$1 carregá-lo].',
 'uploadnewversion-linktext' => 'Carregar uma nova versão deste ficheiro',
@@ -2027,7 +2037,7 @@ Talvez você pretenda editar a descrição na sua [$2 página de descrição de
 ** Ficheiro duplicado',
 'filedelete-edit-reasonlist' => 'Editar motivos de eliminação',
 'filedelete-maintenance' => 'Eliminação e restauro de ficheiros foram temporariamente impossibilitadas durante a manutenção.',
-'filedelete-maintenance-title' => 'Não é possível excluir o ficheiro',
+'filedelete-maintenance-title' => 'Não é possível eliminar o ficheiro',
 
 # MIME search
 'mimesearch' => 'Pesquisa MIME',
@@ -2125,7 +2135,7 @@ Agora redirecciona para [[$2]].',
 'wantedpages' => 'Páginas desejadas',
 'wantedpages-badtitle' => 'Título inválido no conjunto de resultados: $1',
 'wantedfiles' => 'Ficheiros desejados',
-'wantedfiletext-cat' => 'Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>. Adicionalmente, páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].',
+'wantedfiletext-cat' => 'Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>. Adicionalmente, as páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].',
 'wantedfiletext-nocat' => 'Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>.',
 'wantedtemplates' => 'Predefinições desejadas',
 'mostlinked' => 'Páginas com mais afluentes',
@@ -2143,7 +2153,7 @@ Agora redirecciona para [[$2]].',
 'protectedpages' => 'Páginas protegidas',
 'protectedpages-indef' => 'Apenas protecções infinitas',
 'protectedpages-cascade' => 'Apenas protecções em cascata',
-'protectedpagestext' => 'As seguintes páginas encontram-se protegidas contra edições ou movimentações',
+'protectedpagestext' => 'As seguintes páginas estão protegidas contra edição ou movimentação',
 'protectedpagesempty' => 'Neste momento, nenhuma das páginas está protegida com estes parâmetros.',
 'protectedtitles' => 'Títulos protegidos',
 'protectedtitlestext' => 'Os títulos a seguir encontram-se protegidos contra criação',
@@ -2186,6 +2196,7 @@ No entanto, outros sites na internet podem ter links para um ficheiro através d
 Pode reduzir a lista escolhendo um tipo de registo, um nome de utilizador ou um título de página. Respeite maiúsculas e minúsculas.',
 'logempty' => 'Não há dados a apresentar.',
 'log-title-wildcard' => 'Procurar títulos iniciados por este texto',
+'showhideselectedlogentries' => 'Mostrar ou ocultar as entradas seleccionadas',
 
 # Special:AllPages
 'allpages' => 'Todas as páginas',
@@ -2207,8 +2218,8 @@ Talvez contenha um ou mais caracteres que não podem ser usados nos títulos.',
 'allpages-hide-redirects' => 'Ocultar redirecionamentos',
 
 # SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => 'Você está a visualizar uma versão desta página em cache que tem uma antiguidade máxima de $1.',
-'cachedspecial-viewing-cached-ts' => 'Você está a visualizar uma versão desta página em cache que pode não refletir totalmente a situação atual.',
+'cachedspecial-viewing-cached-ttl' => 'Está a ver uma versão desta página guardada na cache há pelo menos $1.',
+'cachedspecial-viewing-cached-ts' => 'Está a ver uma versão da página guardada na cache, que pode estar desatualizada.',
 'cachedspecial-refresh-now' => 'Ver mais recente.',
 
 # Special:Categories
@@ -2275,14 +2286,14 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações
 'listgrouprights-removegroup-self-all' => 'Remover a própria conta de todos os grupos',
 
 # E-mail user
-'mailnologin' => 'Nenhum endereço de envio',
+'mailnologin' => 'Não existe endereço de envio',
 'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e possuir um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio electrónico a outros utilizadores.',
-'emailuser' => 'Enviar um e-mail ao utilizador',
-'emailpage' => 'Contactar utilizador',
+'emailuser' => 'Enviar correio electrónico a este utilizador',
+'emailpage' => 'Enviar correio electrónico ao utilizador',
 'emailpagetext' => 'Pode usar o formulário abaixo para enviar uma mensagem por correio electrónico para este utilizador.
 O endereço de correio que introduziu nas suas [[Special:Preferences|preferências]] irá aparecer no campo do remetente da mensagem "De:", para que o destinatário lhe possa responder directamente.',
 'usermailererror' => 'O sistema de correio devolveu o erro:',
-'defemailsubject' => 'E-mail do usuário "$1" da {{SITENAME}}',
+'defemailsubject' => 'Correio electrónico da {{SITENAME}}, do utilizador "$1"',
 'usermaildisabled' => 'Correio electrónico do utilizador foi desactivado',
 'usermaildisabledtext' => 'Não pode enviar correio electrónico aos outros utilizadores desta wiki',
 'noemailtitle' => 'Sem endereço de correio electrónico',
@@ -2315,8 +2326,8 @@ O endereço de correio que introduziu nas suas [[Special:Preferences|preferênci
 'watchlistfor2' => 'Para $1 $2',
 'nowatchlist' => 'A sua lista de páginas vigiadas está vazia.',
 'watchlistanontext' => 'Precisa de $1 para ver ou editar a sua lista de páginas vigiadas, por favor.',
-'watchnologin' => 'Não está autenticado',
-'watchnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] para modificar a sua lista de páginas vigiadas.',
+'watchnologin' => 'Não está autenticado(a)',
+'watchnologintext' => 'Precisa de [[Special:UserLogin|autenticar-se]] para modificar a sua lista de páginas vigiadas.',
 'addwatch' => 'Adicionar às páginas vigiadas',
 'addedwatchtext' => "A página \"[[:\$1]]\" foi adicionada à sua lista de [[Special:Watchlist|páginas vigiadas]], onde serão indicadas quaisquer
 modificações futuras desta página e da respectiva página de discussão.
@@ -2439,8 +2450,8 @@ A última edição foi de [[User:$3|$3]] ([[User talk:$3|discussão]]{{int:pipe-
 # Edit tokens
 'sessionfailure-title' => 'Erro de sessão',
 'sessionfailure' => 'Foram detectados problemas com a sua sessão;
-esta operação foi cancelada como medida de protecção contra a intercepção de sessões.
-Clique o botão "Voltar" e recarregue a página de onde veio, depois tente novamente.',
+a operação foi cancelada como medida de protecção contra a interceptação de sessões.
+Volte à página anterior, refresque-a e tente novamente.',
 
 # Protect
 'protectlogpage' => 'Registo de protecção',
@@ -2466,7 +2477,7 @@ Consulte a [[Special:ProtectedPages|lista de páginas protegidas]] para ver as p
 Esta é a configuração presente para a página '''$1''':",
 'protect-locked-dblock' => "Não é possível alterar os níveis de protecção, porque a base de dados está bloqueada.
 Esta é a configuração actual para a página '''$1''':",
-'protect-locked-access' => "A sua conta não tem permissão de alterar os níveis de protecção de uma página.
+'protect-locked-access' => "A sua conta não tem permissões para alterar os níveis de protecção de uma página.
 Esta é a configuração actual da página '''$1''':",
 'protect-cascadeon' => 'Esta página está protegida porque se encontra incluída {{PLURAL:$1|na página listada a seguir, protegida|nas páginas listadas a seguir, protegidas}} com protecção em cascata.
 Pode alterar o nível de protecção desta página, mas isso não afectará a protecção em cascata.',
@@ -2514,7 +2525,7 @@ Pode alterar o nível de protecção desta página, mas isso não afectará a pr
 'undeletepage' => 'Ver e restaurar páginas eliminadas',
 'undeletepagetitle' => "'''Seguem-se as edições eliminadas de [[:$1]]'''.",
 'viewdeletedpage' => 'Ver páginas eliminadas',
-'undeletepagetext' => '{{PLURAL:$1|A seguinte página foi eliminada|As seguintes páginas foram eliminadas}}, mas ainda {{PLURAL:$1|permanece|permanecem}} na base de dados e poderem ser restauradas. O arquivo pode ser limpo periodicamente.',
+'undeletepagetext' => '{{PLURAL:$1|A seguinte página foi eliminada|As seguintes páginas foram eliminadas}}, mas ainda {{PLURAL:$1|permanece|permanecem}} em arquivo e podem ser restauradas. O arquivo pode ser limpo periodicamente.',
 'undelete-fieldset-title' => 'Restaurar edições',
 'undeleteextrahelp' => "Para restaurar o histórico de edições completo desta página, desmarque todas as caixas de selecção e clique '''''{{int:undeletebtn}}'''''.
 Para efectuar uma restauração selectiva, marque as caixas correspondentes às edições que pretende restaurar e clique '''''{{int:undeletebtn}}'''''.",
@@ -2570,7 +2581,7 @@ $1',
 # Contributions
 'contributions' => 'Contribuições do utilizador',
 'contributions-title' => 'Contribuições {{GENDER:$1|do utilizador|da utilizadora}} $1',
-'mycontris' => 'Minhas contribuições',
+'mycontris' => 'Contribuições',
 'contribsub2' => 'Para $1 ($2)',
 'nocontribs' => 'Não foram encontradas alterações com este critério.',
 'uctop' => ' (edição actual)',
@@ -2586,10 +2597,10 @@ $1',
 'sp-contributions-logs' => 'registos',
 'sp-contributions-talk' => 'discussão',
 'sp-contributions-userrights' => 'gestão de privilégios de utilizador',
-'sp-contributions-blocked-notice' => 'Este utilizador encontra-se actualmente bloqueado.
-Para referência, o último registo de bloqueio é apresentado abaixo:',
+'sp-contributions-blocked-notice' => 'Este utilizador está bloqueado neste momento.
+Para referência é apresentado abaixo o último registo de bloqueio:',
 'sp-contributions-blocked-notice-anon' => 'Este endereço IP está bloqueado neste momento.
-Para sua referência, encontra abaixo a entrada mais recente no registo de bloqueios:',
+Para referência é apresentado abaixo o último registo de bloqueio:',
 'sp-contributions-search' => 'Pesquisar contribuições',
 'sp-contributions-username' => 'Endereço IP ou utilizador:',
 'sp-contributions-toponly' => 'Mostrar somente as revisões mais recentes',
@@ -2833,7 +2844,7 @@ Faça a fusão manual das páginas de discussão, por favor.'''",
 A página de destino ("[[:$1]]") já existe. Deseja eliminá-la de modo a poder mover?',
 'delete_and_move_confirm' => 'Sim, eliminar a página',
 'delete_and_move_reason' => 'Eliminada para poder mover "[[$1]]" para este título',
-'selfmove' => 'O título de origem e de destinato são os mesmos;
+'selfmove' => 'Os títulos de origem e destino são iguais;
 não é possível mover uma página para ela mesma.',
 'immobile-source-namespace' => 'Não é possível mover páginas no espaço nominal "$1"',
 'immobile-target-namespace' => 'Não é possível mover páginas para o espaço nominal "$1"',
@@ -2899,8 +2910,8 @@ Se deseja colaborar na localização genérica do MediaWiki, visite [//www.media
 'thumbnail_error' => 'Erro ao criar miniatura: $1',
 'djvu_page_error' => 'página DjVu inacessível',
 'djvu_no_xml' => 'Não foi possível aceder ao XML para o ficheiro DjVU',
-'thumbnail-temp-create' => 'Não foi possível criar ficheiro temporário de miniatura',
-'thumbnail-dest-create' => 'Não é possível salvar miniatura',
+'thumbnail-temp-create' => 'Não foi possível criar o ficheiro temporário da miniatura',
+'thumbnail-dest-create' => 'Não é possível gravar a miniatura no destino',
 'thumbnail_invalid_params' => 'Parâmetros de miniatura inválidos',
 'thumbnail_dest_directory' => 'Não foi possível criar o directório de destino',
 'thumbnail_image-type' => 'Tipo de imagem não suportado',
@@ -3091,8 +3102,9 @@ Permite colocar uma justificação no resumo da edição.',
 Este bloqueio foi provavelmente causado por um link para um site externo que consta da lista negra.",
 'spamprotectionmatch' => 'O seguinte texto activou o filtro de spam: $1',
 'spambot_username' => 'MediaWiki limpeza de spam',
-'spam_reverting' => 'Revertendo para a última revisão que não contém links para $1',
-'spam_blanking' => 'Todas as revisões continham links para $1, limpando',
+'spam_reverting' => 'A reverter para a última revisão que não contém links para $1',
+'spam_blanking' => 'Todas as revisões continham links para $1; a esvaziar',
+'spam_deleting' => 'Todas as revisões continham links para $1; a eliminar',
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
@@ -3761,7 +3773,8 @@ Também pode [[Special:EditWatchlist/raw|editar a lista de páginas vigiadas em
 'watchlistedit-raw-title' => 'Editar a lista de páginas vigiadas em forma de texto',
 'watchlistedit-raw-legend' => 'Editar a lista de páginas vigiadas em forma de texto',
 'watchlistedit-raw-explain' => 'A lista de páginas vigiadas é apresentada abaixo.
-Pode adicionar novas linhas ou remover linhas para aumentar ou reduzir a lista, desde que mantenha uma única página por linha.
+Pode adicionar ou remover linhas, para aumentar ou reduzir a lista.
+Liste uma só página por linha.
 Quando terminar, clique "{{int:Watchlistedit-raw-submit}}".
 Também pode [[Special:EditWatchlist|editar a lista da maneira convencional]].',
 'watchlistedit-raw-titles' => 'Páginas:',
@@ -3891,7 +3904,7 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 
 # Database error messages
 'dberr-header' => 'Esta wiki tem um problema',
-'dberr-problems' => 'Desculpe! Este site está a experienciar dificuldades técnicas.',
+'dberr-problems' => 'Desculpe! Este site está com dificuldades técnicas.',
 'dberr-again' => 'Experimente esperar uns minutos e actualizar.',
 'dberr-info' => '(Não foi possível contactar o servidor da base de dados: $1)',
 'dberr-usegoogle' => 'Pode tentar pesquisar no Google entretanto.',
@@ -3943,11 +3956,11 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'logentry-newusers-newusers' => '$1 criou uma conta de utilizador',
 'logentry-newusers-create' => '$1 criou uma conta de utilizador',
 'logentry-newusers-create2' => '$1 criou uma conta de utilizador $3',
-'logentry-newusers-autocreate' => 'A conta $1 foi criada automaticalmente',
+'logentry-newusers-autocreate' => 'A conta $1 foi criada automaticamente',
 'newuserlog-byemail' => 'palavra-chave enviada por correio-electrónico',
 
 # Feedback
-'feedback-bugornote' => 'Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 denuncie um defeito].
+'feedback-bugornote' => 'Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].
 Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário será adicionado à página "[$3 $2]", junto com o seu nome de utilizador e o navegador que está a usar.',
 'feedback-subject' => 'Assunto:',
 'feedback-message' => 'Mensagem:',
@@ -3960,7 +3973,7 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'feedback-thanks' => 'Obrigado! O seu comentário foi adicionado à página "[ $2  $1 ]".',
 'feedback-close' => 'Feito',
 'feedback-bugcheck' => 'Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].',
-'feedback-bugnew' => 'Eu verifiquei. Denunciar um novo defeito.',
+'feedback-bugnew' => 'Eu verifiquei. Comunicar um novo defeito.',
 
 # API errors
 'api-error-badaccess-groups' => 'Não tem permissão para enviar ficheiros para esta wiki.',
@@ -3973,11 +3986,13 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'api-error-empty-file' => 'O ficheiro que enviou está vazio.',
 'api-error-emptypage' => 'Não é permitido criar páginas novas vazias.',
 'api-error-fetchfileerror' => 'Erro interno: Ocorreu um problema indeterminado ao aceder ao ficheiro.',
+'api-error-fileexists-forbidden' => 'Já existe um ficheiro com o nome "$1" e não pode ser substituído.',
+'api-error-fileexists-shared-forbidden' => 'Já existe um ficheiro com o nome "$1" no repositório de ficheiros partilhados e não pode ser substituído.',
 'api-error-file-too-large' => 'O ficheiro que enviou era demasiado grande.',
 'api-error-filename-tooshort' => 'O nome do ficheiro é demasiado curto.',
 'api-error-filetype-banned' => 'Este tipo de ficheiro é proibido.',
 'api-error-filetype-missing' => 'Falta a extensão do ficheiro.',
-'api-error-hookaborted' => 'A modificação que tentou fazer foi abortada pelo hook de uma extensão.',
+'api-error-hookaborted' => 'A modificação que tentou fazer foi cancelada por uma extensão.',
 'api-error-http' => 'Erro interno: Ocorreu um problema na ligação ao servidor.',
 'api-error-illegal-filename' => 'Este nome de ficheiro não é permitido.',
 'api-error-internal-error' => 'Erro interno: Ocorreu um erro indeterminado na wiki ao processar o ficheiro que enviou.',
@@ -3987,7 +4002,7 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'api-error-mustbeloggedin' => 'Tem de estar autenticado para enviar ficheiros.',
 'api-error-mustbeposted' => 'Erro interno: O pedido necessita do HTTP POST.',
 'api-error-noimageinfo' => 'O envio correu bem, mas o servidor não forneceu nenhuma informação sobre o ficheiro.',
-'api-error-nomodule' => 'Erro interno: Não está definido nenhum módulo para recebimento de ficheiros.',
+'api-error-nomodule' => 'Erro interno: Não está definido nenhum módulo para upload de ficheiros.',
 'api-error-ok-but-empty' => 'Erro interno: o servidor não respondeu.',
 'api-error-overwrite' => 'Não é permitido sobrescrever um ficheiro existente.',
 'api-error-stashfailed' => 'Erro interno: O servidor não conseguiu armazenar o ficheiro temporário.',
index 55fe778..b134a57 100644 (file)
@@ -12,6 +12,7 @@
  * @author Ahonc
  * @author Aleator
  * @author AlexSm
+ * @author Amahoney
  * @author Amire80
  * @author AnakngAraw
  * @author Ans
@@ -744,6 +745,7 @@ It is also used on the top of the page for logged out users, where it appears ne
 'gotaccountlink' => 'Text of the link to the log in form. Before that link, the message [[MediaWiki:Gotaccount/{{SUBPAGENAME}}]] appears.
 
 {{Identical|Log in}}',
+'userlogin-resetlink' => 'Used on the login page.',
 'createaccountmail' => 'Button text for creating a new account and sending the new password to the specified e-mail address directly, as used on [[Special:UserLogin/signup]] if creating accounts by e-mail is allowed.',
 'createaccountreason' => '{{Identical|Reason}}',
 'createaccounterror' => 'Parameters:
@@ -836,7 +838,10 @@ Used on [[Special:ResetPass]]',
 {{Identical|Reset password}}',
 'passwordreset-text' => 'Text on [[Special:PasswordReset]]',
 'passwordreset-legend' => '{{Identical|Reset password}}',
-'passwordreset-pretext' => 'Parameters:
+'passwordreset-pretext' => 'These instructions are shown on the password reset dialogue, which can, in principle, take the user\'s email address as well as, or instead of, their username. This text displays above one or more fields, at least one of which needs to be completed, and the message does not know which routes are available, so it needs to refer to some vague noun rather than specifically "username". 
+"One of the pieces of data" means "an info"/"a datum" (probably to be translatea with a singular noun in your language if available).
+
+Parameters:
 * $1 is the number of password reset routes. This is never 1, but always two or more. Thus, the first plural option is empty in English.',
 'passwordreset-username' => '{{Identical|Username}}',
 'passwordreset-domain' => 'A domain like used in Domain Name System (DNS) or more specifically like a domain component in the Lightweight Directory Access Protocol (LDAP)',
@@ -1020,7 +1025,7 @@ This text will be shown below upload forms. It will default to the contents of e
 'sectioneditnotsupported-title' => 'Page title of special page, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [http://meta.wikimedia.org/wiki/Help:Section_editing#Section_editing meta].',
 'sectioneditnotsupported-text' => 'I think this is the text of an error message, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [http://meta.wikimedia.org/wiki/Help:Section_editing#Section_editing meta].',
 'permissionserrorstext-withaction' => '* $1 is the number of reasons that were found why the action cannot be performed.
-* $2 is one of the action-* messages (for example {{msg|action-edit}}).
+* $2 is one of the action-* messages (for example {{msg|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation.
 
 Please report at [[Support]] if you are unable to properly translate this message. Also see [[bugzilla:14246]]',
 'recreate-moveddeleted-warn' => 'Warning shown when creating a page which has already been deleted. See for example [[Test]].',
@@ -1054,11 +1059,16 @@ When templates are expanded, there is a size limit for the number of bytes yield
 * <tt>$2</tt> is the value of the max depth limit',
 'parser-unstrip-loop-warning' => 'This error is shown when a parser extension tag such as &lt;pre> includes a reference to itself in its own output.
 The reference must be to the exact same invocation of the tag at the same location in the source, merely writing &lt;pre>&lt;pre>&lt;/pre>&lt;/pre> will not do it.
-This is usually impossible and unlikely to happen by accident, so translation is not essential.',
+This is usually impossible and unlikely to happen by accident, so translation is not essential.
+"Unstrip" refers to the internal function of the parser, called \'unstrip\', which recursively puts the output of parser functions in the place of the parser function call and which would enter an infinite loop in the situation above. See also:
+*{{msg-mw|Parser-unstrip-recursion-limit}}',
 'parser-unstrip-recursion-limit' => 'This message is shown when the recursion limit for nested parser extension tags is exceeded.
 This warning may be encountered due to input text like &lt;ref>&lt;ref>&lt;ref>...&lt;/ref>&lt;/ref>&lt;/ref>.
 
-* <tt>$1</tt> is the depth limit',
+* <tt>$1</tt> is the depth limit
+
+"Unstrip" refers to the internal function of the parser, called \'unstrip\', which recursively puts the output of parser functions in the place of the parser function call and which would enter an infinite loop in the situation above. See also:
+*{{msg-mw|Parser-unstrip-loop-warning}}',
 
 # "Undo" feature
 'undo-success' => 'Text on special page to confirm edit revert. You arrive on this page by clicking on the "undo" link on a revision history special page.
@@ -1123,6 +1133,8 @@ Used in History and [[Special:Contributions]].',
 * '''$4''' - time.",
 
 # Revision deletion
+'rev-deleted-comment' => 'Apparently this can also be about the reason of a log action, not only an edit summary. See also:
+*{{msg-mw|revdelete-hide-comment}}',
 'rev-deleted-user-contribs' => 'Part of revision deletion.',
 'rev-deleted-text-unhide' => 'This message is very similar to {{msg-mw|rev-suppressed-unhide-diff}}. Parameters:
 * $1 is a HTML link to the diff',
@@ -1820,10 +1832,10 @@ Similar to {{msg-mw|wlnote}} which is used on [[Special:Watchlist]].
  Example: "\'\'{{int:rcnote/en|50|7||24 January 2008|14:48}}\'\'"',
 'rcnotefrom' => 'This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time. The corrosponding message is {{msg-mw|Rclistfrom}} (without split of date and time, [[bugzilla:19104|Bug 19104]]).
 
-Parameter $1 is the maximum number of changes that are displayed.
-Parameter $2 is a date and time.
-Parameter $3 is a date.
-Parameter $4 is a time.',
+Parameter $1 is the maximum number of changes that are displayed.
+* Parameter $2 is a date and time. (alternative to $3 and $4)
+* Parameter $3 is a date. (alternative to $1)
+* Parameter $4 is a time. (alternative to $1)',
 'rclistfrom' => 'Used on [[Special:RecentChanges]]. Parameter $1 is a link to the revision of a specific date and time. The date and the time are the link description (without split of date and time, [[bugzilla:19104|Bug 19104]]). The corrosponding message is {{msg-mw|Rcnotefrom}}.',
 'rcshowhideminor' => "Option text in [[Special:RecentChanges]]. Parameters:
 * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
@@ -2686,6 +2698,11 @@ $1 is the <b>approximate</b> number of revisions that the page has, the message
 'rollback_short' => '{{Identical|Rollback}}',
 'rollbacklink' => '{{Identical|Rollback}}
 This message has a tooltip {{msg-mw|tooltip-rollback}}',
+'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.
+* $1: the number of edits that will be rollbacked. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.',
+'rollbacklinkcount-morethan' => 'Text of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.
+
+When the number of edits rolled back is smaller than [[mw:Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.',
 'rollbackfailed' => '{{Identical|Rollback}}',
 'cantrollback' => '{{Identical|Revert}}
 {{Identical|Rollback}}',
index 20daf46..97728b3 100644 (file)
@@ -1541,6 +1541,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'right-writeapi' => 'Utilizează API la scriere',
 'right-delete' => 'Şterge pagini',
 'right-bigdelete' => 'Şterge pagini cu istoric lung',
+'right-deletelogentry' => 'Șterge și recuperează intrări specifice din jurnale',
 'right-deleterevision' => 'Șterge și recuperează versiuni specifice ale paginilor',
 'right-deletedhistory' => 'Vezi intrările șterse din istoric, fără textul asociat',
 'right-deletedtext' => 'Vizualizați textul șters și modificările dintre versiunile șterse',
@@ -1625,7 +1626,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'nchanges' => '$1 {{PLURAL:$1|modificare|modificări|de modificări}}',
 'recentchanges' => 'Schimbări recente',
 'recentchanges-legend' => 'Opțiuni schimbări recente',
-'recentchanges-summary' => 'Schimbări recente ... (Log)',
+'recentchanges-summary' => 'Urmăriți cele mai recente modificări din wiki pe această pagină.',
 'recentchanges-feed-description' => 'Urmărește cele mai recente schimbări folosind acest flux.',
 'recentchanges-label-newpage' => 'Această modificare a creat o pagină nouă',
 'recentchanges-label-minor' => 'Aceasta este o modificare minoră',
index 2f1dee6..2672c4a 100644 (file)
@@ -395,11 +395,11 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Подчёркивать ссылки:',
 'tog-justify' => 'Выравнивать текст по ширине страницы',
-'tog-hideminor' => 'СкÑ\80Ñ\8bваÑ\82Ñ\8c Ð¼Ð°Ð»Ñ\8bе Ð¿Ñ\80авки Ð² Ñ\81пиÑ\81ке Ñ\81вежиÑ\85 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹',
+'tog-hideminor' => 'СкÑ\80Ñ\8bваÑ\82Ñ\8c Ð¼Ð°Ð»Ñ\8bе Ð¿Ñ\80авки Ð² Ñ\81пиÑ\81ке Ñ\81вежиÑ\85 Ð¿Ñ\80авок',
 'tog-hidepatrolled' => 'Скрывать патрулированные правки в списке свежих правок',
 'tog-newpageshidepatrolled' => 'Скрывать отпатрулированные страницы в списке новых страниц',
 'tog-extendwatchlist' => 'Расширенный список наблюдения, включающий все изменения, а не только последние',
-'tog-usenewrc' => 'Ð\93Ñ\80Ñ\83ппиÑ\80оваÑ\82Ñ\8c Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\81вежиÑ\85 Ð¿Ñ\80авок Ð¸ Ð² Ñ\81пиÑ\81ке Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f (Ñ\82Ñ\80ебÑ\83еÑ\82Ñ\81Ñ\8f JavaScript)',
+'tog-usenewrc' => 'Ð\93Ñ\80Ñ\83ппиÑ\80оваÑ\82Ñ\8c Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ð² Ñ\81вежиÑ\85 Ð¿Ñ\80авкаÑ\85 Ð¸ Ñ\81пиÑ\81ке Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f (JavaScript)',
 'tog-numberheadings' => 'Автоматически нумеровать заголовки',
 'tog-showtoolbar' => 'Показывать верхнюю панель инструментов при редактировании (JavaScript)',
 'tog-editondblclick' => 'Править страницы по двойному щелчку (JavaScript)',
@@ -1102,7 +1102,7 @@ $2
 Подобные проблемы могут возникать при использовании анонимизирующих веб-прокси, содержащих ошибки.'''",
 'edit_form_incomplete' => "'''Некоторые части формы редактирования не достигли сервера. Внимательно проверьте, что ваши правки не повреждены, и попробуйте ещё раз.'''",
 'editing' => 'Редактирование $1',
-'creating' => 'Создание $1',
+'creating' => 'Создание страницы «$1»',
 'editingsection' => 'Редактирование: $1 (раздел)',
 'editingcomment' => 'Редактирование $1 (новый раздел)',
 'editconflict' => 'Конфликт редактирования: $1',
@@ -1643,6 +1643,7 @@ $1",
 'right-writeapi' => 'использование API для записи',
 'right-delete' => 'удаление страниц',
 'right-bigdelete' => 'удаление страниц с длинными историями изменений',
+'right-deletelogentry' => 'удаление и восстановление конкретных записей журнала.',
 'right-deleterevision' => 'удаление и восстановление конкретных версий страниц',
 'right-deletedhistory' => 'просмотр истории удалённых страниц без доступа к удалённому тексту',
 'right-deletedtext' => 'просмотр удалённого текста и изменений между удалёнными версиями страниц',
@@ -1955,6 +1956,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Не удалось разблокировать "$1".',
 'lockmanager-fail-db-bucket' => 'Не удалось связаться с достаточным количеством баз блокировок в сегменте $1.',
 'lockmanager-fail-db-release' => 'Не удалось снять блокировку базы данных  $1 .',
+'lockmanager-fail-svr-acquire' => 'Не удалось получить блокировку на сервере  $1.',
 'lockmanager-fail-svr-release' => 'Не удалось снять блокировки на сервере $1 .',
 
 # ZipDirectoryReader
@@ -2499,6 +2501,8 @@ $UNWATCHURL
 'rollback' => 'Откатить изменения',
 'rollback_short' => 'Откат',
 'rollbacklink' => 'откатить',
+'rollbacklinkcount' => 'откатить $1 {{PLURAL:$1|правку|правки|правок}}',
+'rollbacklinkcount-morethan' => 'откатить больше, чем $1 {{PLURAL:$1|правку|правки|правок}}',
 'rollbackfailed' => 'Ошибка при совершении отката',
 'cantrollback' => 'Невозможно откатить изменения. Последний, кто вносил изменения, является единственным автором этой страницы.',
 'alreadyrolled' => 'Невозможно откатить последние изменения страницы «[[:$1]]», совершённые [[User:$2|$2]] ([[User talk:$2|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]),
@@ -2775,7 +2779,7 @@ $1',
 Ниже приведён журнал блокировок:',
 'blocklog-showsuppresslog' => '{{GENDER:$1|Этот участник уже заблокирован и скрыт|Эта участница уже заблокирована и скрыта}}. Журнал сокрытий приведён ниже:',
 'blocklogentry' => 'заблокировал [[$1]] на период $2 $3',
-'reblock-logentry' => 'изменил Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки Ð´Ð»Ñ\8f [[$1]], Ð¸Ñ\81Ñ\82екаеÑ\82 $2 $3',
+'reblock-logentry' => 'изменил Ð±Ð»Ð¾ÐºÐ¸Ñ\80овкÑ\83 [[$1]] Ð½Ð° Ð¿ÐµÑ\80иод $2 $3',
 'blocklogtext' => 'Журнал блокировок и разблокировок участников. Автоматически блокируемые IP-адреса здесь не указываются. См. [[Special:BlockList|список текущих блокировок]].',
 'unblocklogentry' => 'разблокировал $1',
 'block-log-flags-anononly' => 'только анонимные пользователи',
@@ -4174,6 +4178,4 @@ MediaWiki распространяется в надежде, что она бу
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Не удалось получить блокировку на сервере  $1.',
 );
index 2831ac9..6d2b654 100644 (file)
@@ -51,7 +51,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Сховати патролёваны едітованя в списку послїднїх змін',
 'tog-newpageshidepatrolled' => 'Сховати патролёваны сторінкы зо списку новых сторінок',
 'tog-extendwatchlist' => 'Росшыреный список слїдованых сторінок, обсягує вшыткы зміны, не лем послїднї',
-'tog-usenewrc' => 'ХоÑ\81новаÑ\82и Ð·Ð´Ð¾ÐºÐ¾Ð½Ð°Ð»ÐµÐ½Ñ\8b Ð¿Ð¾Ñ\81лÑ\97днÑ\97 Ð·Ð¼Ñ\96нÑ\8b (JavaScript)',
+'tog-usenewrc' => 'Ð\92 Ð¿Ð¾Ñ\81лÑ\97днÑ\97Ñ\85 Ð·Ð¼Ñ\96наÑ\85 Ñ\96 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85 Ð·Ò\91Ñ\80Ñ\83поваÑ\82и Ð·Ð¼Ñ\96нÑ\8b Ð¿Ð¾ Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85 (JavaScript)',
 'tog-numberheadings' => 'Автоматічно чісловати надписы',
 'tog-showtoolbar' => 'Вказати панел інштрументів (потрібный JavaScript)',
 'tog-editondblclick' => 'Едітовати двоїтым кликом (JavaScript)',
@@ -59,17 +59,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Поволити едітованя секції сторінкы через кликаня правов клапков мышкы на надписы сторінок  (JavaScript)',
 'tog-showtoc' => 'Вказовати обсяг (на сторінках з веце як трёма надписами)',
 'tog-rememberpassword' => 'Запамятати моє приголошіня на тім переглядачу (максімално $1 {{PLURAL:$1|день|днів}})',
-'tog-watchcreations' => 'Придавати сторінкы створены мнов  до мого списку слїдованых',
-'tog-watchdefault' => 'Придавати мнов едітованы сторінкы до списку слїдованых',
-'tog-watchmoves' => 'Придавати переменованы сторінкы до мого списку слїдованых',
-'tog-watchdeletion' => 'Придавати сторінкы котры змажу, міджі слїдованы',
+'tog-watchcreations' => 'Придавати сторінкы створены мнов тай файлы мнов награваны до мого списку слїдованых',
+'tog-watchdefault' => 'Придавати мнов едітованы сторінкы і файлы до списку слїдованых',
+'tog-watchmoves' => 'Придавати переменованы сторінкы і файлы до мого списку слїдованых',
+'tog-watchdeletion' => 'Придавати сторінкы і файлы, котры змажу, міджі слїдованы',
 'tog-minordefault' => 'Імпліцітно позначіти вшыткы зміны як малы',
 'tog-previewontop' => 'Вказовати нагляд перед окном едітованя  (не за ним)',
 'tog-previewonfirst' => 'Вказати нагляд при першій едітації',
 'tog-nocache' => 'Выпнути кешованя сторінок бровсером',
-'tog-enotifwatchlistpages' => 'Послати електронічну пошту, кідь ся змінила сторінка з мого списку слїдованя',
+'tog-enotifwatchlistpages' => 'Ð\9fоÑ\81лаÑ\82и ÐµÐ»ÐµÐºÑ\82Ñ\80онÑ\96Ñ\87нÑ\83 Ð¿Ð¾Ñ\88Ñ\82Ñ\83, ÐºÑ\96дÑ\8c Ñ\81Ñ\8f Ð·Ð¼Ñ\96нила Ñ\81Ñ\82оÑ\80Ñ\96нка Ð°Ð±Ð¾ Ñ\84айл Ð· Ð¼Ð¾Ð³Ð¾ Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8f',
 'tog-enotifusertalkpages' => 'Послати електронічну пошту при змінї моёй діскузной сторінкы',
-'tog-enotifminoredits' => 'Послати електронічну пошту і про меншы едітованя',
+'tog-enotifminoredits' => 'Послати електронічну пошту і про меншы едітованя сторінок і файлів',
 'tog-enotifrevealaddr' => 'Прозрадити мою поштову адресу в поштї  увідомлїня',
 'tog-shownumberswatching' => 'Вказати кілько хоснователїв придало сторінку до свого списку слїдованых',
 'tog-oldsig' => 'Екзістуючій підпис:',
@@ -292,8 +292,8 @@ $1',
 'policy-url' => 'Project:Правила',
 'portal' => 'Портал комуніты',
 'portal-url' => 'Project:Портал комуніты',
-'privacy' => 'Політіка охраны особных дат',
-'privacypage' => 'Project:Охрана особных дат',
+'privacy' => 'Політіка охороны особных дат',
+'privacypage' => 'Project:Охорона особных дат',
 
 'badaccess' => 'Хыба оправнїня',
 'badaccess-group0' => 'Вам не є поволено выконавати тоту дїю.',
@@ -329,7 +329,7 @@ $1',
 'site-atom-feed' => '$1 Atom канал',
 'page-rss-feed' => '"$1" RSS канал',
 'page-atom-feed' => '"$1" Atom канал',
-'red-link-title' => '$1 (Ñ\82ака Ñ\81Ñ\82оÑ\80Ñ\96нка Ð½Ðµ ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83є)',
+'red-link-title' => '$1 (Ñ\82акой Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b Ð½Ðµ є)',
 'sort-descending' => 'Сортовати зоступно',
 'sort-ascending' => 'Сортовати взоступно',
 
@@ -400,6 +400,7 @@ $1',
 'cannotdelete' => 'Не є можне вымазати сторінку або файл "$1".
 Може уж быв(а)  змазаный(а) дакым іншым.',
 'cannotdelete-title' => 'Не годен змазати сторінку "$1"',
+'delete-hook-aborted' => 'Едітованя было сторноване процедуров пунктом припоёваня без близшого пояснїня.',
 'badtitle' => 'Неприпустна назва',
 'badtitletext' => 'Пожадована назва сторінкы неправилна, порожня, або неправилно одказована як міджі-язычного ці міджі-вікі назва.
 Може ся хоснують сімболы, котры не можуть быти хоснованы в назвах.',
@@ -431,6 +432,8 @@ $2',
 Адміністратор сервера, котрый архів заблоковав, додав тото пояснїня: „''$3''“.",
 'invalidtitle-knownnamespace' => 'Непряавилна назва в просторї назв „$2“ і текстом „$3“',
 'invalidtitle-unknownnamespace' => 'Неправилна назва з незнамым чіслом простору назв $1 і текстом „$2“',
+'exception-nologin' => 'Не сьте приголошеный(а)',
+'exception-nologin-text' => 'Гевся сторінка або дїя потребує, жебы сьте были на тотїй вікі приголошены.',
 
 # Virus scanner
 'virus-badscanner' => "Зла конфіґурація: незнамый антивіровый проґрам: ''$1''",
@@ -453,7 +456,7 @@ $2',
 'externaldberror' => 'Або ся стала хыба екстерной автентіфікачной датабазы, або не маєте поволено мінити своє екстерне конто.',
 'login' => 'Приголошіня',
 'nav-login-createaccount' => 'Приголошіня / створїня конта',
-'loginprompt' => 'Ку приголошіню до {{grammar:2sg|{{SITENAME}}}} мусите мати поволены cookies.',
+'loginprompt' => 'К приголошіню до {{grammar:2sg|{{SITENAME}}}} мусите мати актівованы cookies.',
 'userlogin' => 'Приголошіня / створїня конта',
 'userloginnocreate' => 'Приголошіня',
 'logout' => 'Одголосити',
@@ -1262,6 +1265,8 @@ $1",
 'right-writeapi' => 'Хосновати API про писаня',
 'right-delete' => 'Змазаня сторінок',
 'right-bigdelete' => 'Мазаня сторінок з довгов історіёв',
+'right-deletelogentry' => 'Мазаня тай обновлїня окремых записів лоґів
+,',
 'right-deleterevision' => 'Мазаня і обновованя конкретных ревізій сторінок',
 'right-deletedhistory' => 'Зображованя змазаных положок в історії без одповідаючого тексту',
 'right-deletedtext' => 'перегляд змазаного тексту і роздїлів міджі змазаныма верзіами',
@@ -1537,6 +1542,7 @@ $1',
 'backend-fail-synced' => 'Файл "$1" в кінцёвій уложній сістемі в неконзістентнім стані',
 'backend-fail-connect' => 'Не вдало ся припоїти до кінцёвой уложной сістемы „$1“.',
 'backend-fail-internal' => 'В кінцёвій уложній сістемі „$1“ дішло к незнаній хыбі.',
+'backend-fail-contenttype' => 'Не годно было становити тіп обсягу файлу, жебы уложыти го до „$1“.',
 'backend-fail-usable' => 'Не вдало ся записати до файлу $1  про недостаточны права або хыбуючі адресарї/контайнеры.',
 
 # ZipDirectoryReader
@@ -1628,7 +1634,7 @@ $1',
 'filehist-filesize' => 'Розмір файлу',
 'filehist-comment' => 'Коментарь',
 'filehist-missing' => 'Файл хыбіть',
-'imagelinks' => 'Ð\92Ñ\8bÑ\83жÑ\8bÑ\82я файлу',
+'imagelinks' => 'ХоÑ\81нованя файлу',
 'linkstoimage' => '{{PLURAL:$1|Далша сторінка ся одказує|Далшы сторінкы ся одказують}} на тот файл:',
 'linkstoimage-more' => 'На тот файл {{PLURAL:$1|одказує веце сторінок|одказує веце як $1 сторінок|одказує веце як $1 сторінок}}.
 Наслїдуючій список зображує лем {{PLURAL:$1|тоту першу|першы $1|першых $1}}.
@@ -2035,7 +2041,7 @@ $UNWATCHURL
 'confirmdeletetext' => 'Рыхтуєте ся вымазати сторінку і вшыткы єй лоґы едітовань.
 Просиме Вас, підтвердьте, же справды тото хочете зробити, повно розумієте наслїдкы і же робите тото в одповідности з [[{{MediaWiki:Policy-url}}|правилами]].',
 'actioncomplete' => 'Дїя выконана',
-'actionfailed' => 'Ð\9eпеÑ\80аÑ\86Ñ\96Ñ\8f Ñ\81Ñ\8f Ð½Ðµ Ð¿Ð¾Ð´Ð°Ñ\80ила',
+'actionfailed' => 'Ð\9eпеÑ\80аÑ\86Ñ\96Ñ\8f Ñ\81Ñ\8f Ð½Ðµ Ð²Ð´Ð°ла',
 'deletedtext' => '"$1" было змазане.
 Смоть $2 про список послїднїх змазань.',
 'dellogpage' => 'Лоґ вымазаня',
@@ -2599,7 +2605,7 @@ $1',
 'tooltip-pt-anonlogin' => 'Рекомендуєме ся приголосити, але не є то повинне.',
 'tooltip-pt-logout' => 'Одголошіня',
 'tooltip-ca-talk' => 'Діскузія о обсягу сторінкы',
-'tooltip-ca-edit' => 'ТоÑ\82Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð¼Ð¾Ð¶Ð½Ð¾ едітовати. Просиме, хоснуйте перегляд перед уложінём.',
+'tooltip-ca-edit' => 'ТоÑ\82Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð¼Ð¾Ð¶ÐµÑ\82е едітовати. Просиме, хоснуйте перегляд перед уложінём.',
 'tooltip-ca-addsection' => 'Створити нову секцію',
 'tooltip-ca-viewsource' => 'Тота сторінка є замкнута.
 Можете відїти єй код.',
@@ -2651,7 +2657,7 @@ $1',
 'tooltip-recreate' => 'Обновити сторінку і кідь была змазана',
 'tooltip-upload' => 'Почати одосыланя',
 'tooltip-rollback' => 'Єдным кликом вернути зміны, зроблены послїдным приспівателём',
-'tooltip-undo' => 'Ð\97Ñ\80Ñ\83Ñ\88Ñ\8bÑ\82и Ð·Ð¼Ñ\96нÑ\8b Ñ\96 Ð²ÐºÐ°Ð·Ð°Ñ\82и Ð¿Ð¾Ð¿ÐµÑ\80еднÑ\97й Ð¿ÐµÑ\80еглÑ\8fд. Ð\94оволÑ\8fє придати причіну до ресуме.',
+'tooltip-undo' => 'Ð\97Ñ\80Ñ\83Ñ\88Ñ\8bÑ\82и Ð·Ð¼Ñ\96нÑ\8b Ñ\96 Ð²ÐºÐ°Ð·Ð°Ñ\82и Ð¿Ð¾Ð¿ÐµÑ\80еднÑ\97й Ð¿ÐµÑ\80еглÑ\8fд. Ð\94озволÑ\8eє придати причіну до ресуме.',
 'tooltip-preferences-save' => 'Уложыти наставлїня',
 'tooltip-summary' => 'Задайте курте згорнутя',
 
index e7f611b..3e9fbbb 100644 (file)
@@ -21,6 +21,7 @@
  * @author Omnipaedista
  * @author Shantanoo
  * @author Shijualex
+ * @author Shreekant Hegde
  * @author Shubha
  * @author Vibhijain
  * @author రాకేశ్వర
@@ -472,8 +473,8 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'protect' => 'संरक्ष्यताम्',
 'protect_change' => 'परिवर्त्यताम्',
 'protectthispage' => 'इदं पृष्ठं संरक्ष्यताम्',
-'unprotect' => 'à¤\85सà¥\81रà¤\95à¥\8dषितà¥\80à¤\95रà¥\8bतु',
-'unprotectthispage' => 'à¤\8fततà¥\8dपà¥\83षà¥\8dठà¤\82 à¤\85सà¥\81रà¤\95à¥\8dषितà¥\80à¤\95रà¥\8bतà¥\81',
+'unprotect' => 'सà¤\82रà¤\95à¥\8dषणà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयतु',
+'unprotectthispage' => 'à¤\85सà¥\8dय à¤ªà¥\81à¤\9fसà¥\8dय à¤¸à¥\81रà¤\95à¥\8dषाà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयतà¥\81 à¥¤',
 'newpage' => 'नवीनपृष्ठम्',
 'talkpage' => 'अस्य पृष्ठस्य विषये चर्चा क्रियताम्',
 'talkpagelinktext' => 'सम्भाषणम्',
@@ -501,9 +502,9 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'jumpto' => 'गम्यताम् अत्र :',
 'jumptonavigation' => 'पर्यटनम्',
 'jumptosearch' => 'अन्वेषणम्',
-'view-pool-error' => 'à¤\95à¥\8dषमà¥\8dयतामà¥\8d, à¤ªà¤°à¤¿à¤µà¥\87षणयनà¥\8dतà¥\8dराणि à¤\85तिभारितानि à¤\85सà¥\8dमिनà¥\8d à¤¸à¤®à¤¯à¥\87
-बहवà¤\83 à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतारà¤\83 à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¥\8dरयतमानाà¤\83 à¤¸à¤¨à¥\8dति
-कृपया किंचित्कालं प्रतीक्षताम् भवान्, तदा क्रियताम् प्रयासः।
+'view-pool-error' => 'भà¥\8bà¤\83, à¤\85धà¥\81ना à¤µà¤¿à¤¤à¤¾à¤°à¤\95à¤\83 à¤\85तिभाराà¤\95à¥\8dरानà¥\8dतà¤\83 
+बहवà¤\83 à¤¯à¥\8bà¤\9cà¤\95ाà¤\83 à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¥\8dरयतमानाà¤\83 à¤¸à¤¨à¥\8dति 
+कृपया, कञ्चित्कालं प्रतीक्षतां करोतु । 
 $1',
 'pool-timeout' => 'कालावधिः समाप्ता, यन्त्रणस्यार्थे प्रतीक्षते',
 'pool-queuefull' => 'कुण्डपंक्तिः (पूल् क्यू इत्येषा) पूर्णा अस्ति।',
@@ -559,6 +560,7 @@ $1',
 'restorelink' => '{{PLURAL:$1|एकम् अपाकृतं संपादनम्  |$1 अपाकृतानि संपादनानि}}',
 'feedlinks' => 'अनुबन्ध:',
 'feed-invalid' => 'अमान्यं सेवाग्रहण-पूरण (सब्स्क्रिप्शन-फीड् इति) प्रकारः।',
+'feed-unavailable' => 'समवायसम्पूरणं नोपलभते ।',
 'site-rss-feed' => '$1 आरएसएस पूरणम्',
 'site-atom-feed' => '$1 अणुपूरणम्',
 'page-rss-feed' => '"$1" आरएसएस-पूरणम्',
@@ -607,12 +609,10 @@ $1',
 'enterlockreason' => 'तन्त्रितीकरणस्य कारणं ददातु, अपि च आकलितं ददातु यत् तन्त्रणं कदा उद्घाट्यिष्यते।',
 'readonlytext' => 'समंकाधारं वर्तमानकाले तन्त्रितमस्ति नूतनान् प्रविष्टीन् विरुध्य तथा च अन्यानि परिवर्तनानि विरुध्य। इदं नियमिततया समंकाधार परिचर्याऽर्थं तथा स्यात्। तत्पश्चादिदं सामान्यतां संप्राप्स्यति।
 तन्त्रितीकारकेन प्रबन्धकेन इदं कारणं प्रदत्तम्: $1',
-'missing-article' => 'दत्ताधारेण(डाटाबेस् इत्यनेन) "$1" $2 इतिनामकं प्राप्तव्यं यत् पृष्ठं तत् नैव प्राप्तम्।
-
+'missing-article' => 'त्ताधारेण(डाटाबेस् इत्यनेन) "$1" $2 इतिनामकं प्राप्तव्यं यत् पृष्ठं तत् नैव प्राप्तम्।
 प्रायः कालातीतस्य अथवा अपाकृतस्य इतिहाससम्पर्कतन्तोः कारणेन एवं भवति।
-
 यदि नैवं तर्हि भवता तन्त्रांशकीटकं प्राप्तं स्यात्।
-कृपया कोऽपि [[Special:ListUsers//sysop|administrator]]अस्य पृष्ठस्य सङ्केतज्ञापनपूर्वकं सूच्यताम्।',
+कृपया कोऽपि [[Special:ListUsers/sysop|administrator]]अस्य पृष्ठस्य सङ्केतज्ञापनपूर्वकं सूच्यताम्।',
 'missingarticle-rev' => '(आवृत्तिः# :$1)',
 'missingarticle-diff' => '(व्यतिरेक: $1, $2)',
 'readonly_lag' => 'मुख्य-समंकाधार-परिवेशकं उपमुख्य-समंकाधार-परिवेशकस्य संप्रापणात् पूर्वे एव स्वतः तन्त्रितम् अस्ति।',
@@ -632,10 +632,11 @@ $1',
 'cannotdelete' => '$1 इति पृष्ठं संचिका वा अपाकर्तुं नाशक्नोत्।
 इदं खलु केनचिदन्येन पूर्वे एव अपाकृतं स्यात्।',
 'cannotdelete-title' => ' "$1" पृष्ठं निर्मार्जयितुम् अशक्यम्',
+'delete-hook-aborted' => 'आलम्बेन अपमार्जनम् अपनीतम् । अनेन विवरणं न दत्तम् ।',
 'badtitle' => 'दुष्टं शिरोनाम',
 'badtitletext' => 'प्रार्थितं पृष्ठशीर्षकम् अमान्यं रिक्तम् अशुद्धतया सम्बद्धम् आन्तर्भाषिकम्, आन्तर्विकीयं वा शीर्षकमस्ति । अस्मिन् एकं एकाधिकानि वा एतादृशानि अक्षराणि विद्यन्ते येषां प्रयोगं शीर्षकेषु कर्तुम् अशक्यम्।',
-'perfcached' => 'à¤\85नà¥\81पदà¥\8bà¤\95à¥\8dतà¤\82 à¤¸à¤®à¤\82à¤\95à¤\82 à¤\95à¥\88शà¥\8d à¤\87तà¥\8dयà¥\87तसà¥\8dमादà¥\8d à¤\85सà¥\8dति, à¤\85तà¤\83 à¤\85दà¥\8dयतनà¤\82 à¤¨ à¤¸à¥\8dयातà¥\8d। A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'à¤\85नà¥\81पदà¥\8bà¤\95à¥\8dतà¤\82 à¤¸à¤®à¤\82à¤\95à¤\82 à¤\95à¥\88शà¥\8d à¤\87तà¥\8dयà¥\87तसà¥\8dमिनà¥\8d à¤µà¤¿à¤¦à¥\8dयतà¥\87, à¤¤à¤¥à¤¾ à¤\9a $1 à¤\87तà¥\8dयà¥\87ततà¥\8dसमयà¥\87 à¤\85नà¥\8dतिमà¤\82 à¤µà¤¾à¤°à¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतितमà¥\8d। A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'à¤\85नà¥\81पदà¥\8bà¤\95à¥\8dतà¤\82 à¤²à¥\87à¤\96à¤\83 à¤\95à¥\88शà¥\8d à¤\87तà¥\8dयà¥\87तसà¥\8dमादà¥\8d à¤\85सà¥\8dति, à¤\85तà¤\83 à¤\85दà¥\8dयतनà¤\82 à¤¨ à¤¸à¥\8dयातà¥\8d।  {{PLURAL:$1|one result is|$1 results are}}',
+'perfcachedts' => 'à¤\85धà¥\8bनिदà¥\87शितलà¥\87à¤\96à¤\83 à¤¸à¤\9eà¥\8dà¤\9aितà¤\83 à¥¤ à¤ªà¥\82रà¥\8dवपदà¥\8bनà¥\8dनतिà¤\83 $1 à¥¤ $4 {{PLURAL:}} à¤\85धिà¤\95ाधिà¤\95परिणामà¤\83 à¤¸à¤\9eà¥\8dà¤\9aयà¥\87 à¤\89पलबà¥\8dधà¤\83 à¥¤',
 'querypage-no-updates' => 'अस्य पृष्ठस्य परिशोधनं विफलीकृतमस्ति । 
 सद्यः अत्रत्यः विषयः न नवीक्रियते ।',
 'wrong_wfQuery_params' => 'wfQuery() इत्येतस्य अशुद्धः मानदण्डः दत्तः अस्ति<br />
@@ -660,6 +661,11 @@ $2',
 'ns-specialprotected' => 'विशिष्टानि पृष्ठानि परिवर्तयितुं न शक्यन्ते।',
 'titleprotected' => 'सदस्य [[User:$1|$1]] इत्यनेन एतत्-शीर्षकीयं पृष्ठं सृजनात् वारितमस्ति।
 एतदर्थं प्रदत्तं कारणम् "$2"।',
+'filereadonlyerror' => '"$1"  सञ्चिकापरिवर्तनं न शक्यते यतः "$2" शब्दकोशः केवलं पठनयोग्यः । प्रशासकेन पिहितं यः विवरणमिच्छति "$3".',
+'invalidtitle-knownnamespace' => ' "$2" नमावकाशेन "$3" पाठ्येन च युक्तम् अनर्हशीर्षम् ।',
+'invalidtitle-unknownnamespace' => 'अज्ञातनामवाकाशयुता  सङ्ख्या $1 पाठ्यः "$2" अपुष्टशीर्षिका ।',
+'exception-nologin' => 'न नामाभिलितम्',
+'exception-nologin-text' => 'एतस्मि पुटि प्रक्रियां वा ते प्रवेशः आवश्यकः ।',
 
 # Virus scanner
 'virus-badscanner' => "असुष्ठु अभिविन्यासः : अज्ञातं विषाणु-निरीक्षित्रम्: ''$1''",
@@ -752,6 +758,7 @@ $2',
 'invalidemailaddress' => 'प्रतीयते यद् विद्युत्सन्देशसंकेतः अमान्ये प्रारूपे विद्यते। अतएव एतत् स्वीकरोतुं न शक्यते।
 कृपया एकं प्रारूपसम्मतं संकेतं ददातु, अथवा तत् क्षेत्रं रिक्तमेव करोतु।',
 'cannotchangeemail' => 'अस्मिन् विकिमध्ये सदस्य-ईपत्र-सङ्केतः परिवर्तयितुं न शक्यते ।',
+'emaildisabled' => 'स्थानमेतत् विद्युन्मनपत्रं न प्रेषयति ।',
 'accountcreated' => 'सदस्यता प्राप्ता',
 'accountcreatedtext' => '$1 इत्येतस्य सदस्यता प्राप्ता अस्ति।',
 'createaccount-title' => '{{SITENAME}} इत्येतदर्थं लेखासृजनम्',
@@ -812,12 +819,25 @@ You may ignore this message, if this account was created in error.',
 $2
 इत्यनेन ईपत्रसङ्केतेन सम्बद्धम् अस्ति / सम्बद्धानि सन्ति ।
 {{PLURAL:$3|अयं तात्कालिकः कूटशब्दः | इमे तात्कालिकाः कूटशब्दाः}}  {{PLURAL:$5| एकं दिनं | $5 दिनानि}} यावत् सक्रियः भवति / सक्रियाः भवन्ति ।',
+'passwordreset-emailtext-user' => 'कश्चित् (भवान् अपि स्यात्, $1 इति ऐ. पि. सङ्केतात्) {{SITENAME}} ($4) इत्यस्य प्रवेशसम्बद्धं विवरणं प्रार्थितवान् । अधः सूचितस्य उपयोक्तुः {{PLURAL:$3 | प्रवेशविवरणं | प्रवेशविवरणानि}} 
+$2
+इत्यनेन ईपत्रसङ्केतेन सम्बद्धम् अस्ति / सम्बद्धानि सन्ति ।
+{{PLURAL:$3|अयं तात्कालिकः कूटशब्दः | इमे तात्कालिकाः कूटशब्दाः}}  {{PLURAL:$5| एकं दिनं | $5 दिनानि}} यावत् सक्रियः भवति / सक्रियाः भवन्ति ।',
 'passwordreset-emailelement' => 'प्रयोक्तृनाम: $1
 अल्पकालिकः कूटशब्दः : $2',
 'passwordreset-emailsent' => 'एकः स्मारकः विद्युत्सन्देशः प्रेषितोऽस्ति।',
+'passwordreset-emailsent-capture' => 'अधो दर्शितस्य विद्युन्मानसङ्केतस्य अनुस्मारकं प्रेषितम् ।',
+'passwordreset-emailerror-capture' => 'अधो निर्दिष्टानुस्मारकः विद्युन्मानसन्देशः रचितः । किन्तुः योजकसम्प्रेषणं विपन्नम् ।$1',
 
 # Special:ChangeEmail
 'changeemail' => 'विद्युन्मानपत्रादेशं परिवर्तयतु',
+'changeemail-header' => 'उपयोजकसंज्ञायाः विद्युन्मानपत्रसङ्केतं परिवर्तयतु ।',
+'changeemail-text' => 'स्वस्य विद्युन्मानपत्रसङ्केतं परिवर्तयितुम् एतत् प्रपत्रं पूरयतु । दृढीकरणार्थं निकुञ्चः निवेशनीयः ।',
+'changeemail-no-info' => 'अस्य पुटस्य उपसञ्चारार्थं नामाभिलेखनम् अनिवार्यम् ।',
+'changeemail-oldemail' => 'प्रचलितः विद्युन्मानपत्रसङ्केतः ।',
+'changeemail-newemail' => 'नूतनः विद्युन्मानसङ्केतः ।',
+'changeemail-none' => 'असत्',
+'changeemail-submit' => 'विद्युन्मानपत्रसङ्केतं परिवर्तयतु ।',
 'changeemail-cancel' => 'निवर्तयते',
 
 # Edit page toolbar
@@ -861,6 +881,18 @@ $2
 'summary-preview' => 'सारांशस्य प्राग्दृश्यम् :',
 'subject-preview' => 'विषयस्य/शीर्षकस्य प्राग्दृश्यम्:',
 'blockedtitle' => 'प्रयोक्ता अवरुद्धः वर्तते',
+'blockedtext' => 'भवतः आइपिसङ्केतः स्वचालितविधिना अवरुद्धोऽस्ति, यस्मादयं भिन्नेनैकेन सदस्येन प्रयुक्त आसीत्, यो हि $1 इत्यनेन अवरुद्धः आसीत्।
+प्रदत्तं कारणमेतदस्ति:
+:\'\'$2\'\'
+* अवरोधनस्यारम्भः: $8
+* अवरोधनस्य समाप्तिः: $6
+* अभिप्रेतः अवरोध्यः: $7
+
+भवान् अवरोधार्थं सम्भाषणं कर्तुं  $1 इत्येतं अथवा अन्यान् [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धकान्]] सम्पर्कं कर्त्तुं शक्नोति।
+मनसि धारयतु यद् भवान् "e-mail this user"(विद्युत्सन्देशः)  इति सुविधायाः प्रयोगः तावत् कर्त्तुं न शक्नोति यावत् भवानेकं  विधिमान्यं विद्युत्सन्देश-सङ्केतं [[Special:Preferences|user preferences]] इत्यत्र न पञ्जीकृतवानस्ति अपि च भवान् तस्य प्रयोगात् न निवारितोऽस्ति।
+
+भवतः वर्तमानः आइपीसङ्केतः $3 इति अस्ति। अपि च अवरोधनस्य परिचयचिह्नम्  (आइडी) #$5 इत्यस्ति।
+कृपया भवान् स्वकीयेषु सर्वेष्वपि प्रश्नेषु सर्वमेतत् वर्णनं ददातु।',
 'autoblockedtext' => 'भवतः आइपिसङ्केतः स्वचालितविधिना अवरुद्धोऽस्ति, यस्मादयं भिन्नेनैकेन सदस्येन प्रयुक्त आसीत्, यो हि $1 इत्यनेन अवरुद्धः आसीत्।
 प्रदत्तं कारणमेतदस्ति:
 :\'\'$2\'\'
@@ -892,6 +924,9 @@ $2
 पृष्ठं स्रष्टुम् अधःप्रदत्तायां पेटिकायां टंकणं करोतु (सहाय्यार्थं [[{{MediaWiki:Helppage}}|अत्र]] क्लिक्करोतु।
 
 चेद्भवान् अत्र भ्रान्तिना आनीतोऽस्ति तदा स्वकीये ब्राउसर् इत्यस्मिन् '''बैक्''' इत्यस्मिन् क्लिक्करोतु।)",
+'anontalkpagetext' => 'तस्य अनामकयोजकस्य, अथवा अनुपयोजकस्य च परिचर्चापुटम् येन एतावति काले स्वस्थनं  न निर्मितम् । 
+अतः तस्य अभिज्ञानार्थं ऐ.पि.सङ्गेतसङ्ख्या प्रयोजनीया । 
+सा समाना सङ्ख्याः अन्ययोजकैः अपि विभक्ता । यदि भवान् अनामकयोजकः, भवता असम्बद्धटीकाः श्रुताः, कृपया स्वस्थनं निर्मीय नामाभिलेखं करोतु ।  [[Special:UserLogin/signup|create an account]], [[Special:UserLogin|log in]] अन्यानामकयोजकैः सह सम्भूयमनभ्रमैः विमुक्तः भवतु ।',
 'noarticletext' => 'अस्मिन् पृष्ठे अधुना किमपि न विद्यते। भवान् विकिपीडियावर्तिषु अन्येषु पृष्ठेषु इदं [[Special:Search/{{PAGENAME}}|शीर्षकम् अन्वेष्टुम्]]अर्हति अथवा इदं पृष्ठं 
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  सम्बद्धेषु पृष्ठेषु अन्वेष्टुम् अर्हति],
 अथवा [{{fullurl:{{FULLPAGENAME}}|action=edit}} इदं पृष्ठं सम्पादयितुम् अर्हति]</span>.',
@@ -903,6 +938,8 @@ $2
 'userpage-userdoesnotexist-view' => '"$1" इति प्रयोक्तृलेखा पञ्जीकृता नास्ति।',
 'blocked-notice-logextract' => 'अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।
 नूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति:',
+'clearyourcache' => "'''सूचनाः'''",
+'usercssyoucanpreview' => "'''सूचना :''' रक्षणात्पूर्वं स्वकीयं जावास्क्रिप्ट् इति लिपिं परीक्षितुं \"{{int:showpreview}}\" इति गण्डं प्रयोजयतु।",
 'userjsyoucanpreview' => "'''सूचना :''' रक्षणात्पूर्वं स्वकीयं जावास्क्रिप्ट् इति लिपिं परीक्षितुं \"{{int:showpreview}}\" इति गण्डं प्रयोजयतु।",
 'usercsspreview' => "'''मनसि धारयतु यद्भवान् केवलं प्राग्दृश्यं पश्यति स्वकीयस्य प्रयोक्तृ-सीएसएस् इत्येतस्य'''
 '''इदं अधुनावधि यावत् रक्षितं नास्ति!'''",
@@ -917,19 +954,27 @@ $2
 'updated' => '(अद्यतनीकृतः)',
 'note' => "'''सूचना:'''",
 'previewnote' => "'''स्मरणीयं यदेतत् केवलं प्राग्दृश्यमस्ति।'''
-भवता कृतानि परिवर्तनानि इदानीं यावत् न रक्षितानि !",
+ ते परिवर्तनानि इदानीं यावत् न रक्षितानि ।",
+'continue-editing' => 'सम्पादनम् अनुवर्तताम्',
 'previewconflict' => 'अस्मिन् प्राग्दृश्ये दर्शितमस्ति यत् उपरिवर्ति पाठ क्षेत्रस्य पाठः रक्षणपश्चात् कीदृशः दृष्टिगोचरः भविष्यति।',
 'session_fail_preview' => "'''क्षम्यताम्! अस्माभिः भवतः सम्पादनस्य संसाधनं न कर्तुं शक्तम् यस्माद्धि सत्रस्य सूचनाः लुप्ताः।'''
 कृपया पुनः चेष्टताम्।
 चेदेतत् अधुनाऽपि न कार्यशीलं स्यात्, [[Special:UserLogout|सत्राद्बहिः गत्वा]] पुनः प्रवेशं करोतु।",
+'session_fail_preview_html' => 'लेखभागाभावात् ते परिचर्यां समापयितुं न शक्यते ।[[Special:UserLogout|logging out]]',
+'token_suffix_mismatch' => "'''ते सम्पादनं तिर्स्कृतम् । यतः ते ग्राहकः सम्पादनप्रतीके लेखानचिह्नानि क्षतविक्षतानि अकरोत्। '''
+पाठ्यपुटस्य संरक्षणार्थं सम्पादनावकाशः पिहितः । अनामिकानाम् उपयोगकाले कदाचित् एवं सम्भवति ।",
+'edit_form_incomplete' => "'''सम्पादनस्य कतिचनांशाः वितारकं न प्राप्ताः ; सम्पादनं  द्विवरं परिशीलयतु । ते सम्पादनानि अनाहतानि, पुनः यतताम्  '''",
 'editing' => '$1 सम्पाद्यते',
+'creating' => '$1 सर्जनम्',
 'editingsection' => '$1 सम्पादनम् (विभागः)',
 'editingcomment' => '$1 संपादनम् (विभागः)',
 'editconflict' => 'सम्पादनयोः/सम्पादनानाम् अन्तर्विरोधः : $1',
+'explainconflict' => 'ते सम्पादनावसरे कोपि अन्यः परिवर्तितवान् । उपरितनलेखस्य क्षेत्रं सद्यः विद्यमानपुटयुक्तमस्ति । ते परिवर्तनम् अधः लेखक्षेत्रे दृश्यते । विद्यमानलेखैः सह ते परिवर्ताननि विलीनयतु । यदा संरक्षणप्रयत्नः क्रियते तदा केवलम् उपरिपठ्यभागः एव सुरक्षितं भवति ।',
 'yourtext' => 'भवतः पाठः',
 'storedversion' => 'रक्षिता आवृत्तिः',
 'nonunicodebrowser' => "'''पूर्वसूचना: भवतः विचरकं यूनीकोड्-अनुकूलम् नास्ति।'''
 भवान् सुरक्षिततया सम्पादनं करोतु इत्येतदर्थं एका युक्तिः कृताऽस्ति: आस्की-इतराणि अक्षराणि सम्पादनपिटके षौडशिक(hexadecimal) कूटेषु द्रक्ष्यन्ते।",
+'editingold' => "''' पूर्वसूचना : कालातीतपुटस्य सम्पादनं करोति  ''' यदि एतत् रक्षितुं यतते परिवर्तनं नैव रक्ष्यते ।",
 'yourdiff' => 'भेदाः',
 'copyrightwarning' => "कृपया संस्मर्तव्यं यत् {{SITENAME}} इत्येतद् प्रति कृतानि सर्वाणि योगदानानि $2 इत्यस्य प्रतिबंधांतर्गतानि सन्ति (अधिकाय ज्ञानाय $1 इत्येतद् पश्यतु)।
 
@@ -938,12 +983,30 @@ $2
 भवान् एतदपि प्रमाणीकरोति यत् एतद् भवता स्वतः लिखितमस्ति अथवा कस्माच्चत् जनार्पितात् वा मुक्तात् वा स्रोतसः प्रतिलिपीकृतमस्ति।
 
 '''प्रतिलिप्यधिकारयुतान् लेखान्, अनुज्ञां विना, माऽत्र प्रददातु!'''",
-'longpageerror' => "'''त्रुटिः: भवता प्रदत्तः पाठः $1 किलोबैटमितः दीर्घः, अतः एषः अधिकतमानुज्ञातात् $2 मितात् दीर्घतरः अस्ति। एषः रक्षितुं न शक्यते।'''",
+'copyrightwarning2' => "कृपया संस्मर्तव्यं यत् {{SITENAME}} इत्येतद् प्रति कृतानि सर्वाणि योगदानानि  इत्यस्य प्रतिबंधांतर्गतानि सन्ति (अधिकाय ज्ञानाय $1 इत्येतद् पश्यतु)।
+
+यदि भवान् स्वकीयानि लिखितानि परिवर्तमन्तश्च, पुनः वितर्यमन्तश्च न द्रष्टुमिच्छति तदा मा कृपया माऽत्र योगदानं करोतु। <br />
+
+भवान् एतदपि प्रमाणीकरोति यत् एतद् भवता स्वतः लिखितमस्ति अथवा कस्माच्चत् जनार्पितात् वा मुक्तात् वा स्रोतसः प्रतिलिपीकृतमस्ति।
+
+'''प्रतिलिप्यधिकारयुतान् लेखान्, अनुज्ञां विना, माऽत्र प्रददातु!'''",
+'longpageerror' => "रुटिः: भवता प्रदत्तः पाठः {{PLURAL:}} $1 किलोबैटमितः दीर्घः, अतः एषः अधिकतमानुज्ञातात् $2 मितात् दीर्घतरः अस्ति। एषः रक्षितुं न शक्यते।'''",
+'readonlywarning' => "पूर्वसूचना ''' निर्वहणार्थं पाठः पिहितः । अधुना भवान् सम्पादनं रक्षितुं नैव शक्नोति । पाठसञ्चिकायां संश्लेष्य कार्यफलं रक्षतु । एतद्विवरणं प्रतिबन्धकः प्रशासकः विरतरि ।$1",
+'protectedpagewarning' => "'''पूर्वसूचना ''' प्रशासकपदयुक्ताः योजकाः एव सम्पादनं कर्तुमर्हन्ति । अतः एतत्पुटं सुरक्षितम् । निदेशार्थम् अधः जघन्यप्रवेशः सूचितः ।",
+'semiprotectedpagewarning' => "'''सूचना ''' पञ्जीकृतयोजकानां  उपयोगार्थ केवलम् एतत्पुटम् अभिरक्षितम् । जघन्यप्रवेशस्य सूचना आनुकूल्यार्थम् अधोनिदेशिता ।",
+'cascadeprotectedwarning' => "'''पूर्वसूचना ''' प्रशासकसौकर्ययुक्तानां योजकानाम् सम्पादनार्थम् एतत् पुटम् अभिरक्षितमस्ति । यतः अधोनिदेशितनिर्झरे एतदन्तर्गतम् । {{PLURAL:$1|page|pages}}:",
+'titleprotectedwarning' => "'''पूर्वसूचना  [[Special:ListGroupRights|specific rights]] जनानां सर्जनार्थम् एतत्पुटम् अभिरक्षितम् । '''",
 'templatesused' => 'अस्मिन् पृष्ठे प्रयुक्तानि {{PLURAL:$1|फलकम्|फलकानि}}:',
 'templatesusedpreview' => 'अस्मिन् प्राग्दृश्ये प्रयुक्ताः {{PLURAL:$1|बिंबधराः |बिंबधराः}}:',
+'templatesusedsection' => '{{PLURAL:$1|Template|Templates}} अस्मिन् विभागे उपयुक्तम् ।',
 'template-protected' => '(संरक्षितम्)',
 'template-semiprotected' => '(अर्धसंरक्षितम्)',
 'hiddencategories' => 'इदं पृष्ठं {{PLURAL:$1|1 निगूढे वर्गे |$1 निगूढेषु वर्गेषु}} अन्यतमं विद्यते :',
+'nocreatetitle' => 'पुटनिर्माणं नियतम् ।',
+'nocreatetext' => '{{SITENAME}} नूतनपुटनिर्माणस्य क्षमता नियता । वर्तमानापुटानां सम्पादनार्थं निर्गच्छतु । अथवा [[Special:UserLogin|log in or create an account]].',
+'nocreate-loggedin' => 'नूतनपुटनिर्मार्थम् अनुमतिः नास्ति ।',
+'sectioneditnotsupported-title' => 'विभागसम्पादनं न पोषितम् ।',
+'sectioneditnotsupported-text' => 'अस्मिन् पुटे विभागसम्पादनण् न पोषितम् ।',
 'permissionserrors' => 'अनुज्ञा-विभ्रमाः',
 'permissionserrorstext' => 'भवान् तत् कर्तुं अनुज्ञां न धारयति {{PLURAL:$1|अधोऽङ्कितात् कारणात् |अधोऽङ्कितेभ्यः कारणेभ्यः:}}',
 'permissionserrorstext-withaction' => 'भवान् $2 इत्येतदर्थम् अनुमतः नास्ति, यतः {{PLURAL:$1|कारणम्|कारणानि}}:',
@@ -961,6 +1024,7 @@ $2
 'edit-no-change' => 'भवतः सम्पादनम् उपेक्षितम्, यतो हि भवता पाठे न किमपि परिवर्तनं कृतम्।',
 'edit-already-exists' => 'नूतनं पृष्ठं स्रष्टुं नापारयत्।
 इदं पूर्वे एव विद्यते।',
+'defaultmessagetext' => 'सन्देशपाठं स्थिरयतु ।',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''प्रबोधः :''' अस्मिन् पृष्ठे प्रभूतानि जटिलानि पार्सर्-फ़ंक्शन्-आह्वानानि सन्ति।
@@ -975,6 +1039,12 @@ $2
 'parser-template-loop-warning' => 'बिम्बधर-पाशः प्राप्तः: [[$1]]',
 'parser-template-recursion-depth-warning' => 'बिम्बधर-पुनरावर्तनार्थं गहनतायाः सीमा अतिक्रान्ताऽस्ति ($1)',
 'language-converter-depth-warning' => 'भाषा-परिवर्तकस्य गहनतायाः सीमा अतिक्रान्ताऽस्ति (*$1)',
+'node-count-exceeded-category' => 'सन्धिगणनम् अतिक्रान्तपुटानि ।',
+'node-count-exceeded-warning' => 'सन्धिगणनेन तिक्रान्तपुटम् ।',
+'expansion-depth-exceeded-category' => 'पुटविस्तारस्य गाहः अतिक्रान्तः ।',
+'expansion-depth-exceeded-warning' => 'विस्तारगाहातिक्रान्तपुटम् ।',
+'parser-unstrip-loop-warning' => 'अपट्टरन्धः दृष्टः ।',
+'parser-unstrip-recursion-limit' => 'अपट्टपुनरवतरणमितिः अतिक्रान्ता ।$1',
 
 # "Undo" feature
 'undo-success' => 'सम्पादनमिदं विपरीतीकर्तुं शक्यते।
@@ -1003,6 +1073,9 @@ $2
 'last' => 'पूर्वतनम्',
 'page_first' => 'प्रथमम्',
 'page_last' => 'अन्तिमम्',
+'histlegend' => 'भेदस्य चयनम्: आवृत्तिभेदस्य दर्शनाय अग्रे प्रदत्ता रेडियोमञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />
+इतिहासः: (सद्योजातम्) = नूतनासु आवृत्तिषु भेदः, 
+(पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु परिवर्तनम्',
 'history-fieldset-title' => 'सुगमनस्य(ब्राउस् इत्यस्य) इतिहासः',
 'history-show-deleted' => 'केवलम् विलोपित',
 'histfirst' => 'पुरातनतमम्',
@@ -1023,15 +1096,47 @@ $2
 'rev-deleted-user' => '(प्रयोक्तृनाम अपाकृतमस्ति)',
 'rev-deleted-event' => '(अभिलेखन-क्रिया अपाकृताऽस्ति)',
 'rev-deleted-user-contribs' => '[प्रयोक्तृनाम अथवा आइपीसंकेतः अपाकृतः - सम्पादनं योगदानेभ्यः निगूढमस्ति]',
+'rev-deleted-text-permission' => 'अस्य पुटस्य पुनरवतरणम् अपमार्जितम् । विवरणम् अत्र प्राप्यते  । [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
+'rev-deleted-text-unhide' => 'अस्य पुटस्य पुनरवतरणम् अपमार्जितम् । विवरणम् अत्र प्राप्यते । [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].
+You can still [$1 view this revision]',
+'rev-suppressed-text-unhide' => "अस्य पुटस्य पुनरवतरणं ''' निषिद्धम् ''' यदि अनुवर्तनमिच्छति तर्हि विवरणम् अत्र प्राप्यते । [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
+You can still [$1 view this revision]",
+'rev-deleted-text-view' => 'एतस्मात् अन्तरतः किञ्चिदवतरणं परिमार्जितम् । एतदन्तरं दृष्टुं शक्नुवन्ति । विवरणम् [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग]',
+'rev-suppressed-text-view' => 'अस्मिन्नन्तरे किञ्चिदवतरणं सङ्गुपतम् । तदन्तरम् अत्र दृष्टुं शक्नुवन्ति । [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].',
+'rev-deleted-no-diff' => 'एतत् दृष्टुं नैव शक्यते यतः पुनरावर्तनं परिमार्जितम् । विवरणम् अत्र प्राप्यते । [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
+'rev-suppressed-no-diff' => 'एतदन्तरं दृष्टुं नैव शक्यते यतः अत्र किञ्चिदवतरणं परिमार्जितम् ।',
+'rev-deleted-unhide-diff' => 'अस्य पुटस्य पुनरवतरणम् अपमार्जितम् । विवरणम् अत्र प्राप्यते । [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].
+You can still [$1 view this revision]',
+'rev-suppressed-unhide-diff' => "अस्य पुटस्य पुनरवतरणं ''' निषिद्धम् ''' यदि अनुवर्तनमिच्छति तर्हि विवरणम् अत्र प्राप्यते । [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
+You can still [$1 view this revision]",
+'rev-deleted-diff-view' => 'एतस्मात् अन्तरतः किञ्चिदवतरणं परिमार्जितम् । एतदन्तरं दृष्टुं शक्नुवन्ति । विवरणम् [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग]',
+'rev-suppressed-diff-view' => 'अस्मिन्नन्तरे किञ्चिदवतरणं सङ्गुपतम् । तदन्तरम् अत्र दृष्टुं शक्नुवन्ति । [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].',
 'rev-delundel' => 'दर्श्यन्ताम्/गोप्यन्ताम्',
 'rev-showdeleted' => 'दर्श्यताम्',
+'revisiondelete' => 'अवतरणं परिमार्जयतु/पुनस्थापयतु',
 'revdelete-nooldid-title' => 'लक्ष्यरूपा आवृत्तिः अमान्याऽस्ति।',
+'revdelete-nooldid-text' => 'एतत्कार्यं कर्तुं भवतः अवतरणं न दत्तम् । अथवा भवता दत्तावतरणस्य अस्तित्वं नास्ति । अथवा सद्यः अवतरणस्य सङ्गोपनं कुर्वन् अस्ति ।',
 'revdelete-nologtype-title' => 'अभिलेखस्य प्रकारः न प्रदत्तः',
 'revdelete-nologtype-text' => 'अस्यै क्रियायै भवता न कोऽपि अभिलेखप्रकारः निर्दिष्टः।',
 'revdelete-nologid-title' => 'अमान्या अभिलेख-प्रविष्टिः',
+'revdelete-nologid-text' => 'एतत् कार्यं साधयितुं भवान् प्रवेशलक्ष्यं न स्पष्टीकृतवान् अथवा प्रवेशः अस्तित्वे नास्ति ।',
 'revdelete-no-file' => 'निर्दिष्टा सञ्चिका न विद्यते ।',
 'revdelete-show-file-confirm' => '$2 तः $3 मध्ये "<nowiki>$1</nowiki>" इति सञ्चिकायाः निरस्तं परिष्करणं भवान् नूनं द्रष्टुम् इच्छति ?',
 'revdelete-show-file-submit' => 'आम्',
+'revdelete-selected' => "'''{{PLURAL:$2|Selected revision|Selected revisions}} of [[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Selected log event|Selected log events}}:'''",
+'revdelete-text' => "'''परिमार्जितानि अवतरणानि पुटेतिहासे अद्यापि दृश्यन्ते । तस्य कश्चन भागः सार्वजनिकः न भवति । '''
+{{SITENAME}} इत्यस्य अन्यप्रशसासकः गुप्तसामग्रीः प्राप्नुवन्ति । अपि च अन्तरापुटेन अस्य अपरिमार्जनं कर्तुं शक्नुवन्ति । यावत् अतिरिक्तप्रतिबन्धकाः न स्थापिताः ।",
+'revdelete-confirm' => 'भवान् एतत् कार्यं करोति इति दढयतु । भवान् अस्य परिणामं जानाति । [[{{MediaWiki:Policy-url}}|the policy]] भवान् एतदनुसारं करोति ।',
+'revdelete-suppress-text' => 'अधोनिदेशितपरिस्थितिषु केवलं निग्रहः कार्यः । 
+* अवमाननीयाः विषयाः ।
+* अप्रधानाः वैयक्तिकविषयाः
+* गृहसङ्केतः, दूरवाणीसङ्ख्या, सामाजिकसुरक्षासङ्ख्या, इत्यादयः ।',
+'revdelete-legend' => 'दृश्यप्रतिबन्धं निश्चिनोतु ।',
+'revdelete-hide-text' => 'अवतरणस्य पाठं गोपयतु ।',
+'revdelete-hide-image' => 'सञ्चिकाधेयं गोपयतु ।',
+'revdelete-hide-name' => 'प्रक्रियां लक्ष्यं च गोपयतु ।',
+'revdelete-hide-comment' => 'सम्पादनसारं गोपयतु ।',
 'revdelete-hide-user' => 'सम्पादकस्य योजकनाम/आइपिसंकेतः गोप्यताम्।',
 'revdelete-hide-restricted' => 'प्रबन्धकेभ्यः अन्येभ्यश्च समंकं गोपयतु।',
 'revdelete-radio-same' => 'मा परिवर्तयतु।',
@@ -1041,28 +1146,76 @@ $2
 'revdelete-unsuppress' => 'प्रत्यानीताऽऽवृत्तिभ्यः  वर्जनाः अपाकरोतु।',
 'revdelete-log' => 'कारणम् :',
 'revdelete-submit' => '{{PLURAL:$1|चितायां आवृत्त्यां|चितासु आवृत्तिषु}} अनुप्रयोजयतु।',
+'revdelete-success' => 'अवतरणदृश्यता साफल्येन उन्नतीकृता ।',
+'revdelete-failure' => 'अवतरणदृश्यता उन्नतीकरणं न शक्यते ।$1',
+'logdelete-success' => 'नामाङ्कनदृश्यता साफल्येन योजिता ।',
+'logdelete-failure' => 'नामाभिलेखदृश्यता सपला नाभवत् । $1',
 'revdel-restore' => 'दृष्टिविषयः परिवर्त्यताम्',
 'revdel-restore-deleted' => 'अपास्तानि संस्करणानि',
 'revdel-restore-visible' => 'दृष्टिगोचराणि संस्करणानि',
 'pagehist' => 'पृष्ठस्य इतिहासः',
+'deletedhist' => 'परिमार्जितेतिहासः ।',
+'revdelete-hide-current' => '$2 $1 दिनाङ्कितस्य गोपने दोषः । एतत् प्रकृतावतरणम्, एतत् न गोपनीयम् ।',
+'revdelete-show-no-access' => '$2, $1: दिनाङ्कितस्य दर्शने दोषः । एतत् पञ्जीकृतमिति अङ्कितम् । एतत् प्राप्तुं नैव शक्नोति ।',
+'revdelete-modify-no-access' => ' $2, $1 दिनाङ्कितं परिवर्तने दोषः । एतत् निर्बन्धितमिति अङ्कितम् । एतत् प्राप्तुं नैव शक्नोति ।',
+'revdelete-modify-missing' => '$1 दिनाङ्कितं परिवर्तने दोषः । मूलपाठात् विहीनम् एतत् ।',
+'revdelete-no-change' => "'''पूर्वसूचना ''' $2, $1 दिनाङ्किताः पूर्वमेव दृश्यतासंयोजनम् आभ्यर्थिताः ।",
+'revdelete-concurrent-change' => '$2, $1: दिनाङ्कितदेषपरिमार्जनानि । अस्य स्तरः केनचित् परिवर्तितं यत् भवता परिवर्तितुं प्रयत्नः कृतः । प्रवेशं परिशीलयतु ।',
+'revdelete-only-restricted' => '$2, $1: दिनाङ्कितस्य गोपने दोषाः। अन्यदृश्यविकल्पानां चयनेन विना एतत् निग्रहितुं नैव शक्नोति ।',
 'revdelete-reason-dropdown' => '*परित्यागाय समानकारणाः
 ** प्रतिलिपिअधिकारअतिक्रम
 ** अयोग्यवैयक्तिकविज्ञप्ति',
 'revdelete-otherreason' => 'अन्यत्/सङ्कलितं कारणम् :',
 'revdelete-reasonotherlist' => 'अन्यानि कारणानि',
 'revdelete-edit-reasonlist' => 'सम्पादनस्य अपाकरणाय कारणानि',
+'revdelete-offender' => 'अवतरणकर्ता ।',
+
+# Suppression log
+'suppressionlog' => 'निग्रहनामाभिलेखः ।',
+'suppressionlogtext' => 'अधोनिदेशितप्रशासकैः सङ्गुप्तस्य विभागस्य निष्कासितपुटानां सूची ।
+निषिद्धपिहितपुटानि  [[Special:BlockList|block list]] पश्यतु ।',
 
 # History merging
+'mergehistory' => 'संलीनपुटेतिहासाः ।',
+'mergehistory-header' => 'एतत्पुटं कस्यचित् स्रोतपुटस्य इतिहासस्य संयोजनार्थमस्ति ।
+एतत्परिवर्तनं पूर्वतनपुटैः नैरन्तर्यं रक्षति इति दृढयतु ।',
+'mergehistory-box' => 'पुटद्वयस्य अवतरणं व्यलीयताम् ।',
+'mergehistory-from' => 'मूलपुटम् ।',
+'mergehistory-into' => 'लक्षितपुटम् ।',
+'mergehistory-list' => 'विलीनयोग्यसम्पादनस्य इतिहासः ।',
+'mergehistory-merge' => '[[:$1]] इत्यस्य निम्नावतरणं । [[:$2]] इत्यनेन संयोजयितुं शक्यते । निर्दिष्टकाले सर्जितानि संयोजयितुं रेडियोपिञ्जस्तम्भम् उपयोजयतु । 
+सञ्चलनस्य अनुबन्धाः स्तम्भमेतं पुनःस्थापयति ।',
+'mergehistory-go' => 'विलीनयोग्यसम्पादनानि दर्शयतु ।',
+'mergehistory-submit' => 'अवतरणं योजयतु ।',
+'mergehistory-empty' => 'अवतरणानि संयोजयितुं न शक्यते ।',
+'mergehistory-success' => '$3 {{PLURAL:$3|revision|revisions}} of [[:$1]] successfully merged into [[:$2]].',
+'mergehistory-fail' => 'इतिहासविलीनता नैव शक्यते । पुटं कालं व्याप्तिं च परिशीलयतु ।',
+'mergehistory-no-source' => 'पूलपुटं $1 अस्तित्वं नास्ति ।',
+'mergehistory-no-destination' => 'लक्षितपुटं $1 अस्तित्वे नास्ति ।',
+'mergehistory-invalid-source' => 'मूलपुटस्य मान्यशीर्षिका स्यात् ।',
+'mergehistory-invalid-destination' => 'लक्षितपुटं मानितशीर्षिकायुतं भवेत् ।',
+'mergehistory-autocomment' => 'लीनं [[:$1]] into [[:$2]]',
+'mergehistory-comment' => 'लीनं [[:$1]]    [[:$2]] : $3',
+'mergehistory-same-destination' => 'मूलपुटं लक्षितपुटं च समानं न भवेत् ।',
 'mergehistory-reason' => 'कारणम् :',
 
 # Merge log
+'mergelog' => 'नामाभिलेखं योजयतु ।',
+'pagemerge-logentry' => '[[$1]]  तु [[$2]] मध्ये विलीनम् (अवतरणं $3 पर्यन्तम् ) ।',
 'revertmerge' => 'पृथक्क्रियताम्',
+'mergelogpagetext' => 'अतिनूतनविलीनस्य आवली अधो दत्ता यस्य इतिहासः अन्यस्मिन् अस्ति ।',
 
 # Diffs
 'history-title' => '"$1" इत्येतस्य आवर्तनेतिहासः :',
+'difference-title' => '"$1" इत्यस्य अवतरणमध्ये व्यत्यासः ।',
+'difference-title-multipage' => '"$1" तथा "$2" पुटयोः मध्ये व्यत्यासः ।',
+'difference-multipage' => 'पुटेषु व्यत्यासः ।',
 'lineno' => 'पंक्तिः $1:',
 'compareselectedversions' => 'चितानाम् आवृत्तीनां तोलनं क्रियताम्',
+'showhideselectedversions' => 'चितावतरणानि दर्शयतु/गोपयतु ।',
 'editundo' => 'निष्क्रियताम्',
+'diff-multi' => '({{PLURAL:$2|योजकेन|$2 योजकैः}} कृता {{PLURAL:$1|मध्यमा आवृत्तिः|$1 मध्यमा आवृत्तयः}} न दर्शिताः ।)',
+'diff-multi-manyusers' => '({{PLURAL:$2|योजकेन|$2 योजकैः}} कृता {{PLURAL:$1|मध्यमा आवृत्तिः|$1 मध्यमा आवृत्तयः}} न दर्शिताः ।)',
 
 # Search results
 'searchresults' => 'अन्वेषणस्य फलितानि',
@@ -1070,7 +1223,10 @@ $2
 'searchresulttext' => '{{SITENAME}} इत्यस्मिन् अन्वेषणे सहाय्यार्थम् [[{{MediaWiki:Helppage}}|{{int:help}}]] इत्येतत् पश्यतु ।',
 'searchsubtitle' => 'भवान् \'\'\'[[:$1]]\'\'\'([[Special:Prefixindex/$1|सर्वाणि "$1" इत्यस्माद् आरभमन्तः पृष्ठाणि]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|सर्वाणि "$1" इत्येतत्प्रति संबद्धानि पृष्ठाणि]]) इत्यस्य कृते अन्विष्टवान्।',
 'searchsubtitleinvalid' => "भवता '''$1''' इत्यस्य कृते अन्वेषणं कृतम्",
+'toomanymatches' => 'अत्यधिकाः मेलाः प्रत्यागताः । अन्यप्रश्नेन यतताम् ।',
+'titlematches' => 'पुटशीर्षिकामेलाः ।',
 'notitlematches' => 'न कस्यापि पृष्ठस्य शीर्षकम् अस्य समम्।',
+'textmatches' => 'पुटपाठस्य मेलाः',
 'notextmatches' => 'न कस्यापि पृष्ठस्य पाठः अस्य सममस्ति',
 'prevn' => 'प्राक्तनानि {{PLURAL:$1|$1}}',
 'nextn' => 'अग्रिमाणि {{PLURAL:$1|$1}}',
@@ -1078,8 +1234,11 @@ $2
 'nextn-title' => 'प्राक्तन-{{PLURAL:$1|फलितम्| फलितानि}}',
 'shown-title' => 'प्रत्येकस्मिन् पृष्ठे $1 {{PLURAL:$1|फलितम्|फलितानि}} दर्श्यताम्',
 'viewprevnext' => 'दर्श्यताम् ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'अन्वेषणस्य विकल्पाः ।',
 'searchmenu-exists' => 'अस्मिन् विकिमध्ये "[[:$1]]"नामकं पृष्ठं विद्यते।',
 'searchmenu-new' => "'''अस्यां विक्यां \"[[:\$1]]\" इति पृष्ठं सृज्यताम्!'''",
+'searchhelp-url' => 'Help: साहाय्यम् : आधेयाः ।',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|एतदुपसर्गयुक्तपुटं पश्यतु ]]',
 'searchprofile-articles' => 'आन्तर्यम्',
 'searchprofile-project' => 'सहायता प्रकल्पपृष्ठानि च',
 'searchprofile-images' => 'बहुमाध्यमः',
@@ -1092,6 +1251,7 @@ $2
 '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-redirect' => '($1 इत्यत्र अनुप्रेषितम्)',
 'search-section' => '(विभागः $1)',
 'search-suggest' => 'किं भवतः आशयः एवमस्ति : $1',
@@ -1100,8 +1260,13 @@ $2
 'search-interwiki-more' => '(अधिकानि)',
 'search-mwsuggest-enabled' => 'उपक्षेपेभ्यः सह',
 'search-mwsuggest-disabled' => 'नात्र उपक्षेपाः',
+'search-relatedarticle' => 'सम्बद्धानि ।',
+'mwsuggest-disable' => 'निष्क्रियाः AJAX सूचनाः ।',
+'searcheverything-enable' => 'सर्वनामावकाशे अन्विषतु ।',
 'searchrelated' => 'सम्बद्धानि',
 'searchall' => 'सर्वाणि',
+'showingresults' => "निम्नगतक्रमाङ्कस्य '''$2''' तः आरभ्य अधिकतमं परिणामः'''$1''' {{PLURAL:$1| दर्शितः}}।",
+'showingresultsnum' => "निम्नगतक्रमाङ्क'''$2'''तः आरभ्य अधिकतमः '''$3''' परिणामः {{PLURAL:$3|दर्शितः}}।",
 'showingresultsheader' => "'''$4''' इत्येतस्य {{PLURAL:$5|'''$3'''स्य '''$1'''  फलितम्|'''$3'''स्य '''$1 - $2'''  फलितानि}}",
 'nonefound' => "'''सूचना''': स्वतः अत्र केषुचिदेव नामाकाशेषु अन्वेषणं क्रियते।
 
@@ -1125,41 +1290,62 @@ $2
 'qbsettings-none' => 'नास्ति',
 'qbsettings-fixedleft' => 'बामे स्थापितः',
 'qbsettings-fixedright' => 'दक्षिणे स्थापितः',
+'qbsettings-floatingleft' => 'वामप्लवनम् ।',
+'qbsettings-floatingright' => 'दक्षिणे प्लवनम् ।',
+'qbsettings-directionality' => 'निश्चितम् । ते भाषालिप्याः दिशात्मकतानुसारं भवति ।',
 
 # Preferences page
 'preferences' => 'इष्टतमानि',
 'mypreferences' => 'मम इष्टतमानि',
 'prefs-edits' => 'सम्पादनानां सख्याः',
 'prefsnologin' => 'नैव प्रविष्ट',
+'prefsnologintext' => 'वरीयतां परिवर्तयितुं भवता <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}नामाभिलेखः]</span> करणियः।',
 'changepassword' => 'कूटशब्दः परिवर्त्यताम्',
 'prefs-skin' => 'त्वक्',
 'skin-preview' => 'प्राग्दृश्यम्',
 'datedefault' => 'वरीयांसि नास्ति',
+'prefs-beta' => 'आवर्णलक्षणानि ।',
 'prefs-datetime' => 'दिनांक तथा समय',
+'prefs-labs' => 'प्रयोगशालालक्षणानि ।',
+'prefs-user-pages' => 'योजकपुटानि ।',
 'prefs-personal' => 'योजकः व्यक्तिरेखा',
 'prefs-rc' => 'सद्योजातानि परिवर्तनानि',
 'prefs-watchlist' => 'दृष्टि सूची',
 'prefs-watchlist-days' => 'दृष्टि सूची दर्शनार्थे  दिवसानि',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'अधिकतमानि $1 {{PLURAL:$1|दिनानि}}',
+'prefs-watchlist-edits' => 'विस्तृतावलोकनावल्यां प्रदर्शयितुम् अत्यधिकपरिवर्तनानि ।',
 'prefs-watchlist-edits-max' => 'अधिकतम संख्या: १०००',
+'prefs-watchlist-token' => 'अवलोकनावल्याः प्रतीकः ।',
 'prefs-misc' => 'विविधः',
 'prefs-resetpass' => 'कूटशब्दः परिवर्त्यताम्',
+'prefs-changeemail' => 'विद्युन्मानपत्रसङ्केतं परिवर्तयतु ।',
+'prefs-setemail' => 'विद्युन्मानपत्रसङ्केतं योजयतु ।',
 'prefs-email' => 'इमेल वैकल्पिकाः',
 'prefs-rendering' => 'स्वरुपः',
 'saveprefs' => 'संरक्ष्यताम्',
 'resetprefs' => 'असंरक्षितानि परिवर्तनानि विलुप्यन्ताम्',
 'restoreprefs' => 'समग्राः व्यवस्थादय व्यवस्थानुसारं पुनः संरक्ष्यताम्',
 'prefs-editing' => 'सम्पादनम्',
+'prefs-edit-boxsize' => 'सम्पादनकोष्ठस्य आकारः ।',
 'rows' => 'पंक्ति',
 'columns' => 'अध: पंक्त्याः',
 'searchresultshead' => 'अन्वेषणम्',
 'resultsperpage' => 'प्रति पृष्ट हिट्स:',
+'stub-threshold' => '<a href="#" class="stub">आधारानुबन्धानां </a>अधिकतमाकारः ।',
 'stub-threshold-disabled' => 'निष्क्रियः',
 'recentchangesdays' => 'दिवसानि पर्यन्तो सद्यावधि-परिवर्तनानि दृश्यतु:',
 'recentchangesdays-max' => 'अधिकतम $1 {{PLURAL:$1|दिवसः|दिवसानि}}',
 'recentchangescount' => 'सम्पादन संख्यकानि व्यवस्थानुसारेण दृश्यतु:',
+'prefs-help-recentchangescount' => 'अत्र सद्यः परिवर्तनानि, पुटेतिहासाः, प्रवेशाः च अन्तर्गताः ।',
+'prefs-help-watchlist-token' => 'अत्र रहस्यकुञ्चिकया पूरणेन भवतः नीरीक्षावल्यां RSS पूरितं भवति । रहस्यकुञ्चिकां यः जानाति तेन भवतः निरीक्षावली दृष्टुं शक्यते । अतः कृपया सुरक्षमौल्यं चिनोतु । अत्र यादृच्छया निर्मितं मौल्यं भवान्  $1 द्वारा पश्यति ।',
+'savedprefs' => 'आद्यताः संरक्षिताः ।',
 'timezonelegend' => 'समय मण्डल:',
 'localtime' => 'स्थानीय समय:',
+'timezoneuseserverdefault' => 'विकिनिश्चितं ($1) उपयुज्यताम् ।',
+'timezoneuseoffset' => 'अन्ये (समयान्तरं निर्दिशतु )',
+'timezoneoffset' => 'समयान्तरम् ¹',
+'servertime' => 'वितारकसमयः ।',
+'guesstimezone' => 'जालदर्शिकातः पूरयतु ।',
 'timezoneregion-africa' => 'कालद्वीप',
 'timezoneregion-america' => 'अमेरिका',
 'timezoneregion-antarctica' => 'अंटार्कटिका',
@@ -1170,8 +1356,18 @@ $2
 'timezoneregion-europe' => 'यूरोप',
 'timezoneregion-indian' => 'हिंद महासागर',
 'timezoneregion-pacific' => 'प्रशांत महासागर',
+'allowemail' => 'अन्योपयोजकानां विद्युन्मानसङ्केतं निष्कियं करोतु ।',
+'prefs-searchoptions' => 'अन्वेषणविकल्पाः ।',
+'prefs-namespaces' => 'नामाकाशः :',
+'defaultns' => 'अन्यथा एतेषु नामाकाशेषु अन्विषतु ।',
 'default' => 'यदभावे',
 'prefs-files' => 'सञ्चिका',
+'prefs-custom-css' => 'सि.एस्.एस्.रचयतु ।',
+'prefs-custom-js' => 'जावालिपिं रचयतु ।',
+'prefs-common-css-js' => 'सर्वावरणानां कृते विभक्त सि.एस्.एस्./ जावालिपिः ।',
+'prefs-reset-intro' => 'आद्यतानां पुनर्निदेशार्थम् एतत्पुटम् उपयोक्तुं शकोति । एतत् अकृतं न भवति ।',
+'prefs-emailconfirm-label' => 'विद्युन्मानसङ्केतस्य दृढीकरणम् ।',
+'prefs-textboxsize' => 'सम्पादनकोष्ठस्य आकारः ।',
 'youremail' => 'ईपत्रसङ्केतः',
 'username' => 'योजकनामन्:',
 'uid' => 'प्रयोक्तृ-क्रमांकः :',
@@ -1179,6 +1375,8 @@ $2
 'prefs-registration' => 'पंजीकरण कालः:',
 'yourrealname' => 'वास्तविकं नाम:',
 'yourlanguage' => 'भाषा:',
+'yourvariant' => 'भाषासामग्रीणां संस्करणम् ।',
+'prefs-help-variant' => ' विक्यां प्रदर्शितुं भवति ।',
 'yournick' => 'नूतनाः हस्ताक्षराः:',
 'prefs-help-signature' => 'संभाषणपृष्ठगताः संवादाः "<nowiki>~~~~</nowiki>" इति लिखित्वा हस्ताक्षरोपेताः कर्त्तव्याः। एतानि चिह्नानि पृष्ठरक्षणपश्चात् भवतः हस्ताक्षरान् समयमुद्रां च प्रदर्शयिष्यन्ति।',
 'badsig' => 'अमान्याः (त्रुटिपूर्णाः) हि एते अपक्वाः हस्ताक्षराः।
 'gender-unknown' => 'अनिर्दिष्टम्',
 'gender-male' => 'पुरुष',
 'gender-female' => 'स्त्री',
+'prefs-help-gender' => 'वैकल्पिकः : अयं तन्त्रांशः लिङ्गानुसारसम्बोधनस्य उपयोजकः ।',
 'email' => 'विद्युत्पत्रव्यवस्था',
+'prefs-help-realname' => 'निजनामधेयस्य उल्लेखः आवश्यकः नास्ति । 
+यदि ददाति तर्हि अस्य प्रयोगः भवतः योगदानार्थं भवते श्रेयं दातुम् उपयुक्तः भवति ।',
 'prefs-help-email' => 'ईपत्रसङ्केतः अनिवार्यः नास्ति । किन्तु कूटशब्दः विस्मर्यते चेत् तस्य परिवर्तनाय अवश्यकः भवति ।',
 'prefs-help-email-others' => 'अन्ये योजकाः ईपत्रमाध्यमेन भवतः सम्पर्कं यथा कुर्युः तथा भवदीये योजकपृष्ठे सम्भाषणपृष्ठे वा सम्पर्कतन्तुः योजयितुं शक्यः ।
 भवतः सम्पर्कं कृतवद्भिः योजकैः भवदीयः ईपत्रसङ्केतः अभिज्ञातः न भवति ।',
+'prefs-help-email-required' => 'विद्युन्मानपत्रसङ्केतः आवश्यकः ।',
+'prefs-info' => 'मूलसूचनाः ।',
+'prefs-i18n' => 'अन्ताराष्ट्रिकरणम् ।',
 'prefs-signature' => 'हस्ताक्षर',
+'prefs-dateformat' => 'दिनाङ्कस्य प्रारूपः',
+'prefs-timeoffset' => 'समयान्तरम् ।',
+'prefs-advancedediting' => 'उन्नतविकल्पाः',
+'prefs-advancedrc' => 'उन्नतविकल्पाः',
+'prefs-advancedrendering' => 'उन्नतविकल्पाः',
+'prefs-advancedsearchoptions' => 'उन्नतविकल्पाः',
+'prefs-advancedwatchlist' => 'उन्नतविकल्पाः',
+'prefs-displayrc' => 'प्रदर्शनविकल्पाः',
+'prefs-displaysearchoptions' => 'प्रदर्शनविकल्पाः',
+'prefs-displaywatchlist' => 'प्रदर्शनविकल्पाः',
+'prefs-diffs' => 'अन्तरम्',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'प्रयुक्तः विद्युन्मानपत्रसङ्केतः मानितः ।',
+'email-address-validity-invalid' => 'मान्यः विद्युन्मानपत्रसङ्केतः योजनीयः ।',
 
 # User rights
+'userrights' => 'योजकाधिकारस्य प्रबन्धनम् ।',
+'userrights-lookup-user' => 'योजकसमूहं प्रबन्धयतु ।',
+'userrights-user-editname' => 'योजकनाम योजयतु ।',
+'editusergroup' => 'योजकसमूहं सम्पादयतु ।',
+'editinguser' => "'''[[User:$1|$1]]''' $2 इति योजकस्य योजकाधिकारः परिवर्त्यते ।",
+'userrights-editusergroup' => 'योजकसमूहं सम्पादयतु ।',
+'saveusergroups' => 'योजकसमूहं संरक्षतु ।',
+'userrights-groupsmember' => 'अस्य सदस्यः  ।',
+'userrights-groupsmember-auto' => 'अस्य निश्चितसदस्यः ।',
+'userrights-groups-help' => 'अस्य सदस्यस्य समूहसदस्यत्वं परिवर्तयितुं शक्यते । 
+* मञ्जूषा अङ्किता चेत् योजकः अस्य समूहस्य सदस्यः अस्ति ।
+* मञ्जूषा अनङ्किता चेत् योजकः अस्य समूहस्य सदस्यः न 
+* कदाचित् भवता समूहः योजितः चेत् अपनेतुं नैव शक्नोति इति * चिह्नं सूचयति ।',
 'userrights-reason' => 'कारणम् :',
+'userrights-no-interwiki' => 'अन्यविकिषु योजकाधिकारं सम्पादयितुं ते अनुमतिः नास्ति ।',
+'userrights-nodatabase' => '$1 मूलपाठाः न सन्ति अथवा स्थानीयाः ।',
+'userrights-nologin' => '[[Special:UserLogin|log in]] प्रशासकस्थानेन प्रविश्य योजकाधिकारान् निर्देष्टुं शक्नोति ।',
+'userrights-notallowed' => 'योजकाधिकारान् अपनेतुं ते स्थानस्य अनुमतिः नास्ति ।',
+'userrights-changeable-col' => 'परिवर्तनार्हाः समूहाः ।',
+'userrights-unchangeable-col' => 'परिवर्तनार्हाः समूहाः ।',
 
 # Groups
+'group' => 'समूहः :',
 'group-user' => 'योजकः',
+'group-autoconfirmed' => 'स्वदृढितयोजकाः ।',
+'group-bot' => 'स्वयं सक्रियाः ।',
 'group-sysop' => 'प्रबंधकाः',
+'group-bureaucrat' => 'स्वयम् अधिकारिणः ।',
+'group-suppress' => 'अलक्ष्यम् ।',
 'group-all' => '(सर्वे)',
 
 'group-user-member' => '{{GENDER:$1|योजक}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|स्वस्थानदृढितः योजकः}}',
+'group-bot-member' => '{{GENDER:$1|स्वयं सक्रियः}}',
+'group-sysop-member' => '{{GENDER:$1|प्रशासकः}}',
+'group-bureaucrat-member' => '{{GENDER:$1|स्वयम् अधिकारी}}',
+'group-suppress-member' => '{{GENDER:$1|अलक्ष्यम्}}',
 
 'grouppage-user' => '{{ns:project}}:योजक',
+'grouppage-autoconfirmed' => '{{ns:project}}: स्वयंदृढितयोजकाः ।',
+'grouppage-bot' => '{{ns:project}}: स्वयंसक्रियाः।',
 'grouppage-sysop' => '{{ns:project}}:प्रचालकाः',
+'grouppage-bureaucrat' => '{{ns:project}}: स्वयम् अधिकारिणः ।',
+'grouppage-suppress' => '{{ns:project}}: अक्ष्यम् ।',
+
+# Rights
+'right-read' => 'पुटानि पठतु ।',
+'right-edit' => 'पुटसम्पादनं करोतु ।',
+'right-createpage' => 'पुटनिर्माणं करोतु ।(यानि चर्च्यानि न सन्ति)',
+'right-createtalk' => 'चर्च्यपुटानां निर्माणं करोतु ।',
+'right-createaccount' => 'नूतनयोजकस्थानं निर्मातु ।',
+'right-minoredit' => 'सम्पादनं लघुचिह्नया निर्दिशतु ।',
+'right-move' => 'पुटं चालयतु ।',
+'right-move-subpages' => 'उपपुटैः सह पुटं चालयतु ।',
+'right-move-rootuserpages' => 'मूलयोजकपुटानि चालयतु ।',
+'right-movefile' => 'सञ्चिकाः चालयतु ।',
+'right-suppressredirect' => 'पुटचालनावसरे मूलपुटेभ्यः पुनर्निदेशं न सृजतु ।',
+'right-upload' => 'सञ्चिकाः उत्तारयतु ।',
+'right-reupload' => 'स्थितसञ्चिकाः पुनर्लिखतु ।',
+'right-reupload-own' => 'एकेन उत्तारितसञ्चिकाः पुनर्लिखतु ।',
+'right-reupload-shared' => 'विभक्तमाध्यमकोशगतसञ्चिकाः अतिसञ्चरतु ।',
+'right-upload_by_url' => 'अन्तर्जालस्थानात् सञ्चिकाः उत्तारयतु ।',
+'right-purge' => 'दृढतारहितपुटस्य क्षेत्राधारं पुनातु ।',
+'right-autoconfirmed' => 'अल्परक्षितपुटनि सम्पादयतु ।',
+'right-bot' => 'स्वचालितप्रक्रियाः इव उपचारितः भवतु ।',
+'right-nominornewtalk' => 'चर्चापुटानां लघुसम्पादनं न भवतु । नूतनसन्देशान् चोदयतु ।',
+'right-apihighlimits' => 'API प्रश्नेषु उन्नतसीमम् उपयोजयतु ।',
+'right-writeapi' => 'श्वेतं API उपयोगः ।',
+'right-delete' => 'पुटानि परिमार्जयतु ।',
+'right-bigdelete' => 'दीर्घेतिहासयुक्तपुटानि परिमार्जयतु ।',
+'right-deletelogentry' => 'निर्दिष्टनामाभिलेकप्रवेशं परिमार्जयतु अपरिमार्जयतु च ।',
+'right-deleterevision' => 'निर्दिष्टावरतरणस्य पुटानि अपमर्जतु, अनपमर्जतु ।',
+'right-deletedhistory' => ' तत्सम्बद्धपाठैः विनाअपमर्जितेतिहासप्रवेशस्य दर्शनम् ।',
+'right-deletedtext' => 'अपमर्जितावतरणेषु परिवर्तनं, अपमर्जितपाठान् च अवलोकयतु ।',
+'right-browsearchive' => 'अपमर्जितपुटानि अन्विषतु ।',
+'right-undelete' => 'पुटम् अनपमर्जतु ।',
+'right-suppressrevision' => 'प्रशासकेभ्यः सङ्गुप्तावतरणानि पुनरालोक्य पुनरानयतु ।',
+'right-suppressionlog' => 'स्वायत्तनामाबिलेखं पश्यतु ।',
+'right-block' => 'अन्ययोजकान् सम्पादनेन अवरोधतु ।',
+'right-blockemail' => 'योजकस्य विद्युन्मानसन्देशप्रेषणम् अवरोधतु ।',
+'right-hideuser' => 'योजकनाम अवरोधतु । तेन सर्वजनोपयोगात् गोपयतु ।',
+'right-ipblock-exempt' => 'IP अवरोधं मार्गयतु, स्वयम् अवरोधः, निर्दिष्टावरोधः ।',
+'right-proxyunbannable' => 'अन्येषां स्वयंचालितावरोधं परिहरतु ।',
+'right-unblockself' => 'स्वयम् अनवरोधं करोतु ।',
+'right-protect' => 'सुरक्षास्तरान् परिवर्तयतु । सुरक्षितपुटानि सम्पादयतु ।',
+'right-editprotected' => 'सुरक्षितपुटानि सम्पादयतु ।',
+'right-editinterface' => 'योजकमाध्यमं सम्पादयतु ।',
+'right-editusercssjs' => 'अन्ययोजकान् सम्पादयतु । सि.एस्.एस्. जावलालिपिसञ्चिकाः च ।',
+'right-editusercss' => 'अन्ययोजकान् सम्पादयतु सि.एस्.एस्. सञ्चिकाः ।',
+'right-edituserjs' => 'अन्ययोजकान सम्पादयतु जावालिपिसञ्चिकाः ।',
+'right-rollback' => 'अन्तिमयोजकस्य सम्पादनं शीघ्रं प्रचालयतु यः निर्दिष्टपुटं सम्पादितवान् ।',
+'right-markbotedits' => 'प्रतिचालितसम्पादनानि स्वचालितसम्पदनं इव  अङ्कितानिकरोतु ।',
+'right-noratelimit' => 'मूल्यनियत्या प्रभावितं नस्यात् ।',
+'right-import' => 'अन्यविकितः पुटानाम् आयातं करोतु ।',
+'right-importupload' => 'उत्तारितसञ्चिकातः पुटानि आयातानि करोतु ।',
+'right-patrol' => 'अन्येषां सम्पादनम् आरक्षितमिव अङ्कयतु ।',
+'right-autopatrol' => 'कस्यचित् स्वस्य सम्पादनानि आरक्षितमिव स्वयम् अङ्कयतु ।',
+'right-patrolmarks' => 'आरक्षणाङ्कितानां सद्यः परिवर्तनानि अवलोकयतु ।',
+'right-unwatchedpages' => 'अपरीक्षितपुटानाम् आवलीम् अवलोकयतु ।',
+'right-mergehistory' => 'पुटेतिहासं विलीनं करोतु ।',
+'right-userrights' => 'सर्वयोजकाधिकारं सम्पादयतु ।',
+'right-userrights-interwiki' => 'योजकाधिकारान् अन्यविकिषु सम्पादयतु ।',
+'right-siteadmin' => 'पाठमूलस्य निशेधनम् अनिशेधनं च ।',
+'right-override-export-depth' => 'पञ्चस्तरपर्यन्तं संलग्नपुटानि निर्यातानि करोतु ।',
+'right-sendemail' => 'अन्ययोजकेभ्यः विद्युन्मानपत्राणि प्रेषयतु ।',
+'right-passwordreset' => 'निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।',
 
 # User rights log
 'rightslog' => 'प्रयोक्तृ-अधिकार-सूचिका',
+'rightslogtext' => 'अयं योजकाधिकारस्य परिवर्तनकुञ्चः ।',
+'rightslogentry' => '$2 - $3 तः $1 सामूहिकसदस्यत्वं परिवर्तितम् ।',
+'rightslogentry-autopromote' => '$2 तः $3 स्वयम् उन्नतीकृतम् ।',
 'rightsnone' => '(कतम)',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'एतत्पुटं पठतु ।',
 'action-edit' => 'इदं पृष्ठं सम्पाद्यताम्',
+'action-createpage' => 'पुटानि सृजतु ।',
+'action-createtalk' => 'चर्चापुटानि सृजतु ।',
+'action-createaccount' => 'नूतनयोजकस्थानं निर्मातु ।',
+'action-minoredit' => 'एतत्सम्पादनं लघु इति अङ्कयतु ।',
+'action-move' => 'एतत्पुटं चालयतु ।',
+'action-move-subpages' => 'एतत्पुटम् अस्य उपपुटानि च चालयतु ।',
+'action-move-rootuserpages' => 'मूलयोजकपुटानि चालयतु ।',
+'action-movefile' => 'एतां सञ्चिकां चालयतु ।',
+'action-upload' => 'एतां सञ्चिकाम् उत्तारयतु ।',
+'action-reupload' => 'स्थितसञ्चिकां पुनर्लिखतु ।',
+'action-reupload-shared' => 'विभक्तकोशे एतां सञ्चिकां पुनर्लिखतु ।',
+'action-upload_by_url' => 'अन्तर्जालस्थानतः एतां सञ्चिकाम् उत्तारयतु ।',
+'action-writeapi' => 'श्वेतं API उपयोगः ।',
+'action-delete' => 'एतत्पुटं अपमर्जयतु ।',
+'action-deleterevision' => 'एतदवतरणम् अपमर्जतु ।',
+'action-deletedhistory' => 'अस्य पुटस्य अपमर्जितेतिहासम् अवलोकयतु ।',
+'action-browsearchive' => 'अपमर्जितपुटानि अन्विषतु ।',
+'action-undelete' => 'एतत्पुटम् अनपमर्जयतु ।',
+'action-suppressrevision' => 'सङ्गुप्तावतरणं पुनःपश्यतु पुनर्नयतु च ।',
+'action-suppressionlog' => 'एतत् स्वायत्तपुटम् अवलोकयतु ।',
+'action-block' => 'अन्ययोजकान् सम्पादनेन अवरोधतु ।',
+'action-protect' => 'अस्य पुटस्य सुरक्षास्तरं परिवर्तयतु ।',
+'action-rollback' => 'अन्तिमयोजकस्य सम्पादनं शीघ्रं प्रचालयतु यः निर्दिष्टपुटं सम्पादितवान् ।',
+'action-import' => 'अन्यविकितः एतत्पुटम् आयातयतु ।',
+'action-importupload' => 'उत्तारितसञ्चिकातः पुटानि आयातानि करोतु ।',
+'action-patrol' => 'अन्येषां सम्पादनम् आरक्षितमिव अङ्कयतु ।',
+'action-autopatrol' => 'भवतः सम्पादनम् आरक्षितम् इति अङ्कयतु ।',
+'action-unwatchedpages' => 'अपरीक्षितपुटानाम् आवलीम् अवलोकयतु ।',
+'action-mergehistory' => 'पुटेतिहासं विलीनं करोतु ।',
+'action-userrights' => 'सर्वयोजकाधिकारं सम्पादयतु ।',
+'action-userrights-interwiki' => 'योजकाधिकारान् अन्यविकिषु सम्पादयतु ।',
+'action-siteadmin' => 'पाठमूलस्य निशेधनम् अनिशेधनं च ।',
+'action-sendemail' => 'विद्युन्मानपत्राणि प्रेषयतु ।',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|परिवर्तनम्|परिवर्तनानि}}',
@@ -1242,16 +1593,21 @@ $2
 'minoreditletter' => '(लघु)',
 'newpageletter' => '(नवीनम्)',
 'boteditletter' => '(बोट्)',
+'number_of_watching_users_pageview' => '[$1 अवलोकयति {{PLURAL:$1|योजकः|योजकाः}}]',
+'rc_categories' => 'वर्गान् नियतीकरोतु ।',
 'rc_categories_any' => 'कश्चित्',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} परिवर्तनपश्चात् ।',
 'newsectionsummary' => '/* $1 */ नवीन विभागः',
 'rc-enhanced-expand' => 'विवरणानि दर्श्यन्ताम् (जावालिपिः अपेक्ष्यते)',
 'rc-enhanced-hide' => 'विवरणानि गोप्यन्ताम्',
+'rc-old-title' => 'मूलरूपेण $1 इति रचितम् ।',
 
 # Recent changes linked
 'recentchangeslinked' => 'पृष्ठसम्बद्धानि परिवर्तनानि',
 'recentchangeslinked-feed' => 'पृष्ठ-सम्बन्धितानि परिवर्तनानि',
 'recentchangeslinked-toolbox' => 'पृष्ठसम्बद्धानि परिवर्तनानि',
 'recentchangeslinked-title' => '"$1" इत्यस्मिन् जातानि परिवर्तनानि',
+'recentchangeslinked-noresult' => 'निर्दिष्टे अवधौ सम्बद्धे पृष्ठे कोपि परिवर्तनं न जातम् ।',
 'recentchangeslinked-summary' => "एषा विशेषपृष्ठसम्बद्धेषु पॄष्ठेषु अथवा वर्गविशेषे अन्तर्भूतेषु पृष्ठेषु सद्योजातानां परिवर्तनानाम् आवलिः।
 
 [[Special:Watchlist|भवतः अवेक्षणसूच्यां]] विद्यमानानि पृष्ठानि '''स्थूलाक्षरैः''' दर्शितानि।",
 # Upload
 'upload' => 'सञ्चिका आरोप्यताम्',
 'uploadbtn' => 'सञ्चिका आरोप्यताम्',
+'reuploaddesc' => 'उत्तारणम् अपकर्षतु उत्तरणप्रपत्रम् आगच्छतु च ।',
+'upload-tryagain' => 'उन्नतीकृतं सञ्चिकाविवरणं समर्पयतु ।',
+'uploadnologin' => 'न प्रविष्टम्',
+'uploadnologintext' => 'सञ्चिकारोपणाय [[Special:UserLogin|अन्तःप्रवेशः]] अपेक्षितः ।',
+'upload_directory_missing' => 'उत्तारणनिदेशनं ($1) नष्टम्, जालवितारकेन सर्जितुं न शक्यते ।',
+'upload_directory_read_only' => 'उत्तारणनिदेशनं ($1) तु जालवितारकेन लेखनयोग्यं नास्ति ।',
+'uploaderror' => 'उत्तरणदोषः ।',
+'upload-recreate-warning' => "''' पूर्वसूचना ''' तन्नामयुक्ता सञ्चिका अपमर्जिता अथवा चालिता ।",
+'uploadtext' => "सञ्चिकाः उत्तर्तुम् अधः सूचितरूपणि उपयोजयतु ।
+To 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]].
+
+To include a file in a page, use a link in one of the following forms:
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' to use the full version of the file
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></tt>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description
+* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>''' for directly linking to the file without displaying the file",
+'upload-permitted' => 'अनुमतसञ्चिकाभेदाः $1.',
+'upload-preferred' => 'अनुमतसञ्चिकाभेदाः $1.',
+'upload-prohibited' => 'अनुमतसञ्चिकाभेदाः $1.',
+'uploadlog' => 'उत्तरणस्य सूची ।',
 'uploadlogpage' => 'आरोपितानां सूची',
+'uploadlogpagetext' => 'अधः सद्यः काले उत्तारितसञ्चिकानाम् आवली अस्ति ।
+अधिकदृश्यविवरणार्थम् एतत् पश्यतु [[Special:NewFiles|gallery of new files]]',
 'filename' => 'सञ्चिकानाम',
 'filedesc' => 'सारांशः :',
 'fileuploadsummary' => 'संग्रहः :',
+'filereuploadsummary' => 'सञ्चिकापरिवर्तनानि ।',
+'filestatus' => 'प्रतिकृत्यधिकारस्य स्थितिः ।',
 'filesource' => 'मूल:',
 'uploadedfiles' => 'आरोपिताः सञ्चिकाः',
+'ignorewarning' => 'पूर्वसूचनां निर्लक्ष्य सञ्चिकाः कथञ्चित् संरक्षतु ।',
+'ignorewarnings' => 'पूर्वसूचनाः निर्लक्षतु ।',
+'minlength1' => 'सञ्चिकानाम न्यूनतिन्यूनम् एकाक्षरं भवेत् ।',
+'illegalfilename' => 'अस्यां "$1" सञ्चिकानाम्नि सङ्ख्या अस्ति । अत्र सा निषिद्धा । सञ्चिकां पुनः नामाङ्कयतु ।',
+'filename-toolong' => 'सञ्चिकानाम २४०बैट्स्तः अधिकदीर्घं न भवेत् ।',
+'badfilename' => '"$1" इति सञ्चिकानाम परिवर्तितम् ।',
+'filetype-mime-mismatch' => '".$1" इति सञ्चिकाविस्तारः अपमर्जितया MIME ($2) प्रकारस्य सञ्चिका मेलं न करोति ।',
+'filetype-badmime' => 'MIME प्रकारस्य "$1" सञ्चिकाः उत्तारयितुं नार्हन्ति ।',
+'filetype-bad-ie-mime' => 'जालदर्शिकया सूचितं यत् "$1" सञ्चिका अपायकरिणीसञ्चिका इति । अतः एताम् उत्तारयितुं नैव शक्यते ।',
+'filetype-unwanted-type' => "'''\".\$1\"''' काचित् अनपक्षिता सञ्चिका अस्ति । 
+अपेक्षिता सञ्चिका एषा {{PLURAL:\$3|अस्ति}} \$2।",
+'filetype-banned-type' => '\'\'\'".$1"\'\'\'सञ्चिका {{PLURAL:$4|प्रकारस्य }} अनुमतिः नास्ति ।
+प्रकारसञ्चिकायाः{{PLURAL:$3|}} अनुमतिरस्ति  $2।',
+'filetype-missing' => 'अस्याः सञ्चिकायाः विस्तारः नास्ति । (उदाहरणम् ".jpg")।',
+'empty-file' => 'समर्पिता सञ्चिका रिक्ता अस्ति ।',
+'file-too-large' => 'संयोजिता शीर्षिका सुदीर्घा अस्ति ।',
+'filename-tooshort' => 'सञ्चिकानाम अतीव ह्रस्वम् अस्ति ।',
+'filetype-banned' => 'ईदृशी सञ्चिका प्रतिबन्धिता ।',
+'verification-error' => 'सञ्चिकापरीक्षायाम् इयं सञ्चिका अनुत्तीर्णा ।',
+'hookaborted' => 'भवतः संस्करणप्रयत्नः विस्तारेण अपसारितः ।',
+'illegal-filename' => 'सञ्चिकानामलेखनं नानुमतः ।',
+'overwrite' => 'वर्तमानसञ्चिकायाः पुनर्लेखनं नानुमतम् ।',
+'unknown-error' => 'अज्ञातदोषः उपगतः ।',
+'tmp-create-error' => 'तत्कालिकसञ्चिकां सृष्टुं नैव शक्यते ।',
+'tmp-write-error' => 'तात्कालिकसञ्चिकायाः दोषसम्पादनम् ।',
+'large-file' => '$1; इयं सञ्चिका $2. तः अधिका दीर्घा न स्यात् इति सूचितम् ।',
+'largefileserver' => 'इयं सञ्चिका वितारकस्य निदेशनात् अधिका दीर्घा अस्ति ।',
+'emptyfile' => 'उत्तारितसञ्चिका रिक्ता इति भाति । 
+सञिकानामाङ्कनकारणं स्यात् ।
+एतां सञ्चिकाम् उत्तारयितुमिच्छति वा इति परिशीलयतु ।',
+'windows-nonascii-filename' => 'एषा विकि विशेषाक्षरयुक्तं सञ्चिकानाम न अनुमन्यते ।',
+'fileexists' => "अनेन सञ्चिकानाम्ना काचित् सञ्चिकास्ति । यदि निश्चयेन न जानाति परिवर्तयितुम् इच्छति तर्हि  '''<tt>[[:$1]]</tt>''' एतत् परिशीलयतु । : [[$1|thumb]]",
+'filepageexists' => "अस्याः सञ्चिकायाः विवरणपुटम् तावत् निर्मितम् एव । '''<tt>[[:$1]]</tt>''', अनेन नाम्ना सद्यः कापि सञ्चिका वर्तते  । 
+लिखितसारांशः विवरणपुटे न आगमिष्यति । 
+ते सारांशः तत्रागन्तुं स्वयं सम्पादयतु । [[$1|thumb]]",
+'fileexists-extension' => "अनेन नाम्ना सदृनामाङ्किता सञ्चिका पूर्वमेव अस्ति । [[$2|thumb]]
+* उत्तर्यमानसञ्चिकायाः नाम  '''<tt>[[:$1]]</tt>'''
+* वर्तमानसञिकायाः नाम '''<tt>[[:$2]]</tt>'''
+* अन्यनाम चिनोतु ।",
+'fileexists-thumbnail-yes' => "एषा सञ्चिका बृहच्चित्रस्य क्षीणाकारा इति भाति । ''(उङ्गुष्टाकारः)''  [[$1|thumb]]
+'''<tt>[[:$1]]</tt>''' सञ्चिकां पश्यतु । 
+यदि परिक्षिता सञ्चिका एतादृशाकरस्य भवति तर्हि उत्तारणस्य आवश्यकता नास्ति ।",
+'file-thumbnail-no' => "सञ्चिकानाम आरभते '''<tt>$1</tt>'''एतस्मात् ।
+न्यूनीकृताकारस्य चित्रम् इति भाति  
+यदि एतच्चित्रं मूलाकारेण अस्ति तर्हि उत्तारयतु अन्यथा न ।",
+'fileexists-forbidden' => 'एदादृशनाम्नः सञ्चिका तावत् पूर्वमेवोपस्थिता । अस्य स्थाने अन्यां नोत्तारयितुं शक्यते । 
+तथापि यदि एतां सञ्चिकाम् उत्तारयितुम् इच्छति तर्हि सञ्चिकायाः नाम परिवर्तयतु ।
+[[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'एतस्य नाम्नः सञ्चिका विभक्तभाण्डारे तावत् अस्ति एव । 
+तथापि यदि एतां सञ्चिकाम् उत्तारयितुम् इच्छति तर्हि अस्याः नामपरिवर्तनं करोतु ।
+[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => 'एषा सञ्चिका तु {{PLURAL:$1|file|files}}: इत्यस्य प्रतिकृतिः ।',
+'file-deleted-duplicate' => 'अस्याः सञ्चिकायाः ([[:$1]]) सादृश्ययुक्ता सञ्चिकातु अपमर्जिता ।
+एतस्याः उत्तारणात् पूर्वं प्राचीनसञ्चिकायाः इतिहासः अवलोकनीयः ।',
+'uploadwarning' => 'उत्तारणस्य पूर्वसूचना ।',
+'uploadwarning-text' => 'अधो दत्तं सञ्चिकाविवरणं संस्कृत्य पुनः यतताम् ।',
+'savefile' => 'सञ्चिकां संरक्षतु ।',
 'uploadedimage' => '"[[$1]]" इत्येतद् आरोपितमस्ति',
-
+'overwroteimage' => '"[[$1]]" इत्यस्य नूतनावतरणम् उत्तारयतु ।',
+'uploaddisabled' => 'सक्रियम् उत्तारयतु ।',
+'copyuploaddisabled' => 'निष्क्रियतः यु.आर्.एल् तः उत्तारयतु  ।',
+'uploadfromurl-queued' => 'ते उत्तारणम् अनुपङ्कौ अस्ति ।',
+'uploaddisabledtext' => 'उत्तारितसञ्चिकाः निष्क्रियाः ।',
+'php-uploaddisabledtext' => 'PHP मध्ये उत्तारितसञ्चिकाः निष्क्रियाः ।',
+'uploadscripted' => 'HTMLयुक्ताः अथवा लिपिसङ्केतयुक्ताः सञ्चिकाः जालदर्शिकया बाधिताः ।',
+'uploadvirus' => 'अस्यां सञ्चिकायां वैराणुः अस्ति । विवरणम् $1',
+'uploadjava' => 'इयं ZIP सञ्चिका अस्यां जावावर्गस्य सञ्चिकाः सन्ति । 
+जावासञ्चिकाः उत्तरणं निषिद्धम् । यतः अनेन सुरक्षाबन्धाः शिथिलाः भवन्ति ।',
+'upload-source' => 'मूलसञ्चिका ।',
+'sourcefilename' => 'मूलसञ्चिकायाः नाम ।',
+'sourceurl' => 'मूलं URL:',
+'destfilename' => 'लक्षितसञ्चिकायाः नाम ।',
+'upload-maxfilesize' => 'सञ्चिकायाः गरिष्ठाकारः ।$1',
+'upload-description' => 'सञ्चिकाविवरणम् ।',
+'upload-options' => 'उत्तारणविकल्पाः ।',
+'watchthisupload' => 'इमां सञ्चिकाम् अवलोकयतु ।',
+'filewasdeleted' => 'अनेन नाम्ना उत्तारिता काचित् सञ्चिका पूर्वमेव अपमर्जिता ।
+ $1 परिशील्य उत्तरणं पुनः उत्तारयतु ।',
+'filename-bad-prefix' => "यस्याः सञ्चिकायाः उत्तारणं कुर्वाणः अस्ति तस्य नाम '''\"\$1\"''' तः आरभते ।  यत् डिज़िटल् क्यामरा द्वारा दत्तम् अस्ति । 
+अस्याः अधिकज्ञानप्रपकं किमपि अन्यत् नाम योजयतु ।",
+'upload-success-subj' => 'सफलम् उत्तारणम् ।',
+'upload-success-msg' => '[$2] तः उत्तारणं सफलम् । तदत्र अस्ति । [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'उत्तारणसमस्या ।',
+'upload-failure-msg' => '[$2]तः उत्तारणे कापिसमस्या आसीत् । 
+$1',
+'upload-warning-subj' => 'उत्तारणस्य पूर्वसूचना ।',
+'upload-warning-msg' => ' [$2] तः उत्तारणे समस्या आसीत् । अस्याः समस्यायाः परिहारार्थम् अत्र गच्छतु  [[Special:Upload/stash/$1|उत्तारणप्रपत्रम्]]',
+
+'upload-proto-error' => 'सदोषः क्रमः ।',
+'upload-proto-error-text' => 'स्वयम् उत्तरणं <code>http://</code> or <code>ftp://</code>. इत्यनेन सह आरब्धः भवति ।',
+'upload-file-error' => 'आन्तरिकः दोषः',
+'upload-file-error-text' => 'वितारके तात्कालिकसञ्चिकानिर्माणावसरे उपगतः आन्तरिकदोषः । 
+सम्पर्कयतु एतम् [[Special:ListUsers/sysop|administrator]]',
+'upload-misc-error' => 'अज्ञातः उत्तारणदोषः ।',
+'upload-misc-error-text' => 'उत्तारणावसरे कश्चन अज्ञातदोषः उपगतः । 
+URL मान्यम् अभिगम्यं वेति परिशील्य पुनः यतताम् ।[[Special:ListUsers/sysop|administrator]]',
+'upload-too-many-redirects' => 'URL अधिकपुनर्निदेशान् अन्तर्गतम् ।',
 'upload-unknown-size' => 'अज्ञात आकार',
+'upload-http-error' => 'कश्चन HTTP दोषः उपगतः $1',
+'upload-copy-upload-invalid-domain' => 'अस्मिन् कोशे प्रतिकृत्युत्तारणम् उपलब्धं नास्ति ।',
+
+# File backend
+'backend-fail-stream' => 'सञ्चिका क्रमगता न $1.',
+'backend-fail-backup' => 'सञ्चिकां प्रतिचयनम् अशक्तम् $1.',
+'backend-fail-notexists' => '$1 सञ्चिका न वर्तते ।',
+'backend-fail-hashes' => 'सञ्चिकादोषः तोलनार्थं न मिलति ।',
+'backend-fail-notsame' => '$1 मध्ये काचित् अज्ञातसञ्चिका पूर्वमेवास्ति ।',
+'backend-fail-invalidpath' => '$1 मान्यः सङ्ग्रहपथः न ।',
+'backend-fail-delete' => '$1 सञ्चिकां परिमर्जितुं नैव शक्यते ।',
+'backend-fail-alreadyexists' => '$1 इति सञ्चिक पूर्वमेव वर्तते ।',
+'backend-fail-store' => '$1 सञ्चिकां $2 मध्ये सङ्ग्रहितुं नैव शक्यते ।',
+'backend-fail-copy' => '$1 सञ्चिकां $2 मध्ये प्रतिकृतिः कर्तुं नैव शक्यते ।',
+'backend-fail-move' => '$1 सञ्चिकां $2 प्रति चालयितुं न शक्यते ।',
+'backend-fail-opentemp' => 'तात्कालिकसञ्चिकाः उद्घाटयितुं नैव शक्यते ।',
+'backend-fail-writetemp' => 'तात्कालिकसञ्चिकायां लेखितुं न शक्यते ।',
+'backend-fail-closetemp' => 'तात्कालिकसञ्चिकां पिधातुं नैव शक्यते ।',
+'backend-fail-read' => '$1 इति सञ्चिकां पठितुं नैव शक्यते ।',
+'backend-fail-create' => '$1 इति सञ्चिकां लेखितुं नैव शक्यते ।',
+'backend-fail-maxsize' => '{{PLURAL:$2|one byte|$2 bytes}}तः अधिकम् अस्ति अतः $1 सञ्चिकां लेखितुं नैव शक्यते ।',
+'backend-fail-readonly' => '"$1" सङ्ग्रहागारान्तः तु सद्यः केवलं पठनार्हः  कारणं दत्तं तु  "\'\'$2\'\'" ।',
+'backend-fail-synced' => '"$1" सञ्चिका आन्तरिकसङ्ग्रहागारन्ते  उपयोगायोग्यस्थितौ न अस्ति ।',
+'backend-fail-connect' => '"$1" सङ्ग्राहागारन्ते सम्पर्कयितुं नैव शक्यते ।',
+'backend-fail-internal' => '"$1"सङ्ग्रहागारन्ते अज्ञातदोषः उपगतः ।',
+'backend-fail-contenttype' => '"$1"मध्ये सङ्ग्रहितुं सञ्चिकायाः प्रकारं निश्चिनोतुं नैव शक्यते ।',
+'backend-fail-batchsize' => '$1 संचिकायाः गणस्य निक्षेपावकाशः प्रदत्तः । {{PLURAL:$1|operation|operations}}; समयनिर्बन्धः $2 {{PLURAL:$2|operation|operations}}.',
+'backend-fail-usable' => 'अपर्यापानुमतिकारणेन अथवा निदेशिकायाः /आधानस्य अभावात्  $1 सञ्चिकां लेखितुं न शक्यते ।',
+
+# File journal errors
+'filejournal-fail-dbconnect' => '"$1" निक्षेपार्थं मूलपाठपत्रिकां सम्पर्कयितुं  न शक्यते ।',
+'filejournal-fail-dbquery' => '"$1"निक्षेपस्य कृते पत्रिकामूलपाठम् उन्नतीकर्तुं नैव शक्यते ।',
+
+# Lock manager
+'lockmanager-notlocked' => '"$1" इत्येतत् उद्घाटयितुं न शक्यते यतः एतत् कीलितं न ।',
+'lockmanager-fail-closelock' => '"$1" निमित्तं सञ्चिकाम् उद्घाटयितुं न शक्यते ।',
+'lockmanager-fail-deletelock' => '"$1"कृते कपाटितसञ्चिकाम् अपमर्जितुं न शक्यते ।',
+'lockmanager-fail-acquirelock' => '"$1"कपाटितुं न शक्यते ।',
+'lockmanager-fail-openlock' => '"$1" निमित्तं सञ्चिकाम् उद्घाटयितुं न शक्यते ।',
+'lockmanager-fail-releaselock' => '"$1"कपाटितुं न शक्यते ।',
+'lockmanager-fail-db-bucket' => ' $1 द्रेणपात्रे कपाटनीयमूलपाठाः अपर्याप्ताः सन्ति ।',
+'lockmanager-fail-db-release' => '$1 मूलपाठेषु कपाटिकाविमोचनं नैव शक्यते ।',
+'lockmanager-fail-svr-acquire' => '$1 वितारके कपाटिकायोजनं न शक्यते ।',
+'lockmanager-fail-svr-release' => '$1 मूलपाठेषु कपाटिकाविमोचनं नैव शक्यते ।',
+
+# ZipDirectoryReader
+'zip-file-open-error' => 'ZIP परिशीलनार्थम् उद्घाटनावसरे कश्चन दोषः सङ्गतः ।',
+'zip-wrong-format' => 'निश्चितसञ्चिका तु सञ्चिका ZIP नैव ।',
+'zip-bad' => 'ZIP सञ्चिका तु दूषिता अथवा अपठनीया अस्ति । 
+सुरक्षार्थं परिशीलयितुं  न शक्यते ।',
+'zip-unsupported' => 'एषा सञिका तु मीडियाविकिना अननुमोदिता ZIP सञ्चिका अस्ति ।
+सुरक्षर्थं सम्यक् परिशील्या न भवति ।',
+
+# Special:UploadStash
+'uploadstash' => 'राशीः उत्तारयतु ।',
+'uploadstash-summary' => 'एतत्पुटम् उत्तारितसञ्चिकानां सम्पर्कं साधयति । विक्याम् एतानि प्रकाशितानि न । योजकः उत्तारितवानपि एताः सञ्चिकाः अदृश्याः सन्ति ।',
+'uploadstash-clear' => 'राशीकृतसञ्चिकाः विशदयतु ।',
+'uploadstash-nofiles' => 'भवान् सञ्चिकाः न राशीकृतवान् ।',
+'uploadstash-badtoken' => 'प्रक्रियाचरणं सफलम् । किन्तु प्रायः ते सम्पादनाधिकारः विनष्टः । पुनः यतताम् ।',
+'uploadstash-errclear' => 'सञ्चिकविशदनं सफलम् ।',
+'uploadstash-refresh' => 'सञ्चिकावलीं संस्करोतु ।',
+'invalid-chunk-offset' => 'अमान्यं चङ्क् आफ्सेट्',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'अभिगमनम् अपलपितम् ।',
+'img-auth-nopathinfo' => 'पथसूची विनष्टा ।
+ते वितारकः सूचनाः प्रेषयितुं संसिद्धः न ।
+एतत् CGI अवलम्बितं स्यात् अपि च img_auth अनुमोदनं न करोति ।
+See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
+'img-auth-notindir' => 'सुदृढितायाम् उत्तारणनिदेशिकायाम् अभ्यर्थितपथः नास्ति ।',
+'img-auth-badtitle' => '"$1"तः मान्यशीर्षिकां निर्मातुं न शक्यते ।',
+'img-auth-nologinnWL' => 'नामाभिलेखेन न प्रविष्टः अपिच $1 तु श्वेतावली न ।',
+'img-auth-nofile' => '"$1" इति सञ्चिका न वर्तते ।',
+'img-auth-isdir' => 'भवान् "$1"निदेशिकाम् अभिगन्तुं यतते ।
+सञ्चिकाभिगमनम् एव अनुमतम् ।',
+'img-auth-streaming' => '"$1"इत्यस्य प्रवाहिनी ।',
+'img-auth-public' => 'स्वायत्तविकितः सञ्चिकाः नेतुम् अयं कार्यक्रमः img_auth.php उपयुज्यते ।
+एषा विकिः सार्वजनिकविकिः इति  दृढिता । 
+वैकल्पिकसुरक्षार्थं img_auth.php अपलपितः । ।',
+'img-auth-noread' => '"$1"पठने योजकस्य अभिगमनं नास्ति ।',
+'img-auth-bad-query-string' => ' URL मध्ये अमान्यं प्रश्नतन्तुः अस्ति ।',
+
+# HTTP errors
+'http-invalid-url' => ' $1 इति अमान्यम् URL ।',
+'http-invalid-scheme' => '"$1"योजनायुक्तं URLs नानुमोदितानि ।',
+'http-request-error' => ' अज्ञातदोषात् HTTP अभ्यर्थनं निष्पलम् ।',
+'http-read-error' => 'HTTP पठनदोषः।',
+'http-timed-out' => 'HTTP अभ्यर्थनं कालातीतम् ।',
+'http-curl-error' => 'दोषाहरणस्य URL: $1',
+'http-host-unreachable' => 'URL प्राप्तुं न शक्यते ।',
+'http-bad-status' => 'HTTP : $1 $2अभ्यर्थने समस्या आसीत् ।',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => 'URL प्राप्तुं न शक्यते ।',
+'upload-curl-error6-text' => 'उपपन्नं URL न प्राप्नोति ।
+द्विटङ्कनेन URLअदोषत्वं क्षेत्रं च परिशीलयतु ।',
+'upload-curl-error28' => 'उत्तारणस्य समयातीतः ।',
+'upload-curl-error28-text' => 'जालक्षेत्रेण प्रतिस्पन्दितुं दीर्घकालः आश्रितः । 
+जालक्षेत्रस्य जीवितं परिशीलयतु । अथवा कञ्चित्कालान्तरेण प्रयतताम् । 
+भवान् न्यूनकार्यव्यस्तकाले प्रयत्नं करोतु ।',
 
 'license' => 'अनुमतिदानम्',
 'license-header' => 'अनुमतिदानम्',
+'nolicense' => 'चियनं नास्ति ।',
+'license-nopreview' => 'पूर्वावलोकनं न मिलति ।',
+'upload_source_url' => '(मान्यं, प्रचारात्मकाभिगमनयुतं URL)',
+'upload_source_file' => ' (ते सङ्गणकस्य सञ्चिका)',
 
 # Special:ListFiles
+'listfiles-summary' => 'एतद्विशेषपुटम् उत्तारितसञ्चिकाः प्रदर्शयति । 
+योजकेन शुद्धाः अतिनूतनं सञ्चिकाः केवलम् अत्र प्रदर्शयति ।',
+'listfiles_search_for' => 'माध्यमनामधेयार्थम् अन्विषतु ।',
 'imgfile' => 'संचिका',
+'listfiles' => 'सञ्चिकावली ।',
+'listfiles_thumb' => 'अंगुष्ठनखाकारम् ।',
 'listfiles_date' => 'दिनाङ्क',
 'listfiles_name' => 'नामन्',
 'listfiles_user' => 'योजक',
 'file-anchor-link' => 'सञ्चिका',
 'filehist' => 'सञ्चिकायाः इतिहासः',
 'filehist-help' => 'सञ्चिका तत्समये कीदृशी आसीदिति द्रष्टुं दिनांकः/समयः नुद्यताम् ।',
+'filehist-deleteall' => 'सर्वान् परिमर्जतु ।',
 'filehist-deleteone' => 'विलोप',
 'filehist-revert' => 'प्रतिनिवर्त्यताम्',
 'filehist-current' => 'सद्योजातम्',
 'filehist-datetime' => 'दिनाङ्कः/समयः',
 'filehist-thumb' => 'अंगुष्ठनखाकारम्',
 'filehist-thumbtext' => '$1 समये विद्यमत्याः आवृत्तेः अंगुष्ठनखाकारम्',
+'filehist-nothumb' => 'अङ्गुष्टनखाकारकं नाश्ति ।',
 'filehist-user' => 'योजकः',
 'filehist-dimensions' => 'आयामाः',
+'filehist-filesize' => 'सञ्चिकाकारः ।',
 'filehist-comment' => 'टिप्पणी',
+'filehist-missing' => 'सञ्चिका विनष्टा ।',
 'imagelinks' => 'संचिका यत्र उपयुक्ता',
 'linkstoimage' => '{{PLURAL:$1|अधोलिखितं पृष्ठं| अधोलिखितानि $1 पृष्ठाणि}} इदं संचिकां प्रति संबंधनं {{PLURAL:$1|करोति| कुर्वन्ति}}।',
+'linkstoimage-more' => '{{PLURAL:$1|$1}} तः अधिकपुटानि अस्यां सञ्चिकायां योज्यन्ते । 
+अधोनिदेशितसूची सञ्चिकाभिः योजनीयपुटानि पश्यति ।{{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठ}} 
+[[Special:WhatLinksHere/$2|पूर्णसूची]] अपि लभ्यते ।',
 'nolinkstoimage' => 'एतद चित्रात् न पृष्ठा सम्बद्धं करोन्ति।',
+'morelinkstoimage' => ' [[Special:WhatLinksHere/$1|more links]] मध्ये सञ्चिकामवलोकयतु ।',
+'linkstoimage-redirect' => '$1 (सञ्चिका पुनर्निदेशिता) $2',
+'duplicatesoffile' => 'अधो निदेशितसञ्चिका द्विप्रतिः । {{PLURAL:$1|}} विशेषविवरणार्थम् अत्र प्रविशतु । [[Special:FileDuplicateSearch/$2|more details]]',
 'sharedupload' => 'इयं संचिका $1 इत्यस्मादस्ति, एषा खलु अन्येष्वपि प्रकल्पेषु प्रयोक्तुं शक्यते।',
+'sharedupload-desc-there' => 'एषा सञ्चिका $1 तथा अन्यप्रकल्पेन च उपयुक्ता ।
+इत्योप्यतिशयसूचनार्थं $2 सञ्चिकाविवरणपुटं पश्यतु ।',
 'sharedupload-desc-here' => 'एषा सञ्चिका $1 इत्यतः उद्धृता अन्यासु योजनासु उपयोगार्हा ।
-अस्याः सञ्चिकायाः  [$2 सञ्चिकावि वरणपृष्ठम्] इत्यत्र उपलभ्यमानं विवरणम् अधोलिखितं यथा ।',
+अस्याः सञ्चिकायाः  [$2 सञ्चिकाविवरणपृष्ठम्] इत्यत्र उपलभ्यमानं विवरणम् अधोलिखितं यथा ।',
+'sharedupload-desc-edit' => '    एषा सञ्चिका $1 इत्यतः उद्धृता अन्यासु योजनासु उपयोगार्हा । 
+अस्याः सञ्चिकायाः [$2 सञ्चिकाविवरणपृष्ठम्] इत्यत्र उपलभ्यमानं विवरणम् अधोलिखितं यथा ।',
+'sharedupload-desc-create' => 'एषा सञ्चिका $1 इत्यतः उद्धृता अन्यासु योजनासु उपयोगार्हा । 
+अस्याः सञ्चिकायाः [$2 सञ्चिकाविवरणपृष्ठम्] इत्यत्र उपलभ्यमानं विवरणम् अधोलिखितं यथा ।',
+'filepage-nofile' => 'अनेन नाम्ना कापि सञ्चिका न वर्तते ।',
+'filepage-nofile-link' => 'अनेन नाम्ना कापि सञ्चिका न वर्तते । $1 इत्येतत् उत्तारयितुं शक्नोति ।',
 'uploadnewversion-linktext' => 'अस्य पृष्ठस्य नूतनाम् आवृत्तिं उद्भारयतु',
+'shared-repo-from' => '$1 इत्यस्मात् ।',
+'shared-repo' => 'विभक्तः कोशः ।',
 
 # File reversion
+'filerevert' => '$1 अनुवर्तताम् ।',
+'filerevert-legend' => 'सञ्चिकाम् अनुवर्तताम् ।',
+'filerevert-intro' => "भवान् '''[[Media:$1|$1]]''' इति सञ्चिकायाः  $4 इत्यवतरणं $3, $2 इति अनुवर्तमानः अस्ति ।",
 'filerevert-comment' => 'कारणम् :',
+'filerevert-defaultcomment' => '$2 इत्येनं $1 समयस्य अवतरणम् अनुवृत्तम् ।',
+'filerevert-submit' => 'अनुवर्तताम् ।',
+'filerevert-success' => "'''[[Media:$1|$1]]''' इत्येनं $4 $2 को $3 समयावतरणम् अनुवृत्तम् ।",
+'filerevert-badversion' => 'दत्तसमये सन्देशदायिका सञ्चिका प्राचीनावतरणं नास्ति ।',
 
 # File deletion
+'filedelete' => '$1 इत्येतत् अपमर्जतु ।',
+'filedelete-legend' => 'सञ्चिकाम् अपमर्जतु ।',
+'filedelete-intro' => "'''[[Media:$1|$1]]''' इति सञ्चिकायाः इतिहाससहितम् अपमर्जयन् अस्ति ।",
+'filedelete-intro-old' => "भवान्'''[[Media:$1|$1]]''' इत्यस्य [$4 $2 इत्येतयोः $3 कालस्य अवतरणम्] अपमार्जयन् अस्ति ।",
 'filedelete-comment' => 'कारणम् :',
 'filedelete-submit' => 'विलुप्यताम्',
+'filedelete-success' => "'''$1''' अपमर्जितम् ।",
+'filedelete-success-old' => "'''[[Media:$1|$1]]''' इत्यस्य $2 इत्येतत् $3 समयस्यावतरणम् अपमर्जितम् ।",
+'filedelete-nofile' => "'''$1''' न वर्तते ।",
+'filedelete-nofile-old' => "'''$1''' इत्यस्य भवता वर्णितविशेषतायुतम् अवतरणम् अत्र न वर्तते ।",
+'filedelete-otherreason' => 'अपरम्/अतिरिक्तं कारणम् :',
 'filedelete-reason-otherlist' => 'अन्य कारणम्',
+'filedelete-reason-dropdown' => '* अपमर्जनस्य सामान्यं कारणम् । 
+** कृतिस्वाम्यस्य उल्लङ्घनम् । 
+** प्रतिकृता सञ्चिका ।',
+'filedelete-edit-reasonlist' => 'अपमार्जनकारणानि सम्पादयतु ।',
+'filedelete-maintenance' => 'सञ्चिकानाम् अपमर्जनम् अनमपमर्जनं च निर्वहणकाले तात्कालिकतया निष्क्रियौ ।',
+'filedelete-maintenance-title' => 'सञ्चिकाम् अपमर्जितुं न शक्यते ।',
 
 # MIME search
+'mimesearch' => 'MIME अन्वेषणम् ।',
+'mimesearch-summary' => 'MIME-प्रकारानुसारं सञ्चिकान्वेषणार्थम् एतत्पुटम् उपयोक्तुं शाक्नोति । 
+इनपुट: सञ्चिकायाः प्रकारः/उपप्रकारः, उदाहरणम्. <tt>image/jpeg</tt>.',
+'mimetype' => 'MIME प्रकारः :',
 'download' => 'डाउनलोड',
 
+# Unwatched pages
+'unwatchedpages' => 'अनवलोकितपुटानि ।',
+
+# List redirects
+'listredirects' => 'चालितानाम् अवली ।',
+
+# Unused templates
+'unusedtemplates' => 'अनुपयुक्ताः प्राकृतयः ।',
+'unusedtemplatestext' => 'अस्मिन् पुटे {{ns:template}} नामस्थानयुतानि सर्वपुटानि अन्तर्गतानि । यानि अन्यपुटेषु न सन्ति । 
+अस्य अपमर्जनात् पूर्वं सञ्चिकायाः अन्यानुबन्धान् परिशीलयतु ।',
+'unusedtemplateswlh' => 'अन्यानुबन्धाः ।',
+
 # Random page
 'randompage' => 'यादृच्छिकपृष्ठम्',
+'randompage-nopages' => 'अधोनिदेशितनामस्थाने पुटानि न सन्ति । {{PLURAL:$2| एतन्नमस्थाने}} नास्ति : $1।',
+
+# Random redirect
+'randomredirect' => 'यादृच्छिकचालनम् ।',
+'randomredirect-nopages' => '$1नामस्थाने चालनानि न सन्ति ।',
 
 # Statistics
 'statistics' => 'स्थितिगणितम्',
+'statistics-header-pages' => 'पुटसाङ्ख्यिकाः ।',
+'statistics-header-edits' => 'सङ्ख्यिकाः सम्पादयतु ।',
+'statistics-header-views' => 'साङ्ख्यिकाः अवलोकयतु ।',
+'statistics-header-users' => 'योजकसाङ्ख्यिकाः ।',
+'statistics-header-hooks' => 'अन्यसाङ्ख्यिकाः ।',
+'statistics-articles' => 'आधेयपुटानि ।',
 'statistics-pages' => 'पृष्ठानि',
+'statistics-pages-desc' => 'अस्यां विक्यां तु सम्भाषाणपुटसहितानि अन्यसर्वपुटानि चालितानि ।',
 'statistics-files' => 'उद्भारितसञ्चिकाः',
+'statistics-edits' => '{{SITENAME}} व्यवस्थापनपर्यन्तं पुटसम्पादनानि ।',
+'statistics-edits-average' => 'प्रतिपुटं माध्यसम्पादनानि ।',
+'statistics-views-total' => 'अवलोकनयोगः ।',
+'statistics-views-total-desc' => 'असंवृत्तपुटानाम् अवलोकनानि । अपि च विशेषपुटानि नान्तर्गतानि ।',
+'statistics-views-peredit' => 'प्रतिसम्पादनम् अवलोकनम् ।',
+'statistics-users' => 'पञ्जीकृतः [[Special:ListUsers|योजकः]]',
 'statistics-users-active' => 'सक्रियाः सदस्याः',
+'statistics-users-active-desc' => 'गतेषु {{PLURAL:$1|day|$1 दिनेषु}} सक्रियाः योजकाः  ।',
+'statistics-mostpopular' => 'अत्यवलोकितपुटानि ।',
 
+'disambiguations' => 'द्वैधीभावरहितपुटानाम् अनुबन्धितपुटानि ।',
 'disambiguationspage' => 'Template:असन्दिग्धम्',
+'disambiguations-text' => 'अधो निदेशितपुटानि असन्धिग्धपुटेन अनुबन्धितानि । 
+एतानि यथार्थविषैः योजनीयानि । <br />
+यदि कोऽपि पुटेन प्रकृतिं प्रयोजयति यः  [[MediaWiki:Disambiguationspage]] इत्यनेन अनुबद्धः  ससन्दिग्धपुटम् इति उच्यते ।',
 
 'doubleredirects' => 'दुगुनी-अनुप्रेषिते',
-
+'doubleredirectstext' => 'एतत्पुटं तेषां पुटानां सूची अस्ति यानि अन्यपुनर्निदेशितपुटानि प्रति पुनरिदेशितानि सन्ति । 
+प्रत्येकं पङ्क्तिः प्रथमद्वितीयपुनर्निदेशम् अन्तर्गता । द्वितीयपुनर्निदेशः लक्ष्यं यत् वास्तवं लक्ष्यपुटं प्रथमं प्रदर्शितम् । 
+अपि च प्रथमपुनर्निदेशः वास्तवेन एतदेवलक्षितं स्यात् । <del>काटी गई</del> प्रविष्टयः परिहृताः ।',
+'double-redirect-fixed-move' => '[[$1]] इत्यस्य स्थानं परिवर्तितम् । 
+इदानीम् [[$2]] इत्यस्य दिशि पुनर्निदिष्टम् अस्ति ।',
+'double-redirect-fixed-maintenance' => '[[$1]] तः [[$2]] पुनर्निदेशद्वयं निश्चिनोति ।',
+'double-redirect-fixer' => 'पुनर्निदेशस्य बन्धकः ।',
+
+'brokenredirects' => 'भग्नपुनर्निदेशाः ।',
+'brokenredirectstext' => 'अधो दत्तपुनर्निदेशाः अवृत्तपुटैः सह अनुबन्दं रक्षन्ति ।',
 'brokenredirects-edit' => 'सम्पाद्यताम्',
 'brokenredirects-delete' => 'विलुप्यताम्',
 
+'withoutinterwiki' => 'भाषानुबन्धरिहातानि पुटानि ।',
+'withoutinterwiki-summary' => 'अधस्थपुटानि अन्यभाषावतरणैः अनुबन्धं न कुर्वन्ति ।',
 'withoutinterwiki-legend' => 'पूर्वोऽपपदम्',
 'withoutinterwiki-submit' => 'दर्श्यताम्',
 
+'fewestrevisions' => 'न्यूनतमालोकनयुक्तपुटानि ।',
+
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|बैट्|बैट्स्}}',
+'ncategories' => '{{PLURAL:$1|वर्गः|वर्गाः }}',
+'nlinks' => '$1 {{PLURAL:$1|अनुबन्धः|अनुबन्धाः}}',
 'nmembers' => '$1 {{PLURAL:$1|सदस्यः|सदस्याः}}',
+'nrevisions' => '$1 {{PLURAL:$1|पुनरावृत्तिः}}',
+'nviews' => '$1 {{PLURAL:$1|अनुबन्धः|अनुबन्धाः}}',
+'nimagelinks' => '$1 {{PLURAL:$1|पुटम्|पुटानि}} प्रयुक्तानि ।',
+'ntransclusions' => '$1 {{PLURAL:$1|पुटम्|पुटानि}} प्रयुक्तानि ।',
+'specialpage-empty' => 'अस्य वृत्तस्य परिणामः नास्ति ।',
+'lonelypages' => 'अनाथपुटानि ।',
+'lonelypagestext' => '{{SITENAME}} इत्यस्मिन् अधो निदेशितपुटानि नानुबद्धानि अथवा अन्तर्गतानि अन्यपुटेषु ।',
+'uncategorizedpages' => 'अवर्गीकृतपुटानि ।',
+'uncategorizedcategories' => 'अवर्गीकृताः वर्गाः ।',
+'uncategorizedimages' => 'अवर्गीकृताः सञ्चिकाः ।',
+'uncategorizedtemplates' => 'अवर्गीकृताः प्रकृतयः ।',
+'unusedcategories' => 'अनुपयुक्ताः वर्गाः ।',
+'unusedimages' => 'अनुपयुक्तानि पुटाणी ।',
+'popularpages' => 'प्रसिद्धानि पुटानि ।',
+'wantedcategories' => 'आवश्यकाः वर्गाः ।',
+'wantedpages' => 'आवश्यकपुटानि ।',
+'wantedpages-badtitle' => '$1 परिणामनिरूपणे अमान्यशीर्षकम् ।',
+'wantedfiles' => 'आवश्यकाः सञ्चिकाः ।',
+'wantedfiletext-cat' => 'अधो दत्तसञ्चिकाः उपयुक्ताः किन्तु न वर्तन्ते । बाह्यकोशानां सञ्चिकाः उपस्थिताः इति एताः सूच्यां स्युः । एतादृशः कोपि सदोषप्रवेशः<del> अवरुद्धः</del> भवति । अपि च यत्पुटं तादृश्याः अनुपस्थितसञ्चिकायाः प्रयोगं कुर्वन्ति तासं सूची  [[:$1]] मध्ये अस्ति ।',
+'wantedfiletext-nocat' => 'अधो दत्ताः सञ्चिकाः उपयुक्ताः किन्तु न वर्तन्ते । बाह्यकोशस्य सञ्चिकाः उपस्थिताः इति एताः सूच्यां स्युः । तदृशः कोऽपि सदोषप्रवेशः<del>struck out</del>. अत्र स्यात् ।',
+'wantedtemplates' => 'आवश्यकाः प्राकृतयः ।',
+'mostlinked' => 'अत्यनुबद्धानि पुटानि ।',
+'mostlinkedcategories' => 'वर्गैः सह अत्यनुबद्धाः ।',
+'mostlinkedtemplates' => 'प्राकृतिभिः अत्यनुबद्धाः ।',
+'mostcategories' => 'बहुवर्गयुक्तपुटानि ।',
+'mostimages' => 'अत्यनुबद्धानि पुटानि ।',
+'mostrevisions' => 'सर्वाधिकपुनरावृत्तियुक्तानि पुटानि ।',
 'prefixindex' => 'उपसर्गयुक्तानि सर्वाणि पृष्ठानि',
+'prefixindex-namespace' => 'उपसर्गैः युक्तानि सर्वपुटानि । ($1 नामस्थानम्)',
+'shortpages' => 'ह्रस्वपुटानि',
 'longpages' => 'दीर्घाणि पृष्ठानि',
+'deadendpages' => 'अन्तिमपुटानि ।',
+'deadendpagestext' => 'अधो निदेशितपुटानि {{SITENAME}} इत्यस्मिन्  अन्यपुटैः अनुबद्धानि न ।',
+'protectedpages' => 'सुरक्षितानि पुतानि ।',
+'protectedpages-indef' => 'अनिर्दिष्टसुरक्षा केवलम् ।',
 'listusers' => 'योजक सूचि',
-'usercreated' => '$1 दिने $2 समये रचितम्',
+'usercreated' => '$1 दिने $2 समये रचितम् योजकनाम $3',
 'newpages' => 'नवीनपृष्ठम्',
 'newpages-username' => 'योजकनामन्:',
 'ancientpages' => 'प्राचीनतमानि पृष्ठानि',
@@ -1846,4 +2559,24 @@ $1 इत्यनेन $3 इति पृष्ठम् $4 इत्ये
 'feedback-cancel' => 'निवर्तयते',
 'feedback-close' => 'समापित',
 
+# API errors
+'api-error-unclassified' => 'कश्चन अज्ञातः दोषः जातः ।',
+'api-error-unknown-code' => 'अज्ञातः दोषः " $1 "',
+'api-error-unknown-error' => 'आन्तरिकदोषः : सञ्चिकायाः आरोपणावसरे कश्चन दोषः जातः ।',
+'api-error-unknown-warning' => 'अज्ञातः प्रबोधः "$1"',
+'api-error-unknownerror' => 'अज्ञातः दोषः " $1 "',
+'api-error-uploaddisabled' => 'अस्यां वीक्याम् आरोपणं निष्क्रिया कृता अस्ति ।',
+'api-error-verification-error' => 'इयं सञ्चिका सदोषा स्यात् अथवा विस्तारः दोषयुक्तः स्यात् ।',
+
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|क्षणम्|क्षणानि}}',
+'duration-minutes' => '$1 {{PLURAL:$1|निमेषः|निमेषाः}}',
+'duration-hours' => '$1 {{PLURAL:$1|घण्टा|घण्टाः}}',
+'duration-days' => '$1 {{PLURAL:$1|दिनम्|दिनानि}}',
+'duration-weeks' => '$1 {{PLURAL:$1|सप्ताहः|सप्ताहाः}}',
+'duration-years' => '$1 {{PLURAL:$1|वर्षम्|वर्षाणि}}',
+'duration-decades' => '$1 {{PLURAL:$1|दशकम्|दशकानि}}',
+'duration-centuries' => '$1 {{PLURAL:$1|शतकम्|शतकानि}}',
+'duration-millennia' => '$1 {{PLURAL:$1|सहस्राब्धः|सहस्राब्धाः}}',
+
 );
index 36b41e6..aefd19b 100644 (file)
@@ -134,13 +134,13 @@ $messages = array(
 'thursday' => 'duorastat',
 'friday' => 'bearjadat',
 'saturday' => 'lávvordat',
-'sun' => 'so',
+'sun' => 'So',
 'mon' => 'vu',
-'tue' => 'ma',
+'tue' => 'Dis',
 'wed' => 'ga',
 'thu' => 'du',
 'fri' => 'be',
-'sat' => 'lá',
+'sat' => 'Lá',
 'january' => 'ođđajagimánnu',
 'february' => 'guovvamánnu',
 'march' => 'njukčamánnu',
@@ -207,9 +207,11 @@ $messages = array(
 'qbspecialpages' => 'Doaibmasiiddut',
 
 # Vector skin
+'vector-action-addsection' => 'Lasit fáttá',
 'vector-action-delete' => 'Sihko',
 'vector-action-move' => 'Sirdde',
 'vector-action-protect' => 'Suodjal',
+'vector-action-undelete' => 'Máhcat',
 'vector-action-unprotect' => 'Rievdat suodjaleami',
 'vector-view-create' => 'Álggat',
 'vector-view-edit' => 'Rievdat',
@@ -251,7 +253,7 @@ $messages = array(
 'talk' => 'Ságastallan',
 'views' => 'Čájáhusat',
 'toolbox' => 'Neavvobumbá',
-'userpage' => 'Čájet geavaheaddjisiiddu',
+'userpage' => 'Čájet geavaheaddjesiiddu',
 'projectpage' => 'Čájet prošeaktasiiddu',
 'imagepage' => 'Čájet fiilasiiddu',
 'mediawikipage' => 'Čájet diehtosiiddu',
@@ -270,7 +272,7 @@ $messages = array(
 'jumptosearch' => 'ohcamii',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
-'aboutsite' => 'Dieđut {{GRAMMAR:elative|{{SITENAME}}}}',
+'aboutsite' => '{{SITENAME}} birra',
 'aboutpage' => 'Project:Dieđut',
 'copyright' => 'Sisdoalu sáhttá geavahit liseanssain $1.',
 'currentevents' => 'Áigeguovdil',
@@ -453,7 +455,7 @@ Du geavaheaddjidovddaldat lea dál anus.
 'missingcommentheader' => 'It leat čállán bajilčállaga du oaivilii. Vállje <em>Vurke</em>, jus it hálit čállit bajilčállaga.',
 'summary-preview' => 'Čoahkkáigeasu ovdalgihtiigeahččan:',
 'subject-preview' => 'Bajilčállaga ovdalgihtiigeahččan:',
-'blockedtitle' => 'Geavaheaddji lea cakkojuvvon',
+'blockedtitle' => 'Geavaheaddji lea hehttejuvvon',
 'whitelistedittext' => 'Don fertet $1, ovdalgo sáhtát rievdadit siidduid.',
 'confirmedittext' => 'It sáhte rievdadit siiddu ovdalgo leat sihkarastan iežat e-poastačujuhusa. Sáhtat sihkarastit [[Special:Preferences|ásahussiidduin]].',
 'nosuchsectiontitle' => 'Diekkár oassi ii gávdno',
@@ -465,6 +467,8 @@ Du geavaheaddjidovddaldat lea dál anus.
 'accmailtext' => "geavaheaddji '''$1''' suollemassátni lea sáddejuvvon čujuhussii '''$2'''.",
 'newarticle' => '(ođđa)',
 'newarticletext' => 'Leat boahtán muhtin liŋkka mielde siidui, mii ii vel lea čállejuvvon. Sáhtát álggahit siiddu vuollái. Jus it háliit álggahit siiddu, geavat fierbmilohkki máhccandoaimma.',
+'userpage-userdoesnotexist' => 'Geavaheaddjedovddaldat «$1» ii leat registrerejuvvon. Hálidatgo duođas rievdadit dán siiddu?',
+'userpage-userdoesnotexist-view' => 'Geavaheaddjedovddaldat «$1» ii leat registrerejuvvon.',
 'updated' => '(Beaiváduvvon)',
 'note' => "'''Cuigehus:'''",
 'previewnote' => "'''Dát lea siiddu ovdalgihtiigeahččan. Siidu ii leat vel vurkejuvvon!'''",
@@ -593,7 +597,7 @@ $1 {{int:pipe-separator}} $2',
 'preferences' => 'Ásahusat',
 'mypreferences' => 'Ásahusat',
 'prefs-edits' => 'Rievdadusaid mearri:',
-'prefsnologin' => 'It leat čálligoahtán sisa.',
+'prefsnologin' => 'It leat čálligoahtán sisa',
 'prefsnologintext' => 'Don fertet [[Special:UserLogin|čálligoahtit sisa]], ovdalgo sáhtát rievdadit du ásahusaid.',
 'changepassword' => 'Suollemassáni molson',
 'prefs-skin' => 'Olggosoaidnu',
@@ -644,15 +648,18 @@ $1 {{int:pipe-separator}} $2',
 'prefs-dateformat' => 'Beaivemeari hábmi',
 
 # User rights
-'userrights' => 'Geavaheaddjirivttiid stivren',
+'userrights' => 'Geavaheaddjevuoigatvuođaid stivren',
 'userrights-lookup-user' => 'Geavaheaddjirivttiid stivren',
 'userrights-user-editname' => 'Geavaheaddjidovddaldat',
 'editusergroup' => 'Rievdat geavaheaddjijoavkkuid',
 'editinguser' => "Rievdadit siiddu '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
-'userrights-editusergroup' => 'Redigere geavaheaddjijoavkkuid',
+'userrights-editusergroup' => 'Rievdat geavaheaddjejoavkku',
 'saveusergroups' => 'Vurke',
 'userrights-groupsmember' => 'Lahttun čuovvovaš joavkkuin:',
+'userrights-groupsmember-auto' => 'Implikáhtalaš (miel)lahttu {{PLURAL:$1|joavkkus|joavkkuin}}:',
 'userrights-reason' => 'Sivva',
+'userrights-changeable-col' => 'Joavkkut, maid dus lea lohpi rievdadit',
+'userrights-unchangeable-col' => 'Joavkkut, maid dus ii leat lohpi rievdadit',
 
 # Groups
 'group' => 'Joavku:',
@@ -711,7 +718,7 @@ $1 {{int:pipe-separator}} $2',
 'upload' => 'Lasit fiilla',
 'uploadbtn' => 'Lasit fiilla',
 'reuploaddesc' => 'Máhca sáddenskovvái.',
-'uploadnologin' => 'It leat čálligoahtán sisa',
+'uploadnologin' => 'It leat loggen sisa',
 'uploadnologintext' => 'Don fertet leat [[Special:UserLogin|čálligoahtán sisa]], ovdalgo sáhtát vurket fiillaid.',
 'uploaderror' => 'Vurkenfeaila',
 'uploadlog' => 'Fiilalogga',
@@ -1134,8 +1141,8 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'whatlinkshere-links' => 'liŋkkat',
 
 # Block/unblock
-'block' => 'Cagge geavaheaddji',
-'blockip' => 'Eastte rievdadusaid',
+'block' => 'Hehtte geavaheaddji',
+'blockip' => 'Hehtte rievdadeamis',
 'blockip-title' => 'Cagge geavaheaddji',
 'blockip-legend' => 'Cagge geavaheaddji',
 'ipadressorusername' => 'IP-čujuhus dahje geavaheaddjidovddaldat',
@@ -1153,13 +1160,13 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'ipbcreateaccount' => 'Eastte dovddaldagaid ráhkadeami',
 'ipbemailban' => 'Eastte geavaheaddji sáddemis e-poastta',
 'ipbenableautoblock' => 'Eastte maŋimus IP-čujuhus, mas geavaheaddji lea ráhkadan rievdadusaid, ja maid daid čujuhusaid, main son vel iska rievdadit.',
-'ipbsubmit' => 'Eastte',
+'ipbsubmit' => 'Hehtte dán geavaheaddji',
 'ipbother' => 'Eará áigi',
 'ipboptions' => '2 diimma:2 hours,1 beaivi:1 day,3 beaivve:3 days,1 vahkku:1 week,2 vahkku:2 weeks,1 mánotbádji:1 month,3 mánotbaji:3 months,6 mánotbaji:6 months,1 jahki:1 year,bissovaš:infinite',
 'ipbotheroption' => 'eará',
 'ipbotherreason' => 'Eará sivva',
 'badipaddress' => 'IP-čujuhus lea boastut.',
-'blockipsuccesssub' => 'Easttan lihkosmuvai',
+'blockipsuccesssub' => 'Hehtten lihkosmuvai',
 'blockipsuccesstext' => "Geavaheaddji dahje IP-čujuhus '''$1''' lea eston.<br />Dálá easttut gávdnot [[Special:BlockList|easttolisttus]].",
 'ipb-edit-dropdown' => 'Rievdat sivaid',
 'ipb-unblock-addr' => 'Sihko geavaheaddji $1 estema',
@@ -1168,6 +1175,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'ipblocklist-submit' => 'Oza',
 'infiniteblock' => 'bissovaččat',
 'expiringblock' => 'boarásnuvvá $1 $2',
+'blocklink' => 'hehtte',
 'contribslink' => 'rievdadusat',
 'blocklogentry' => 'esttii geavaheaddji dahje IP-čujuhusa [[$1]], eastima bistin lea $2 $3',
 'proxyblocksuccess' => 'Gárvvis.',
@@ -1247,7 +1255,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'tooltip-p-logo' => 'Váldosiidu',
 'tooltip-n-mainpage' => 'Mana váldosiidui',
 'tooltip-n-portal' => 'Ságastallan prošeavttas',
-'tooltip-n-currentevents' => 'Áigeguovdilis áššiin ságastallan',
+'tooltip-n-currentevents' => 'Dieđut Wikipedia áigeguovdilis dáhpáhusain',
 'tooltip-n-recentchanges' => 'Listu varas rievdadusain',
 'tooltip-n-randompage' => 'Raba summal siidu',
 'tooltip-n-help' => 'Rávvagat',
@@ -1273,7 +1281,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'tooltip-save' => 'Vurke rievdadusaid',
 'tooltip-preview' => 'Geahča rievdadusa ovdalgihtii ovdal vurkema',
 'tooltip-diff' => 'Čájet rievdadusaid',
-'tooltip-compareselectedversions' => 'Veardde válljejuvvon veršuvnnaid',
+'tooltip-compareselectedversions' => 'Veardit válljejuvvon veršuvnnaid.',
 'tooltip-watch' => 'Lasit dán siiddu čuovvunlisttui',
 'tooltip-recreate' => 'Álggat dán siiddu ođđasit',
 
@@ -1369,7 +1377,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 # E-mail address confirmation
 'confirmemail' => 'Sihkaraste e-poastačujuhusa',
 'confirmemail_noemail' => 'Dus ii leat lasihuvvon gelbbolaš e-poastačujuhus [[Special:Preferences|ásahusain]].',
-'confirmemail_success' => 'Du e-poastačujuhus lea dál konfirmerejuvvon. Sáhtat dál čálligoahtit sisa.',
+'confirmemail_success' => 'Du e-poastačujuhus lea dál konfirmerejuvvon. Sáhtát dál logget sisa.',
 'confirmemail_loggedin' => 'Du e-poastačujuhus lea dál konfirmerejuvvon.',
 'confirmemail_subject' => '{{GRAMMAR:genitive|{{SITENAME}}}} e-poastačujuhusa konfirmeren',
 
index 1cba767..4ecc4df 100644 (file)
@@ -37,9 +37,8 @@ $namespaceNames = array(
 );
 
 /**
-  * Aliases from the fallback language 'lt' to avoid breakage of links
-  */
-
+ * Aliases from the fallback language 'lt' to avoid breakage of links
+ */
 $namespaceAliases = array(
        'Specialus'             => NS_SPECIAL,
        'Aptarimas'             => NS_TALK,
@@ -57,6 +56,8 @@ $namespaceAliases = array(
        'Kategorijos_aptarimas' => NS_CATEGORY_TALK,
 );
 
+$namespaceGenderAliases = array();
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Pabrauktė nūruodas:',
index be52dea..24b8dbb 100644 (file)
@@ -199,7 +199,7 @@ $messages = array(
 'tog-hidepatrolled' => 'මෑත වෙනස් කිරීම්වල මුර සංචාරය කරන ලද සංස්කරණ සඟවන්න',
 'tog-newpageshidepatrolled' => 'විමසුමට ලක්කෙරුණු පිටු, අළුත් පිටු ලැයිස්තුවෙහි නොපෙන්වන්න',
 'tog-extendwatchlist' => 'මෑත වෙනස්වීම් පමණක් නොව, අදාළ සියළු වෙනස්වීම් දක්වා පෙන්වන අයුරින් මුර-ලැයිස්තුව පුළුල් කරන්න',
-'tog-usenewrc' => 'à¶\86à·\80රà·\8aධà·\92ත à¶¸à·\91ත à·\80à·\99නà·\83à·\8aà·\80à·\93මà·\8a à¶·à·\8fà·\80à·\92තà·\8f à¶\9aරනà·\8aන (ජාවාස්ක්‍රිප්ට් ඇවැසිය)',
+'tog-usenewrc' => 'මà·\91ත à·\80à·\99නà·\83à·\8aà·\80à·\93මà·\8a à·\83à·\84 à¶¸à·\94ර à¶½à·\90යà·\92à·\83à·\8aතà·\94à·\80 à·\84à·\93 à¶´à·\92ටà·\94à·\80 à¶\85නà·\94à·\80 à·\83මà·\96à·\84 à·\80à·\99නà·\83à·\8aà·\80à·\93මà·\8a (ජාවාස්ක්‍රිප්ට් ඇවැසිය)',
 'tog-numberheadings' => 'ශීර්ෂ-නාම ස්වයංක්‍රීයව අංකනය කරන්න',
 'tog-showtoolbar' => 'සංස්කරණ මෙවලම්තීරුව පෙන්වන්න (ජාවාස්ක්‍රිප්ට්)',
 'tog-editondblclick' => 'ද්විත්ව-ක්ලික් කිරීම මගින් පිටු සංස්කරණය අරඹන්න (ජාවාස්ක්‍රිප්ට්)',
@@ -207,17 +207,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'ඡේද ශීර්ෂ මත දකුණු-ක්ලික් කිරීමෙන් ඡේද සංස්කරණය සක්‍රීය කරන්න (ජාවාස්ක්‍රිප්ට්)',
 'tog-showtoc' => 'පටුන පෙන්වන්න ( තුනකට වඩා වැඩියෙන් ශීර්ෂ-නාම අඩංගු පිටු සඳහා)',
 'tog-rememberpassword' => 'මගේ ප්‍රවිෂ්ටය මෙම ගවේශකයෙහි උපරිම ලෙස {{PLURAL:$1|දිනයක්|දින $1ක්}} මතක තබා ගන්න',
-'tog-watchcreations' => 'මම à¶­à¶±à¶± à¶´à·\92ටà·\94 à¶¸à¶\9cà·\9a à¶¸à·\94ර-ලැයිස්තුවට එක් කරන්න',
-'tog-watchdefault' => 'මම à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\9aරන à¶´à·\92ටà·\94 à¶¸à¶\9cà·\9a à¶¸à·\94ර-ලැයිස්තුවට එක් කරන්න',
-'tog-watchmoves' => 'මම à¶\9cà·\99නයන à¶´à·\92ටà·\94 à¶¸à¶\9cà·\9a à¶¸à·\94ර-ලැයිස්තුවට එක් කරන්න',
-'tog-watchdeletion' => 'මම මකාදමන පිටු මගේ මුර-ලැයිස්තුවට එක් කරන්න',
+'tog-watchcreations' => 'මම à¶­à¶±à¶± à¶´à·\92ටà·\94 à·\84à·\8f à¶¸à¶¸ à¶\8bඩà·\94à¶\9cත à¶\9aරන à¶\9cà·\9cනà·\94 à¶¸à·\8fà¶\9cà·\9a à¶¸à·\94රලැයිස්තුවට එක් කරන්න',
+'tog-watchdefault' => 'මම à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\9aරන à¶´à·\92ටà·\94 à·\84à·\8f à¶\9cà·\9cනà·\94 à¶¸à·\8fà¶\9cà·\9a à¶¸à·\94ර ලැයිස්තුවට එක් කරන්න',
+'tog-watchmoves' => 'මම à¶\9cà·\99නයන à¶´à·\92ටà·\94 à·\84à·\8f à¶\9cà·\9cනà·\94 à¶¸à·\8fà¶\9cà·\9a à¶¸à·\94ර ලැයිස්තුවට එක් කරන්න',
+'tog-watchdeletion' => 'මම මකා දමන පිටු සහ ගොනු මාගේ මුර ලැයිස්තුවට එක් කරන්න',
 'tog-minordefault' => 'සියළු සංස්කරණයන් පෙර-නිමියෙන් සුළු-සංස්කරණ ලෙස සලකුණු කරන්න',
 'tog-previewontop' => 'සංස්කරණ කොටුවට ඉදිරියෙන් පෙර-දසුන පෙන්වන්න',
 'tog-previewonfirst' => 'පළමු සංස්කරණයෙහිදී පෙර-දසුන පෙන්වන්න',
 'tog-nocache' => 'ගවේශක පිටු මතක තබා ගැනීම අක්‍රීය කරන්න',
-'tog-enotifwatchlistpages' => 'මà\9cà·\9a à¶¸à·\94ර-ලà·\90යà·\92à·\83à·\8aතà·\94à·\80à·\9a à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à·\80à·\99නà·\83à·\8a à·\80à·\96 à·\80à·\92ට à¶¸à·\8f à·\84ට à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a-තà·\90පà·\91ලක් එවන්න',
+'tog-enotifwatchlistpages' => 'මà·\8fà¶\9cà·\9a à¶¸à·\94ර à¶½à·\90යà·\92à·\83à·\8aතà·\94à·\80à·\99à·\84à·\92 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à·\84à·\9d à¶\9cà·\9cනà·\94à·\80à¶\9aà·\8a à·\84à·\9d à·\80à·\99නà·\83à·\8aà·\80à·\96 à·\80à·\92ට à¶¸à·\8f à·\84ට à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\90ලà·\8a à¶´à¶«à·\92à·\80à·\94ඩයක් එවන්න',
 'tog-enotifusertalkpages' => 'මගේ පරිශීලක සාකච්ඡා පිටුව වෙනස් වූ විට මා හට විද්‍යුත්-තැපෑලක් එවන්න',
-'tog-enotifminoredits' => 'පිටුවල  සුළු-සංස්කරණයකදී පවා මට ඊ- තැපැල් ලිපියක් එවන්න',
+'tog-enotifminoredits' => 'පිටුවල හෝ ගොනුවල හෝ  සුළු-සංස්කරණයකදී පවා මට විද්‍යුත් තැපැල් පණිවුඩයක් එවන්න',
 'tog-enotifrevealaddr' => 'දැනුම්දීමේ විද්‍යුත්-ලිපි වල මාගේ විද්‍යුත්-ලිපිනය හෙළි කරන්න',
 'tog-shownumberswatching' => 'මුර කරනු ලබන පරිශීලකයන් සංඛ්‍යාව පෙන්වන්න',
 'tog-oldsig' => 'පවතින අත්සන:',
@@ -689,8 +689,8 @@ $2',
 
 මෙම ගිණුම තැනී ඇත්තේ වැරදීමකින් නම්, මෙම පණිවුඩය නොසලකා හැරිය හැක.',
 'usernamehasherror' => 'පරිශීලක නාමයේ පූරක අනුලකුණු අඩංගු විය නොහැකිය',
-'login-throttled' => 'à¶\94බ à·\80à·\92à·\83à·\92නà·\8a à¶¸à·\91තදà·\93  à¶´à¶¸à¶«à¶§ à·\80ඩà·\8f à·\80à·\8fර à¶\9cණනà¶\9aà·\8a à¶´à·\8aâ\80\8dරà·\80à·\92à·\82à·\8aට à·\80à·\93මට à¶\8bතà·\8aà·\83à·\8fà·\84 දරා ඇත.
-යà·\85à·\92 à¶\8bතà·\8aà·\83à·\8fà·\84 à¶\9aà·\92රà·\93මට à¶´à·\99ර à¶\9aරà·\94ණà·\8fà¶\9aර à¶¸à¶¯à¶\9aà·\8a à¶´à·\9cරà·\9cතà·\8aතà·\94 à·\80න්න.',
+'login-throttled' => 'à¶\94බ à·\80à·\92à·\83à·\92නà·\8a à¶¸à·\91තදà·\93  à¶´à¶¸à¶«à¶§ à·\80ඩà·\8f à·\80à·\8fර à¶\9cණනà¶\9aà·\8a à¶´à·\92à·\80à·\92à·\83à·\93මà·\99à·\84à·\92 à¶\8bතà·\8aà·\83à·\8fà·\84යනà·\8a දරා ඇත.
+යà·\85à·\92 à¶\8bතà·\8aà·\83à·\8fà·\84 à¶\9aà·\92රà·\93මට à¶´à·\99ර à¶¸à¶³ à·\80à·\9aලà·\8fà·\80à¶\9aà·\8a à¶»à·\90ඳà·\93 à·\83à·\92ටà·\92න්න.',
 'login-abort-generic' => 'ඔබගේ පිවිසීම අසාර්ථකයි - අතහැර දමනලදී',
 'loginlanguagelabel' => 'භාෂාව: $1',
 'suspicious-userlogout' => 'නිෂ්ක්‍රමණය සඳහා ඔබගේ අයැදුම නිෂ්ප්‍රභා කෙරුනේ එය යොමු කොට ඇත්තේ භින්න(කැඩුනු) බ්‍රවුසරයකින් හෝ නිවේෂණය කෙරෙමින් පවතින ප්‍රොක්සියක් වෙතින් යැයි බැලූ බැල්මට පෙනෙන බැවිනි.',
@@ -1336,9 +1336,9 @@ HTML ටැගයන් පිරික්සන්න.',
 'email' => 'විද්‍යුත් තැපෑල',
 'prefs-help-realname' => 'සැබෑ නාමය හෙළි කිරීම වෛකල්පිකයි.
 ඔබ විසින් එය හෙළි කල හොත්, ඔබගේ කෘතීන් සඳහා ඔබහට කතෘ-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.',
-'prefs-help-email' => 'à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\91ලà·\8a à¶½à·\92පà·\92නය à¶\85තà·\8aâ\80\8dයà·\8fà·\80à·\81à·\8aâ\80\8dය à¶±à·\9cà·\80à·\9a, à¶\91à·\84à·\99තà·\8a à¶¸à·\94ර à¶´à¶¯ à¶´à·\8aâ\80\8dරතà·\8aâ\80\8dයà·\8fරමà·\8aභ à¶\9aà·\92රà·\93මට à¶\91ය à¶\85à·\80à·\81à·\8aâ\80\8dය à·\80à·\9a (à¶\94බà¶\9cà·\9a à¶¸à·\94ර à¶´à¶¯à¶º à¶\85මතà¶\9a à·\80à·\96 à·\80à·\92ට).',
+'prefs-help-email' => 'à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶½à·\92පà·\92නය à¶\85තà·\8aâ\80\8dයà·\8fà·\80à·\81à·\8aâ\80\8dය à¶±à·\9cà·\80à·\9a, à¶\91à·\84à·\99තà·\8a à¶\94බà¶\9cà·\9a à¶¸à·\94ර à¶´à¶¯à¶º à¶\85මතà¶\9a à·\80à·\96 à·\80à·\92ටà·\99à¶\9a à¶\91ය à¶ºà¶½à·\92 à·\83à·\90à¶\9aà·\83à·\93මට à¶±à¶¸à·\8a à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶½à·\92පà·\92නයà¶\9aà·\8a à¶¯à·\93 à¶­à·\92බà·\92ය à¶ºà·\94තà·\94ය.',
 'prefs-help-email-others' => 'ඔබගේ පරිශීලක හෝ පරිශීලක සාකච්ඡා පිටුවෙහි සබැඳියක් ඔස්සේ විද්‍යුත් තැපෑල මගින් අනෙක් අයට ඔබව සම්බන්ධ කර ගැනීම පිණිස තේරිමක් සිදු කල හැක.
-à¶\85නà·\99à¶\9aà·\94තà·\8a à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8a à¶\94බà·\80 à¶\85මතන à·\80à·\92ට à¶\94බà¶\9cà·\9a à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\90ලà·\8a à¶½à·\92පà·\92නය à·\81à·\8aâ\80\8dරà·\90තà·\92මය à¶±à·\9cà·\80ේ.',
+à¶\85නà·\99à¶\9aà·\94තà·\8a à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8a à¶\94බà·\80 à¶\85මතන à·\80à·\92ට à¶\94බà¶\9cà·\9a à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\90ලà·\8a à¶½à·\92පà·\92නය à·\84à·\99ලà·\92දරà·\80à·\94 à¶±à·\9cà¶\9aà·\99රේ.',
 'prefs-help-email-required' => 'විද්‍යුත්-ලිපිනය අවශ්‍යයි.',
 'prefs-info' => 'මූලික තොරතුරු',
 'prefs-i18n' => 'ජාත්‍යන්තරකරණය',
@@ -1725,7 +1725,10 @@ URLහි නීතික බව හා ප්‍රවේශ්‍ය බව 
 'backend-fail-writetemp' => 'තාවකාලික ගොනුව වෙත ලිවිය නොහැක.',
 'backend-fail-closetemp' => 'තාවකාලික ගොනුව වැසීම කල නොහැක.',
 'backend-fail-read' => '$1 ගොනුව කියවිය නොහැක.',
-'backend-fail-create' => '$1 ගොනුව තැනිය නොහැක.',
+'backend-fail-create' => '$1 ගොනුව ලිවිය නොහැකි විය.',
+'backend-fail-maxsize' => '{{PLURAL:$2|බයිට එකකට|බයිට $2 කට}} වඩා විහාල බැවින්  $1 ගොනුව ලිවිය නොහැකි විය.',
+'backend-fail-readonly' => 'ගබඩා බැක්එන්ඩය "$1" දැනට කියවීම-පමණක් සඳහා වෙයි. දක්වා ඇති හේතුව නම්: "\'\'$2\'\'"',
+'backend-fail-usable' => 'අවසර ප්‍රමාණවත් නොවීම නිසාවෙන් හෝ නාමාවලී/බහාලුම් නොමැති වීම නිසාවෙන් $1 ගොනුව ලිවිය නොහැකි විය.',
 
 # Lock manager
 'lockmanager-notlocked' => '"$1" හී අගුළු ඇරිය නොහැක; එය අගුළු දමාද නොමැත.',
index 5751f3c..4b94dba 100644 (file)
@@ -1441,6 +1441,7 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'right-writeapi' => 'Uporaba napisanega API-ja',
 'right-delete' => 'Brisanje strani',
 'right-bigdelete' => 'Brisanje strani z obsežno zgodovino',
+'right-deletelogentry' => 'Brisanje in obnavljanje izbranih dnevniških vnosov',
 'right-deleterevision' => 'Brisanje in obnova posebnih redakcij strani',
 'right-deletedhistory' => 'Ogled zgodovine brisanja, brez besedila izbrisanih strani',
 'right-deletedtext' => 'Ogled izbrisanega besedila in primerjava med izbrisanimi redakcijami',
@@ -1761,6 +1762,7 @@ Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 'lockmanager-fail-releaselock' => 'Ne morem sprostiti zaklepa »$1«.',
 'lockmanager-fail-db-bucket' => 'Ne morem kontaktirati zadostnega števila zaklenitvenih zbirk podatkov v vedru $1.',
 'lockmanager-fail-db-release' => 'Ne morem sprostiti zaklepov zbirke podatkov $1.',
+'lockmanager-fail-svr-acquire' => 'Ne morem pridobiti zaklepov na strežniku $1.',
 'lockmanager-fail-svr-release' => 'Ne morem sprostiti zaklepov strežnika $1.',
 
 # ZipDirectoryReader
@@ -2309,6 +2311,8 @@ nadaljujte s previdnostjo.',
 'rollback' => 'Vrni spremembe',
 'rollback_short' => 'Vrni',
 'rollbacklink' => 'vrni',
+'rollbacklinkcount' => 'vrni $1 {{PLURAL:$1|urejanje|urejanji|urejanja|urejanj}}',
+'rollbacklinkcount-morethan' => 'vrni več kot $1 {{PLURAL:$1|urejanje|urejanji|urejanja|urejanj}}',
 'rollbackfailed' => 'Vrnitev ni uspela',
 'cantrollback' => 'Urejanja ne morem vrniti; zadnji urejevalec je hkrati edini.',
 'alreadyrolled' => 'Zadnje spremembe [[:$1]] uporabnika [[User:$2|$2]] ([[User talk:$2|pogovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ne morem vrniti;
@@ -3880,6 +3884,4 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'duration-centuries' => '$1 {{PLURAL:$1|stoletje|stoletji|stoletja|stoletij}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisočletje|tisočletji|tisočletja|tisočletij}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Ne morem pridobiti zaklepov na strežniku $1.',
 );
index d3e5d9c..acbd057 100644 (file)
@@ -1996,6 +1996,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Не могу да ослободим катанац за „$1“.',
 'lockmanager-fail-db-bucket' => 'Не могу да контактирам с довољно катанаца у канти $1.',
 'lockmanager-fail-db-release' => 'Не могу да ослободим катанце у бази $1.',
+'lockmanager-fail-svr-acquire' => 'Не могу да добијем катанце на серверу $1.',
 'lockmanager-fail-svr-release' => 'Не могу да ослободим катанце на серверу $1.',
 
 # ZipDirectoryReader
@@ -4239,7 +4240,7 @@ $5
 # New logging system
 'logentry-delete-delete' => '$1 {{GENDER:|је обрисао|је обрисала|је обрисао}} $3',
 'logentry-delete-restore' => '$1 {{GENDER:|је вратио|је вратила|је вратио}} страницу $3',
-'logentry-delete-event' => '$1 {{GENDER:|је променио|је променила|је променио}} видљивост {{PLURAL:$5|догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4',
+'logentry-delete-event' => '$1 {{GENDER:$2|је променио|је променила|је променио}} видљивост {{PLURAL:$5|догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4',
 'logentry-delete-revision' => '$1 {{GENDER:|је променио|је променила|је променио}} видљивост {{PLURAL:$5|измене|$5 измене|$5 измена}} на страници $3: $4',
 'logentry-delete-event-legacy' => '$1 {{GENDER:|је променио|је променила|је променио}} видљивост догађајâ у дневнику на $3',
 'logentry-delete-revision-legacy' => '$1 {{GENDER:|је променио|је променила|је променио}} видљивост изменâ на страници $3',
@@ -4335,6 +4336,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|векова}}',
 'duration-millennia' => '$1 {{PLURAL:$1|миленијум|миленијума|миленијума}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Не могу да добијем катанце на серверу $1.',
 );
index 66ecaa6..36ad323 100644 (file)
@@ -1551,6 +1551,7 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'right-writeapi' => 'Använda skriv-API:t',
 'right-delete' => 'Radera sidor',
 'right-bigdelete' => 'Radera sidor med stor historik',
+'right-deletelogentry' => 'Radera och återställ specifika loggposter',
 'right-deleterevision' => 'Radera och återställa enskilda sidversioner',
 'right-deletedhistory' => 'Se raderad historik utan tillhörande sidtext',
 'right-deletedtext' => 'Visa raderad text och ändringar mellan raderade versioner',
@@ -1864,6 +1865,7 @@ Om problemet kvarstår, kontakta en [[Special:ListUsers/sysop|administratör]].'
 'lockmanager-fail-releaselock' => 'Kunde inte att frigöra låset för "$1".',
 'lockmanager-fail-db-bucket' => 'Kunde inte kontakta tillräckligt många låsdatabaser i hinken $1.',
 'lockmanager-fail-db-release' => 'Kunde inte frigöra låsen på databasen $1 .',
+'lockmanager-fail-svr-acquire' => 'Kunde inte erhålla lås på servern $1 .',
 'lockmanager-fail-svr-release' => 'Kunde inte frigöra låsen på servern $1.',
 
 # ZipDirectoryReader
@@ -2402,6 +2404,8 @@ Se $2 för noteringar om de senaste raderingarna.',
 'rollback' => 'Rulla tillbaka ändringar',
 'rollback_short' => 'Återställning',
 'rollbacklink' => 'rulla tillbaka',
+'rollbacklinkcount' => 'rulla tillbaka $1 {{PLURAL:$1|redigering|redigeringar}}',
+'rollbacklinkcount-morethan' => 'rulla tillbaka mer än $1 {{PLURAL:$1|redigering|redigeringar}}',
 'rollbackfailed' => 'Tillbakarullning misslyckades',
 'cantrollback' => 'Det gick inte att rulla tillbaka, då sidan endast redigerats av en användare.',
 'alreadyrolled' => 'Det gick inte att rulla tillbaka den senaste redigeringen av [[User:$2|$2]] ([[User talk:$2|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) på sidan [[:$1|$1]]. Någon annan har redan rullat tillbaka eller redigerat sidan.
@@ -3994,6 +3998,4 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'duration-centuries' => '$1 {{PLURAL:$1|sekel|sekel}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Kunde inte erhålla lås på servern $1 .',
 );
index ece11b7..61b24d0 100644 (file)
@@ -396,7 +396,7 @@ Tazama [[Special:Version|ukurasa wa toleo]].',
 'viewsourceold' => 'view source',
 'editlink' => 'hariri',
 'viewsourcelink' => 'onyesha kodi za ukurasa',
-'editsectionhint' => 'Hariri fungu: $1',
+'editsectionhint' => 'Hariri sehemu: $1',
 'toc' => 'Yaliyomo',
 'showtoc' => 'fichua',
 'hidetoc' => 'ficha',
@@ -2532,6 +2532,9 @@ Tafadhali jaribu tena.',
 # Image deletion
 'deletedrevision' => 'Pitio la awali lililofutwa $1',
 'filedeleteerror-short' => 'Hitilafu wakati wa kufuta faili: $1',
+'filedeleteerror-long' => 'Hitilafu zilitokea wakati wa kufuta faili:
+
+$1',
 'filedelete-missing' => 'Faili "$1" haliwezi kufutwa, kwa sababu halipo.',
 'filedelete-old-unregistered' => 'The specified file revision "$1" is not in the database.',
 'filedelete-current-unregistered' => 'Faili lilotajwa la "$1" halipo katika hifadhidata.',
@@ -2648,10 +2651,12 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi.
 'exif-objectname' => 'Jina fupi',
 'exif-specialinstructions' => 'Maelekezo maalum',
 'exif-headline' => 'Kichwa cha habari',
+'exif-source' => 'Chanzo',
 'exif-urgency' => 'Umuhimu',
 'exif-writer' => 'Mwandishi',
 'exif-languagecode' => 'Lugha',
 'exif-iimcategory' => 'Jamii',
+'exif-datetimeexpires' => 'Usitumie baada ya',
 'exif-cameraownername' => 'Mwenye kamera',
 'exif-copyrighted' => 'Hali ya hakimiliki',
 'exif-copyrightowner' => 'Mwenye hatimiliki',
@@ -2745,6 +2750,8 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi.
 'exif-gpsdirection-t' => 'Mwelekeo halisi',
 'exif-gpsdirection-m' => 'Mwelekeo wa sumaku',
 
+'exif-ycbcrpositioning-1' => 'Katikati',
+
 'exif-dc-contributor' => 'Wengine waliochangia',
 'exif-dc-date' => 'Tarehe',
 'exif-dc-publisher' => 'Mchapishaji',
index eae871d..3e2d670 100644 (file)
@@ -159,15 +159,15 @@ $messages = array(
 'tog-rememberpassword' => 'ఈ విహారిణిలో నా ప్రవేశాన్ని గుర్తుంచుకో (గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజుల}}కి)',
 'tog-watchcreations' => 'నేను సృష్టించిన పేజీలను నా వీక్షణ జాబితాకు కలుపు',
 'tog-watchdefault' => 'నేను దిద్దుబాట్లు చేసిన పేజీలను నా వీక్షణ జాబితాకు కలుపు',
-'tog-watchmoves' => 'à°¨à±\87à°¨à±\81 à°¤à°°à°²à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80లనà±\81 à°¨à°¾ à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాà°\95à±\81 à°\95à°²à±\81à°ªు',
-'tog-watchdeletion' => 'à°¨à±\87à°¨à±\81 à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80లనà±\81 à°¨à°¾ à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాà°\95à±\81 à°\95à°²à±\81à°ªు',
+'tog-watchmoves' => 'à°¨à±\87à°¨à±\81 à°¤à°°à°²à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80లనà±\81 à°¦à°¸à±\8dà°¤à±\8dరాలనà±\81 à°¨à°¾ à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాà°\95à±\81 à°\9aà±\87à°°à±\8dà°\9aు',
+'tog-watchdeletion' => 'à°¨à±\87à°¨à±\81 à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80లనà±\81 à°¦à°¸à±\8dà°¤à±\8dరాలనà±\81 à°¨à°¾ à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాà°\95à±\81 à°\9aà±\87à°°à±\8dà°\9aు',
 'tog-minordefault' => 'ప్రత్యేకంగా తెలుపనంతవరకూ నా మార్పులను చిన్న మార్పులుగా గుర్తించు',
 'tog-previewontop' => 'వ్యాసం మార్పుల తరువాత ఎలావుంటుందో మార్పుల‌ బాక్సుకు పైన చూపు',
 'tog-previewonfirst' => 'దిద్దిబాట్లు చేసిన వ్యాసాన్ని భద్రపరిచే ముందు ఎలా వుంటుందో ఒకసారి చూపించు',
 'tog-nocache' => 'విహారిణిలో పుటల కాషింగుని అచేతనంచేయి',
-'tog-enotifwatchlistpages' => 'నా వీక్షణాజాబితా లోని పేజీలు మారినపుడు నాకు ఈ-మెయిలు పంపించు',
+'tog-enotifwatchlistpages' => 'నా వీక్షణాజాబితా లోని పేజీ లేదా దస్త్రం మారినపుడు నాకు ఈ-మెయిలు పంపించు',
 'tog-enotifusertalkpages' => 'నా చర్చా పేజీలో మార్పులు జరిగినపుడు నాకు ఈ-మెయిలు పంపించు',
-'tog-enotifminoredits' => 'à°\9aà°¿à°¨à±\8dà°¨ à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°\9aà±\87సినపà±\8dà°ªà±\81à°¡à±\81 à°\95à±\82à°¡à°¾ à°¨à°¾à°\95à±\81 à°\88-à°®à±\86యిలు పంపించు',
+'tog-enotifminoredits' => 'à°ªà±\87à°\9cà±\80à°²à±\81 à°®à°°à°¿à°¯à±\81 à°¦à°¸à±\8dà°¤à±\8dరాలà°\95à±\81 à°\9cà°°à°¿à°\97à±\87 à°\9aà°¿à°¨à±\8dà°¨ à°®à°¾à°°à±\8dà°ªà±\81à°²à°\95à±\81 à°\95à±\82à°¡à°¾ à°¨à°¾à°\95à±\81 à°\88-à°®à±\86యిలà±\81à°¨ు పంపించు',
 'tog-enotifrevealaddr' => 'గమనింపు మెయిళ్ళలో నా ఈ-మెయిలు చిరునామాను చూపించు',
 'tog-shownumberswatching' => 'వీక్షకుల సంఖ్యను చూపించు',
 'tog-oldsig' => 'ప్రస్తుత సంతకం:',
index 4ba5883..ae6b048 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author MF-Warburg
+ * @author Nemo bis
  * @author Reedy
  */
 
@@ -426,7 +427,7 @@ Ita-nia mudansa la armazenadu seidauk!",
 'timezoneregion-europe' => 'Europa',
 'youremail' => 'Korreiu eletróniku:',
 'username' => "Naran uza-na'in:",
-'uid' => "Uza-na'in ID:",
+'uid' => "Númeru uza-na'in:",
 'yourlanguage' => 'Lian:',
 'gender-male' => 'Mane',
 'gender-female' => 'Feto',
index f0c4da6..e93544c 100644 (file)
@@ -262,6 +262,9 @@ $messages = array(
 'index-category' => 'Mga pahinang may talatuntunan',
 'noindex-category' => 'Mga pahinang walang talatuntunan',
 'broken-file-category' => 'Mga pahina na may sirang mga kawing ng talaksan',
+'categoryviewer-pagedlinks' => '($1) ($2)',
+
+'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
 'about' => 'Patungkol',
 'article' => 'Pahina ng nilalaman',
@@ -395,12 +398,16 @@ $1',
 Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 
 'ok' => 'Sige',
+'pagetitle' => '$1 - {{SITENAME}}',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
+'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Ikinuha mula sa "$1"',
 'youhavenewmessages' => 'Mayroon kang $1 ($2).',
 'newmessageslink' => 'mga bagong mensahe',
 'newmessagesdifflink' => 'huling pagbabago',
 'youhavenewmessagesmulti' => 'Mayroon kang mga bagong mensahe sa $1',
 'editsection' => 'baguhin',
+'editsection-brackets' => '[$1]',
 'editold' => 'baguhin',
 'viewsourceold' => 'tingnan ang pinagmulan',
 'editlink' => 'baguhin',
@@ -421,6 +428,8 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'site-atom-feed' => '$1 kargang Atom',
 'page-rss-feed' => '"$1" kargang RSS',
 'page-atom-feed' => '"$1" kargang Atom',
+'feed-atom' => 'Atom',
+'feed-rss' => 'RSS',
 'red-link-title' => '$1 (hindi umiiral ang pahina)',
 'sort-descending' => 'Pagsunud-sunurin na bumababa',
 'sort-ascending' => 'Pagsunud-sunurin na tumataas',
@@ -583,6 +592,7 @@ Hindi mo pinagagana ang mga kuki.
 Paki-andar mo ang mga ito at sumubok uli.",
 'nocookiesfornew' => 'Hindi nalikha ang akawnt ng tagagamit, dahil hindi namin matiyak ang pinagmulan nito.
 Tiyaking mayroon kang pinagaganang mga otap, ikargang muli ang pahinang ito at subuking muli.',
+'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => 'Hindi mo tinukoy ang isang tanggap na pangalan ng tagagamit.',
 'loginsuccesstitle' => 'Matagumpay ang paglagda',
 'loginsuccess' => "'''Nakalagda ka na sa {{SITENAME}} bilang si \"\$1\".'''",
@@ -895,6 +905,7 @@ Ang pinakahuling entrada sa talaan ay ibinigay sa baba para sa inyong pagsasangg
 'template-semiprotected' => '(bahagyang nakasanggalang)',
 'hiddencategories' => 'Ang pahinang ito ay kasapi sa {{PLURAL:$1|1 nakatagong kategorya|$1 nakatagong kategorya}}:',
 'edittools' => '<!-- Ang teksto rito ay ipapakita sa ilalim ng mga pormularyo ng pagbabago at pagkarga. -->',
+'edittools-upload' => '-',
 'nocreatetitle' => 'May hangganan ang paglikha ng pahina',
 'nocreatetext' => 'Naglagay ng hangganan (restriksyon/limitasyon) ang {{SITENAME}} sa kakayahang makalikha ng bagong mga pahina.
 Maaari kang bumalik at magbago ng isang umiiral na pahina, o kaya [[Special:UserLogin|lumagda o lumikha ng kuwenta/akawnt]].',
@@ -904,10 +915,10 @@ Maaari kang bumalik at magbago ng isang umiiral na pahina, o kaya [[Special:User
 'permissionserrors' => 'Mga kamalian sa mga pahintulot',
 'permissionserrorstext' => 'Wala kang pahintulot na gawin iyan, dahil sa sumusunod na {{PLURAL:$1|dahilan|mga dahilan}}:',
 'permissionserrorstext-withaction' => 'Wala kang pahintulot na $2, dahil sa sumusunod na {{PLURAL:$1|dahilan|mga dahilan}}:',
-'recreate-moveddeleted-warn' => "'''Babala: Muli mong inililikha ang isang pahinang binura na dati.'''
+'recreate-moveddeleted-warn' => "'''Babala: Muli mong nililikha ang isang pahinang binura na dati.'''
 
 Dapat mong isaalang-alang kung nararapat bang ipagpatuloy ang pagbago sa pahinang ito.
-Ang tala ng pagbubura at paglilipat para sa pahinang ito ay ibinigay dito para sa inyong kaginhawaan:",
+Ang tala ng pagbubura at paglilipat para sa pahinang ito ay ibinigay dito para sa kaginhawaan:",
 'moveddeleted-notice' => 'Ibinura na ang pahinang ito.
 Ang tala ng pagbubura at paglilipat para sa pahinang ito ibinigay sa baba para sa inyong pagsasangguni.',
 'log-fulllog' => 'Tingnan ang buong tala',
@@ -1108,6 +1119,7 @@ Tiyakin na ang pagbabago ay makapagpapanatili ng pagkakatuluy-tuloy ng pahinang
 'mergehistory-comment' => 'Pinagsanib ang [[:$1]] sa [[:$2]]: $3',
 'mergehistory-same-destination' => 'Pinagmulan at patutunguhan hindi dapat magkatulad',
 'mergehistory-reason' => 'Dahilan:',
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
 
 # Merge log
 'mergelog' => 'Tala ng pagsasanib',
@@ -1280,7 +1292,9 @@ Hindi ito maibabalik sa dating gawi.',
 'username' => 'Bansag:',
 'uid' => 'ID ng tagagamit:',
 'prefs-memberingroups' => 'Kasapi ng {{PLURAL:$1|na pangkat|na mga pangkat}}:',
+'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Oras ng pagtatala:',
+'prefs-registration-date-time' => '$1',
 'yourrealname' => 'Tunay na pangalan:',
 'yourlanguage' => 'Wika:',
 'yourvariant' => 'Iba pang anyo ng wika ng nilalaman:',
@@ -1342,6 +1356,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'userrights-notallowed' => 'Walang pahintulot ang akawnt mo na magdagdag o magtanggal ng mga karapatan ng tagagamit.',
 'userrights-changeable-col' => 'Mga pangkat na maaari mong baguhin',
 'userrights-unchangeable-col' => 'Mga pangkat na hindi mo mababago',
+'userrights-irreversible-marker' => '$1*',
 
 # Groups
 'group' => 'Pangkat:',
@@ -1392,6 +1407,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'right-writeapi' => 'Gamit ng sinulat na API',
 'right-delete' => 'Burahin ang mga pahina',
 'right-bigdelete' => 'Burahin ang mga pahinang may malaking mga kasaysayan',
+'right-deletelogentry' => 'Burahin at huwag burahin ang partikular na mga lahok sa talaan',
 'right-deleterevision' => 'Burahin at tanggalin sa pagkabura ang isang partikular na mga pagbabago ng mga pahina',
 'right-deletedhistory' => 'Tingnan ang mga binurang pinasok na kasaysayan, na wala ang kanilang nakakabit na teksto',
 'right-deletedtext' => 'Tingnan ang naburang teksto at mga pagbabago sa pagitan ng dalawang mga rebisyon',
@@ -1499,9 +1515,11 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'minoreditletter' => 'm',
 'newpageletter' => 'B',
 'boteditletter' => 'b',
+'unpatrolledletter' => '!',
 'number_of_watching_users_pageview' => '[$1 binabantayang {{PLURAL:$1|tagagamit|mga tagagamit}}]',
 'rc_categories' => 'Itakda lang sa mga kaurian (ihiwalay sa pamamagitan ng "|")',
 'rc_categories_any' => 'Kahit ano',
+'rc-change-size' => '$1',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|mga byte}} pagkaraan ng pagbabago',
 'newsectionsummary' => '/* $1 */ bagong seksyon',
 'rc-enhanced-expand' => 'Ipakita ang mga detalye (kailangan ng JavaScript)',
@@ -1628,6 +1646,20 @@ bumalik at ikarga ang talaksan na ito sa bagong pangalan. [[File:$1|thumb|center
 'watchthisupload' => 'Bantayan ang talaksang ito',
 'filewasdeleted' => 'Isang talaksan na may ganitong pangalan ay naikarga dati at nabura. Kailangan mong tingnan ang $1 bago magpatuloy sa pagkarga nito muli.',
 'filename-bad-prefix' => "Ang talaksan na ikakarga mo ay nagsisimula sa '''\"\$1\"''', na isang hindi naglalarawang pangalan na karaniwang tinatakda ng mga kamerang digital. Paki pili ang isang mas naglalarawang pangalan para sa iyong talaksan.",
+'filename-prefix-blacklist' => ' #<!-- leave this line exactly as it is --> <pre>
+# Ang palaugnayan ay ang sumusunod:
+#   * Ang lahat ng mga bagay mula sa isang panitik na "#" hanggang sa katapusan ng isang guhit ay isang puna
+#   * Bawat isang guhit na mayroong laman ay isang unlapi para sa tipikal na mga pangalan ng talaksan na kusang itinalaga ng mga kamerang dihital
+CIMG # Casio
+DSC_ # Nikon
+DSCF # Fuji
+DSCN # Nikon
+DUW # ilang mga teleponong mobilo
+IMG # heneriko
+JD # Jenoptik
+MGP # Pentax
+PICT # samu\'t sari
+ #</pre> <!-- leave this line exactly as it is -->',
 'upload-success-subj' => 'Matagumpay na pagkakarga',
 'upload-success-msg' => 'Matagumpay ang ikinarga mo mula sa [$2].  Makukuha ito mula rito: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'Problema sa pagkarga',
@@ -1689,6 +1721,7 @@ Kapag nagpatuloy ang suliranin, makipagugnayan sa isang [[Special:ListUsers/syso
 'lockmanager-fail-releaselock' => 'Hindi mapakawalan ang kandado para sa "$1".',
 'lockmanager-fail-db-bucket' => 'Hindi sapat na makaugnay sa mga kalipunang pandato ng kandado sa timba na $1.',
 'lockmanager-fail-db-release' => 'Hindi mapakawalan ang mga kandado sa kalipunan ng dato na $1.',
+'lockmanager-fail-svr-acquire' => 'Hindi magawang kunin ang mga kandado sa tagapaghain na $1.',
 'lockmanager-fail-svr-release' => 'Hindi mapakawalan ang mga kandado sa tagapaghain na $1.',
 
 # ZipDirectoryReader
@@ -1808,6 +1841,8 @@ Marahil ay naisa mong baguhin ang paglalarawan doon sa [$2 pahina ng paglalarawa
 'uploadnewversion-linktext' => 'Magkarga ng isang bagong bersyon ng talaksang ito',
 'shared-repo-from' => 'mula sa $1',
 'shared-repo' => 'isang pinagsasaluhang repositoryo',
+'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
+'filepage.css' => '/* Ang Cascading Style Sheets na inilagay dito ay kabilang sa pahina ng paglalarawan ng talaksan, na kabilang din sa mga wiki ng dayuhang kliyente */',
 
 # File reversion
 'filerevert' => 'Ibalik sa dati ang $1',
@@ -1916,7 +1951,7 @@ Nasugpo na ang mga ipinasok na <del>inekisan</del>.',
 'nlinks' => '$1 {{PLURAL:$1|ugnay|mga ugnay}}',
 'nmembers' => '$1 {{PLURAL:$1|kasapi|mga kasapi}}',
 'nrevisions' => '$1 {{PLURAL:$1|pagbabago|mga pagbabago}}',
-'nviews' => '$1 {{PLURAL:$1|nakita|mga nakikita}}',
+'nviews' => '$1 {{PLURAL:$1|pagtingin|mga pagtingin}}',
 'nimagelinks' => 'Ginamit sa $1 {{PLURAL:$1|pahina|mga pahina}}',
 'ntransclusions' => 'ginamit sa $1 {{plural:$1|pahina|mga pahina}}',
 'specialpage-empty' => 'Walang resulta para sa ulat na ito.',
@@ -1981,6 +2016,7 @@ Pakitandaan lamang na ang iba mga websayt ay maaaring nakakawing sa isang talaks
 # Book sources
 'booksources' => 'Mapagkukuhanang mga aklat',
 'booksources-search-legend' => 'Maghanap ng mapagkukunang aklat',
+'booksources-isbn' => 'ISBN:',
 'booksources-go' => 'Punta',
 'booksources-text' => 'Matatagpuan sa ibaba ang mga tala ng mga ugnay sa ibang mga websayt na nagbebenta ng bago at nagamit na mga aklat, at maaring mayroon din
 na iba pang impormasyon tungkol sa mga aklat na hinahanap mo:',
@@ -2073,6 +2109,8 @@ Maaaring may mga [[{{MediaWiki:Listgrouprights-helppage}}|karagdagang kabatiran]
 'listgrouprights-rights' => 'Mga karapatan',
 'listgrouprights-helppage' => 'Help:Mga pangkat ng karapatan',
 'listgrouprights-members' => '(tala ng mga kasapi)',
+'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <tt>($2)</tt></span>',
+'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <tt>($2)</tt></span>',
 'listgrouprights-addgroup' => 'Maaaring idagdag ang {{PLURAL:$2|pangkat|mga pangkat}} na: $1',
 'listgrouprights-removegroup' => 'Maaaring tanggalin ang {{PLURAL:$2|pangkat|mga pangkat}} na: $1',
 'listgrouprights-addgroup-all' => 'Maaaring idagdag ang lahat ng mga pangkat',
@@ -2116,6 +2154,7 @@ Ang ipinasok mong direksiyong e-liham sa [[Special:Preferences|iyong mga kagustu
 # User Messenger
 'usermessage-summary' => 'Nag-iiwan ng mensaheng pangsistema.',
 'usermessage-editor' => 'Mensahero ng sistema',
+'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
 'watchlist' => 'Mga binabantayan ko',
@@ -2231,6 +2270,8 @@ magpatuloy na may pagiingat.',
 'rollback' => 'Mga pagbabagong may kaugnayan sa pagpapagulong na pabalik sa (mas) dati',
 'rollback_short' => 'Pagulunging pabalik sa (mas) dati',
 'rollbacklink' => 'pagulunging pabalik sa (mas) dati',
+'rollbacklinkcount' => 'pagulunging pabalik ang $1 {{PLURAL:$1|pagbabago|mga pagbabago}}',
+'rollbacklinkcount-morethan' => 'pagulunging pabalik ang mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}',
 'rollbackfailed' => 'Nabigo ang pagpapagulong na pabalik sa (mas) dati',
 'cantrollback' => 'Hindi maibalik ang pagbabago; tanging ang may-akda lamang ng pahinang ito ang huling tagapagambag/tagapaglathala.',
 'alreadyrolled' => 'Hindi mapagulong na pabalik sa dati ang huling pagbabago ng [[$1]] ni ([[User talk:$2|Usapan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2364,6 +2405,7 @@ Tingnan ang [[Special:Log/delete|talaan ng pagbubura]] para sa isang talaan ng m
 $1',
 'undelete-show-file-confirm' => 'Nakatitiyak ka bang ibig mong tanawin ang isang nabura nang pagbabago ng talaksang "<nowiki>$1</nowiki>" mula $2 noong $3?',
 'undelete-show-file-submit' => 'Oo',
+'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
 
 # Namespace form on various pages
 'namespace' => 'Espasyo ng pangalan:',
@@ -2400,6 +2442,7 @@ Ang pinakahuling entrada sa talaan  ng pagharang ay ibinigay sa ibaba para sa pa
 'sp-contributions-username' => 'IP Address o bansag:',
 'sp-contributions-toponly' => 'Ipakita lang ang mga pamamatnugot na mga huling rebisyon',
 'sp-contributions-submit' => 'Hanapin',
+'sp-contributions-explain' => '',
 
 # What links here
 'whatlinkshere' => 'Mga nakaturo dito',
@@ -2540,6 +2583,7 @@ Tingnan ang [[Special:BlockList|talaan ng pagharang]] para sa lista ng kasalukuy
 'proxyblocker-disabled' => 'Nakapatay ang pagharang sa proxy.',
 'proxyblockreason' => 'Hinarang ang IP address mo dahil bukas na proxy ito. Makipag-ugnayan sa iyong tagabigay ng serbisyong Internet o suportang teknikal at ipaalam sa kanila itong seryesong suliranin sa seguridad.',
 'proxyblocksuccess' => 'Tapos na.',
+'sorbs' => 'DNSBL',
 'sorbsreason' => 'Nakalista ang IP address mo bilang isang bukas na proxy sa DNSBL na ginagamit ng sayt na ito.',
 'sorbs_create_account_reason' => 'Nakalista ang IP address mo bilang isang bukas na proxy sa DNSBL na ginagamit ng sayt na ito. Hindi ka makakalikha ng akawnt',
 'cant-block-while-blocked' => 'Hindi mo mahahadlangan/mahaharang ang ibang mga tagagamit habang hinahadlangan ka.',
@@ -2851,25 +2895,36 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'common.css' => '/* Ang inilagay na CSS dito ay gagamitin para sa lahat ng mga pabalat */',
 'standard.css' => '/* Ang inilagay na CSS dito ay makakaapekto sa mga tagagamit ng Karaniwang pabalat */',
 'nostalgia.css' => '/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Nostalgia */',
-'cologneblue.css' => "/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Bugkaw na Kolon (''Cologne Blue'') */",
+'cologneblue.css' => "/* Ang Cascading Style Sheets na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Bughaw na Kolown (''Cologne Blue'') */",
 'monobook.css' => '/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Monobook */',
 'myskin.css' => "/* Ang CSS na inilagay dito ay makakaapekto sa lahat ng mga tagagamit ng pabalat na Balatko (''MySkin'') */",
 'chick.css' => "/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na ''Chick'' */",
 'simple.css' => "/* Ang CSS na iniligay dito ay makakaapekto sa mga tagagamit ng Payak (''Simple'') na pabalat */",
 'modern.css' => "/* Ang CSS na iniligay dito ay makakaapekto sa tagagamit ng Makabagong (''Modern'') pabalat */",
+'vector.css' => '/* Ang inilagay na CSS dito ay makakaapekto sa mga tagagamit ng pabalat na Vector */',
 'print.css' => '/* Ang CSS na inilagay dito ay makakaapekto sa kalalabasan o resulta ng paglilimbag */',
 'handheld.css' => "/* Ang CSS na inilagay dito ay makakaapekto sa mga aparatong nahahawakan (''handheld device'') batay sa itinakdang pabalat sa ''\$wgHandheldStyle'' */",
+'noscript.css' => '/* Ang inilagay na Cascading Style Sheets dito ay makakaapekto sa mga tagagamit na hindi nagpapagana ng JavaScript */',
+'group-autoconfirmed.css' => '/* Ang inilagay na Mga Pilas ng Estilong Lumalagaslas (Cascading Style Sheets o CSS) dito ay makakaapekto lamang sa mga tagagamit na kusang natiyak */',
+'group-bot.css' => '/* Ang inilagay na Mga Pilas ng Estilong Lumalagaslas (Cascading Style Sheets o CSS) dito ay makakaapekto lamang sa mga bot */',
+'group-sysop.css' => '/* Ang inilagay na Mga Pilas ng Estilong Lumalagaslas (Cascading Style Sheets) dito ay makakaapekto lamang sa mga tagapagpaandar ng sistema */',
+'group-bureaucrat.css' => '/* Ang inilagay na Mga Pilas ng Estilong Lumalagaslas (Cascading Style Sheets o CSS) dito ay makakaapekto lamang sa mga burokrata */',
 
 # Scripts
-'common.js' => '/* Anumang JavaScript dito ay ikakarga para sa lahat ng mga tagagamit ng bawat pahinang ikinarga. */',
-'standard.js' => '/* Anumang JavaScript dito ay ikakarga para lahat ng mga tagagamit na gumagamit ng Karaniwang pabalat */',
-'nostalgia.js' => '/* Anumang JavaScript dito ay ikakarga para lahat ng mga tagagamit na gumagamit ng pabalat na Nostalgia */',
-'cologneblue.js' => '/* Anumang JavaScript dito ay ikakarga para sa tagagamit ng pabalat na Bughaw na Kolon */',
-'monobook.js' => '/* Anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na MonoBook */',
-'myskin.js' => '/* Anumang JavaScript dito ay ikakarga para sa tagagamit na gumagamit ng pabalat na Balatko */',
-'chick.js' => "/* Anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na ''Chick'' */",
-'simple.js' => '/* Anumang JavaScript dito ay ikakarga para sa tagagamit na gumagamit ng Payak na pabalat */',
-'modern.js' => '/* Anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Makabagong pabalat */',
+'common.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa lahat ng mga tagagamit ng bawat pahinang ikinarga. */',
+'standard.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Karaniwang pabalat */',
+'nostalgia.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Nostalgia */',
+'cologneblue.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit ng pabalat na Cologne Blue o Bughaw na Kolown */',
+'monobook.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na MonoBook */',
+'myskin.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa tagagamit na gumagamit ng pabalat na MySkin o Balat Ko */',
+'chick.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Chick */',
+'simple.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Payak na pabalat */',
+'modern.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Modernong pabalat */',
+'vector.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Vector */',
+'group-autoconfirmed.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na kusang natiyak lamang */',
+'group-bot.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga bot lamang */',
+'group-sysop.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagapagpaandar ng sistema lamang */',
+'group-bureaucrat.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga burokrata lamang */',
 
 # Metadata
 'notacceptable' => 'Hindi makapagbigay ng dato ang serbidor ng wiki sa anyong mababasa ng iyong kliyente.',
@@ -2912,12 +2967,13 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 # Skin names
 'skinname-standard' => 'Klasiko',
 'skinname-nostalgia' => 'Nostalhiya',
-'skinname-cologneblue' => 'Bughaw na Kolon',
+'skinname-cologneblue' => 'Bughaw na Kolown',
 'skinname-monobook' => 'MonoAklat ("isang aklat")',
 'skinname-myskin' => 'PabalatKo',
 'skinname-chick' => "\"Pambabae\" (''Chick'')",
 'skinname-simple' => 'Payak',
 'skinname-modern' => 'Makabago (Moderno)',
+'skinname-vector' => 'Vector',
 
 # Patrolling
 'markaspatrolleddiff' => 'Tatakan bilang napatrolya na',
@@ -2955,6 +3011,7 @@ $1',
 Maaaring manganib ang iyong sistema kapag ipinagana mo ito.",
 'imagemaxsize' => "Takdang hangganan sa laki ng larawan: <br />''(para sa mga pahina ng paglalarawan ng talaksan)''",
 'thumbsize' => 'Maliit na sukat (parang "kuko sa hinlalaki" lamang):',
+'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pahina|mga pahina}}',
 'file-info' => 'sukat ng talaksan: $1, tipo ng MIME: $2',
 'file-info-size' => '$1 × $2 piksel, sukat ng talaksan: $3, tipo ng MIME: $4',
@@ -2984,7 +3041,11 @@ Maaaring manganib ang iyong sistema kapag ipinagana mo ito.",
 'sp-newimages-showfrom' => 'Ipakita ang mga bagong talaksang nagsisimula mula $2, $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'hours-abbrev' => '$1o',
+'video-dims' => '$1, $2 × $3',
+'seconds-abbrev' => '$1 segundo',
+'minutes-abbrev' => '$1 minuto',
+'hours-abbrev' => '$1 oras',
+'days-abbrev' => '$1 araw',
 'seconds' => '{{PLURAL:$1|$1 segundo|$1 mga segundo}}',
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 mga minuto}}',
 'hours' => '{{PLURAL:$1|$1 horas|$1 mga oras}}',
@@ -2998,6 +3059,61 @@ Tanging mga nakatalang bagay lamang (mga linyang nagsisimula sa *) ang pinaguuku
 Ang unang kawing sa isang linya ay dapat na nakakawing sa isang talaksang may masamang kalagayan.
 Anumang susunod na mga kawing sa pinanggalingang linya ay tinuturing na mga eksepsyon o bukod-tangi, iyong mga pahina kung saan ang mga talaksan ay maaaring lumitaw sa loob ng linya.',
 
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'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',
+
+# Variants for Gan language
+'variantname-gan-hans' => 'hans',
+'variantname-gan-hant' => 'hant',
+'variantname-gan' => 'gan',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr' => 'sr',
+
+# Variants for Kazakh language
+'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',
+
+# Variants for Kurdish language
+'variantname-ku-arab' => 'ku-Arab',
+'variantname-ku-latn' => 'ku-Latn',
+'variantname-ku' => 'ku',
+
+# Variants for Tajiki language
+'variantname-tg-cyrl' => 'tg-Cyrl',
+'variantname-tg-latn' => 'tg-Latn',
+'variantname-tg' => 'tg',
+
+# Variants for Inuktitut language
+'variantname-ike-cans' => 'ike-Cans',
+'variantname-ike-latn' => 'ike-Latn',
+'variantname-iu' => 'iu',
+
+# Variants for Tachelhit language
+'variantname-shi-tfng' => 'shi-Tfng',
+'variantname-shi-latn' => 'shi-Latn',
+'variantname-shi' => 'shi',
+
 # Metadata
 'metadata' => 'Metadatos',
 'metadata-help' => 'Naglalaman ang talaksang ito ng karagdagang kabatiran na maaaring idinagdag mula sa isang kamerang dihital o iskaner na ginamit para likhain o para maging dihital ito.
@@ -3019,6 +3135,8 @@ Likas na nakatakdang itago ang iba pa.
 * gpslatitude
 * gpslongitude
 * gpsaltitude',
+'metadata-langitem' => "'''$2:''' $1",
+'metadata-langitem-default' => '$1',
 
 # EXIF tags
 'exif-imagewidth' => 'Lapad',
@@ -3066,6 +3184,7 @@ Likas na nakatakdang itago ang iba pa.
 'exif-exposuretime' => 'Oras ng pagkakalantad',
 'exif-exposuretime-format' => '$1 seg ($2)<!--seg = segundo (seconds)-->',
 'exif-fnumber' => 'F Bilang',
+'exif-fnumber-format' => 'f/$1',
 'exif-exposureprogram' => 'Programa ng paglalantad',
 'exif-spectralsensitivity' => 'Sensitibidad sa ispektrum',
 'exif-isospeedratings' => 'Grado ng bilis ng ISO',
@@ -3079,6 +3198,7 @@ Likas na nakatakdang itago ang iba pa.
 'exif-lightsource' => 'Pinagmumulan ng liwanag',
 'exif-flash' => "Pangkisap (''flash'')",
 'exif-focallength' => 'Haba ng lenteng pampokus (pantuon)',
+'exif-focallength-format' => '$1 mm',
 'exif-subjectarea' => 'Saklaw na paksa',
 'exif-flashenergy' => "Lakas ng kisap (''flash'')",
 'exif-focalplanexresolution' => 'Resolusyong X ng kalatagan o lapyang pampokus',
@@ -3133,6 +3253,7 @@ Likas na nakatakdang itago ang iba pa.
 'exif-gpsareainformation' => 'Pangalan ng lugar ng GPS',
 'exif-gpsdatestamp' => 'Petsa ng GPS',
 'exif-gpsdifferential' => 'Pagtatama sa pakakaiba ng GPS',
+'exif-coordinate-format' => '$1° $2′ $3″ $4',
 'exif-jpegfilecomment' => 'Puna sa talaksang JPEG',
 'exif-keywords' => 'Mga susing-salita',
 'exif-worldregioncreated' => 'Rehiyon ng mundo kung saan kinuhanan ang larawan',
@@ -3198,15 +3319,37 @@ Likas na nakatakdang itago ang iba pa.
 'exif-originalimageheight' => 'Taas ng larawan bago ito inani',
 'exif-originalimagewidth' => 'Lapad ng larawan bago ito inani',
 
+# Make & model, can be wikified in order to link to the camera and model name
+'exif-contact-value' => '$1
+
+$2
+<div class="adr">
+$3
+
+$4, $5, $6 $7
+</div>
+$8',
+'exif-subjectnewscode-value' => '$2 ($1)',
+
 # EXIF attributes
 'exif-compression-1' => 'Walang kompresyon',
 'exif-compression-2' => 'CCITT Pangkat 3 1-kodigo sa haba ng pagtakbo ng Pangdimensiyong Huffman na May Bahagyang Pagbabago',
 'exif-compression-3' => 'Kodigo ng Pangkat 3 ng CCITT',
 'exif-compression-4' => 'Kodigo ng Pangkat 4 ng CCITT',
+'exif-compression-5' => 'LZW',
+'exif-compression-6' => 'JPEG (luma)',
+'exif-compression-7' => 'JPEG',
+'exif-compression-8' => 'Paimpisin (Adobe)',
+'exif-compression-32773' => 'PackBits (Macintosh RLE)',
+'exif-compression-32946' => 'Paimpisin (PKZIP)',
+'exif-compression-34712' => 'JPEG2000',
 
 'exif-copyrighted-true' => 'Nakakarapatang-ari',
 'exif-copyrighted-false' => 'Nasasakupan ng madla',
 
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
 'exif-unknowndate' => 'Hindi alam na araw',
 
 'exif-orientation-1' => 'Karaniwan',
@@ -3221,9 +3364,19 @@ Likas na nakatakdang itago ang iba pa.
 'exif-planarconfiguration-1' => 'pagkaayos sa malalaking bahagi (chunky)',
 'exif-planarconfiguration-2' => 'planar na pagkaayos',
 
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
 'exif-colorspace-65535' => 'Hindi nakaakma sa pamantayang sukat',
 
 'exif-componentsconfiguration-0' => 'wala',
+'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' => 'Hindi nabigyan ng kahulugan',
 'exif-exposureprogram-1' => 'Manwal',
@@ -3390,6 +3543,8 @@ Likas na nakatakdang itago ang iba pa.
 
 'exif-isospeedratings-overflow' => 'Mas mahigit kaysa sa 65535',
 
+'exif-maxaperturevalue-value' => '$1 APEX (f/$2)',
+
 'exif-iimcategory-ace' => 'Sining, kalinangan at kaaliwan',
 'exif-iimcategory-clj' => 'Krimen at batas',
 'exif-iimcategory-dis' => 'Mga kalamidad at mga sakuna',
@@ -3440,7 +3595,7 @@ Ibinalik ng tagapagpadala ang: $1',
 'confirmemail_invalid' => 'Hindi tamang kodigo ng kumpirmasyon.  Maaaring lumagpas na sa taning ang kodigo.',
 'confirmemail_needlogin' => 'Kailangan mong $1 upang kumpirmahin/mapatotohanan ang iyong adres ng e-liham.',
 'confirmemail_success' => 'Nakumpirma/napatotohanan na ang adres ng e-liham mo. Maaari ka ng [[Special:UserLogin|lumagda]] at maglibang sa wiki.',
-'confirmemail_loggedin' => 'Nakumpirma/napatotohanan na ngayon ang adres ng e-liham mo.',
+'confirmemail_loggedin' => 'Natiyak na ngayon ang tirahan ng e-liham mo.',
 'confirmemail_error' => 'May nangyaring kamalian sa pagsasagip ng iyong kumpirmasyon.',
 'confirmemail_subject' => 'Kumpirmasyon/pagpapatotoong pang-adres ng e-liham ng {{SITENAME}}',
 'confirmemail_body' => 'May isa, maaaring ikaw, na mula sa adres ng IP na $1,
@@ -3512,6 +3667,18 @@ Pakitiyak kung ibig mo talagang likhain muli ang pahinang ito.",
 'confirm-unwatch-button' => 'Sige',
 'confirm-unwatch-top' => 'Aalisin ba ang pahinang ito mula sa bantayan mo?',
 
+# Separators for various lists, etc.
+'semicolon-separator' => ';&#32;',
+'comma-separator' => ',&#32;',
+'colon-separator' => ':&#32;',
+'autocomment-prefix' => '-&#32;',
+'pipe-separator' => '&#32;|&#32;',
+'word-separator' => '&#32;',
+'ellipsis' => '...',
+'percent' => '$1%',
+'parentheses' => '($1)',
+'brackets' => '[$1]',
+
 # Multipage image navigation
 'imgmultipageprev' => '← nakaraang pahina',
 'imgmultipagenext' => 'susunod na pahina →',
@@ -3536,6 +3703,28 @@ Pakitiyak kung ibig mo talagang likhain muli ang pahinang ito.",
 'autoredircomment' => 'Ikinakarga sa [[$1]]',
 'autosumm-new' => "Nilikha ang pahina na may '$1'",
 
+# Size units
+'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 units
+'bitrate-bits' => '$1bps',
+'bitrate-kilobits' => '$1kbps',
+'bitrate-megabits' => '$1Mbps',
+'bitrate-gigabits' => '$1Gbps',
+'bitrate-terabits' => '$1Tbps',
+'bitrate-petabits' => '$1Pbps',
+'bitrate-exabits' => '$1Ebps',
+'bitrate-zetabits' => '$1Zbps',
+'bitrate-yottabits' => '$1Ybps',
+
 # Live preview
 'livepreview-loading' => 'Ikinakarga...',
 'livepreview-ready' => 'Ikinakarga… Handa na!',
@@ -3552,8 +3741,8 @@ maaaring hindi naipapakita sa talaang ito ang mga pagbabagong mas bago pa kaysa
 'watchlistedit-noitems' => 'Hindi naglalaman ng mga pamagat ang iyong talaan ng mga binabantayan.',
 'watchlistedit-normal-title' => 'Baguhin ang talaan ng mga binabantayan',
 'watchlistedit-normal-legend' => 'Tanggalin ang mga pamagat mula sa binabantayan',
-'watchlistedit-normal-explain' => 'Pinapakita sa ibaba ang mga pamagat na nasa talaan mo ng mga binabantayan.
-Para tanggalin ang isang pamagat, lagyan ng tsek ang kahon katabi nito, at pindutin ang "{{int:Watchlistedit-normal-submit}}".
+'watchlistedit-normal-explain' => 'Ipinapakita sa ibaba ang mga pamagat na nasa talaan mo ng mga binabantayan.
+Upang matanggal ang isang pamagat, lagyan ng tsek ang kahong katabi nito, at pindutin ang "{{int:Watchlistedit-normal-submit}}".
 Maaari mo ring [[Special:EditWatchlist/raw|baguhin ang hilaw na talaan]].',
 'watchlistedit-normal-submit' => 'Tanggalin ang mga Pamagat',
 'watchlistedit-normal-done' => 'Tinatanggal mula sa iyong talaan ng mga binabantayan ang {{PLURAL:$1|1 pamagat|$1 mga pamagat}}:',
@@ -3617,9 +3806,24 @@ Maaari mo ring [[Special:EditWatchlist|gamitin ang pangkaraniwang pampatnugot]].
 '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',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|makipag-usap]])',
+'timezone-utc' => 'UTC',
 
 # Core parser functions
 'unknown_extension_tag' => 'Hindi nalalamang tatak ng karugtong na "$1"',
@@ -3633,6 +3837,7 @@ Maaari mo ring [[Special:EditWatchlist|gamitin ang pangkaraniwang pampatnugot]].
 'version-variables' => 'Mga bagay na nababago/nagbabago',
 'version-antispam' => 'Pag-iwas sa masasamang mga e-liham',
 'version-skins' => 'Mga pabalat',
+'version-api' => 'API',
 'version-other' => 'Iba pa',
 'version-mediahandlers' => 'Mga tagahawak/tagapamahala ng midya',
 'version-hooks' => 'Mga pangkawit',
@@ -3642,6 +3847,7 @@ Maaari mo ring [[Special:EditWatchlist|gamitin ang pangkaraniwang pampatnugot]].
 'version-hook-name' => 'Pangalan ng pangkawit',
 'version-hook-subscribedby' => 'Sinuskribi ng/ni/nina',
 'version-version' => '(Bersyon $1)',
+'version-svn-revision' => '(r$2)',
 'version-license' => 'Lisensiya',
 'version-poweredby-credits' => "Ang wiking ito ay pinapatakbo ng '''[//www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.",
 'version-poweredby-others' => 'iba pa',
@@ -3654,6 +3860,8 @@ Dapat na nakatanggap ka ng [{{SERVER}}{{SCRIPTPATH}}/COPYING isang sipi ng Pangk
 'version-entrypoints' => 'Mga URL na butas-pasukan',
 'version-entrypoints-header-entrypoint' => 'Butas na pasukan',
 'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Landas ng artikulo]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Landas ng panitik]',
 
 # Special:FilePath
 'filepath' => 'Lokasyon ng talaksan (file path)',
@@ -3853,6 +4061,4 @@ O kaya, maaari mong gamitin ang maginhawang pormularyo sa ibaba. Ang iyong pagpu
 'duration-centuries' => '$1 {{PLURAL:$1|daantaon|mga daantaon}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenyo|mga milenyo}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Hindi magawang kunin ang mga kandado sa tagapaghain na $1.',
 );
index 308fc66..0dabc6f 100644 (file)
@@ -327,7 +327,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Son değişikliklerde gözden geçirilen düzenlemeleri gizle',
 'tog-newpageshidepatrolled' => 'Kontrol edilmiş sayfaları yeni sayfalar listesinde gizle',
 'tog-extendwatchlist' => 'İzleme listesini sadece son değil, tüm değişiklikleri görmek için genişlet',
-'tog-usenewrc' => 'Gelişmiş son değişiklikleri kullan (JavaScript gerekir)',
+'tog-usenewrc' => 'Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri gruplandırma (JavaScript gerektirir)',
 'tog-numberheadings' => 'Başlıkları otomatik numaralandır',
 'tog-showtoolbar' => 'Düzenleme yaparken araç çubuğunu göster (JavaScript gerekir)',
 'tog-editondblclick' => 'Çift tıklayarak sayfayı düzenle (JavaScript gerekir)',
@@ -335,17 +335,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Bölümleri bölüm başlığına sağ tıklayarak değiştirebilme olanağı ver (JavaScript)',
 'tog-showtoc' => 'İçindekiler tablosunu göster (3 taneden fazla başlığı olan sayfalar için)',
 'tog-rememberpassword' => 'Girişimi bu tarayıcıda hatırla (en fazla $1 {{PLURAL:$1|gün|gün}} için)',
-'tog-watchcreations' => 'Oluşturmuş olduğum sayfaları izleme listeme ekle',
-'tog-watchdefault' => 'Değişiklik yapılan sayfayı izleme listesine ekle',
-'tog-watchmoves' => 'Taşıdığım sayfaları izleme listeme ekle',
-'tog-watchdeletion' => 'Sildiğim sayfaları izleme listeme ekle',
+'tog-watchcreations' => 'Açtığım sayfaları ve yüklediğim dosyaları izleme listeme ekle',
+'tog-watchdefault' => 'Düzenleme yaptığım sayfaları ve dosyaları izleme listeme ekle',
+'tog-watchmoves' => 'Taşıdığım sayfaları ve dosyaları izleme listeme ekle',
+'tog-watchdeletion' => 'Sildiğim sayfaları ve dosyaları izleme listeme ekle',
 'tog-minordefault' => "Değişikliği 'küçük değişiklik' olarak seçili getir",
 'tog-previewontop' => 'Önizlemeyi yazma alanın üstünde göster',
 'tog-previewonfirst' => 'Değiştirmede önizlemeyi göster',
 'tog-nocache' => 'Tarayıcı sayfalarını bellekleme',
-'tog-enotifwatchlistpages' => 'Sayfa değişikliklerinde bana e-posta gönder',
+'tog-enotifwatchlistpages' => 'İzleme listemdeki bir sayfanın ya da dosyanın değiştirilmesi durumunda bana e-posta gönder',
 'tog-enotifusertalkpages' => 'Kullanıcı sayfamda değişiklik olduğunda bana e-posta gönder',
-'tog-enotifminoredits' => 'Sayfalardaki küçük değişikliklerde de bana e-posta gönder',
+'tog-enotifminoredits' => 'Sayfalardaki ve dosyalardaki küçük değişikliklerde bana e-posta gönder',
 'tog-enotifrevealaddr' => 'E-posta adresimi bildiri postalarımda göster.',
 'tog-shownumberswatching' => 'İzleyen kullanıcı sayısını göster',
 'tog-oldsig' => 'Mevcut imza:',
@@ -565,7 +565,7 @@ $1',
 'edithelp' => 'Nasıl değiştirilir?',
 'edithelppage' => 'Help:Sayfa nasıl değiştirilir',
 'helppage' => 'Help:İçindekiler',
-'mainpage' => 'Ana sayfa',
+'mainpage' => 'Ana Sayfa',
 'mainpage-description' => 'Ana sayfa',
 'policy-url' => 'Project:Politika',
 'portal' => 'Topluluk portali',
@@ -592,7 +592,7 @@ $1',
 'viewsourceold' => 'kaynağı gör',
 'editlink' => 'değiştir',
 'viewsourcelink' => 'kaynağı gör',
-'editsectionhint' => '$1 bölümünü değiştir',
+'editsectionhint' => 'Değiştirilen bölüm: $1',
 'toc' => 'Konu başlıkları',
 'showtoc' => 'göster',
 'hidetoc' => 'gizle',
@@ -678,6 +678,8 @@ Lütfen URL\'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] ileti
 'cannotdelete' => '"$1" sayfa ya da dosyası silinemedi.
 Başka bir kullanıcı tarafından silinmiş olabilir.',
 'cannotdelete-title' => '"$1" sayfasını silemezsiniz',
+'delete-hook-aborted' => 'Silme işlemi kanca tarafından durduruldu. 
+Hiçbir açıklama yapılmadı.',
 'badtitle' => 'Geçersiz başlık',
 'badtitletext' => 'Girilen sayfa adı ya hatalı ya boş ya da diller arası bağlantı veya vikiler arası bağlantı içerdiğinden geçerli değil. Başlıklarda kullanılması yasak olan bir ya da daha çok karakter içeriyor olabilir.',
 'perfcached' => 'Veriler daha önceden hazırlanmış olabilir. Bu sebeple güncel olmayabilir! A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
@@ -714,7 +716,7 @@ Verilen sebep: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Oturumu kapattınız.'''
 
-Şimdi kimliğinizi belirtmeksizin {{SITENAME}} sitesini kullanmaya devam edebilirsiniz ya da aynı kullanıcı adıyla ya da ister başka bir kullanıcı adıyla [[Special:UserLogin|yeniden oturum açabilirsiniz]].
+Şimdi anonim olarak {{SITENAME}} sitesini kullanmaya devam edebilirsiniz ya da aynı kullanıcı adıyla ya da ister başka bir kullanıcı adıyla [[Special:UserLogin|yeniden oturum açabilirsiniz]].
 Tarayıcınızın önbelleğini temizleyene kadar bazı sayfalar sanki hâlâ oturumunuz açıkmış gibi görünebilir.",
 'welcomecreation' => '== Hoş geldin, $1! ==
 
@@ -757,7 +759,7 @@ Lütfen çerez kullanımını açınız ve yeni kullanıcı adınız ve şifreni
 Çerezlerin açık olduğundan emin olun ve bu sayfayı yeniden yükleyip tekrar deneyin.',
 'noname' => 'Geçerli bir kullanıcı adı girmediniz.',
 'loginsuccesstitle' => 'Oturum açıldı',
-'loginsuccess' => '{{SITENAME}} sitesinde "$1" kullanıcı adıyla oturum açmış bulunmaktasınız.',
+'loginsuccess' => "'''{{SITENAME}} üzerinde \"\$1\" kullanıcı adıyla oturum açtınız.'''",
 'nosuchuser' => '"$1" adında bir kullanıcı bulunmamaktadır.
 Kullanıcı adları büyük-küçük harf duyarlıdır.
 Yazılışı kontrol edin veya [[Special:UserLogin/signup|yeni bir hesap açın]].',
@@ -785,7 +787,7 @@ Hizmeti kötüye kullanmayı önlemek için, her {{PLURAL:$1|bir saatte|$1 saatt
 'mailerror' => 'E-posta gönderim hatası: $1',
 'acct_creation_throttle_hit' => 'Sizin IP adresinizi kullanarak bu vikiyi ziyaret edenler son günde {{PLURAL:$1|1 hesap|$1 hesap}} oluşturdu, bu sayı bu zaman aralığında izin verilen azami sayıdır.
 Sonuç olarak, bu IP adresini kullanan ziyaretçiler şu anda daha fazla hesap açamazlar.',
-'emailauthenticated' => 'E-posta adresiniz $2 $3 tarihinde doğrulanmıştı.',
+'emailauthenticated' => 'E-posta adresiniz $2 $3 tarihinde doğrulandı.',
 'emailnotauthenticated' => 'E-posta adresiniz henüz onaylanmadı.
 Aşağıdaki işlevlerin hiçbiri için e-posta gönderilmeyecektir.',
 'noemailprefs' => 'Bu özelliklerin çalışması için bir e-posta adresi belirtiniz.',
@@ -793,6 +795,7 @@ Aşağıdaki işlevlerin hiçbiri için e-posta gönderilmeyecektir.',
 'invalidemailaddress' => 'Geçersiz bir formatta yazıldığından dolayı bu e-posta adresi kabul edilemez.
 Lütfen geçerli bir formatta e-posta adresi yazın veya bu bölümü boş bırakın.',
 'cannotchangeemail' => 'Hesabın e-posta adresi bu wiki üzerinden değiştirilemez.',
+'emaildisabled' => 'Bu siteden e-posta gönderemezsiniz.',
 'accountcreated' => 'Hesap açıldı',
 'accountcreatedtext' => '$1 için bir kullanıcı hesabı açıldı.',
 'createaccount-title' => '{{SITENAME}} için yeni kullanıcı hesabı oluşturulması',
@@ -1354,6 +1357,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'prefs-beta' => 'Beta özellikleri',
 'prefs-datetime' => 'Tarih ve saat',
 'prefs-labs' => 'Lab özellikleri',
+'prefs-user-pages' => 'Kullanıcı sayfaları',
 'prefs-personal' => 'Kullanıcı bilgileri',
 'prefs-rc' => 'Son değişiklikler',
 'prefs-watchlist' => 'İzleme listesi',
@@ -1386,7 +1390,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'prefs-help-watchlist-token' => 'Bu alanı gizli bir anahtarla doldurmak, izleme listeniz için bir RSS beslemesi oluşturur.
 Bu alandaki anahtarı bilen herkes izleme listenizi okuyabilir, bu yüzden güvenli bir değer seçin.
 Kullanabileceğiniz rastgele-üretilmiş bir değer: $1',
-'savedprefs' => 'Ayarlar kaydedildi.',
+'savedprefs' => 'Tercihleriniz kaydedildi.',
 'timezonelegend' => 'Zaman dilimi:',
 'localtime' => 'Yerel saat:',
 'timezoneuseserverdefault' => 'Viki varsayılanını kullanın ($1)',
@@ -1809,7 +1813,7 @@ Eğer sorun tekrarlanırsa, bir [[Special:ListUsers/sysop|hizmetli]] ile temasa
 'backend-fail-opentemp' => 'Geçici dosya açılamadı.',
 'backend-fail-closetemp' => 'Geçici dosya kapanamadı.',
 'backend-fail-read' => '$1 dosyası okunamadı.',
-'backend-fail-create' => '$1 dosyası oluşturulamadı.',
+'backend-fail-create' => '$1 dosyası yazılamadı.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Dosya ZIP denetimleri için açılırken bir hata ile karşılaşıldı.',
@@ -3793,6 +3797,7 @@ Resimler tam çözünürlükte görüntülenir, diğer dosya tipleri ilgili prog
 'logentry-move-move' => '$1 $3 sayfasını $4 sayfasına taşıdı',
 'logentry-move-move-noredirect' => '$1 $3 sayfasını $4 sayfasına yönlendirme olmaksızın taşıdı',
 'logentry-move-move_redir' => '$1 $3 sayfasını $4 sayfasına yönlendirme üzerinden taşıdı',
+'logentry-patrol-patrol-auto' => '$1 $3 sayfasını $4 sürümü ile kontrol etti',
 'logentry-newusers-newusers' => '$1 kullanıcı hesabı oluşturdu',
 'logentry-newusers-create' => '$1 kullanıcı hesabı oluşturdu',
 'logentry-newusers-create2' => '$1 kullanıcı hesabı oluşturdu $3',
diff --git a/languages/messages/MessagesTru.php b/languages/messages/MessagesTru.php
new file mode 100644 (file)
index 0000000..c3b8cb9
--- /dev/null
@@ -0,0 +1,881 @@
+<?php
+/** Ṫuroyo (Ṫuroyo)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Ariyo
+ */
+
+$messages = array(
+# User preference toggles
+'tog-oldsig' => 'Imḍa du3do:',
+
+'underline-always' => 'Kulnaqa',
+'underline-never'  => 'Hiç',
+
+# Dates
+'sunday'        => 'Yawme dḤuşabo',
+'monday'        => 'Yawme dTre',
+'tuesday'       => 'Yawme dTloṭo',
+'wednesday'     => 'Yawme dArb³o',
+'thursday'      => 'Yawme dḤamşo',
+'friday'        => 'Yawme d3rufto',
+'saturday'      => 'Yawme dŞabṭo',
+'sun'           => 'Yawme dḤuşabo',
+'mon'           => 'Yawme dTre',
+'tue'           => 'Yawme dTloṭo',
+'wed'           => 'Yawme dArb³o',
+'thu'           => 'Yawme dḤamşo',
+'fri'           => 'Yawme d3rufto',
+'sat'           => 'Yawme dŞabṭo',
+'january'       => 'Konun ḥroy',
+'february'      => 'Şboṫ',
+'march'         => 'Oḍor',
+'april'         => 'Nison',
+'may_long'      => 'İyor',
+'june'          => 'Ḥziron',
+'july'          => 'Tamuz',
+'august'        => 'Ob',
+'september'     => 'Eylül',
+'october'       => 'Teşrin qḍim',
+'november'      => 'Teşrin ḥroy',
+'december'      => 'Konun qḍim',
+'january-gen'   => 'Konun ḥroy',
+'february-gen'  => 'Şboṫ',
+'march-gen'     => 'Oḍor',
+'april-gen'     => 'Nison',
+'may-gen'       => 'İyor',
+'june-gen'      => 'Ḥziron',
+'july-gen'      => 'Tamuz',
+'august-gen'    => 'Ob',
+'september-gen' => 'Eylül',
+'october-gen'   => 'Teşrin qḍim',
+'november-gen'  => 'Teşrin ḥroy',
+'december-gen'  => 'Konun qḍim',
+'jan'           => 'Konun II',
+'feb'           => 'Şboṫ',
+'mar'           => 'Oḍor',
+'apr'           => 'Nison',
+'may'           => 'İyor',
+'jun'           => 'Ḥziron',
+'jul'           => 'Tamuz',
+'aug'           => 'Ob',
+'sep'           => 'Eylül',
+'oct'           => 'Teşrin I',
+'nov'           => 'Teşrin II',
+'dec'           => 'Konun I',
+
+# Categories related messages
+'pagecategories'         => '{{PLURAL:$1|Sedro|Sedre}}',
+'category_header'        => 'Faṭoṭe bu Sedro "$1"',
+'subcategories'          => 'Sedre na³ime',
+'category-media-header'  => 'Mediya buSedro "$1"',
+'category-empty'         => 'U³do layto Faṭo aw Mediya buSedrano.',
+'hidden-categories'      => '{{PLURAL:$1|Hidden 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-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-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.}}',
+'listingcontinuesabbrev' => 'mdawam',
+'noindex-category'       => 'Noindexed pages',
+
+'about'         => '3al',
+'newwindow'     => '(gmıftaḥ bKawṭo ḥaṭto)',
+'cancel'        => 'Mbaṫel',
+'moredotdotdot' => 'Heşa...',
+'mypage'        => 'iFaṭayḍi',
+'mytalk'        => 'uMamlayḍi',
+'navigation'    => 'Navigasyon',
+'and'           => '&#32;u',
+
+# Cologne Blue skin
+'qbfind'         => 'Ḥzay',
+'qbbrowse'       => 'Krax',
+'qbedit'         => 'Mşaḥlaf',
+'qbpageoptions'  => 'iFaṭaṭe',
+'qbmyoptions'    => 'aFaṭoṭayḍi',
+'qbspecialpages' => 'Faṭoṭe dilonoye',
+'faq'            => 'Şuwole',
+'faqpage'        => 'Project:FAQ',
+
+# Vector skin
+'vector-action-addsection' => 'Maḥat Fusoqo ḥaṭo',
+'vector-action-delete'     => 'Slag',
+'vector-action-move'       => 'Mtaxar',
+'vector-action-protect'    => 'Mastar',
+'vector-view-create'       => 'Xlaq',
+'vector-view-edit'         => 'Mşaḥlaf',
+'vector-view-history'      => 'Maktabzabno',
+'vector-view-view'         => 'Qray',
+'vector-view-viewsource'   => 'Maḥway li aMabu³e.',
+'actions'                  => 'Dubore',
+'namespaces'               => 'Dukṭo luIşmo',
+'variants'                 => 'Variants',
+
+'errorpagetitle'    => 'Fawdo',
+'returnto'          => 'D³ar l$1',
+'tagline'           => 'men {{SITENAME}}',
+'help'              => '3udrono',
+'search'            => 'krax',
+'searchbutton'      => 'Krax',
+'go'                => 'Zux',
+'searcharticle'     => 'Zux',
+'history'           => 'Maktabzabno diFaṭo',
+'history_short'     => 'Maktabzabno',
+'updatedmarker'     => 'aŞuḥlofe datsimi miNaqa du3boroayḍi ḥaroyo',
+'printableversion'  => 'Printable version',
+'permalink'         => 'Asiruṭo aminoyto',
+'print'             => 'Ṫba³',
+'view'              => 'Qray',
+'edit'              => 'Mşaḥlaf',
+'create'            => 'Xlaq',
+'editthispage'      => 'Mşaḥlaf iFaṭaṭe',
+'create-this-page'  => 'Xlaq iFaṭaṭe',
+'delete'            => 'Slag',
+'deletethispage'    => 'Slag iFaṭaṭe',
+'protect'           => 'Mastar',
+'protect_change'    => 'mşaḥlaf',
+'protectthispage'   => 'Mastar iFaṭaṭe',
+'newpage'           => 'Faṭo ḥaṭto',
+'talkpage'          => 'Sım Droşo 3al iFaṭaṭe',
+'talkpagelinktext'  => 'Mamlo',
+'specialpage'       => 'Faṭo dilonoyto',
+'personaltools'     => 'aMonayḍi',
+'postcomment'       => 'Fusoqo ḥaṭo',
+'articlepage'       => 'Ḥur baḤbişoṭo',
+'talk'              => 'Droşo',
+'views'             => 'Ḥzayoṭo',
+'toolbox'           => 'Mone',
+'viewtalkpage'      => 'Ḥur buDroşo',
+'otherlanguages'    => 'bLeşone ḥrene',
+'redirectedfrom'    => '(Redirected from $1)',
+'lastmodifiedat'    => 'uŞuḥlofo ḥaroyo diFaṭaṭe bu Zabnano wa:  $1 $2 .',
+'jumpto'            => 'Zux l',
+'jumptonavigation'  => 'Navigasyon',
+'jumptosearch'      => 'Kruxyo',
+'pool-errorunknown' => 'Fawdo nuxroyo',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'            => '3al {{SITENAME}}',
+'aboutpage'            => 'Project: 3al',
+'copyrightpage'        => '{{ns:project}}:Ḥaqat duKaṭowo',
+'currentevents'        => 'Gedşe du³do',
+'currentevents-url'    => 'Project:Gedşe du3do',
+'disclaimers'          => 'Disclaimers',
+'disclaimerpage'       => 'Project: Disclaimer gawonoyo',
+'edithelp'             => 'Editing help',
+'edithelppage'         => 'Help:Mşaḥlaf',
+'helppage'             => 'Help: Ḥbişoṭo',
+'mainpage'             => 'Faṭo rişoyto',
+'mainpage-description' => 'Faṭo rişoyto',
+'portal'               => 'Portal diJama³a',
+'portal-url'           => 'Project: Portal diJama³a',
+'privacy'              => 'Setoro daMawd³onwoṭo',
+'privacypage'          => 'Project: Setoro daMawd³onwoṭo',
+
+'badaccess-group0' => 'Hat latlux uFsoso dkolozım dsaymat iḤarakaṭe.',
+
+'ok'                      => 'Tamam',
+'retrievedfrom'           => 'men "$1"',
+'youhavenewmessages'      => 'Kıtlux $1 ($2) .',
+'newmessageslink'         => 'Ṫebe ḥaṭe',
+'newmessagesdifflink'     => 'Degoşo ḥaroyo',
+'youhavenewmessagesmulti' => 'Kitlux Ṫebe ḥaṭe b$1',
+'editsection'             => 'mşaḥlaf',
+'editold'                 => 'mşaḥlaf',
+'viewsourceold'           => 'Maḥway li uMabu³o.',
+'editlink'                => 'mşaḥlaf',
+'viewsourcelink'          => 'Maḥway li uMabu³o.',
+'editsectionhint'         => 'Mşaḥlaf uFusoqano: $1',
+'toc'                     => 'Ḥbişoṭo',
+'showtoc'                 => 'maḥway',
+'hidetoc'                 => 'tlay',
+'collapsible-collapse'    => 'sxar',
+'collapsible-expand'      => 'ftaḥ',
+'feedlinks'               => 'Feed:',
+'site-rss-feed'           => '$1 RSS feed',
+'site-atom-feed'          => '$1 Atom feed',
+'page-rss-feed'           => '"$1" RSS feed',
+'page-atom-feed'          => 'Atom feed l"$1"',
+'red-link-title'          => '$1 (layto iFaṭaṭe)',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main'      => 'Faṭo',
+'nstab-user'      => 'Faṭo duHadomo',
+'nstab-media'     => 'Faṭo diMediya',
+'nstab-special'   => 'Faṭo dilonoyto',
+'nstab-project'   => 'Faṭo die Proja',
+'nstab-image'     => 'Fayl',
+'nstab-mediawiki' => 'Ṫebo',
+'nstab-template'  => 'Template',
+'nstab-help'      => 'Faṭo d3udrono',
+'nstab-category'  => 'Sedro',
+
+# General errors
+'error'              => 'Fawdo',
+'missing-article'    => 'uSyomo d$1 $2 lo komaḥwe biDatabase.
+
+iFaṭaṭe belki sligo aw mtaxro merke.
+
+Elo iḍa dlo howe hawxa belki ḥselux Fawdo biSoftware. Bo³o haw Ṫebo l[[Special:ListUsers/sysop|Administrator]] u kṭaw u"URL".',
+'missingarticle-rev' => '(Numara duVersyon: $1)',
+'badtitle'           => 'Bad title',
+'badtitletext'       => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
+It may contain one or more characters which cannot be used in titles.',
+'viewsource'         => 'Maḥway li aMabu³e.',
+'namespaceprotected' => "Hat latlux Ḥaq dımşaḥılfat Faṭoṭe bi'''$1''' Dukṭo xliṭo.",
+
+# Virus scanner
+'virus-unknownscanner' => 'Antivirus nuxroyo:',
+
+# Login and logout pages
+'yourname'                => 'Işme duHadomo:',
+'yourpassword'            => 'Qliḍo:',
+'yourpasswordagain'       => 'Naqla ḥreto kṭaw uQliḍo:',
+'remembermypassword'      => 'Dxar uQliḍayḍi buBrowser (buSowudo $1 {{PLURAL:$1|Yawmo|Yawme}})',
+'login'                   => '3bar',
+'nav-login-createaccount' => '3bar / Hway Hadomo',
+'loginprompt'             => 'Glozım maqablat Cookies qanna dqudrat fıtḥat {{SITENAME}}.',
+'userlogin'               => '3bar / Hway Hadomo',
+'userloginnocreate'       => '3bar',
+'logout'                  => 'Nfoqo',
+'userlogout'              => 'Nfoqo',
+'notloggedin'             => 'Heş lo3abirat.',
+'nologin'                 => 'Heş lawit Hadomo? $1',
+'nologinlink'             => 'Hway Hadomo',
+'createaccount'           => 'Hway Hadomo',
+'gotaccount'              => 'Ma hawit ste Hadomo? $1',
+'gotaccountlink'          => '3bar',
+'userlogin-resetlink'     => 'Ṫa³at uQliḍayḍox?',
+'createaccountmail'       => 'buEmail',
+'wrongpassword'           => 'uQliḍayḍux fawdo yo.
+Mjarab Naqla ḥreto.',
+'wrongpasswordempty'      => 'Lo msta³melux uQliḍayḍux.
+Mjarab Naqla ḥreto.',
+'password-name-match'     => 'Glozım towe Frişuṭo beyn uQliḍo u uIşmayḍux.',
+'mailmypassword'          => 'Mşadar li Qliḍo ḥaṭo',
+'loginlanguagelabel'      => 'Leşono: $1',
+
+# Change password dialog
+'resetpass'                 => 'Mşaḥlaf uQliḍo.',
+'oldpassword'               => 'Qliḍo 3atiqo:',
+'newpassword'               => 'Qliḍo ḥaṭo:',
+'retypenew'                 => 'Qliḍo ḥaṭo (disa):',
+'resetpass-submit-loggedin' => 'Mşaḥlaf uQliḍo',
+
+# Special:PasswordReset
+'passwordreset-username' => 'Işme duHadomo:',
+
+# Special:ChangeEmail
+'changeemail-newemail' => 'Email-adres ḥaṭo:',
+
+# Edit page toolbar
+'bold_sample'     => 'Ḥarfe ḥlime',
+'bold_tip'        => 'Ḥarfe ḥlime',
+'italic_sample'   => 'Ḥarfe 3wije',
+'italic_tip'      => 'Ḥarfe 3wije',
+'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'      => 'uSyomano latyo buFormat',
+'image_tip'       => 'Embedded file',
+'media_tip'       => 'File link',
+'sig_tip'         => 'Mḍay herke u kṭaw iSa³aye muqa yo.',
+'hr_tip'          => 'Horizontal line (use sparingly)',
+
+# Edit pages
+'summary'                          => 'Summary:',
+'minoredit'                        => 'This is a minor edit',
+'watchthis'                        => 'Watch this page',
+'savearticle'                      => 'Mqayad iFaṭaṭe',
+'preview'                          => 'Preview',
+'showpreview'                      => 'Show preview',
+'showdiff'                         => 'Maḥway aŞuḥlofe',
+'anoneditwarning'                  => "'''Diqad''' Heş lo 3abirat.
+uIP-Adresayḍux gmikṭaw buMaktabzabno diFaṭaṭe. Kul Noşo kibe ḥozele u lo komislag.",
+'loginreqtitle'                    => 'Glozım 3obrat',
+'loginreqlink'                     => '3bar',
+'loginreqpagetext'                 => 'Glozım $1 qanna dqudrat ḥozat Faṭoṭe ḥrene.',
+'newarticle'                       => '(Ḥaṭo)',
+'newarticletext'                   => "You have followed a link to a page that does not exist yet.
+To create the page, start typing in the box below (see the [[{{MediaWiki:Helppage}}|help page]] for more info).
+If you are here by mistake, click your browser's '''back''' button.",
+'noarticletext'                    => 'There is currently no text in this page.
+You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
+or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
+'noarticletext-nopermission'       => 'There is currently no text in this page.
+You 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>.',
+'previewnote'                      => "'''Remember that this is only a preview.'''
+Your changes have not yet been saved!",
+'editing'                          => 'Şuḥlofo d$1',
+'editingsection'                   => 'Mşaḥlaf $1 (Fusoqo)',
+'yourtext'                         => 'uSyomayḍux',
+'yourdiff'                         => 'Frişwoṭo',
+'templatesused'                    => '{{PLURAL:$1|Template|Templates}} used on this page:',
+'template-protected'               => '(protected)',
+'template-semiprotected'           => '(semi-protected)',
+'hiddencategories'                 => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
+'permissionserrorstext-withaction' => 'You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:',
+'recreate-moveddeleted-warn'       => "'''Warning: You are recreating a page that was previously deleted.'''
+
+You should consider whether it is appropriate to continue editing this page.
+The deletion and move log for this page are provided here for convenience:",
+'moveddeleted-notice'              => 'iFaṭaṭe sligto yo.
+The deletion and move log for the page are provided below for reference.',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning'  => "'''Warning:''' Template include size is too large.
+Some templates will not be included.",
+'post-expand-template-inclusion-category' => 'Pages where template include size is exceeded',
+'post-expand-template-argument-warning'   => "'''Warning:''' This page contains at least one template argument which has a too large expansion size.
+These arguments have been omitted.",
+'post-expand-template-argument-category'  => 'Pages containing omitted template arguments',
+
+# History pages
+'viewpagelogs'           => 'View logs for this page',
+'currentrev-asof'        => 'Latest revision as of $1',
+'revisionasof'           => 'Versyon 3atiqo diNaqa: $1',
+'revision-info'          => 'Revision as of $1 by $2',
+'previousrevision'       => '←Versyon 3atiqtır',
+'nextrevision'           => 'Versyon ḥaṭtır',
+'currentrevisionlink'    => 'Latest revision',
+'cur'                    => 'du³do',
+'next'                   => 'Ḥreto',
+'last'                   => 'dmeqım',
+'page_first'             => 'Badaye',
+'page_last'              => 'Ḥarayto',
+'histlegend'             => "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />
+Legend: '''({{int:cur}})''' = difference with latest revision, '''({{int:last}})''' = difference with preceding revision, '''{{int:minoreditletter}}''' = minor edit.",
+'history-fieldset-title' => 'Krax buMaktabzabno',
+'history-show-deleted'   => 'Bes aSlige',
+'histfirst'              => 'Meqım kulle',
+'histlast'               => 'Ḥaṭo',
+'historysize'            => '({{PLURAL:$1|1 byte|$1 bytes}})',
+'historyempty'           => '(xalyo)',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1  b$2',
+
+# Revision deletion
+'rev-delundel'               => 'maḥway / tlay',
+'rev-showdeleted'            => 'maḥway',
+'revdelete-show-file-submit' => 'Eh',
+'revdelete-radio-same'       => '(lo mşaḥalfat)',
+'revdelete-radio-set'        => 'Eh',
+'revdelete-radio-unset'      => 'Lo',
+'revdel-restore'             => 'change visibility',
+'revdel-restore-deleted'     => 'deleted revisions',
+'revdel-restore-visible'     => 'visible revisions',
+'pagehist'                   => 'Maktabzabno diFaṭo',
+
+# Merge log
+'revertmerge' => 'Unmerge',
+
+# Diffs
+'history-title'           => 'Revision history of "$1"',
+'lineno'                  => 'Serṫo $1:',
+'compareselectedversions' => 'Compare selected revisions',
+'editundo'                => 'slag',
+'diff-multi'              => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
+
+# Search results
+'searchresults'                    => 'Nafqe duKruxyayḍux',
+'searchresults-title'              => 'Nafqe duKruxyo l"$1"',
+'searchsubtitleinvalid'            => "Karixat '''$1'''",
+'prevn'                            => '{{PLURAL:$1|$1}} meqımtır',
+'nextn'                            => '{{PLURAL:$1 ḥaṭtır| $1 ḥaṭtır }}',
+'prevn-title'                      => '{{PLURAL:$1 Nafqo meqımtır|$1 Nafqe meqımtır}}',
+'nextn-title'                      => '{{PLURAL:$1|Nafqo ḥreno|$1 Nafqe ḥrene}}',
+'shown-title'                      => 'maḥway $1 {{PLURAL:$1|Nafqo|Nafqe}} bḥḍo Faṭo',
+'viewprevnext'                     => 'Maḥway ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend'                => '3ayar duKruxyo',
+'searchmenu-exists'                => "'''Kito Faṭo herke Işma \"[[:\$1]]\"yo'''",
+'searchmenu-new'                   => 'Kṭaw iFaṭaṭe "[[:$1]]" buWiki.',
+'searchhelp-url'                   => 'Help: Ḥbişoṭo',
+'searchprofile-articles'           => 'Faṭoṭe daḤbişoṭo',
+'searchprofile-project'            => 'Faṭoṭe du3udrono u daProjat',
+'searchprofile-images'             => 'Multimediya',
+'searchprofile-everything'         => 'Kulmede',
+'searchprofile-advanced'           => 'Advanced',
+'searchprofile-articles-tooltip'   => 'Krax b$1',
+'searchprofile-project-tooltip'    => 'Krax b$1',
+'searchprofile-images-tooltip'     => 'Krax Ṥurtoṭe',
+'searchprofile-everything-tooltip' => 'Krax baḤbişoṭo (baFaṭoṭe duDroşo ste)',
+'searchprofile-advanced-tooltip'   => 'Search in custom namespaces',
+'search-result-size'               => '$1 ({{PLURAL:$2|1 Melṭo|$2 Mele}})',
+'search-result-category-size'      => '{{PLURAL:$1|1 Hadomo|$1 Hadome}} ({{PLURAL:$2|1 Sedro taḥtoyo|$2 Sedre taḥtoye}}, {{PLURAL:$3|1 file|$3 files}})',
+'search-redirect'                  => '(Asiruṭo men $1)',
+'search-section'                   => '(Fusoqo $1)',
+'search-suggest'                   => 'Ub³atwa dkıṭwat: $1?',
+'search-interwiki-more'            => '(heşa)',
+'searchrelated'                    => 'related',
+'searchall'                        => 'kulle',
+'showingresultsheader'             => "{{PLURAL:$5|Nafqo '''$1''' of '''$3'''|Nafqe '''$1 - $2''' men '''$3'''}} l'''$4'''",
+'search-nonefound'                 => 'Für deine Suchanfrage wurden keine Ergebnisse gefunden.',
+'powersearch-field'                => 'Krax',
+'powersearch-togglelabel'          => 'Sım Qontrol:',
+'powersearch-toggleall'            => 'Kulle',
+
+# Preferences page
+'preferences'               => '3ayarat',
+'mypreferences'             => 'a3ayaratayḍi',
+'prefs-edits'               => 'Menyono daŞuḥlofe kulle:',
+'prefs-resetpass'           => 'Mşaḥlaf uQliḍo',
+'prefs-email'               => '3ayarat duEmail',
+'saveprefs'                 => 'Mqayad',
+'searchresultshead'         => 'Kruxyo',
+'timezoneregion-africa'     => 'Afriqa',
+'timezoneregion-america'    => 'Ameriqa',
+'timezoneregion-antarctica' => 'Antarctica',
+'timezoneregion-arctic'     => 'Arctic',
+'timezoneregion-asia'       => 'Asia',
+'timezoneregion-atlantic'   => 'Yamo atlantikoyo',
+'timezoneregion-australia'  => 'Australia',
+'timezoneregion-europe'     => 'Awrifi',
+'timezoneregion-indian'     => 'Yamo hindoyo',
+'youremail'                 => 'Adres duEmail',
+'username'                  => 'Işme duHadomo:',
+'prefs-memberingroups'      => 'Hadomo d{{PLURAL:$1|Gudo|Gudoṭo}}:',
+'prefs-registration'        => 'Zabno duSugolo:',
+'yourrealname'              => 'Işmo şariro:',
+'yourlanguage'              => 'Leşono',
+'yournick'                  => 'Imḍa ḥaṭto:',
+'yourgender'                => 'Ğenso:',
+'gender-male'               => 'Dekronoyo',
+'gender-female'             => 'Neqıbṭonoyo',
+'email'                     => 'Email',
+'prefs-help-email'          => 'Latat majbur dkıṭwat uEmail-Adresayḍox, elo glozam inaqla ṫo³at uQliḍayḍox u hakka dlozam dmişadar lox Qliḍo ḥaṭo.',
+'prefs-help-email-others'   => 'Kibux mijğolat 3am Hadome ğer biFaṭo duMamlo u luglozam dumat Işmux.',
+'prefs-signature'           => 'Imḍa',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'uEmail-Adresayḍux m³adlo yo.',
+
+# Groups
+'group-user' => 'Hadome',
+'group-all'  => '(kulle)',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'Mşaḥlaf iFaṭaṭe',
+
+# Recent changes
+'nchanges'                        => '$1 {{PLURAL:$1|Şuḥlofo|Şuḥlofe}}',
+'recentchanges'                   => 'Şuḥlofe ḥaroye',
+'recentchanges-legend'            => '3ayar daŞuḥlofe',
+'recentchanges-summary'           => 'biFaṭaṭe kibox ḥozat aŞuḥlofe ḥaroye.',
+'recentchanges-feed-description'  => 'biFaṭaṭe kibox ḥozat aŞuḥlofe ḥaroye.',
+'recentchanges-label-newpage'     => 'Faṭo ḥaṭto',
+'recentchanges-label-minor'       => 'This is a minor edit',
+'recentchanges-label-bot'         => 'uŞuḥlofano sim muBot.',
+'recentchanges-label-unpatrolled' => 'This edit has not yet been patrolled',
+'rcnote'                          => "Below {{PLURAL:$1|is '''1''' change|are the last '''$1''' changes}} in the last {{PLURAL:$2|day|'''$2''' days}}, as of $5, $4.",
+'rcnotefrom'                      => 'Herke komaḥwın aŞuḥlofe ḥaroye men ""$2"" (hul buSowudo ""$1"").',
+'rclistfrom'                      => 'Maḥway li Şuḥlofe ḥaṭe men $1',
+'rcshowhideminor'                 => '$1 minor edits',
+'rcshowhidebots'                  => '$1 bots',
+'rcshowhideliu'                   => '$1 Hadome d3abiri',
+'rcshowhideanons'                 => '$1 Hadomo nuxroyo',
+'rcshowhidepatr'                  => '$1 patrolled edits',
+'rcshowhidemine'                  => 'aMaṫwoṭayḍi ($1)',
+'rclinks'                         => 'Maḥway li $1 aŞuḥlofe ḥaroye men meqım $2 Yawme hul u³do. <br />$3',
+'diff'                            => 'Frişuṭo',
+'hist'                            => 'Maktabzabno',
+'hide'                            => 'Tlay',
+'show'                            => 'Maḥway',
+'minoreditletter'                 => 'm',
+'newpageletter'                   => 'N',
+'boteditletter'                   => 'b',
+'rc-enhanced-expand'              => 'Maḥway aŞelole',
+'rc-enhanced-hide'                => 'Tlay aŞelole',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Şuḥlofe bFaṭoṭe masre',
+'recentchangeslinked-toolbox'  => 'Şuḥlofe bFaṭoṭe masre',
+'recentchangeslinked-title'    => 'Şuḥlofe bFaṭoṭe dkıtne masre b$1',
+'recentchangeslinked-noresult' => 'No changes on linked pages during the given period.',
+'recentchangeslinked-summary'  => "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).
+Pages on [[Special:Watchlist|your watchlist]] are '''bold'''.",
+'recentchangeslinked-page'     => 'Işmo diFaṭo',
+'recentchangeslinked-to'       => 'Maḥway li Şuḥlofe dFaṭoṭe dkitne masre lerke.',
+
+# Upload
+'upload'        => 'Mosaq Fayl',
+'uploadlogpage' => 'Upload log',
+'filedesc'      => 'Sfiquṭo',
+'uploadedimage' => 'mosaq "[[$1]]"',
+
+'license'        => 'Fsoso',
+'license-header' => 'Fsoso',
+
+# File description page
+'file-anchor-link'       => 'Fayl',
+'filehist'               => 'Maktabzabno duFayl',
+'filehist-help'          => 'Click on a date/time to view the file as it appeared at that time.',
+'filehist-revert'        => 'revert',
+'filehist-current'       => 'current',
+'filehist-datetime'      => 'Zabno',
+'filehist-thumb'         => 'Thumbnail',
+'filehist-thumbtext'     => 'Thumbnail for version as of $1',
+'filehist-user'          => 'Hadomo',
+'filehist-dimensions'    => 'Dimensions',
+'filehist-comment'       => 'Comment',
+'imagelinks'             => 'File usage',
+'linkstoimage'           => 'The following {{PLURAL:$1|page links|$1 pages link}} to this file:',
+'nolinkstoimage'         => 'There are no pages that link to this file.',
+'sharedupload-desc-here' => 'This file is from $1 and may be used by other projects.
+The description on its [$2 file description page] there is shown below.',
+
+# Random page
+'randompage' => 'Faṭo gedşonoyto',
+
+# Statistics
+'statistics' => 'Mardonwoṭo',
+
+'disambiguationspage' => 'Template:disambig',
+
+'brokenredirects-edit'   => 'mşaḥlaf',
+'brokenredirects-delete' => 'slag',
+
+# Miscellaneous special pages
+'nbytes'        => '$1 {{PLURAL:$1|byte|bytes}}',
+'nmembers'      => '$1 {{PLURAL:$1|Hadomo|Hadome}}',
+'prefixindex'   => 'aFaṭoṭe kulle dkitte Prefiks',
+'usercreated'   => '{{GENDER:$3|kṭule}}  $1 b$2',
+'newpages'      => 'Faṭoṭe ḥaṭe',
+'move'          => 'Mtaxar',
+'pager-newer-n' => '{{PLURAL:$1|1 ḥreno |$1 ḥrene}}',
+'pager-older-n' => '{{PLURAL:$1|3atiqo1|3atiqe $1}}',
+
+# Book sources
+'booksources'               => 'Kruxyo baNumarat duISBN',
+'booksources-search-legend' => 'Krax Mabu³e me Kṭowe',
+'booksources-go'            => 'Zux',
+
+# Special:Log
+'log' => 'Logs',
+
+# Special:AllPages
+'allpages'       => 'aFaṭaṭe kulle',
+'alphaindexline' => '$1  l$2',
+'allarticles'    => 'aFaṭaṭe kulle',
+'allpagesnext'   => 'Ḥreto',
+'allpagessubmit' => 'Zux',
+
+# Special:Categories
+'categories' => 'Sedre',
+
+# Special:DeletedContributions
+'deletedcontributions'             => 'Maṫwoṭo slige',
+'deletedcontributions-title'       => 'Maṫwoṭo slige',
+'sp-deletedcontributions-contribs' => 'Maṫwoṭo',
+
+# Special:LinkSearch
+'linksearch-ok'   => 'Krax',
+'linksearch-line' => '$1 masro yo b$2',
+
+# Special:ListUsers
+'listusers-submit' => 'Maḥway',
+
+# Special:Log/newusers
+'newuserlogpage' => 'User creation log',
+
+# Special:ListGroupRights
+'listgrouprights-group'    => 'Gudo',
+'listgrouprights-rights'   => 'Ḥaqat',
+'listgrouprights-helppage' => 'Help: Ḥaqat diGudo',
+'listgrouprights-members'  => '(Lista daHadome)',
+
+# E-mail user
+'emailuser'     => 'Kṭaw Email luHadomano.',
+'emailusername' => 'Işme duHadomo:',
+'emailfrom'     => 'Men:',
+'emailto'       => 'Lwoṭ:',
+'emailmessage'  => 'Ṫebo:',
+
+# Watchlist
+'watchlist'         => 'My watchlist',
+'mywatchlist'       => 'My watchlist',
+'watchlistfor2'     => 'L$1 $2',
+'watch'             => 'Watch',
+'unwatch'           => 'Unwatch',
+'watchlist-details' => '{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not counting talk pages.',
+'wlshowlast'        => 'Maḥway li aŞuḥlofe dıtsimi meqım $1 Sa³ayat $2 Yawme $3',
+'watchlist-options' => 'Watchlist options',
+
+# Delete
+'actioncomplete' => 'uDuboro kamıl',
+'actionfailed'   => 'Action failed',
+'dellogpage'     => 'Deletion log',
+
+# Rollback
+'rollbacklink' => 'rollback',
+
+# Protect
+'protectlogpage'   => 'Protection log',
+'protectedarticle' => 'mastar "[[$1]]"',
+
+# Undelete
+'undeletelink'              => 'view/restore',
+'undeleteviewlink'          => 'ḥur',
+'undelete-search-submit'    => 'Krax',
+'undelete-show-file-submit' => 'Eh',
+
+# Namespace form on various pages
+'namespace'      => 'Dukṭo luIşmo',
+'invert'         => 'Invert selection',
+'blanknamespace' => '(Rişoyto)',
+
+# Contributions
+'contributions'       => 'Maṫwoṭo duHadomo:',
+'contributions-title' => 'Maṫwoṭo d$1',
+'mycontris'           => 'aMaṫwoṭayḍi',
+'contribsub2'         => 'd$1 ($2)',
+'uctop'               => '(ḥaroyo)',
+'month'               => 'muYarḥo',
+'year'                => 'hul iŞato:',
+
+'sp-contributions-newbies'  => 'Bes maḥway Maṫwoṭo dHadome ḥaṭe',
+'sp-contributions-blocklog' => 'Block log',
+'sp-contributions-deleted'  => 'Maṫwoṭo slige',
+'sp-contributions-uploads'  => 'Fayl masalqo',
+'sp-contributions-logs'     => 'logs',
+'sp-contributions-talk'     => 'Mamlo',
+'sp-contributions-search'   => 'Krax Maṫwoṭo',
+'sp-contributions-username' => 'IP-Adres aw Işme duHadmomo:',
+'sp-contributions-toponly'  => 'Only show edits that are latest revisions',
+'sp-contributions-submit'   => 'Krax',
+
+# What links here
+'whatlinkshere'            => 'Asirwoṭo biFaṭaṭe',
+'whatlinkshere-title'      => 'Faṭoṭe dkitte Asiruṭo 3am"$1"',
+'whatlinkshere-page'       => 'Faṭo',
+'linkshere'                => "aFaṭoṭani masre ne 3am '''[[:$1]]''':",
+'nolinkshere'              => "Layto Faṭoṭe dkitte Asiruṭo 3am '''[[:$1]]'''.",
+'isredirect'               => 'redirect page',
+'istemplate'               => 'transclusion',
+'isimage'                  => 'Asiruṭo duFayl',
+'whatlinkshere-prev'       => '{{PLURAL:$1|meqımtır|$1 meqımtır}}',
+'whatlinkshere-next'       => '{{PLURAL:$1|ḥreno|$1 ḥrene}}',
+'whatlinkshere-links'      => '← Asirwoṭo',
+'whatlinkshere-hideredirs' => '$1 redirects',
+'whatlinkshere-hidetrans'  => '$1 transclusions',
+'whatlinkshere-hidelinks'  => '$1 Asirwoṭo',
+'whatlinkshere-hideimages' => '$1 Asiruṭo duFayl',
+'whatlinkshere-filters'    => 'Filtrat',
+
+# Block/unblock
+'ipboptions'               => '2 Sa³ayat:2 hours,1 Yawmo:1 day,3 Yawme:3 days,1 Şabṭo:1 week,2 Şabe:2 weeks,1 Yarḥo:1 month,3 Yarḥe:3 months,6 Yarḥe :6 months,1 Şato:1 year,indefinite:infinite',
+'ipblocklist'              => 'Blocked users',
+'ipblocklist-submit'       => 'Krax',
+'blocklink'                => 'Maḥram',
+'unblocklink'              => 'unblock',
+'change-blocklink'         => 'change block',
+'contribslink'             => 'Maṫwoṭo',
+'blocklogpage'             => 'Block log',
+'blocklogentry'            => 'blocked [[$1]] with an expiry time of $2 $3',
+'block-log-flags-nocreate' => 'account creation disabled',
+
+# Move page
+'movelogpage' => 'Move log',
+'revertmove'  => 'revert',
+
+# Export
+'export' => 'Mofaq iFaṭaṭe',
+
+# Namespace 8 related
+'allmessages'               => 'Ṫebo duSistem dMEdiaWiki',
+'allmessagesname'           => 'Işmo',
+'allmessagesdefault'        => 'Syomo standard',
+'allmessages-language'      => 'Leşono',
+'allmessages-filter-submit' => 'Zux',
+
+# Thumbnails
+'thumbnail-more'  => 'Rabtır',
+'thumbnail_error' => 'Error creating thumbnail: $1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'iFaṭaṭyḍox',
+'tooltip-pt-mytalk'               => 'iFaṭayḍux duDroşo',
+'tooltip-pt-preferences'          => 'a3ayaratayḍux',
+'tooltip-pt-watchlist'            => 'Lista dFaṭoṭe dkib³at mşaḥılfat',
+'tooltip-pt-mycontris'            => 'Lista daMaṫwoṭayḍox',
+'tooltip-pt-login'                => 'İnaqa demqaydat ruḥox ṫawo yo, elo letat mejbur',
+'tooltip-pt-logout'               => 'Nfoqo',
+'tooltip-ca-talk'                 => 'Droşo 3al iFaṭo daḤbişoṭo',
+'tooltip-ca-edit'                 => 'Kibux mşaḥılfat iFaṭaṭe, elo bo³o msta³mal uZra³lo duQontrol meqım demqaydat iFaṭo',
+'tooltip-ca-addsection'           => 'Bday Fusoqo ḥaṭo',
+'tooltip-ca-viewsource'           => 'This page is protected.
+You can view its source',
+'tooltip-ca-history'              => 'Past revisions of this page',
+'tooltip-ca-protect'              => 'Mastar iFaṭaṭe',
+'tooltip-ca-delete'               => 'Slag iFaṭaṭe',
+'tooltip-ca-move'                 => 'Mataxar iFaṭaṭe',
+'tooltip-ca-watch'                => 'Add this page to your watchlist',
+'tooltip-ca-unwatch'              => 'Remove this page from your watchlist',
+'tooltip-search'                  => 'Krax{{SITENAME}}',
+'tooltip-search-go'               => 'Zux liFaṭo dkitla tam uIşmano.',
+'tooltip-search-fulltext'         => 'Krax uSyomano baFaṭoṭe',
+'tooltip-p-logo'                  => 'Z³ar iFaṭo rişoyto',
+'tooltip-n-mainpage'              => 'Z³ar iFaṭo rişoyto',
+'tooltip-n-mainpage-description'  => 'Z³ar iFaṭo rişoyto',
+'tooltip-n-portal'                => '3al iProja; mın komisam u ayko u ayko ne a medone.',
+'tooltip-n-currentevents'         => 'Find background information on current events',
+'tooltip-n-recentchanges'         => 'Lista daŞuḥlofe ḥaroye kulle',
+'tooltip-n-randompage'            => 'Ftaḥ Faṭo gedşonoyto',
+'tooltip-n-help'                  => 'Maḥway iFaṭo du3udrono',
+'tooltip-t-whatlinkshere'         => 'Lista daFaṭoṭe kulle dkitte Asiruṭo lerke',
+'tooltip-t-recentchangeslinked'   => 'Şuḥlofe ḥaroye bFaṭoṭe dkitte Asiruṭo lerke',
+'tooltip-feed-atom'               => 'Atom feed diFaṭaṭe',
+'tooltip-t-contributions'         => 'Lista daMaṫwoṭo duHadomano',
+'tooltip-t-emailuser'             => 'Mşadar Email luHadomano',
+'tooltip-t-upload'                => 'Mosaq aFayls',
+'tooltip-t-specialpages'          => 'Lista daFaṭoṭe dilonoye kulle.',
+'tooltip-t-print'                 => 'Printable version of this page',
+'tooltip-t-permalink'             => 'Asiruṭo aminoyto liFaṭaṭe',
+'tooltip-ca-nstab-main'           => 'Maḥway iFaṭo daḤbişoṭo',
+'tooltip-ca-nstab-user'           => 'Maḥway iFaṭo duHadomo',
+'tooltip-ca-nstab-special'        => 'Haṭe Faṭo dilonoyto yo, laybux mşaḥalfatla',
+'tooltip-ca-nstab-project'        => 'Maḥway iFaṭo diProja',
+'tooltip-ca-nstab-image'          => 'Maḥway iFaṭo duFayl',
+'tooltip-ca-nstab-template'       => 'View the template',
+'tooltip-ca-nstab-category'       => 'Maḥway iFaṭo daSedre',
+'tooltip-minoredit'               => 'Mark this as a minor edit',
+'tooltip-save'                    => 'Mqayad uŞuḥlofano',
+'tooltip-preview'                 => 'Preview your changes, please use this before saving!',
+'tooltip-diff'                    => 'Maḥway li aŞuḥlofe buSyomano',
+'tooltip-compareselectedversions' => 'See the differences between the two selected revisions of this page',
+'tooltip-watch'                   => 'Add this page to your watchlist',
+'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-summary'                 => 'Enter a short summary',
+
+# Browsing diffs
+'previousdiff' => '← Şuḥlofo 3atiqo',
+'nextdiff'     => 'Hiç lo mşaḥalfat →',
+
+# Media information
+'file-info-size' => '$1 × $2 pixels, file size: $3, MIME type: $4',
+'file-nohires'   => 'No higher resolution available.',
+'svg-long-desc'  => 'SCG Fayl, Rabuṭo $1 × $2 pixel, Rabuṭo duFayl: $3',
+'show-big-image' => 'Tam faṥiḥ',
+
+# Special:NewFiles
+'ilsubmit' => 'Krax',
+
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 Ṥaniye|$1 Ṥaniyat}}',
+'ago'     => 'meqım $1',
+
+# Bad image list
+'bad_image_list' => 'The format is as follows:
+
+Only list items (lines starting with *) are considered.
+The first link on a line must be a link to a bad file.
+Any subsequent links on the same line are considered to be exceptions, i.e. pages where the file may occur inline.',
+
+# Metadata
+'metadata'        => 'Metadata',
+'metadata-help'   => 'This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.
+If the file has been modified from its original state, some details may not fully reflect the modified file.',
+'metadata-fields' => 'Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.
+Others will be hidden by default.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude',
+
+# EXIF tags
+'exif-writer'          => 'Kaṭowo',
+'exif-languagecode'    => 'Leşono',
+'exif-cameraownername' => 'uMoro diQamera',
+
+# External editor support
+'edit-externally'      => 'Edit this file using an external application',
+'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'kulle',
+'namespacesall' => 'kulle',
+'monthsall'     => 'kulle',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'View relevant changes',
+'watchlisttools-edit' => 'View and edit watchlist',
+'watchlisttools-raw'  => 'Edit raw watchlist',
+
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'Warning:\'\'\' Default sort key "$2" overrides earlier default sort key "$1".',
+
+# Special:FilePath
+'filepath-submit' => 'Zux',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch-submit' => 'Krax',
+
+# Special:SpecialPages
+'specialpages' => 'Faṭoṭe dilonoye',
+
+# Special:BlankPage
+'blankpage' => 'Faṭo xliṭo',
+
+# External image whitelist
+'external_image_whitelist' => ' #Leave this line exactly as it is<pre>
+#Put regular expression fragments (just the part that goes between the //) below
+#These will be matched with the URLs of external (hotlinked) images
+#Those that match will be displayed as images, otherwise only a link to the image will be shown
+#Lines beginning with # are treated as comments
+#This is case-insensitive
+
+#Put all regex fragments above this line. Leave this line exactly as it is</pre>',
+
+# Special:Tags
+'tag-filter' => '[[Special:Tags|Tag]] filter:',
+
+# Special:ComparePages
+'compare-page1' => 'Faṭo 1',
+'compare-page2' => 'Faṭo 2',
+
+# Database error messages
+'dberr-problems' => 'Şubqono!
+iFaṭaṭe u3do kitla Qaṫre.',
+
+# HTML forms
+'htmlform-submit'              => 'Mqayad',
+'htmlform-selectorother-other' => 'Ḥrene',
+
+# Feedback
+'feedback-message' => 'Ṫebo:',
+'feedback-cancel'  => 'Mbaṫel',
+
+# API errors
+'api-error-unknownerror' => 'Fawdo nuxroyo: $1',
+
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|Ṥaniye|Ṥaniyat}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|Qaṫınto|Qaṫınoṭo}}',
+'duration-hours'     => '$1 {{PLURAL:$1|Sa³aye|Sa³ayat}}',
+'duration-days'      => '$1 {{PLURAL:$1|Yawmo|Yawme}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|Şabṭo|Şabe}}',
+'duration-years'     => '$1 {{PLURAL:$1|Şato|Şnaye}}',
+'duration-decades'   => '$1 {{PLURAL:$1|decade|decades}}',
+'duration-centuries' => '$1 {{PLURAL:$1|Doro|Dore}}',
+
+);
index 3015bec..efd0cc7 100644 (file)
@@ -329,14 +329,14 @@ $messages = array(
 'hidden-category-category' => 'Яшерен төркемнәр',
 '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' => '{{PLURAL:$2|Бу төркемдә бер генә бит бар.|Төркемдәге $2 биттән {{PLURAL:$1|$1 күрсәтелде}}.}}',
 'category-article-count-limited' => 'Бу төркемдә {{PLURAL:$1|$1 бит}} бар.',
-'category-file-count' => '{{PLURAL:$2|Ð\91Ñ\83 Ñ\82Ó©Ñ\80кемдÓ\99 Ð±ÐµÑ\80 Ð³ÐµÐ½Ó\99 Ñ\84айл Ð±Ð°Ñ\80.|ТөÑ\80кемдÓ\99ге $2 Ñ\84айлнÑ\8bÒ£ {{PLURAL:$1|$1 Ñ\84айлÑ\8b ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82елгÓ\99н}}.}}',
+'category-file-count' => '{{PLURAL:$2|Ð\91Ñ\83 Ñ\82Ó©Ñ\80кемдÓ\99 Ð±ÐµÑ\80 Ð³ÐµÐ½Ó\99 Ñ\84айл Ð±Ð°Ñ\80.|ТөÑ\80кемдÓ\99ге $2 Ñ\84айлдан {{PLURAL:$1|$1 ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82елде}}.}}',
 'category-file-count-limited' => 'Бу төркемдә {{PLURAL:$1|$1 файл}} бар.',
 'listingcontinuesabbrev' => 'дәвамы',
 'index-category' => 'Индексланган битләр',
 'noindex-category' => 'Индексланмаган битләр',
-'broken-file-category' => 'ЭÑ\88лÓ\99ми Ñ\82оÑ\80ган Ñ\84айл Ñ\81Ñ\8bлÑ\82амалаÑ\80лÑ\8b битләр',
+'broken-file-category' => 'ФайллаÑ\80га Ñ\8dÑ\88лÓ\99ми Ñ\82оÑ\80ган Ñ\81Ñ\8bлÑ\82амалаÑ\80 Ð±Ñ\83лган битләр',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
index 51e38fd..06d50bf 100644 (file)
@@ -350,7 +350,7 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Підкреслювати посилання:',
 'tog-justify' => 'Вирівнювати текст по ширині сторінки',
-'tog-hideminor' => 'Ð¥овати незначні редагування у списку останніх змін',
+'tog-hideminor' => 'Ð\9fÑ\80иÑ\85овати незначні редагування у списку останніх змін',
 'tog-hidepatrolled' => 'Приховувати патрульовані редагування у списку нових редагувань',
 'tog-newpageshidepatrolled' => 'Приховувати патрульовані сторінки у списку нових сторінок',
 'tog-extendwatchlist' => 'Розширений список спостереження, що містить усі зміни, а не лише останню',
@@ -382,11 +382,11 @@ $messages = array(
 'tog-showjumplinks' => 'Активізувати допоміжні посилання «перейти до»',
 'tog-uselivepreview' => 'Використовувати швидкий попередній перегляд (JavaScript, експериментально)',
 'tog-forceeditsummary' => 'Попереджати, коли не зазначений короткий опис редагування',
-'tog-watchlisthideown' => 'Ð¥овати мої редагування у списку спостереження',
-'tog-watchlisthidebots' => 'Ð¥овати редагування ботів у списку спостереження',
-'tog-watchlisthideminor' => 'Ð¥овати незначні редагування у списку спостереження',
-'tog-watchlisthideliu' => 'ХоваÑ\82и Ñ\80едагÑ\83ваннÑ\8f Ð·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ñ\83 Ñ\81пиÑ\81кÑ\83 Ñ\81поÑ\81етереження',
-'tog-watchlisthideanons' => 'Ð¥овати редагування анонімів у списку спостереження',
+'tog-watchlisthideown' => 'Ð\9fÑ\80иÑ\85овати мої редагування у списку спостереження',
+'tog-watchlisthidebots' => 'Ð\9fÑ\80иÑ\85овати редагування ботів у списку спостереження',
+'tog-watchlisthideminor' => 'Ð\9fÑ\80иÑ\85овати незначні редагування у списку спостереження',
+'tog-watchlisthideliu' => 'Ð\9fÑ\80иÑ\85оваÑ\82и Ñ\80едагÑ\83ваннÑ\8f Ð·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 Ð´Ð¾Ð¿Ð¸Ñ\81Ñ\83ваÑ\87Ñ\96в Ñ\83 Ñ\81пиÑ\81кÑ\83 Ñ\81поÑ\81тереження',
+'tog-watchlisthideanons' => 'Ð\9fÑ\80иÑ\85овати редагування анонімів у списку спостереження',
 'tog-watchlisthidepatrolled' => 'Приховувати патрульовані редагування у списку спостререження',
 'tog-nolangconversion' => 'Відключити перетворення систем письма',
 'tog-ccmeonemails' => 'Надсилати мені копії листів, які я надсилаю іншим користувачам',
@@ -1604,6 +1604,7 @@ $1",
 'right-writeapi' => 'Використання API для запису',
 'right-delete' => 'Вилучення сторінок',
 'right-bigdelete' => 'Вилучення сторінок з великою історією',
+'right-deletelogentry' => 'Вилучення та відновлення окремих записів журналу',
 'right-deleterevision' => 'Вилучення і відновлення окремих версій сторінок',
 'right-deletedhistory' => 'Перегляд історії вилучених сторінок без перегляду вилученого тексту',
 'right-deletedtext' => 'перегляд вилученого тексту та змін між вилученими версіями',
@@ -1611,7 +1612,7 @@ $1",
 'right-undelete' => 'Відновлення сторінок',
 'right-suppressrevision' => 'Перегляд і відновлення версій, прихованих від адміністраторів',
 'right-suppressionlog' => 'Перегляд приватних журналів',
-'right-block' => 'Ð\91локÑ\83ваннÑ\8f Ñ\96нÑ\88иÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ð²Ñ\96д Ñ\80едагÑ\83ванÑ\8c',
+'right-block' => 'Ð\97абоÑ\80она Ñ\80едагÑ\83ванÑ\8c Ð´Ð»Ñ\8f Ñ\96нÑ\88иÑ\85 Ð´Ð¾Ð¿Ð¸Ñ\81Ñ\83ваÑ\87Ñ\96в',
 'right-blockemail' => 'Блокування користувачам надсилання електронної пошти',
 'right-hideuser' => 'Блокування імені користувача і приховування його',
 'right-ipblock-exempt' => 'Уникнення блокування за IP-адресою, автоблокування і блокування діапазонів',
@@ -1670,7 +1671,7 @@ $1",
 'action-undelete' => 'відновлення цієї сторінки',
 'action-suppressrevision' => 'перегляд і відновлення цієї прихованої версії',
 'action-suppressionlog' => 'перегляд цього приватного журналу',
-'action-block' => 'блокÑ\83ваннÑ\8f Ñ\86Ñ\8cого ÐºÐ¾Ñ\80иÑ\81Ñ\82увача',
+'action-block' => 'блокÑ\83ваннÑ\8f Ñ\86Ñ\8cого Ð´Ð¾Ð¿Ð¸Ñ\81увача',
 'action-protect' => 'зміну рівня захисту цієї сторінки',
 'action-rollback' => 'швидко відкотити редагування останнього користувача, що змінював певну сторінку',
 'action-import' => 'імпорт цієї сторінки з іншої вікі',
@@ -1716,7 +1717,7 @@ $1",
 'rc_categories' => 'Тільки з категорій (разділювач «|»)',
 'rc_categories_any' => 'Будь-який',
 'rc-change-size' => '$1',
-'rc-change-size-new' => 'Розмір після зміни: {{PLURAL:$1|байт|байти|байтів}}',
+'rc-change-size-new' => 'Розмір після зміни: $1 {{PLURAL:$1|байт|байти|байтів}}',
 'newsectionsummary' => '/* $1 */ нова тема',
 'rc-enhanced-expand' => 'Показати деталі (потрібен JavaScript)',
 'rc-enhanced-hide' => 'Сховати деталі',
@@ -1924,6 +1925,7 @@ $1',
 'lockmanager-fail-releaselock' => 'Не вдалось розблокувати "$1".',
 'lockmanager-fail-db-bucket' => "Не вдається зв'язатися з достатньою кількістю баз блокувань в сегменті $1.",
 'lockmanager-fail-db-release' => 'Не вдалось зняти блокування бази даних $1.',
+'lockmanager-fail-svr-acquire' => 'Не вдалося одержати блокування на сервері $1.',
 'lockmanager-fail-svr-release' => 'Не вдалось зняти блокування на сервері $1.',
 
 # ZipDirectoryReader
@@ -2378,7 +2380,7 @@ $1',
 'notvisiblerev' => 'Версія була вилучена',
 'watchnochange' => 'За вказаний період в статтях з списку спостереження нічого не змінено.',
 'watchlist-details' => 'У вашому списку спостереження $1 {{PLURAL:$1|сторінка|сторінки|сторінок}} (не враховуючи сторінок обговорення).',
-'wlheader-enotif' => '* Ð\97вÑ\96Ñ\81Ñ\82ка ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e Ð²Ð²Ñ\96мкнена.',
+'wlheader-enotif' => '* Ð¡Ð¿Ð¾Ð²Ñ\96Ñ\89еннÑ\8f ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e Ð²Ð²Ñ\96мкнено.',
 'wlheader-showupdated' => "* Сторінки, що змінилися після вашого останнього їх відвідування, виділені '''жирним''' шрифтом.",
 'watchmethod-recent' => 'перегляд останніх редагувань статей за якими ведеться спостереження',
 'watchmethod-list' => 'перегляд статей за якими ведеться спостереження',
@@ -2471,6 +2473,8 @@ $UNWATCHURL
 'rollback' => 'Відкинути редагування',
 'rollback_short' => 'Відкинути',
 'rollbacklink' => 'відкинути',
+'rollbacklinkcount' => 'скасування $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
+'rollbacklinkcount-morethan' => 'скасування більш, ніж $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
 'rollbackfailed' => 'Відкинути зміни не вдалося',
 'cantrollback' => 'Неможливо відкинути редагування, останній, хто редагував, є єдиним автором цієї сторінки.',
 'alreadyrolled' => 'Неможливо відкинути останні редагування [[:$1]], зроблені [[User:$2|$2]] ([[User talk:$2|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); хтось інший уже змінив чи відкинув редагування цієї статті.
@@ -4235,6 +4239,4 @@ MediaWiki поширюється в надії, що вона буде кори
 'duration-centuries' => '$1 {{PLURAL:$1|століття|століття|століть}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тисячоліття|тисячоліття|тисячоліть}}',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => 'Не вдалося одержати блокування на сервері $1.',
 );
index 12d0b5e..91dcd59 100644 (file)
@@ -11,7 +11,9 @@
  * @author Behzod Saidov <behzodsaidov@gmail.com>
  * @author Casual
  * @author Lyncos
+ * @author Sociologist
  * @author Urhixidur
+ * @author Xexdof
  */
 
 $fallback8bitEncoding = 'windows-1252';
@@ -51,11 +53,25 @@ $linkTrail = '/^([a-zʻʼ“»]+)(.*)$/sDu';
 
 $messages = array(
 # User preference toggles
+'tog-hideminor' => 'Yangi oʻzgarishlardagi kichik tahrirlani yashir',
+'tog-rememberpassword' => 'Hisob ma’lumotlarini ushbu kompyuterda eslab qolish (eng ko‘pi bilan $1 {{PLURAL:$1|kun|kun}} uchun)',
+'tog-watchcreations' => 'Men yaratgan sahifalarni va yuklagan fayllarni kuzatuv roʻyxatimga qoʻsh',
+'tog-watchdefault' => 'Men tahrirlagan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
+'tog-watchmoves' => 'Men koʻchirgan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
+'tog-watchdeletion' => 'Men yoʻqotgan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
+'tog-enotifwatchlistpages' => 'Kuzatuv roʻyxatimdagi sahifa yoki fayllar oʻzgartirilsa, elektron pochtamga xat yuborilsin',
+'tog-enotifusertalkpages' => 'Munozara sahifam oʻzgartirilsa elektron pochtamga bu haqda xat yuborilsin',
 'tog-oldsig' => 'Mavjud imzo:',
 'tog-fancysig' => 'Imzoni wikimatn sifatida qara (avtomatik ishoratsiz)',
+'tog-ccmeonemails' => 'Men boshqa foydalanuvchilarga yuborayotgan xatnig nusxasi oʻzimning e-pochtamga ham yuborilsin',
+'tog-showhiddencats' => 'Yashirin turkumlarni koʻrsat',
 
 'underline-always' => 'Har doim',
 'underline-never' => 'Hech qachon',
+'underline-default' => 'Brauzer moslamari boʻyicha',
+
+# Font style option in Special:Preferences
+'editfont-default' => 'Brauzer moslamari boʻyicha',
 
 # Dates
 'sunday' => 'Yakshanba',
@@ -115,6 +131,7 @@ $messages = array(
 'subcategories' => 'Ostturkumlar',
 'category-empty' => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
 'hidden-categories' => '{{PLURAL:$1|Yashirin turkum|Yashirin turkumlar}}',
+'hidden-category-category' => 'Yashirin turkumlar',
 'category-subcat-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|ostturkum|$1 ostturkumlar}}, hammasi boʻlib $2 ta ostturkum mavjud.}}',
 'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}}, hammasi boʻlib $2 ta sahifa mavjud.}}',
 'listingcontinuesabbrev' => 'davomi',
@@ -133,8 +150,10 @@ $messages = array(
 # Cologne Blue skin
 'qbedit' => 'Tahrirlash',
 'qbspecialpages' => 'Maxsus sahifalar',
+'faq' => 'TSS',
 
 # Vector skin
+'vector-action-addsection' => 'Mavzuni qoʻsh',
 'vector-action-delete' => 'O‘chirish',
 'vector-action-move' => 'Ko‘chirish',
 'vector-view-create' => 'Yarat',
@@ -165,6 +184,7 @@ $messages = array(
 'editthispage' => 'Sahifani tahrirlash',
 'create-this-page' => 'Bu sahifani yarat',
 'delete' => 'O‘chirish',
+'deletethispage' => 'Bu sahifani oʻchir',
 'protect' => 'Himoyalash',
 'protect_change' => 'o‘zgartirish',
 'protectthispage' => 'Ushbu sahifani himoyalash',
@@ -194,6 +214,7 @@ $messages = array(
 'aboutsite' => '{{SITENAME}} haqida',
 'aboutpage' => 'Project:Haqida',
 'copyright' => 'Kontent $1 ostidadir.',
+'copyrightpage' => '{{ns:project}}:Mualliflik huquqlari',
 'currentevents' => 'Joriy hodisalar',
 'currentevents-url' => 'Project:Joriy hodisalar',
 'disclaimers' => 'Ogohlantirishlar',
@@ -208,17 +229,19 @@ $messages = array(
 'privacy' => 'Konfidensiallik siyosati',
 'privacypage' => 'Project:Konfidensiallik siyosati',
 
+'ok' => 'OK',
 'retrievedfrom' => ' "$1" dan olindi',
 'youhavenewmessages' => 'Sizga $1 keldi ($2).',
 'newmessageslink' => 'yangi xabarlar',
 'newmessagesdifflink' => 'soʻnggi oʻzgarish',
+'youhavenewmessagesmulti' => 'Sizga yangi xat keldi: $1',
 'editsection' => 'tahrirlash',
 'editold' => 'tahrir',
 'editlink' => 'tahrirla',
 'viewsourcelink' => 'manbasini koʻr',
 'editsectionhint' => 'Boʻlimni tahrirlash: $1',
 'toc' => 'Mundarija',
-'showtoc' => "Ko'rsatish",
+'showtoc' => 'koʻrsatish',
 'hidetoc' => 'yashirish',
 'collapsible-collapse' => 'Yashir',
 'collapsible-expand' => 'Koʻrsat',
@@ -229,8 +252,9 @@ $messages = array(
 'nstab-main' => 'Maqola',
 'nstab-user' => 'Foydalanuvchi sahifasi',
 'nstab-special' => 'Maxsus sahifa',
-'nstab-project' => 'Loyiha sahifasi',
+'nstab-project' => 'Vikipediya',
 'nstab-image' => 'Fayl',
+'nstab-mediawiki' => 'Xabar',
 'nstab-template' => 'Andoza',
 'nstab-help' => 'Yordam sahifasi',
 'nstab-category' => 'Turkum',
@@ -241,12 +265,18 @@ $messages = array(
 'viewsource' => 'Manbasini koʻrish',
 'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
 'viewsourcetext' => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
+'namespaceprotected' => "Sizda '''$1''' nomfazosi sahifalarini tahrirlash huquqi yoʻq",
+'customcssprotected' => 'Sizda uchbu CSS sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.',
+'customjsprotected' => 'Sizda uchbu JavaScript sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.',
 
 # Login and logout pages
 'logouttext' => "'''Siz saytdan muvaffaqiyatli chiqdingiz.'''
 
 {{SITENAME}} saytidan anonim holda foydalanishda davom etishindiz mumkin. Yoki siz yana hozirgi yoki boshqa foydalanuvchi nomi bilan qaytadan tizimga kirishingiz mumkin.
 Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguningizga qadar xuddi tizimga kirganingizdagidek ko'rinishda davom etaverishi mumkin.",
+'welcomecreation' => '== Xush kelibsiz, $1! ==
+Siz yangi hisob yaratdingiz.
+[[Special:Preferences|{{SITENAME}}dagi shaxsiy moslamalaringizni]] oʻzgartirish yodingizdan chiqmasin.',
 'yourname' => 'Foydalanuvchi nomi',
 'yourpassword' => 'Maxfiy soʻz',
 'yourpasswordagain' => 'Maxfiy so‘zni qayta kiriting:',
@@ -255,16 +285,22 @@ Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguning
 'nav-login-createaccount' => 'Kirish / Hisob yaratish',
 'loginprompt' => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
 'userlogin' => 'Kirish / Hisob yaratish',
+'userloginnocreate' => 'Kirish',
 'logout' => 'Chiqish',
 'userlogout' => 'Chiqish',
+'notloggedin' => 'Kirish amalga oshirilmadi',
 'nologin' => "Hisobingiz yoʻqmi? '''$1'''.",
 'nologinlink' => 'Hisob yaratish',
 'createaccount' => 'Hisob yaratish',
 'gotaccount' => "Hisobingiz bormi? '''$1'''.",
 'gotaccountlink' => 'Kirish',
+'userlogin-resetlink' => 'Kirish maʻlumotlaringiz esdan chiqdimi?',
 'loginsuccesstitle' => 'Kirish muvaffaqiyatli amalga oshdi',
 'loginsuccess' => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
+'nosuchusershort' => '"$1" ismli ishtirokchi yoʻq.
+Xatosiz yozishga urinib koʻring.',
 'wrongpassword' => 'Kiritgan mahfiy soʻzingiz notoʻgʻri. Iltimos, qaytadan kiritib koʻring.',
+'mailmypassword' => 'Yangi parolni e-mail qil',
 'loginlanguagelabel' => 'Til: $1',
 
 # Change password dialog
@@ -341,18 +377,27 @@ Qulaylik uchun quyida yoʻqotilish qaydlari keltirilgan:",
 'cur' => 'joriy',
 'next' => 'keyingi',
 'last' => 'oxirgi',
+'page_first' => 'birinchi',
+'page_last' => 'oxirgi',
 'histlegend' => 'Farqlar: solishtirish uchun kerakli radiobokslarni belgilang va pastdagi tugmani yoki Enterni bosing.<br />
 Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 (oxirgi) = avvalgi koʻrinish bilan farq, k = kichkina tahrir.',
+'history-fieldset-title' => 'Tarixni koʻr',
 'history-show-deleted' => 'Faqat o‘chirilganlari',
 'histfirst' => 'Eng avvalgi',
 'histlast' => 'Eng soʻnggi',
+'historysize' => '({{PLURAL:$1|1 bayt|$1 bayt}})',
+'historyempty' => '(boʻsh)',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 $2 da',
 
 # Revision deletion
 'rev-delundel' => 'koʻrsat/yashir',
+'rev-showdeleted' => 'koʻrsatish',
+'revdelete-log' => 'Sabab:',
+'revdelete-otherreason' => 'Boshqa/qoʻshimcha sabab:',
+'revdelete-reasonotherlist' => 'Boshqa sabab',
 
 # Diffs
 'history-title' => '"$1"ning tarixi',
@@ -374,9 +419,12 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'nextn-title' => 'Keyingi $1 {{PLURAL:$1|natija|natijalar}}',
 'shown-title' => 'Har sahifada $1 natija koʻrsat',
 'viewprevnext' => 'Koʻrish ($1 {{int:pipe-separator}} $2) ($3).',
+'searchmenu-legend' => 'Qidiruv shartlari',
+'searchmenu-exists' => "'''Ushbu vikida \"[[:\$1]]\" nomli sahifa mavjud.'''",
 'searchmenu-new' => "'''Ushbu vikida \"[[:\$1]]\" sahifani yarat!'''",
 'searchhelp-url' => 'Help:Mundarija',
 'searchprofile-articles' => 'Asosiy sahifalar',
+'searchprofile-project' => 'Yordam va proekt sahifalari.',
 'searchprofile-images' => 'Multimediya',
 'searchprofile-everything' => 'Har yerda',
 'searchprofile-advanced' => 'Kengaytirilgan',
@@ -388,10 +436,13 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'search-section' => '($1 boʻlimi)',
 'search-suggest' => 'Balki buni nazarda tutgandirsiz: $1',
 'search-interwiki-default' => '$1 natijalar:',
+'searcheverything-enable' => 'Barcha nomfazolarda qidir',
 'searchall' => 'barchasi',
 'showingresults' => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
 'showingresultsheader' => "$4 uchun {{PLURAL:$5|'''$3'''dan '''$1''' natija|'''$3'''dan '''$1 - $2''' natijalar}}",
+'search-nonefound' => 'Talabga javob beradigan natija topilmadi.',
 'powersearch' => 'Qidiruv',
+'powersearch-legend' => 'Kengaytirilgan qidiruv',
 'powersearch-ns' => 'Bu nom-fazolarda izla:',
 'powersearch-redir' => 'Yoʻnaltirishlarni koʻrsat',
 'powersearch-field' => 'Qidir',
@@ -399,35 +450,99 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 # Preferences page
 'preferences' => 'Moslamalar',
 'mypreferences' => 'Moslamalarim',
-'prefs-skin' => 'Tashqi ko‘rinish',
+'prefs-edits' => 'Tahrirlar soni',
+'prefs-skin' => 'Tashqi ko‘rinishi',
+'datedefault' => 'Farqi yoʻq',
 'prefs-datetime' => 'Sana va vaqt',
 'prefs-personal' => 'Shaxsiy ma’lumotlar',
 'prefs-rc' => 'Yangi o‘zgartirishlar',
 'prefs-watchlist' => "Kuzatuv ro'yxati",
+'prefs-watchlist-days-max' => 'Eng ko‘pi $1 {{PLURAL:$1|kun|kun}}',
 'prefs-misc' => 'Boshqa moslamalar',
+'prefs-rendering' => 'Tashqi ko‘rinishi',
 'saveprefs' => 'Saqlash',
 'resetprefs' => 'Bekor qilish',
+'restoreprefs' => 'Barcha moslamalarni dastlabki holiga qaytarish',
 'prefs-editing' => 'Tahrirlash',
+'prefs-edit-boxsize' => 'Tahrir oynasining oʻlchami',
+'rows' => 'Qatorlar soni:',
+'columns' => 'Ustunlar soni:',
 'searchresultshead' => 'Qidiruv natijalari',
+'recentchangesdays-max' => 'Eng koʻpi $1 kun',
+'recentchangescount' => 'Sukut boʻyicha koʻrsatildigan tahrirlar soni',
+'timezonelegend' => 'Vaqt mintaqasi:',
+'localtime' => 'Mahalliy vaqt:',
+'timezoneregion-africa' => 'Afrika',
+'timezoneregion-america' => 'Amerika',
+'timezoneregion-antarctica' => 'Antarktika',
+'timezoneregion-arctic' => 'Arktika',
+'timezoneregion-asia' => 'Osiyo',
+'timezoneregion-atlantic' => 'Atlantika okeani',
+'timezoneregion-australia' => 'Avstraliya',
+'timezoneregion-europe' => 'Yevropa',
+'timezoneregion-indian' => 'Hind okeani',
+'timezoneregion-pacific' => 'Tinch okeani',
+'allowemail' => 'Boshqa foydalanuvchilardan elektron xat olishga ruxsat berish',
+'prefs-searchoptions' => 'Qidiruv shartlari',
+'prefs-namespaces' => 'Nomfazolar',
+'defaultns' => 'Aks holda quyidagi nomfazolarda qidir:',
 'prefs-files' => 'Fayllar',
+'prefs-emailconfirm-label' => 'Elektron pochta manzilini tasdiqlash:',
+'prefs-textboxsize' => 'Tahrir oynasining oʻlchami',
 'youremail' => 'E-mail:',
+'username' => 'Foydalanuvchi nomi',
+'prefs-memberingroups' => '{{PLURAL:$1|Guruh|Guruhlar}} aʼzosi:',
+'prefs-registration' => 'Hisob ochilgan vaqt',
 'yourrealname' => 'Haqiqiy ism *:',
+'yournick' => 'Yangi imzo',
+'prefs-help-signature' => 'Munozara sahifalarida imzo "<nowiki>~~~~</nowiki>" orqali qoʻyiladi (u sizning imzoingiz va joriy vaqtga aylantiriladi).',
+'yourgender' => 'Jinsi:',
+'gender-unknown' => 'Koʻrsatilmagan',
+'gender-male' => 'Erkak',
+'gender-female' => 'Ayol',
+'email' => 'E-mail:',
+'prefs-help-email-required' => 'E-mail manzilni koʻrsatish shart emas',
+'prefs-info' => 'Asosiy maʼlumot',
+'prefs-signature' => 'Imzo',
+'prefs-dateformat' => 'Sana formati',
+'prefs-advancedediting' => 'Qoʻshimcha moslamalar',
+'prefs-advancedrc' => 'Qoʻshimcha moslamalar',
+'prefs-advancedrendering' => 'Qoʻshimcha moslamalar',
+'prefs-advancedsearchoptions' => 'Qoʻshimcha moslamalar',
+'prefs-advancedwatchlist' => 'Qoʻshimcha moslamalar',
+
+# User rights
+'userrights-groupsmember' => 'Aʼzolik:',
+'userrights-reason' => 'Sabab:',
 
 # Groups
+'group' => 'Guruh',
+'group-user' => 'Foydalanuvchilar',
+'group-autoconfirmed' => 'Tasdiqlangan foydalanuvchilar',
+'group-bot' => 'Botlar',
 'group-sysop' => 'Administratorlar',
+'group-bureaucrat' => 'Rasmiyatchilar',
+'group-suppress' => 'Tekshiruvchilar',
 
+'grouppage-user' => '{{ns:project}}:Foydalanuvchilar',
+'grouppage-autoconfirmed' => '{{ns:project}}:Tasdiqlangan foydalanuvchilar',
+'grouppage-bot' => '{{ns:project}}:Botlar',
 'grouppage-sysop' => '{{ns:project}}:Administratorlar',
+'grouppage-bureaucrat' => '{{ns:project}}:Rasmiyatchilar',
+'grouppage-suppress' => '{{ns:project}}:Tekshiruvchilar',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ushbu sahifani tahrirlash',
+'action-move' => 'bu sahifani koʻchir',
+'action-move-subpages' => 'Bu sahifani va uning ostsahifalarini koʻchir',
 
 # Recent changes
 'recentchanges' => 'Yangi o‘zgartirishlar',
 'recentchanges-summary' => "Bu sahifada siz oxirgi o'zgartirishlarni ko'rishingiz mumkin.",
-'recentchanges-label-newpage' => 'Bu tahrir yangi sahifani yaratdi',
+'recentchanges-label-newpage' => 'Bu tahrir orqali yangi sahifa yaratildi',
 'recentchanges-label-minor' => 'Bu kichik tahrir',
 'recentchanges-label-bot' => 'Bu tahrirni bot bajardi',
-'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmadi',
+'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmagan',
 'rcnote' => "Quyida $5, $4ga koʻra oxirgi {{PLURAL:$2|kun|'''$2''' kun}} davomida sodir boʻlgan {{PLURAL:$1|'''1''' oʻzgartirish|'''$1''' oʻzgartirishlar}} koʻrsatilgan.",
 'rclistfrom' => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
 'rcshowhideminor' => 'Kichik tahrirlarni $1',
@@ -443,9 +558,12 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'show' => 'koʻrsat',
 'minoreditletter' => 'k',
 'newpageletter' => 'Y',
+'rc-enhanced-expand' => 'Tasfilotlarni koʻrsat (JavaScript talab qilinadi)',
+'rc-enhanced-hide' => 'Tafsilotlolarni yashir',
 
 # Recent changes linked
-'recentchangeslinked' => "Bog'langan o'zgarishlar",
+'recentchangeslinked' => 'Bogʻlangan oʻzgarishlar',
+'recentchangeslinked-feed' => 'Bogʻliq oʻzgarishlar',
 'recentchangeslinked-toolbox' => 'Bogʻliq oʻzgarishlar',
 'recentchangeslinked-title' => '"$1"ga aloqador oʻzgarishlar',
 'recentchangeslinked-noresult' => 'Berilgan davrda bogʻlangan sahifalarda oʻzgarishlar boʻlmagan.',
@@ -455,17 +573,27 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 # Upload
 'upload' => 'Fayl yuklash',
 'uploadbtn' => 'Fayl yukla',
+'uploaderror' => 'Yuklashda xatolik',
 'uploadlogpage' => 'Yuklash qaydlari',
 'filedesc' => 'Qisqa izoh',
+'filereuploadsummary' => 'Fayldagi oʻzgarishlar:',
+'filesource' => 'Manba:',
 'uploadedimage' => '"[[$1]]" yuklandi',
 
 # Special:ListFiles
+'imgfile' => 'fayl',
 'listfiles' => 'Fayllar roʻyxati',
+'listfiles_date' => 'Sana',
+'listfiles_user' => 'Foydalanuvchi',
+'listfiles_size' => 'Oʻlchami',
+'listfiles_description' => 'Taʻrif',
 
 # File description page
 'file-anchor-link' => 'Fayl',
 'filehist' => 'Fayl tarixi',
 'filehist-help' => 'Faylning biror paytdagi holatini koʻrish uchun tegishli sana/vaqtga bosingiz.',
+'filehist-deleteone' => 'o‘chirish',
+'filehist-revert' => 'qaytarish',
 'filehist-current' => 'joriy',
 'filehist-datetime' => 'Sana/Vaqt',
 'filehist-thumb' => 'Miniatyura',
@@ -481,6 +609,12 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'uploadnewversion-linktext' => 'Bu faylning yangi versiyasini yukla',
 
+# File reversion
+'filerevert-comment' => 'Sabab:',
+
+# File deletion
+'filedelete-comment' => 'Sabab:',
+
 # Unused templates
 'unusedtemplates' => 'Ishlatilinmagan andozalar',
 
@@ -514,6 +648,7 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'pager-older-n' => '{{PLURAL:$1|eskiroq 1|eskiroq $1}}',
 
 # Book sources
+'booksources' => 'Kitob manbaʻlar',
 'booksources-go' => 'O‘tish',
 
 # Special:Log
@@ -537,11 +672,25 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
 
+# Special:DeletedContributions
+'sp-deletedcontributions-contribs' => 'hissa',
+
+# Special:LinkSearch
+'linksearch-ns' => 'Nomfazo:',
+'linksearch-ok' => 'Qidirish',
+
+# Special:ListUsers
+'listusers-submit' => 'Koʻrsat',
+
 # Special:ListGroupRights
+'listgrouprights-group' => 'Guruh',
+'listgrouprights-rights' => 'Huquqlar',
 'listgrouprights-members' => '(a’zolar ro‘yxati)',
 
 # E-mail user
 'emailuser' => 'Bu foydalanuvchiga e-maktub joʻnat',
+'noemailtext' => "Bu foydalanuvchi e-mail manzil ko'rsatgani yo'q.",
+'emailsend' => 'Joʻnatish',
 
 # Watchlist
 'watchlist' => 'Kuzatuv roʻyxatim',
@@ -618,6 +767,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'blocklink' => 'chetlashtir',
 'contribslink' => 'hissasi',
 'blocklogpage' => 'Chetlashtirish qaydlari',
+'block-log-flags-nocreate' => 'hisob ochish toʻxtatilgan',
 
 # Move page
 'movearticle' => "Sahifani ko'chirish",
@@ -699,6 +849,18 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'tooltip-recreate' => "Bu sahifani u o'chirilgan bo'lishiga qaramasdan qayta yaratish",
 'tooltip-summary' => 'Qisqa mazmun kiriting',
 
+# Attribution
+'others' => 'boshqalar',
+
+# Info page
+'pageinfo-title' => '"$1" sahifasi haqida maʼlumot',
+'pageinfo-header-edits' => 'Tahrirlar',
+'pageinfo-header-watchlist' => 'Kuzatuv roʻyxati',
+'pageinfo-subjectpage' => 'Sahifa:',
+'pageinfo-talkpage' => 'Munozara sahifasi',
+'pageinfo-watchers' => 'Kuzatuvchilar soni',
+'pageinfo-edits' => 'Tahrirlar soni',
+
 # Browsing diffs
 'previousdiff' => '← Avvalgi tahrir',
 'nextdiff' => 'Keyingi tahrir →',
@@ -719,6 +881,39 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'metadata-expand' => 'Batafsil axborot koʻrsat',
 'metadata-collapse' => 'Batafsil axborotni yashir',
 
+# EXIF tags
+'exif-imagewidth' => 'Eni',
+'exif-imagelength' => 'Boʻyi',
+'exif-artist' => 'Muallif',
+'exif-source' => 'Manba',
+'exif-iimcategory' => 'Turkum',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Shimoliy kenglik',
+'exif-gpslatitude-s' => 'Janubiy kenglik',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Sharqiy uzunlik',
+'exif-gpslongitude-w' => 'Gʻarbiy uzunlik',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'Kilometr',
+'exif-gpsdestdistance-m' => 'Mil',
+
+'exif-iimcategory-clj' => 'Jinoyat va qonun',
+'exif-iimcategory-dis' => 'Halokatlar',
+'exif-iimcategory-fin' => 'Iqtisodiyot va biznes',
+'exif-iimcategory-edu' => 'Maʼrifat',
+'exif-iimcategory-evn' => 'Atrofimizdagi olam',
+'exif-iimcategory-hum' => 'Inson huquqlari',
+'exif-iimcategory-lab' => 'Mehnat',
+'exif-iimcategory-lif' => 'Turmush tarzi va hordiq',
+'exif-iimcategory-pol' => 'Siyosat',
+'exif-iimcategory-rel' => 'Din va imon',
+'exif-iimcategory-sci' => 'Fan va texnologiyalar',
+'exif-iimcategory-spo' => 'Sport',
+'exif-iimcategory-wea' => 'Ob-havo',
+
 # External editor support
 'edit-externally' => 'Bu faylni tashqi dasturiy ilovalar yordamida tahrirla',
 'edit-externally-help' => "(Batafsil ma'lumotlar uchun [//www.mediawiki.org/wiki/Manual:External_editors bu yerga] qarang)",
@@ -730,7 +925,45 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 
 'unit-pixel' => 'piksel',
 
+# Multipage image navigation
+'imgmultipageprev' => '← oldingi sahifa',
+'imgmultipagenext' => 'keyingi sahifa →',
+'imgmultigoto' => '$1 sahifasiga oʻtish',
+
+# Table pager
+'table_pager_next' => 'Keyingi sahifa',
+'table_pager_prev' => 'Oldingi sahifa',
+'table_pager_first' => 'Birinchi sahifa',
+'table_pager_last' => 'Oxirgi sahifa',
+
+# Auto-summaries
+'autoredircomment' => '[[$1]]ga yoʻnaltirildi',
+'autosumm-new' => '"$1" yozuvi orqali yangi sahifa yaratildi',
+
+# Watchlist editing tools
+'watchlisttools-edit' => 'Kuzatuv roʻyxatimni koʻrish/oʻzgartirish',
+'watchlisttools-raw' => 'Kuzatuv roʻyxatimni tahrirlash',
+
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|munozara]])',
+
+# Special:Version
+'version-specialpages' => 'Maxsus sahifalar',
+
 # Special:SpecialPages
 'specialpages' => 'Maxsus sahifalar',
 
+# HTML forms
+'htmlform-reset' => 'Oʻzgarishlarni bekor qilish',
+
+# New logging system
+'logentry-move-move' => '$1 $3 sahifasini $4ga koʻchirdi',
+
+# Feedback
+'feedback-close' => 'Bajarildi',
+
+# API errors
+'api-error-unknown-code' => 'Noaniq xato: "$1".',
+'api-error-unknownerror' => 'Noaniq xato: "$1".',
+
 );
index 0185aeb..954b80e 100644 (file)
@@ -114,6 +114,7 @@ $messages = array(
 'vector-view-viewsource' => 'Lähtekoodi',
 'actions' => 'Tekod',
 'namespaces' => 'Nimiruumid',
+'variants' => 'Variandid',
 
 'errorpagetitle' => 'Vika',
 'returnto' => 'Mee takaz cüľľelle $1.',
@@ -195,6 +196,7 @@ $messages = array(
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Artikkeli',
 'nstab-user' => 'Cäüttijäcülci',
+'nstab-media' => 'Media-cülci',
 'nstab-special' => 'Osoobennoi cülci',
 'nstab-project' => 'Projekticülci',
 'nstab-image' => 'Faili',
@@ -210,6 +212,7 @@ Ussassi se johtub ustaŕeloi sravńoi- vai istorilinkissä roocittulõõ cüľľ
 
 Kui cüsümüssessä ebõõ roocittu cülci, võib õlla õlõttõ löütännü ošipkaa sistemalla. Õõ nii üvä ilmuttõma cüľľee adressia vikii [[Special:ListUsers/sysop|praviťeľalõõ]].',
 'missingarticle-rev' => '(verzija: $1)',
+'badtitle' => 'Paha zagolofkka',
 'badtitletext' => 'Cüzüttü artikkelizagolofkka õli vilpilliin, tühjä vai väärii linkitettü ceelijeväliin vai vikiiväliin linkki.',
 'viewsource' => 'Lähtekoodi',
 
@@ -225,6 +228,7 @@ Kui cüsümüssessä ebõõ roocittu cülci, võib õlla õlõttõ löütännü
 'userlogout' => 'Cirjut uloz',
 'nologin' => "Kui Teille veel ebõõ cäüttijänimi, '''$1'''.",
 'nologinlink' => 'võitta loovva luguu',
+'createaccount' => 'Uusi cäüttijää',
 'gotaccountlink' => 'Cirjut süäme',
 'createaccountreason' => 'Süü:',
 'mailmypassword' => 'Lähet uusi salasõna elektropoštiikaa',
@@ -303,6 +307,9 @@ Võitta loovva cüľľee cirjuttamall alla õlõvasõõ tilaa. Kui että taho lo
 'histfirst' => 'Kõikkõa varaizõpid',
 'histlast' => 'Kõikkõa viimõizõpid',
 
+# Revision feed
+'history-feed-item-nocomment' => '$1 .. $2',
+
 # Revision deletion
 'rev-delundel' => 'näüt/salauta',
 'rev-showdeleted' => 'näüt väľľää',
@@ -349,6 +356,7 @@ Võitta loovva cüľľee cirjuttamall alla õlõvasõõ tilaa. Kui että taho lo
 'search-interwiki-more' => '(lisä)',
 'search-mwsuggest-enabled' => 'tarittsõmisijõkaa',
 'search-mwsuggest-disabled' => 'tarittsõmizõtta',
+'searchrelated' => 'sittu',
 'searchall' => 'kõik',
 'nonefound' => "'''Zametšańńa''': Ettsü etsib anult osiss nimiruumii.
 Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taas juttucüľľeekaa, sablooniikaa, jne.), vai tarvittõga nimiruumi niku prefiksi.",
@@ -390,6 +398,7 @@ Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taa
 # Groups
 'group-user' => 'Сäüttijäd',
 'group-sysop' => 'Praviťeľad',
+'group-all' => '{kõik)',
 
 'group-user-member' => 'cäüttijä',
 
@@ -446,6 +455,9 @@ Cüľľed, kummad õmad teďďellä [[Special:Watchlist|kattsõspiizgalla]] on c
 'fileuploadsummary' => 'Turvotuz:',
 'uploadedimage' => '"[[$1]]" on laajõngoitõttu ülez',
 
+'license' => 'Litseenttsija:',
+'license-header' => 'Litseenttsija',
+
 # Special:ListFiles
 'imgfile' => 'faili',
 'listfiles_thumb' => 'Peenikuva',
@@ -486,6 +498,8 @@ Cüľľed, kummad õmad teďďellä [[Special:Watchlist|kattsõspiizgalla]] on c
 'statistics' => 'Staťisťikka',
 'statistics-pages' => 'Cülcid',
 
+'disambiguationspage' => 'Template:disambig',
+
 'brokenredirects-edit' => 'muuttaa',
 'brokenredirects-delete' => 'pühi',
 
@@ -547,6 +561,7 @@ Cüľľed, kummad õmad teďďellä [[Special:Watchlist|kattsõspiizgalla]] on c
 # Watchlist
 'watchlist' => 'Minu kattsõspiiska',
 'mywatchlist' => 'Minu kattsõspiiska',
+'watchlistfor2' => '$2 - $1 vart',
 'addedwatchtext' => "Cülci \"[[:\$1]]\" on lisättü Teďďee [[Special:Watchlist|kattsospiizgallõ]].
 Cülcese ja sene juttucülcese tehäväd tulõvaizõd muutuhsõd leeväd cisloitõtud siäll.
 Cülci leeb cirjutõttu '''pimmiässi''' [[Special:RecentChanges|spiizgall viimeizije muutuhsijõ]].",
@@ -569,6 +584,7 @@ Cülci leeb cirjutõttu '''pimmiässi''' [[Special:RecentChanges|spiizgall viime
 'delete-legend' => 'Pühi',
 'confirmdeletetext' => 'Õlõtta pühcimässä cüľľee vai failii ja kõigõ sene istorii. Õlka nii üvä, kõvissõga jot tahotta sitä tehä, jot saatta arvoa sledstvijäd jot pühcimüz on [[{{MediaWiki:Policy-url}}|poolissaa]] mukka.',
 'actioncomplete' => 'Töö tehtü lõppuu',
+'actionfailed' => 'Vika',
 'deletedtext' => '"$1" on pühittü.
 Cüľľellä $2 on spiiska viimeiziss pühcimühsiiss.',
 'dellogpage' => 'Pühitüd cüľľed',
@@ -715,6 +731,7 @@ Neill kõhtoill piättä liikuttaa vai ühissää cüľľee cäzi.",
 
 # Thumbnails
 'thumbnail-more' => 'Suurõt',
+'thumbnail_error' => 'Vika: $1',
 
 # Special:Import
 'import-upload-filename' => 'Failinimi:',
index d487e43..c01c802 100644 (file)
@@ -195,8 +195,8 @@ $messages = array(
 'helppage' => 'Help:დინორე',
 'mainpage' => 'დუდხასჷლა',
 'mainpage-description' => 'დუდხასჷლა',
-'portal' => 'á\83¡á\83\90á\83\96á\83\9dá\83\92á\83\90á\83\93á\83\9dá\83\94á\83\91აშ ხასჷლეფი',
-'portal-url' => 'Project:á\83¡á\83\90á\83\96á\83\9dá\83\92á\83\90á\83\93á\83\9dá\83\94á\83\91á\83\90á\83¨ á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤',
+'portal' => 'á\83¯á\83\90á\83 á\83\90á\83\9aá\83£აშ ხასჷლეფი',
+'portal-url' => 'Project:á\83¯á\83\90á\83 á\83\90á\83\9aá\83£á\83\90á\83¨ á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98',
 'privacy' => 'ანონიმურობაშ პოლიტიკა',
 'privacypage' => 'Project:ანონიმურობაშ პოლიტიკა',
 
@@ -910,7 +910,7 @@ $messages = array(
 'version' => 'ვერსია',
 
 # Special:SpecialPages
-'specialpages' => 'á\83¡á\83\9eá\83\94á\83ªá\83\98á\83\90á\83\9aá\83£á\83  á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤',
+'specialpages' => 'á\83\92á\83·á\83¨á\83\90á\83\99á\83\94á\83 á\83«á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98',
 
 # External image whitelist
 'external_image_whitelist' => '"#ქჷდიტე თე ღოზი კოკობო მუჭო რენ თეში<pre>
index e6a6d6c..ba9a0ea 100644 (file)
@@ -285,17 +285,17 @@ $messages = array(
 'tog-editsectiononrightclick' => '启用右击段落标题编辑段落(需要JavaScript)',
 'tog-showtoc' => '显示目录(对于有多于3个标题的页面)',
 'tog-rememberpassword' => '在浏览器上记住我的登录状态(最长$1天)',
-'tog-watchcreations' => '添加我创建的页面至我的监视列表',
-'tog-watchdefault' => '添加我编辑的页面至我的监视列表',
-'tog-watchmoves' => '添加我移动的页面至我的监视列表',
-'tog-watchdeletion' => '添加我删除的页面至我的监视列表',
+'tog-watchcreations' => '添加我创建的页面和上传的文件至我的监视列表',
+'tog-watchdefault' => '添加我编辑的页面和文件至我的监视列表',
+'tog-watchmoves' => '将我移动的页面和文件添加到我的监视列表',
+'tog-watchdeletion' => '添加我删除的页面和文件至我的监视列表',
 'tog-minordefault' => '默认标记编辑为小编辑',
 'tog-previewontop' => '在编辑框上方显示预览',
 'tog-previewonfirst' => '首次编辑时显示预览',
 'tog-nocache' => '停用浏览器页面缓存',
-'tog-enotifwatchlistpages' => '当我的监视列表中的页面更改时发送电子邮件通知我',
+'tog-enotifwatchlistpages' => 'å½\93æ\88\91ç\9a\84ç\9b\91è§\86å\88\97表中ç\9a\84页é\9d¢æ\88\96æ\96\87件æ\9b´æ\94¹æ\97¶å\8f\91é\80\81ç\94µå­\90é\82®ä»¶é\80\9aç\9f¥æ\88\91',
 'tog-enotifusertalkpages' => '当我的讨论页更改时发送电子邮件通知我',
-'tog-enotifminoredits' => '当页面有小编辑时发送电子邮件通知我',
+'tog-enotifminoredits' => '当页面和文件有小编辑时发送电子邮件通知我',
 'tog-enotifrevealaddr' => '在通知电子邮件中显示我的电子邮件地址',
 'tog-shownumberswatching' => '显示监视用户数',
 'tog-oldsig' => '当前签名:',
@@ -621,6 +621,7 @@ $1',
 'cannotdelete' => '无法删除页面或图像 "$1"。
 它可能已被其他人删除了。',
 'cannotdelete-title' => '无法删除“$1”',
+'delete-hook-aborted' => '删除被扩展钩子取消。钩子并没有给出解释。',
 'badtitle' => '错误的标题',
 'badtitletext' => '所请求页面的标题是无效的、不存在,跨语言或跨wiki链接的标题错误。它可能包含一个或更多的不能用于标题的字符。',
 'perfcached' => '下列数据已缓存,但可能已过时。最高{{PLURAL:$1|一个结果|$1个结果}}在缓存中可用。',
@@ -646,9 +647,9 @@ $2',
 'customjsprotected' => '您没有权限编辑此JavaScript页面,因为它包含另一位用户的个人设置。',
 'ns-specialprotected' => '您不能编辑特殊页面。',
 'titleprotected' => '此标题已被[[User:$1|$1]]保护以防止创建。理由是“$2”。',
-'filereadonlyerror' => '无法修改文件“$1”,因为文件库“$2”处于只读模式。 
+'filereadonlyerror' => '因为媒体库$2处于只读模式而无法修改文件$1。
 
-管理员对锁定它给出的解释是:“$3”。',
+执行锁定的管理员给出如下解释:$3。',
 'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
 'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
 'exception-nologin' => '未登陆',
@@ -1720,6 +1721,7 @@ $1',
 'lockmanager-fail-releaselock' => '无法为“$1”释放锁。',
 'lockmanager-fail-db-bucket' => '不能在$1池中联系到足够锁数据库。',
 'lockmanager-fail-db-release' => '不能在数据库$1上释放锁。',
+'lockmanager-fail-svr-acquire' => '无法在服务器 $1 上获得锁',
 'lockmanager-fail-svr-release' => '不能在服务器$1上释放锁。',
 
 # ZipDirectoryReader
@@ -1825,7 +1827,8 @@ $1',
 它在[$2 文件描述页面]那边上的描述于下面显示。',
 'sharedupload-desc-edit' => '该文件来自$1,它可能在其它计划项目中被使用。
 或许您可以在其[$2 文件描述页面]上编辑说明。',
-'sharedupload-desc-create' => '此文件是从 $1 和可能由其他维基项目使用。 !N !也许您想在其[ $2 文件描述页面]编辑说明。',
+'sharedupload-desc-create' => '此文件来自$1并可能由其他项目使用。
+也许您想在其[$2 文件描述页面]编辑描述信息。',
 'filepage-nofile' => '不存在此名称的文件。',
 'filepage-nofile-link' => '不存在此名称的文件,但您可以[$1 上传它]。',
 'uploadnewversion-linktext' => '上传该文件的新版本',
@@ -1836,7 +1839,7 @@ $1',
 # File reversion
 'filerevert' => '恢复$1',
 'filerevert-legend' => '恢复文件',
-'filerevert-intro' => "您现正在恢复文件'''[[Media:$1|$1]]'''到[$4 于$2 $3的版本]。",
+'filerevert-intro' => "您正在将文件'''[[Media:$1|$1]]'''恢复到[$4 于$2 $3的版本]。",
 'filerevert-comment' => '原因:',
 'filerevert-defaultcomment' => '已经恢复到于$1 $2的版本',
 'filerevert-submit' => '恢复',
@@ -1955,8 +1958,8 @@ $1',
 'wantedpages' => '待撰页面',
 'wantedpages-badtitle' => '在结果组上的无效标题:$1',
 'wantedfiles' => '需要的文件',
-'wantedfiletext-cat' => '以ä¸\8bæ\96\87件被使ç\94¨ï¼\8cä½\86ä¸\8då­\98å\9c¨ã\80\82å¤\96é\83¨å­\98å\82¨åº\93ç\9a\84æ\96\87件尽管ç\8e°æ\9c\89ï¼\8cä½\86å\8f¯è\83½ä¼\9aå\9c¨æ­¤å\88\97å\87ºï¼\8cä»»ä½\95此类ç\9a\84误æ\8a¥å°\86被<del>å\89\94é\99¤</del>ã\80\82æ­¤å¤\96ï¼\8cåµ\8cå\85¥äº\86ä¸\8då­\98å\9c¨ç\9a\84æ\96\87件ç\9a\84ç½\91页å°\86å\9c¨[[:$1]]å\88\97å\87º。',
-'wantedfiletext-nocat' => '以ä¸\8bæ\96\87件被使ç\94¨ï¼\8cä½\86ä¸\8då­\98å\9c¨ã\80\82å¤\96é\83¨å­\98å\82¨åº\93ç\9a\84æ\96\87件尽管ç\8e°æ\9c\89ï¼\8cä½\86å\8f¯è\83½ä¼\9aå\9c¨æ­¤å\88\97å\87ºï¼\8cä»»ä½\95此类ç\9a\84误报将被<del>剔除</del>。',
+'wantedfiletext-cat' => 'ä¸\8bå\88\97被使ç\94¨ç\9a\84æ\96\87件并ä¸\8då­\98å\9c¨ã\80\82å·²å\88\97å\87ºå\8f¯è\83½å­\98å\9c¨å¤\96é\83¨åª\92ä½\93åº\93中ç\9a\84æ\96\87件ã\80\82ä»»ä½\95此类误æ\8a¥å°\86被<del>å\89\94é\99¤</del>ã\80\82æ­¤å¤\96ï¼\8c[[:$1]]å\88\97å\87ºå\88\97å\87ºäº\86åµ\8cå\85¥ä¸\8då­\98å\9c¨æ\96\87件ç\9a\84页é\9d¢。',
+'wantedfiletext-nocat' => 'ä¸\8bå\88\97被使ç\94¨ç\9a\84æ\96\87件并ä¸\8då­\98å\9c¨ã\80\82å·²å\88\97å\87ºå\8f¯è\83½å­\98å\9c¨å¤\96é\83¨åª\92ä½\93åº\93中ç\9a\84æ\96\87件ã\80\82ä»»ä½\95此类误报将被<del>剔除</del>。',
 'wantedtemplates' => '需要的模板',
 'mostlinked' => '最多链接页面',
 'mostlinkedcategories' => '最多链接分类',
@@ -2254,7 +2257,7 @@ $UNWATCHURL
 'rollback-success' => '已恢复$1的编辑,更改回$2的最后修订版本。',
 
 # Edit tokens
-'sessionfailure-title' => '登录信息失败',
+'sessionfailure-title' => '会话无效',
 'sessionfailure' => '似乎您的登录会话有问题;
 为了防止会话劫持,这个操作已经被取消。
 请返回先前的页面,重新载入该页面,然后重试。',
@@ -2511,8 +2514,8 @@ $1被封禁的理由是:“$2”',
 'blocklogpage' => '封禁日志',
 'blocklog-showlog' => '该用户曾被封禁。下面提供封禁日志以供参考:',
 'blocklog-showsuppresslog' => '该用户曾被封禁并隐藏。下面提供封锁日志以供参考:',
-'blocklogentry' => '封禁[[$1]],到期时间为$2$3',
-'reblock-logentry' => '更改[[$1]]的封禁设置,到期时间为$2$3',
+'blocklogentry' => '封禁[[$1]],到期时间为$2$3',
+'reblock-logentry' => '更改[[$1]]的封禁设置,到期时间为$2$3',
 'blocklogtext' => '这是用户封禁和解封操作的日志。自动封禁IP地址没有列出。请见[[Special:BlockList|封禁列表]]查看目前正在进行的阻止和封禁的列表。',
 'unblocklogentry' => '解封$1',
 'block-log-flags-anononly' => '仅限匿名用户',
@@ -2630,7 +2633,7 @@ $1被封禁的理由是:“$2”',
 'movelogpage' => '移动日志',
 'movelogpagetext' => '下面是所有页面移动的列表。',
 'movesubpage' => '{{PLURAL:$1|子页面}}',
-'movesubpagetext' => 'è¿\99个页é\9d¢æ\9c\89$1个å­\90页é\9d¢ï¼\8cå\88\97示å¦\82ä¸\8b。',
+'movesubpagetext' => '该页é\9d¢æ\9c\89$1个å­\90页é\9d¢å\9c¨ä¸\8bé\9d¢å±\95示。',
 'movenosubpage' => '这个页面没有子页面。',
 'movereason' => '原因:',
 'revertmove' => '恢复',
@@ -2661,11 +2664,9 @@ $1被封禁的理由是:“$2”',
 
 # Export
 'export' => '导出页面',
-'exporttext' => '您可以将特定页面或一组页面的文本以及编辑历史以 XML 格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”页面导入到另一个运行 MediaWiki 的网站。
+'exporttext' => '您可以将特定页面或一组页面的文本以及编辑历史以XML格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”页面导入到另一个运行MediaWiki的网站。
 
-要导出页面,请在下面的文本框中输入页面标题,每行一个标题,
-并选择你是否需要导出带有页面历史的以前的修订本,
-或是只选择导出带有最后一次编辑信息的当前修订版本。
+要导出页面,请在下面的文本框中输入页面标题,每行一个标题,并选择你是否需要导出带有页面历史的以前的修订本,或是只选择导出带有最后一次编辑信息的当前修订版本。
 
 此外你还可以利用链接导出文件,例如你可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]导出“[[{{MediaWiki:Mainpage}}]]”页面。',
 'exportall' => '导出所有页面',
@@ -2715,7 +2716,7 @@ $1被封禁的理由是:“$2”',
 
 # Special:Import
 'import' => '导入页面',
-'importinterwiki' => '跨维基导入',
+'importinterwiki' => '跨wiki导入',
 'import-interwiki-text' => '选择要导入的wiki和页面标题,导入修订的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。',
 'import-interwiki-source' => '来源wiki/页面:',
 'import-interwiki-history' => '复制此页的所有历史修订版本',
@@ -2751,21 +2752,21 @@ $1被封禁的理由是:“$2”',
 'import-invalid-interwiki' => '不能从指定的wiki导入。',
 'import-error-edit' => '"$1"页面不导入,因为您不准对其进行编辑。',
 'import-error-create' => '"$1"页面不导入,因为您不准创建它。',
-'import-error-interwiki' => '页面“$1”未能导入,因为它的名称需要使用外部跨维基链接。',
+'import-error-interwiki' => '页面“$1”未能导入,因为它的名称需要使用外部跨wiki链接。',
 'import-error-special' => '页面“$1”未导入,因为它需要使用一个不能创建页面的特殊名字空间。',
 'import-error-invalid' => '页面“$1”未能导入,因为它的名字无效。',
 
 # Import log
 'importlogpage' => '导入日志',
-'importlogpagetext' => '管理性的有编辑历史的页面自其他维基的导入。',
+'importlogpagetext' => '管理性导入在其他wiki上有编辑历史的页面。',
 'import-logentry-upload' => '以文件上传导入[[$1]]',
 'import-logentry-upload-detail' => '$1个版本',
-'import-logentry-interwiki' => '跨维基$1',
+'import-logentry-interwiki' => '跨wiki$1',
 'import-logentry-interwiki-detail' => '来自$2的$1个修订',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript测试',
-'javascripttest-disabled' => '该维基站点上尚未启用此功能。',
+'javascripttest-disabled' => '该wiki站点上尚未启用此功能。',
 'javascripttest-title' => '运行$1测试',
 'javascripttest-pagetext-noframework' => '此页面被保留用于运行JavaScript测试。',
 'javascripttest-pagetext-unknownframework' => '未知的框架“$1”。',
@@ -2822,7 +2823,7 @@ $1被封禁的理由是:“$2”',
 'tooltip-ca-nstab-user' => '查看用户页面',
 'tooltip-ca-nstab-media' => '查看媒体文件页面',
 'tooltip-ca-nstab-special' => '本页为特殊页面,你不能编辑本页',
-'tooltip-ca-nstab-project' => '查看计划页面',
+'tooltip-ca-nstab-project' => '查看项目页面',
 'tooltip-ca-nstab-image' => '查看文件页面',
 'tooltip-ca-nstab-mediawiki' => '查看系统信息',
 'tooltip-ca-nstab-template' => '查看模板',
@@ -2974,7 +2975,7 @@ $1',
 # Special:NewFiles
 'newimages' => '新文件库',
 'imagelisttext' => "以下是按$2排列的'''$1'''个文件列表。",
-'newimages-summary' => 'æ­¤ç\89¹æ®\8a页é\9d¢æ\98¾ç¤ºæ\9c\80è¿\91上传的文件。',
+'newimages-summary' => 'æ\9c¬ç\89¹æ®\8a页é\9d¢å±\95示æ\9c\80å\90\8e上传的文件。',
 'newimages-legend' => '过滤',
 'newimages-label' => '文件名(或它的一部份):',
 'showhidebots' => '($1机器人)',
@@ -3079,7 +3080,7 @@ Variants for Chinese language
 'exif-pixelydimension' => '图像宽度',
 'exif-pixelxdimension' => '图像高度',
 'exif-usercomment' => '用户注释',
-'exif-relatedsoundfile' => '相关的音频文件',
+'exif-relatedsoundfile' => '相关声音文件',
 'exif-datetimeoriginal' => '数据生成日期时间',
 'exif-datetimedigitized' => '数字化日期时间',
 'exif-subsectime' => '修改时间厘秒数',
@@ -3115,7 +3116,7 @@ Variants for Chinese language
 'exif-exposuremode' => '曝光模式',
 'exif-whitebalance' => '白平衡',
 'exif-digitalzoomratio' => '数字变焦比率',
-'exif-focallengthin35mmfilm' => '35毫米胶片焦距',
+'exif-focallengthin35mmfilm' => '35 mm胶片焦距',
 'exif-scenecapturetype' => '场景模式',
 'exif-gaincontrol' => '场景控制',
 'exif-contrast' => '对比度',
@@ -3207,10 +3208,10 @@ Variants for Chinese language
 'exif-morepermissionsurl' => '替代的许可信息',
 'exif-attributionurl' => '二次使用本作品时,请链接至',
 'exif-preferredattributionname' => '二次使用本作品时,请署名',
-'exif-pngfilecomment' => 'PNG 文件注释',
+'exif-pngfilecomment' => 'PNG文件注释',
 'exif-disclaimer' => '免责声明',
 'exif-contentwarning' => '内容的警告',
-'exif-giffilecomment' => 'GIF 文件注释',
+'exif-giffilecomment' => 'GIF文件注释',
 'exif-intellectualgenre' => '项目类型',
 'exif-subjectnewscode' => '主题代码',
 'exif-scenecode' => 'IPTC 现场代码',
@@ -3400,10 +3401,10 @@ Variants for Chinese language
 'exif-dc-coverage' => '介质的空间或时间范围',
 'exif-dc-date' => '日期',
 'exif-dc-publisher' => '发布者',
-'exif-dc-relation' => '相关体裁',
+'exif-dc-relation' => '相关文件',
 'exif-dc-rights' => '权利',
-'exif-dc-source' => '原始体裁',
-'exif-dc-type' => 'ä½\93è£\81',
+'exif-dc-source' => '原始文件',
+'exif-dc-type' => 'ä»\8b质类å\9e\8b',
 
 'exif-rating-rejected' => '拒绝',
 
@@ -3780,7 +3781,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'feedback-bugnew' => '我检查了。报告新bug',
 
 # API errors
-'api-error-badaccess-groups' => '你没有权限将文件上传到此维基。',
+'api-error-badaccess-groups' => '你没有将文件上传到此wiki的权限。',
 'api-error-badtoken' => '内部错误:会话无效。',
 'api-error-copyuploaddisabled' => '通过URL上传的功能已被此服务器禁用。',
 'api-error-duplicate' => '在网站上已经具有相同内容的{{PLURAL:$1|[$2 另一个文件]|[$2 另一些文件]}}。',
@@ -3790,14 +3791,16 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'api-error-empty-file' => '您提交的文件是空的。',
 'api-error-emptypage' => '不能创建没有内容的新页面。',
 'api-error-fetchfileerror' => '内部错误:获取文件时发生错误。',
-'api-error-file-too-large' => '您提交的文件太大了。',
-'api-error-filename-tooshort' => '文件名太短了。',
+'api-error-fileexists-forbidden' => '名为$1的文件已经存在而且无法覆盖。',
+'api-error-fileexists-shared-forbidden' => '名为$1的文件已经存在于共享媒体库中而且无法覆盖。',
+'api-error-file-too-large' => '您提交的文件过大。',
+'api-error-filename-tooshort' => '文件名过短。',
 'api-error-filetype-banned' => '此类文件被禁止。',
 'api-error-filetype-missing' => '该文件没有扩展名。',
 'api-error-hookaborted' => '你试图进行的修改被一个扩展钩子终止。',
 'api-error-http' => '内部错误:无法连接到服务器。',
 'api-error-illegal-filename' => '文件名非法。',
-'api-error-internal-error' => '内部错误:此维基项目在处理你的上传数据时出现了错误。',
+'api-error-internal-error' => '内部错误:此wiki在处理你的上传数据时出现了错误。',
 'api-error-invalid-file-key' => '内部错误:找不到临时文件。',
 'api-error-missingparam' => '内部错误:请求中缺少参数。',
 'api-error-missingresult' => '内部错误:无法确定是否复制成功。',
@@ -3814,7 +3817,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'api-error-unknown-error' => '内部错误:尝试上传文件时出错。',
 'api-error-unknown-warning' => '未知的警告:$1',
 'api-error-unknownerror' => '未知错误:$1。',
-'api-error-uploaddisabled' => '这个维基不接受上传。',
+'api-error-uploaddisabled' => '此wiki关闭了上传功能。',
 'api-error-verification-error' => '此文件可能已损坏,或有错误的扩展名。',
 
 # Durations
@@ -3828,6 +3831,4 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'duration-centuries' => '$1个世纪',
 'duration-millennia' => '$1千年',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => '无法在服务器 $1 上获得锁',
 );
index 59045cd..58378c7 100644 (file)
@@ -567,6 +567,8 @@ $1',
 'cannotdelete' => '無法刪除頁面或圖片"$1"。
 它可能已經被其他人刪除了。',
 'cannotdelete-title' => '無法刪除“$1”',
+'delete-hook-aborted' => '刪除被勾點中止。
+它沒有提供解釋。',
 'badtitle' => '錯誤的標題',
 'badtitletext' => '所請求頁面的標題是無效的、不存在,跨語言或跨wiki連結的標題錯誤。它可能包含一個或更多的不能用於標題的字符。',
 'perfcached' => '下列是快取資料,因此可能不是最新的。最多{{PLURAL:$1|只有1個結果|$1個結果}}可用。',
@@ -1405,13 +1407,14 @@ $1",
 'right-writeapi' => '使用API編寫',
 'right-delete' => '刪除頁面',
 'right-bigdelete' => '刪除大量歷史之頁面',
-'right-deleterevision' => '刪除及同反刪除頁面中的指定修訂',
+'right-deletelogentry' => '刪除及恢復特定的日誌項目',
+'right-deleterevision' => '刪除及同恢復頁面中的指定修訂',
 'right-deletedhistory' => '檢視已刪除之歷史項目,不含關聯的文本',
 'right-deletedtext' => '檢視已刪除修訂中之已刪除的字以及更改',
 'right-browsearchive' => '搜尋已刪除之頁面',
 'right-undelete' => '反刪除頁面',
 'right-suppressrevision' => '檢視及恢復由操作員隱藏之修訂',
-'right-suppressionlog' => '檢視私人的日誌',
+'right-suppressionlog' => '檢視非公開的日誌',
 'right-block' => '封鎖其他用戶防止編輯',
 'right-blockemail' => '封鎖用戶不可發電郵',
 'right-hideuser' => '封鎖用戶名,對公眾隱藏',
@@ -1697,6 +1700,7 @@ $1',
 'lockmanager-fail-releaselock' => '無法為「$1」釋放鎖。',
 'lockmanager-fail-db-bucket' => '不能在$1池中聯繫到足夠鎖數據庫。',
 'lockmanager-fail-db-release' => '不能在數據庫$1上釋放鎖。',
+'lockmanager-fail-svr-acquire' => '無法取得伺服器$1上的鎖。',
 'lockmanager-fail-svr-release' => '不能在服務器$1上釋放鎖。',
 
 # ZipDirectoryReader
@@ -1805,9 +1809,9 @@ $1',
 'sharedupload-desc-here' => '該檔案來自於$1,它可能在其它計劃項目中被應用。
 它在[$2 檔案描述頁面]那邊上的描述於下面顯示。',
 'sharedupload-desc-edit' => '該檔案來自$1,它可能在其它計劃項目中被使用。
-或許您可以在其[$2 檔ð£\97\88æ\8f\8fè¿°é \81é\9d¢]ä¸\8a編輯說æ\98\8eã\80\82',
+或許您可以在其[$2 檔æ¡\88æ\8f\8fè¿°é \81é\9d¢]ä¸\8a編輯說æ\98\8eã\80\82',
 'sharedupload-desc-create' => '該檔案來自$1,它可能在其它計劃項目中被使用。
-或許您可以在那邊的[$2 檔ð£\97\88æ\8f\8fè¿°é \81é\9d¢]ä¸\8a編輯å\85¶èªªæ\98\8eã\80\82',
+或許您可以在那邊的[$2 檔æ¡\88æ\8f\8fè¿°é \81é\9d¢]ä¸\8a編輯å\85¶èªªæ\98\8eã\80\82',
 'filepage-nofile' => '不存在此名稱的檔案。',
 'filepage-nofile-link' => '不存在此名稱的檔案,但您可以[$1 上傳它]。',
 'uploadnewversion-linktext' => '上傳該檔案的新版本',
@@ -2241,6 +2245,8 @@ $UNWATCHURL
 'rollback' => '恢復編輯',
 'rollback_short' => '恢復',
 'rollbacklink' => '恢復',
+'rollbacklinkcount' => '恢復 $1 次編輯',
+'rollbacklinkcount-morethan' => '恢復多過 $1 次編輯',
 'rollbackfailed' => '無法恢復',
 'cantrollback' => '無法恢復編輯;最後的貢獻者是本文的唯一作者。',
 'alreadyrolled' => '無法回退由[[User:$2|$2]]([[User talk:$2|討論]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]在[[:$1]]上的編輯;其他人已經編輯或者回退了該頁。
@@ -2515,8 +2521,8 @@ $1被封禁的理由是“$2”',
 'blocklogpage' => '查封日誌',
 'blocklog-showlog' => '這位用戶曾經被封鎖過。在下列提供封鎖記錄以便參考:',
 'blocklog-showsuppresslog' => '這位用戶曾經被封鎖和隱藏過。在下列提供廢止記錄以便參考:',
-'blocklogentry' => 'å·²å°\81ç¦\81â\80\9c[[$1]]â\80\9d $3è\80\8cçµ\82æ­¢æ\99\82é\96\93ç\82º$2',
-'reblock-logentry' => '更改[[$1]]的封禁設定時間 $2 $3',
+'blocklogentry' => 'å°\81ç¦\81[[$1]]ï¼\8cå\88°æ\9c\9fæ\99\82é\96\93ç\88²$2$3',
+'reblock-logentry' => '更改[[$1]]的封禁設置,到期時間爲$2$3',
 'blocklogtext' => '這是關於用戶封禁和解除封禁操作的記錄。被自動封禁的IP地址沒有被列出。請參閱[[Special:BlockList|被查封的IP地址和用戶列表]]。',
 'unblocklogentry' => '已解封 $1',
 'block-log-flags-anononly' => '僅限匿名用戶',
@@ -2672,13 +2678,11 @@ $1被封禁的理由是“$2”',
 
 # Export
 'export' => '匯出頁面',
-'exporttext' => '您可以將特定頁面或一組頁面的文字以及編輯歷史以 XML 格式匯出;這樣可以將有關頁面透過「[[Special:Import|匯入頁面]]」頁面匯入到另一個執行 MediaWiki 的網站。
+'exporttext' => '您可以將特定頁面或一組頁面的文字以及編輯歷史以XML格式匯出;這樣可以將有關頁面透過「[[Special:Import|匯入頁面]]」頁面匯入到另一個執行MediaWiki的網站。
 
-要匯出頁面,請在下面的文字框中輸入頁面標題,每行一個標題,
-並選擇{{GENDER:|你|妳|你}}是否需要匯出帶有頁面歷史的以前的修訂版本,
-或是只選擇匯出帶有最後一次編輯訊息的目前修訂版本。
+要匯出頁面,請在下面的文字框中輸入頁面標題,每行一個標題,並選擇{{GENDER:|你|妳|你}}是否需要匯出帶有頁面歷史的以前的修訂版本,或是只選擇匯出帶有最後一次編輯訊息的目前修訂版本。
 
-此外{{GENDER:|你|妳|你}}還可以利用連結匯出檔案,例如{{GENDER:|你|妳|你}}可以使用 [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] 匯出「[[{{MediaWiki:Mainpage}}]]」頁面。',
+此外{{GENDER:|你|妳|你}}還可以利用連結匯出檔案,例如{{GENDER:|你|妳|你}}可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]匯出「[[{{MediaWiki:Mainpage}}]]」頁面。',
 'exportall' => '導出所有頁面',
 'exportcuronly' => '僅包含目前的修訂,而不是全部的歷史。',
 'exportnohistory' => "----
@@ -3842,6 +3846,4 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'duration-centuries' => '$1世紀',
 'duration-millennia' => '$1千年',
 
-# Unknown messages
-'lockmanager-fail-svr-acquire' => '無法取得伺服器$1上的鎖。',
 );
index aeb2e9d..b60a196 100644 (file)
@@ -182,7 +182,7 @@ EXAMPLE_PATH           =
 EXAMPLE_PATTERNS       = *
 EXAMPLE_RECURSIVE      = NO
 IMAGE_PATH             =
-INPUT_FILTER           =
+INPUT_FILTER           = "{{INPUT_FILTER}}"
 FILTER_PATTERNS        =
 FILTER_SOURCE_FILES    = NO
 FILTER_SOURCE_PATTERNS =
index 3846ef5..ec395eb 100644 (file)
@@ -171,10 +171,6 @@ class TextPassDumper extends BackupDumper {
                $input = fopen( $this->input, "rt" );
                $result = $this->readDump( $input );
 
-               if ( WikiError::isError( $result ) ) {
-                       throw new MWException( $result->getMessage() );
-               }
-
                if ( $this->spawnProc ) {
                        $this->closeSpawn();
                }
@@ -328,6 +324,10 @@ class TextPassDumper extends BackupDumper {
                }
        }
 
+       /**
+        * @throws MWException Failure to parse XML input
+        * @return true
+        */
        function readDump( $input ) {
                $this->buffer = "";
                $this->openElement = false;
@@ -352,7 +352,18 @@ class TextPassDumper extends BackupDumper {
                        $chunk = fread( $input, $bufferSize );
                        if ( !xml_parse( $parser, $chunk, feof( $input ) ) ) {
                                wfDebug( "TextDumpPass::readDump encountered XML parsing error\n" );
-                               return new WikiXmlError( $parser, 'XML import parse failure', $chunk, $offset );
+
+                               $byte = xml_get_current_byte_index( $parser );
+                               $msg = wfMsgHtml( 'xml-error-string',
+                                       'XML import parse failure',
+                                       xml_get_current_line_number( $parser ),
+                                       xml_get_current_column_number( $parser ),
+                                       $byte . ( is_null( $chunk ) ? null : ( '; "' . substr( $chunk, $byte -$offset, 16 ) . '"' ) ),
+                                       xml_error_string( xml_get_error_code( $parser ) ) );
+
+                               xml_parser_free( $parser );
+
+                               throw new MWException( $msg );
                        }
                        $offset += strlen( $chunk );
                } while ( $chunk !== false && !feof( $input ) );
index 498bc6b..70a9232 100644 (file)
@@ -140,6 +140,12 @@ class CopyFileBackend extends Maintenance {
                        $fsFile = $src->getLocalReference( array( 'src' => $srcPath, 'latest' => 1 ) );
                        if ( !$fsFile ) {
                                $this->error( "Could not get local copy of $srcPath.", 1 ); // die
+                       } elseif ( !$fsFile->exists() ) {
+                               // FSFileBackends just return the path for getLocalReference() and paths with
+                               // illegal slashes may get normalized to a different path. This can cause the
+                               // local reference to not exist...skip these broken files.
+                               $this->error( "Detected possible illegal path for $srcPath." );
+                               continue;
                        }
                        $fsFiles[] = $fsFile; // keep TempFSFile objects alive as needed
                        // Note: prepare() is usually fast for key/value backends
index 2a99fa1..6860a5a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Deletes a batch of pages
+ * Deletes a batch of pages.
  * Usage: php deleteBatch.php [-u <user>] [-r <reason>] [-i <interval>] [listfile]
  * where
  *     [listfile] is a file where each line contains the title of a page to be
index 211dc4e..13b3c49 100644 (file)
@@ -17,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
index de6f652..126eed2 100644 (file)
@@ -17,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
index 7e83d5f..a81e3d9 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Creates a sitemap for the site
+ * Creates a sitemap for the site.
  *
  * Copyright © 2005, Ævar Arnfjörð Bjarmason, Jens Frank <jeluf@gmx.de> and
  * Brion Vibber <brion@pobox.com>
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that generates a sitemap for the site.
+ *
+ * @ingroup Maintenance
+ */
 class GenerateSitemap extends Maintenance {
        const GS_MAIN = -2;
        const GS_TALK = -1;
index 0322fa2..c47c61e 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Display replication lag times.
+ *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that displays replication lag times.
+ *
+ * @ingroup Maintenance
+ */
 class GetLagTimes extends Maintenance {
        public function __construct() {
                parent::__construct();
index 3d13bc4..0270052 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * This script reports the hostname of a slave server.
+ * Reports the hostname of a slave server.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that reports the hostname of a slave server.
+ *
+ * @ingroup Maintenance
+ */
 class GetSlaveServer extends Maintenance {
        public function __construct() {
                parent::__construct();
index eb04411..34558b6 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
- * Outputs page text to stdout, useful for command-line editing automation.
+ * Outputs page text to stdout.
+ * Useful for command-line editing automation.
  * Example: php getText.php "page title" | sed -e '...' | php edit.php "page title"
  *
  * This program is free software; you can redistribute it and/or modify
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that outputs page text to stdout.
+ *
+ * @ingroup Maintenance
+ */
 class GetTextMaint extends Maintenance {
        public function __construct() {
                parent::__construct();
index 2ad0872..b6e0fe0 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 /**
- * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * Import XML dump files into the current wiki.
+ *
+ * Copyright © 2005 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
@@ -25,6 +27,8 @@
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
 /**
+ * Maintenance script that imports XML dump files into the current wiki.
+ *
  * @ingroup Maintenance
  */
 class BackupReader extends Maintenance {
index 5eb68f2..ac5d144 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Support functions for the importImages script
+ * Support functions for the importImages.php script
  *
  * 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
index bd077ff..76ec565 100644 (file)
@@ -1,8 +1,7 @@
 <?php
-
 /**
- * Maintenance script to import one or more images from the local file system into
- * the wiki without using the web-based interface.
+ * Import one or more images from the local file system into the wiki without
+ * using the web-based interface.
  *
  * "Smart import" additions:
  * - aim: preserve the essential metadata (user, description) when importing medias from an existing wiki
index 0ce9388..65ac65a 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
- * Maintenance script to import all scripts in the MediaWiki namespace from a
- * local site.
+ * Import all scripts in the MediaWiki namespace from a local site.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to import all scripts in the MediaWiki namespace from a
+ * local site.
+ *
+ * @ingroup Maintenance
+ */
 class ImportSiteScripts extends Maintenance {
        public function __construct() {
                parent::__construct();
@@ -32,17 +37,17 @@ class ImportSiteScripts extends Maintenance {
                $this->addArg( 'index', 'index.php base url' );
                $this->addOption( 'username', 'User name of the script importer' );
        }
-       
+
        public function execute() {
                global $wgUser;
 
                $user = User::newFromName( $this->getOption( 'username', 'ScriptImporter' ) );
                $wgUser = $user;
-               
+
                $baseUrl = $this->getArg( 1 );
                $pageList = $this->fetchScriptList();
                $this->output( 'Importing ' . count( $pageList ) . " pages\n" );
-               
+
                foreach ( $pageList as $page ) {
                        $title = Title::makeTitleSafe( NS_MEDIAWIKI, $page );
                        if ( !$title ) {
@@ -51,34 +56,34 @@ class ImportSiteScripts extends Maintenance {
                        }
 
                        $this->output( "Importing $page\n" );
-                       $url = wfAppendQuery( $baseUrl, array( 
-                               'action' => 'raw', 
+                       $url = wfAppendQuery( $baseUrl, array(
+                               'action' => 'raw',
                                'title' => "MediaWiki:{$page}" ) );
                        $text = Http::get( $url );
 
                        $wikiPage = WikiPage::factory( $title );
                        $wikiPage->doEdit( $text, "Importing from $url", 0, false, $user );
                }
-               
+
        }
-       
+
        protected function fetchScriptList() {
-               $data = array( 
+               $data = array(
                        'action' => 'query',
                        'format' => 'php',//'json',
                        'list' => 'allpages',
                        'apnamespace' => '8',
-                       'aplimit' => '500', 
+                       'aplimit' => '500',
                );
                $baseUrl = $this->getArg( 0 );
                $pages = array();
-               
+
                do {
                        $url = wfAppendQuery( $baseUrl, $data );
                        $strResult = Http::get( $url );
                        //$result = FormatJson::decode( $strResult ); // Still broken
                        $result = unserialize( $strResult );
-                       
+
                        if ( !empty( $result['query']['allpages'] ) ) {
                                foreach ( $result['query']['allpages'] as $page ) {
                                        if ( substr( $page['title'], -3 ) === '.js' ) {
@@ -92,9 +97,9 @@ class ImportSiteScripts extends Maintenance {
                                $this->output( "Fetching new batch from {$data['apfrom']}\n" );
                        }
                } while ( isset( $result['query-continue'] ) );
-               
+
                return $pages;
-               
+
        }
 }
 
index ec9ff00..5623fb0 100644 (file)
@@ -1,8 +1,6 @@
 <?php
-
 /**
- * Maintenance script allows creating or editing pages using
- * the contents of a text file
+ * Create or edit pages using the contents of a text file.
  *
  * 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
index eab9c8d..35918bb 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Maintenance script to re-initialise or update the site statistics table
+ * Re-initialise or update the site statistics table.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to re-initialise or update the site statistics table
+ *
+ * @ingroup Maintenance
+ */
 class InitStats extends Maintenance {
        public function __construct() {
                parent::__construct();
index 8e0b2e1..6339773 100644 (file)
@@ -1,6 +1,7 @@
 <?php
-
 /**
+ * CLI-based MediaWiki installation and configuration.
+ *
  * 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
@@ -16,8 +17,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
- * @see wfWaitForSlaves()
  */
 
 if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) {
@@ -31,6 +32,11 @@ define( 'MEDIAWIKI_INSTALL', true );
 
 require_once( dirname( dirname( __FILE__ ) )."/maintenance/Maintenance.php" );
 
+/**
+ * Maintenance script to install and configure MediaWiki
+ *
+ * @ingroup Maintenance
+ */
 class CommandLineInstaller extends Maintenance {
        function __construct() {
                parent::__construct();
index 2c38ed9..c0a4dba 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Maintenance script to do test JavaScript validity parses using jsmin+'s parser
+ * Test JavaScript validity parses using jsmin+'s parser
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to do test JavaScript validity parses using jsmin+'s parser
+ *
+ * @ingroup Maintenance
+ */
 class JSParseHelper extends Maintenance {
        var $errs = 0;
 
index dc8bff5..19c549a 100644 (file)
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to show database lag.
+ *
+ * @ingroup Maintenance
+ */
 class DatabaseLag extends Maintenance {
        public function __construct() {
                parent::__construct();
index 9cdbf34..1918109 100644 (file)
@@ -241,6 +241,7 @@ $wgIgnoredMessages = array(
        'version-entrypoints-index-php',
        'version-entrypoints-api-php',
        'version-entrypoints-load-php',
+       'ipb-default-expiry',
 );
 
 /** Optional messages, which may be translated only if changed in the target language. */
index 126faaa..33f5cd1 100644 (file)
@@ -1962,6 +1962,8 @@ $wgMessageStructure = array(
                'rollback',
                'rollback_short',
                'rollbacklink',
+               'rollbacklinkcount',
+               'rollbacklinkcount-morethan',
                'rollbackfailed',
                'cantrollback',
                'alreadyrolled',
@@ -2251,6 +2253,7 @@ $wgMessageStructure = array(
                'cant-see-hidden-user',
                'ipbblocked',
                'ipbnounblockself',
+               'ipb-default-expiry',
        ),
        'developertools' => array(
                'lockdb',
index 088eaa3..ed8250b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * This script makes several 'set', 'incr' and 'get' requests on every
- * memcached server and shows a report.
+ * Makes several 'set', 'incr' and 'get' requests on every memcached
+ * server and shows a report.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that  makes several 'set', 'incr' and 'get' requests
+ * on every memcached server and shows a report.
+ *
+ * @ingroup Maintenance
+ */
 class mcTest extends Maintenance {
        public function __construct() {
                parent::__construct();
index 6a9baa8..8107016 100644 (file)
@@ -28,6 +28,13 @@ define( 'MW_NO_EXTENSION_MESSAGES', 1 );
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 $maintClass = 'MergeMessageFileList';
 $mmfl = false;
+
+/**
+ * Maintenance script that merges $wgExtensionMessagesFiles from various
+ * extensions to produce a single array containing all message files.
+ *
+ * @ingroup Maintenance
+ */
 class MergeMessageFileList extends Maintenance {
 
        function __construct() {
index 297aaf3..451b598 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that re-assigns users from an old group to a new one.
+ *
+ * @ingroup Maintenance
+ */
 class MigrateUserGroup extends Maintenance {
        public function __construct() {
                parent::__construct();
index e1fd862..b17d8fe 100644 (file)
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that minifies a file or set of files.
+ *
+ * @ingroup Maintenance
+ */
 class MinifyScript extends Maintenance {
        var $outDir;
 
index a7739c2..f846994 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Maintenance script to move a batch of pages
+ * Move a batch of pages.
  *
  * 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
@@ -17,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Tim Starling
  *
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to move a batch of pages.
+ *
+ * @ingroup Maintenance
+ */
 class MoveBatch extends Maintenance {
        public function __construct() {
                parent::__construct();
diff --git a/maintenance/mwdoc-filter.php b/maintenance/mwdoc-filter.php
new file mode 100644 (file)
index 0000000..75290f4
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+# Original source code by Goran Rakic
+# http://blog.goranrakic.com/
+# http://stackoverflow.com/questions/4325224
+
+# Should be filled in doxygen INPUT_FILTER as "php mwdoc-filter.php"
+
+$source = file_get_contents( $argv[1] );
+$regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#';
+$replac = '${2} */ ${3} ${1} ${4}';
+$source = preg_replace($regexp, $replac, $source);
+
+echo $source;
index 2edeaba..a59ba17 100644 (file)
@@ -57,6 +57,9 @@ $doxygenBin = 'doxygen';
 /** doxygen configuration template for mediawiki */
 $doxygenTemplate = $mwPath . 'maintenance/Doxyfile';
 
+/** doxygen input filter to tweak source file before they are parsed */
+$doxygenInputFilter = "php {$mwPath}maintenance/mwdoc-filter.php";
+
 /** svnstat command, used to get the version of each file */
 $svnstat = $mwPath . 'bin/svnstat';
 
@@ -134,9 +137,9 @@ function getSvnRevision( $dir ) {
  * @return string
  */
 function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, $currentVersion, $svnstat, $input, $exclude, $excludePatterns, $doxyGenerateMan ) {
+       global $doxygenInputFilter;
 
        $template = file_get_contents( $doxygenTemplate );
-
        // Replace template placeholders by correct values.
        $replacements = array(
                '{{OUTPUT_DIRECTORY}}' => $outputDirectory,
@@ -148,6 +151,7 @@ function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath,
                '{{EXCLUDE_PATTERNS}}' => $excludePatterns,
                '{{HAVE_DOT}}'         => `which dot` ? 'YES' : 'NO',
                '{{GENERATE_MAN}}'     => $doxyGenerateMan ? 'YES' : 'NO',
+               '{{INPUT_FILTER}}'     => $doxygenInputFilter,
        );
        $tmpCfg = str_replace( array_keys( $replacements ), array_values( $replacements ), $template );
        $tmpFileName = tempnam( wfTempDir(), 'mwdocgen-' );
index 74bd657..e2de686 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Check for articles to fix after adding/deleting namespaces
  *
- * Copyright (C) 2005-2007 Brion Vibber <brion@pobox.com>
+ * Copyright © 2005-2007 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that checks for articles to fix after
+ * adding/deleting namespaces.
+ *
+ * @ingroup Maintenance
+ */
 class NamespaceConflictChecker extends Maintenance {
 
        /**
index ac4e723..bee4065 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @todo Make this work on PostgreSQL and maybe other database servers
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that picks a database that has pending jobs.
+ *
+ * @ingroup Maintenance
+ */
 class nextJobDB extends Maintenance {
        public function __construct() {
                parent::__construct();
index 5d4f374..1defe1b 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Remove pages with only 1 revision from the MediaWiki namespace, without
  * flooding recent changes, delete logs, etc.
@@ -28,6 +27,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Steve Sanbeg
  * based on nukePage by Rob Church
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that removes pages with only one revision from the
+ * MediaWiki namespace.
+ *
+ * @ingroup Maintenance
+ */
 class NukeNS extends Maintenance {
        public function __construct() {
                parent::__construct();
index f63de43..3193d43 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Rob Church <robchur@gmail.com>
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that erases a page record from the database.
+ *
+ * @ingroup Maintenance
+ */
 class NukePage extends Maintenance {
        public function __construct() {
                parent::__construct();
diff --git a/maintenance/oracle/archives/patch-ipblocks_i05_index.sql b/maintenance/oracle/archives/patch-ipblocks_i05_index.sql
new file mode 100644 (file)
index 0000000..1427538
--- /dev/null
@@ -0,0 +1,4 @@
+define mw_prefix='{$wgDBprefix}';
+
+CREATE INDEX &mw_prefix.ipblocks_i05 ON &mw_prefix.ipblocks (ipb_parent_block_id);
+
diff --git a/maintenance/oracle/archives/patch-page_restrictions_pkuk_fix.sql b/maintenance/oracle/archives/patch-page_restrictions_pkuk_fix.sql
new file mode 100644 (file)
index 0000000..56c392c
--- /dev/null
@@ -0,0 +1,7 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.page_restrictions DROP CONSTRAINT &mw_prefix.page_restrictions_pk;
+
+ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_id);
+
+CREATE UNIQUE INDEX &mw_prefix.page_restrictions_u01 ON &mw_prefix.page_restrictions (pr_page,pr_type);
diff --git a/maintenance/oracle/archives/patch-revision_i05_index.sql b/maintenance/oracle/archives/patch-revision_i05_index.sql
new file mode 100644 (file)
index 0000000..929c7b3
--- /dev/null
@@ -0,0 +1,4 @@
+define mw_prefix='{$wgDBprefix}';
+
+CREATE INDEX &mw_prefix.revision_i05 ON &mw_prefix.revision (rev_page,rev_user,rev_timestamp);
+
diff --git a/maintenance/oracle/archives/patch-ufg_group-length-increase.sql b/maintenance/oracle/archives/patch-ufg_group-length-increase.sql
new file mode 100644 (file)
index 0000000..a48b8bf
--- /dev/null
@@ -0,0 +1,9 @@
+define mw_prefix='{$wgDBprefix}';
+
+/*$mw$*/
+BEGIN
+       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_former_groups MODIFY ufg_group VARCHAR2(32) NOT NULL';
+EXCEPTION WHEN OTHERS THEN
+       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
+END;
+/*$mw$*/
index 00a3d0c..89e5532 100644 (file)
@@ -1,3 +1,9 @@
 define mw_prefix='{$wgDBprefix}';
 
-ALTER TABLE &mw_prefix.user_groups MODIFY ug_group VARCHAR2(32) NOT NULL;
+/*$mw$*/
+BEGIN
+       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_groups MODIFY ug_group VARCHAR2(32) NOT NULL';
+EXCEPTION WHEN OTHERS THEN
+       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
+END;
+/*$mw$*/
index 3722120..3f9b376 100644 (file)
@@ -116,6 +116,7 @@ CREATE INDEX &mw_prefix.revision_i01 ON &mw_prefix.revision (rev_timestamp);
 CREATE INDEX &mw_prefix.revision_i02 ON &mw_prefix.revision (rev_page,rev_timestamp);
 CREATE INDEX &mw_prefix.revision_i03 ON &mw_prefix.revision (rev_user,rev_timestamp);
 CREATE INDEX &mw_prefix.revision_i04 ON &mw_prefix.revision (rev_user_text,rev_timestamp);
+CREATE INDEX &mw_prefix.revision_i05 ON &mw_prefix.revision (rev_page,rev_user,rev_timestamp);
 
 CREATE SEQUENCE text_old_id_seq;
 CREATE TABLE &mw_prefix.pagecontent ( -- replaces reserved word 'text'
@@ -283,6 +284,7 @@ CREATE INDEX &mw_prefix.ipblocks_i01 ON &mw_prefix.ipblocks (ipb_user);
 CREATE INDEX &mw_prefix.ipblocks_i02 ON &mw_prefix.ipblocks (ipb_range_start, ipb_range_end);
 CREATE INDEX &mw_prefix.ipblocks_i03 ON &mw_prefix.ipblocks (ipb_timestamp);
 CREATE INDEX &mw_prefix.ipblocks_i04 ON &mw_prefix.ipblocks (ipb_expiry);
+CREATE INDEX &mw_prefix.ipblocks_i05 ON &mw_prefix.ipblocks (ipb_parent_block_id);
 
 CREATE TABLE &mw_prefix.image (
   img_name         VARCHAR2(255)      NOT NULL,
@@ -565,8 +567,9 @@ CREATE TABLE &mw_prefix.page_restrictions (
   pr_user    NUMBER          NULL,
   pr_expiry  TIMESTAMP(6) WITH TIME ZONE      NULL
 );
-ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_page,pr_type);
+ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_id);
 ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_fk1 FOREIGN KEY (pr_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+CREATE UNIQUE INDEX &mw_prefix.page_restrictions_u01 ON &mw_prefix.page_restrictions (pr_page,pr_type);
 CREATE INDEX &mw_prefix.page_restrictions_i01 ON &mw_prefix.page_restrictions (pr_type,pr_level);
 CREATE INDEX &mw_prefix.page_restrictions_i02 ON &mw_prefix.page_restrictions (pr_level);
 CREATE INDEX &mw_prefix.page_restrictions_i03 ON &mw_prefix.page_restrictions (pr_cascade);
index faaadd3..1ab3b99 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 /**
- * Look for 'orphan' revisions hooked to pages which don't exist
- * And 'childless' pages with no revisions.
+ * Look for 'orphan' revisions hooked to pages which don't exist and
+ * 'childless' pages with no revisions.
  * Then, kill the poor widows and orphans.
  * Man this is depressing.
  *
- * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * Copyright © 2005 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @author <brion@pobox.com>
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that looks for 'orphan' revisions hooked to pages which
+ * don't exist and 'childless' pages with no revisions.
+ *
+ * @ingroup Maintenance
+ */
 class Orphans extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Look for 'orphan' revisions hooked to pages which don't exist\n" .
-                                                               "And 'childless' pages with no revisions\n" .
+                                                               "and 'childless' pages with no revisions\n" .
                                                                "Then, kill the poor widows and orphans\n" .
                                                                "Man this is depressing";
                $this->addOption( 'fix', 'Actually fix broken entries' );
index 464de10..c1a890b 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
- * CLI script to easily parse some wikitext.
+ * Parse some wikitext.
+ *
  * Wikitext can be given by stdin or using a file. The wikitext will be parsed
  * using 'CLIParser' as a title. This can be overriden with --title option.
  *
  * </p>$
  * @endcode
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
  * @ingroup Maintenance
  * @author Antoine Musso <hashar at free dot fr>
  * @license GNU General Public License 2.0 or later
  */
+
 require_once( dirname(__FILE__) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to parse some wikitext.
+ *
+ * @ingroup Maintenance
+ */
 class CLIParser extends Maintenance {
        protected $parser;
 
index 1f96d62..0271e1a 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that manually runs an SQL patch outside of the general updaters.
+ *
+ * @ingroup Maintenance
+ */
 class PatchSql extends Maintenance {
        public function __construct() {
                parent::__construct();
index 0b45493..037849b 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to populate category table.
+ * Populate the category table.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
-
+/**
+ * Mainteance script to populate the category table.
+ *
+ * @ingroup Maintenance
+ */
 class PopulateCategory extends Maintenance {
 
        const REPORTING_INTERVAL = 1000;
index 0847edf..0bbb5a2 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to populate the img_sha1 field.
+ *
+ * @ingroup Maintenance
+ */
 class PopulateImageSha1 extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
index e3f6067..8a2366a 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that makes the required database updates for populating the
+ * log_search table retroactively
+ *
+ * @ingroup Maintenance
+ */
 class PopulateLogSearch extends LoggedUpdateMaintenance {
        static $tableMap = array( 'rev' => 'revision', 'fa' => 'filearchive', 'oi' => 'oldimage', 'ar' => 'archive' );
 
index eaac68c..3b4b2db 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that makes the required database updates for
+ * Special:ProtectedPages to show all protected pages.
+ *
+ * @ingroup Maintenance
+ */
 class PopulateLogUsertext extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
index b6d2067..6a1b5c8 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that makes the required database updates for rev_parent_id
+ * to be of any use.
+ *
+ * @ingroup Maintenance
+ */
 class PopulateParentId extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
index 6626cbc..65dd91f 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that populates the rev_len field for old revisions
+ * created before MW 1.10.
+ *
+ * @ingroup Maintenance
+ */
 class PopulateRevisionLength extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
index 1d8e4c8..bb620c5 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that fills the rev_sha1 and ar_sha1 columns of revision
+ * and archive tables for revisions created before MW 1.19.
+ *
+ * @ingroup Maintenance
+ */
 class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
index ad9b4f1..5c2b0d4 100644 (file)
@@ -1,10 +1,10 @@
 <?php
 /**
  * Take page text out of an XML dump file and preprocess it to obj.
- * It may be useful for getting preprocessor statistics or filling the 
+ * It may be useful for getting preprocessor statistics or filling the
  * preprocessor cache.
  *
- * Copyright (C) 2011 Platonides - http://www.mediawiki.org/
+ * Copyright © 2011 Platonides - http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 require_once( dirname( __FILE__ ) . '/dumpIterator.php' );
 
+/**
+ * Maintenance script that takes page text out of an XML dump file and
+ * preprocesses it to obj.
+ *
+ * @ingroup Maintenance
+ */
 class PreprocessDump extends DumpIterator {
 
        /* Variables for dressing up as a parser */
index 9c1ad29..fdc141b 100644 (file)
@@ -37,6 +37,9 @@ class RunJobs extends Maintenance {
        }
 
        public function memoryLimit() {
+               if ( $this->hasOption( 'memory-limit' ) ) {
+                       return parent::memoryLimit();
+               }
                // Don't eat all memory on the machine if we get a bad job.
                return "150M";
        }
@@ -60,11 +63,11 @@ class RunJobs extends Maintenance {
                $wgTitle = Title::newFromText( 'RunJobs.php' );
                $dbw = wfGetDB( DB_MASTER );
                $n = 0;
-               $conds = '';
+
                if ( $type === false ) {
                        $conds = Job::defaultQueueConditions( );
                } else {
-                       $conds = "job_cmd = " . $dbw->addQuotes( $type );
+                       $conds = array( 'job_cmd' => $type );
                }
 
                while ( $dbw->selectField( 'job', 'job_id', $conds, 'runJobs.php' ) ) {
index c4ba66e..2dcf757 100644 (file)
@@ -129,7 +129,7 @@ class SyncFileBackend extends Maintenance {
                        if ( $status->isOK() ) {
                                $lastOKPos = max( $lastOKPos, $lastPosInBatch );
                        } else {
-                               $this->output( print_r( $status->getErrorsArray(), true ) );
+                               $this->error( print_r( $status->getErrorsArray(), true ) );
                                break; // no gaps; everything up to $lastPos must be OK
                        }
 
index 0e85050..380a099 100644 (file)
@@ -106,6 +106,10 @@ return array(
                'scripts' => 'resources/jquery/jquery.autoEllipsis.js',
                'dependencies' => 'jquery.highlightText',
        ),
+       'jquery.badge' => array(
+               'scripts' => 'resources/jquery/jquery.badge.js',
+               'styles' => 'resources/jquery/jquery.badge.css',
+       ),
        'jquery.byteLength' => array(
                'scripts' => 'resources/jquery/jquery.byteLength.js',
        ),
@@ -352,7 +356,6 @@ return array(
                        'fa' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fa.js',
                        'fi' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fi.js',
                        'fo' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fo.js',
-                       'fr-ch' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js',
                        'fr' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-fr.js',
                        'gl' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-gl.js',
                        'he' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-he.js',
@@ -610,6 +613,7 @@ return array(
                'scripts' => 'resources/mediawiki/mediawiki.user.js',
                'dependencies' => array(
                        'jquery.cookie',
+                       'mediawiki.api',
                ),
        ),
        'mediawiki.util' => array(
@@ -632,6 +636,7 @@ return array(
                        'jquery.textSelection',
                        'jquery.byteLimit',
                ),
+               'position' => 'top',
        ),
        'mediawiki.action.history' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js',
index 686cdb7..0149ed7 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Blind 1.8.21
+ * jQuery UI Effects Blind 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e3fc3d8..e376cb9 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Bounce 1.8.21
+ * jQuery UI Effects Bounce 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -32,7 +32,7 @@ $.effects.bounce = function(o) {
                $.effects.createWrapper(el); // Create Wrapper
                var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
                var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
-               var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
+               var distance = o.options.distance || (ref == 'top' ? el.outerHeight(true) / 3 : el.outerWidth(true) / 3);
                if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
                if (mode == 'hide') distance = distance / (times * 2);
                if (mode != 'hide') times--;
index 2b43554..1ae4209 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Clip 1.8.21
+ * jQuery UI Effects Clip 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index cc31827..a0efe68 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects 1.8.21
+ * jQuery UI Effects 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -75,7 +75,8 @@ function getColor(elem, attr) {
                var color;
 
                do {
-                               color = $.curCSS(elem, attr);
+                               // jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
+                               color = ($.curCSS || $.css)(elem, attr);
 
                                // Keep going until we find an element that has color, or we hit the body
                                if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
@@ -306,7 +307,7 @@ $.fn.extend({
 /******************************************************************************/
 
 $.extend($.effects, {
-       version: "1.8.21",
+       version: "1.8.22",
 
        // Saves a set of properties in a data storage
        save: function(element, set) {
index 1fa5660..dc5ce44 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Drop 1.8.21
+ * jQuery UI Effects Drop 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -28,7 +28,7 @@ $.effects.drop = function(o) {
                $.effects.createWrapper(el); // Create Wrapper
                var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
                var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
-               var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
+               var distance = o.options.distance || (ref == 'top' ? el.outerHeight( true ) / 2 : el.outerWidth( true ) / 2);
                if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
 
                // Animation
index f50e257..6be5582 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Explode 1.8.21
+ * jQuery UI Effects Explode 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c62037f..c76e6bf 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fade 1.8.21
+ * jQuery UI Effects Fade 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index a660eed..1788066 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fold 1.8.21
+ * jQuery UI Effects Fold 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e65bda3..451b02d 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Highlight 1.8.21
+ * jQuery UI Effects Highlight 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index a512184..f989174 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Pulsate 1.8.21
+ * jQuery UI Effects Pulsate 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c312195..d5761a5 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Scale 1.8.21
+ * jQuery UI Effects Scale 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 08ce5a8..6c2a8db 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Shake 1.8.21
+ * jQuery UI Effects Shake 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 3258a9a..c77fad6 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Slide 1.8.21
+ * jQuery UI Effects Slide 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -28,7 +28,7 @@ $.effects.slide = function(o) {
                $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
                var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
                var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
-               var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
+               var distance = o.options.distance || (ref == 'top' ? el.outerHeight( true ) : el.outerWidth( true ));
                if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
 
                // Animation
index 97514f1..5a68ae8 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Transfer 1.8.21
+ * jQuery UI Effects Transfer 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
diff --git a/resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js b/resources/jquery.ui/i18n/jquery.ui.datepicker-fr-CH.js
deleted file mode 100644 (file)
index 244eacf..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Swiss-French initialisation for the jQuery UI date picker plugin. */
-/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
-jQuery(function($){
-       $.datepicker.regional['fr-CH'] = {
-               closeText: 'Fermer',
-               prevText: '&#x3c;Préc',
-               nextText: 'Suiv&#x3e;',
-               currentText: 'Courant',
-               monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
-               'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
-               monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
-               'Jul','Aoû','Sep','Oct','Nov','Déc'],
-               dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
-               dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
-               dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
-               weekHeader: 'Sm',
-               dateFormat: 'dd.mm.yy',
-               firstDay: 1,
-               isRTL: false,
-               showMonthAfterYear: false,
-               yearSuffix: ''};
-       $.datepicker.setDefaults($.datepicker.regional['fr-CH']);
-});
\ No newline at end of file
index fe0a729..d3dbdec 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.21
+ * jQuery UI Accordion 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -518,7 +518,7 @@ $.widget( "ui.accordion", {
 });
 
 $.extend( $.ui.accordion, {
-       version: "1.8.21",
+       version: "1.8.22",
        animations: {
                slide: function( options, additions ) {
                        options = $.extend({
index f8009c6..501b604 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.21
+ * jQuery UI Autocomplete 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 47bd6aa..bdee27c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.21
+ * jQuery UI Button 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 2a8a2c1..40211cc 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI 1.8.21
+ * jQuery UI 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -18,7 +18,7 @@ if ( $.ui.version ) {
 }
 
 $.extend( $.ui, {
-       version: "1.8.21",
+       version: "1.8.22",
 
        keyCode: {
                ALT: 18,
@@ -131,49 +131,52 @@ $.fn.extend({
        }
 });
 
-$.each( [ "Width", "Height" ], function( i, name ) {
-       var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
-               type = name.toLowerCase(),
-               orig = {
-                       innerWidth: $.fn.innerWidth,
-                       innerHeight: $.fn.innerHeight,
-                       outerWidth: $.fn.outerWidth,
-                       outerHeight: $.fn.outerHeight
-               };
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+       $.each( [ "Width", "Height" ], function( i, name ) {
+               var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+                       type = name.toLowerCase(),
+                       orig = {
+                               innerWidth: $.fn.innerWidth,
+                               innerHeight: $.fn.innerHeight,
+                               outerWidth: $.fn.outerWidth,
+                               outerHeight: $.fn.outerHeight
+                       };
+
+               function reduce( elem, size, border, margin ) {
+                       $.each( side, function() {
+                               size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
+                               if ( border ) {
+                                       size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
+                               }
+                               if ( margin ) {
+                                       size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+                               }
+                       });
+                       return size;
+               }
 
-       function reduce( elem, size, border, margin ) {
-               $.each( side, function() {
-                       size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
-                       if ( border ) {
-                               size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
-                       }
-                       if ( margin ) {
-                               size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+               $.fn[ "inner" + name ] = function( size ) {
+                       if ( size === undefined ) {
+                               return orig[ "inner" + name ].call( this );
                        }
-               });
-               return size;
-       }
-
-       $.fn[ "inner" + name ] = function( size ) {
-               if ( size === undefined ) {
-                       return orig[ "inner" + name ].call( this );
-               }
 
-               return this.each(function() {
-                       $( this ).css( type, reduce( this, size ) + "px" );
-               });
-       };
+                       return this.each(function() {
+                               $( this ).css( type, reduce( this, size ) + "px" );
+                       });
+               };
 
-       $.fn[ "outer" + name] = function( size, margin ) {
-               if ( typeof size !== "number" ) {
-                       return orig[ "outer" + name ].call( this, size );
-               }
+               $.fn[ "outer" + name] = function( size, margin ) {
+                       if ( typeof size !== "number" ) {
+                               return orig[ "outer" + name ].call( this, size );
+                       }
 
-               return this.each(function() {
-                       $( this).css( type, reduce( this, size, true, margin ) + "px" );
-               });
-       };
-});
+                       return this.each(function() {
+                               $( this).css( type, reduce( this, size, true, margin ) + "px" );
+                       });
+               };
+       });
+}
 
 // selectors
 function focusable( element, isTabIndexNotNaN ) {
@@ -205,9 +208,16 @@ function visible( element ) {
 }
 
 $.extend( $.expr[ ":" ], {
-       data: function( elem, i, match ) {
-               return !!$.data( elem, match[ 3 ] );
-       },
+       data: $.expr.createPseudo ?
+               $.expr.createPseudo(function( dataName ) {
+                       return function( elem ) {
+                               return !!$.data( elem, dataName );
+                       };
+               }) :
+               // support: jQuery <1.8
+               function( elem, i, match ) {
+                       return !!$.data( elem, match[ 3 ] );
+               },
 
        focusable: function( element ) {
                return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
@@ -245,6 +255,11 @@ $(function() {
        body.removeChild( div ).style.display = "none";
 });
 
+// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
+if ( !$.curCSS ) {
+       $.curCSS = $.css;
+}
+
 
 
 
index 8ca1b15..58d3ff2 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.21
+ * jQuery UI Datepicker 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -12,7 +12,7 @@
  */
 (function( $, undefined ) {
 
-$.extend($.ui, { datepicker: { version: "1.8.21" } });
+$.extend($.ui, { datepicker: { version: "1.8.22" } });
 
 var PROP_NAME = 'datepicker';
 var dpuuid = new Date().getTime();
@@ -308,7 +308,7 @@ $.extend(Datepicker.prototype, {
                        this.uuid += 1;
                        var id = 'dp' + this.uuid;
                        this._dialogInput = $('<input type="text" id="' + id +
-                               '" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
+                               '" style="position: absolute; top: -100px; width: 0px;"/>');
                        this._dialogInput.keydown(this._doKeyDown);
                        $('body').append(this._dialogInput);
                        inst = this._dialogInst = this._newInst(this._dialogInput, false);
@@ -714,6 +714,7 @@ $.extend(Datepicker.prototype, {
                var borders = $.datepicker._getBorders(inst.dpDiv);
                instActive = inst; // for delegate hover events
                inst.dpDiv.empty().append(this._generateHTML(inst));
+               this._attachHandlers(inst);
                var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
                if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
                        cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
@@ -764,8 +765,8 @@ $.extend(Datepicker.prototype, {
                var dpHeight = inst.dpDiv.outerHeight();
                var inputWidth = inst.input ? inst.input.outerWidth() : 0;
                var inputHeight = inst.input ? inst.input.outerHeight() : 0;
-               var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
-               var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
+               var viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft());
+               var viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
 
                offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
                offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
@@ -1402,6 +1403,43 @@ $.extend(Datepicker.prototype, {
                        return startDate;
        },
 
+       /* Attach the onxxx handlers.  These are declared statically so
+        * they work with static code transformers like Caja.
+        */
+       _attachHandlers: function(inst) {
+               var stepMonths = this._get(inst, 'stepMonths');
+               var id = '#' + inst.id;
+               inst.dpDiv.find('[data-handler]').map(function () {
+                       var handler = {
+                               prev: function () {
+                                       window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, -stepMonths, 'M');
+                               },
+                               next: function () {
+                                       window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, +stepMonths, 'M');
+                               },
+                               hide: function () {
+                                       window['DP_jQuery_' + dpuuid].datepicker._hideDatepicker();
+                               },
+                               today: function () {
+                                       window['DP_jQuery_' + dpuuid].datepicker._gotoToday(id);
+                               },
+                               selectDay: function () {
+                                       window['DP_jQuery_' + dpuuid].datepicker._selectDay(id, +this.getAttribute('data-month'), +this.getAttribute('data-year'), this);
+                                       return false;
+                               },
+                               selectMonth: function () {
+                                       window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'M');
+                                       return false;
+                               },
+                               selectYear: function () {
+                                       window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'Y');
+                                       return false;
+                               }
+                       };
+                       $(this).bind(this.getAttribute('data-event'), handler[this.getAttribute('data-handler')]);
+               });
+       },
+       
        /* Generate the HTML for the current state of the date picker. */
        _generateHTML: function(inst) {
                var today = new Date();
@@ -1444,8 +1482,7 @@ $.extend(Datepicker.prototype, {
                        this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
                        this._getFormatConfig(inst)));
                var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
-                       '<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + dpuuid +
-                       '.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
+                       '<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click"' +
                        ' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
                        (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
                var nextText = this._get(inst, 'nextText');
@@ -1453,19 +1490,17 @@ $.extend(Datepicker.prototype, {
                        this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
                        this._getFormatConfig(inst)));
                var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
-                       '<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + dpuuid +
-                       '.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
+                       '<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click"' +
                        ' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
                        (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
                var currentText = this._get(inst, 'currentText');
                var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
                currentText = (!navigationAsDateFormat ? currentText :
                        this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
-               var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
-                       '.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
+               var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">' +
+                       this._get(inst, 'closeText') + '</button>' : '');
                var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
-                       (this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
-                       '.datepicker._gotoToday(\'#' + inst.id + '\');"' +
+                       (this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click"' +
                        '>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
                var firstDay = parseInt(this._get(inst, 'firstDay'),10);
                firstDay = (isNaN(firstDay) ? 0 : firstDay);
@@ -1544,8 +1579,7 @@ $.extend(Datepicker.prototype, {
                                                        (printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day
                                                        (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
                                                        ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
-                                                       (unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
-                                                       inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions
+                                                       (unselectable ? '' : ' data-handler="selectDay" data-event="click" data-month="' + printDate.getMonth() + '" data-year="' + printDate.getFullYear() + '"') + '>' + // actions
                                                        (otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
                                                        (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
                                                        (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
@@ -1588,9 +1622,7 @@ $.extend(Datepicker.prototype, {
                else {
                        var inMinYear = (minDate && minDate.getFullYear() == drawYear);
                        var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
-                       monthHtml += '<select class="ui-datepicker-month" ' +
-                               'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
-                               '>';
+                       monthHtml += '<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">';
                        for (var month = 0; month < 12; month++) {
                                if ((!inMinYear || month >= minDate.getMonth()) &&
                                                (!inMaxYear || month <= maxDate.getMonth()))
@@ -1621,9 +1653,7 @@ $.extend(Datepicker.prototype, {
                                var endYear = Math.max(year, determineYear(years[1] || ''));
                                year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
                                endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
-                               inst.yearshtml += '<select class="ui-datepicker-year" ' +
-                                       'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
-                                       '>';
+                               inst.yearshtml += '<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">';
                                for (; year <= endYear; year++) {
                                        inst.yearshtml += '<option value="' + year + '"' +
                                                (year == drawYear ? ' selected="selected"' : '') +
@@ -1815,7 +1845,7 @@ $.fn.datepicker = function(options){
 $.datepicker = new Datepicker(); // singleton instance
 $.datepicker.initialized = false;
 $.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.8.21";
+$.datepicker.version = "1.8.22";
 
 // Workaround for #4055
 // Add another global to avoid noConflict issues with inline event handlers
index e7e05b1..bc66af5 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.21
+ * jQuery UI Dialog 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -702,7 +702,7 @@ $.widget("ui.dialog", {
 });
 
 $.extend($.ui.dialog, {
-       version: "1.8.21",
+       version: "1.8.22",
 
        uuid: 0,
        maxZ: 0,
index 40a0c52..f93bb0b 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Draggable 1.8.21
+ * jQuery UI Draggable 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -513,7 +513,7 @@ $.widget("ui.draggable", $.ui.mouse, {
 });
 
 $.extend($.ui.draggable, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 $.ui.plugin.add("draggable", "connectToSortable", {
index a749161..f4ae96a 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Droppable 1.8.21
+ * jQuery UI Droppable 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -147,7 +147,7 @@ $.widget("ui.droppable", {
 });
 
 $.extend($.ui.droppable, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 $.ui.intersect = function(draggable, droppable, toleranceMode) {
index a4392de..c7f37d2 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Mouse 1.8.21
+ * jQuery UI Mouse 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 164804b..881dffe 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Position 1.8.21
+ * jQuery UI Position 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 4139be6..70ab985 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.21
+ * jQuery UI Progressbar 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -103,7 +103,7 @@ $.widget( "ui.progressbar", {
 });
 
 $.extend( $.ui.progressbar, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 })( jQuery );
index 904be47..d8f6c88 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.21
+ * jQuery UI Resizable 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -540,7 +540,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 });
 
 $.extend($.ui.resizable, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 /*
index 403e62d..9d9e553 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.21
+ * jQuery UI Selectable 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -261,7 +261,7 @@ $.widget("ui.selectable", $.ui.mouse, {
 });
 
 $.extend($.ui.selectable, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 })(jQuery);
index 8629dc6..4b24fb9 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.21
+ * jQuery UI Slider 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -656,7 +656,7 @@ $.widget( "ui.slider", $.ui.mouse, {
 });
 
 $.extend( $.ui.slider, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 }(jQuery));
index 45fbb1c..0e11f46 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Sortable 1.8.21
+ * jQuery UI Sortable 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -1034,6 +1034,8 @@ $.widget("ui.sortable", $.ui.mouse, {
                                for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
                                this._trigger("stop", event, this._uiHash());
                        }
+
+                       this.fromOutside = false;
                        return false;
                }
 
@@ -1076,7 +1078,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 });
 
 $.extend($.ui.sortable, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 })(jQuery);
index d9e2fdf..7a50626 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.21
+ * jQuery UI Tabs 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -698,7 +698,7 @@ $.widget( "ui.tabs", {
 });
 
 $.extend( $.ui.tabs, {
-       version: "1.8.21"
+       version: "1.8.22"
 });
 
 /*
index 4f7aea7..8a9cc3f 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Widget 1.8.21
+ * jQuery UI Widget 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 4ad0cec..e15202f 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.21
+ * jQuery UI Accordion 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 428e66a..c697c3d 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.21
+ * jQuery UI Autocomplete 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -13,7 +13,7 @@
 * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
 
 /*
- * jQuery UI Menu 1.8.21
+ * jQuery UI Menu 1.8.22
  *
  * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f5fe74e..d4984fb 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.21
+ * jQuery UI Button 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f19df47..f8e7e5b 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.21
+ * jQuery UI CSS Framework 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 4c0ca36..d543625 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.21
+ * jQuery UI Datepicker 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -56,8 +56,6 @@
 
 /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
 .ui-datepicker-cover {
-    display: none; /*sorry for IE5*/
-    display/**/: block; /*sorry for IE5*/
     position: absolute; /*must have*/
     z-index: -1; /*must have*/
     filter: mask(); /*must have*/
index 77329fb..bd264da 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.21
+ * jQuery UI Dialog 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 4c2a52d..8f3774e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.21
+ * jQuery UI Progressbar 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 0105c8a..568b570 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.21
+ * jQuery UI Resizable 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1d89569..54d504b 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.21
+ * jQuery UI Selectable 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 9bd0fd9..e0f7bea 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.21
+ * jQuery UI Slider 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d4645f8..6da4af3 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.21
+ * jQuery UI Tabs 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index aad5943..36b331c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.21
+ * jQuery UI CSS Framework 1.8.22
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 365a795..006bbea 100644 (file)
@@ -4,18 +4,16 @@
 .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
 .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
 button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
 
 /*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4em;  }
+.ui-button .ui-button-text { display: block; line-height: 1.4;  }
 .ui-button-text-only .ui-button-text { padding: 0.3em 1em 0.25em 1em; }
 .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: 0.3em; text-indent: -9999999px; }
 .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.3em 1em 0.25em 2.1em; }
 .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.3em 2.1em 0.25em 1em; }
 .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* for older versions of jQuery UI */
-.ui-button-text-icon .ui-button-text { padding: 0.3em 1em 0.3em 2.1em; }
 
 /* no icon support for input elements, provide padding by default */
 input.ui-button { padding: 0.3em 1em; }
@@ -34,10 +32,7 @@ input.ui-button { padding: 0.3em 1em; }
 button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
 
 body .ui-button {
-       -moz-border-radius: 4px;
-       -webkit-border-radius: 4px;
-       border-radius: 4px;
-       margin: 0.5em 0 0.5em 0.4em !important;
+       margin: 0.5em 0 0.5em 0.4em;
        border: 1px solid #a6a6a6 !important;
        /* @embed */
        background: #f2f2f2 url(images/button-off.png) repeat-x scroll 50% 100% !important;
@@ -47,6 +42,15 @@ body .ui-button {
        width: auto;
        overflow: visible;
 }
+
+/* Corner radius */
+/* This is normally handled in jquery.ui.theme.css, but in our case, the corner
+   styling of our buttons doesn't match our default widget corner styling */
+.ui-button.ui-corner-all, .ui-button.ui-corner-top, .ui-button.ui-corner-left, .ui-button.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-button.ui-corner-all, .ui-button.ui-corner-top, .ui-button.ui-corner-right, .ui-button.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-button.ui-corner-all, .ui-button.ui-corner-bottom, .ui-button.ui-corner-left, .ui-button.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-button.ui-corner-all, .ui-button.ui-corner-bottom, .ui-button.ui-corner-right, .ui-button.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
 body .ui-button:hover {
        border-color: #6e7273;
        /* @embed */
diff --git a/resources/jquery/jquery.badge.css b/resources/jquery/jquery.badge.css
new file mode 100644 (file)
index 0000000..49063ba
--- /dev/null
@@ -0,0 +1,39 @@
+.mw-badge {
+       min-width: 8px;
+       height: 14px;
+       border: 1px solid white;
+       border-radius: 8px;
+       -moz-border-radius: 8px;
+       -webkit-border-radius: 8px;
+       box-shadow: 0px 1px 4px #ccc;
+       -moz-box-shadow: 0px 1px 4px #ccc;
+       -webkit-box-shadow: 0px 1px 4px #ccc;
+       background-color: #b60a00;
+       background-image: linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
+       background-image: -o-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
+       background-image: -moz-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
+       background-image: -webkit-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
+       background-image: -ms-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
+       background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #a70802), color-stop(1, #cf0e00));
+       padding: 0 3px;
+       text-align: center;
+}
+
+.mw-badge-content {
+       font-size: 12px;
+       line-height: 14px;
+       color: white;
+       vertical-align: top;
+}
+
+.mw-badge-inline {
+       display: inline-block;
+       margin-left: 3px;
+}
+
+.mw-badge-overlay {
+       position: absolute;
+       bottom: -1px;
+       right: -3px;
+       z-index: 50;
+}
diff --git a/resources/jquery/jquery.badge.js b/resources/jquery/jquery.badge.js
new file mode 100644 (file)
index 0000000..d40acc6
--- /dev/null
@@ -0,0 +1,78 @@
+// Badger v1.0 by Daniel Raftery
+// http://thrivingkings.com/badger
+// http://twitter.com/ThrivingKings
+// Modified by Ryan Kaldari <rkaldari@wikimedia.org>
+
+/**
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * This program is distributed WITHOUT ANY WARRANTY.
+ */
+
+(function( $ ) {
+       $.fn.badge = function( badge, options ) {
+               var existingBadge = this.find( '.mw-badge' );
+               options = $.extend( {}, options );
+
+               badge = String(badge);
+               if ( badge.charAt(0) === '+' ) {
+                       if ( existingBadge.length > 0 ) {
+                               oldBadge = existingBadge.text();
+                               badge = Math.round( Number( oldBadge ) + Number( badge.substr(1) ) );
+                       } else {
+                               badge = badge.substr(1);
+                       }
+               } else if ( badge.charAt(0) === '-' ) {
+                       if ( existingBadge.length > 0 ) {
+                               oldBadge = existingBadge.text();
+                               badge = Math.round( Number( oldBadge ) - Number( badge.substr(1) ) );
+                       } else {
+                               badge = 0;
+                       }
+               }
+
+               if ( Number(badge) <= 0 ) {
+                       // Clear any existing badge
+                       existingBadge.remove();
+               } else {
+                       // Don't add duplicates
+                       var $badge = existingBadge;
+                       if ( existingBadge.length > 0 ) {
+                               this.find( '.mw-badge-content' ).text( badge );
+                       } else {
+                               $badge = $('<div/>')
+                                       .addClass('mw-badge')
+                                       .addClass('mw-badge-overlay')
+                                       .append(
+                                               $('<span/>')
+                                                       .addClass('mw-badge-content')
+                                                       .text(badge)
+                                       );
+                               this.append($badge);
+                       }
+
+                       if ( options.type ) {
+                               if ( options.type == 'inline' ) {
+                                       $badge.removeClass('mw-badge-overlay')
+                                               .addClass('mw-badge-inline');
+                               } else if ( options.type == 'overlay' ) {
+                                       $badge.removeClass('mw-badge-inline')
+                                               .addClass('mw-badge-overlay');
+                               }
+                       }
+
+                       // If a callback was specified, call it with the badge number
+                       if ( options.callback ) {
+                               options.callback( badge );
+                       }
+               }
+       };
+} ) ( jQuery );
index 27cae29..866778f 100644 (file)
 /**
  * Simple Placeholder-based Localization
  *
- * Call on a selection of HTML which contains <html:msg key="message-key" /> elements or elements with
- * title-msg="message-key" or alt-msg="message-key" attributes. <html:msg /> elements will be replaced
- * with localized text, elements with title-msg and alt-msg attributes will receive localized title
- * and alt attributes.
- * *
+ * Call on a selection of HTML which contains <html:msg key="message-key" /> elements or elements
+ * with title-msg="message-key", alt-msg="message-key" or placeholder-msg="message-key" attributes.
+ * <html:msg /> elements will be replaced with localized text, *-msg attributes will be replaced
+ * with attributes that do not have the "-msg" suffix and contain a localized message.
+ *
+ * Example:
+ *     // Messages: { 'title': 'Awesome', 'desc': 'Cat doing backflip' 'search' contains 'Search' }
+ *     var html = '\
+ *         <p>\
+ *             <html:msg key="title" />\
+ *             <img src="something.jpg" title-msg="title" alt-msg="desc" />\
+ *             <input type="text" placeholder-msg="search" />\
+ *         </p>';
+ *     $( 'body' ).append( $( html ).localize() );
+ *
+ * Appends something like this to the body...
+ *     <p>
+ *         Awesome
+ *         <img src="something.jpg" title="Awesome" alt="Cat doing backflip" />
+ *         <input type="text" placeholder="Search" />
+ *     </p>
+ *
+ * Arguments can be passed into uses of a message using the params property of the options object
+ * given to .localize(). Multiple messages can be given parameters, because the params property is
+ * an object keyed by the message key to apply the parameters to, each containing an array of
+ * parameters to use. The limitation is that you can not use different parameters to individual uses
+ * of a message in the same selection being localized - they will all recieve the same parameters.
+ *
+ * Example:
+ *     // Messages: { 'easy-as': 'Easy as $1 $2 $3.' }
+ *     var html = '<p><html:msg key="easy-as" /></p>';
+ *     $( 'body' ).append( $( html ).localize( { 'params': { 'easy-as': ['a', 'b', 'c'] } } ) );
+ *
+ * Appends something like this to the body...
+ *     <p>Easy as a, b, c</p>
+ *
+ * Raw HTML content can be used, instead of it being escaped as text. To do this, just use the raw
+ * attribute on a msg element.
+ *
+ * Example:
+ *     // Messages: { 'hello': '<b><i>Hello</i> $1!</b>' }
+ *     var html = '\
+ *         <p>\
+ *             <!-- escaped: --><html:msg key="hello" />\
+ *             <!-- raw: --><html:msg key="hello" raw />\
+ *         </p>';
+ *     $( 'body' ).append( $( html ).localize( { 'params': { 'hello': ['world'] } } ) );
+ *
+ * Appends something like this to the body...
+ *     <p>
+ *         <!-- escaped: -->&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt; world!&lt;/b&gt;
+ *         <!-- raw: --><b><i>Hello</i> world!</b>
+ *     </p>
+ *
+ * Message keys can also be remapped, allowing the same generic template to be used with a variety
+ * of messages. This is important for improving re-usability of templates.
+ *
  * Example:
- *             <p class="somethingCool">
- *                     <html:msg key="my-message" />
- *                     <img src="something.jpg" title-msg="my-title-message" alt-msg="my-alt-message" />
- *             </p>
- *
- * Localizes to...
- *             <p class="somethingCool">
- *                     My Message
- *                     <img src="something.jpg" title="My Title Message" alt="My Alt Message" />
- *             </p>
+ *     // Messages: { 'good-afternoon': 'Good afternoon' }
+ *     var html = '<p><html:msg key="greeting" /></p>';
+ *     $( 'body' ).append( $( html ).localize( { 'keys': { 'greeting': 'good-afternoon' } } ) );
+ *
+ * Appends something like this to the body...
+ *     <p>Good afternoon</p>
+ *
+ * Message keys can also be prefixed globally, which is handy when writing extensions, where by
+ * convention all messages are prefixed with the extension's name.
+ *
+ * Example:
+ *     // Messages: { 'teleportation-warning': 'You may not get there all in one piece.' }
+ *     var html = '<p><html:msg key="warning" /></p>';
+ *     $( 'body' ).append( $( html ).localize( { 'prefix': 'teleportation-' } ) );
+ *
+ * Appends something like this to the body...
+ *     <p>You may not get there all in one piece.</p>
+ *
  */
 ( function ( $, mw ) {
+
+/**
+ * Gets a localized message, using parameters from options if present.
+ *
+ * @function
+ * @param {String} key Message key to get localized message for
+ * @returns {String} Localized message
+ */
+function msg( options, key ) {
+       var args = options.params[key] || [];
+       // Format: mw.msg( key [, p1, p2, ...] )
+       args.unshift( options.prefix + ( options.keys[key] || key ) );
+       return mw.msg.apply( mw, args );
+}
+
 /**
  * Localizes a DOM selection by replacing <html:msg /> elements with localized text and adding
  * localized title and alt attributes to elements with title-msg and alt-msg attributes
  * respectively.
  *
- * @param Object: options Map of options
- *  * prefix: Message prefix to use when localizing elements and attributes
+ * @method
+ * @param {Object} options Map of options to be used while localizing
+ * @param {String} options.prefix String to prepend to all message keys
+ * @param {Object} options.keys Message key aliases, used for remapping keys to a template
+ * @param {Object} options.params Lists of parameters to use with certain message keys
+ * @returns {jQuery} This selection
  */
-
 $.fn.localize = function ( options ) {
+       var $target = this,
+               attributes = ['title', 'alt', 'placeholder'];
+
+       // Extend options
        options = $.extend( {
                prefix: '',
                keys: {},
                params: {}
        }, options );
 
-       function msg( key ) {
-               var args = key in options.params ? options.params[key] : [];
-               // Format: mw.msg( key [, p1, p2, ...] )
-               args.unshift( options.prefix + ( key in options.keys ? options.keys[key] : key ) );
-               return mw.msg.apply( mw, args );
-       }
+       // Elements
+       // Ok, so here's the story on this selector. In IE 6/7, searching for 'msg' turns up the
+       // 'html:msg', but searching for 'html:msg' doesn't. In later IE and other browsers, searching
+       // for 'html:msg' turns up the 'html:msg', but searching for 'msg' doesn't. So searching for
+       // both 'msg' and 'html:msg' seems to get the job done. This feels pretty icky, though.
+       $target.find( 'msg,html\\:msg' ).each( function () {
+               var $el = $(this);
+               // Escape by default
+               if ( $el.attr( 'raw' ) ) {
+                       $el.html( msg( options, $el.attr( 'key' ) ) );
+               } else {
+                       $el.text( msg( options, $el.attr( 'key' ) ) );
+               }
+               // Remove wrapper
+               $el.replaceWith( $el.html() );
+       } );
 
-       return $(this)
-               // Ok, so here's the story on this selector.
-               // In IE 6/7, searching for 'msg' turns up the 'html:msg', but searching for 'html:msg' does not.
-               // In later IE and other browsers, searching for 'html:msg' turns up the 'html:msg', but searching for 'msg' does not.
-               // So searching for both 'msg' and 'html:msg' seems to get the job done.
-               // This feels pretty icky, though.
-               .find( 'msg,html\\:msg' )
-                       .each( function () {
-                               var $el = $(this);
-                               var msgText = msg( $el.attr( 'key' ) );
+       // Attributes
+       // Note: there's no way to prevent escaping of values being injected into attributes, this is
+       // on purpose, not a design flaw.
+       $.each( attributes, function ( i, attr ) {
+               var msgAttr = attr + '-msg';
+               $target.find( '[' + msgAttr + ']' ).each( function () {
+                       var $el = $(this);
+                       $el.attr( attr, msg( options, $el.attr( msgAttr ) ) ).removeAttr( msgAttr );
+               );
+       } );
 
-                               if ( $el.attr( 'raw' ) ) {
-                                       $el.html(msgText);
-                               } else {
-                                       $el.text(msgText);
-                               }
-                               
-                               $el
-                                       .replaceWith( $el.html() );
-                       } )
-                       .end()
-               .find( '[title-msg]' )
-                       .each( function () {
-                               var $el = $(this);
-                               $el
-                                       .attr( 'title', msg( $el.attr( 'title-msg' ) ) )
-                                       .removeAttr( 'title-msg' );
-                       } )
-                       .end()
-               .find( '[alt-msg]' )
-                       .each( function () {
-                               var $el = $(this);
-                               $el
-                                       .attr( 'alt', msg( $el.attr( 'alt-msg' ) ) )
-                                       .removeAttr( 'alt-msg' );
-                       } )
-                       .end();
+       return $target;
 };
 
 // Let IE know about the msg tag before it's used...
index 5684a44..257b224 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * QUnit v1.8.0 - A JavaScript Unit Testing Framework
+ * QUnit v1.9.0 - A JavaScript Unit Testing Framework
  *
  * http://docs.jquery.com/QUnit
  *
        line-height: 1em;
        font-weight: normal;
 
-       border-radius: 15px 15px 0 0;
-       -moz-border-radius: 15px 15px 0 0;
-       -webkit-border-top-right-radius: 15px;
-       -webkit-border-top-left-radius: 15px;
+       border-radius: 5px 5px 0 0;
+       -moz-border-radius: 5px 5px 0 0;
+       -webkit-border-top-right-radius: 5px;
+       -webkit-border-top-left-radius: 5px;
 }
 
 #qunit-header a {
@@ -54,9 +54,9 @@
        color: #fff;
 }
 
-#qunit-header label {
+#qunit-testrunner-toolbar label {
        display: inline-block;
-       padding-left: 0.5em;
+       padding: 0 .5em 0 .1em;
 }
 
 #qunit-banner {
 
        background-color: #fff;
 
-       border-radius: 15px;
-       -moz-border-radius: 15px;
-       -webkit-border-radius: 15px;
-
-       box-shadow: inset 0px 2px 13px #999;
-       -moz-box-shadow: inset 0px 2px 13px #999;
-       -webkit-box-shadow: inset 0px 2px 13px #999;
+       border-radius: 5px;
+       -moz-border-radius: 5px;
+       -webkit-border-radius: 5px;
 }
 
 #qunit-tests table {
 #qunit-tests b.failed                       { color: #710909; }
 
 #qunit-tests li li {
-       margin: 0.5em;
-       padding: 0.4em 0.5em 0.4em 0.5em;
+       padding: 5px;
        background-color: #fff;
        border-bottom: none;
        list-style-position: inside;
 /*** Passing Styles */
 
 #qunit-tests li li.pass {
-       color: #5E740B;
+       color: #3c510c;
        background-color: #fff;
-       border-left: 26px solid #C6E746;
+       border-left: 10px solid #C6E746;
 }
 
 #qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
 #qunit-tests li li.fail {
        color: #710909;
        background-color: #fff;
-       border-left: 26px solid #EE5757;
+       border-left: 10px solid #EE5757;
        white-space: pre;
 }
 
 #qunit-tests > li:last-child {
-       border-radius: 0 0 15px 15px;
-       -moz-border-radius: 0 0 15px 15px;
-       -webkit-border-bottom-right-radius: 15px;
-       -webkit-border-bottom-left-radius: 15px;
+       border-radius: 0 0 5px 5px;
+       -moz-border-radius: 0 0 5px 5px;
+       -webkit-border-bottom-right-radius: 5px;
+       -webkit-border-bottom-left-radius: 5px;
 }
 
 #qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
index c1570c2..9efedcb 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * QUnit v1.8.0 - A JavaScript Unit Testing Framework
+ * QUnit v1.9.0 - A JavaScript Unit Testing Framework
  *
  * http://docs.jquery.com/QUnit
  *
@@ -403,6 +403,8 @@ QUnit = {
 QUnit.assert = {
        /**
         * Asserts rough true-ish result.
+        * @name ok
+        * @function
         * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
         */
        ok: function( result, msg ) {
@@ -437,36 +439,59 @@ QUnit.assert = {
        /**
         * Assert that the first two arguments are equal, with an optional message.
         * Prints out both actual and expected values.
+        * @name equal
+        * @function
         * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
         */
        equal: function( actual, expected, message ) {
                QUnit.push( expected == actual, actual, expected, message );
        },
 
+       /**
+        * @name notEqual
+        * @function
+        */
        notEqual: function( actual, expected, message ) {
                QUnit.push( expected != actual, actual, expected, message );
        },
 
+       /**
+        * @name deepEqual
+        * @function
+        */
        deepEqual: function( actual, expected, message ) {
                QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
        },
 
+       /**
+        * @name notDeepEqual
+        * @function
+        */
        notDeepEqual: function( actual, expected, message ) {
                QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
        },
 
+       /**
+        * @name strictEqual
+        * @function
+        */
        strictEqual: function( actual, expected, message ) {
                QUnit.push( expected === actual, actual, expected, message );
        },
 
+       /**
+        * @name notStrictEqual
+        * @function
+        */
        notStrictEqual: function( actual, expected, message ) {
                QUnit.push( expected !== actual, actual, expected, message );
        },
 
-       raises: function( block, expected, message ) {
+       throws: function( block, expected, message ) {
                var actual,
                        ok = false;
 
+               // 'expected' is optional
                if ( typeof expected === "string" ) {
                        message = expected;
                        expected = null;
@@ -494,18 +519,29 @@ QUnit.assert = {
                        } else if ( expected.call( {}, actual ) === true ) {
                                ok = true;
                        }
-               }
 
-               QUnit.push( ok, actual, null, message );
+                       QUnit.push( ok, actual, null, message );
+               } else {
+                       QUnit.pushFailure( message, null, 'No exception was thrown.' );
+               }
        }
 };
 
-// @deprecated: Kept assertion helpers in root for backwards compatibility
+/**
+ * @deprecate since 1.8.0
+ * Kept assertion helpers in root for backwards compatibility
+ */
 extend( QUnit, QUnit.assert );
 
 /**
- * @deprecated: Kept for backwards compatibility
- * next step: remove entirely
+ * @deprecated since 1.9.0
+ * Kept global "raises()" for backwards compatibility
+ */
+QUnit.raises = QUnit.assert.throws;
+
+/**
+ * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
+ * Kept to avoid TypeErrors for undefined methods.
  */
 QUnit.equals = function() {
        QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
@@ -549,7 +585,20 @@ config = {
        // when enabled, all tests must call expect()
        requireExpects: false,
 
-       urlConfig: [ "noglobals", "notrycatch" ],
+       // add checkboxes that are persisted in the query-string
+       // when enabled, the id is set to `true` as a `QUnit.config` property
+       urlConfig: [
+               {
+                       id: "noglobals",
+                       label: "Check for Globals",
+                       tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
+               },
+               {
+                       id: "notrycatch",
+                       label: "No try-catch",
+                       tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
+               }
+       ],
 
        // logging callback queues
        begin: [],
@@ -770,7 +819,7 @@ extend( QUnit, {
                });
        },
 
-       pushFailure: function( message, source ) {
+       pushFailure: function( message, source, actual ) {
                if ( !config.current ) {
                        throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
                }
@@ -781,15 +830,23 @@ extend( QUnit, {
                                message: message
                        };
 
-               message = escapeInnerText(message ) || "error";
+               message = escapeInnerText( message ) || "error";
                message = "<span class='test-message'>" + message + "</span>";
                output = message;
 
+               output += "<table>";
+
+               if ( actual ) {
+                       output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeInnerText( actual ) + "</pre></td></tr>";
+               }
+
                if ( source ) {
                        details.source = source;
-                       output += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeInnerText( source ) + "</pre></td></tr></table>";
+                       output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeInnerText( source ) + "</pre></td></tr>";
                }
 
+               output += "</table>";
+
                runLoggingCallbacks( "log", QUnit, details );
 
                config.current.assertions.push({
@@ -859,7 +916,7 @@ QUnit.load = function() {
        runLoggingCallbacks( "begin", QUnit, {} );
 
        // Initialize the config, saving the execution queue
-       var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
+       var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes,
                urlConfigHtml = "",
                oldconfig = extend( {}, config );
 
@@ -872,8 +929,15 @@ QUnit.load = function() {
 
        for ( i = 0; i < len; i++ ) {
                val = config.urlConfig[i];
-               config[val] = QUnit.urlParams[val];
-               urlConfigHtml += "<label><input name='" + val + "' type='checkbox'" + ( config[val] ? " checked='checked'" : "" ) + ">" + val + "</label>";
+               if ( typeof val === "string" ) {
+                       val = {
+                               id: val,
+                               label: val,
+                               tooltip: "[no tooltip available]"
+                       };
+               }
+               config[ val.id ] = QUnit.urlParams[ val.id ];
+               urlConfigHtml += "<input id='qunit-urlconfig-" + val.id + "' name='" + val.id + "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) + " title='" + val.tooltip + "'><label for='qunit-urlconfig-" + val.id + "' title='" + val.tooltip + "'>" + val.label + "</label>";
        }
 
        // `userAgent` initialized at top of scope
@@ -885,12 +949,7 @@ QUnit.load = function() {
        // `banner` initialized at top of scope
        banner = id( "qunit-header" );
        if ( banner ) {
-               banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined }) + "'>" + banner.innerHTML + "</a> " + urlConfigHtml;
-               addEvent( banner, "change", function( event ) {
-                       var params = {};
-                       params[ event.target.name ] = event.target.checked ? true : undefined;
-                       window.location = QUnit.url( params );
-               });
+               banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
        }
 
        // `toolbar` initialized at top of scope
@@ -931,8 +990,18 @@ QUnit.load = function() {
                // `label` initialized at top of scope
                label = document.createElement( "label" );
                label.setAttribute( "for", "qunit-filter-pass" );
+               label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." );
                label.innerHTML = "Hide passed tests";
                toolbar.appendChild( label );
+
+               urlConfigCheckboxes = document.createElement( 'span' );
+               urlConfigCheckboxes.innerHTML = urlConfigHtml;
+               addEvent( urlConfigCheckboxes, "change", function( event ) {
+                       var params = {};
+                       params[ event.target.name ] = event.target.checked ? true : undefined;
+                       window.location = QUnit.url( params );
+               });
+               toolbar.appendChild( urlConfigCheckboxes );
        }
 
        // `main` initialized at top of scope
@@ -1051,14 +1120,14 @@ function done() {
 function validTest( test ) {
        var include,
                filter = config.filter && config.filter.toLowerCase(),
-               module = config.module,
+               module = config.module && config.module.toLowerCase(),
                fullName = (test.module + ": " + test.testName).toLowerCase();
 
        if ( config.testNumber ) {
                return test.testNumber === config.testNumber;
        }
 
-       if ( module && test.module !== module ) {
+       if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
                return false;
        }
 
index 0edc8ee..f28f401 100644 (file)
                return ( (b < a) ? false : ((b > a) ? true : 0) );
        }
 
-       function checkSorting( array1, array2, sortList ) {
-               var col, fn, ret;
-               for ( var i = 0, len = sortList.length; i < len; i++ ) {
-                       col = sortList[i][0];
-                       fn = ( sortList[i][1] ) ? sortTextDesc : sortText;
-                       ret = fn.call( this, array1[col], array2[col] );
-                       if ( ret !== 0 ) {
-                               return ret;
-                       }
+       function multisort( table, sortList, cache ) {
+               var sortFn = [];
+               var len = sortList.length;
+               for ( var i = 0; i < len; i++ ) {
+                       sortFn[i] = ( sortList[i][1] ) ? sortTextDesc : sortText;
                }
-               return ret;
-       }
-
-       // Merge sort algorithm
-       // Based on http://en.literateprograms.org/Merge_sort_(JavaScript)
-       function mergeSortHelper( array, begin, beginRight, end, sortList ) {
-               for ( ; begin < beginRight; ++begin ) {
-                       if ( checkSorting( array[begin], array[beginRight], sortList ) ) {
-                               var v = array[begin];
-                               array[begin] = array[beginRight];
-                               var begin2 = beginRight;
-                               while ( begin2 + 1 < end && checkSorting( v, array[begin2 + 1], sortList ) ) {
-                                       var tmp = array[begin2];
-                                       array[begin2] = array[begin2 + 1];
-                                       array[begin2 + 1] = tmp;
-                                       ++begin2;
+               cache.normalized.sort( function ( array1, array2 ) {
+                       var col, ret;
+                       for ( var i = 0; i < len; i++ ) {
+                               col = sortList[i][0];
+                               ret = sortFn[i].call( this, array1[col], array2[col] );
+                               if ( ret !== 0 ) {
+                                       return ret;
                                }
-                               array[begin2] = v;
                        }
-               }
-       }
-
-       function mergeSort(array, begin, end, sortList) {
-               var size = end - begin;
-               if ( size < 2 ) {
-                       return;
-               }
-
-               var beginRight = begin + Math.floor(size / 2);
-
-               mergeSort( array, begin, beginRight, sortList );
-               mergeSort( array, beginRight, end, sortList );
-               mergeSortHelper( array, begin, beginRight, end, sortList );
-       }
-
-       function multisort( table, sortList, cache ) {
-               var i = sortList.length;
-               mergeSort( cache.normalized, 0, cache.normalized.length, sortList );
-
+                       // Fall back to index number column to ensure stable sort
+                       return sortText.call( this, array1[array1.length - 1], array2[array2.length - 1] );
+               } );
                return cache;
        }
 
index 14b845d..bd07cd0 100644 (file)
@@ -1,42 +1,74 @@
-( function ( $, mw ) {
-       var isReady, toolbar, currentFocused;
+( function ( mw, $ ) {
+       var isReady, toolbar, currentFocused, queue, $toolbar, slice;
 
        isReady = false;
+       queue = [];
+       $toolbar = false;
+       slice = Array.prototype.slice;
+
+       /**
+        * Internal helper that does the actual insertion
+        * of the button into the toolbar.
+        * See mw.toolbar.addButton for parameter documentation.
+        */
+       function insertButton( b /* imageFile */, speedTip, tagOpen, tagClose, sampleText, imageId, selectText ) {
+               // Backwards compatibility
+               if ( typeof b !== 'object' ) {
+                       b = {
+                               imageFile: b,
+                               speedTip: speedTip,
+                               tagOpen: tagOpen,
+                               tagClose: tagClose,
+                               sampleText: sampleText,
+                               imageId: imageId,
+                               selectText: selectText
+                       };
+               }
+               var $image = $('<img>', {
+                       width : 23,
+                       height: 22,
+                       src   : b.imageFile,
+                       alt   : b.speedTip,
+                       title : b.speedTip,
+                       id    : b.imageId || undefined,
+                       'class': 'mw-toolbar-editbutton'
+               } ).click( function () {
+                       toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText, b.selectText );
+                       return false;
+               } );
+
+               $toolbar.append( $image );
+               return true;
+       }
 
        toolbar = {
-               $toolbar: false,
-               buttons: [],
                /**
-                * If you want to add buttons, use
-                * mw.toolbar.addButton( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId, selectText );
+                * Add buttons to the toolbar.
+                * Takes care of race conditions and time-based dependencies
+                * by placing buttons in a queue if this method is called before
+                * the toolbar is created.
+                * @param {Object} button: Object with the following properties:
+                * - imageFile
+                * - speedTip
+                * - tagOpen
+                * - tagClose
+                * - sampleText
+                * - imageId
+                * - selectText
+                * For compatiblity, passing the above as separate arguments
+                * (in the listed order) is also supported.
                 */
                addButton: function () {
                        if ( isReady ) {
-                               toolbar.insertButton.apply( toolbar, arguments );
+                               insertButton.apply( toolbar, arguments );
                        } else {
-                               toolbar.buttons.push( [].slice.call( arguments ) );
-                       }       
-               },
-               insertButton: function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId, selectText ) {
-                       var image = $('<img>', {
-                               width : 23,
-                               height: 22,
-                               src   : imageFile,
-                               alt   : speedTip,
-                               title : speedTip,
-                               id    : imageId || '',
-                               'class': 'mw-toolbar-editbutton'
-                       } ).click( function () {
-                               mw.toolbar.insertTags( tagOpen, tagClose, sampleText, selectText );
-                               return false;
-                       } );
-
-                       toolbar.$toolbar.append( image );
-                       return true;
+                               // Convert arguments list to array
+                               queue.push( slice.call( arguments ) );
+                       }
                },
 
                /**
-                * apply tagOpen/tagClose to selection in textarea,
+                * Apply tagOpen/tagClose to selection in textarea,
                 * use sampleText instead of selection if there is none.
                 */
                insertTags: function ( tagOpen, tagClose, sampleText, selectText ) {
@@ -51,7 +83,8 @@
                        }
                },
 
-               // For backwards compatibility
+               // For backwards compatibility,
+               // Called from EditPage.php, maybe in other places as well.
                init: function () {}
        };
 
        window.addButton = toolbar.addButton;
        window.insertTags = toolbar.insertTags;
 
-       // Explose publicly
+       // Explose API publicly
        mw.toolbar = toolbar;
 
        $( document ).ready( function () {
-               var buttons, i, c, iframe;
+               var buttons, i, b, iframe;
 
                // currentFocus is used to determine where to insert tags
                currentFocused = $( '#wpTextbox1' );
 
-               // Populate the selector cache for $toolbar 
-               toolbar.$toolbar = $( '#toolbar' );
+               // Populate the selector cache for $toolbar
+               $toolbar = $( '#toolbar' );
 
                // Legacy: Merge buttons from mwCustomEditButtons
-               buttons = [].concat( toolbar.buttons, window.mwCustomEditButtons );
+               buttons = [].concat( queue, window.mwCustomEditButtons );
+               // Clear queue
+               queue.length = 0;
                for ( i = 0; i < buttons.length; i++ ) {
-                       if ( $.isArray( buttons[i] ) ) {
-                               // Passes our button array as arguments
-                               toolbar.insertButton.apply( toolbar, buttons[i] );
+                       b = buttons[i];
+                       if ( $.isArray( b ) ) {
+                               // Forwarded arguments array from mw.toolbar.addButton
+                               insertButton.apply( toolbar, b );
                        } else {
-                               // Legacy mwCustomEditButtons is an object
-                               c = buttons[i];
-                               toolbar.insertButton( c.imageFile, c.speedTip, c.tagOpen, 
-                                       c.tagClose, c.sampleText, c.imageId, c.selectText );
+                               // Raw object from legacy mwCustomEditButtons
+                               insertButton( b );
                        }
                }
 
                }
        });
 
-}( jQuery, mediaWiki ) );
+}( mediaWiki, jQuery ) );
index b871ac7..95e5e80 100644 (file)
                 * @constructor
                 * @param {Object|String} URI string, or an Object with appropriate properties (especially another URI object to clone).
                 * Object must have non-blank 'protocol', 'host', and 'path' properties.
+                * This parameter is optional. If omitted (or set to undefined, null or empty string), then an object will be created
+                * for the default uri of this constructor (e.g. document.location for mw.Uri in MediaWiki core).
                 * @param {Object|Boolean} Object with options, or (backwards compatibility) a boolean for strictMode
                 * - strictMode {Boolean} Trigger strict mode parsing of the url. Default: false
                 * - overrideKeys {Boolean} Wether to let duplicate query parameters override eachother (true) or automagically
                                overrideKeys: false
                        }, options );
 
-                       if ( uri !== undefined && uri !== null || uri !== '' ) {
+                       if ( uri !== undefined && uri !== null && uri !== '' ) {
                                if ( typeof uri === 'string' ) {
                                        this.parse( uri, options );
                                } else if ( typeof uri === 'object' ) {
                                                this.query = {};
                                        }
                                }
+                       } else {
+                               // If we didn't get a URI in the constructor, use the default one.
+                               return defaultUri.clone();
                        }
 
                        // protocol-relative URLs
index deb7795..41a5078 100644 (file)
@@ -852,8 +852,9 @@ var mw = ( function ( $, undefined ) {
                                                registry[module].state = 'loading';
                                                nestedAddScript( script, markModuleReady, registry[module].async, 0 );
                                        } else if ( $.isFunction( script ) ) {
+                                               registry[module].state = 'ready';
                                                script( $ );
-                                               markModuleReady();
+                                               handlePending( module );
                                        }
                                } catch ( e ) {
                                        // This needs to NOT use mw.log because these errors are common in production mode
@@ -880,15 +881,6 @@ var mw = ( function ( $, undefined ) {
                                // Allow calling by single module name
                                if ( typeof dependencies === 'string' ) {
                                        dependencies = [dependencies];
-                                       if ( registry[dependencies[0]] !== undefined ) {
-                                               // Cache repetitively accessed deep level object member
-                                               regItemDeps = registry[dependencies[0]].dependencies;
-                                               // Cache to avoid looped access to length property
-                                               regItemDepLen = regItemDeps.length;
-                                               for ( n = 0; n < regItemDepLen; n += 1 ) {
-                                                       dependencies[dependencies.length] = regItemDeps[n];
-                                               }
-                                       }
                                }
 
                                // Add ready and error callbacks if they were given
@@ -1334,7 +1326,7 @@ var mw = ( function ( $, undefined ) {
                                                }
                                        }
 
-                                       if (filtered.length === 0) {
+                                       if ( filtered.length === 0 ) {
                                                return;
                                        }
                                        // Resolve entire dependency map
index 7a15e29..8c6e90c 100644 (file)
@@ -12,6 +12,9 @@
                /* Private Members */
 
                var that = this;
+               var api = new mw.Api();
+               var groupsDeferred;
+               var rightsDeferred;
 
                /* Public Members */
 
                 *
                 * @return Mixed: User name string or null if users is anonymous
                 */
-               this.name = function() {
+               this.getName = function () {
                        return mw.config.get( 'wgUserName' );
                };
 
+               /**
+                * @deprecated since 1.20 use mw.user.getName() instead
+                */
+               this.name = function () {
+                       return this.getName();
+               };
+
                /**
                 * Checks if the current user is anonymous.
                 *
                 * @return Boolean
                 */
-               this.anonymous = function() {
-                       return that.name() ? false : true;
+               this.isAnon = function () {
+                       return that.getName() === null;
+               };
+
+               /**
+                * @deprecated since 1.20 use mw.user.isAnon() instead
+                */
+               this.anonymous = function () {
+                       return that.isAnon();
                };
 
                /**
                 * @return String: User name or random session ID
                 */
                this.id = function() {
-                       var name = that.name();
+                       var name = that.getName();
                        if ( name ) {
                                return name;
                        }
                        }
                        return bucket;
                };
+
+               /**
+                * Gets the current user's groups.
+                */
+               this.getGroups = function ( callback ) {
+                       if ( groupsDeferred ) {
+                               groupsDeferred.always( callback );
+                               return;
+                       }
+
+                       groupsDeferred = $.Deferred();
+                       groupsDeferred.always( callback );
+                       api.get( {
+                               action: 'query',
+                               meta: 'userinfo',
+                               uiprop: 'groups'
+                       } ).done( function ( data ) {
+                               if ( data.query && data.query.userinfo && data.query.userinfo.groups ) {
+                                       groupsDeferred.resolve( data.query.userinfo.groups );
+                               } else {
+                                       groupsDeferred.reject( [] );
+                               }
+                       } ).fail( function ( data ) {
+                                       groupsDeferred.reject( [] );
+                       } );
+               };
+
+               /**
+                * Gets the current user's rights.
+                */
+               this.getRights = function ( callback ) {
+                       if ( rightsDeferred ) {
+                               rightsDeferred.always( callback );
+                               return;
+                       }
+
+                       rightsDeferred = $.Deferred();
+                       rightsDeferred.always( callback );
+                       api.get( {
+                               action: 'query',
+                               meta: 'userinfo',
+                               uiprop: 'rights'
+                       } ).done( function ( data ) {
+                               if ( data.query && data.query.userinfo && data.query.userinfo.rights ) {
+                                       rightsDeferred.resolve( data.query.userinfo.rights );
+                               } else {
+                                       rightsDeferred.reject( [] );
+                               }
+                       } ).fail( function ( data ) {
+                               rightsDeferred.reject( [] );
+                       } );
+               };
        }
 
        // Extend the skeleton mw.user from mediawiki.js
index 1656524..6e87786 100644 (file)
@@ -92,7 +92,7 @@ class ModernTemplate extends MonoBookTemplate {
                <div id="contentSub"<?php $this->html('userlangattributes') ?>><?php $this->html('subtitle') ?></div>
 
                <?php if($this->data['undelete']) { ?><div id="contentSub2"><?php     $this->html('undelete') ?></div><?php } ?>
-               <?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto') ?> <a href="#mw_portlets"><?php $this->msg('jumptonavigation') ?></a><a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div><?php } ?>
+               <?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto') ?> <a href="#mw_portlets"><?php $this->msg('jumptonavigation') ?></a><?php $this->msg( 'comma-separator' ) ?><a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div><?php } ?>
 
                <?php $this->html('bodytext') ?>
                <div class='mw_clear'></div>
index 8282fb3..5c7ca14 100644 (file)
@@ -93,7 +93,7 @@ class MonoBookTemplate extends BaseTemplate {
 <?php } ?><?php if($this->data['newtalk'] ) { ?>
                <div class="usermessage"><?php $this->html('newtalk')  ?></div>
 <?php } ?><?php if($this->data['showjumplinks']) { ?>
-               <div id="jump-to-nav" class="mw-jump"><?php $this->msg('jumpto') ?> <a href="#column-one"><?php $this->msg('jumptonavigation') ?></a><a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div>
+               <div id="jump-to-nav" class="mw-jump"><?php $this->msg('jumpto') ?> <a href="#column-one"><?php $this->msg('jumptonavigation') ?></a><?php $this->msg( 'comma-separator' ) ?><a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div>
 <?php } ?>
                <!-- start content -->
 <?php $this->html('bodytext') ?>
index be07ba8..6045ed6 100644 (file)
@@ -190,7 +190,8 @@ class VectorTemplate extends BaseTemplate {
                                <?php if ( $this->data['showjumplinks'] ): ?>
                                <!-- jumpto -->
                                <div id="jump-to-nav" class="mw-jump">
-                                       <?php $this->msg( 'jumpto' ) ?> <a href="#mw-head"><?php $this->msg( 'jumptonavigation' ) ?></a>,
+                                       <?php $this->msg( 'jumpto' ) ?>
+                                       <a href="#mw-head"><?php $this->msg( 'jumptonavigation' ) ?></a><?php $this->msg( 'comma-separator' ) ?>
                                        <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
                                </div>
                                <!-- /jumpto -->
index 903a4f7..02fd29f 100644 (file)
@@ -198,12 +198,6 @@ pre, .mw-code {
        border: 1px dashed #2f6fab;
        color: black;
        background-color: #f9f9f9;
-       /* Handle overflow (bug 260) */
-       overflow: auto;
-       /* IE 7 is the first IE to support overflow but got it wrong */
-       /* IE 8+ is fine */
-       *padding-bottom: 21px;
-       *overflow-y: hidden;
 }
 
 /* Tables */
index 1b839b5..8c114f0 100644 (file)
@@ -828,12 +828,13 @@ h1:lang(hi),
 h1:lang(kn),
 h1:lang(ml),
 h1:lang(mr),
+h1:lang(my),
 h1:lang(or),
 h1:lang(pa),
 h1:lang(sa),
 h1:lang(ta),
 h1:lang(te) {
-       line-height: 1.5em !important;
+       line-height: 1.6em !important;
 }
 h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
 h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
@@ -844,6 +845,7 @@ h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
 h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
 h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
 h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
+h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
 h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
 h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
 h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
index 6d324e4..dd205f6 100644 (file)
@@ -9366,6 +9366,17 @@ wgUseDynamicDates=true
 </p>
 !! end
 
+!! test
+formatdate parser function, with default format and on a page of which the content language is always English and different from the wiki content language
+!! options
+language=nl title=[[MediaWiki:Common.css]]
+!! input
+{{#formatdate:2009-03-24|dmy}}
+!! result
+<p><span class="mw-formatted-date" title="2009-03-24">24 March 2009</span>
+</p>
+!! end
+
 #
 #
 #
index 8f18d6e..c96eba0 100644 (file)
@@ -400,16 +400,16 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @param boolean $named If the keys should match
         */
        protected function assertArrayEquals( array $expected, array $actual, $ordered = false, $named = false ) {
-               if ( !$named ) {
-                       $expected = array_values( $expected );
-                       $actual = array_values( $actual );
-               }
-
                if ( !$ordered ) {
                        asort( $expected );
                        asort( $actual );
                }
 
+               if ( !$named ) {
+                       $expected = array_values( $expected );
+                       $actual = array_values( $actual );
+               }
+
                call_user_func_array(
                        array( $this, 'assertEquals' ),
                        array_merge( array( $expected, $actual ), array_slice( func_get_args(), 4 ) )
index f81bb6d..3b044ef 100644 (file)
@@ -122,7 +122,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                $data = $this->doApiRequest( array(
                        'action' => 'query',
                        'titles' => 'Main Page',
-                       'intoken' => 'edit|delete|protect|move|block|unblock',
+                       'intoken' => 'edit|delete|protect|move|block|unblock|watch',
                        'prop' => 'info' ), $session, false, $user->user );
                return $data;
        }
index d2c742a..d2e9815 100644 (file)
@@ -13,26 +13,26 @@ class ApiWatchTest extends ApiTestCase {
        }
 
        function getTokens() {
-               return $this->getTokenList( self::$users['sysop'] );
+               $data = $this->getTokenList( self::$users['sysop'] );
+
+               $keys = array_keys( $data[0]['query']['pages'] );
+               $key = array_pop( $keys );
+               $pageinfo = $data[0]['query']['pages'][$key];
+
+               return $pageinfo;
        }
 
        /**
-        * @group Broken
         */
        function testWatchEdit() {
-
-               $data = $this->getTokens();
-
-               $keys = array_keys( $data[0]['query']['pages'] );
-               $key = array_pop( $keys );
-               $pageinfo = $data[0]['query']['pages'][$key];
+               $pageinfo = $this->getTokens();
 
                $data = $this->doApiRequest( array(
                        'action' => 'edit',
                        'title' => 'UTPage',
                        'text' => 'new text',
                        'token' => $pageinfo['edittoken'],
-                       'watchlist' => 'watch' ), $data );
+                       'watchlist' => 'watch' ) );
                $this->assertArrayHasKey( 'edit', $data[0] );
                $this->assertArrayHasKey( 'result', $data[0]['edit'] );
                $this->assertEquals( 'Success', $data[0]['edit']['result'] );
@@ -42,13 +42,14 @@ class ApiWatchTest extends ApiTestCase {
 
        /**
         * @depends testWatchEdit
-        * @group Broken
         */
        function testWatchClear() {
 
+               $pageinfo = $this->getTokens();
+
                $data = $this->doApiRequest( array(
                        'action' => 'query',
-                       'list' => 'watchlist' ), $data );
+                       'list' => 'watchlist' ) );
 
                if ( isset( $data[0]['query']['watchlist'] ) ) {
                        $wl = $data[0]['query']['watchlist'];
@@ -57,7 +58,8 @@ class ApiWatchTest extends ApiTestCase {
                                $data = $this->doApiRequest( array(
                                        'action' => 'watch',
                                        'title' => $page['title'],
-                                       'unwatch' => true ), $data );
+                                       'unwatch' => true,
+                                       'token' => $pageinfo['watchtoken'] ) );
                        }
                }
                $data = $this->doApiRequest( array(
@@ -71,22 +73,17 @@ class ApiWatchTest extends ApiTestCase {
        }
 
        /**
-        * @group Broken
         */
        function testWatchProtect() {
 
-               $data = $this->getTokens();
-
-               $keys = array_keys( $data[0]['query']['pages'] );
-               $key = array_pop( $keys );
-               $pageinfo = $data[0]['query']['pages'][$key];
+               $pageinfo = $this->getTokens();
 
                $data = $this->doApiRequest( array(
                        'action' => 'protect',
                        'token' => $pageinfo['protecttoken'],
                        'title' => 'UTPage',
                        'protections' => 'edit=sysop',
-                       'watchlist' => 'unwatch' ), $data );
+                       'watchlist' => 'unwatch' ) );
 
                $this->assertArrayHasKey( 'protect', $data[0] );
                $this->assertArrayHasKey( 'protections', $data[0]['protect'] );
@@ -95,21 +92,20 @@ class ApiWatchTest extends ApiTestCase {
        }
 
        /**
-        * @group Broken
         */
        function testGetRollbackToken() {
 
-               $data = $this->getTokens();
+               $pageinfo = $this->getTokens();
 
                if ( !Title::newFromText( 'UTPage' )->exists() ) {
-                       $this->markTestIncomplete( "The article [[UTPage]] does not exist" );
+                       $this->markTestSkipped( "The article [[UTPage]] does not exist" ); //TODO: just create it?
                }
 
                $data = $this->doApiRequest( array(
                        'action' => 'query',
                        'prop' => 'revisions',
                        'titles' => 'UTPage',
-                       'rvtoken' => 'rollback' ), $data );
+                       'rvtoken' => 'rollback' ) );
 
                $this->assertArrayHasKey( 'query', $data[0] );
                $this->assertArrayHasKey( 'pages', $data[0]['query'] );
@@ -117,7 +113,7 @@ class ApiWatchTest extends ApiTestCase {
                $key = array_pop( $keys );
 
                if ( isset( $data[0]['query']['pages'][$key]['missing'] ) ) {
-                       $this->markTestIncomplete( "Target page (UTPage) doesn't exist" );
+                       $this->markTestSkipped( "Target page (UTPage) doesn't exist" );
                }
 
                $this->assertArrayHasKey( 'pageid', $data[0]['query']['pages'][$key] );
@@ -129,21 +125,27 @@ class ApiWatchTest extends ApiTestCase {
        }
 
        /**
-        * @depends testGetRollbackToken
         * @group Broken
+        * Broken because there is currently no revision info in the $pageinfo
+        *
+        * @depends testGetRollbackToken
         */
        function testWatchRollback( $data ) {
                $keys = array_keys( $data[0]['query']['pages'] );
                $key = array_pop( $keys );
-               $pageinfo = $data[0]['query']['pages'][$key]['revisions'][0];
+               $pageinfo = $data[0]['query']['pages'][$key];
+               $revinfo = $pageinfo['revisions'][0];
 
                try {
                        $data = $this->doApiRequest( array(
                                'action' => 'rollback',
                                'title' => 'UTPage',
-                               'user' => $pageinfo['user'],
+                               'user' => $revinfo['user'],
                                'token' => $pageinfo['rollbacktoken'],
-                               'watchlist' => 'watch' ), $data );
+                               'watchlist' => 'watch' ) );
+
+                       $this->assertArrayHasKey( 'rollback', $data[0] );
+                       $this->assertArrayHasKey( 'title', $data[0]['rollback'] );
                } catch( UsageException $ue ) {
                        if( $ue->getCodeString() == 'onlyauthor' ) {
                                $this->markTestIncomplete( "Only one author to 'UTPage', cannot test rollback" );
@@ -151,32 +153,23 @@ class ApiWatchTest extends ApiTestCase {
                                $this->fail( "Received error '" . $ue->getCodeString() . "'" );
                        }
                }
-
-               $this->assertArrayHasKey( 'rollback', $data[0] );
-               $this->assertArrayHasKey( 'title', $data[0]['rollback'] );
        }
 
        /**
-        * @group Broken
         */
        function testWatchDelete() {
-
-               $data = $this->getTokens();
-
-               $keys = array_keys( $data[0]['query']['pages'] );
-               $key = array_pop( $keys );
-               $pageinfo = $data[0]['query']['pages'][$key];
+               $pageinfo = $this->getTokens();
 
                $data = $this->doApiRequest( array(
                        'action' => 'delete',
                        'token' => $pageinfo['deletetoken'],
-                       'title' => 'UTPage' ), $data );
+                       'title' => 'UTPage' ) );
                $this->assertArrayHasKey( 'delete', $data[0] );
                $this->assertArrayHasKey( 'title', $data[0]['delete'] );
 
                $data = $this->doApiRequest( array(
                        'action' => 'query',
-                       'list' => 'watchlist' ), $data );
+                       'list' => 'watchlist' ) );
 
                $this->markTestIncomplete( 'This test needs to verify the deleted article was added to the users watchlist' );
        }
diff --git a/tests/phpunit/includes/libs/CSSJanusTest.php b/tests/phpunit/includes/libs/CSSJanusTest.php
new file mode 100644 (file)
index 0000000..54f6607
--- /dev/null
@@ -0,0 +1,560 @@
+<?php
+/**
+ * Based on the test suite of the original Python
+ * CSSJanus libary:
+ * http://code.google.com/p/cssjanus/source/browse/trunk/cssjanus_test.py
+ * Ported to PHP for ResourceLoader and has been extended since.
+ */
+class CSSJanusTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider provideTransformCases
+        */
+       function testTransform( $cssA, $cssB = null ) {
+
+               if ( $cssB ) {
+                       $transformedA = CSSJanus::transform( $cssA );
+                       $this->assertEquals( $transformedA, $cssB, 'Test A-B transformation' );
+
+                       $transformedB = CSSJanus::transform( $cssB );
+                       $this->assertEquals( $transformedB, $cssA, 'Test B-A transformation' );
+
+               // If no B version is provided, it means
+               // the output should equal the input.
+               } else {
+                       $transformedA = CSSJanus::transform( $cssA );
+                       $this->assertEquals( $transformedA, $cssA, 'Nothing was flipped' );
+               }
+       }
+
+       /**
+        * @dataProvider provideTransformAdvancedCases
+        */
+       function testTransformAdvanced( $code, $expectedOutput, $options = array() ) {
+               $swapLtrRtlInURL = isset( $options['swapLtrRtlInURL'] ) ? $options['swapLtrRtlInURL'] : false;
+               $swapLeftRightInURL = isset( $options['swapLeftRightInURL'] ) ? $options['swapLeftRightInURL'] : false;
+
+               $flipped = CSSJanus::transform( $code, $swapLtrRtlInURL, $swapLeftRightInURL );
+
+               $this->assertEquals( $expectedOutput, $flipped,
+                       'Test flipping, options: url-ltr-rtl=' . ($swapLtrRtlInURL ? 'true' : 'false')
+                               . ' url-left-right=' . ($swapLeftRightInURL ? 'true' : 'false')
+               );
+       }
+       /**
+        * @dataProvider provideTransformBrokenCases
+        * @group Broken
+        */
+       function testTransformBroken( $code, $expectedOutput ) {
+               $flipped = CSSJanus::transform( $code );
+
+               $this->assertEquals( $expectedOutput, $flipped, 'Test flipping' );
+       }
+
+       /**
+        * These transform cases are tested *in both directions*
+        * No need to declare a principle twice in both directions here.
+        */
+       function provideTransformCases() {
+               return array(
+                       // Property keys
+                       array(
+                               '.foo { left: 0; }',
+                               '.foo { right: 0; }'
+                       ),
+                       // Guard against partial keys
+                       // (CSS currently doesn't have flippable properties
+                       // that contain the direction as part of the key without
+                       // dash separation)
+                       array(
+                               '.foo { alright: 0; }'
+                       ),
+                       array(
+                               '.foo { balleft: 0; }'
+                       ),
+
+                       // Dashed property keys
+                       array(
+                               '.foo { padding-left: 0; }',
+                               '.foo { padding-right: 0; }'
+                       ),
+                       array(
+                               '.foo { margin-left: 0; }',
+                               '.foo { margin-right: 0; }'
+                       ),
+                       array(
+                               '.foo { border-left: 0; }',
+                               '.foo { border-right: 0; }'
+                       ),
+
+                       // Double-dashed property keys
+                       array(
+                               '.foo { border-left-color: red; }',
+                               '.foo { border-right-color: red; }'
+                       ),
+                       array(
+                               // Includes unknown properties?
+                               '.foo { x-left-y: 0; }',
+                               '.foo { x-right-y: 0; }'
+                       ),
+
+                       // Multi-value properties
+                       array(
+                               '.foo { padding: 0; }'
+                       ),
+                       array(
+                               '.foo { padding: 0 1px; }'
+                       ),
+                       array(
+                               '.foo { padding: 0 1px 2px; }'
+                       ),
+                       array(
+                               '.foo { padding: 0 1px 2px 3px; }',
+                               '.foo { padding: 0 3px 2px 1px; }'
+                       ),
+
+                       // Shorthand / Four notation
+                       array(
+                               '.foo { padding: .25em 15px 0pt 0ex; }',
+                               '.foo { padding: .25em 0ex 0pt 15px; }'
+                       ),
+                       array(
+                               '.foo { margin: 1px -4px 3px 2px; }',
+                               '.foo { margin: 1px 2px 3px -4px; }'
+                       ),
+                       array(
+                               '.foo { padding: 0 15px .25em 0; }',
+                               '.foo { padding: 0 0 .25em 15px; }'
+                       ),
+                       array(
+                               '.foo { padding: 1px 4.1grad 3px 2%; }',
+                               '.foo { padding: 1px 2% 3px 4.1grad; }'
+                       ),
+                       array(
+                               '.foo { padding: 1px 2px 3px auto; }',
+                               '.foo { padding: 1px auto 3px 2px; }'
+                       ),
+                       array(
+                               '.foo { padding: 1px inherit 3px auto; }',
+                               '.foo { padding: 1px auto 3px inherit; }'
+                       ),
+                       array(
+                               '.foo { border-radius: .25em 15px 0pt 0ex; }',
+                               '.foo { border-radius: .25em 0ex 0pt 15px; }'
+                       ),
+                       array(
+                               '.foo { x-unknown: a b c d; }'
+                       ),
+                       array(
+                               '.foo barpx 0 2% { opacity: 0; }'
+                       ),
+                       array(
+                               '#settings td p strong'
+                       ),
+                       array(
+                               # Not sure how 4+ values should behave,
+                               # testing to make sure changes are detected
+                               '.foo { x-unknown: 1 2 3 4 5; }',
+                               '.foo { x-unknown: 1 4 3 2 5; }',
+                       ),
+                       array(
+                               '.foo { x-unknown: 1 2 3 4 5 6; }',
+                               '.foo { x-unknown: 1 4 3 2 5 6; }',
+                       ),
+
+                       // Shorthand / Three notation
+                       array(
+                               '.foo { margin: 1em 0 .25em; }'
+                       ),
+                       array(
+                               '.foo { margin:-1.5em 0 -.75em; }'
+                       ),
+
+                       // Shorthand / Two notation
+                       array(
+                               '.foo { padding: 1px 2px; }'
+                       ),
+
+                       // Shorthand / One notation
+                       array(
+                               '.foo { padding: 1px; }'
+                       ),
+
+                       // Direction
+                       // Note: This differs from the Python implementation,
+                       // see also CSSJanus::fixDirection for more info.
+                       array(
+                               '.foo { direction: ltr; }',
+                               '.foo { direction: rtl; }'
+                       ),
+                       array(
+                               '.foo { direction: rtl; }',
+                               '.foo { direction: ltr; }'
+                       ),
+                       array(
+                               'input { direction: ltr; }',
+                               'input { direction: rtl; }'
+                       ),
+                       array(
+                               'input { direction: rtl; }',
+                               'input { direction: ltr; }'
+                       ),
+                       array(
+                               'body { direction: ltr; }',
+                               'body { direction: rtl; }'
+                       ),
+                       array(
+                               '.foo, body, input { direction: ltr; }',
+                               '.foo, body, input { direction: rtl; }'
+                       ),
+                       array(
+                               'body { padding: 10px; direction: ltr; }',
+                               'body { padding: 10px; direction: rtl; }'
+                       ),
+                       array(
+                               'body { direction: ltr } .myClass { direction: ltr }',
+                               'body { direction: rtl } .myClass { direction: rtl }'
+                       ),
+
+                       // Left/right values
+                       array(
+                               '.foo { float: left; }',
+                               '.foo { float: right; }'
+                       ),
+                       array(
+                               '.foo { text-align: left; }',
+                               '.foo { text-align: right; }'
+                       ),
+                       array(
+                               '.foo { -x-unknown: left; }',
+                               '.foo { -x-unknown: right; }'
+                       ),
+                       // Guard against selectors that look flippable
+                       array(
+                               '.column-left { width: 0; }'
+                       ),
+                       array(
+                               'a.left { width: 0; }'
+                       ),
+                       array(
+                               'a.leftification { width: 0; }'
+                       ),
+                       array(
+                               'a.ltr { width: 0; }'
+                       ),
+                       array(
+                               # <div class="a-ltr png">
+                               '.a-ltr.png { width: 0; }'
+                       ),
+                       array(
+                               # <foo-ltr attr="x">
+                               'foo-ltr[attr="x"] { width: 0; }'
+                       ),
+                       array(
+                               'div.left > span.right+span.left { width: 0; }'
+                       ),
+                       array(
+                               '.thisclass .left .myclass { width: 0; }'
+                       ),
+                       array(
+                               '.thisclass .left .myclass #myid { width: 0; }'
+                       ),
+
+                       // Cursor values (east/west)
+                       array(
+                               '.foo { cursor: e-resize; }',
+                               '.foo { cursor: w-resize; }'
+                       ),
+                       array(
+                               '.foo { cursor: se-resize; }',
+                               '.foo { cursor: sw-resize; }'
+                       ),
+                       array(
+                               '.foo { cursor: ne-resize; }',
+                               '.foo { cursor: nw-resize; }'
+                       ),
+
+                       // Background
+                       array(
+                               '.foo { background-position: top left; }',
+                               '.foo { background-position: top right; }'
+                       ),
+                       array(
+                               '.foo { background: url(/foo/bar.png) top left; }',
+                               '.foo { background: url(/foo/bar.png) top right; }'
+                       ),
+                       array(
+                               '.foo { background: url(/foo/bar.png) top left no-repeat; }',
+                               '.foo { background: url(/foo/bar.png) top right no-repeat; }'
+                       ),
+                       array(
+                               '.foo { background: url(/foo/bar.png) no-repeat top left; }',
+                               '.foo { background: url(/foo/bar.png) no-repeat top right; }'
+                       ),
+                       array(
+                               '.foo { background: #fff url(/foo/bar.png) no-repeat top left; }',
+                               '.foo { background: #fff url(/foo/bar.png) no-repeat top right; }'
+                       ),
+                       array(
+                               '.foo { background-position: 100% 40%; }',
+                               '.foo { background-position: 0% 40%; }'
+                       ),
+                       array(
+                               '.foo { background-position: 23% 0; }',
+                               '.foo { background-position: 77% 0; }'
+                       ),
+                       array(
+                               '.foo { background-position: 23% auto; }',
+                               '.foo { background-position: 77% auto; }'
+                       ),
+                       array(
+                               '.foo { background-position-x: 23%; }',
+                               '.foo { background-position-x: 77%; }'
+                       ),
+                       array(
+                               '.foo { background-position-y: 23%; }',
+                               '.foo { background-position-y: 23%; }'
+                       ),
+                       array(
+                               '.foo { background:url(../foo.png) no-repeat 75% 50%; }',
+                               '.foo { background:url(../foo.png) no-repeat 25% 50%; }'
+                       ),
+                       array(
+                               '.foo { background: 10% 20% } .bar { background: 40% 30% }',
+                               '.foo { background: 90% 20% } .bar { background: 60% 30% }'
+                       ),
+
+                       // Multiple rules
+                       array(
+                               'body { direction: rtl; float: right; } .foo { direction: ltr; float: right; }',
+                               'body { direction: ltr; float: left; } .foo { direction: rtl; float: left; }',
+                       ),
+
+                       // Duplicate properties
+                       array(
+                               '.foo { float: left; float: right; float: left; }',
+                               '.foo { float: right; float: left; float: right; }',
+                       ),
+
+                       // Preserve comments
+                       array(
+                               '/* left /* right */left: 10px',
+                               '/* left /* right */right: 10px'
+                       ),
+                       array(
+                               '/*left*//*left*/left: 10px',
+                               '/*left*//*left*/right: 10px'
+                       ),
+                       array(
+                               '/* Going right is cool */ .foo { width: 0 }',
+                       ),
+                       array(
+                               "/* padding-right 1 2 3 4 */\n#test { width: 0}\n/*right*/"
+                       ),
+                       array(
+                               "/** Two line comment\n * left\n \*/\n#test {width: 0}"
+                       ),
+
+                       // @noflip annotation
+                       array(
+                               // before selector (single)
+                               '/* @noflip */ div { float: left; }'
+                       ),
+                       array(
+                               // before selector (multiple)
+                               '/* @noflip */ div, .notme { float: left; }'
+                       ),
+                       array(
+                               // inside selector
+                               'div, /* @noflip */ .foo { float: left; }'
+                       ),
+                       array(
+                               // after selector
+                               'div, .notme /* @noflip */ { float: left; }'
+                       ),
+                       array(
+                               // before multiple rules
+                               '/* @noflip */ div { float: left; } .foo { float: left; }',
+                               '/* @noflip */ div { float: left; } .foo { float: right; }'
+                       ),
+                       array(
+                               // after multiple rules
+                               '.foo { float: left; } /* @noflip */ div { float: left; }',
+                               '.foo { float: right; } /* @noflip */ div { float: left; }'
+                       ),
+                       array(
+                               // before multiple properties
+                               'div { /* @noflip */ float: left; text-align: left; }',
+                               'div { /* @noflip */ float: left; text-align: right; }'
+                       ),
+                       array(
+                               // after multiple properties
+                               'div { float: left; /* @noflip */ text-align: left; }',
+                               'div { float: right; /* @noflip */ text-align: left; }'
+                       ),
+
+                       // Guard against css3 stuff
+                       array(
+                               'background-image: -moz-linear-gradient(#326cc1, #234e8c);'
+                       ),
+                       array(
+                               'background-image: -webkit-gradient(linear, 100% 0%, 0% 0%, from(#666666), to(#ffffff));'
+                       ),
+
+                       // CSS syntax / white-space variations
+                       // spaces, no spaces, tabs, new lines, omitting semi-colons
+                       array(
+                               ".foo { left: 0; }",
+                               ".foo { right: 0; }"
+                       ),
+                       array(
+                               ".foo{ left: 0; }",
+                               ".foo{ right: 0; }"
+                       ),
+                       array(
+                               ".foo{ left: 0 }",
+                               ".foo{ right: 0 }"
+                       ),
+                       array(
+                               ".foo{left:0 }",
+                               ".foo{right:0 }"
+                       ),
+                       array(
+                               ".foo{left:0}",
+                               ".foo{right:0}"
+                       ),
+                       array(
+                               ".foo  {  left : 0 ; }",
+                               ".foo  {  right : 0 ; }"
+                       ),
+                       array(
+                               ".foo\n  {  left : 0 ; }",
+                               ".foo\n  {  right : 0 ; }"
+                       ),
+                       array(
+                               ".foo\n  {  \nleft : 0 ; }",
+                               ".foo\n  {  \nright : 0 ; }"
+                       ),
+                       array(
+                               ".foo\n  { \n left : 0 ; }",
+                               ".foo\n  { \n right : 0 ; }"
+                       ),
+                       array(
+                               ".foo\n  { \n left\n  : 0; }",
+                               ".foo\n  { \n right\n  : 0; }"
+                       ),
+                       array(
+                               ".foo \n  { \n left\n  : 0; }",
+                               ".foo \n  { \n right\n  : 0; }"
+                       ),
+                       array(
+                               ".foo\n{\nleft\n:\n0;}",
+                               ".foo\n{\nright\n:\n0;}"
+                       ),
+                       array(
+                               ".foo\n.bar {\n\tleft: 0;\n}",
+                               ".foo\n.bar {\n\tright: 0;\n}"
+                       ),
+                       array(
+                               ".foo\t{\tleft\t:\t0;}",
+                               ".foo\t{\tright\t:\t0;}"
+                       ),
+               );
+       }
+
+       /**
+        * These cases are tested in one way only (format: actual, expected, msg).
+        * If both ways can be tested, either put both versions in here or move
+        * it to provideTransformCases().
+        */
+       function provideTransformAdvancedCases() {
+               $bgPairs = array(
+                       # [ - _ . ] <-> [ left right ltr rtl ]
+                       'foo.jpg' => 'foo.jpg',
+                       'left.jpg' => 'right.jpg',
+                       'ltr.jpg' => 'rtl.jpg',
+
+                       'foo-left.png' => 'foo-right.png',
+                       'foo_left.png' => 'foo_right.png',
+                       'foo.left.png' => 'foo.right.png',
+
+                       'foo-ltr.png' => 'foo-rtl.png',
+                       'foo_ltr.png' => 'foo_rtl.png',
+                       'foo.ltr.png' => 'foo.rtl.png',
+
+                       'left-foo.png' => 'right-foo.png',
+                       'left_foo.png' => 'right_foo.png',
+                       'left.foo.png' => 'right.foo.png',
+
+                       'ltr-foo.png' => 'rtl-foo.png',
+                       'ltr_foo.png' => 'rtl_foo.png',
+                       'ltr.foo.png' => 'rtl.foo.png',
+
+                       'foo-ltr-left.gif' => 'foo-rtl-right.gif',
+                       'foo_ltr_left.gif' => 'foo_rtl_right.gif',
+                       'foo.ltr.left.gif' => 'foo.rtl.right.gif',
+                       'foo-ltr_left.gif' => 'foo-rtl_right.gif',
+                       'foo_ltr.left.gif' => 'foo_rtl.right.gif',
+               );
+               $provider = array();
+               foreach ( $bgPairs as $left => $right ) {
+                       # By default '-rtl' and '-left' etc. are not touched,
+                       # Only when the appropiate parameter is set.
+                       $provider[] = array(
+                               ".foo { background: url(images/$left); }",
+                               ".foo { background: url(images/$left); }"
+                       );
+                       $provider[] = array(
+                               ".foo { background: url(images/$right); }",
+                               ".foo { background: url(images/$right); }"
+                       );
+                       $provider[] = array(
+                               ".foo { background: url(images/$left); }",
+                               ".foo { background: url(images/$right); }",
+                               array(
+                                       'swapLtrRtlInURL' => true,
+                                       'swapLeftRightInURL' => true,
+                               )
+                       );
+                       $provider[] = array(
+                               ".foo { background: url(images/$right); }",
+                               ".foo { background: url(images/$left); }",
+                               array(
+                                       'swapLtrRtlInURL' => true,
+                                       'swapLeftRightInURL' => true,
+                               )
+                       );
+               }
+
+               return $provider;
+       }
+
+       /**
+        * Cases that are currently failing, but
+        * should be looked at in the future as enhancements and/or bug fix
+        */
+       function provideTransformBrokenCases() {
+               return array(
+                       // Guard against partial keys
+                       array(
+                               '.foo { leftxx: 0; }',
+                               '.foo { leftxx: 0; }'
+                       ),
+                       array(
+                               '.foo { rightxx: 0; }',
+                               '.foo { rightxx: 0; }'
+                       ),
+
+                       // Guard against selectors that look flippable
+                       array(
+                               # <foo-left-x attr="x">
+                               'foo-left-x[attr="x"] { width: 0; }',
+                               'foo-left-x[attr="x"] { width: 0; }'
+                       ),
+                       array(
+                               # <div class="foo" data-left="x">
+                               '.foo[data-left="x"] { width: 0; }',
+                               '.foo[data-left="x"] { width: 0; }'
+                       ),
+               );
+       }
+}
index 188f0ae..e7d3ea1 100644 (file)
@@ -14,7 +14,7 @@
 
 require_once dirname( dirname( __FILE__ ) ) . '/bootstrap.php';
 
-/** Tests for MediaWiki languages/LanguageTr.php */
+/** Tests for MediaWiki languages/LanguageSr.php */
 class LanguageSrTest extends MediaWikiTestCase {
        /* Language object. Initialized before each test */
        private $lang;
diff --git a/tests/phpunit/languages/LanguageUzTest.php b/tests/phpunit/languages/LanguageUzTest.php
new file mode 100644 (file)
index 0000000..86f483d
--- /dev/null
@@ -0,0 +1,120 @@
+<?php
+/**
+ * PHPUnit tests for the Uzbek language.
+ * The language can be represented using two scripts:
+ *  - Latin (uz-latn)
+ *  - Cyrillic (uz-cyrl)
+ *
+ * @author Robin Pepermans
+ * @author Antoine Musso <hashar at free dot fr>
+ * @copyright Copyright © 2012, Robin Pepermans
+ * @copyright Copyright © 2011, Antoine Musso <hashar at free dot fr>
+ * @file
+ */
+
+require_once dirname( dirname( __FILE__ ) ) . '/bootstrap.php';
+
+/** Tests for MediaWiki languages/LanguageUz.php */
+class LanguageUzTest extends MediaWikiTestCase {
+       /* Language object. Initialized before each test */
+       private $lang;
+
+       function setUp() {
+               $this->lang = Language::factory( 'uz' );
+       }
+       function tearDown() {
+               unset( $this->lang );
+       }
+
+       /**
+        * @author Nikola Smolenski
+        */
+       function testConversionToCyrillic() {
+               // A convertion of Latin to Cyrillic
+               $this->assertEquals( 'абвгғ',
+                       $this->convertToCyrillic( 'abvggʻ' )
+               );
+               // Same as above, but assert that -{}-s must be removed and not converted
+               $this->assertEquals( 'ljабnjвгўоdb',
+                       $this->convertToCyrillic( '-{lj}-ab-{nj}-vgoʻo-{db}-' )
+               );
+               // A simple convertion of Cyrillic to Cyrillic
+               $this->assertEquals( 'абвг',
+                       $this->convertToCyrillic( 'абвг' )
+               );
+               // Same as above, but assert that -{}-s must be removed and not converted
+               $this->assertEquals( 'ljабnjвгdaž',
+                       $this->convertToCyrillic( '-{lj}-аб-{nj}-вг-{da}-ž' )
+               );
+       }
+
+       function testConversionToLatin() {
+               // A simple convertion of Latin to Latin
+               $this->assertEquals( 'abdef',
+                       $this->convertToLatin( 'abdef' )
+               );
+               // A convertion of Cyrillic to Latin
+               $this->assertEquals( 'gʻabtsdOʻQyo',
+                       $this->convertToLatin( 'ғабцдЎҚё' )
+               );
+       }
+
+       ##### HELPERS #####################################################
+       /**
+        * Wrapper to verify text stay the same after applying conversion
+        * @param $text string Text to convert
+        * @param $variant string Language variant 'uz-cyrl' or 'uz-latn'
+        * @param $msg string Optional message
+        */
+       function assertUnConverted( $text, $variant, $msg = '' ) {
+               $this->assertEquals(
+                       $text,
+                       $this->convertTo( $text, $variant ),
+                       $msg
+               );
+       }
+       /**
+        * Wrapper to verify a text is different once converted to a variant.
+        * @param $text string Text to convert
+        * @param $variant string Language variant 'uz-cyrl' or 'uz-latn'
+        * @param $msg string Optional message
+        */
+       function assertConverted( $text, $variant, $msg = '' ) {
+               $this->assertNotEquals(
+                       $text,
+                       $this->convertTo( $text, $variant ),
+                       $msg
+               );
+       }
+
+       /**
+        * Verifiy the given Cyrillic text is not converted when using
+        * using the cyrillic variant and converted to Latin when using
+        * the Latin variant.
+        */
+       function assertCyrillic( $text, $msg = '' ) {
+               $this->assertUnConverted( $text, 'uz-cyrl', $msg );
+               $this->assertConverted( $text, 'uz-latn', $msg );
+       }
+       /**
+        * Verifiy the given Latin text is not converted when using
+        * using the Latin variant and converted to Cyrillic when using
+        * the Cyrillic variant.
+        */
+       function assertLatin( $text, $msg = '' ) {
+               $this->assertUnConverted( $text, 'uz-latn', $msg );
+               $this->assertConverted( $text, 'uz-cyrl', $msg );
+       }
+
+
+       /** Wrapper for converter::convertTo() method*/
+       function convertTo( $text, $variant ) {
+               return $this->lang->mConverter->convertTo( $text, $variant );
+       }
+       function convertToCyrillic( $text ) {
+               return $this->convertTo( $text, 'uz-cyrl' );
+       }
+       function convertToLatin( $text ) {
+               return $this->convertTo( $text, 'uz-latn' );
+       }
+}
index 2fb6e01..25c42d6 100644 (file)
@@ -1,2 +1,2 @@
-start();
-ok( true, 'Successfully loaded!');
+QUnit.start();
+QUnit.assert.ok( true, 'Successfully loaded!');
index 848384b..efa6549 100644 (file)
@@ -1,5 +1,7 @@
 ( function ( $, mw, QUnit, undefined ) {
-"use strict";
+/*global CompletenessTest */
+/*jshint evil:true */
+'use strict';
 
 var mwTestIgnore, mwTester, addons;
 
@@ -26,7 +28,11 @@ QUnit.fixurl = function ( value ) {
 QUnit.config.testTimeout = 10 * 1000;
 
 // Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
-QUnit.config.urlConfig.push( 'debug' );
+QUnit.config.urlConfig.push( {
+       id: 'debug',
+       label: 'Enable ResourceLoaderDebug',
+       tooltip: 'Enable debug mode in ResourceLoader'
+} );
 
 /**
  * Load TestSwarm agent
@@ -45,7 +51,11 @@ if ( QUnit.urlParams.swarmURL && mw.config.get( 'QUnitTestSwarmInjectJSPath' ) )
  * CompletenessTest
  */
 // Adds toggle checkbox to header
-QUnit.config.urlConfig.push( 'completenesstest' );
+QUnit.config.urlConfig.push( {
+       id: 'completenesstest',
+       label: 'Run CompletenessTest',
+       tooltip: 'Run the completeness test'
+} );
 
 // Initiate when enabled
 if ( QUnit.urlParams.completenesstest ) {
@@ -130,7 +140,7 @@ QUnit.newMwEnvironment = ( function () {
                                mw.config.values = freshConfigCopy( localEnv.config );
                                mw.messages.values = freshMessagesCopy( localEnv.messages );
 
-                               localEnv.setup()
+                               localEnv.setup();
                        },
 
                        teardown: function () {
@@ -173,12 +183,12 @@ addons = {
 
        // Expect boolean true
        assertTrue: function ( actual, message ) {
-               strictEqual( actual, true, message );
+               QUnit.push( actual === true, actual, true, message );
        },
 
        // Expect boolean false
        assertFalse: function ( actual, message ) {
-               strictEqual( actual, false, message );
+               QUnit.push( actual === false, actual, false, message );
        },
 
        // Expect numerical value less than X
@@ -199,22 +209,17 @@ addons = {
        // Expect numerical value greater than or equal to X
        gtOrEq: function ( actual, expected, message ) {
                QUnit.push( actual >= expected, actual, 'greater than or equal to ' + expected, message );
-       },
-
-       // Backwards compatible with new verions of QUnit
-       equals: window.equal,
-       same: window.deepEqual
+       }
 };
 
-$.extend( QUnit, addons );
-$.extend( window, addons );
+$.extend( QUnit.assert, addons );
 
 /**
  * Small test suite to confirm proper functionality of the utilities and
  * initializations in this file.
  */
 var envExecCount = 0;
-module( 'mediawiki.tests.qunit.testrunner', QUnit.newMwEnvironment({
+QUnit.module( 'mediawiki.tests.qunit.testrunner', QUnit.newMwEnvironment({
        setup: function () {
                envExecCount += 1;
                this.mwHtmlLive = mw.html;
@@ -235,33 +240,27 @@ module( 'mediawiki.tests.qunit.testrunner', QUnit.newMwEnvironment({
        }
 }) );
 
-test( 'Setup', function () {
-       expect( 3 );
-
-       equal( mw.html.escape( 'foo' ), 'mocked-1', 'extra setup() callback was ran.' );
-       equal( mw.config.get( 'testVar' ), 'foo', 'config object applied' );
-       equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object applied' );
+QUnit.test( 'Setup', 3, function ( assert ) {
+       assert.equal( mw.html.escape( 'foo' ), 'mocked-1', 'extra setup() callback was ran.' );
+       assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object applied' );
+       assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object applied' );
 
        mw.config.set( 'testVar', 'bar' );
        mw.messages.set( 'testMsg', 'Bar.' );
 });
 
-test( 'Teardown', function () {
-       expect( 3 );
-
-       equal( mw.html.escape( 'foo' ), 'mocked-2', 'extra setup() callback was re-ran.' );
-       equal( mw.config.get( 'testVar' ), 'foo', 'config object restored and re-applied after test()' );
-       equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
+QUnit.test( 'Teardown', 3, function ( assert ) {
+       assert.equal( mw.html.escape( 'foo' ), 'mocked-2', 'extra setup() callback was re-ran.' );
+       assert.equal( mw.config.get( 'testVar' ), 'foo', 'config object restored and re-applied after test()' );
+       assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
 });
 
-module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() );
-
-test( 'Teardown', function () {
-       expect( 3 );
+QUnit.module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() );
 
-       equal( mw.html.escape( '<' ), '&lt;', 'extra teardown() callback was ran.' );
-       equal( mw.config.get( 'testVar' ), null, 'config object restored to live in next module()' );
-       equal( mw.messages.get( 'testMsg' ), null, 'messages object restored to live in next module()' );
+QUnit.test( 'Teardown', 3, function ( assert ) {
+       assert.equal( mw.html.escape( '<' ), '&lt;', 'extra teardown() callback was ran.' );
+       assert.equal( mw.config.get( 'testVar' ), null, 'config object restored to live in next module()' );
+       assert.equal( mw.messages.get( 'testMsg' ), null, 'messages object restored to live in next module()' );
 });
 
-})( jQuery, mediaWiki, QUnit );
+}( jQuery, mediaWiki, QUnit ) );
index 6e37138..0dee2ef 100644 (file)
@@ -1,9 +1,6 @@
-module( 'jquery.autoEllipsis', QUnit.newMwEnvironment() );
+( function ( mw, $ ) {
 
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.fn.autoEllipsis, 'jQuery.fn.autoEllipsis defined' );
-});
+QUnit.module( 'jquery.autoEllipsis', QUnit.newMwEnvironment() );
 
 function createWrappedDiv( text, width ) {
        var $wrapper = $( '<div>' ).css( 'width', width );
@@ -14,15 +11,13 @@ function createWrappedDiv( text, width ) {
 
 function findDivergenceIndex( a, b ) {
        var i = 0;
-       while ( i < a.length && i < b.length && a[i] == b[i] ) {
+       while ( i < a.length && i < b.length && a[i] === b[i] ) {
                i++;
        }
        return i;
 }
 
-test( 'Position right', function() {
-       expect(4);
-
+QUnit.test( 'Position right', 4, function ( assert ) {
        // We need this thing to be visible, so append it to the DOM
        var origText = 'This is a really long random string and there is no way it fits in 100 pixels.';
        var $wrapper = createWrappedDiv( origText, '100px' );
@@ -31,25 +26,27 @@ test( 'Position right', function() {
 
        // Verify that, and only one, span element was created
        var $span = $wrapper.find( '> span' );
-       strictEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' );
+       assert.strictEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' );
 
        // Check that the text fits by turning on word wrapping
        $span.css( 'whiteSpace', 'nowrap' );
-       ltOrEq( $span.width(), $span.parent().width(), "Text fits (making the span 'white-space:nowrap' does not make it wider than its parent)" );
+       assert.ltOrEq( $span.width(), $span.parent().width(), "Text fits (making the span 'white-space:nowrap' does not make it wider than its parent)" );
 
        // Add two characters using scary black magic
        var spanText = $span.text();
        var d = findDivergenceIndex( origText, spanText );
        var spanTextNew = spanText.substr( 0, d ) + origText[d] + origText[d] + '...';
 
-       gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
+       assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
 
        // Put this text in the span and verify it doesn't fit
        $span.text( spanTextNew );
        // In IE6 width works like min-width, allow IE6's width to be "equal to"
        if ( $.browser.msie && Number( $.browser.version ) === 6 ) {
-               gtOrEq( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more) - IE6: Maybe equal to as well due to width behaving like min-width in IE6' );
+               assert.gtOrEq( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more) - IE6: Maybe equal to as well due to width behaving like min-width in IE6' );
        } else {
-               gt( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more)' );
+               assert.gt( $span.width(), $span.parent().width(), 'Fit is maximal (adding two characters makes it not fit any more)' );
        }
 });
+
+}( mediaWiki, jQuery ) );
index 15fac69..8d4ac03 100644 (file)
@@ -1,30 +1,21 @@
-module( 'jquery.byteLength', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.byteLength, 'jQuery.byteLength defined' );
-} );
-
-test( 'Simple text', function() {
-       expect(5);
+QUnit.module( 'jquery.byteLength', QUnit.newMwEnvironment() );
 
+QUnit.test( 'Simple text', 5, function ( assert ) {
        var     azLc = 'abcdefghijklmnopqrstuvwxyz',
                azUc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                num = '0123456789',
                x = '*',
                space = '   ';
 
-       equal( $.byteLength( azLc ), 26, 'Lowercase a-z' );
-       equal( $.byteLength( azUc ), 26, 'Uppercase A-Z' );
-       equal( $.byteLength( num ), 10, 'Numbers 0-9' );
-       equal( $.byteLength( x ), 1, 'An asterisk' );
-       equal( $.byteLength( space ), 3, '3 spaces' );
+       assert.equal( $.byteLength( azLc ), 26, 'Lowercase a-z' );
+       assert.equal( $.byteLength( azUc ), 26, 'Uppercase A-Z' );
+       assert.equal( $.byteLength( num ), 10, 'Numbers 0-9' );
+       assert.equal( $.byteLength( x ), 1, 'An asterisk' );
+       assert.equal( $.byteLength( space ), 3, '3 spaces' );
 
 } );
 
-test( 'Special text', window.foo = function() {
-       expect(5);
-
+QUnit.test( 'Special text', 5, function ( assert ) {
        // http://en.wikipedia.org/wiki/UTF-8
        var     U_0024 = '\u0024',
                U_00A2 = '\u00A2',
@@ -34,9 +25,9 @@ test( 'Special text', window.foo = function() {
                // according to http://www.fileformat.info/info/unicode/char/24B62/index.htm
                U_024B62_alt = '\uD852\uDF62';
 
-       strictEqual( $.byteLength( U_0024 ), 1, 'U+0024: 1 byte. \u0024 (dollar sign)' );
-       strictEqual( $.byteLength( U_00A2 ), 2, 'U+00A2: 2 bytes. \u00A2 (cent sign)' );
-       strictEqual( $.byteLength( U_20AC ), 3, 'U+20AC: 3 bytes. \u20AC (euro sign)' );
-       strictEqual( $.byteLength( U_024B62 ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character)' );
-       strictEqual( $.byteLength( U_024B62_alt ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character) - alternative method' );
+       assert.strictEqual( $.byteLength( U_0024 ), 1, 'U+0024: 1 byte. \u0024 (dollar sign)' );
+       assert.strictEqual( $.byteLength( U_00A2 ), 2, 'U+00A2: 2 bytes. \u00A2 (cent sign)' );
+       assert.strictEqual( $.byteLength( U_20AC ), 3, 'U+20AC: 3 bytes. \u20AC (euro sign)' );
+       assert.strictEqual( $.byteLength( U_024B62 ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character)' );
+       assert.strictEqual( $.byteLength( U_024B62_alt ), 4, 'U+024B62: 4 bytes. \uD852\uDF62 (a Han character) - alternative method' );
 } );
index 2cb94d1..23a93a7 100644 (file)
@@ -1,7 +1,7 @@
 ( function ( $ ) {
        var simpleSample, U_20AC, mbSample;
 
-       module( 'jquery.byteLimit', QUnit.newMwEnvironment() );
+       QUnit.module( 'jquery.byteLimit', QUnit.newMwEnvironment() );
 
        // Simple sample (20 chars, 20 bytes)
        simpleSample = '12345678901234567890';
@@ -54,7 +54,7 @@
                        limit: null
                }, options);
 
-               test( opt.description, function () {
+               QUnit.test( opt.description, function ( assert ) {
                        var rawVal, fn, newVal;
 
                        opt.$input.appendTo( '#qunit-fixture' );
                        newVal = $.isFunction( fn ) ? fn( rawVal ) : rawVal;
 
                        if ( opt.hasLimit ) {
-                               expect(3);
+                               QUnit.expect(3);
 
-                               QUnit.ltOrEq(
+                               assert.ltOrEq(
                                        $.byteLength( newVal ),
                                        opt.limit,
                                        'Prevent keypresses after byteLimit was reached, length never exceeded the limit'
                                );
-                               equal(
+                               assert.equal(
                                        $.byteLength( rawVal ),
                                        $.byteLength( opt.expected ),
                                        'Not preventing keypresses too early, length has reached the expected length'
                                );
-                               equal( rawVal, opt.expected, 'New value matches the expected string' );
+                               assert.equal( rawVal, opt.expected, 'New value matches the expected string' );
 
                        } else {
-                               expect(2);
-                               equal( newVal, opt.expected, 'New value matches the expected string' );
-                               equal(
+                               QUnit.expect(2);
+                               assert.equal( newVal, opt.expected, 'New value matches the expected string' );
+                               assert.equal(
                                        $.byteLength( newVal ),
                                        $.byteLength( opt.expected ),
                                        'Unlimited scenarios are not affected, expected length reached'
                } );
        }
 
-       test( '-- Initial check', function () {
-               expect(1);
-               ok( $.fn.byteLimit, 'jQuery.fn.byteLimit defined' );
-       } );
-
        byteLimitTest({
                description: 'Plain text input',
                $input: $( '<input>' )
                expected: 'User:Sample'
        });
 
-       test( 'Confirm properties and attributes set', function () {
+       QUnit.test( 'Confirm properties and attributes set', 5, function ( assert ) {
                var $el, $elA, $elB;
 
-               expect(5);
-
                $el = $( '<input>' )
                        .attr( 'type', 'text' )
                        .prop( 'maxLength', '7' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit();
 
-               strictEqual( $el.prop( 'maxLength' ), 7, 'Pre-set maxLength property unchanged' );
+               assert.strictEqual( $el.prop( 'maxLength' ), 7, 'Pre-set maxLength property unchanged' );
 
                $el = $( '<input>' )
                        .attr( 'type', 'text' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit( 12 );
 
-               strictEqual( $el.prop( 'maxLength' ), 12, 'maxLength property updated if value was passed to $.fn.byteLimit' );
+               assert.strictEqual( $el.prop( 'maxLength' ), 12, 'maxLength property updated if value was passed to $.fn.byteLimit' );
 
                $elA = $( '<input>' )
                        .addClass( 'mw-test-byteLimit-foo' )
 
                $el = $( '.mw-test-byteLimit-foo' );
 
-               strictEqual( $el.length, 2, 'Verify that there are no other elements clashing with this test suite' );
+               assert.strictEqual( $el.length, 2, 'Verify that there are no other elements clashing with this test suite' );
 
                $el.byteLimit();
 
                // because $.fn.byteLimit sets:
                // `limit = limitArg || this.prop( 'maxLength' ); this.prop( 'maxLength', limit )`
                // and did so outside the each() loop.
-               strictEqual( $elA.prop( 'maxLength' ), 7, 'maxLength was not incorrectly set on #1 when calling byteLimit on multiple elements (bug 35294)' );
-               strictEqual( $elB.prop( 'maxLength' ), 12, 'maxLength was not incorrectly set on #2 when calling byteLimit on multiple elements (bug 35294)' );
+               assert.strictEqual( $elA.prop( 'maxLength' ), 7, 'maxLength was not incorrectly set on #1 when calling byteLimit on multiple elements (bug 35294)' );
+               assert.strictEqual( $elB.prop( 'maxLength' ), 12, 'maxLength was not incorrectly set on #2 when calling byteLimit on multiple elements (bug 35294)' );
        });
 
 }( jQuery ) );
index 2c0b8e3..bf62b39 100644 (file)
@@ -1,14 +1,9 @@
-module( 'jquery.client', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(1);
-       ok( jQuery.client, 'jQuery.client defined' );
-});
+QUnit.module( 'jquery.client', QUnit.newMwEnvironment() );
 
 /** Number of user-agent defined */
 var uacount = 0;
 
-var uas = (function() {
+var uas = (function () {
 
        // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
        // Info based on results from http://toolserver.org/~krinkle/testswarm/job/174/
@@ -225,40 +220,39 @@ var uas = (function() {
                        }
                }
        };
-       $.each( uas, function() { uacount++ });
+       $.each( uas, function () {
+               uacount++;
+       });
        return uas;
-})();
-
-test( 'profile userAgent support', function() {
-       expect(uacount);
+}());
 
+QUnit.test( 'profile userAgent support', uacount, function ( assert ) {
        // Generate a client profile object and compare recursively
        var uaTest = function( rawUserAgent, data ) {
                var ret = $.client.profile( {
                        userAgent: rawUserAgent,
                        platform: data.platform
                } );
-               deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent );
+               assert.deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent );
        };
 
        // Loop through and run tests
        $.each( uas, uaTest );
 } );
 
-test( 'profile return validation for current user agent', function() {
-       expect(7);
+QUnit.test( 'profile return validation for current user agent', 7, function ( assert ) {
        var p = $.client.profile();
-       var unknownOrType = function( val, type, summary ) {
-               return ok( typeof val === type || val === 'unknown', summary );
-       };
+       function unknownOrType( val, type, summary ) {
+               assert.ok( typeof val === type || val === 'unknown', summary );
+       }
 
-       equal( typeof p, 'object', 'profile returns an object' );
+       assert.equal( typeof p, 'object', 'profile returns an object' );
        unknownOrType( p.layout, 'string', 'p.layout is a string (or "unknown")' );
        unknownOrType( p.layoutVersion, 'number', 'p.layoutVersion is a number (or "unknown")' );
        unknownOrType( p.platform, 'string', 'p.platform is a string (or "unknown")' );
        unknownOrType( p.version, 'string', 'p.version is a string (or "unknown")' );
        unknownOrType( p.versionBase, 'string', 'p.versionBase is a string (or "unknown")' );
-       equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' );
+       assert.equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' );
 });
 
 // Example from WikiEditor
@@ -289,20 +283,16 @@ var testMap = {
        }
 };
 
-test( 'test', function() {
-       expect(1);
-
+QUnit.test( 'test', 1, function ( assert ) {
        // .test() uses eval, make sure no exceptions are thrown
        // then do a basic return value type check
        var testMatch = $.client.test( testMap );
 
-       equal( typeof testMatch, 'boolean', 'test returns a boolean value' );
+       assert.equal( typeof testMatch, 'boolean', 'test returns a boolean value' );
 
 });
 
-test( 'User-agent matches against WikiEditor\'s compatibility map', function() {
-       expect( uacount * 2 ); // double since we test both LTR and RTL
-
+QUnit.test( 'User-agent matches against WikiEditor\'s compatibility map', uacount * 2, function ( assert ) {
        var     $body = $( 'body' ),
                bodyClasses = $body.attr( 'class' );
 
@@ -317,7 +307,7 @@ test( 'User-agent matches against WikiEditor\'s compatibility map', function() {
                        var testMatch = $.client.test( testMap, profile );
                        $body.removeClass( dir );
 
-                       equal( testMatch, data.wikiEditor[dir], 'testing comparison based on ' + dir + ', ' + agent );
+                       assert.equal( testMatch, data.wikiEditor[dir], 'testing comparison based on ' + dir + ', ' + agent );
                });
        });
 
index 655ee56..7b37f5a 100644 (file)
@@ -1,40 +1,31 @@
-module( 'jquery.colorUtil', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.colorUtil, '$.colorUtil defined' );
-});
-
-test( 'getRGB', function() {
-       expect(18);
-
-       strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' );
-       strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' );
-       deepEqual( $.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Parse array of rgb values' );
-       deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple rgb string' );
-       deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple rgb string with spaces' );
-       deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse rgb string with percentages' );
-       deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse rgb string with percentages and spaces' );
-       deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' );
-       deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' );
-       deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' );
-       deepEqual( $.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' );
-       deepEqual( $.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' );
-       deepEqual( $.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' );
-       deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' );
+QUnit.module( 'jquery.colorUtil', QUnit.newMwEnvironment() );
+
+QUnit.test( 'getRGB', 18, function ( assert ) {
+       assert.strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' );
+       assert.strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' );
+       assert.deepEqual( $.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Parse array of rgb values' );
+       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple rgb string' );
+       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple rgb string with spaces' );
+       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse rgb string with percentages' );
+       assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse rgb string with percentages and spaces' );
+       assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' );
+       assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' );
+       assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' );
+       assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' );
+       assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' );
+       assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' );
+       assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' );
 
        // Perhaps this is a bug in colorUtil, but it is the current behaviour so, let's keep
        // track of it, so we will know in case it would ever change.
-       strictEqual( $.colorUtil.getRGB( 'rgba(0,0,0,0)' ), undefined, 'Zero rgba without whitespace' );
+       assert.strictEqual( $.colorUtil.getRGB( 'rgba(0,0,0,0)' ), undefined, 'Zero rgba without whitespace' );
 
-       deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' );
-       deepEqual( $.colorUtil.getRGB( 'transparent' ), [255, 255, 255], 'Color names (transparent)' );
-       strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' );
+       assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' );
+       assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [255, 255, 255], 'Color names (transparent)' );
+       assert.strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' );
 });
 
-test( 'rgbToHsl', function() {
-       expect(1);
-
+QUnit.test( 'rgbToHsl', 1, function ( assert ) {
        var hsl = $.colorUtil.rgbToHsl( 144, 238, 144 );
 
        // Cross-browser differences in decimals...
@@ -45,27 +36,23 @@ test( 'rgbToHsl', function() {
        // Re-create the rgbToHsl return array items, limited to two decimals.
        var ret = [dualDecimals(hsl[0]), dualDecimals(hsl[1]), dualDecimals(hsl[2])];
 
-       deepEqual( ret, [0.33, 0.73, 0.75], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
+       assert.deepEqual( ret, [0.33, 0.73, 0.75], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
 });
 
-test( 'hslToRgb', function() {
-       expect(1);
-
+QUnit.test( 'hslToRgb', 1, function ( assert ) {
        var rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 );
 
        // Cross-browser differences in decimals...
        // Re-create the hslToRgb return array items, rounded to whole numbers.
        var ret = [Math.round(rgb[0]), Math.round(rgb[1]), Math.round(rgb[2])];
 
-       deepEqual( ret ,[183, 240, 168], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
+       assert.deepEqual( ret ,[183, 240, 168], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
 });
 
-test( 'getColorBrightness', function() {
-       expect(2);
-
+QUnit.test( 'getColorBrightness', 2, function ( assert ) {
        var a = $.colorUtil.getColorBrightness( 'red', +0.1 );
-       equal( a, 'rgb(255,50,50)', 'Start with named color "red", brighten 10%' );
+       assert.equal( a, 'rgb(255,50,50)', 'Start with named color "red", brighten 10%' );
 
        var b = $.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 );
-       equal( b, 'rgb(118,29,29)', 'Start with rgb string "rgb(200,50,50)", darken 20%' );
+       assert.equal( b, 'rgb(118,29,29)', 'Start with rgb string "rgb(200,50,50)", darken 20%' );
 });
index 6489a1f..a307983 100644 (file)
@@ -1,41 +1,35 @@
-test('jquery.delayedBind with data option', function() {
+QUnit.asyncTest('jquery.delayedBind with data option', 2, function ( assert ) {
        var $fixture = $('<div>').appendTo('#qunit-fixture'),
                data = { magic: "beeswax" },
                delay = 50;
 
-       $fixture.delayedBind(delay, 'testevent', data, function(event) {
-               start(); // continue!
-               ok(true, 'testevent fired');
-               ok(event.data === data, 'data is passed through delayedBind');
+       $fixture.delayedBind(delay, 'testevent', data, function ( e ) {
+               QUnit.start(); // continue!
+               assert.ok( true, 'testevent fired');
+               assert.ok( e.data === data, 'data is passed through delayedBind');
        });
 
-       expect(2);
-       stop(); // async!
-
        // We'll trigger it thrice, but it should only happen once.
-       $fixture.trigger('testevent', {});
-       $fixture.trigger('testevent', {});
-       $fixture.trigger('testevent', {});
-       $fixture.trigger('testevent', {});
+       $fixture.trigger( 'testevent', {} );
+       $fixture.trigger( 'testevent', {} );
+       $fixture.trigger( 'testevent', {} );
+       $fixture.trigger( 'testevent', {} );
 });
 
-test('jquery.delayedBind without data option', function() {
+QUnit.asyncTest('jquery.delayedBind without data option', 1, function ( assert ) {
        var $fixture = $('<div>').appendTo('#qunit-fixture'),
                data = { magic: "beeswax" },
                delay = 50;
 
-       $fixture.delayedBind(delay, 'testevent', function(event) {
-               start(); // continue!
-               ok(true, 'testevent fired');
+       $fixture.delayedBind(delay, 'testevent', function ( e ) {
+               QUnit.start(); // continue!
+               assert.ok(true, 'testevent fired');
        });
 
-       expect(1);
-       stop(); // async!
-
        // We'll trigger it thrice, but it should only happen once.
-       $fixture.trigger('testevent', {});
-       $fixture.trigger('testevent', {});
-       $fixture.trigger('testevent', {});
-       $fixture.trigger('testevent', {});
+       $fixture.trigger( 'testevent', {} );
+       $fixture.trigger( 'testevent', {} );
+       $fixture.trigger( 'testevent', {} );
+       $fixture.trigger( 'testevent', {} );
 });
 
index 9377a2f..6eef1ab 100644 (file)
@@ -1,17 +1,11 @@
-module( 'jquery.getAttrs', QUnit.newMwEnvironment() );
+QUnit.module( 'jquery.getAttrs', QUnit.newMwEnvironment() );
 
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.fn.getAttrs, 'jQuery.fn.getAttrs defined' );
-} );
-
-test( 'Check', function() {
-       expect(1);
+QUnit.test( 'Check', 1, function ( assert ) {
        var     attrs = {
                        foo: 'bar',
                        'class': 'lorem'
                },
-               $el = $( '<div>', attrs );
+               $el = jQuery( '<div>', attrs );
 
-       deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' );
+       assert.deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' );
 } );
index 4750d2b..a94dca3 100644 (file)
@@ -1,12 +1,7 @@
-module( 'jquery.highlightText', QUnit.newMwEnvironment() );
+QUnit.module( 'jquery.highlightText', QUnit.newMwEnvironment() );
 
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.fn.highlightText, 'jQuery.fn.highlightText defined' );
-} );
-
-test( 'Check', function() {
-       var cases = [
+QUnit.test( 'Check', function ( assert ) {
+       var $fixture, cases = [
                {
                        desc: 'Test 001',
                        text: 'Blue Öyster Cult',
@@ -224,16 +219,14 @@ test( 'Check', function() {
                        expected: '<span class="highlight">بو</span>ل إيردوس'
                }
        ];
-       expect(cases.length);
-       var $fixture;
+       QUnit.expect( cases.length );
 
-       $.each(cases, function( i, item ) {
-               $fixture = $( '<p></p>' ).text( item.text );
-               $fixture.highlightText( item.highlight );
-               equals(
+       $.each( cases, function ( i, item ) {
+               $fixture = $( '<p>' ).text( item.text ).highlightText( item.highlight );
+               assert.equal(
                        $fixture.html(),
-                       $('<p>' + item.expected + '</p>').html(), // re-parse to normalize!
+                       $( '<p>' ).html( item.expected ).html(), // re-parse to normalize!
                        item.desc || undefined
-                       );
+               );
        } );
 } );
index cd82863..86d6b62 100644 (file)
@@ -1,13 +1,6 @@
-module( 'jquery.localize', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.fn.localize, 'jQuery.fn.localize defined' );
-} );
-
-test( 'Handle basic replacements', function() {
-       expect(3);
+QUnit.module( 'jquery.localize', QUnit.newMwEnvironment() );
 
+QUnit.test( 'Handle basic replacements', 4, function ( assert ) {
        var html, $lc;
        mw.messages.set( 'basic', 'Basic stuff' );
 
@@ -15,24 +8,28 @@ test( 'Handle basic replacements', function() {
        html = '<div><span><html:msg key="basic" /></span></div>';
        $lc = $( html ).localize().find( 'span' );
 
-       strictEqual( $lc.text(), 'Basic stuff', 'Tag: html:msg' );
+       assert.strictEqual( $lc.text(), 'Basic stuff', 'Tag: html:msg' );
 
        // Attribute: title-msg
-       html = '<div><span title-msg="basic" /></span></div>';
+       html = '<div><span title-msg="basic"></span></div>';
        $lc = $( html ).localize().find( 'span' );
 
-       strictEqual( $lc.attr( 'title' ), 'Basic stuff', 'Attribute: title-msg' );
+       assert.strictEqual( $lc.attr( 'title' ), 'Basic stuff', 'Attribute: title-msg' );
 
        // Attribute: alt-msg
-       html = '<div><span alt-msg="basic" /></span></div>';
+       html = '<div><span alt-msg="basic"></span></div>';
        $lc = $( html ).localize().find( 'span' );
 
-       strictEqual( $lc.attr( 'alt' ), 'Basic stuff', 'Attribute: alt-msg' );
-} );
+       assert.strictEqual( $lc.attr( 'alt' ), 'Basic stuff', 'Attribute: alt-msg' );
 
-test( 'Proper escaping', function() {
-       expect(2);
+       // Attribute: placeholder-msg
+       html = '<div><input placeholder-msg="basic" /></div>';
+       $lc = $( html ).localize().find( 'input' );
 
+       assert.strictEqual( $lc.attr( 'placeholder' ), 'Basic stuff', 'Attribute: placeholder-msg' );
+} );
+
+QUnit.test( 'Proper escaping', 2, function ( assert ) {
        var html, $lc;
        mw.messages.set( 'properfoo', '<proper esc="test">' );
 
@@ -40,21 +37,19 @@ test( 'Proper escaping', function() {
        // making sure it is actually using text() and attr() (or something with the same effect)
 
        // Text escaping
-       html = '<div><span><html:msg key="properfoo" /></span></div>';
+       html = '<div><span><html:msg key="properfoo"></span></div>';
        $lc = $( html ).localize().find( 'span' );
 
-       strictEqual( $lc.text(), mw.msg( 'properfoo' ), 'Content is inserted as text, not as html.' );
+       assert.strictEqual( $lc.text(), mw.msg( 'properfoo' ), 'Content is inserted as text, not as html.' );
 
        // Attribute escaping
-       html = '<div><span title-msg="properfoo" /></span></div>';
+       html = '<div><span title-msg="properfoo"></span></div>';
        $lc = $( html ).localize().find( 'span' );
 
-       strictEqual( $lc.attr( 'title' ), mw.msg( 'properfoo' ), 'Attributes are not inserted raw.' );
+       assert.strictEqual( $lc.attr( 'title' ), mw.msg( 'properfoo' ), 'Attributes are not inserted raw.' );
 } );
 
-test( 'Options', function() {
-       expect(7);
-
+QUnit.test( 'Options', 7, function ( assert ) {
        mw.messages.set( {
                'foo-lorem': 'Lorem',
                'foo-ipsum': 'Ipsum',
@@ -67,17 +62,17 @@ test( 'Options', function() {
        var html, $lc, attrs, x, sitename = 'Wikipedia';
 
        // Message key prefix
-       html = '<div><span title-msg="lorem"><html:msg key="ipsum" /></span></div>';
+       html = '<div><span title-msg="lorem"><html:msg key="ipsum"></span></div>';
        $lc = $( html ).localize( {
                prefix: 'foo-'
        } ).find( 'span' );
 
-       strictEqual( $lc.attr( 'title' ), 'Lorem', 'Message key prefix - attr' );
-       strictEqual( $lc.text(), 'Ipsum', 'Message key prefix - text' );
+       assert.strictEqual( $lc.attr( 'title' ), 'Lorem', 'Message key prefix - attr' );
+       assert.strictEqual( $lc.text(), 'Ipsum', 'Message key prefix - text' );
 
        // Variable keys mapping
        x = 'bar';
-       html = '<div><span title-msg="title"><html:msg key="label" /></span></div>';
+       html = '<div><span title-msg="title"><html:msg key="label"></span></div>';
        $lc = $( html ).localize( {
                keys: {
                        'title': 'foo-' + x + '-title',
@@ -85,22 +80,22 @@ test( 'Options', function() {
                }
        } ).find( 'span' );
 
-       strictEqual( $lc.attr( 'title' ), 'Read more about bars', 'Variable keys mapping - attr' );
-       strictEqual( $lc.text(), 'The Bars', 'Variable keys mapping - text' );
+       assert.strictEqual( $lc.attr( 'title' ), 'Read more about bars', 'Variable keys mapping - attr' );
+       assert.strictEqual( $lc.text(), 'The Bars', 'Variable keys mapping - text' );
 
        // Passing parameteters to mw.msg
-       html = '<div><span><html:msg key="foo-welcome" /></span></div>';
+       html = '<div><span><html:msg key="foo-welcome"></span></div>';
        $lc = $( html ).localize( {
                params: {
                        'foo-welcome': [sitename, 'yesterday']
                }
        } ).find( 'span' );
 
-       strictEqual( $lc.text(), 'Welcome to Wikipedia! (last visit: yesterday)', 'Passing parameteters to mw.msg' );
+       assert.strictEqual( $lc.text(), 'Welcome to Wikipedia! (last visit: yesterday)', 'Passing parameteters to mw.msg' );
 
        // Combination of options prefix, params and keys
        x = 'bazz';
-       html = '<div><span title-msg="title"><html:msg key="label" /></span></div>';
+       html = '<div><span title-msg="title"><html:msg key="label"></span></div>';
        $lc = $( html ).localize( {
                prefix: 'foo-',
                keys: {
@@ -114,6 +109,6 @@ test( 'Options', function() {
                }
        } ).find( 'span' );
 
-       strictEqual( $lc.text(), 'The Bazz (Wikipedia)', 'Combination of options prefix, params and keys - text' );
-       strictEqual( $lc.attr( 'title' ), 'Read more about bazz at Wikipedia (last modified: 3 minutes ago)', 'Combination of options prefix, params and keys - attr' );
+       assert.strictEqual( $lc.text(), 'The Bazz (Wikipedia)', 'Combination of options prefix, params and keys - text' );
+       assert.strictEqual( $lc.attr( 'title' ), 'Read more about bazz at Wikipedia (last modified: 3 minutes ago)', 'Combination of options prefix, params and keys - attr' );
 } );
index 3a2d0d8..5b566ae 100644 (file)
@@ -1,58 +1,58 @@
-module( 'jquery.mwExtension', QUnit.newMwEnvironment() );
+QUnit.module( 'jquery.mwExtension', QUnit.newMwEnvironment() );
 
-test( 'String functions', function() {
+QUnit.test( 'String functions', function ( assert ) {
 
-       equal( $.trimLeft( '  foo bar  ' ), 'foo bar  ', 'trimLeft' );
-       equal( $.trimRight( '  foo bar  ' ), '  foo bar', 'trimRight' );
-       equal( $.ucFirst( 'foo' ), 'Foo', 'ucFirst' );
+       assert.equal( $.trimLeft( '  foo bar  ' ), 'foo bar  ', 'trimLeft' );
+       assert.equal( $.trimRight( '  foo bar  ' ), '  foo bar', 'trimRight' );
+       assert.equal( $.ucFirst( 'foo' ), 'Foo', 'ucFirst' );
 
-       equal( $.escapeRE( '<!-- ([{+mW+}]) $^|?>' ),
+       assert.equal( $.escapeRE( '<!-- ([{+mW+}]) $^|?>' ),
         '<!\\-\\- \\(\\[\\{\\+mW\\+\\}\\]\\) \\$\\^\\|\\?>', 'escapeRE - Escape specials' );
-       equal( $.escapeRE( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ),
+       assert.equal( $.escapeRE( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ),
         'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'escapeRE - Leave uppercase alone' );
-       equal( $.escapeRE( 'abcdefghijklmnopqrstuvwxyz' ),
+       assert.equal( $.escapeRE( 'abcdefghijklmnopqrstuvwxyz' ),
         'abcdefghijklmnopqrstuvwxyz', 'escapeRE - Leave lowercase alone' );
-       equal( $.escapeRE( '0123456789' ), '0123456789', 'escapeRE - Leave numbers alone' );
+       assert.equal( $.escapeRE( '0123456789' ), '0123456789', 'escapeRE - Leave numbers alone' );
 });
 
-test( 'Is functions', function() {
+QUnit.test( 'Is functions', function ( assert ) {
 
-       strictEqual( $.isDomElement( document.getElementById( 'qunit-header' ) ), true,
+       assert.strictEqual( $.isDomElement( document.getElementById( 'qunit-header' ) ), true,
         'isDomElement: #qunit-header Node' );
-       strictEqual( $.isDomElement( document.getElementById( 'random-name' ) ), false,
+       assert.strictEqual( $.isDomElement( document.getElementById( 'random-name' ) ), false,
         'isDomElement: #random-name (null)' );
-       strictEqual( $.isDomElement( document.getElementsByTagName( 'div' ) ), false,
+       assert.strictEqual( $.isDomElement( document.getElementsByTagName( 'div' ) ), false,
         'isDomElement: getElementsByTagName Array' );
-       strictEqual( $.isDomElement( document.getElementsByTagName( 'div' )[0] ), true,
+       assert.strictEqual( $.isDomElement( document.getElementsByTagName( 'div' )[0] ), true,
         'isDomElement: getElementsByTagName(..)[0] Node' );
-       strictEqual( $.isDomElement( $( 'div' ) ), false,
+       assert.strictEqual( $.isDomElement( $( 'div' ) ), false,
         'isDomElement: jQuery object' );
-       strictEqual( $.isDomElement( $( 'div' ).get(0) ), true,
+       assert.strictEqual( $.isDomElement( $( 'div' ).get(0) ), true,
         'isDomElement: jQuery object > Get node' );
-       strictEqual( $.isDomElement( document.createElement( 'div' ) ), true,
+       assert.strictEqual( $.isDomElement( document.createElement( 'div' ) ), true,
         'isDomElement: createElement' );
-       strictEqual( $.isDomElement( { foo: 1 } ), false,
+       assert.strictEqual( $.isDomElement( { foo: 1 } ), false,
         'isDomElement: Object' );
 
-       strictEqual( $.isEmpty( 'string' ), false, 'isEmptry: "string"' );
-       strictEqual( $.isEmpty( '0' ), true, 'isEmptry: "0"' );
-       strictEqual( $.isEmpty( '' ), true, 'isEmptry: ""' );
-       strictEqual( $.isEmpty( 1 ), false, 'isEmptry: 1' );
-       strictEqual( $.isEmpty( [] ), true, 'isEmptry: []' );
-       strictEqual( $.isEmpty( {} ), true, 'isEmptry: {}' );
+       assert.strictEqual( $.isEmpty( 'string' ), false, 'isEmptry: "string"' );
+       assert.strictEqual( $.isEmpty( '0' ), true, 'isEmptry: "0"' );
+       assert.strictEqual( $.isEmpty( '' ), true, 'isEmptry: ""' );
+       assert.strictEqual( $.isEmpty( 1 ), false, 'isEmptry: 1' );
+       assert.strictEqual( $.isEmpty( [] ), true, 'isEmptry: []' );
+       assert.strictEqual( $.isEmpty( {} ), true, 'isEmptry: {}' );
 
        // Documented behaviour
-       strictEqual( $.isEmpty( { length: 0 } ), true, 'isEmptry: { length: 0 }' );
+       assert.strictEqual( $.isEmpty( { length: 0 } ), true, 'isEmptry: { length: 0 }' );
 });
 
-test( 'Comparison functions', function() {
+QUnit.test( 'Comparison functions', function ( assert ) {
 
-       ok( $.compareArray( [0, 'a', [], [2, 'b'] ], [0, "a", [], [2, "b"] ] ),
+       assert.ok( $.compareArray( [0, 'a', [], [2, 'b'] ], [0, "a", [], [2, "b"] ] ),
         'compareArray: Two deep arrays that are excactly the same' );
-       ok( !$.compareArray( [1], [2] ), 'compareArray: Two different arrays (false)' );
+       assert.ok( !$.compareArray( [1], [2] ), 'compareArray: Two different arrays (false)' );
 
-       ok( $.compareObject( {}, {} ), 'compareObject: Two empty objects' );
-       ok( $.compareObject( { foo: 1 }, { foo: 1 } ), 'compareObject: Two the same objects' );
-       ok( !$.compareObject( { bar: true }, { baz: false } ),
+       assert.ok( $.compareObject( {}, {} ), 'compareObject: Two empty objects' );
+       assert.ok( $.compareObject( { foo: 1 }, { foo: 1 } ), 'compareObject: Two the same objects' );
+       assert.ok( !$.compareObject( { bar: true }, { baz: false } ),
         'compareObject: Two different objects (false)' );
 });
index 98ff550..161f0cd 100644 (file)
@@ -1,15 +1,6 @@
-module( 'jquery.tabIndex', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(2);
-
-       ok( $.fn.firstTabIndex, '$.fn.firstTabIndex defined' );
-       ok( $.fn.lastTabIndex, '$.fn.lastTabIndex defined' );
-});
-
-test( 'firstTabIndex', function() {
-       expect(2);
+QUnit.module( 'jquery.tabIndex', QUnit.newMwEnvironment() );
 
+QUnit.test( 'firstTabIndex', 2, function ( assert ) {
        var testEnvironment =
 '<form>' +
        '<input tabindex="7" />' +
@@ -19,15 +10,13 @@ test( 'firstTabIndex', function() {
 '</form>';
 
        var $testA = $( '<div>' ).html( testEnvironment ).appendTo( '#qunit-fixture' );
-       strictEqual( $testA.firstTabIndex(), 2, 'First tabindex should be 2 within this context.' );
+       assert.strictEqual( $testA.firstTabIndex(), 2, 'First tabindex should be 2 within this context.' );
 
        var $testB = $( '<div>' );
-       strictEqual( $testB.firstTabIndex(), null, 'Return null if none available.' );
+       assert.strictEqual( $testB.firstTabIndex(), null, 'Return null if none available.' );
 });
 
-test( 'lastTabIndex', function() {
-       expect(2);
-
+QUnit.test( 'lastTabIndex', 2, function ( assert ) {
        var testEnvironment =
 '<form>' +
        '<input tabindex="7" />' +
@@ -37,8 +26,8 @@ test( 'lastTabIndex', function() {
 '</form>';
 
        var $testA = $( '<div>' ).html( testEnvironment ).appendTo( '#qunit-fixture' );
-       strictEqual( $testA.lastTabIndex(), 9, 'Last tabindex should be 9 within this context.' );
+       assert.strictEqual( $testA.lastTabIndex(), 9, 'Last tabindex should be 9 within this context.' );
 
        var $testB = $( '<div>' );
-       strictEqual( $testB.lastTabIndex(), null, 'Return null if none available.' );
+       assert.strictEqual( $testB.lastTabIndex(), null, 'Return null if none available.' );
 });
index df0144c..7d8c1d6 100644 (file)
@@ -7,12 +7,7 @@ var config = {
        wgContentLanguage: 'en'
 };
 
-module( 'jquery.tablesorter', QUnit.newMwEnvironment({ config: config }) );
-
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.tablesorter, '$.tablesorter defined' );
-});
+QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment({ config: config }) );
 
 /**
  * Create an HTML table from an array of row arrays containing text strings.
@@ -22,28 +17,29 @@ test( '-- Initial check', function() {
  * @param {String[][]} data
  * @return jQuery
  */
-var tableCreate = function( header, data ) {
-       var $table = $( '<table class="sortable"><thead></thead><tbody></tbody></table>' ),
+function tableCreate(  header, data ) {
+       var i,
+               $table = $( '<table class="sortable"><thead></thead><tbody></tbody></table>' ),
                $thead = $table.find( 'thead' ),
                $tbody = $table.find( 'tbody' ),
                $tr = $( '<tr>' );
 
-       $.each( header, function( i, str ) {
+       $.each( header, function ( i, str ) {
                var $th = $( '<th>' );
                $th.text( str ).appendTo( $tr );
        });
        $tr.appendTo( $thead );
 
-       for (var i = 0; i < data.length; i++) {
+       for ( i = 0; i < data.length; i++ ) {
                $tr = $( '<tr>' );
-               $.each( data[i], function( j, str ) {
+               $.each( data[i], function ( j, str ) {
                        var $td = $( '<td>' );
                        $td.text( str ).appendTo( $tr );
                });
                $tr.appendTo( $tbody );
        }
        return $table;
-};
+}
 
 /**
  * Extract text from table.
@@ -51,7 +47,7 @@ var tableCreate = function( header, data ) {
  * @param {jQuery} $table
  * @return String[][]
  */
-var tableExtract = function( $table ) {
+function tableExtract( $table ) {
        var data = [];
 
        $table.find( 'tbody' ).find( 'tr' ).each( function( i, tr ) {
@@ -62,7 +58,7 @@ var tableExtract = function( $table ) {
                data.push( row );
        });
        return data;
-};
+}
 
 /**
  * Run a table test by building a table with the given data,
@@ -74,10 +70,8 @@ var tableExtract = function( $table ) {
  * @param {String[][]} expected rows/cols to compare against at end
  * @param {function($table)} callback something to do with the table before we compare
  */
-var tableTest = function( msg, header, data, expected, callback ) {
-       test( msg, function() {
-               expect(1);
-
+function tableTest( msg, header, data, expected, callback ) {
+       QUnit.test( msg, 1, function ( assert ) {
                var $table = tableCreate( header, data );
 
                // Give caller a chance to set up sorting and manipulate the table.
@@ -86,15 +80,18 @@ var tableTest = function( msg, header, data, expected, callback ) {
                // Table sorting is done synchronously; if it ever needs to change back
                // to asynchronous, we'll need a timeout or a callback here.
                var extracted = tableExtract( $table );
-               deepEqual( extracted, expected, msg );
+               assert.deepEqual( extracted, expected, msg );
        });
-};
+}
 
-var reversed = function(arr) {
+function reversed(arr) {
+       // Clone array
        var arr2 = arr.slice(0);
+
        arr2.reverse();
+
        return arr2;
-};
+}
 
 // Sample data set using planets named and their radius
 var header  = [ 'Planet' , 'Radius (km)'],
@@ -115,7 +112,7 @@ tableTest(
        header,
        planets,
        ascendingName,
-       function( $table ) {
+       function ( $table ) {
                $table.tablesorter();
                $table.find( '.headerSort:eq(0)' ).click();
        }
@@ -125,7 +122,7 @@ tableTest(
        header,
        planets,
        ascendingName,
-       function( $table ) {
+       function ( $table ) {
                $table.tablesorter();
                $table.find( '.headerSort:eq(0)' ).click();
        }
@@ -135,7 +132,7 @@ tableTest(
        header,
        planets,
        reversed(ascendingName),
-       function( $table ) {
+       function ( $table ) {
                $table.tablesorter();
                $table.find( '.headerSort:eq(0)' ).click().click();
        }
@@ -145,7 +142,7 @@ tableTest(
        header,
        planets,
        ascendingRadius,
-       function( $table ) {
+       function ( $table ) {
                $table.tablesorter();
                $table.find( '.headerSort:eq(1)' ).click();
        }
@@ -155,7 +152,7 @@ tableTest(
        header,
        planets,
        reversed(ascendingRadius),
-       function( $table ) {
+       function ( $table ) {
                $table.tablesorter();
                $table.find( '.headerSort:eq(1)' ).click().click();
        }
@@ -180,7 +177,7 @@ tableTest(
                ['09.11.2011'],
                ['11.11.2011']
        ],
-       function( $table ) {
+       function ( $table ) {
                mw.config.set( 'wgDefaultDateFormat', 'dmy' );
                mw.config.set( 'wgContentLanguage', 'de' );
 
@@ -206,7 +203,7 @@ tableTest(
                ['09.11.2011'],
                ['11.11.2011']
        ],
-       function( $table ) {
+       function ( $table ) {
                mw.config.set( 'wgDefaultDateFormat', 'mdy' );
 
                $table.tablesorter();
@@ -242,7 +239,7 @@ tableTest(
        ['IP'],
        ipv4,
        ipv4Sorted,
-       function( $table ) {
+       function ( $table ) {
                $table.tablesorter();
                $table.find( '.headerSort:eq(0)' ).click();
        }
@@ -252,7 +249,7 @@ tableTest(
        ['IP'],
        ipv4,
        reversed(ipv4Sorted),
-       function( $table ) {
+       function ( $table ) {
                $table.tablesorter();
                $table.find( '.headerSort:eq(0)' ).click().click();
        }
@@ -287,7 +284,7 @@ tableTest(
        ['Name'],
        umlautWords,
        umlautWordsSorted,
-       function( $table ) {
+       function ( $table ) {
                mw.config.set( 'tableSorterCollation', {
                        'ä': 'ae',
                        'ö': 'oe',
@@ -301,14 +298,14 @@ tableTest(
 );
 
 var planetsRowspan = [["Earth","6051.8"], jupiter, ["Mars","6051.8"], mercury, saturn, venus];
-var planetsRowspanII = [jupiter, mercury, saturn, ['Venus', '6371.0'], venus, ['Venus', '3390.0']];
+var planetsRowspanII = [jupiter, mercury, saturn, venus, ['Venus', '6371.0'], ['Venus', '3390.0']];
 
 tableTest(
        'Basic planet table: same value for multiple rows via rowspan',
        header,
        planets,
        planetsRowspan,
-       function( $table ) {
+       function ( $table ) {
                // Modify the table to have a multiuple-row-spanning cell:
                // - Remove 2nd cell of 4th row, and, 2nd cell or 5th row.
                $table.find( 'tr:eq(3) td:eq(1), tr:eq(4) td:eq(1)' ).remove();
@@ -325,7 +322,7 @@ tableTest(
        header,
        planets,
        planetsRowspanII,
-       function( $table ) {
+       function ( $table ) {
                // Modify the table to have a multiuple-row-spanning cell:
                // - Remove 1st cell of 4th row, and, 1st cell or 5th row.
                $table.find( 'tr:eq(3) td:eq(0), tr:eq(4) td:eq(0)' ).remove();
@@ -360,7 +357,7 @@ tableTest(
        ['date'],
        complexMDYDates,
        complexMDYSorted,
-       function( $table ) {
+       function ( $table ) {
                mw.config.set( 'wgDefaultDateFormat', 'mdy' );
 
                $table.tablesorter();
@@ -385,7 +382,7 @@ tableTest(
 );
 
 /** FIXME: the diff output is not very readeable. */
-test( 'bug 32047 - caption must be before thead', function() {
+QUnit.test( 'bug 32047 - caption must be before thead', function ( assert ) {
        var $table;
        $table = $(
                '<table class="sortable">' +
@@ -398,14 +395,14 @@ test( 'bug 32047 - caption must be before thead', function() {
                );
        $table.tablesorter();
 
-       equals(
+       assert.equal(
                $table.children( ).get( 0 ).nodeName,
                'CAPTION',
                'First element after <thead> must be <caption> (bug 32047)'
        );
 });
 
-test( 'data-sort-value attribute, when available, should override sorting position', function() {
+QUnit.test( 'data-sort-value attribute, when available, should override sorting position', function ( assert ) {
        var $table, data;
 
        // Example 1: All cells except one cell without data-sort-value,
@@ -432,7 +429,7 @@ test( 'data-sort-value attribute, when available, should override sorting positi
                });
        });
 
-       deepEqual( data, [
+       assert.deepEqual( data, [
                {
                        data: 'Apple',
                        text: 'Bird'
@@ -465,8 +462,8 @@ test( 'data-sort-value attribute, when available, should override sorting positi
        $table.tablesorter().find( '.headerSort:eq(0)' ).click();
 
        data = [];
-       $table.find( 'tbody > tr' ).each( function( i, tr ) {
-               $( tr ).find( 'td' ).each( function( i, td ) {
+       $table.find( 'tbody > tr' ).each( function ( i, tr ) {
+               $( tr ).find( 'td' ).each( function ( i, td ) {
                        data.push( {
                                data: $( td ).data( 'sortValue' ),
                                text: $( td ).text()
@@ -474,7 +471,7 @@ test( 'data-sort-value attribute, when available, should override sorting positi
                });
        });
 
-       deepEqual( data, [
+       assert.deepEqual( data, [
                {
                        data: undefined,
                        text: 'B'
@@ -532,7 +529,7 @@ test( 'data-sort-value attribute, when available, should override sorting positi
                });
        });
 
-       deepEqual( data, [
+       assert.deepEqual( data, [
                {
                        data: 1,
                        text: "B"
@@ -587,9 +584,7 @@ tableTest( 'bug 8115: sort numbers with commas (descending)',
 );
 // TODO add numbers sorting tests for bug 8115 with a different language
 
-test( 'bug 32888 - Tables inside a tableheader cell', function() {
-       expect(2);
-
+QUnit.test( 'bug 32888 - Tables inside a tableheader cell', 2, function ( assert ) {
        var $table;
        $table = $(
                '<table class="sortable" id="mw-bug-32888">' +
@@ -602,12 +597,12 @@ test( 'bug 32888 - Tables inside a tableheader cell', function() {
                );
        $table.tablesorter();
 
-       equals(
+       assert.equal(
                $table.find('> thead:eq(0) > tr > th.headerSort').length,
                1,
                'Child tables inside a headercell should not interfere with sortable headers (bug 32888)'
        );
-       equals(
+       assert.equal(
                $( '#mw-bug-32888-2' ).find('th.headerSort').length,
                0,
                'The headers of child tables inside a headercell should not be sortable themselves (bug 32888)'
@@ -618,13 +613,13 @@ test( 'bug 32888 - Tables inside a tableheader cell', function() {
 var correctDateSorting1 = [
        ['01 January 2010'],
        ['05 February 2010'],
-       ['16 January 2010'],
+       ['16 January 2010']
 ];
 
 var correctDateSortingSorted1 = [
        ['01 January 2010'],
        ['16 January 2010'],
-       ['05 February 2010'],
+       ['05 February 2010']
 ];
 
 tableTest(
@@ -643,13 +638,13 @@ tableTest(
 var correctDateSorting2 = [
        ['January 01 2010'],
        ['February 05 2010'],
-       ['January 16 2010'],
+       ['January 16 2010']
 ];
 
 var correctDateSortingSorted2 = [
        ['January 01 2010'],
        ['January 16 2010'],
-       ['February 05 2010'],
+       ['February 05 2010']
 ];
 
 tableTest(
@@ -665,4 +660,4 @@ tableTest(
        }
 );
 
-})( jQuery );
+}( jQuery ) );
index e01f217..f0a210f 100644 (file)
@@ -1,9 +1,4 @@
-module( 'jquery.textSelection', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.fn.textSelection, 'jQuery.fn.textSelection defined' );
-} );
+QUnit.module( 'jquery.textSelection', QUnit.newMwEnvironment() );
 
 /**
  * Test factory for $.fn.textSelection( 'encapsulateText' )
@@ -16,7 +11,7 @@ test( '-- Initial check', function() {
  *   end {int} ending char for selection
  *   params {object} add'l parameters for $().textSelection( 'encapsulateText' )
  */
-var encapsulateTest = function( options ) {
+function encapsulateTest( options ) {
        var opt = $.extend({
                description: '',
                before: {},
@@ -34,12 +29,12 @@ var encapsulateTest = function( options ) {
                selected: null
        }, opt.after);
 
-       test( opt.description, function() {
+       QUnit.test( opt.description, function ( assert ) {
                var tests = 1;
                if ( opt.after.selected !== null ) {
                        tests++;
                }
-               expect( tests );
+               QUnit.expect( tests );
 
                var $textarea = $( '<textarea>' );
 
@@ -65,15 +60,15 @@ var encapsulateTest = function( options ) {
 
                var text = $textarea.textSelection( 'getContents' ).replace( /\r\n/g, "\n" );
 
-               equal( text, opt.after.text, 'Checking full text after encapsulation' );
+               assert.equal( text, opt.after.text, 'Checking full text after encapsulation' );
 
                if (opt.after.selected !== null) {
                        var selected = $textarea.textSelection( 'getSelection' );
-                       equal( selected, opt.after.selected, 'Checking selected text after encapsulation.' );
+                       assert.equal( selected, opt.after.selected, 'Checking selected text after encapsulation.' );
                }
 
        } );
-};
+}
 
 var sig = {
        'pre': "--~~~~"
@@ -86,7 +81,7 @@ var sig = {
        'peri': 'Heading 2',
        'post': ' ==',
        'regex': /^(\s*)(={1,6})(.*?)\2(\s*)$/,
-       'regexReplace': "\$1==\$3==\$4",
+       'regexReplace': "$1==$3==$4",
        'ownline': true
 }, ulist = {
        'pre': "* ",
@@ -222,28 +217,26 @@ encapsulateTest({
 });
 
 
-var caretTest = function(options) {
-       test(options.description, function() {
-               expect(2);
-
-               var $textarea = $( '<textarea>' ).text(options.text);
+function caretTest( options ) {
+       QUnit.test( options.description, 2, function ( assert ) {
+               var $textarea = $( '<textarea>' ).text( options.text );
 
                $( '#qunit-fixture' ).append( $textarea );
 
-               if (options.mode == 'set') {
+               if ( options.mode === 'set' ) {
                        $textarea.textSelection('setSelection', {
                                start: options.start,
                                end: options.end
                        });
                }
 
-               var among = function(actual, expected, message) {
-                       if ($.isArray(expected)) {
-                               ok($.inArray(actual, expected) !== -1 , message + ' (got ' + actual + '; expected one of ' + expected.join(', ') + ')');
+               function among( actual, expected, message ) {
+                       if ( $.isArray( expected ) ) {
+                               assert.ok( $.inArray( actual, expected ) !== -1 , message + ' (got ' + actual + '; expected one of ' + expected.join(', ') + ')' );
                        } else {
-                               equal(actual, expected, message);
+                               assert.equal( actual, expected, message );
                        }
-               };
+               }
 
                var pos = $textarea.textSelection('getCaretPosition', {startAndEnd: true});
                among(pos[0], options.start, 'Caret start should be where we set it.');
index 246b74a..f33edb0 100644 (file)
@@ -9,7 +9,7 @@ QUnit.asyncTest( 'Simple', function ( assert ) {
        api.parse( "'''Hello world'''" )
                .done( function ( html ) {
                        // Html also contains "NewPP report", so only check the first part
-                       assert.equal( html.substr( 0, 26 ), '<p><b>Hello world</b>\n</p>',
+                       assert.equal( html.substr( 0, 25 ), '<p><b>Hello world</b></p>',
                                'Wikitext to html parsing works.'
                        );
 
index d73fe5a..7fe7baf 100644 (file)
@@ -1,13 +1,8 @@
-module( 'mediawiki.special.recentchanges', QUnit.newMwEnvironment() );
+QUnit.module( 'mediawiki.special.recentchanges', QUnit.newMwEnvironment() );
 
-test( '-- Initial check', function() {
-       expect( 2 );
-       ok( mw.special.recentchanges.init, 'mw.special.recentchanges.init defined' );
-       ok( mw.special.recentchanges.updateCheckboxes, 'mw.special.recentchanges.updateCheckboxes defined' );
-       // TODO: verify checkboxes == [ 'nsassociated', 'nsinvert' ]
-});
+// TODO: verify checkboxes == [ 'nsassociated', 'nsinvert' ]
 
-test( '"all" namespace disable checkboxes', function() {
+QUnit.test( '"all" namespace disable checkboxes', function ( assert ) {
 
        // from Special:Recentchanges
        var select =
@@ -33,15 +28,15 @@ test( '"all" namespace disable checkboxes', function() {
        // TODO abstract the double strictEquals
 
        // At first checkboxes are enabled
-       strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
-       strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
+       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
+       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
 
        // Initiate the recentchanges module
        mw.special.recentchanges.init();
 
        // By default
-       strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
-       strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
+       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
+       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
 
        // select second option...
        var $options = $( '#namespace' ).find( 'option' );
@@ -50,8 +45,8 @@ test( '"all" namespace disable checkboxes', function() {
        $( '#namespace' ).change();
 
        // ... and checkboxes should be enabled again
-       strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
-       strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
+       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), false );
+       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), false );
 
        // select first option ( 'all' namespace)...
        $options.eq(1).removeProp( 'selected' );
@@ -59,8 +54,8 @@ test( '"all" namespace disable checkboxes', function() {
        $( '#namespace' ).change();
 
        // ... and checkboxes should now be disabled
-       strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
-       strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
+       assert.strictEqual( $( '#nsinvert' ).prop( 'disabled' ), true );
+       assert.strictEqual( $( '#nsassociated' ).prop( 'disabled' ), true );
 
        // DOM cleanup
        $env.remove();
index 7ff0fb8..6360925 100644 (file)
@@ -55,147 +55,127 @@ var config = {
        "wgCaseSensitiveNamespaces": []
 };
 
-module( 'mediawiki.Title', QUnit.newMwEnvironment({ config: config }) );
+QUnit.module( 'mediawiki.Title', QUnit.newMwEnvironment({ config: config }) );
 
-test( '-- Initial check', function () {
-       expect(1);
-       ok( mw.Title, 'mw.Title defined' );
-});
-
-test( 'Transformation', function () {
-       expect(8);
 
+QUnit.test( 'Transformation', 8, function ( assert ) {
        var title;
 
        title = new mw.Title( 'File:quux pif.jpg' );
-       equal( title.getName(), 'Quux_pif' );
+       assert.equal( title.getName(), 'Quux_pif' );
 
        title = new mw.Title( 'File:Glarg_foo_glang.jpg' );
-       equal( title.getNameText(), 'Glarg foo glang' );
+       assert.equal( title.getNameText(), 'Glarg foo glang' );
 
        title = new mw.Title( 'User:ABC.DEF' );
-       equal( title.toText(), 'User:ABC.DEF' );
-       equal( title.getNamespaceId(), 2 );
-       equal( title.getNamespacePrefix(), 'User:' );
+       assert.equal( title.toText(), 'User:ABC.DEF' );
+       assert.equal( title.getNamespaceId(), 2 );
+       assert.equal( title.getNamespacePrefix(), 'User:' );
 
        title = new mw.Title( 'uSEr:hAshAr' );
-       equal( title.toText(), 'User:HAshAr' );
-       equal( title.getNamespaceId(), 2 );
+       assert.equal( title.toText(), 'User:HAshAr' );
+       assert.equal( title.getNamespaceId(), 2 );
 
        title = new mw.Title( '   MediaWiki:  Foo   bar   .js   ' );
        // Don't ask why, it's the way the backend works. One space is kept of each set
-       equal( title.getName(), 'Foo_bar_.js', "Merge multiple spaces to a single space." );
+       assert.equal( title.getName(), 'Foo_bar_.js', "Merge multiple spaces to a single space." );
 });
 
-test( 'Main text for filename', function () {
-       expect(8);
-
+QUnit.test( 'Main text for filename', 8, function ( assert ) {
        var title = new mw.Title( 'File:foo_bar.JPG' );
 
-       equal( title.getNamespaceId(), 6 );
-       equal( title.getNamespacePrefix(), 'File:' );
-       equal( title.getName(), 'Foo_bar' );
-       equal( title.getNameText(), 'Foo bar' );
-       equal( title.getMain(), 'Foo_bar.JPG' );
-       equal( title.getMainText(), 'Foo bar.JPG' );
-       equal( title.getExtension(), 'JPG' );
-       equal( title.getDotExtension(), '.JPG' );
+       assert.equal( title.getNamespaceId(), 6 );
+       assert.equal( title.getNamespacePrefix(), 'File:' );
+       assert.equal( title.getName(), 'Foo_bar' );
+       assert.equal( title.getNameText(), 'Foo bar' );
+       assert.equal( title.getMain(), 'Foo_bar.JPG' );
+       assert.equal( title.getMainText(), 'Foo bar.JPG' );
+       assert.equal( title.getExtension(), 'JPG' );
+       assert.equal( title.getDotExtension(), '.JPG' );
 });
 
-test( 'Namespace detection and conversion', function () {
-       expect(6);
-
+QUnit.test( 'Namespace detection and conversion', 6, function ( assert ) {
        var title;
 
        title = new mw.Title( 'something.PDF', 6 );
-       equal( title.toString(), 'File:Something.PDF' );
+       assert.equal( title.toString(), 'File:Something.PDF' );
 
        title = new mw.Title( 'NeilK', 3 );
-       equal( title.toString(), 'User_talk:NeilK' );
-       equal( title.toText(), 'User talk:NeilK' );
+       assert.equal( title.toString(), 'User_talk:NeilK' );
+       assert.equal( title.toText(), 'User talk:NeilK' );
 
        title = new mw.Title( 'Frobisher', 100 );
-       equal( title.toString(), 'Penguins:Frobisher' );
+       assert.equal( title.toString(), 'Penguins:Frobisher' );
 
        title = new mw.Title( 'antarctic_waterfowl:flightless_yet_cute.jpg' );
-       equal( title.toString(), 'Penguins:Flightless_yet_cute.jpg' );
+       assert.equal( title.toString(), 'Penguins:Flightless_yet_cute.jpg' );
 
        title = new mw.Title( 'Penguins:flightless_yet_cute.jpg' );
-       equal( title.toString(), 'Penguins:Flightless_yet_cute.jpg' );
+       assert.equal( title.toString(), 'Penguins:Flightless_yet_cute.jpg' );
 });
 
-test( 'Throw error on invalid title', function () {
-       expect(1);
-
-       raises(function () {
+QUnit.test( 'Throw error on invalid title', 1, function ( assert ) {
+       assert.throws(function () {
                var title = new mw.Title( '' );
        }, 'Throw error on empty string' );
 });
 
-test( 'Case-sensivity', function () {
-       expect(3);
-
+QUnit.test( 'Case-sensivity', 3, function ( assert ) {
        var title;
 
        // Default config
        mw.config.set( 'wgCaseSensitiveNamespaces', [] );
 
        title = new mw.Title( 'article' );
-       equal( title.toString(), 'Article', 'Default config: No sensitive namespaces by default. First-letter becomes uppercase' );
+       assert.equal( title.toString(), 'Article', 'Default config: No sensitive namespaces by default. First-letter becomes uppercase' );
 
        // $wgCapitalLinks = false;
        mw.config.set( 'wgCaseSensitiveNamespaces', [0, -2, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15] );
 
        title = new mw.Title( 'article' );
-       equal( title.toString(), 'article', '$wgCapitalLinks=false: Article namespace is sensitive, first-letter case stays lowercase' );
+       assert.equal( title.toString(), 'article', '$wgCapitalLinks=false: Article namespace is sensitive, first-letter case stays lowercase' );
 
        title = new mw.Title( 'john', 2 );
-       equal( title.toString(), 'User:John', '$wgCapitalLinks=false: User namespace is insensitive, first-letter becomes uppercase' );
+       assert.equal( title.toString(), 'User:John', '$wgCapitalLinks=false: User namespace is insensitive, first-letter becomes uppercase' );
 });
 
-test( 'toString / toText', function () {
-       expect(2);
-
+QUnit.test( 'toString / toText', 2, function ( assert ) {
        var title = new mw.Title( 'Some random page' );
 
-       equal( title.toString(), title.getPrefixedDb() );
-       equal( title.toText(), title.getPrefixedText() );
+       assert.equal( title.toString(), title.getPrefixedDb() );
+       assert.equal( title.toText(), title.getPrefixedText() );
 });
 
-test( 'Exists', function () {
-       expect(3);
-
+QUnit.test( 'Exists', 3, function ( assert ) {
        var title;
 
        // Empty registry, checks default to null
 
        title = new mw.Title( 'Some random page', 4 );
-       strictEqual( title.exists(), null, 'Return null with empty existance registry' );
+       assert.strictEqual( title.exists(), null, 'Return null with empty existance registry' );
 
        // Basic registry, checks default to boolean
        mw.Title.exist.set( ['Does_exist', 'User_talk:NeilK', 'Wikipedia:Sandbox_rules'], true );
        mw.Title.exist.set( ['Does_not_exist', 'User:John', 'Foobar'], false );
 
        title = new mw.Title( 'Project:Sandbox rules' );
-       assertTrue( title.exists(), 'Return true for page titles marked as existing' );
+       assert.assertTrue( title.exists(), 'Return true for page titles marked as existing' );
        title = new mw.Title( 'Foobar' );
-       assertFalse( title.exists(), 'Return false for page titles marked as nonexistent' );
+       assert.assertFalse( title.exists(), 'Return false for page titles marked as nonexistent' );
 
 });
 
-test( 'Url', function () {
-       expect(2);
-
+QUnit.test( 'Url', 2, function ( assert ) {
        var title;
 
        // Config
        mw.config.set( 'wgArticlePath', '/wiki/$1' );
 
        title = new mw.Title( 'Foobar' );
-       equal( title.getUrl(), '/wiki/Foobar', 'Basic functionally, toString passing to wikiGetlink' );
+       assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionally, toString passing to wikiGetlink' );
 
        title = new mw.Title( 'John Doe', 3 );
-       equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
+       assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
 });
 
 }() );
\ No newline at end of file
index 9913fb9..b2026c1 100644 (file)
@@ -1,29 +1,23 @@
-module( 'mediawiki.Uri', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function () {
-       expect( 2 );
-
-       // Ensure we have a generic mw.Uri constructor. By default mediawiki.uri,
-       // will use the currrent window ocation as base. But for testing we need
-       // to have a generic one, so that it doens't return false negatives if
-       // we run the test suite from an https server.
-       mw.Uri = mw.UriRelative( 'http://example.org/w/index.php' );
-
-       ok( mw.UriRelative, 'mw.UriRelative defined' );
-       ok( mw.Uri, 'mw.Uri defined' );
-} );
+QUnit.module( 'mediawiki.Uri', QUnit.newMwEnvironment({
+       setup: function () {
+               this.mwUriOrg = mw.Uri;
+               mw.Uri = mw.UriRelative( 'http://example.org/w/index.php' );
+       },
+       teardown: function () {
+               mw.Uri = this.mwUriOrg;
+               delete this.mwUriOrg;
+       }
+}) );
 
 $.each( [true, false], function ( i, strictMode ) {
-       test( 'Basic mw.Uri object test in ' + ( strictMode ? '' : 'non-' ) + 'strict mode for a simple HTTP URI', function () {
+       QUnit.test( 'Basic mw.Uri object test in ' + ( strictMode ? '' : 'non-' ) + 'strict mode for a simple HTTP URI', 2, function ( assert ) {
                var uriString, uri;
-               expect( 2 );
-
                uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
                uri = new mw.Uri( uriString, {
                        strictMode: strictMode
                });
 
-               deepEqual(
+               assert.deepEqual(
                        {
                                protocol: uri.protocol,
                                host: uri.host,
@@ -42,7 +36,7 @@ $.each( [true, false], function ( i, strictMode ) {
                        'basic object properties'
                );
 
-               deepEqual(
+               assert.deepEqual(
                        {
                                userInfo: uri.getUserInfo(),
                                authority: uri.getAuthority(),
@@ -65,13 +59,10 @@ $.each( [true, false], function ( i, strictMode ) {
        });
 });
 
-test( 'Parse an ftp URI correctly with user and password', function () {
-       var uri;
-       expect( 1 );
-
-       uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
+QUnit.test( 'Parse an ftp URI correctly with user and password', 1, function ( assert ) {
+       var uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
 
-       deepEqual(
+       assert.deepEqual(
                {
                        protocol: uri.protocol,
                        user: uri.user,
@@ -96,13 +87,10 @@ test( 'Parse an ftp URI correctly with user and password', function () {
        );
 } );
 
-test( 'Parse a uri with simple querystring', function () {
-       var uri;
-       expect( 1 );
+QUnit.test( 'Parse a uri with simple querystring', 1, function ( assert ) {
+       var uri = new mw.Uri( 'http://www.google.com/?q=uri' );
 
-       uri = new mw.Uri( 'http://www.google.com/?q=uri' );
-
-       deepEqual(
+       assert.deepEqual(
                {
                        protocol: uri.protocol,
                        host: uri.host,
@@ -125,67 +113,60 @@ test( 'Parse a uri with simple querystring', function () {
        );
 } );
 
-test( 'Handle multiple query parameter (overrideKeys on)', function () {
-       var uri;
-       expect( 5 );
-
-       uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+QUnit.test( 'Handle multiple query parameter (overrideKeys on)', 5, function ( assert ) {
+       var uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
                overrideKeys: true
        });
 
-       equal( uri.query.n, '1', 'multiple parameters are parsed' );
-       equal( uri.query.m, 'bar', 'last key overrides earlier keys' );
+       assert.equal( uri.query.n, '1', 'multiple parameters are parsed' );
+       assert.equal( uri.query.m, 'bar', 'last key overrides earlier keys' );
 
        uri.query.n = [ 'x', 'y', 'z' ];
 
        // Verify parts and total length instead of entire string because order
        // of iteration can vary.
-       ok( uri.toString().indexOf( 'm=bar' ), 'toString preserves other values' );
-       ok( uri.toString().indexOf( 'n=x&n=y&n=z' ), 'toString parameter includes all values of an array query parameter' );
-       equal( uri.toString().length, 'http://www.example.com/dir/?m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
+       assert.ok( uri.toString().indexOf( 'm=bar' ), 'toString preserves other values' );
+       assert.ok( uri.toString().indexOf( 'n=x&n=y&n=z' ), 'toString parameter includes all values of an array query parameter' );
+       assert.equal( uri.toString().length, 'http://www.example.com/dir/?m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
 } );
 
-test( 'Handle multiple query parameter (overrideKeys off)', function () {
-       var uri;
-       expect( 9 );
-
-       uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+QUnit.test( 'Handle multiple query parameter (overrideKeys off)', 9, function ( assert ) {
+       var uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
                overrideKeys: false
        });
 
        // Strict comparison so that types are also verified (n should be string '1')
-       strictEqual( uri.query.m.length, 2, 'multi-value query should be an array with 2 items' );
-       strictEqual( uri.query.m[0], 'foo', 'order and value is correct' );
-       strictEqual( uri.query.m[1], 'bar', 'order and value is correct' );
-       strictEqual( uri.query.n, '1', 'n=1 is parsed with the correct value of the expected type' );
+       assert.strictEqual( uri.query.m.length, 2, 'multi-value query should be an array with 2 items' );
+       assert.strictEqual( uri.query.m[0], 'foo', 'order and value is correct' );
+       assert.strictEqual( uri.query.m[1], 'bar', 'order and value is correct' );
+       assert.strictEqual( uri.query.n, '1', 'n=1 is parsed with the correct value of the expected type' );
 
        // Change query values
        uri.query.n = [ 'x', 'y', 'z' ];
 
        // Verify parts and total length instead of entire string because order
        // of iteration can vary.
-       ok( uri.toString().indexOf( 'm=foo&m=bar' ) >= 0, 'toString preserves other values' );
-       ok( uri.toString().indexOf( 'n=x&n=y&n=z' ) >= 0, 'toString parameter includes all values of an array query parameter' );
-       equal( uri.toString().length, 'http://www.example.com/dir/?m=foo&m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
+       assert.ok( uri.toString().indexOf( 'm=foo&m=bar' ) >= 0, 'toString preserves other values' );
+       assert.ok( uri.toString().indexOf( 'n=x&n=y&n=z' ) >= 0, 'toString parameter includes all values of an array query parameter' );
+       assert.equal( uri.toString().length, 'http://www.example.com/dir/?m=foo&m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
 
        // Remove query values
        uri.query.m.splice( 0, 1 );
        delete uri.query.n;
 
-       equal( uri.toString(), 'http://www.example.com/dir/?m=bar', 'deletion properties' );
+       assert.equal( uri.toString(), 'http://www.example.com/dir/?m=bar', 'deletion properties' );
 
        // Remove more query values, leaving an empty array
        uri.query.m.splice( 0, 1 );
-       equal( uri.toString(), 'http://www.example.com/dir/', 'empty array value is ommitted' );
+       assert.equal( uri.toString(), 'http://www.example.com/dir/', 'empty array value is ommitted' );
 } );
 
-test( 'All-dressed URI with everything', function () {
+QUnit.test( 'All-dressed URI with everything', 11, function ( assert ) {
        var uri, queryString, relativePath;
-       expect( 11 );
 
        uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top' );
 
-       deepEqual(
+       assert.deepEqual(
                {
                        protocol: uri.protocol,
                        user: uri.user,
@@ -209,59 +190,55 @@ test( 'All-dressed URI with everything', function () {
                'basic object properties'
        );
 
-       equal( uri.getUserInfo(), 'auth', 'user info' );
+       assert.equal( uri.getUserInfo(), 'auth', 'user info' );
 
-       equal( uri.getAuthority(), 'auth@www.example.com:81', 'authority equal to auth@hostport' );
+       assert.equal( uri.getAuthority(), 'auth@www.example.com:81', 'authority equal to auth@hostport' );
 
-       equal( uri.getHostPort(), 'www.example.com:81', 'hostport equal to host:port' );
+       assert.equal( uri.getHostPort(), 'www.example.com:81', 'hostport equal to host:port' );
 
        queryString = uri.getQueryString();
-       ok( queryString.indexOf( 'q1=0' ) >= 0, 'query param with numbers' );
-       ok( queryString.indexOf( 'test1' ) >= 0, 'query param with null value is included' );
-       ok( queryString.indexOf( 'test1=' ) === -1, 'query param with null value does not generate equals sign' );
-       ok( queryString.indexOf( 'test2=value+%28escaped%29' ) >= 0, 'query param is url escaped' );
+       assert.ok( queryString.indexOf( 'q1=0' ) >= 0, 'query param with numbers' );
+       assert.ok( queryString.indexOf( 'test1' ) >= 0, 'query param with null value is included' );
+       assert.ok( queryString.indexOf( 'test1=' ) === -1, 'query param with null value does not generate equals sign' );
+       assert.ok( queryString.indexOf( 'test2=value+%28escaped%29' ) >= 0, 'query param is url escaped' );
 
        relativePath = uri.getRelativePath();
-       ok( relativePath.indexOf( uri.path ) >= 0, 'path in relative path' );
-       ok( relativePath.indexOf( uri.getQueryString() ) >= 0, 'query string in relative path' );
-       ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragement in relative path' );
+       assert.ok( relativePath.indexOf( uri.path ) >= 0, 'path in relative path' );
+       assert.ok( relativePath.indexOf( uri.getQueryString() ) >= 0, 'query string in relative path' );
+       assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragement in relative path' );
 } );
 
-test( 'Cloning', function () {
+QUnit.test( 'Cloning', 6, function ( assert ) {
        var original, clone;
-       expect( 6 );
 
        original = new mw.Uri( 'http://foo.example.org/index.php?one=1&two=2' );
        clone = original.clone();
 
-       deepEqual( clone, original, 'clone has equivalent properties' );
-       equal( original.toString(), clone.toString(), 'toString matches original' );
+       assert.deepEqual( clone, original, 'clone has equivalent properties' );
+       assert.equal( original.toString(), clone.toString(), 'toString matches original' );
 
-       notStrictEqual( clone, original, 'clone is a different object when compared by reference' );
+       assert.notStrictEqual( clone, original, 'clone is a different object when compared by reference' );
 
        clone.host = 'bar.example.org';
-       notEqual( original.host, clone.host, 'manipulating clone did not effect original' );
-       notEqual( original.toString(), clone.toString(), 'Stringified url no longer matches original' );
+       assert.notEqual( original.host, clone.host, 'manipulating clone did not effect original' );
+       assert.notEqual( original.toString(), clone.toString(), 'Stringified url no longer matches original' );
 
        clone.query.three = 3;
 
-       deepEqual(
+       assert.deepEqual(
                original.query,
                { 'one': '1', 'two': '2' },
                'Properties is deep cloned (bug 37708)'
        );
 } );
 
-test( 'Constructing mw.Uri from plain object', function () {
-       var uri;
-       expect( 3 );
-
-       uri = new mw.Uri({
+QUnit.test( 'Constructing mw.Uri from plain object', 3, function ( assert ) {
+       var uri = new mw.Uri({
                protocol: 'http',
                host: 'www.foo.local',
                path: '/this'
        });
-       equal( uri.toString(), 'http://www.foo.local/this', 'Basic properties' );
+       assert.equal( uri.toString(), 'http://www.foo.local/this', 'Basic properties' );
 
        uri = new mw.Uri({
                protocol: 'http',
@@ -270,9 +247,9 @@ test( 'Constructing mw.Uri from plain object', function () {
                query: { hi: 'there' },
                fragment: 'blah'
        });
-       equal( uri.toString(), 'http://www.foo.local/this?hi=there#blah', 'More complex properties' );
+       assert.equal( uri.toString(), 'http://www.foo.local/this?hi=there#blah', 'More complex properties' );
 
-       raises(
+       assert.throws(
                function () {
                        var uri = new mw.Uri({
                                protocol: 'http',
@@ -286,87 +263,64 @@ test( 'Constructing mw.Uri from plain object', function () {
        );
 } );
 
-test( 'Manipulate properties', function () {
+QUnit.test( 'Manipulate properties', 8, function ( assert ) {
        var uriBase, uri;
-       expect( 8 );
 
        uriBase = new mw.Uri( 'http://en.wiki.local/w/api.php' );
 
        uri = uriBase.clone();
        uri.fragment = 'frag';
-       equal( uri.toString(), 'http://en.wiki.local/w/api.php#frag', 'add a fragment' );
+       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php#frag', 'add a fragment' );
 
        uri = uriBase.clone();
        uri.host = 'fr.wiki.local';
        uri.port = '8080';
-       equal( uri.toString(), 'http://fr.wiki.local:8080/w/api.php', 'change host and port' );
+       assert.equal( uri.toString(), 'http://fr.wiki.local:8080/w/api.php', 'change host and port' );
 
        uri = uriBase.clone();
        uri.query.foo = 'bar';
-       equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'add query arguments' );
+       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'add query arguments' );
 
        delete uri.query.foo;
-       equal( uri.toString(), 'http://en.wiki.local/w/api.php', 'delete query arguments' );
+       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php', 'delete query arguments' );
 
        uri = uriBase.clone();
        uri.query.foo = 'bar';
-       equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'extend query arguments' );
+       assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'extend query arguments' );
        uri.extend({
                foo: 'quux',
                pif: 'paf'
        });
-       ok( uri.toString().indexOf( 'foo=quux' ) >= 0, 'extend query arguments' );
-       ok( uri.toString().indexOf( 'foo=bar' ) === -1, 'extend query arguments' );
-       ok( uri.toString().indexOf( 'pif=paf' ) >= 0 , 'extend query arguments' );
+       assert.ok( uri.toString().indexOf( 'foo=quux' ) >= 0, 'extend query arguments' );
+       assert.ok( uri.toString().indexOf( 'foo=bar' ) === -1, 'extend query arguments' );
+       assert.ok( uri.toString().indexOf( 'pif=paf' ) >= 0 , 'extend query arguments' );
 } );
 
-test( 'Handle protocol-relative URLs', function () {
+QUnit.test( 'Handle protocol-relative URLs', 5, function ( assert ) {
        var UriRel, uri;
-       expect( 5 );
 
        UriRel = mw.UriRelative( 'glork://en.wiki.local/foo.php' );
 
        uri = new UriRel( '//en.wiki.local/w/api.php' );
-       equal( uri.protocol, 'glork', 'create protocol-relative URLs with same protocol as document' );
+       assert.equal( uri.protocol, 'glork', 'create protocol-relative URLs with same protocol as document' );
 
        uri = new UriRel( '/foo.com' );
-       equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in loose mode' );
+       assert.equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in loose mode' );
 
        uri = new UriRel( 'http:/foo.com' );
-       equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in loose mode' );
+       assert.equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in loose mode' );
 
        uri = new UriRel( '/foo.com', true );
-       equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in strict mode' );
+       assert.equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in strict mode' );
 
        uri = new UriRel( 'http:/foo.com', true );
-       equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in strict mode' );
+       assert.equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in strict mode' );
 } );
 
-test( 'Bad calls', function () {
+QUnit.test( 'Bad calls', 3, function ( assert ) {
        var uri;
-       expect( 5 );
-
-       raises(
-               function () {
-                       new mw.Uri();
-               },
-               function ( e ) {
-                       return e.message === 'Bad constructor arguments';
-               },
-               'throw error on no arguments to constructor'
-       );
 
-       raises(
-               function () {
-                       new mw.Uri( '' );
-               },
-               function ( e ) {
-                       return e.message === 'Bad constructor arguments';
-               },
-               'throw error on empty string as argument to constructor'
-       );
-
-       raises(
+       assert.throws(
                function () {
                        new mw.Uri( 'glaswegian penguins' );
                },
@@ -376,7 +330,7 @@ test( 'Bad calls', function () {
                'throw error on non-URI as argument to constructor'
        );
 
-       raises(
+       assert.throws(
                function () {
                        new mw.Uri( 'foo.com/bar/baz', {
                                strictMode: true
@@ -391,12 +345,10 @@ test( 'Bad calls', function () {
        uri = new mw.Uri( 'foo.com/bar/baz', {
                strictMode: false
        });
-       equal( uri.toString(), 'http://foo.com/bar/baz', 'normalize URI without protocol or // in loose mode' );
+       assert.equal( uri.toString(), 'http://foo.com/bar/baz', 'normalize URI without protocol or // in loose mode' );
 });
 
-test( 'bug 35658', function () {
-       expect( 2 );
-
+QUnit.test( 'bug 35658', 2, function ( assert ) {
        var testProtocol, testServer, testPort, testPath, UriClass, uri, href;
 
        testProtocol = 'https://';
@@ -407,11 +359,30 @@ test( 'bug 35658', function () {
        UriClass = mw.UriRelative( testProtocol + testServer + '/some/path/index.html' );
        uri = new UriClass( testPath );
        href = uri.toString();
-       equal( href, testProtocol + testServer + testPath, 'Root-relative URL gets host & protocol supplied' );
+       assert.equal( href, testProtocol + testServer + testPath, 'Root-relative URL gets host & protocol supplied' );
 
        UriClass = mw.UriRelative( testProtocol + testServer + ':' + testPort + '/some/path.php' );
        uri = new UriClass( testPath );
        href = uri.toString();
-       equal( href, testProtocol + testServer + ':' + testPort + testPath, 'Root-relative URL gets host, protocol, and port supplied' );
+       assert.equal( href, testProtocol + testServer + ':' + testPort + testPath, 'Root-relative URL gets host, protocol, and port supplied' );
+
+} );
+
+QUnit.test( 'Constructor falls back to default location', 4, function ( assert ) {
+       var testuri, MyUri, uri;
+
+       testuri = 'http://example.org/w/index.php';
+       MyUri = mw.UriRelative( testuri );
+
+       uri = new MyUri();
+       assert.equal( uri.toString(), testuri, 'no arguments' );
+
+       uri = new MyUri( undefined );
+       assert.equal( uri.toString(), testuri, 'undefined' );
+
+       uri = new MyUri( null );
+       assert.equal( uri.toString(), testuri, 'null' );
 
+       uri = new MyUri( '' );
+       assert.equal( uri.toString(), testuri, 'empty string' );
 } );
index 481a5bb..b8193a9 100644 (file)
@@ -1,23 +1,16 @@
-module( 'mediawiki.jqueryMsg' );
+QUnit.module( 'mediawiki.jqueryMsg' );
 
-test( '-- Initial check', function () {
-       expect( 1 );
-       ok( mw.jqueryMsg, 'mw.jqueryMsg defined' );
-} );
-
-test( 'mw.jqueryMsg Plural', function () {
-       expect( 3 );
+QUnit.test( 'mw.jqueryMsg Plural', 3, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
        mw.messages.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' );
-       equal( parser( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
-       equal( parser( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
-       equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
+       assert.equal( parser( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
+       assert.equal( parser( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
+       assert.equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
 } );
 
 
-test( 'mw.jqueryMsg Gender', function () {
-       expect( 11 );
+QUnit.test( 'mw.jqueryMsg Gender', 11, function ( assert ) {
        // TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
        // TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
        var user = mw.user,
@@ -28,31 +21,31 @@ test( 'mw.jqueryMsg Gender', function () {
        mw.messages.set( 'gender-msg', '$1: {{GENDER:$2|blue|pink|green}}' );
 
        user.options.set( 'gender', 'male' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Bob', 'male' ),
                'Bob: blue',
                'Masculine from string "male"'
        );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Bob', user ),
                'Bob: blue',
                'Masculine from mw.user object'
        );
 
        user.options.set( 'gender', 'unknown' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Foo', user ),
                'Foo: green',
                'Neutral from mw.user object' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Alice', 'female' ),
                'Alice: pink',
                'Feminine from string "female"' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'User' ),
                'User: green',
                'Neutral when no parameter given' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'User', 'unknown' ),
                'User: green',
                'Neutral from string "unknown"'
@@ -60,31 +53,31 @@ test( 'mw.jqueryMsg Gender', function () {
 
        mw.messages.set( 'gender-msg-one-form', '{{GENDER:$1|User}}: $2 {{PLURAL:$2|edit|edits}}' );
 
-       equal(
+       assert.equal(
                parser( 'gender-msg-one-form', 'male', 10 ),
                'User: 10 edits',
                'Gender neutral and plural form'
        );
-       equal(
+       assert.equal(
                parser( 'gender-msg-one-form', 'female', 1 ),
                'User: 1 edit',
                'Gender neutral and singular form'
        );
 
        mw.messages.set( 'gender-msg-lowercase', '{{gender:$1|he|she}} is awesome' );
-       equal(
+       assert.equal(
                parser( 'gender-msg-lowercase', 'male' ),
                'he is awesome',
                'Gender masculine'
        );
-       equal(
+       assert.equal(
                parser( 'gender-msg-lowercase', 'female' ),
                'she is awesome',
                'Gender feminine'
        );
 
        mw.messages.set( 'gender-msg-wrong', '{{gender}} test' );
-       equal(
+       assert.equal(
                parser( 'gender-msg-wrong', 'female' ),
                ' test',
                'Invalid syntax should result in {{gender}} simply being stripped away'
@@ -92,14 +85,13 @@ test( 'mw.jqueryMsg Gender', function () {
 } );
 
 
-test( 'mw.jqueryMsg Grammar', function () {
-       expect( 2 );
+QUnit.test( 'mw.jqueryMsg Grammar', 2, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
        // Assume the grammar form grammar_case_foo is not valid in any language
        mw.messages.set( 'grammar-msg', 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}' );
-       equal( parser( 'grammar-msg' ), 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar Test with sitename' );
+       assert.equal( parser( 'grammar-msg' ), 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar Test with sitename' );
 
        mw.messages.set( 'grammar-msg-wrong-syntax', 'Przeszukaj {{GRAMMAR:grammar_case_xyz}}' );
-       equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
+       assert.equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
 } );
index 24005b6..2baa4f3 100644 (file)
@@ -1,24 +1,24 @@
 /* Some misc JavaScript compatibility tests, just to make sure the environments we run in are consistent */
 
-module( 'mediawiki.jscompat', QUnit.newMwEnvironment() );
+QUnit.module( 'mediawiki.jscompat', QUnit.newMwEnvironment() );
 
-test( 'Variable with Unicode letter in name', function() {
-       expect(3);
+QUnit.test( 'Variable with Unicode letter in name', 3, function ( assert ) {
        var orig = "some token";
        var ŝablono = orig;
-       deepEqual( ŝablono, orig, 'ŝablono' );
-       deepEqual( \u015dablono, orig, '\\u015dablono' );
-       deepEqual( \u015Dablono, orig, '\\u015Dablono' );
+
+       assert.deepEqual( ŝablono, orig, 'ŝablono' );
+       assert.deepEqual( \u015dablono, orig, '\\u015dablono' );
+       assert.deepEqual( \u015Dablono, orig, '\\u015Dablono' );
 });
 
 /*
 // Not that we need this. ;)
 // This fails on IE 6-8
 // Works on IE 9, Firefox 6, Chrome 14
-test( 'Keyword workaround: "if" as variable name using Unicode escapes', function() {
+QUnit.test( 'Keyword workaround: "if" as variable name using Unicode escapes', function ( assert ) {
        var orig = "another token";
        \u0069\u0066 = orig;
-       deepEqual( \u0069\u0066, orig, '\\u0069\\u0066' );
+       assert.deepEqual( \u0069\u0066, orig, '\\u0069\\u0066' );
 });
 */
 
@@ -26,37 +26,37 @@ test( 'Keyword workaround: "if" as variable name using Unicode escapes', functio
 // Not that we need this. ;)
 // This fails on IE 6-9
 // Works on Firefox 6, Chrome 14
-test( 'Keyword workaround: "if" as member variable name using Unicode escapes', function() {
+QUnit.test( 'Keyword workaround: "if" as member variable name using Unicode escapes', function ( assert ) {
        var orig = "another token";
        var foo = {};
        foo.\u0069\u0066 = orig;
-       deepEqual( foo.\u0069\u0066, orig, 'foo.\\u0069\\u0066' );
+       assert.deepEqual( foo.\u0069\u0066, orig, 'foo.\\u0069\\u0066' );
 });
 */
 
-test( 'Stripping of single initial newline from textarea\'s literal contents (bug 12130)', function() {
+QUnit.test( 'Stripping of single initial newline from textarea\'s literal contents (bug 12130)', function ( assert ) {
        var maxn = 4;
-       expect(maxn * 2);
+       QUnit.expect( maxn * 2 );
 
-       var repeat = function(str, n) {
-               if (n <= 0) {
+       function repeat( str, n ) {
+               if ( n <= 0 ) {
                        return '';
                } else {
-                       var out = Array(n);
-                       for (var i = 0; i < n; i++) {
+                       var out = new Array(n);
+                       for ( var i = 0; i < n; i++ ) {
                                out[i] = str;
                        }
                        return out.join('');
                }
-       };
+       }
 
-       for (var n = 0; n < maxn; n++) {
+       for ( var n = 0; n < maxn; n++ ) {
                var expected = repeat('\n', n) + 'some text';
 
                var $textarea = $('<textarea>\n' + expected + '</textarea>');
-               equal($textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + (n + 1) + ')');
+               assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + (n + 1) + ')' );
 
                var $textarea2 = $('<textarea>').val(expected);
-               equal($textarea2.val(), expected, 'Expecting ' + n + ' newlines (from DOM set with ' + n + ')');
+               assert.equal( $textarea2.val(), expected, 'Expecting ' + n + ' newlines (from DOM set with ' + n + ')' );
        }
 });
index 00fcf38..58e56ad 100644 (file)
@@ -1,24 +1,21 @@
-module( 'mediawiki', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(8);
-
-       ok( window.jQuery, 'jQuery defined' );
-       ok( window.$, '$j defined' );
-       ok( window.$j, '$j defined' );
-       strictEqual( window.$, window.jQuery, '$ alias to jQuery' );
-       strictEqual( window.$j, window.jQuery, '$j alias to jQuery' );
-
-       ok( window.mediaWiki, 'mediaWiki defined' );
-       ok( window.mw, 'mw defined' );
-       strictEqual( window.mw, window.mediaWiki, 'mw alias to mediaWiki' );
+QUnit.module( 'mediawiki', QUnit.newMwEnvironment() );
+
+QUnit.test( '-- Initial check', 8, function ( assert ) {
+       assert.ok( window.jQuery, 'jQuery defined' );
+       assert.ok( window.$, '$j defined' );
+       assert.ok( window.$j, '$j defined' );
+       assert.strictEqual( window.$, window.jQuery, '$ alias to jQuery' );
+       assert.strictEqual( window.$j, window.jQuery, '$j alias to jQuery' );
+
+       assert.ok( window.mediaWiki, 'mediaWiki defined' );
+       assert.ok( window.mw, 'mw defined' );
+       assert.strictEqual( window.mw, window.mediaWiki, 'mw alias to mediaWiki' );
 });
 
-test( 'mw.Map', function() {
+QUnit.test( 'mw.Map', 17, function ( assert ) {
        var arry, conf, funky, globalConf, nummy, someValues;
-       expect(17);
 
-       ok( mw.Map, 'mw.Map defined' );
+       assert.ok( mw.Map, 'mw.Map defined' );
 
        conf = new mw.Map();
        // Dummy variables
@@ -27,14 +24,14 @@ test( 'mw.Map', function() {
        nummy = 7;
 
        // Tests for input validation
-       strictEqual( conf.get( 'inexistantKey' ), null, 'Map.get returns null if selection was a string and the key was not found' );
-       strictEqual( conf.set( 'myKey', 'myValue' ), true, 'Map.set returns boolean true if a value was set for a valid key string' );
-       strictEqual( conf.set( funky, 'Funky' ), false, 'Map.set returns boolean false if key was invalid (Function)' );
-       strictEqual( conf.set( arry, 'Arry' ), false, 'Map.set returns boolean false if key was invalid (Array)' );
-       strictEqual( conf.set( nummy, 'Nummy' ), false, 'Map.set returns boolean false if key was invalid (Number)' );
-       equal( conf.get( 'myKey' ), 'myValue', 'Map.get returns a single value value correctly' );
-       strictEqual( conf.get( nummy ), null, 'Map.get ruturns null if selection was invalid (Number)' );
-       strictEqual( conf.get( funky ), null, 'Map.get ruturns null if selection was invalid (Function)' );
+       assert.strictEqual( conf.get( 'inexistantKey' ), null, 'Map.get returns null if selection was a string and the key was not found' );
+       assert.strictEqual( conf.set( 'myKey', 'myValue' ), true, 'Map.set returns boolean true if a value was set for a valid key string' );
+       assert.strictEqual( conf.set( funky, 'Funky' ), false, 'Map.set returns boolean false if key was invalid (Function)' );
+       assert.strictEqual( conf.set( arry, 'Arry' ), false, 'Map.set returns boolean false if key was invalid (Array)' );
+       assert.strictEqual( conf.set( nummy, 'Nummy' ), false, 'Map.set returns boolean false if key was invalid (Number)' );
+       assert.equal( conf.get( 'myKey' ), 'myValue', 'Map.get returns a single value value correctly' );
+       assert.strictEqual( conf.get( nummy ), null, 'Map.get ruturns null if selection was invalid (Number)' );
+       assert.strictEqual( conf.get( funky ), null, 'Map.get ruturns null if selection was invalid (Function)' );
 
        // Multiple values at once
        someValues = {
@@ -42,31 +39,31 @@ test( 'mw.Map', function() {
                'lorem': 'ipsum',
                'MediaWiki': true
        };
-       strictEqual( conf.set( someValues ), true, 'Map.set returns boolean true if multiple values were set by passing an object' );
-       deepEqual( conf.get( ['foo', 'lorem'] ), {
+       assert.strictEqual( conf.set( someValues ), true, 'Map.set returns boolean true if multiple values were set by passing an object' );
+       assert.deepEqual( conf.get( ['foo', 'lorem'] ), {
                'foo': 'bar',
                'lorem': 'ipsum'
        }, 'Map.get returns multiple values correctly as an object' );
 
-       deepEqual( conf.get( ['foo', 'notExist'] ), {
+       assert.deepEqual( conf.get( ['foo', 'notExist'] ), {
                'foo': 'bar',
                'notExist': null
        }, 'Map.get return includes keys that were not found as null values' );
 
-       strictEqual( conf.exists( 'foo' ), true, 'Map.exists returns boolean true if a key exists' );
-       strictEqual( conf.exists( 'notExist' ), false, 'Map.exists returns boolean false if a key does not exists' );
+       assert.strictEqual( conf.exists( 'foo' ), true, 'Map.exists returns boolean true if a key exists' );
+       assert.strictEqual( conf.exists( 'notExist' ), false, 'Map.exists returns boolean false if a key does not exists' );
 
        // Interacting with globals and accessing the values object
-       strictEqual( conf.get(), conf.values, 'Map.get returns the entire values object by reference (if called without arguments)' );
+       assert.strictEqual( conf.get(), conf.values, 'Map.get returns the entire values object by reference (if called without arguments)' );
 
        conf.set( 'globalMapChecker', 'Hi' );
 
-       ok( false === 'globalMapChecker' in window, 'new mw.Map did not store its values in the global window object by default' );
+       assert.ok( false === 'globalMapChecker' in window, 'new mw.Map did not store its values in the global window object by default' );
 
        globalConf = new mw.Map( true );
        globalConf.set( 'anotherGlobalMapChecker', 'Hello' );
 
-       ok( 'anotherGlobalMapChecker' in window, 'new mw.Map( true ) did store its values in the global window object' );
+       assert.ok( 'anotherGlobalMapChecker' in window, 'new mw.Map( true ) did store its values in the global window object' );
 
        // Whitelist this global variable for QUnit's 'noglobal' mode
        if ( QUnit.config.noglobals ) {
@@ -74,87 +71,78 @@ test( 'mw.Map', function() {
        }
 });
 
-test( 'mw.config', function() {
-       expect(1);
-
-       ok( mw.config instanceof mw.Map, 'mw.config instance of mw.Map' );
+QUnit.test( 'mw.config', 1, function ( assert ) {
+       assert.ok( mw.config instanceof mw.Map, 'mw.config instance of mw.Map' );
 });
 
-test( 'mw.message & mw.messages', function() {
+QUnit.test( 'mw.message & mw.messages', 20, function ( assert ) {
        var goodbye, hello, pluralMessage;
-       expect(20);
 
-       ok( mw.messages, 'messages defined' );
-       ok( mw.messages instanceof mw.Map, 'mw.messages instance of mw.Map' );
-       ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
+       assert.ok( mw.messages, 'messages defined' );
+       assert.ok( mw.messages instanceof mw.Map, 'mw.messages instance of mw.Map' );
+       assert.ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
 
        hello = mw.message( 'hello' );
 
-       equal( hello.format, 'plain', 'Message property "format" defaults to "plain"' );
-       strictEqual( hello.map, mw.messages, 'Message property "map" defaults to the global instance in mw.messages' );
-       equal( hello.key, 'hello', 'Message property "key" (currect key)' );
-       deepEqual( hello.parameters, [], 'Message property "parameters" defaults to an empty array' );
+       assert.equal( hello.format, 'plain', 'Message property "format" defaults to "plain"' );
+       assert.strictEqual( hello.map, mw.messages, 'Message property "map" defaults to the global instance in mw.messages' );
+       assert.equal( hello.key, 'hello', 'Message property "key" (currect key)' );
+       assert.deepEqual( hello.parameters, [], 'Message property "parameters" defaults to an empty array' );
 
        // Todo
-       ok( hello.params, 'Message prototype "params"' );
+       assert.ok( hello.params, 'Message prototype "params"' );
 
        hello.format = 'plain';
-       equal( hello.toString(), 'Hello <b>awesome</b> world', 'Message.toString returns the message as a string with the current "format"' );
+       assert.equal( hello.toString(), 'Hello <b>awesome</b> world', 'Message.toString returns the message as a string with the current "format"' );
 
-       equal( hello.escaped(), 'Hello &lt;b&gt;awesome&lt;/b&gt; world', 'Message.escaped returns the escaped message' );
-       equal( hello.format, 'escaped', 'Message.escaped correctly updated the "format" property' );
+       assert.equal( hello.escaped(), 'Hello &lt;b&gt;awesome&lt;/b&gt; world', 'Message.escaped returns the escaped message' );
+       assert.equal( hello.format, 'escaped', 'Message.escaped correctly updated the "format" property' );
 
        hello.parse();
-       equal( hello.format, 'parse', 'Message.parse correctly updated the "format" property' );
+       assert.equal( hello.format, 'parse', 'Message.parse correctly updated the "format" property' );
 
        hello.plain();
-       equal( hello.format, 'plain', 'Message.plain correctly updated the "format" property' );
+       assert.equal( hello.format, 'plain', 'Message.plain correctly updated the "format" property' );
 
-       strictEqual( hello.exists(), true, 'Message.exists returns true for existing messages' );
+       assert.strictEqual( hello.exists(), true, 'Message.exists returns true for existing messages' );
 
        goodbye = mw.message( 'goodbye' );
-       strictEqual( goodbye.exists(), false, 'Message.exists returns false for nonexistent messages' );
+       assert.strictEqual( goodbye.exists(), false, 'Message.exists returns false for nonexistent messages' );
 
-       equal( goodbye.plain(), '<goodbye>', 'Message.toString returns plain <key> if format is "plain" and key does not exist' );
+       assert.equal( goodbye.plain(), '<goodbye>', 'Message.toString returns plain <key> if format is "plain" and key does not exist' );
        // bug 30684
-       equal( goodbye.escaped(), '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if format is "escaped" and key does not exist' );
+       assert.equal( goodbye.escaped(), '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if format is "escaped" and key does not exist' );
 
-       ok( mw.messages.set( 'pluraltestmsg', 'There {{PLURAL:$1|is|are}} $1 {{PLURAL:$1|result|results}}' ), 'mw.messages.set: Register' );
+       assert.ok( mw.messages.set( 'pluraltestmsg', 'There {{PLURAL:$1|is|are}} $1 {{PLURAL:$1|result|results}}' ), 'mw.messages.set: Register' );
        pluralMessage = mw.message( 'pluraltestmsg' , 6 );
-       equal( pluralMessage.plain(), 'There are 6 results', 'plural get resolved when format is plain' );
-       equal( pluralMessage.parse(), 'There are 6 results', 'plural get resolved when format is parse' );
+       assert.equal( pluralMessage.plain(), 'There are 6 results', 'plural get resolved when format is plain' );
+       assert.equal( pluralMessage.parse(), 'There are 6 results', 'plural get resolved when format is parse' );
 
 });
 
-test( 'mw.msg', function() {
-       expect(11);
+QUnit.test( 'mw.msg', 11, function ( assert ) {
+       assert.ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
+       assert.equal( mw.msg( 'hello' ), 'Hello <b>awesome</b> world', 'Gets message with default options (existing message)' );
+       assert.equal( mw.msg( 'goodbye' ), '<goodbye>', 'Gets message with default options (nonexistent message)' );
 
-       ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
-       equal( mw.msg( 'hello' ), 'Hello <b>awesome</b> world', 'Gets message with default options (existing message)' );
-       equal( mw.msg( 'goodbye' ), '<goodbye>', 'Gets message with default options (nonexistent message)' );
+       assert.ok( mw.messages.set( 'plural-item' , 'Found $1 {{PLURAL:$1|item|items}}' ) );
+       assert.equal( mw.msg( 'plural-item', 5 ), 'Found 5 items', 'Apply plural for count 5' );
+       assert.equal( mw.msg( 'plural-item', 0 ), 'Found 0 items', 'Apply plural for count 0' );
+       assert.equal( mw.msg( 'plural-item', 1 ), 'Found 1 item', 'Apply plural for count 1' );
 
-       ok( mw.messages.set( 'plural-item' , 'Found $1 {{PLURAL:$1|item|items}}' ) );
-       equal( mw.msg( 'plural-item', 5 ), 'Found 5 items', 'Apply plural for count 5' );
-       equal( mw.msg( 'plural-item', 0 ), 'Found 0 items', 'Apply plural for count 0' );
-       equal( mw.msg( 'plural-item', 1 ), 'Found 1 item', 'Apply plural for count 1' );
-
-       ok( mw.messages.set('gender-plural-msg' , '{{GENDER:$1|he|she|they}} {{PLURAL:$2|is|are}} awesome' ) );
-       equal( mw.msg( 'gender-plural-msg', 'male', 1 ), 'he is awesome', 'Gender test for male, plural count 1' );
-       equal( mw.msg( 'gender-plural-msg', 'female', '1' ), 'she is awesome', 'Gender test for female, plural count 1' );
-       equal( mw.msg( 'gender-plural-msg', 'unknown', 10 ), 'they are awesome', 'Gender test for neutral, plural count 10' );
+       assert.ok( mw.messages.set('gender-plural-msg' , '{{GENDER:$1|he|she|they}} {{PLURAL:$2|is|are}} awesome' ) );
+       assert.equal( mw.msg( 'gender-plural-msg', 'male', 1 ), 'he is awesome', 'Gender test for male, plural count 1' );
+       assert.equal( mw.msg( 'gender-plural-msg', 'female', '1' ), 'she is awesome', 'Gender test for female, plural count 1' );
+       assert.equal( mw.msg( 'gender-plural-msg', 'unknown', 10 ), 'they are awesome', 'Gender test for neutral, plural count 10' );
 
 });
 
-test( 'mw.loader', function() {
+QUnit.asyncTest( 'mw.loader', 2, function ( assert ) {
        var isAwesomeDone;
-       expect(2);
-
-       // Async ahead
-       stop();
 
        mw.loader.testCallback = function () {
-               start();
-               strictEqual( isAwesomeDone, undefined, 'Implementing module is.awesome: isAwesomeDone should still be undefined');
+               QUnit.start();
+               assert.strictEqual( isAwesomeDone, undefined, 'Implementing module is.awesome: isAwesomeDone should still be undefined');
                isAwesomeDone = true;
        };
 
@@ -164,21 +152,17 @@ test( 'mw.loader', function() {
 
                // /sample/awesome.js declares the "mw.loader.testCallback" function
                // which contains a call to start() and ok()
-               strictEqual( isAwesomeDone, true, "test.callback module should've caused isAwesomeDone to be true" );
+               assert.strictEqual( isAwesomeDone, true, "test.callback module should've caused isAwesomeDone to be true" );
                delete mw.loader.testCallback;
 
        }, function () {
-               start();
-               ok( false, 'Error callback fired while loader.using "test.callback" module' );
+               QUnit.start();
+               assert.ok( false, 'Error callback fired while loader.using "test.callback" module' );
        });
 });
 
-test( 'mw.loader.implement', function () {
+QUnit.asyncTest( 'mw.loader.implement', 5, function ( assert ) {
        var isJsExecuted, $element, styleTestUrl;
-       expect(5);
-
-       // Async ahead
-       stop();
 
        styleTestUrl = QUnit.fixurl(
                mw.config.get( 'wgScriptPath' )
@@ -195,14 +179,14 @@ test( 'mw.loader.implement', function () {
                function () {
                        var styleTestTimeout, styleTestStart, styleTestSince;
 
-                       strictEqual( isJsExecuted, undefined, 'javascript not executed multiple times' );
+                       assert.strictEqual( isJsExecuted, undefined, 'javascript not executed multiple times' );
                        isJsExecuted = true;
 
-                       equal( mw.loader.getState( 'test.implement' ), 'loaded', 'module state is "loaded" while implement() is executing javascript' );
+                       assert.equal( mw.loader.getState( 'test.implement' ), 'ready', 'module state is "ready" while implement() is executing javascript' );
 
                        $element = $( '<div class="mw-test-loaderimplement">Foo bar</div>' ).appendTo( '#qunit-fixture' );
 
-                       equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'Messages are loaded before javascript execution' );
+                       assert.equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'Messages are loaded before javascript execution' );
 
                        // The @import test. This is, in a way, also an open bug for ResourceLoader
                        // ("execute js after styles are loaded"), but browsers don't offer a way to
@@ -225,16 +209,16 @@ test( 'mw.loader.implement', function () {
                                styleTestSince = new Date().getTime() - styleTestStart;
                                // If it is passing or if we timed out, run the real test and stop the loop
                                if ( isCssImportApplied() || styleTestSince > styleTestTimeout ) {
-                                       equal( $element.css( 'float' ), 'right',
+                                       assert.equal( $element.css( 'float' ), 'right',
                                                'CSS stylesheet via @import was applied (after ' + styleTestSince + 'ms) (bug 34669). ("float: right")'
                                        );
 
-                                       equal( $element.css( 'text-align' ),'center',
+                                       assert.equal( $element.css( 'text-align' ),'center',
                                                'CSS styles after the @import are working ("text-align: center")'
                                        );
 
                                        // Async done
-                                       start();
+                                       QUnit.start();
 
                                        return;
                                }
@@ -261,80 +245,77 @@ test( 'mw.loader.implement', function () {
 
 });
 
-test( 'mw.loader erroneous indirect dependency', function() {
-       expect( 3 );
+QUnit.test( 'mw.loader erroneous indirect dependency', 3, function ( assert ) {
        mw.loader.register( [
                ['test.module1', '0'],
                ['test.module2', '0', ['test.module1']],
                ['test.module3', '0', ['test.module2']]
        ] );
-       mw.loader.implement( 'test.module1', function() { throw new Error( 'expected' ); }, {}, {} );
-       strictEqual( mw.loader.getState( 'test.module1' ), 'error', 'Expected "error" state for test.module1' );
-       strictEqual( mw.loader.getState( 'test.module2' ), 'error', 'Expected "error" state for test.module2' );
-       strictEqual( mw.loader.getState( 'test.module3' ), 'error', 'Expected "error" state for test.module3' );
+       mw.loader.implement( 'test.module1', function () { throw new Error( 'expected' ); }, {}, {} );
+       assert.strictEqual( mw.loader.getState( 'test.module1' ), 'error', 'Expected "error" state for test.module1' );
+       assert.strictEqual( mw.loader.getState( 'test.module2' ), 'error', 'Expected "error" state for test.module2' );
+       assert.strictEqual( mw.loader.getState( 'test.module3' ), 'error', 'Expected "error" state for test.module3' );
 } );
 
-test( 'mw.loader out-of-order implementation', function() {
-       expect( 9 );
+QUnit.test( 'mw.loader out-of-order implementation', 9, function ( assert ) {
        mw.loader.register( [
                ['test.module4', '0'],
                ['test.module5', '0', ['test.module4']],
                ['test.module6', '0', ['test.module5']]
        ] );
-       mw.loader.implement( 'test.module4', function() {}, {}, {} );
-       strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
-       strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
-       strictEqual( mw.loader.getState( 'test.module6' ), 'registered', 'Expected "registered" state for test.module6' );
-       mw.loader.implement( 'test.module6', function() {}, {}, {} );
-       strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
-       strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
-       strictEqual( mw.loader.getState( 'test.module6' ), 'loaded', 'Expected "loaded" state for test.module6' );
+       mw.loader.implement( 'test.module4', function () {}, {}, {} );
+       assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
+       assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
+       assert.strictEqual( mw.loader.getState( 'test.module6' ), 'registered', 'Expected "registered" state for test.module6' );
+       mw.loader.implement( 'test.module6', function () {}, {}, {} );
+       assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
+       assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
+       assert.strictEqual( mw.loader.getState( 'test.module6' ), 'loaded', 'Expected "loaded" state for test.module6' );
        mw.loader.implement( 'test.module5', function() {}, {}, {} );
-       strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
-       strictEqual( mw.loader.getState( 'test.module5' ), 'ready', 'Expected "ready" state for test.module5' );
-       strictEqual( mw.loader.getState( 'test.module6' ), 'ready', 'Expected "ready" state for test.module6' );
+       assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
+       assert.strictEqual( mw.loader.getState( 'test.module5' ), 'ready', 'Expected "ready" state for test.module5' );
+       assert.strictEqual( mw.loader.getState( 'test.module6' ), 'ready', 'Expected "ready" state for test.module6' );
 } );
 
-test( 'mw.loader missing dependency', function() {
-       expect( 13 );
+QUnit.test( 'mw.loader missing dependency', 13, function ( assert ) {
        mw.loader.register( [
                ['test.module7', '0'],
                ['test.module8', '0', ['test.module7']],
                ['test.module9', '0', ['test.module8']]
        ] );
-       mw.loader.implement( 'test.module8', function() {}, {}, {} );
-       strictEqual( mw.loader.getState( 'test.module7' ), 'registered', 'Expected "registered" state for test.module7' );
-       strictEqual( mw.loader.getState( 'test.module8' ), 'loaded', 'Expected "loaded" state for test.module8' );
-       strictEqual( mw.loader.getState( 'test.module9' ), 'registered', 'Expected "registered" state for test.module9' );
+       mw.loader.implement( 'test.module8', function () {}, {}, {} );
+       assert.strictEqual( mw.loader.getState( 'test.module7' ), 'registered', 'Expected "registered" state for test.module7' );
+       assert.strictEqual( mw.loader.getState( 'test.module8' ), 'loaded', 'Expected "loaded" state for test.module8' );
+       assert.strictEqual( mw.loader.getState( 'test.module9' ), 'registered', 'Expected "registered" state for test.module9' );
        mw.loader.state( 'test.module7', 'missing' );
-       strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
-       strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
-       strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
-       mw.loader.implement( 'test.module9', function() {}, {}, {} );
-       strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
-       strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
-       strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
+       assert.strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
+       assert.strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
+       assert.strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
+       mw.loader.implement( 'test.module9', function () {}, {}, {} );
+       assert.strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
+       assert.strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
+       assert.strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
        mw.loader.using(
                ['test.module7'],
-               function() {
-                       ok( false, "Success fired despite missing dependency" );
-                       ok( true , "QUnit expected() count dummy" );
+               function () {
+                       assert.ok( false, "Success fired despite missing dependency" );
+                       assert.ok( true , "QUnit expected() count dummy" );
                },
-               function( e, dependencies ) {
-                       strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
-                       deepEqual( dependencies, ['test.module7'], 'Error callback called with module test.module7' );
+               function ( e, dependencies ) {
+                       assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
+                       assert.deepEqual( dependencies, ['test.module7'], 'Error callback called with module test.module7' );
                }
        );
        mw.loader.using(
                ['test.module9'],
-               function() {
-                       ok( false, "Success fired despite missing dependency" );
-                       ok( true , "QUnit expected() count dummy" );
+               function () {
+                       assert.ok( false, "Success fired despite missing dependency" );
+                       assert.ok( true , "QUnit expected() count dummy" );
                },
-               function( e, dependencies ) {
-                       strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
+               function ( e, dependencies ) {
+                       assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
                        dependencies.sort();
-                       deepEqual(
+                       assert.deepEqual(
                                dependencies,
                                ['test.module7', 'test.module8', 'test.module9'],
                                'Error callback called with all three modules as dependencies'
@@ -343,9 +324,7 @@ test( 'mw.loader missing dependency', function() {
        );
 } );
 
-test( 'mw.loader dependency handling', function () {
-       expect( 5 );
-
+QUnit.asyncTest( 'mw.loader dependency handling', 5, function ( assert ) {
        mw.loader.addSource(
                'testloader',
                {
@@ -361,62 +340,52 @@ test( 'mw.loader dependency handling', function () {
        ] );
 
        function verifyModuleStates() {
-               equal( mw.loader.getState( 'testMissing' ), 'missing', 'Module not known to server must have state "missing"' );
-               equal( mw.loader.getState( 'testUsesMissing' ), 'error', 'Module with missing dependency must have state "error"' );
-               equal( mw.loader.getState( 'testUsesNestedMissing' ), 'error', 'Module with indirect missing dependency must have state "error"' );
+               assert.equal( mw.loader.getState( 'testMissing' ), 'missing', 'Module not known to server must have state "missing"' );
+               assert.equal( mw.loader.getState( 'testUsesMissing' ), 'error', 'Module with missing dependency must have state "error"' );
+               assert.equal( mw.loader.getState( 'testUsesNestedMissing' ), 'error', 'Module with indirect missing dependency must have state "error"' );
        }
 
-       stop();
-
        mw.loader.using( ['testUsesNestedMissing'],
                function () {
-                       ok( false, 'Error handler should be invoked.' );
-                       ok( true ); // Dummy to reach QUnit expect()
+                       assert.ok( false, 'Error handler should be invoked.' );
+                       assert.ok( true ); // Dummy to reach QUnit expect()
 
                        verifyModuleStates();
 
-                       start();
+                       QUnit.start();
                },
                function ( e, badmodules ) {
-                       ok( true, 'Error handler should be invoked.' );
+                       assert.ok( true, 'Error handler should be invoked.' );
                        // As soon as server spits out state('testMissing', 'missing');
                        // it will bubble up and trigger the error callback.
                        // Therefor the badmodules array is not testUsesMissing or testUsesNestedMissing.
-                       deepEqual( badmodules, ['testMissing'], 'Bad modules as expected.' );
+                       assert.deepEqual( badmodules, ['testMissing'], 'Bad modules as expected.' );
 
                        verifyModuleStates();
 
-                       start();
+                       QUnit.start();
                }
        );
 } );
 
-test( 'mw.loader bug29107' , function () {
-       expect(2);
-
+QUnit.asyncTest( 'mw.loader bug29107' , 2, function ( assert ) {
        // Message doesn't exist already
-       ok( !mw.messages.exists( 'bug29107' ) );
-
-       // Async! Failure in this test may lead to neither the success nor error callbacks getting called.
-       // Due to QUnit's timeout feauture we won't hang here forever if this happends.
-       stop();
+       assert.ok( !mw.messages.exists( 'bug29107' ) );
 
        mw.loader.implement( 'bug29107.messages-only', [], {}, {'bug29107': 'loaded'} );
        mw.loader.using( 'bug29107.messages-only', function() {
-               start();
-               ok( mw.messages.exists( 'bug29107' ), 'Bug 29107: messages-only module should implement ok' );
+               QUnit.start();
+               assert.ok( mw.messages.exists( 'bug29107' ), 'Bug 29107: messages-only module should implement ok' );
        }, function() {
-               start();
-               ok( false, 'Error callback fired while implementing "bug29107.messages-only" module' );
+               QUnit.start();
+               assert.ok( false, 'Error callback fired while implementing "bug29107.messages-only" module' );
        });
 });
 
-test( 'mw.loader.bug30825', function() {
+QUnit.asyncTest( 'mw.loader.bug30825', 2, function ( assert ) {
        // This bug was actually already fixed in 1.18 and later when discovered in 1.17.
        // Test is for regressions!
 
-       expect(2);
-
        // Forge an URL to the test callback script
        var target = QUnit.fixurl(
                mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/qunitOkCall.js'
@@ -425,33 +394,31 @@ test( 'mw.loader.bug30825', function() {
        // Confirm that mw.loader.load() works with protocol-relative URLs
        target = target.replace( /https?:/, '' );
 
-       equal( target.substr( 0, 2 ), '//',
+       assert.equal( target.substr( 0, 2 ), '//',
                'URL must be relative to test relative URLs!'
        );
 
        // Async!
-       stop();
+       // The target calls QUnit.start
        mw.loader.load( target );
 });
 
-test( 'mw.html', function () {
-       expect(13);
-
-       raises( function () {
+QUnit.test( 'mw.html', 13, function ( assert ) {
+       assert.throws( function () {
                mw.html.escape();
        }, TypeError, 'html.escape throws a TypeError if argument given is not a string' );
 
-       equal( mw.html.escape( '<mw awesome="awesome" value=\'test\' />' ),
+       assert.equal( mw.html.escape( '<mw awesome="awesome" value=\'test\' />' ),
                '&lt;mw awesome=&quot;awesome&quot; value=&#039;test&#039; /&gt;', 'escape() escapes special characters to html entities' );
 
-       equal( mw.html.element(),
+       assert.equal( mw.html.element(),
                '<undefined/>', 'element() always returns a valid html string (even without arguments)' );
 
-       equal( mw.html.element( 'div' ), '<div/>', 'element() Plain DIV (simple)' );
+       assert.equal( mw.html.element( 'div' ), '<div/>', 'element() Plain DIV (simple)' );
 
-       equal( mw.html.element( 'div', {}, '' ), '<div></div>', 'element() Basic DIV (simple)' );
+       assert.equal( mw.html.element( 'div', {}, '' ), '<div></div>', 'element() Basic DIV (simple)' );
 
-       equal(
+       assert.equal(
                mw.html.element(
                        'div', {
                                id: 'foobar'
@@ -460,12 +427,12 @@ test( 'mw.html', function () {
                '<div id="foobar"/>',
                'html.element DIV (attribs)' );
 
-       equal( mw.html.element( 'p', null, 12 ), '<p>12</p>', 'Numbers are valid content and should be casted to a string' );
+       assert.equal( mw.html.element( 'p', null, 12 ), '<p>12</p>', 'Numbers are valid content and should be casted to a string' );
 
-       equal( mw.html.element( 'p', { title: 12 }, '' ), '<p title="12"></p>', 'Numbers are valid attribute values' );
+       assert.equal( mw.html.element( 'p', { title: 12 }, '' ), '<p title="12"></p>', 'Numbers are valid attribute values' );
 
        // Example from https://www.mediawiki.org/wiki/ResourceLoader/Default_modules#mediaWiki.html
-       equal(
+       assert.equal(
                mw.html.element(
                        'div',
                        {},
@@ -477,7 +444,7 @@ test( 'mw.html', function () {
                'Raw inclusion of another element'
        );
 
-       equal(
+       assert.equal(
                mw.html.element(
                        'option', {
                                selected: true
@@ -487,7 +454,7 @@ test( 'mw.html', function () {
                'Attributes may have boolean values. True copies the attribute name to the value.'
        );
 
-       equal(
+       assert.equal(
                mw.html.element(
                        'option', {
                                value: 'foo',
@@ -498,12 +465,12 @@ test( 'mw.html', function () {
                'Attributes may have boolean values. False keeps the attribute from output.'
        );
 
-       equal( mw.html.element( 'div',
+       assert.equal( mw.html.element( 'div',
                        null, 'a' ),
                '<div>a</div>',
                'html.element DIV (content)' );
 
-       equal( mw.html.element( 'a',
+       assert.equal( mw.html.element( 'a',
                        { href: 'http://mediawiki.org/w/index.php?title=RL&action=history' }, 'a' ),
                '<a href="http://mediawiki.org/w/index.php?title=RL&amp;action=history">a</a>',
                'html.element DIV (attribs + content)' );
index 15265db..c823baf 100644 (file)
@@ -1,21 +1,12 @@
-module( 'mediawiki.user', QUnit.newMwEnvironment() );
+( function ( mw ) {
 
-test( '-- Initial check', function() {
-       expect(1);
+QUnit.module( 'mediawiki.user', QUnit.newMwEnvironment() );
 
-       ok( mw.user, 'mw.user defined' );
+QUnit.test( 'options', 1, function ( assert ) {
+       assert.ok( mw.user.options instanceof mw.Map, 'options instance of mw.Map' );
 });
 
-
-test( 'options', function() {
-       expect(1);
-
-       ok( mw.user.options instanceof mw.Map, 'options instance of mw.Map' );
-});
-
-test( 'User login status', function() {
-       expect(5);
-
+QUnit.test( 'user status', 9, function ( assert ) {
        /**
         * Tests can be run under three different conditions:
         *   1) From tests/qunit/index.html, user will be anonymous.
@@ -24,16 +15,42 @@ test( 'User login status', function() {
         */
 
        // Forge an anonymous user:
-       mw.config.set( 'wgUserName', null);
+       mw.config.set( 'wgUserName', null );
 
-       strictEqual( mw.user.name(), null, 'user.name should return null when anonymous' );
-       ok( mw.user.anonymous(), 'user.anonymous should reutrn true when anonymous' );
+       assert.strictEqual( mw.user.getName(), null, 'user.getName() returns null when anonymous' );
+       assert.strictEqual( mw.user.name(), null, 'user.name() compatibility' );
+       assert.assertTrue( mw.user.isAnon(), 'user.isAnon() returns true when anonymous' );
+       assert.assertTrue( mw.user.anonymous(), 'user.anonymous() compatibility' );
 
        // Not part of startUp module
        mw.config.set( 'wgUserName', 'John' );
 
-       equal( mw.user.name(), 'John', 'user.name returns username when logged-in' );
-       ok( !mw.user.anonymous(), 'user.anonymous returns false when logged-in' );
+       assert.equal( mw.user.getName(), 'John', 'user.getName() returns username when logged-in' );
+       assert.equal( mw.user.name(), 'John', 'user.name() compatibility' );
+       assert.assertFalse( mw.user.isAnon(), 'user.isAnon() returns false when logged-in' );
+       assert.assertFalse( mw.user.anonymous(), 'user.anonymous() compatibility' );
 
-       equal( mw.user.id(), 'John', 'user.id Returns username when logged-in' );
+       assert.equal( mw.user.id(), 'John', 'user.id Returns username when logged-in' );
 });
+
+QUnit.asyncTest( 'getGroups', 3, function ( assert ) {
+       mw.user.getGroups( function ( groups ) {
+               // First group should always be '*'
+               assert.equal( $.type( groups ), 'array', 'Callback gets an array' );
+               assert.equal( groups[0], '*', '"*"" is the first group' );
+               // Sort needed because of different methods if creating the arrays,
+               // only the content matters.
+               assert.deepEqual( groups.sort(), mw.config.get( 'wgUserGroups' ).sort(), 'Array contains all groups, just like wgUserGroups' );
+               QUnit.start();
+       });
+});
+
+QUnit.asyncTest( 'getRights', 1, function ( assert ) {
+       mw.user.getRights( function ( rights ) {
+               // First group should always be '*'
+               assert.equal( $.type( rights ), 'array', 'Callback gets an array' );
+               QUnit.start();
+       });
+});
+
+}( mediaWiki ) );
index 0e700ef..d9b2055 100644 (file)
@@ -1,73 +1,55 @@
-module( 'mediawiki.util', QUnit.newMwEnvironment() );
+QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment() );
 
-test( '-- Initial check', function() {
-       expect(1);
-
-       ok( mw.util, 'mw.util defined' );
+QUnit.test( 'rawurlencode', 1, function ( assert ) {
+       assert.equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
 });
 
-test( 'rawurlencode', function() {
-       expect(1);
-
-       equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
-});
-
-test( 'wikiUrlencode', function() {
-       expect(1);
-
-       equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
+QUnit.test( 'wikiUrlencode', 1, function ( assert ) {
+       assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
 });
 
-test( 'wikiGetlink', function() {
-       expect(3);
-
+QUnit.test( 'wikiGetlink', 3, function ( assert ) {
        // Not part of startUp module
        mw.config.set( 'wgArticlePath', '/wiki/$1' );
        mw.config.set( 'wgPageName', 'Foobar' );
 
        var hrefA = mw.util.wikiGetlink( 'Sandbox' );
-       equal( hrefA, '/wiki/Sandbox', 'Simple title; Get link for "Sandbox"' );
+       assert.equal( hrefA, '/wiki/Sandbox', 'Simple title; Get link for "Sandbox"' );
 
        var hrefB = mw.util.wikiGetlink( 'Foo:Sandbox ? 5+5=10 ! (test)/subpage' );
-       equal( hrefB, '/wiki/Foo:Sandbox_%3F_5%2B5%3D10_%21_%28test%29/subpage',
+       assert.equal( hrefB, '/wiki/Foo:Sandbox_%3F_5%2B5%3D10_%21_%28test%29/subpage',
                'Advanced title; Get link for "Foo:Sandbox ? 5+5=10 ! (test)/subpage"' );
 
        var hrefC = mw.util.wikiGetlink();
-       equal( hrefC, '/wiki/Foobar', 'Default title; Get link for current page ("Foobar")' );
+       assert.equal( hrefC, '/wiki/Foobar', 'Default title; Get link for current page ("Foobar")' );
 });
 
-test( 'wikiScript', function() {
-       expect(2);
-
+QUnit.test( 'wikiScript', 2, function ( assert ) {
        mw.config.set({
                'wgScript': '/w/index.php',
                'wgScriptPath': '/w',
                'wgScriptExtension': '.php'
        });
 
-       equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ), 'Defaults to index.php and is equal to wgScript' );
-       equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' );
+       assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ), 'Defaults to index.php and is equal to wgScript' );
+       assert.equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' );
 });
 
-test( 'addCSS', function() {
-       expect(3);
-
+QUnit.test( 'addCSS', 3, function ( assert ) {
        var $testEl = $( '<div>' ).attr( 'id', 'mw-addcsstest' ).appendTo( '#qunit-fixture' );
 
        var style = mw.util.addCSS( '#mw-addcsstest { visibility: hidden; }' );
-       equal( typeof style, 'object', 'addCSS returned an object' );
-       strictEqual( style.disabled, false, 'property "disabled" is available and set to false' );
+       assert.equal( typeof style, 'object', 'addCSS returned an object' );
+       assert.strictEqual( style.disabled, false, 'property "disabled" is available and set to false' );
 
-       equal( $testEl.css( 'visibility' ), 'hidden', 'Added style properties are in effect' );
+       assert.equal( $testEl.css( 'visibility' ), 'hidden', 'Added style properties are in effect' );
 
        // Clean up
        $( style.ownerNode ).remove();
 });
 
-test( 'toggleToc', function() {
-       expect(4);
-
-       strictEqual( mw.util.toggleToc(), null, 'Return null if there is no table of contents on the page.' );
+QUnit.asyncTest( 'toggleToc', 4, function ( assert ) {
+       assert.strictEqual( mw.util.toggleToc(), null, 'Return null if there is no table of contents on the page.' );
 
        var     tocHtml =
        '<table id="toc" class="toc"><tr><td>' +
@@ -80,57 +62,46 @@ test( 'toggleToc', function() {
                $toc = $(tocHtml).appendTo( '#qunit-fixture' ),
                $toggleLink = $( '#togglelink' );
 
-       strictEqual( $toggleLink.length, 1, 'Toggle link is appended to the page.' );
-
-       // Toggle animation is asynchronous
-       // QUnit should not finish this test() untill they are all done
-       stop();
+       assert.strictEqual( $toggleLink.length, 1, 'Toggle link is appended to the page.' );
 
        var actionC = function() {
-               start();
+               QUnit.start();
        };
        var actionB = function() {
-               start(); stop();
-               strictEqual( mw.util.toggleToc( $toggleLink, actionC ), true, 'Return boolean true if the TOC is now visible.' );
+               assert.strictEqual( mw.util.toggleToc( $toggleLink, actionC ), true, 'Return boolean true if the TOC is now visible.' );
        };
        var actionA = function() {
-               strictEqual( mw.util.toggleToc( $toggleLink, actionB ), false, 'Return boolean false if the TOC is now hidden.' );
+               assert.strictEqual( mw.util.toggleToc( $toggleLink, actionB ), false, 'Return boolean false if the TOC is now hidden.' );
        };
 
        actionA();
 });
 
-test( 'getParamValue', function() {
-       expect(5);
-
+QUnit.test( 'getParamValue', 5, function ( assert ) {
        var     url1 = 'http://example.org/?foo=wrong&foo=right#&foo=bad';
 
-       equal( mw.util.getParamValue( 'foo', url1 ), 'right', 'Use latest one, ignore hash' );
-       strictEqual( mw.util.getParamValue( 'bar', url1 ), null, 'Return null when not found' );
+       assert.equal( mw.util.getParamValue( 'foo', url1 ), 'right', 'Use latest one, ignore hash' );
+       assert.strictEqual( mw.util.getParamValue( 'bar', url1 ), null, 'Return null when not found' );
 
        var url2 = 'http://example.org/#&foo=bad';
-       strictEqual( mw.util.getParamValue( 'foo', url2 ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' );
+       assert.strictEqual( mw.util.getParamValue( 'foo', url2 ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' );
 
        var url3 = 'example.org?' + $.param({ 'TEST': 'a b+c' });
-       strictEqual( mw.util.getParamValue( 'TEST', url3 ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' );
+       assert.strictEqual( mw.util.getParamValue( 'TEST', url3 ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' );
 
        var url4 = 'example.org?' + $.param({ 'TEST': 'a b+c d' }); // check for sloppy code from r95332 :)
-       strictEqual( mw.util.getParamValue( 'TEST', url4 ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' );
+       assert.strictEqual( mw.util.getParamValue( 'TEST', url4 ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' );
 });
 
-test( 'tooltipAccessKey', function() {
-       expect(3);
-
-       equal( typeof mw.util.tooltipAccessKeyPrefix, 'string', 'mw.util.tooltipAccessKeyPrefix must be a string' );
-       ok( mw.util.tooltipAccessKeyRegexp instanceof RegExp, 'mw.util.tooltipAccessKeyRegexp instance of RegExp' );
-       ok( mw.util.updateTooltipAccessKeys, 'mw.util.updateTooltipAccessKeys' );
+QUnit.test( 'tooltipAccessKey', 3, function ( assert ) {
+       assert.equal( typeof mw.util.tooltipAccessKeyPrefix, 'string', 'mw.util.tooltipAccessKeyPrefix must be a string' );
+       assert.ok( mw.util.tooltipAccessKeyRegexp instanceof RegExp, 'mw.util.tooltipAccessKeyRegexp instance of RegExp' );
+       assert.ok( mw.util.updateTooltipAccessKeys, 'mw.util.updateTooltipAccessKeys' );
 });
 
-test( '$content', function() {
-       expect(2);
-
-       ok( mw.util.$content instanceof jQuery, 'mw.util.$content instance of jQuery' );
-       strictEqual( mw.util.$content.length, 1, 'mw.util.$content must have length of 1' );
+QUnit.test( '$content', 2, function ( assert ) {
+       assert.ok( mw.util.$content instanceof jQuery, 'mw.util.$content instance of jQuery' );
+       assert.strictEqual( mw.util.$content.length, 1, 'mw.util.$content must have length of 1' );
 });
 
 
@@ -138,12 +109,10 @@ test( '$content', function() {
  * Portlet names are prefixed with 'p-test' to avoid conflict with core
  * when running the test suite under a wiki page.
  * Previously, test elements where invisible to the selector since only
- * one element can have a given id. 
+ * one element can have a given id.
  */
-test( 'addPortletLink', function () {
+QUnit.test( 'addPortletLink', 8, function ( assert ) {
        var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo;
-       expect( 8 );
-
        pTestTb = '\
        <div class="portlet" id="p-test-tb">\
                <h5>Toolbox</h5>\
@@ -172,21 +141,21 @@ test( 'addPortletLink', function () {
        tbRL = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/ResourceLoader',
                'ResourceLoader', 't-rl', 'More info about ResourceLoader on MediaWiki.org ', 'l' );
 
-       ok( $.isDomElement( tbRL ), 'addPortletLink returns a valid DOM Element according to $.isDomElement' );
+       assert.ok( $.isDomElement( tbRL ), 'addPortletLink returns a valid DOM Element according to $.isDomElement' );
 
        tbMW = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/',
                'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org ', 'm', tbRL );
        $tbMW = $( tbMW );
 
 
-       equal( $tbMW.attr( 'id' ), 't-mworg', 'Link has correct ID set' );
-       equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
-       equal( $tbMW.next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing nextnode)' );
+       assert.equal( $tbMW.attr( 'id' ), 't-mworg', 'Link has correct ID set' );
+       assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
+       assert.equal( $tbMW.next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing nextnode)' );
 
        cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux' );
        $cuQuux = $(cuQuux);
 
-       equal(
+       assert.equal(
                $( '#p-test-custom #c-barmenu ul li' ).length,
                1,
                'addPortletLink did not add the item to all <ul> elements in the portlet (bug 35082)'
@@ -195,49 +164,43 @@ test( 'addPortletLink', function () {
        tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
 
-       equal( $( tbRLDM ).next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing CSS selector)' );
+       assert.equal( $( tbRLDM ).next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing CSS selector)' );
 
        caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
 
-       strictEqual( $tbMW.find( 'span').length, 0, 'No <span> element should be added for porlets without vectorTabs class.' );
-       strictEqual( $( caFoo ).find( 'span').length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
+       assert.strictEqual( $tbMW.find( 'span').length, 0, 'No <span> element should be added for porlets without vectorTabs class.' );
+       assert.strictEqual( $( caFoo ).find( 'span').length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
 });
 
-test( 'jsMessage', function() {
-       expect(1);
-
+QUnit.test( 'jsMessage', 1, function ( assert ) {
        var a = mw.util.jsMessage( "MediaWiki is <b>Awesome</b>." );
-       ok( a, 'Basic checking of return value' );
+       assert.ok( a, 'Basic checking of return value' );
 
        // Clean up
        $( '#mw-js-message' ).remove();
 });
 
-test( 'validateEmail', function() {
-       expect(6);
-
-       strictEqual( mw.util.validateEmail( "" ), null, 'Should return null for empty string ' );
-       strictEqual( mw.util.validateEmail( "user@localhost" ), true, 'Return true for a valid e-mail address' );
+QUnit.test( 'validateEmail', 6, function ( assert ) {
+       assert.strictEqual( mw.util.validateEmail( "" ), null, 'Should return null for empty string ' );
+       assert.strictEqual( mw.util.validateEmail( "user@localhost" ), true, 'Return true for a valid e-mail address' );
 
        // testEmailWithCommasAreInvalids
-       strictEqual( mw.util.validateEmail( "user,foo@example.org" ), false, 'Emails with commas are invalid' );
-       strictEqual( mw.util.validateEmail( "userfoo@ex,ample.org" ), false, 'Emails with commas are invalid' );
+       assert.strictEqual( mw.util.validateEmail( "user,foo@example.org" ), false, 'Emails with commas are invalid' );
+       assert.strictEqual( mw.util.validateEmail( "userfoo@ex,ample.org" ), false, 'Emails with commas are invalid' );
 
        // testEmailWithHyphens
-       strictEqual( mw.util.validateEmail( "user-foo@example.org" ), true, 'Emails may contain a hyphen' );
-       strictEqual( mw.util.validateEmail( "userfoo@ex-ample.org" ), true, 'Emails may contain a hyphen' );
+       assert.strictEqual( mw.util.validateEmail( "user-foo@example.org" ), true, 'Emails may contain a hyphen' );
+       assert.strictEqual( mw.util.validateEmail( "userfoo@ex-ample.org" ), true, 'Emails may contain a hyphen' );
 });
 
-test( 'isIPv6Address', function() {
-       expect(40);
-
+QUnit.test( 'isIPv6Address', 40, function ( assert ) {
        // Shortcuts
-       var     assertFalseIPv6 = function( addy, summary ) {
-                       return strictEqual( mw.util.isIPv6Address( addy ), false, summary );
-               },
-               assertTrueIPv6 = function( addy, summary ) {
-                       return strictEqual( mw.util.isIPv6Address( addy ), true, summary );
-               };
+       function assertFalseIPv6( addy, summary ) {
+               return assert.strictEqual( mw.util.isIPv6Address( addy ), false, summary );
+       }
+       function assertTrueIPv6( addy, summary ) {
+               return assert.strictEqual( mw.util.isIPv6Address( addy ), true, summary );
+       }
 
        // Based on IPTest.php > testisIPv6
        assertFalseIPv6( ':fc:100::', 'IPv6 starting with lone ":"' );
@@ -251,7 +214,7 @@ test( 'isIPv6Address', function() {
        'fc:100:a:d::',
        'fc:100:a:d:1::',
        'fc:100:a:d:1:e::',
-       'fc:100:a:d:1:e:ac::'], function( i, addy ){
+       'fc:100:a:d:1:e:ac::'], function ( i, addy ){
                assertTrueIPv6( addy, addy + ' is a valid IP' );
        });
 
@@ -272,7 +235,7 @@ test( 'isIPv6Address', function() {
        '::fc:100:a:d:1:e',
        '::fc:100:a:d:1:e:ac',
 
-       'fc:100:a:d:1:e:ac:0'], function( i, addy ){
+       'fc:100:a:d:1:e:ac:0'], function ( i, addy ){
                assertTrueIPv6( addy, addy + ' is a valid IP' );
        });
 
@@ -297,16 +260,14 @@ test( 'isIPv6Address', function() {
        assertFalseIPv6( 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
 });
 
-test( 'isIPv4Address', function() {
-       expect(11);
-
+QUnit.test( 'isIPv4Address', 11, function ( assert ) {
        // Shortcuts
-       var     assertFalseIPv4 = function( addy, summary ) {
-                       return strictEqual( mw.util.isIPv4Address( addy ), false, summary );
-               },
-               assertTrueIPv4 = function( addy, summary ) {
-                       return strictEqual( mw.util.isIPv4Address( addy ), true, summary );
-               };
+       function assertFalseIPv4( addy, summary ) {
+               assert.strictEqual( mw.util.isIPv4Address( addy ), false, summary );
+       }
+       function assertTrueIPv4( addy, summary ) {
+               assert.strictEqual( mw.util.isIPv4Address( addy ), true, summary );
+       }
 
        // Based on IPTest.php > testisIPv4
        assertFalseIPv4( false, 'Boolean false is not an IP' );
index 50d3754..9cfdae4 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -65,19 +65,22 @@ function wfThumbHandle404() {
        # that to the 404 handler, and puts the original request in REDIRECT_URL.
        if ( isset( $_SERVER['REDIRECT_URL'] ) ) {
                # The URL is un-encoded, so put it back how it was
-               $uri = str_replace( "%2F", "/", urlencode( $_SERVER['REDIRECT_URL'] ) );
-               # Just get the URI path (REDIRECT_URL is either a full URL or a path)
-               if ( $uri[0] !== '/' ) {
-                       $bits = wfParseUrl( $uri );
-                       if ( $bits && isset( $bits['path'] ) ) {
-                               $uri = $bits['path'];
-                       }
-               }
+               $uriPath = str_replace( "%2F", "/", urlencode( $_SERVER['REDIRECT_URL'] ) );
        } else {
-               $uri = $_SERVER['REQUEST_URI'];
+               $uriPath = $_SERVER['REQUEST_URI'];
+       }
+       # Just get the URI path (REDIRECT_URL/REQUEST_URI is either a full URL or a path)
+       if ( substr( $uriPath, 0, 1 ) !== '/' ) {
+               $bits = wfParseUrl( $uriPath );
+               if ( $bits && isset( $bits['path'] ) ) {
+                       $uriPath = $bits['path'];
+               } else {
+                       wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
+                       return;
+               }
        }
 
-       $params = wfExtractThumbParams( $uri ); // basic wiki URL param extracting
+       $params = wfExtractThumbParams( $uriPath ); // basic wiki URL param extracting
        if ( $params == null ) {
                wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
                return;
@@ -265,22 +268,22 @@ function wfStreamThumb( array $params ) {
  * Extract the required params for thumb.php from the thumbnail request URI.
  * At least 'width' and 'f' should be set if the result is an array.
  *
- * @param $uri String Thumbnail request URI path
+ * @param $uriPath String Thumbnail request URI path
  * @return Array|null associative params array or null
  */
-function wfExtractThumbParams( $uri ) {
+function wfExtractThumbParams( $uriPath ) {
        $repo = RepoGroup::singleton()->getLocalRepo();
 
-       $zoneURI = $repo->getZoneUrl( 'thumb' );
-       if ( substr( $zoneURI, 0, 1 ) !== '/' ) {
-               $bits = wfParseUrl( $zoneURI );
-               if ( $bits && isset( $bits['path'] ) ) {
-                       $zoneURI = $bits['path'];
-               } else {
-                       return null;
-               }
+       $zoneUriPath = $repo->getZoneHandlerUrl( 'thumb' )
+               ? $repo->getZoneHandlerUrl( 'thumb' ) // custom URL
+               : $repo->getZoneUrl( 'thumb' ); // default to main URL
+       // URL might be relative ("/images") or protocol-relative ("//lang.site/image")
+       $bits = wfParseUrl( wfExpandUrl( $zoneUriPath, PROTO_INTERNAL ) );
+       if ( $bits && isset( $bits['path'] ) ) {
+               $zoneUriPath = $bits['path'];
+       } else {
+               return null;
        }
-       $zoneUrlRegex = preg_quote( $zoneURI );
 
        $hashDirRegex = $subdirRegex = '';
        for ( $i = 0; $i < $repo->getHashLevels(); $i++ ) {
@@ -288,10 +291,11 @@ function wfExtractThumbParams( $uri ) {
                $hashDirRegex .= "$subdirRegex/";
        }
 
-       $thumbUrlRegex = "!^$zoneUrlRegex/((archive/|temp/)?$hashDirRegex([^/]*)/([^/]*))$!";
+       $thumbPathRegex = "!^" . preg_quote( $zoneUriPath ) .
+               "/((archive/|temp/)?$hashDirRegex([^/]*)/([^/]*))$!";
 
        // Check if this is a valid looking thumbnail request...
-       if ( preg_match( $thumbUrlRegex, $uri, $matches ) ) {
+       if ( preg_match( $thumbPathRegex, $uriPath, $matches ) ) {
                list( /* all */, $rel, $archOrTemp, $filename, $thumbname ) = $matches;
                $filename = urldecode( $filename );
                $thumbname = urldecode( $thumbname );